본문 바로가기
아두이노 코딩

아두이노 코딩 배우기 : Arduino Rain Sensor를 사용한 비 감지 시스템 키트

by 49분전 2020. 2. 22.

 

아두이노 코딩 배우기 아두이노 키트 
Rain sensor 사용 비감지 시스템 

레인 센서에 Arduino를 연결하면 간단한 레인 감지 시스템을 쉽게 구축할 수 있습니다. 센서는 강우량을 감지하고 Arduino 보드에서 감지하여 필요한 조치를 수행할 수 있습니다. 이와 같은 시스템은 농업과 자동차 분야와 같은 많은 다른 분야에서 사용될 수 있습니다. 강우 감지를 사용하여 관개 프로세스를 자동으로 조절할 수 있습니다. 또한, 지속적인 강우량 데이터는 농부들이 반드시 필요할 때만 자동으로 농작물에 물을 공급하기 위해 이 똑똑한 시스템을 사용하는 데 도움을 줄 수 있습니다. 마찬가지로, 자동차 섹터에서도 윈드실드 와이퍼는 레인 감지 시스템을 사용하여 완전히 자동으로 만들어질 수 있습니다. 또한 Home Automation Systems는 빗물 감지 기능을 사용하여 자동으로 창을 닫고 실내 온도를 조정할 수 있습니다. 본 자습서에서는 부저와 함께 Arduino를 사용하여 기본적인 레인 센서를 구축하겠습니다. 그런 다음 이 설정을 사용하여 원하는 것을 위에 만들 수 있습니다. 또한, 레인 센서 모듈은 용도에 따라 빗방울 센서 또는 레인 게이지 센서 또는 빗물 센서라고도 합니다. 그러나 모두 이 프로젝트에 사용된 동일한 센서를 참조하며 모두 동일한 원리로 작동합니다.

 

또한 555 Timer만 사용하여 간단한 레인 경보와 자동 차량 와이퍼도 제작했습니다. Arduino를 사용하지 않으려면 이 기능도 점검해 보시기 바랍니다.  다시 이 프로젝트로 돌아가서 아두이노 레인 게이지를 건설해 보겠습니다.

준비물

아두이노 UNO
레인 센서
버저
브레드보드
와이어를 연결

 

레인 센서입니다.
빗방울 모듈은 레인 보드 및 제어 보드라는 두 개의 보드로 구성됩니다.

레인 보드 모듈은 건조한 조건에서 공급 전압에 대한 고저항을 제공하도록 설계된 두 개의 구리 트랙으로 구성되어 있으며, 이 모듈의 출력 전압은 5V입니다. 이 모듈의 저항은 보드의 습도가 증가함에 따라 점차 감소합니다. 저항이 감소하면 모듈의 습도에 따라 출력 전압도 감소합니다. 레인보드 모듈은 아래와 같이 컨트롤 보드에 연결하는 데 사용되는 2개의 핀으로 구성됩니다.

컨트롤 보드 모듈은 감도를 제어하고 아날로그 출력을 디지털 출력으로 변환합니다. 아날로그 값이 제어판의 임계값보다 낮으면 출력이 디지털 로우이고, 아날로그 값이 임계값보다 높으면 출력이 디지털 하이입니다. 이 비교 및 변환에는 LM393 OP-Amp 비교기가 사용됩니다. Op-Amp 비교기는 두 가지 전압 값을 비교하는 데 사용할 수 있는 흥미로운 회로입니다. 스마트 전자 캔들, 레이저 보안 경보, 라인 추종 로봇 등과 같은 많은 프로젝트에서 이미 이 회로를 사용했습니다. 

아래에 표시된 레인 컨트롤 모듈은 Arduino를 연결하는 4개의 핀, 즉 VCC, GND, D0, A0 및 레인 보드 모듈을 연결하는 2개의 핀으로 구성됩니다. 요약하면 레인보드 모듈이 빗물을 감지하고, 컨트롤 보드 모듈을 사용하여 감도를 제어하고 아날로그 값을 디지털 값으로 비교 및 변환합니다.

 

레인 센서가 작동합니다.

레인 센서 모듈은 간단하게 이해할 수 있습니다. 맑은 날에는 레인보드 모듈의 건조함으로 인해 공급 전압에 대한 저항이 높습니다. 이 전압은 레인보드 모듈의 출력 핀에 5V로 표시됩니다. 이 5V는 Arduino의 아날로그 핀에서 읽을 경우 1023으로 판독됩니다.   비가 오는 동안, 빗물은 비 보드의 습기를 증가시켜 공급에 제공되는 저항력을 감소시킵니다. 저항이 점차 감소하면 출력 전압이 감소하기 시작합니다.

레인보드가 완전히 젖었을 때, 그리고 레인보드가 제공하는 저항이 최소일 때, 출력 전압은 최대한 낮습니다(약 0). 이 0V는 Arduino의 아날로그 핀에서 읽을 경우 0 값으로 판독됩니다. 레인보드 모듈이 부분적으로 젖어 있는 경우 이 레인보드 모듈의 출력은 레인보드 모듈이 제공하는 저항과 관련이 있습니다. 레인보드 모듈이 제공하는 저항이 출력이 3V일 경우 읽기 아날로그 값은 613이 됩니다. ADC 찾기 공식은 ADC = (아날로그 전압 값 X 1023)/5로 지정할 수 있습니다. 이 공식을 사용하면 아날로그 전압을 t Arduino 아날로그 읽기 값으로 변환할 수 있습니다.

회로 다이어그램

아래 회로 다이어그램은 Arduino가 장착된 레인 드롭 센서의 회로 연결을 보여 줍니다. 설계는 프로테우스를 사용하여 수행되며, 물리적 모듈은 회로 다이어그램에 표시된 모듈과 유사합니다.

