행복한 하루
[MicroPython] Raspberry Pi PICO를 이용하여 DC 전압 측정 센스 테스트(SZH-SSBH-043) - 1 본문
[MicroPython] Raspberry Pi PICO를 이용하여 DC 전압 측정 센스 테스트(SZH-SSBH-043) - 1
변화의 물결 2023. 5. 17. 17:14
안녕하세요.
이전 Arduino Nano IoT 33을 이용해서 DC 전압 측정 모듈을 테스트해 보았습니다. Pico 소스를 적용하려고 하니 약간의 변경이 필요해서 변경된 부분에 대해서 공유드립니다.
기본 SZH-SSBH-043 모듈을 이용한 전압 계산식 내용은 이전 글을 참조하시면 됩니다.
1. Raspberry Pi PICO의 ADC 확인
- ADC(Analog to Digital Converter)는 아날로그 전기신호를 디지털 전기 신호로 변환하는 전자회로입니다.
- Raspberry Pi PICO 에는 12bit 해상도를 가지는 ADC 회로가 장착되어 있습니다. 여기서 해상도라고 하면 전압을 얼마 단위로 분해(표현)가 가능한지를 나타내는 것이라고 생각하면 됩니다.
- 12bit는 4096 단계로 Ref 전압을 나눌 수 있습니다. 예를 들어, 분해능(Resolution)이 12bit이고 레퍼런스 전압이 3.3이면 3.3/4095 = 0.8mV이고 ADC핀에 0 ~ 3.3V의 아날로그 신호가 들어오면 0 ~ 4095 디지털 값으로 프로그램에서 받을 수 있습니다. 받은 디지털 값 곱하기 Conversion_factor(0.8mv)를 곱해주면 원래 들어온 전압을 구할 수 있습니다.
2. 연결 방법
- ADC 0 핀에 전압측정 모듈 S핀을 연결하고 GND와 -를 연결합니다.
3. 소스 확인
- 여기서, 확인해야 할 것이 PICO의 ADC 분해능력은 12bit인데 소스에서 ADC 읽을 때는 read_u16() 함수를 사용해서 분해능이 16비트인 것처럼 사용하고 있습니다. 처음에 저도 아무 생각 없이 사용했는데, 이 내용에 대해서 정리해 놓으신 분이 있어서 아래 “참고 사이트 2” 글을 참고하시면 됩니다.
- 요약하면, 12비트는 맞는데 스케일 업해서 16비트처럼 해놓았다고 합니다. 스케일업 했다고 16비트처럼 읽을 수 있는 것이 아니라 중간중간 단위는 12비트 값에 맞게 매핑된다고 생각하면 될 듯합니다.
- 아마 읽기 편한 단위이기도 하고 해상도 높은 보드 같이 호환이 될 수 있도록 하기 위해서가 아닐까 합니다.
from machine import ADC
from utime import sleep
import time
volt_pin = ADC(26)
while True:
input_vol = volt_pin.read_u16()
Vin = (input_vol * 3.3) / 65535.0; # 3.3 is Ref voltage
cal_vol = Vin / (7500.0/(30000.0+7500.0))
print("\nInput Analog : ", input_vol)
print("Voltage : ", cal_vol)
sleep(1)
4. 작동 확인
- 테스트기로 측정하면 12.91V로 나오는 배터리 값이 나오고 DC 측정 모듈을 통해서 얻은 값 평균을 보면 대략 12.89V 가 나왔습니다. 출력 화면으로 보면 오차가 0.2V인데, 조금 출렁이기도 해서 오차가 0.7V까지 될 수 있다고 봐야 할 것 같습니다. 그래서 보정하는 코드가 필요할 듯합니다.
감사합니다.
<참고 사이트>
1. 전압계산식 참조
https://remnant24c.tistory.com/457
2. 라즈베리파이 피코 내장 온도센서 사용하는 방법
https://diyver.tistory.com/192
'RaspberryPi > Raspberry Pi Pico' 카테고리의 다른 글
[PICO] Raspberry Pi PICO(MicroPython)를 이용한 wav 출력테스트 (0) | 2023.07.04 |
---|---|
[PICO] Raspberry Pi PICO를 이용한 데시벨 측정 센서 테스트(SEN0232) (0) | 2023.06.30 |