ESP32 보드의 Analog 입력 및 토양수분센서 사용하기

ESP32 보드의 Analog 입력 및 토양수분센서 사용하기

앞선 글에서 ESP32보드로 디지털 입력 신호를 받는 예를 소개했으나( https://kongyine.com/223274392267), 센서들 중 일부는 아날로그 신호를 제공하는 것도 있으므로, ESP32보드에서 아날로그 신호를 입력으로 받는 것을 Test 해 보기로 했다.

과거 라즈베리 파이 피코 보드에서 아날로그 입력을 받을 때 사용했던 코드를 그대로 사용하되, ESP32보드와 피코 보드는 아날로그 입력 핀 이 다르므로, 다음 피운 맵을 참조하여, 핀 번호만 GP4로 변경하였다.

결과적으로 사용하는 코드는 다음과 같다.

import machine
import utime

Light = machine.ADC(4)
conversion_factor = 3.3 / (65535)
while True:
 inputvolt = Light.read_u16() * conversion_factor
 print(Light)
print(Light.read_u16())
print("input volt = " , inputvolt)
 utime.sleep(0.2)

그리고, 아날로그 신호 입력원으로는 가변저항(varistor)를 이용하였다.

가변 저항 양 끝단에 3.3V와 GND를 연결하고 중간 부분에서 전압 신호를 따서 Voltage Divider 기능을 하도록 구성했다.

이 가변저항에서 나오는 신호선을 ESP32보드의 DP 4번에 연결하고 동작시켜 보았다.

동작하는 동안 가변저항을 조절하면서 입력되는 전압을 화면에 표시하였는데, 결과는 다음과 같다.

여기에 다음과 같이 가변저항 대신 토양수분 센서를 연결하고, 수분정도에 따라 전압값이 어떻게 달라지는지 살펴보았다.

토양수분센서는 가변저항과 거의 비슷한 역할을 하는데, 양단에 가해진 전압중 센서의 저항값이 높으면 측정되는 전압도 높아지고, 센서에 전기저항이 줄어들면, 저항값이 낮아지면서 측정되는 전압값도 낮아지게 된다. 센서의 저항값은 주변 토양의 수분상태에 따라, 달라지게 되는 점을 이용한 것이다.

먼저 대기중에서 건조한 상태로 수분센서를 연결한 결과, 다음과 같이 약 1.9V의 입력전압이 측정되었다.

그리고 토양 대신 수분에 적신 물휴지로 센서를 감싼 상태에서 측정한 결과, 센서의 저항값이 낮아져 다음과 같이 약 1.15~1.20V의 전압값이 측정되었다.

즉, 이렇게 입력되는 아날로그 전압값을 이용하면, 측정하는 토양의 수분 상태를 알수 있는 것이다.