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

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

by 땜블리 2023. 2. 27.
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, 111116개의 코드를 부여할 수 있습니다.

 

 

SMALL
반응형

2) CdS 센서를 이용한 제어

(1) 동작설명

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

 

 

 

(2) 코드작성

main.py

import adc_cds

adc_cds.py

from machine import UART, Pin, ADC
from time import sleep
led1 = Pin(2,Pin.OUT)
led2 = Pin(3,Pin.OUT)
CdS_adc = ADC(Pin(27))
uart0 = UART(0, baudrate=115200, bits=8, parity=None, stop=1, tx=Pin(16), rx=Pin(17))# UART 설정
uart0.write("pico sensorBoard Test\n")
whileTrue:
    
    CdSData = CdS_adc.read_u16()
    CdSDataV = (3.3/65535) * CdSData
    CdSDataV = round(CdSDataV,2)
    led1.value(0)
    print('CdS Data = {} / CdS Volt = {}V'.format(CdSData,CdSDataV))
    led1.value(1)
    sleep(0.5)

(3) 동작결과

 

 

3) 가변저항을 이용한 제어

(1) 동작설명

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

 

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

 

CdS_adc = ADC(Pin(27)) 27 pin을 아날로그 입력 핀으로 설정

uart0 = UART(0, baudrate=115200, bits=8, parity=None, stop=1, tx=Pin(16), rx=Pin(17))

16번핀 17번핀을 UART 통신으로 설정 속도는 1152008비트 스탑 비트는 1 로 설정

uart0.write("pico sensorBoard Test\n") uart 통신으로 pico sensorBoard Test\n 출력

while True: (무한루프)

 

(2) 코드작성

main.py

import adc_vr

adc_vr.py

from machine import UART, Pin, ADC
from time import sleep
led1 = Pin(2,Pin.OUT)
led2 = Pin(3,Pin.OUT)
CdS_adc = ADC(Pin(27))
uart0 = UART(0, baudrate=115200, bits=8, parity=None, stop=1, tx=Pin(16), rx=Pin(17))# UART 설정
uart0.write("pico sensorBoard Test\n")
while True:
    
    CdSData = CdS_adc.read_u16()
    CdSDataV = (3.3/65535) * CdSData
    CdSDataV = round(CdSDataV,2)
    led1.value(0)
    print('CdS Data = {} / CdS Volt = {}V'.format(CdSData,CdSDataV))
    led1.value(1)
    sleep(0.5)

(3) 동작결과

왼쪽 가운데에 있는 가변저항을 돌려보면 위와 같은 데이터를 얻을 수 있습니다.

728x90
반응형
LIST

댓글