Depot pengisian air minum menggunakan galon sebagai tempat air. Tahap-tahap pengisian yang lazim di lakukan adalah: pembersihan, pengisian, pemasangan tutup dan perbersihan.
Dalam artikel ini hanya melakukan otomatisasi pada tahap pengisian, cara kerjanya sebagai berikut :
- Saat mulai, sensor ir/obstacle mendeteksi keberadaan galon diatas tempat pengisian galon. Jika ada galon maka sistem menginformasikan agar galon diambil terlebih dahulu.
- Sistem menunggu hingga galon kosong ditempatkan pada posisi pengisian galon.
- Sistem akan menghidupkan pompa air, kemudian menghidupkan solenoid.
- Sensor flow meter akan menghitung volume ait yang dialirkan kedalam galon.
- Jika volume telah mencukupi maka solenoid dan pompa dimatikan.
- Jika selama pengisian galon, posisi galon bergeser atau diambil, maka solenoid dan pompa akan dimatikan.
- Sistem akan menunggu galon diambil.
- Selesai.
Skema pengisian galon otomatis berbasis arduino:
Komponen yang digunakan dalam perancangan sistem pengisian galon arduino:
- Arduino uno
- LCD 16×2 lcd backpack
- sensor obstacle
- flow sensor
- solenoid
- pompa air
- relay 2 channel
Program pengisi galon menggunakan arduino:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | #define kapasitasGalon 19//liter #define pulsaPerLiter 450//sesuai spesifikasi sensor water flow #define pinWaterFlow 2 #define pinSensorIR A0 #define pinPompa 7 #define pinSelenoid 6 #define IRAktif LOW #define relayAktif LOW #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <util/atomic.h> LiquidCrystal_I2C lcd(0x3F, 16, 2); volatile uint16_t pulseCount; void setup() { digitalWrite(pinPompa, !relayAktif); digitalWrite(pinSelenoid, !relayAktif); pinMode(pinWaterFlow, INPUT); pinMode(pinSensorIR, INPUT); pinMode(pinPompa, OUTPUT); pinMode(pinSelenoid, OUTPUT); Serial.begin(9600); Serial.println(F( "Pengisi galon otomatis" )); Wire.begin(); Wire.beginTransmission(0x3F); if (Wire.endTransmission()) { lcd = LiquidCrystal_I2C(0x27, 16, 2); } lcd.begin(); lcd.backlight(); lcd.print( "Pengisi galon" ); lcd.setCursor(0, 1); lcd.print( "Semesin.com" ); delay(3000); lcd.setCursor(0, 0); lcd.print( "ambil Galon " ); while (digitalRead(pinSensorIR) == IRAktif); //deteksi awal : jika ada galon kosongkan dahulu attachInterrupt(digitalPinToInterrupt(pinWaterFlow), pulseCounter, FALLING); } void loop() { lcd.setCursor(0, 0); lcd.print( "Letakkan Galon " ); while (digitalRead(pinSensorIR) == !IRAktif); delay(1000); //memastikan galon diletakkan if (digitalRead(pinSensorIR) == IRAktif) { lcd.setCursor(0, 0); lcd.print( "Mengisi Galon..." ); pulseCount = 0; digitalWrite(pinPompa, relayAktif); delay(1000); digitalWrite(pinSelenoid, relayAktif); lcd.setCursor(0, 1); lcd.print( " " ); uint16_t jumlahPulsa; while ((jumlahPulsa < kapasitasGalon * pulsaPerLiter) && (digitalRead(pinSensorIR) == IRAktif)) { ATOMIC_BLOCK(ATOMIC_FORCEON) { jumlahPulsa = pulseCount; } lcd.setCursor(0, 1); lcd.print((1.0 * jumlahPulsa / pulsaPerLiter)); lcd.print( " liter" ); } digitalWrite(pinSelenoid, !relayAktif); delay(100); digitalWrite(pinPompa, !relayAktif); lcd.setCursor(0, 0); if (jumlahPulsa >= kapasitasGalon * pulsaPerLiter) { lcd.print( "Galon penuh " ); } else if (digitalRead(pinSensorIR) != IRAktif) { lcd.print( "Galon tidak ada " ); } delay(1000); lcd.setCursor(0, 0); lcd.print( "silahkan ambil " ); while (digitalRead(pinSensorIR) == IRAktif); delay(1000); //memastikan galon sudah diambil while (digitalRead(pinSensorIR) == IRAktif); } } void pulseCounter() { pulseCount++; } |
Library: