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:
Saya mau membuat pengisian dengan variasi dari ml-liter dengan masukan dari keypad dan dapat disimpan ke memori sebagai menu favorit yg akan dibaca oleh tombol khusus. Kebutuhan saya untuk produksi saya dalam bentuk cairan dan pengisian ke botol2 yang bervariasi dari 10ml – 1000ml. Sy punya dasar untuk pemrograman dan hardware arduino.
Mohon arahannya agar keinginan saya untuk alat tersebut bisa diwujudkan.
Terima kasih
banyak cara untuk interface keypad dengan arduino, salah satunya dengan metode ‘menu’
misalnya set key ‘A’ untuk 10ml, ‘B’ untuk 200ml serta setting lainnya (kalibrasi, stop time dll) bisa di set melalui keypad dengan menu-submenu
maaf master saya mau tanya nih …proyek ini saya copas dan bekerja sempurna sewaktu di upluod
dan sewaktu di gunakan juga baik,yang saya heran sewaktu pengisian botol ke 2 dan selanjut nya alat tidak berfungsi seperti pengisian botol yg pertama….
sebelom air berjalan relay hidup 1 detik..
“sebelom air berjalan relay hidup 1 detik..” memang seperti itu di programkan
digitalWrite(pinPompa, relayAktif);
delay(1000);
digitalWrite(pinSelenoid, relayAktif);
Bang kalau tidak memakai selenoid dengan sesnor obstacle bisa k?,beda lagi k codinganya
masing-masing komponen punya fungsi sendiri2,
selenoid berfungsi menjaga air tetap di pipa (tidak surut) dan juga sebagai pen-stop (seketika) jika galon telah penuh
sensor obstacle berfungssi untuk memastikan galon berada di posisinya sehingga jika galon tidak di posisi maka pengisian akan di batalkan
tanpa obstacle dan selenoid alat masih bisa berjalan, dengan catatan:
1. jumper pin obstacle ke ground (LOW)
2. hapus baris 105-107
Bang itu nggak ada Button start? Itu berarti sensor ir deteksi air langsung keluar?
iya, delay 1 detik kemudian pompa air nyala
Kalau mau di bikin 2 pengisiian, apakah pin 3 bisa di jadikan input pin flowmeter nya mas atau mesti pake arduino Mega..
bisa, pin 2 dan pin 3 arduino uno bisa di gunakan sebagai input pin flow meter (interrupt mode)
saya menyelipkan/menggabung coding untuk mengubah variable #pulsaPerLiter degan menu level menggunakan 4 push button. dengan code if (!digitalRead(pinMenu)) { dst.
saya pake pin A2dst. tetapi tidak tampil / jalan di loop. fungsi itu cuma berjalan ketika ketika lcd menampilkan “letakan galon” trus sensor IR LOW. jadi tidak serta merta ketika saya push menu button muncul fungsi menu. mohon bantuan coding bagaimana solusi agar tiap push menu. tampil void tampilan menu.
coba buat sebuah variabel mis ‘menuAktif’ yang bernilai 1 jika menu aktif
ketika menuAktif == 1 maka fungsi lainnya tidak dijalankan
Saya mau tanya
Apakah bisa menggunakan termostat suhu(ada indikator setelah suhu yang biasa terdapat pada termostat tetas ayam) kemudian pada sesor suhu di rubah menjadi load cell(sensor berat) ??
Apakah bisa berkerja/konek ?
Saya melihat harga filler diatas 3 jutaan semua apabila menggunakan metode diatas makan akan sangat jauh biaya harga filler tsb.
Note: saya hanya ingin membuat filler murah meriah.
konsepnya memungkinkan, kira2 seperti timbangan mekanis, ketika plat logammnya di beri beban akan melengkung dan menyentuh ‘saklar’
tentu perlu penyesuaian kekuatan mekanis juga, misal thermostat kekuatan plat logammnya mesti di uji langsung dengan berat tertentu.
Apa bisa di implementasikan pada isi galon dengan Koin
memungkinkan untuk dibuat, dengan cara menambahkan mekanis dan kode2 pengecekan (misal cek jumlah koin2) dan melakukan aktifasi pengisian jika kondisinya sesuai
Mengapa IRAktif dan relayAktif menggunakan define?
lebih ke gaya pemrograman, #define adalah directive/macro yang mendefenisikan simbol sehingga lebih mudah dipahami
permisi bg mau tanya nih..
bagaimana cara mengatasi util/atomic.h : no such file or directory?
util/atomic.h adalah library bawaan arduino yang khusus hanya untuk arduino/microcontroler 8 bit, jika menggunakan esp/stm32 library itu tidak di perlukan (bisa di tiadakan beserta kode bawaannya)
permisi mau tanya, kalau sementara pengisia tiba” listrik padam countnya mengulang lagi ya. ?
Counter-nya mengulang jika mati lampu,
supaya tidak mengulang bisa di tambahkan mekanisme penyimpanan di EEPROM, hanya saja terbatas lifetime EEPROM-nya karena hanya mampu tulis baca 100rb kali.
master saya mau nanya, untuk kapasitas galon 19 liter itu udah sesuai dari define ya? Jadi gausah di buat hitung hitungannya?
Makaasih
ada bermacam kapasitas galon air diantaranya 10, 12, 18, 19 liter, baris
#define kapasitasGalon 19//liter
bisa disesuaikan untuk ukuran galon yang akan di isi
sedangkan baris
#define pulsaPerLiter 450//sesuai spesifikasi sensor water flow
disesuaikan dengan jenis sensor flow yang digunakan
permisi bang mau nanya, cara kasi power dengan adaptor bagaimana bang?
pasang di konektor power sesuai tegangan dinamo/motor dan solenoid,
jika dinamo dan solenoid punya tegangan yang sama, boleh dengan dipasang parallel di konektor powernya
bagaimana merubah nilai liter menjadi mililiter
dan di program ini pada saat pengisian siklus ke 2 kenapa tidak bisa mengisi
setelah perintah letekakan galon
ada proses mengisi galon
lalu galon penuh
menjadikan mili liter
#define kapasitasGalon 19*1000//liter
#define pulsaPerLiter 450/1000//sesuai spesifikasi sensor water flow
siklus kedua dan selanjutnya belum bisa dimulai jika:
Sensor Ir masih aktif (yang menandakan galon (yang sudah terisi) masih belum di ambil)
::: cek sensor Ir
bikin rangkaiannya dimana bang?
kalo maksudnya bikin skemanya : fritzing