본문 바로가기

카테고리 없음

아두이노 비접촉수위센서 XKC-Y25-V 사용하기

반응형

 

이번 시간에는 아두이노를 활용하여 비접촉수위센서(XKC-Y25-V)를 사용해 보자.

 

비접촉수위센서(워터레벨센서)란 물이 담긴 용기 안에 센서를 집어넣지 않고 용기 밖에서 수위를 측정할 수 있는 센서다. 비접촉이란 말 대로 물속에 집어넣어 측정하는 게 아니라 밀폐된 용기 밖에서 수위가 어느 정도 올라왔는지 감지가 가능한 센서다.

 

1. 먼저 아두이노에서 센서값이 어떻게 측정되는지 살펴보고

2. 측정결과를 LED 전등을 ON

3. 측정 결과에 따라 부저가 작동하도록 수정해 보고,

4. 측정결과를 16x2 LCD에 디스플레이한다.

5. 수위센서 1개를 이용해서 워터펌프가 최저수위에 도달하면 작동을 멈추도록 실습한다.

 

더욱 확장하여 비접촉수위센서 2개를 이용해서 최저수위와 최고수위를 바탕으로 펌프를 작동시켜야 할 시점을 판단해 워터펌프를 동작하거나 멈추는 기능을 각자 구현한다.

 

비접촉수위센서의 디지털값을 읽는 간단한 코드는 물이 감지되면 HIGH, 감지가 안되면 LOW가 출력되었다.

 

 

기본 연결 회로도

 

/*
 * 비접촉수위센서를 D2에 연결했다!
 * 기본적인 수위센서의 디지털값을 읽어보는 간단한 코드이다!
 * 물이 감지되면 HIGH, 감지가 안되면 LOW가 출력되었다!
 */

#define wlsensor 2

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(wlsensor,INPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println(digitalRead(wlsensor));
  delay(100);
}

 

 

 

기본 회로에 LED를 연결하여 수위를 감지하면 LED 점등하는 회로

 

 

 

/*
 * 아두이노에 LED를 D3에 연결한다음 수위센서가 감지되면 LED를 켜고
 * 감지가 안되면 LED를 OFF 상태로 한다
 */

#define wlsensor 2
#define LED 3

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(LED,OUTPUT);
  pinMode(wlsensor,INPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  if(digitalRead(wlsensor) == HIGH){
    //감지
    digitalWrite(LED,HIGH);
  }else{
    digitalWrite(LED,LOW);
    //감지안됨
  }
  delay(100);
}

 

 

 

 

 

부저를 추가하여 부저를 작동하는 회로

 

 

코드

 

/*
 * 부저를 1개 추가를해서 D4에 연결
 * 수위센서에 의해서 감지가 되면 부저를 작동
 */

#define wlsensor 2
#define LED 3
#define buzzer 4

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(LED,OUTPUT);
  pinMode(wlsensor,INPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  if(digitalRead(wlsensor) == HIGH){
    //감지
    digitalWrite(LED,HIGH);
    tone(buzzer, 1175);
  }else{
    digitalWrite(LED,LOW);
    noTone(buzzer);
    //감지안됨
  }
  delay(100);
}

 

 

 

 

I2C 인터페이스를 가진 1602 LCD를 연결하여 상태 메시지를 디스플레이하는 회로

 

 

 

 

코드

 

/*
 * 1602LCD를 I2C로 사용할 수 있는 모듈
 * 수위센서의 작동상태를 text로 디스플레이
 */
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

#define wlsensor 2
#define LED 3
#define buzzer 4

LiquidCrystal_I2C lcd(0x27,16,2); //16*2

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(LED,OUTPUT);
  pinMode(wlsensor,INPUT);
  lcd.init(); 
  lcd.backlight();
}

void loop() {
  // put your main code here, to run repeatedly:
  lcd.clear();
  if(digitalRead(wlsensor) == HIGH){
    //감지
    digitalWrite(LED,HIGH);
    tone(buzzer, 1175);
    lcd.print("WATER DETECTED!!");
  }else{
    digitalWrite(LED,LOW);
    noTone(buzzer);
    //감지안됨
  }
  delay(100);
}

 

 

 

워터펌프를 달고, 제어는 릴레이를 통해 제어하도록 수정한 회로

 

 

 

 

/*
 * 아두이노에 워터펌프를 연결
 * 워터펌프를 직접 아두이노에 연결할 수 없기에 모스펫(mosfet, Relay)을 D3에 연결
 * 릴레이 출력을 워터펌프를 연결
 * 버튼을 누르면 워터펌프를 작동
 * 구현 안된 것: 수위센서에 의해서 최저수위가 감지되면 워터펌프의 작동을 멈추는 기능
 */

#define button 4
#define pump 3
#define wlsensor 2

void setup() {
  // put your setup code here, to run once:
  pinMode(button,INPUT_PULLUP);
  pinMode(pump,OUTPUT);
  pinMode(wlsensor,INPUT);
  digitalWrite(pump,LOW);
}

void loop() {
  // put your main code here, to run repeatedly:
  if(digitalRead(wlsensor) == LOW){
    //물이 있다가 없어진것!
    digitalWrite(pump,LOW);
  }
  if(digitalRead(button) == LOW){
    //버튼이 눌려진것! 왜냐! 풀업방식이라고 위에서 했기 때문!
    digitalWrite(pump,HIGH);
  }
}

 

 

I2C LCD 라이브러리 Github 다운로드

 

이미지와 코드 참고: 녹칸다 블로그 

 

 

 

 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

당신의 성공을 위해 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