아두이노 - 물 센서 | Arduino - Water Sensor

수위 센서 또는 수위 감지기는 물의 누출, 강우, 탱크 넘침 또는 물의 수위를 측정하는 데 사용됩니다. 이 튜토리얼에서는 다음을 배울 것입니다:

준비물

1×Arduino Uno Amazon
1×USB 2.0 cable type A/B 쿠팡 | Amazon
1×Water level sensor 쿠팡 | Amazon
1×Jumper Wires Amazon
1×(Optional) 9V Power Adapter for Arduino Amazon
1×(Recommended) Screw Terminal Block Shield for Arduino Uno 쿠팡 | Amazon
1×(Optional) Transparent Acrylic Enclosure For Arduino Uno Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

수위 센서에 관하여

물 수위 센서 핀배열

물 수위 센서에는 3개의 핀이 있습니다:

  • S (신호) 핀: 아날로그 출력으로 아두이노의 아날로그 입력 중 하나에 연결됩니다.
  • + (VCC) 핀: 센서에 전력을 공급합니다. 3.3V – 5V 사이로 센서에 전력을 공급하는 것이 권장됩니다.
  • - (GND) 핀: 접지 연결입니다.
water sensor pinout

※ NOTE THAT:

센서의 VCC 핀에 공급되는 전압에 따라 신호 핀의 아날로그 출력 값이 변합니다.

수위 센서가 작동하는 방식

단순히 말해서, 센서가 물에 더 많이 잠길수록 신호 핀의 출력 전압이 더 높아집니다.

더 깊이 살펴보자.

이 섹션에는 압도될 수 있는 고급 정보가 포함되어 있습니다. 내용에 대해 확신이 없다면 건너뛰어 다음 섹션으로 이동하십시오.

센서에는 노출된 구리 트레이스가 열 개 있습니다. 다섯 개는 전원 트레이스이고 다섯 개는 센스 트레이스입니다. 이 트레이스들은 서로 교차하도록 병렬로 배치되어 있어서, 두 개의 전원 트레이스 사이마다 하나의 센스 트레이스가 있습니다. 이 트레이스들은 물에 잠겼을 때 물이 다리를 형성할 때만 연결됩니다.

물의 높이에 따라 저항이 변하는 가변 저항기(포텐쇼미터와 같이)처럼 흔적이 작용합니다.

  • 저항의 변화는 센서 상단부터 물 표면까지의 거리에 해당합니다.
  • 저항은 물의 높이에 반비례합니다:
  • 센서가 잠긴 물의 양이 많을수록 전도성이 좋아지고, 저항은 낮아집니다.
  • 센서가 잠긴 물의 양이 적을수록 전도성이 나빠지고, 저항은 높아집니다.
  • 센서는 저항에 따라 출력 전압을 생산합니다.

전압을 측정함으로써 우리는 수위를 결정할 수 있습니다.

선연결

이론적으로 센서에 전력을 공급하기 위해 센서의 VCCGND 핀을 아두이노의 5v와 GND 핀에 각각 연결할 수 있습니다.

실제로는 그 방법이 권장되지 않습니다. 습한 환경에서 센서에 지속적으로 전력을 공급하면, 센서가 전기화학적으로 더 빨리 부식되어 센서의 수명이 단축됩니다. 이 문제를 해결하기 위해, 센서의 값을 읽을 때만 센서에 전원을 공급하고, 그 외의 시간에는 센서에 전원을 공급하지 않는 것이 좋습니다. 이는 아두이노의 디지털 핀에 센서의 VCC 핀을 연결하고, 읽기 전후로 아두이노의 핀을 각각 HIGH LOW로 설정함으로써 수행할 수 있습니다.

Arduino Water Sensor wiring diagram

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

아두이노 코드 - 수위 센서에서 값 읽기

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

