Sensor/유량센서

How to use Water Flow Sensor / Meter with Arduino

기하 2022. 3. 26. 11:51

https://www.seeedstudio.com/blog/2020/05/11/how-to-use-water-flow-sensor-with-arduino/

 

How to use Water Flow Sensor / Meter with Arduino - Latest Open Tech From Seeed

Well, in this blog we will tell you basically all the things you need to

www.seeedstudio.com

 

 

이 포스트에서 우리는 기본적으로 다음을 포함하여 유량 센서에 대해 알아야 할 모든 것을 알려줄 것입니다.

  • water flow sensor에 대한 간략한 설명입니다.
  • hall water flow sensor의 작동 원리.
  • water flow sensor 사용 방법(하드웨어 및 코드).
  • 계산 공식에 대한 세부 정보입니다.

water flow sensor(meter)란 무엇입니까?

우리는 water flow senso를 사용하여 물의 흐름 속도를 측정합니다. 

물의 유속은 단위 시간당 통과하는 유체의 부피입니다. 

 

사람들은 종종 자동 온수기 제어, DIY 커피 머신, 물 자동 판매기 등에 물 흐름 센서를 사용합니다.

 

다양한 원리의 유량 센서가 있지만

Arduino 또는 Raspberry Pi를 사용하는 제조업체의 경우

가장 일반적인 유량 센서는 홀 장치Hall device를 기반으로 합니다. 

 

예를 들어, 가장 고전적인 물 흐름 센서  YF-S402  및  YF-S201  은 홀 센서에 의존합니다.

 

water flow sensor 는 어떻게 작동합니까?

물의 흐름이 어떻게 작동하는지 설명하기 위해 뚜껑을 열고 살펴보겠습니다.

YF-402의 모든 구성 요소
Water flow sensor  작동 원리

내부는 상당히 심플합니다. 

주요 구성 요소는 홀 효과 센서Hall Effect sensor  터빈 휠  및  자석 입니다. 

물은 유입구를 통해 유입되고 유출구를 통해 유출됩니다. 

물의 흐름은 바퀴를 돌게 했고 바퀴의 자석도 함께 회전했습니다. 

자기장 회전은 홀 센서를 트리거하여 높고 낮은 수준의 구형파(펄스)를 출력합니다.

물 흐름 센서 작동 원리

바퀴를 돌 때마다 흐르는 물의 양은 일정한 양이며 출력되는 구형파의 수도 마찬가지입니다. 

따라서 구형파(펄스)의 수를 세어 물의 흐름을 계산할 수 있습니다.

 

Arduino와 함께 수류 센서를 사용하는 방법.

필요한 재료

하드웨어 연결

YF 직렬의 경우 3개의 와이어가 있습니다.

  • Vcc의 경우 빨간색
  • GND용 블랙
  • 펄스 출력의 경우 노란색.

Arduino UNO  Seeeduino V4.2 와 같은 Atmega 328 기반 보드의 경우 . 

인터럽트로 사용할 수 있는 두 개의 디지털 핀이 있습니다. 

인터럽트 0 용 디지털 핀 2  , 인터럽트 1 용 디지털 핀 3  . 

이 블로그에서는  D2  핀을 사용하여 유량 센서의 펄스 출력을 감지합니다. 

Seeeduino + Grove 베이스 실드 를 사용 하는 경우

물 흐름 센서를 D2 커넥터에 연결하기만 하면 됩니다. 

다른 Arduino 보드를 사용하는 경우 점퍼 케이블을 사용하여 오른쪽 핀에 연결하십시오.

물 흐름 센서는 Arduino와 연결

 

소프트웨어 코드

물론  water flow sensor의 출력 값을 읽기 위해서 LOOP() 안에서

digitalread() 를 사용할 수 있습니다.

 

high level 을 읽을 때마다 숫자에 1을 더합니다. 

그러나 이 접근 방식은 실시간이 아니며 프로그램은 각 실행에 대해 특정 대기 시간이 필요하며

그 동안 새 펄스가 감지되지 않습니다. 

 

실시간으로 요구되는 애플리케이션의 경우 일반적으로  인터럽트 를 사용 합니다. 

펄스의 상승 에지가 감지될 때마다 인터럽트가 트리거되어 1을 더합니다.

인터럽트 에 대한 자세한 내용은  attachinterrupt()  를 확인하십시오  .

 

