본문 바로가기
라즈베리파이_피코_피코 W/circuitPython

05. Circuit 파이썬 라즈베리파이 피코 W ADC 제어

by 커피하는조이 2023. 3. 14.
728x90
반응형
SMALL

안녕하세요 땜블리 입니다.

라즈베리파이 피코 베이직 트레이닝 보드를 이용한 ADC 제어 해보겠습니다.

베이직 트레이닝 보드는 아래에서 확인이 가능합니다.

https://ttcw.tistory.com/4

 

라즈베리파이 피코 베이직 트레이닝보드 구성

라즈베리파이 피코 보드의 펌웨어실습을 위한 베이직 트레이닝보드를 소개 합니다. 현재 네이버 스마트스토어에서 판매가 진행되고 있습니다. 라즈베리파이 피코 베이직 트레이닝 보드 라즈베

ttcw.tistory.com

 

1) ADC 제어 구동 원리

(1) 동작설명

Analog to Digital Converter를 줄여 ADC 라고 하며 아날로그 신호를 디지털 신호로 변환을 말합니다.

아날로그 신호란 시간 축을 기준으로 연속적인 신호이며 이 신호를 양자화 시켜 디지털 신호로 바꿉 니다.

이때 3가지 과정을 거치는 대 표본화, 양자화, 부호화입니다.

 

표본화 (샤논의 표본화 정리)

일정한 시간 간격으로 표본을 채취할 때 표본화를 수행할 아날로그 신호의 주파수의 2배의 속도로 표본화를 수행하여 얻는다면 그 표본화된 데이터를 바탕으로 원래 신호를 거의 완벽하게 재생이 가능하다는 것에 있습니다.

 

양자화 (Quantization)

양자화는 샘플링된 아날로그신호를 일정한 전압 레벨의 구간을 나눈 영역에 강제적으로 대응 시키는 과정입니다.

양자화를 할 때 중요한 것이 바로 해상도(Resolution)입니다. 전압 레벨 구간을 촘촘하게 나누면 나눌수록 처리할 데이터의 양은 많아지지만 원래의 아날로그 신호에 매우 근사하게 값을 복원할 수 있습니다.

 

부호화 (Encoding)

부호화란 표본화와 양자화가 상호적으로 이뤄진 후에 얻어진 데이터를 가지고 여기에 2진수의 코드를 부여하는 것입니다.

해상도가 4-Bit라면 각각의 경우에 부여할 수 있는 코드는 0000, 0001, 0010, 0011  1011, 1100, 1101, 1110, 1111 16개의 코드를 부여할 수 있습니다.

 

 

 

 

2) CdS 센서를 이용한 제어

(1) 동작설명

CDS는 반도체에 빛이 닿으면 전자의 움직임과 정공의 갯수가 증가하고, 조사된 빛 에너지에 비례하 여 전류가 증가하는 원리를 이용한 소자입니다.

 

from analogio import AnalogIn # 아날로그 신호를 받기위한 함수 가져오기

CDS = AnalogIn(board.GP27) #  아날로그 신호 읽는 핀 설정

def get_voltage(pin): # 아날로그 신호를 V 레벨로 변경하는 함수
print((get_voltage(CDS))) # V 레벨 출력

 

(2) 소스코드

code.py

import time
import board
from analogio import AnalogIn

CDS = AnalogIn(board.GP27)

def get_voltage(pin):
    return (pin.value * 3.3) / 65536


while True:
    print((get_voltage(CDS)))
    time.sleep(0.1)

 

 

(3) 동작 결과

cds 값이 V값으로 변경되어 출력 됩니다.

 

3) 가변저항 값을 출력하기

(1) 동작설명

저항 물질이 많고 적고에 따라 저항 값이 변하는 것이 가변 저항(영어: Potentiometer 포텐셔미터)입니다.

 

> 대부분의 가변저항의 최소 저항 값은 0옴으로 정해져있고 최대저항은 제품마다 1KΩ, 4.7KΩ, 10KΩ, 20KΩ, 500KΩ, 1MΩ 등의 여러 값으로 정해져 있습니다.(오차율 감안해야 합니다.)

 

from analogio import AnalogIn # 아날로그 신호를 받기위한 함수 가져오기

CDS = AnalogIn(board.GP26) #  아날로그 신호 읽는 핀 설정

def get_voltage(pin): # 아날로그 신호를 V 레벨로 변경하는 함수
print((get_voltage(CDS))) # V 레벨 출력

 

while True: (무한루프)

 

반응형

(2) 소스코드

code.py

import time
import board
from analogio import AnalogIn

VR = AnalogIn(board.GP26)

def get_voltage(pin):
    return (pin.value * 3.3) / 65536


while True:
    print("VR =",(get_voltage(VR)))
    time.sleep(0.1)

(3) 동작 결과

 

가변저항 값이 V값으로 변경되어 출력 됩니다.

728x90
반응형
LIST

댓글