사용 방법

  • 위 코드를 복사하고 Arduino IDE로 엽니다.
  • Arduino IDE에서 Upload 버튼을 클릭하여 코드를 Arduino로 업로드합니다.
  • 센서를 천천히 물에 담그세요(한 잔의 물).
  • 시리얼 모니터에서 결과를 확인하세요. 센서가 아무것도 만지지 않을 때 값은 0입니다.
COM6
Send
Sensor value: 0 Sensor value: 0 Sensor value: 0 Sensor value: 25 Sensor value: 97 Sensor value: 284 Sensor value: 428 Sensor value: 435 Sensor value: 441 Sensor value: 455 Sensor value: 467 Sensor value: 521 Sensor value: 528 Sensor value: 553
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ NOTE THAT:

센서는 완전히 잠기도록 설계되지 않았으며, PCB의 노출된 트레이스만이 물과 접촉할 수 있습니다. 설치 시 주의해 주십시오.

물 새는 것을 탐지하는 방법

누수, 강우 및 탱크 오버플로를 감지하기 위해, 우리는 단지 측정값을 임계값과 비교하면 됩니다. 임계값은 이 튜토리얼의 보정 부분에서 결정됩니다.

구체적인 예를 들어 봅시다. 아두이노는 물이 감지되면 LED를 켭니다.

배선도

Arduino Water Sensor LED wiring diagram

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

아두이노 코드 - 물 새는 것 감지

/* * 이 Arduino 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-water-sensor */ #define LED_PIN 2 #define POWER_PIN 7 #define SIGNAL_PIN A5 #define THRESHOLD 300 int value = 0; // 센서 값 저장 변수 void setup() { Serial.begin(9600); pinMode(LED_PIN, OUTPUT); // D2 핀을 출력으로 설정 pinMode(POWER_PIN, OUTPUT); // D7 핀을 출력으로 설정 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단계로 나눕니다.

/* * 이 Arduino 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-water-sensor */ #define POWER_PIN 7 #define SIGNAL_PIN A5 #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); // 센서 끄기 } void loop() { digitalWrite(POWER_PIN, HIGH); // 센서 켜기 delay(10); // 10밀리초 기다림 value = analogRead(SIGNAL_PIN); // 센서에서 아날로그 값 읽기 digitalWrite(POWER_PIN, LOW); // 센서 끄기 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는 보정 과정을 통해 결정됩니다.
  • 위의 매핑 방법은 정확하지 않습니다. 그러나 많은 응용 프로그램에서는 받아들일 수 있습니다. 정확하게 하고 싶다면 각 레벨에 대한 임계값을 측정할 수 있습니다. 보정 부분을 참조하십시오.

수위 센서 교정

센서의 출력 값은 물의 수위뿐만 아니라 물의 전도성에도 달려 있습니다. 순수한 물은 전도성이 없습니다. 물속에 미네랄과 불순물이 포함되어 있으면 전도성이 있습니다. 물의 전도성이 클수록 센서는 더 민감합니다. 한편, 출력 값은 센서의 VCC 핀에 공급된 전압에 따라서도 달라집니다.

물 센서의 정확한 판독 값을 얻기 위해, 모니터링할 특정 유형의 물에 대해 센서를 보정할 것을 권장합니다.

액션을 촉발하는 임계값을 결정하기 전에, 테스트를 수행하여 센서에서 읽은 실제 값을 측정해야 합니다.

테스트하는 방법:

  • 위의 스케치를 센서 값을 읽기 위해 사용하세요.
  • 원하는 수준을 임계값으로 설정하려면 센서를 물에 담그세요.
  • 센서가 시리얼 모니터에 출력하는 값을 기록하세요.
  • 그 값을 트리거할 동작의 임계값으로 사용하세요.

이 테스트는 몇 번의 시행착오가 필요할 수 있습니다.

이 검사는 또한 다음을 찾는 데 사용될 수 있습니다:

  • 센서가 물에 잠기지 않았을 때 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!