ESP32 - 수위 센서 | ESP32 - Water Sensor

이 튜토리얼은 ESP32와 수분 센서를 사용하여 강우 감지, 물 새는 것 감지, 탱크 오버플로 감지 및 수위 측정하는 방법을 안내합니다.

준비물

1×ESP-WROOM-32 Dev Module 쿠팡 | Amazon
1×USB Cable Type-C 쿠팡 | Amazon
1×Water level sensor 쿠팡 | Amazon
1×Breadboard 쿠팡 | Amazon
1×Jumper Wires Amazon
1×(Optional) DC Power Jack 쿠팡 | Amazon
1×(Recommended) Screw Terminal Expansion Board for ESP32 쿠팡 | Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

물 수위 센서에 대하여

수위 센서 핀배열

물 수위 센서에는 3개의 핀이 포함됩니다:

  • S (Signal) 핀: 이 핀은 물의 수위에 비례하는 아날로그 전압을 출력합니다. 이 핀은 ESP32의 아날로그 입력 핀에 연결되어야 합니다.
  • + (VCC) 핀: 이 핀을 3.3V 혹은 5V에 연결하세요.
  • - (GND) 핀: 이 핀을 GND에 연결하세요.
water sensor pinout

수위 센서가 작동하는 방식

단순히 말해서, 센서가 물에 더 많이 잠길수록 S 핀의 출력 전압이 높아집니다. 전압을 측정함으로써 우리는 물의 수위를 알 수 있습니다.

선연결

이론적으로, 우리는 센서의 VCCGND 핀을 각각 ESP32의 3.3V와 GND 핀에 연결함으로써 수분 센서에 전력을 공급할 수 있습니다.

그러나 그 방법은 실제로 권장되지 않습니다. 만약 우리가 수분 센서에 지속적으로 전력을 공급한다면, 수분 센서는 습한 환경에 의해 전기화학적으로 더 빠르게 부식됩니다 ⇒ 센서에서 값을 읽을 때만 수분 센서에 전력을 공급하는 것이 더 좋습니다. 이를 위해, 우리는 센서의 VCC 핀을 ESP32의 디지털 핀에 연결하고, 읽기 전에 ESP32의 핀을 HIGH로, 읽은 후에는 LOW로 프로그래밍할 수 있습니다.

ESP32 Water Sensor wiring diagram

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

ESP32 및 다른 구성 요소에 전원을 공급하는 방법에 대해 잘 알지 못하는 경우, 다음 튜토리얼에서 안내를 찾을 수 있습니다: ESP32 전원 공급 방법.

ESP32 코드 - 수위 센서에서 값 읽기

/* * 이 ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32/esp32-water-sensor */ #define POWER_PIN 17 // ESP32 핀 GPIO17이 센서의 VCC 핀에 연결됨 #define SIGNAL_PIN 36 // ESP32 핀 GPIO36 (ADC0)가 센서의 신호 핀에 연결됨 int value = 0; // 센서 값 저장 변수 void setup() { Serial.begin(9600); pinMode(POWER_PIN, OUTPUT); // 핀을 출력으로 설정함 digitalWrite(POWER_PIN, LOW); // 센서를 끔 } void loop() { digitalWrite(POWER_PIN, HIGH); // 센서를 켬 delay(10); // 10밀리초 기다림 value = analogRead(SIGNAL_PIN); // 센서에서 아날로그 값을 읽음 digitalWrite(POWER_PIN, LOW); // 센서를 끔 Serial.print("The water sensor value: "); Serial.println(value); delay(1000); }

사용 방법

  • ESP32를 처음 사용하는 경우, Arduino IDE에서 ESP32 환경 설정 방법을 참조하세요.
  • 위의 코드를 복사하여 Arduino IDE에 붙여넣으세요.
  • Arduino IDE에서 Upload 버튼을 클릭하여 ESP32 보드에 코드를 컴파일하고 업로드하세요.
  • 센서를 물에 천천히 담그세요 (물이 담긴 유리 컵에).
  • 시리얼 모니터에서 결과를 확인하세요. 결과는 아래와 같습니다: 센서가 아무것도 만지지 않았을 때 값은 0입니다.