그런 다음 Arduino IDE를 열고 아래 코드를 복사합니다. 코드를 Arduino에 다운로드하십시오.

메모:

여기 코드는 가장 고전적인 YF – S201 물 흐름 센서용입니다. 단, 위 사진은 YF – S402 입니다. 
손에 YF – S201이 없기 때문입니다. 둘 다에 사용되는 코드는 거의 동일하며 한 가지 요소만 수정할 수 있습니다
.

/*
YF‐ S201 Water Flow Sensor
Water Flow Sensor output processed to read in litres/hour
Adaptation Courtesy: www.hobbytronics.co.uk
*/

volatile int 	flow_frequency; // Measures flow sensor pulsesunsigned 

int 			l_hour; 		// Calculated litres/hour
unsigned char 	flowsensor = 2; // Sensor Input
unsigned long 	currentTime;
unsigned long 	cloopTime;

void flow () {					// Interrupt function
   flow_frequency++;
}

   void setup() {
   pinMode(flowsensor, INPUT);
   digitalWrite(flowsensor, HIGH); 	// Optional Internal Pull-Up
   
   Serial.begin(9600);
   attachInterrupt(0, flow, RISING); // Setup Interrupt
   sei(); // Enable interrupts
   currentTime = millis();
   cloopTime = currentTime;
}

   void loop (){
   currentTime = millis();
   
   // Every second, calculate and print litres/hour
   if(currentTime >= (cloopTime + 1000))
   {
      cloopTime = currentTime; // Updates cloopTime
      // Pulse frequency (Hz) = 7.5Q, Q is flow rate in L/min.
      l_hour = (flow_frequency * 60 / 7.5); // (Pulse frequency x 60 min) / 7.5Q = flowrate in L/hour
      flow_frequency = 0; // Reset Counter
      Serial.print(l_hour, DEC); // Print litres/hour
      Serial.println(" L/hour");
   }
}

직렬 모니터 도구를 열고 전송 속도를 9600으로 설정합니다. 물이 통과하면 유량 값이 해당 창에 인쇄됩니다.

유량 센서 계산 공식

코드 섹션에서는 다음 공식을 사용했는데 이 공식은 어떻게 나온 것일까요?

l_hour = (flow_frequency * 60 / 7.5)

앞서 우리는 바퀴가 회전할 때마다 흐르는 유체의 양이 일정하다고 언급했습니다. 

동시에 바퀴의 1회전당 발생하는 펄스의 수도 일정량이다. 

따라서 펄스 수와 물의 흐름 사이의 방정식을 설정할 수 있습니다.

실제로 YF 시리즈는 6개의 교차 극이 있는 링 자석을 사용하므로 1회전마다 3개의 낮은 레벨과 3개의 높은 레벨, 즉 3개의 펄스가 생성됩니다.

YF-S201의 경우 흐르는 물 1리터당 홀 센서는 450펄스를 출력합니다. 

여기에서 약간의 수학을 해봅시다.

1리터당 450펄스이므로 각 펄스는 1/450리터의 물이 흐르는 것을 의미합니다.

 

V_total(단위 L) : 특정시간 t(단위 s) 에 센서를 통과한 액체의 총량

                :  그 때의 총 pluse 량 이라고 하면

V_total(L) = N* 1/450(L) 

또한 센서를 통해 흐르는 유체의 총 부피는 

water flow rate(Q - unit L/s) 에 시간 t(단위 s)을 곱한  것과 같습니다.t

V_total(L) = Q(L/s)*t(s) 

따라서 우리는 다음을 얻습니다.

N* 1/450 = Q(L/s)*t(s) 
N/t = 450 * Q(L/s) 

N/t 는 frequency(f) 이므로 다음과 같이 됩니다.

f = 450*Q(L/s); 
Q(L/s) = f/450; 
Q(L/min) = f*60/450 = f/7.5 
Q(L/hour) = f*60*60/450 = f*60 /7.5 

YF – S402의 경우, 흐르는 물 1리터마다 홀 센서는 4380 펄스를 출력합니다. 

따라서 공식은 다음과 같아야 합니다.

f = 4380*Q(L/s); 
Q(L/s) = f/4380; 
Q(L/min) = f*60/4380 = f/73 
Q(L/hour) = f*60*60/4380 = f*60 /73