회로 다이어그램에 표시된 레인 게이지 모듈은 컨트롤 보드에 연결됩니다. 컨트롤 보드의 VCC 핀은 5V 공급 장치에 연결됩니다. 접지 핀이 접지에 연결되어 있습니다. 필요한 경우 D0 핀은 Arduino의 모든 디지털 핀에 연결되며, 이 핀은 프로그램에서 출력 핀으로 선언해야 합니다. D0 핀과 관련된 문제는 출력 전압의 정확한 값을 얻을 수 없다는 것입니다. 출력이 임계값 전압을 초과하면 컨트롤 모듈이 출력의 변화를 감지할 수 있습니다.  레인보드 모듈의 출력 전압에 상당한 변화가 있더라도 버저를 작동해야 합니다. 이러한 이유로 인해 A0 핀이 Arduino의 아날로그 핀에 연결되어 출력 변화를 쉽게 모니터링할 수 있습니다. 사용자에게 신호로 사용되는 버저는 Arduino의 모든 디지털 핀에 연결할 수 있습니다. 버저가 5V 이상 필요한 경우 릴레이 회로 또는 트랜지스터를 연결한 다음 부하를 연결합니다.

 

코드 설명
레인 센서에 대한 Arduino 코드는 Arduino IDE를 사용하여 작성되었습니다. 이 프로젝트의 전체 코드는 페이지 끝에 지정됩니다.

 

#define rainfall A0
#define buzzer 5
int value;
int set=10;

 

핀 A0을 강우수로 정의하고 핀 5를 버저로 정의하고 변수 "값"과 "설정"을 정수로 선언하고 변수 설정 값을 10으로 설정합니다. 이 값은 필요한 작동 수준에 따라 변경할 수 있습니다. 비가 거의 내리지 않는 경우에도 버저를 작동시키려면 버저를 최소값으로 설정합니다.

 

void setup() {
  Serial.begin(9600);
  pinMode(buzzer,OUTPUT);
  pinMode(rainfall,INPUT);
  }

 

직렬 통신을 초기화하고 버저를 설정합니다. 강우 핀을 출력 핀과 입력 핀으로 설정합니다.

 

void loop() {
 value = analogRead(rainfall);
 Serial.println(value);
value = map(value,0,1023,225,0);

 

 

아날로그Read 기능은 레인 센서의 값을 읽습니다. 기능 맵은 출력 핀에서 레인 센서 값을 매핑하고 0 ~ 225 범위의 값을 변수에 할당합니다.

 

 if(value>=set){
  Serial.println("rain detected");
  digitalWrite(buzzer,HIGH);

 

읽기 센서 값이 설정된 값보다 크면 프로그램이 루프로 들어가 직렬 모니터에 메시지를 인쇄하고 버저를 켭니다.

 

 else{
  digitalWrite(buzzer, LOW);

 

이 프로그램은 값이 설정된 값보다 작은 경우에만 다른 기능으로 들어갑니다. 이 기능은 설정 값이 센서 값보다 높을 때 버저를 끄는데, 이는 비가 오지 않음을 나타냅니다.

Arduino 기반 레인 감지 시스템을 사용합니다.

이 시스템은 비가 올 때 빗물이 방아쇠 역할을 하는 방식으로 작동하며, 이는 버저를 켭니다. 레인 드롭 센서 아르뒤노 코드에서는 핀 5와 A0이 버저와 강우라고 정의했습니다. 이렇게 하면 기능의 정의된 부분에 있는 핀을 변경할 수 있으며, 코드의 나머지 부분은 손대지 않습니다. 이렇게 하면 프로그래머가 핀을 쉽게 편집할 수 있습니다.

void 루프에서 아날로그Read 명령은 센서의 값을 읽습니다. 다음 줄에서 serial.println(value) 명령은 직렬 모니터에 값을 인쇄합니다. 이 기능은 디버깅하는 동안 유용합니다. 지도 기능은 들어오는 값을 0 - 225 사이로 매핑합니다. 지도의 함수 형식은 지도(값, 최소값, 최대값, 최소값에 대해 매핑할 값, 최대값에 대해 매핑할 값)입니다. 센서의 설정 값과 출력에 따라 버저가 켜지거나 꺼집니다. 이 값은 if 함수에서 설정 값과 비교됩니다. 값이 설정된 값보다 크면 버저가 켜집니다. 값이 설정값보다 작으면 버저가 꺼집니다.

전체 작업은 아래 링크된 비디오에서 확인할 수 있습니다. 이것은 많은 것들 중 하나의 응용 분야이며, 윈드실드 와이퍼, 기타 가정용 자동화, 농업 분야 등에서 동일한 원리를 볼 수 있습니다. 그 프로젝트를 이해하고 유용한 것을 만드는 것을 즐겼기를 바랍니다. 질문이 있는 경우 아래 설명 섹션을 사용하거나 포럼을 사용하여 다른 기술 질문을 할 수 있습니다.

 

Code

 

#define rainfall A0
#define buzzer 5
int value;
int set=10;
void setup() {
  Serial.begin(9600);
  pinMode(buzzer,OUTPUT);
  pinMode(rainfall,INPUT);
  }

void loop() {
  
 value = analogRead(rainfall);
 Serial.println("LOL");

 Serial.println(value);
 value = map(value,0,1023,225,0);
 Serial.println(value);
 if(value>=set){
  Serial.println("rain detected");
  digitalWrite(buzzer,HIGH);
 }
 else{
  digitalWrite(buzzer,LOW);
 }
 delay(200);
}

댓글