COM6
Send
The water sensor value: 0 The water sensor value: 0 The water sensor value: 0 The water sensor value: 25 The water sensor value: 196 The water sensor value: 587 The water sensor value: 625 The water sensor value: 1434 The water sensor value: 1449 The water sensor value: 1454 The water sensor value: 1469 The water sensor value: 2525 The water sensor value: 2526 The water sensor value: 2558
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ NOTE THAT:

물 감지기는 완전히 잠기도록 설계되지 않았으며, PCB에 노출된 트레이스만이 물에 잠길 수 있습니다. 설치 시 주의하십시오.

물 샐피 감지하는 방법

물 새는 것, 강우, 그리고 탱크 넘침을 감지하기 위해 센서 값과 임계값을 비교하기만 하면 됩니다. 이 임계값은 본 튜토리얼의 교정 부분에서 결정됩니다.

물 샘을 감지하면 ESP32가 LED를 켜도록 합시다.

배선도

ESP32 Water Sensor LED wiring diagram

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

ESP32 코드 - 물 새는 감지

/* * 이 ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32/esp32-water-sensor */ #define LED_PIN 21 // ESP32 핀 GPIO21이 LED 핀에 연결됨 #define POWER_PIN 17 // ESP32 핀 GPIO17이 센서의 VCC 핀에 연결됨 #define SIGNAL_PIN 36 // ESP32 핀 GPIO36 (ADC0)이 센서의 신호 핀에 연결됨 #define THRESHOLD 1000 int value = 0; // 센서 값 저장을 위한 변수 void setup() { Serial.begin(9600); pinMode(LED_PIN, OUTPUT); // 핀을 출력으로 설정 pinMode(POWER_PIN, OUTPUT); // 핀을 출력으로 설정 digitalWrite(POWER_PIN, LOW); // 센서를 끔 digitalWrite(LED_PIN, LOW); // LED를 끔 } void loop() { digitalWrite(POWER_PIN, HIGH); // 센서를 켬 delay(10); // 10밀리초 기다림 value = analogRead(SIGNAL_PIN); // 센서에서 아날로그 값 읽기 digitalWrite(POWER_PIN, LOW); // 센서를 끔 if (value > THRESHOLD) { Serial.print("The water is detected"); digitalWrite(LED_PIN, HIGH); // LED를 켬 } else { digitalWrite(LED_PIN, LOW); // LED를 끔 } }

물의 수위를 측정하는 방법

아래 코드는 수위를 4단계로 나눕니다.

/* * 이 ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32/esp32-water-sensor */ #define POWER_PIN 17 // ESP32 핀 GPIO17이 센서의 VCC 핀에 연결됨 #define SIGNAL_PIN 36 // ESP32 핀 GPIO36 (ADC0)이 센서의 신호 핀에 연결됨 #define SENSOR_MIN 0 #define SENSOR_MAX 521 int value = 0; // 센서 값 저장 변수 int level = 0; // 수위 저장 변수 void setup() { Serial.begin(9600); pinMode(POWER_PIN, OUTPUT); // D7 핀을 출력으로 구성 digitalWrite(POWER_PIN, LOW); // 센서 OFF } void loop() { digitalWrite(POWER_PIN, HIGH); // 센서 ON delay(10); // 10 밀리초 기다림 value = analogRead(SIGNAL_PIN); // 센서에서 아날로그 값 읽기 digitalWrite(POWER_PIN, LOW); // 센서 OFF level = map(value, SENSOR_MIN, SENSOR_MAX, 0, 4); // 4 단계 Serial.print("Water level: "); Serial.println(level); delay(1000); }

※ NOTE THAT:

  • SENSOR_MIN과 SENSOR_MAX는 보정 과정에 의해 결정됩니다.
  • 위의 매핑 방법은 정확하지 않습니다. 그러나 많은 응용 프로그램에서는 허용됩니다.

동영상

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!