IMKONTROL.COM- Halo kawan, jumpa lagi di pembahasan Arduino. Admin ga akan bosan-bosan untuk berbagi pengalaman kepada anda semua, karena sesuai salah satu Hadist Nabi yaitu amalan yang tidak akan putus adalah shadaqoh jariah, ilmu yang bermanfaat, dan anak shalih yang mendoakan orang tuanya. Dan admin memberi nama project kita kali ini adalah "Cara Mengukur Liter Air Menggunakan Arduino". Dalam tutorial ini Anda akan belajar bagaimana mengendalikan sensor Water Flow menggunakan Arduino.
Sensor Water Flow ini terdiri dari katup plastik, rotor air dan sensor hall-efek. Ketika air mengalir melalui rotor, gulungan rotor dan terjadi kecepatan perubahan dengan tingkat yang berbeda aliran. Kemudian Sensor hall efek mengeluarkan sinyal pulsa.
Jenis sensor ini disesuaikan dengan diameter pada setiap tekanan air (MPa) yang berbeda dan laju alir (L / m). Pastikan anda memilih salah satu yang dapat memenuhi kebutuhan Anda. Sensor yang saya miliki berdiameter 20mm, <Tekanan air 1.75Mpa dan ~ 30 L / m laju aliran.
Dalam tutorial ini kita akan menggunakan monitor serial untuk mengetahui laju aliran air dalam liter per jam dan total liter mengalir sejak awal. Jadi mari kita mulai!
Komponen yang Digunakan :
- Arduino Uno >> Arduino Uno R3 (Chip Smd+ Ch340 ) Atmega328 + Kabel Usb
- Water flow sensor
- LED
- Kabel Penghubung
Skema:
Konfigurasi PIN :
- Pin LED dihubungkan ke Pin 13 Arduino
- Pin sensor dihubungkan ke Pin 2 Arduino
Coding:
/*
www.imkontrol.com
*/
byte statusLed = 13;
byte sensorInterrupt = 0; // 0 = digital pin 2
byte sensorPin = 2;
float calibrationFactor = 4.5;
volatile byte pulseCount;
float flowRate;
unsigned int flowMilliLitres;
unsigned long totalMilliLitres;
unsigned long oldTime;
void setup()
{
Serial.begin(9600);
pinMode(statusLed, OUTPUT);
digitalWrite(statusLed, HIGH);
pinMode(sensorPin, INPUT);
digitalWrite(sensorPin, HIGH);
pulseCount = 0;
flowRate = 0.0;
flowMilliLitres = 0;
totalMilliLitres = 0;
oldTime = 0;
attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
}
void loop()
{
if((millis() - oldTime) > 1000)
{
detachInterrupt(sensorInterrupt);
flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor;
oldTime = millis();
flowMilliLitres = (flowRate / 60) * 1000;
totalMilliLitres += flowMilliLitres;
unsigned int frac;
Serial.print("Flow rate: ");
Serial.print(int(flowRate));
Serial.print("L/min");
Serial.print("t");
Serial.print("Output Liquid Quantity: ");
Serial.print(totalMilliLitres);
Serial.println("mL");
Serial.print("t");
Serial.print(totalMilliLitres/1000);
Serial.print("L");
pulseCount = 0;
attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
}
}
void pulseCounter()
{
pulseCount++;
}