-->

PROSEDUR MULTI TASKING ARDUINO UNTUK PEMBACAAN DATA SENSOR DAN KOMUNIKASI SERIAL

        Pada proyek kali ini saya akan mendemokan alat pengukur debit air menggunakan sensor aliran air/ Flow sensor tipe YF-s201, dengan komunikasi serial USB dan Bluetooth HC05, yang akan dikoneksikan dengan perangkat android.


Perangkat yang dibutuhkan, Arduino Uno, Sensor Shield, Flowsensor, Bluetooth HC-05, Laptop, Arduino IDE, dan Secangkir Kopi


Arduino Uno + Sensor Shield


Flow Sensor


Bluetooth HC-05

        Pada percobaan awal akan saya demokan bagimana arduino mengirimkan data pengukuran flow sensor melalui komunikasi USB serial ke PC yang akan ditampilkan melalui serial monitor arduino.
Tampilan data serial pengukuran aliran air pada serial monitor arduino, menggunakan serial USB

        Disini saya menggunakan port 3 sebagai default port yang terdeteksi oleh PC sebagai port serial arduino, dengan setting baut rate 9600 dan pengaturan no line ending.
Tampilan data serial monitor

tampak disini bahwa serial mengirimkan data pembacaan sensor ke serial monitor. Oke, lanjut ke percobaan ke-2 dimana saya akan mengkomunikasikan bluetooh HC05 dg menggunakan port 4 sebagai standar komunikasi yang terdeteksi sebagai port serial HC05 dengan setting baut rate 38400 dan pilih Both NL dan CR.
Tampilan awal serial monitor menggunakan bluetooth HC-05 yang dihubungkan dengan bluetooth PC

Tampilan ketika perintah 'cek' dikirimkan melalui serial monitor

Tampilan ketika perintah 'reset' dikirimkan melalui serial monitor, saat perinta reset dikirimkan, arduino akan memulai perhitungan dari nol kembali

Hasil tampilan pada android

Sketch arduino HC-05 dan Flow Sensor

// Insialisasi perangkat Bluetooth
#include <SoftwareSerial.h>
SoftwareSerial Bluetooth(5, 6); // RX, TX
int Data; // the data received
// Inisialisai perangkat Flow Sensor
byte indikator = 13;
byte sensorInt = 0;
byte flowsensor = 2;
float konstanta = 4.5; //konstanta flow meter
volatile byte pulseCount;
float debit;
unsigned int flowmlt;
unsigned long totalmlt;
unsigned long oldTime;
float hargaAir;
float totalHarga;
void setup()
{
// Setup port serial USB
Serial.begin(9600);
// Setup port serial Bluetooth
Bluetooth.begin(38400);
// Cetak tampilan serial USB
Serial.println("-------------------------------------");
Serial.println("pilih menu :");
Serial.println("1. 'cek'");
Serial.println(" Tagihan penggunaan air");
Serial.println("2. 'reset'");
Serial.println(" Reset pengukuran air");
Serial.println("-------------------------------------");
// Cetak tampilan serial Bluetooth
Bluetooth.println("-------------------------------------");
Bluetooth.println("pilih menu :");
Bluetooth.println("1. 'cek'");
Bluetooth.println(" Tagihan penggunaan air");
Bluetooth.println("2. 'reset'");
Bluetooth.println(" Reset pengukuran air");
Bluetooth.println("-------------------------------------");
// Variable awal dan nilai awal Flow sensor
pinMode(indikator, OUTPUT);
digitalWrite(indikator, HIGH);
pinMode(flowsensor, INPUT);
digitalWrite(flowsensor, HIGH);
pulseCount = 0;
debit = 0.0;
flowmlt = 0;
totalmlt = 0;
oldTime = 0;
////////////////
hargaAir = 1600;
totalHarga = 0;
attachInterrupt(sensorInt, pulseCounter, FALLING);
}
void loop()
{
boolean pOK = true;
String p = "";
while (Bluetooth.available() != 0)
{
p = p + char(Bluetooth.read());
delay(1000); // Tunda sebentar untuk menyiapkan pembacaan data berikutnya
}
//Serial.println("D");
recordSensing();
delay(100);
// Kalau tak ada data, tak perlu melanjutkan ke pemrosesan perintah berikutnya
if (p.length() == 0) return;
p.trim(); // Hilangkan tanda akhir baris
////////// kirim bluetooth //////////
////////// prosedur pengiriman serial ketika bluetooth melakukan cek
if (p == "cek")
{
Bluetooth.println("-------------TAGIHAN AIR-------------");
Bluetooth.print("Total Penggunaan Air : ");
Bluetooth.print(totalmlt/1000);
Bluetooth.println(" Liter");
Bluetooth.print("Harga Air/M3 : Rp. ");
Bluetooth.print(hargaAir);
Bluetooth.println(",-");
Bluetooth.print("Total Tagihan : Rp. ");
Bluetooth.print(totalHarga);
Bluetooth.println(",-");
Bluetooth.println("-------------TERIMAkASIH-------------");
}
////////// prosedur reset volume dan debit air
else if (p == "reset")
{
pulseCount = 0;
debit = 0.0;
flowmlt = 0;
totalmlt = 0;
oldTime = 0;
Bluetooth.println("|-----------------------------------|");
delay(500);
Bluetooth.println("|-------------RESETING--------------|");
delay(500);
Bluetooth.println("|----------BERHASIL RESET-----------|");
}
}
////////// membaca data sensor //////////
void recordSensing()
{
if((millis() - oldTime) > 1000)
{
detachInterrupt(sensorInt);
////////// menghitung debit air
debit = ((1000.0 / (millis() - oldTime)) * pulseCount) / konstanta;
////////// waktu berjalan
oldTime = millis();
////////// pengukuran volume air terpakai dalam mL
flowmlt = (debit / 60)*1000;
////////// total penggunaan air dalam mL
totalmlt += flowmlt;
////////// total harga air per m3 ( 1m3 = 1000000mL )
totalHarga = (totalmlt*hargaAir)/1000000;
unsigned int frac;
Serial.print("Debit air: ");
Serial.print(int(debit));
Serial.print("L/min");
Serial.println("\t");
Serial.print("Volume: ");
Serial.print(totalmlt);
Serial.println("mL");
Serial.print("Harga: ");
Serial.print("Rp. ");
Serial.println(totalHarga);
pulseCount = 0;
attachInterrupt(sensorInt, pulseCounter, FALLING);
}
}
void pulseCounter()
{
// Increment the pulse counter
pulseCount++;
}

video demo









LihatTutupKomentar