트리거 신호를 인터럽트에 연결시켜서 회전수를 카운트 해서 유량을 계산하는 코드입니다.
신호선에는 10K 저항을 연결해서 풀업저항으로 만들어 줍니다.
1회전시 유량은 유량센서 용량에 따라 다르므로 스펙에 맞게 공식을 수정해야 할 것 같습니다.
제가 구한 유량센서는 The frequency calculation = constant flow rate (L/min) 7.5 * unit time (in seconds)
분당 7.5 리터니깐 초당 계산하니깐 60을 더 곱해줍니다.
인터럽트를 사용하니 SoftSerial은 사용할 수 없을것 같네요. 같이 인터럽트를 사용하니 WiFi을 연결하려면
하드웨어 시리얼을 이용해야 할 듯 합니다.
아래 사이트를 코드를 참고하였습니다.
// Reading liquid flow rate using an Arduino// Code adapted by Charles Gantt from PC Fan RPM code written by Crenn@thebestcasescenario.com// http:/themakersworkbench.com http://thebestcasescenario.comvolatile int NbTopsFan; //measuring the rising edges of the signalint Calc;int hallsensor = 2; //The pin location of the sensorvoid rpm () //This is the function that the interupt calls{NbTopsFan++; //This function measures the rising and falling edge of signal} //The setup() method runs once, when the sketch startsvoid setup(){pinMode(hallsensor, INPUT); //initializes digital pin 2 as an inputSerial.begin(9600); //This is the setup function where the serial port is initialisedattachInterrupt(0, rpm, RISING); //and the interrupt is attached}// the loop() method runs over and over again// as long as the Arduino has powervoid loop (){NbTopsFan = 0; //Set NbTops to 0 ready for calculationssei(); //Enables interruptsdelay (1000); //Wait 1 secondcli(); //Disable interruptsCalc = (NbTopsFan * 60 / 7.5); //(Pulse frequency x 60) / 7.5Q = flow rate in L/hourSerial.print (Calc, DEC); //Prints the number calculated aboveSerial.print (" L/hour\r\n"); //Prints "L/hour" and returns a new line}
댓글 없음:
댓글 쓰기