11
BAB III
PERANCANGAN ALAT
Pada bab ini akan dijelaskan tentang perancangan dari perangkat keras dan perangkat lunak yang digunakan pada sistem.
3.1 Gambaran Sistem
Berikut adalah diagram blok gambaran sistem yang dibuat :
Gambar 3.1 Diagram blok perangkat keras
Rancangan alat ini menggunakan power supply sebagai sumber daya utama dengan tegangan sebesar 12 V arus maksimal 5A. Arduino Mega sebagai mikrokontroler membutuhkan akses jaringan wifi untuk dapat terhubung dengan server , oleh karena itu Arduino Mega dihubungkan NodeMCU dengan komunikasi serial. Sebagai masukan utama
12
dari mikrokontroler adalah dari kartu RFID yang dibaca oleh RFID reader dan load cell untuk mengetahui berat beras pada tangki. Setiap kartu RFID yang terbaca akan diolah mikrokontroler dibandingkan dengan database dan akan ada insert pada tabel database yang hanya dapat dibuka oleh admin. Apabila kartu RFID yang terbaca telah sesuai , motor akan memutar tabung pengeluaran beras. Terdapat 2 buah sensor infrared proximity sensor untuk menentukan putaran tabung pengeluaran beras.
Setiap pemberitahuan dan notifikasi ditampilkan di LCD dan akan terdapat bunyi dari buzzer jika terdapat kesalahan pengambilan atau error pada alat. Tangki beras hanya dapat dibuka oleh kartu admin.
3.2 Perancangan dan Realisasi Perangkat Keras
Berikut merupakan gambaran alat dalam perancangan tugas akhir.
Gambar 3.2 Gambaran Tangki Beras
13
Gambar 3.4 Mekanisme Pengeluaran Beras 1 Liter
14
Gambar 3.6 Realisasi Tangki dihubungkan dengan mekanisme pengeluaran beras
15
Gambar 3.8 Realisasi Alat Tampak Depan
16
3.3 Perancangan Elektronika
Alat ini dibagi dalam beberapa bagian, yaitu panel indikator , panel pengendali, load cell .
3.3.1 Panel Indikator
Gambar 3.10 Panel Indikator Alat
a. LCD
LCD pada alat ini digunakan sebagai penampil kondisi alat dan informasi yang sudah diolah oleh mikrokontroler. Informasi yang ditampilkan berupa waktu terkini, sisa beras pada tangki dalam kilogram, informasi jatah beras, hari dan jam pengambilan beras .
17
b. RFID Reader
RFID Reader digunakan untuk membaca kartu RFID kaum duafa. Setiap kartu RFID yang terbaca ID akan dikirm ke mikrokontroler untuk diolah.
Gambar 3.12 Wiring RFID reader dan Arduino Mega
c. LED Indikator
LED ini dihubungkan dengan NodeMCU untuk mengetahui apakah alat sudah terhubung dengan jaringan wifi dan server.
18
3.3.2 Panel Pengendali
Gambar 3.14 Panel Pengendali
Panel Pengendali ini berukuran panjang 23 cm dan lebar 23 cm. Berisi modul dan mikrontroler untuk pengolahan data pada alat.Untuk Keterangan dari setiap bagian adalah seperti berikut :
A. NodeMCU dan Arduino Mega
Untuk mengatasi keterbatasan Arduino Mega yang tidak dapat terhubung dengan jaringan wifi, Arduino Mega dihubungkan dengan NodeMCU dengan menggunakan komunikasi serial. Arduino Mega akan mengolah setiap masukan dari RFID reader dan load cell . Setiap ID kartu yang terbaca oleh Arduino Mega akan dikirim ke NodeMCU untuk dikirim ke server, dimana ID tersebut akan dibandingkan dengan database. Hasil tersebut akan kembali dikirm ke Arduino Mega untuk diolah , untuk menentukan keluaran selanjutnya.
19
Gambar 3.15 Wiring NodeMCU dan Arduino Mega
B. Real Time Clock
Real Time Clock digunakan untuk mengetahui waktu terkini pada alat. Waktu ini disesuaikan dengan waktu pada server. Hasil dari RTC akan ditampilkan pada LCD dengan menunjukan hari , jam , menit dan detik terkini.
Gambar 3.16 Wiring RTC dan Arduino Mega
C. Relay
Relay pada alat ini digunakan sebagai saklar dari solenoid door. Solenoid tersebut dipasang pada tutup tangki beras.Solenoid ini bekerja pada tegangan 12v. Tutup tangki ini hanya dapat dibuka oleh admin.
20
Gambar 3.17 Wiring Relay, Solenoid door dan Arduino Mega
Gambar 3.18 Pemasangan Solenoid door pada tutup tangki D. Driver Motor L298n
Apabila Arduino Mega memberi sinyal untuk menggerakkan Motor DC, driver ini akan bekerja mengontrol gerakan motor DC. Motor ini bekerja pada tegangan 12 V. Untuk mengeluarkan beras 1 liter diperlukan 1 kali gerakan maju dan mundur. Untuk gerakan maju dan mundur , PWM (pulse with modulation) yang diberikan kepada motor adalah 200.
21
Gambar 3.19 Wiringdriver motor, motor DC dan Arduino Mega
Untuk motor dapat berhenti, terdapat 2 buah sensor infrared proximity untuk menentukan letak perhentian motor. Sensor ini bekerja ketika cahaya dari infrared dipantulkan oleh tabung (tabung diberi cat untuk memantulkan cahaya infrared). Jika Proximity 1 membaca putih maka tabung berada dalam posisi pengisian, sedangkan jika proximity 2 membaca putih, tabung beras dalam posisi mengeluarkan beras. Pada saat pengeluaran beras , tabung berhenti selama 2 detik, dan ketika pengisian beras berhenti 3 detik.
22
Gambar 3.21 Proximity sensor pada tabung beras E. Buzzer
Buzzer pada alat digunakan sebagai indikator suara.
Gambar 3.22 Wiringbuzzer dan Arduino Mega
F. Terminal kabel
Terminal kabel disini adalah untuk mempermudah pembagian sumber daya. Dibedakan menjadi 3 yaitu terminal 12V ,5V, dan ground. Sumber 12 V untuk Arduino Mega, NodeMCU, L298n, Relay dan 5 V untuk RTC, LCD , Infrared proximity sensor, HX711.
G. Power Supply
Sumber daya alat ini sepenuhnya berasal dari Power Supply. Memiliki Tegangan keluaran 12 V dan arus maksimal 5 Ampere.
23
3.3.3 Load Cell
Load Cell merupakan perangkat untuk mengetahui berat benda. Load cell ini dihubungkan dengan modul HX711 untuk mengubah keluaran dari resistansi menjadi tegangan yang dikuatkan agar mudah dibaca oleh Arduino Mega. Pada alat ini load cell diletakkan pada bagian bawah alat, untuk menimbang ketersediaan beras pada Tangki.
Gambar 3.23 Wiring load cell dan HX 711 dan Arduino Mega
Gambar 3.24 Pemasangan Load cell dan HX711 pada alas alat
3.4 Perancangan Perangkat Lunak
Pada bagian ini akan dijelaskan mengenai perancangan perangkat lunak dari Anjungan Beras Mandiri. Berikut adalah diagram alir dari perangkat lunak alat
24
25
Cara kerja dari alat ini adalah ketika alat dihidukan, NodeMCU akan mencoba menghubungkan jaringan wifi dan pada database server yang telah dibuat .Apabila sudah terkoneksi Led indikator akan menyala.
void setup() { Serial.begin(9600); NodeMCU.begin(115200); pinMode(LEDwifi, OUTPUT); pinMode(LEDdatabase, OUTPUT); Serial.println("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); } void loop() { if (!client.connect(host,80)) { Serial.println("Gagal Konek"); digitalWrite(LEDdatabase,LOW); delay(1000); return; } digitalWrite(LEDdatabase,HIGH); if(NodeMCU.available()){ RFID = NodeMCU.readString(); Serial.println(RFID); koneksi_database(); } }
Source 3.1. Periksa koneksi koneksi wifi dan database
Kemudian load cell akan menghitung beban yang ada pada tangki, dan jika beban tangki tidak memenuhi lebih dari 3Kg maka akan ada pemberitahuan yang ditampilkan pada LCD.
Setelah dua ketentuan tadi terpenuhi, maka alat akan bisa membaca kartu yang ditempelkan, setiap pembacaan kartu, ID kartu tersebut akan diolah pada Arduino mega dan dikirm ke NodeMCU untuk dibandingkan dengan database pada tabel db_user yang berisi jadwal pengambilan, nomor kartu RFID yang terdaftar,dan status untuk
26
menentukan sudah mengambil atau belum. Apabila nomor kartu terbaca pada jadwal yang tepat, dan nomor tersebut juga sudah terdaftar maka akan ada insert database pada tabel db_record yang berisi pencatatan nomor RFID ,nama, alamat, jatah, dan waktu ambil. Dan juga terdapat update pada baris ID RFID bersangkutan, menjadi status = 1.
$rfid = $_GET["data1"];
$sqlCekrfid="SELECT * from tb_user where rfid='$rfid' ";
$hasilCek1= mysqli_query($konek,$sqlCekrfid); if (mysqli_num_rows($hasilCek1)> 0)
{
echo "OK".",";
$sqlCeksudahambil="SELECT * from tb_user where rfid='$rfid' AND status='0'"; $hasilCek2= mysqli_query($konek,$sqlCeksudahambil);
if (mysqli_num_rows($hasilCek2)> 0) {
echo "OK".",";
$sqlCekjadwal=" SELECT * from tb_user where rfid='$rfid' AND hari='$day' AND '$jam' > mulai_ambil AND '$jam' < akhir_ambil";
$hasilCek3= mysqli_query($konek,$sqlCekjadwal); if (mysqli_num_rows($hasilCek3)> 0)
{
echo "OK".",";
$sqlinsert="insert into tb_record(rfid, nama, alamat, jatah) select
tb_user.rfid,tb_user.nama,tb_user.alamat,tb_user.jatah from tb_user where tb_user.rfid=$rfid";
$result1= mysqli_query($konek,$sqlinsert);
$sqlupdate="UPDATE `tb_user` SET `status` = '1' where rfid='$rfid' ";
$result2=mysqli_query($konek,$sqlupdate);
while($row =mysqli_fetch_assoc($hasilCek3))
{
echo $row["nama"]. "," .$row["jatah"];
}
}
else
{
echo "ERR".",";
$sqlCekjadwalsalah="SELECT * from tb_user where rfid='$rfid'"; $hasilCek4= mysqli_query($konek,$sqlCekjadwalsalah); while($row =mysqli_fetch_assoc($hasilCek4))
{
echo $row["hari"]. "," .$row["mulai_ambil"]. "-" .$row["akhir_ambil"];
} } } else { echo "ERR".","; } } else { echo "ERR".","; }
27
Setelah itu NodeMCU akan membaca echo hasil dari server. Kemudian data tersebut dikirim ke Arduino Mega untuk diolah menjadi keluaran.
if(ArduinoMega.available()) { cekrfid = ArduinoMega.readStringUntil(','); cekstatus= ArduinoMega.readStringUntil(','); cekjadwal = ArduinoMega.readStringUntil(','); no = ArduinoMega.readStringUntil(','); jatah = ArduinoMega.readStringUntil(',');
Source 3.3. Variabel data Arduino Mega
Data tersebut diolah oleh Arduino Mega. Jika didapatkan hasil bahwa ID RFID yang terbaca tersebut sudah mengambil, buzzer akan menyala sesaat dan terdapat pemberitahuan lewat LCD. Jika ID RFID tersebut mengambil pada jadwal yang salah aan ditampilkan jadwal peserta dan buzzer menyala sesaat.
void cek() {
jatahberas=jatah.toInt(); if(cekrfid=="ERR"){
Serial.println("Kartu Tidak Terdaftar"); lcd.clear();
lcd.setCursor(0, 1); //baris kedua lcd.print("Tidak Terdaftar"); buzzer();
}
else if(cekrfid=="OK" && cekstatus=="ERR"){ Serial.println("Anda Sudah Ambil"); lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Anda Sudah Ambil"); buzzer();
}
else if(cekrfid=="OK" && cekstatus=="OK" && cekjadwal=="ERR"){ Serial.println(no);
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("Mohon Ambil pada :"); lcd.setCursor(0, 1); lcd.print(no); lcd.setCursor(0, 2); lcd.print(jatah); buzzer(); delay(400); lcd.clear(); }
else if(cekjadwal=="OK" && jatahberas!="null"){ Serial.println(jatahberas);
lcd.clear();
28 lcd.print(no); lcd.setCursor(0, 1); lcd.print("Anda mendapat :"); lcd.setCursor(0, 2); lcd.print(jatah); lcd.setCursor(3, 2); lcd.print("Liter Beras"); for(int x=0;x<jatahberas;x++) { ambil(); } } lcd.clear(); }
Source 3.4. Cek Variabel Arduino Mega
Jika ID RFID telah memenuhi persyaratan ,maka motor akan bergerak memutar maju, dan jika sensor infrared 2 membaca warna putih maka motor tersebut akan berhenti selama 2 detik, kemudian bergerak memutar kearah sebaliknya. Jika sensor infrared 1 membaca putih maka motor akan berhenti. Gerakan motor ini ditentukan oleh jumlah jatah . void ambil() { b=digitalRead(38); while(b!=0){ b=digitalRead(38); maju(); Serial.println("maju"); } berhenti(); delay(2000); Serial.println("berhenti"); a=digitalRead(34); Serial.println(a); delay(2000); while(a==1){ a=digitalRead(34); mundur(); Serial.println("mundur"); Serial.println(a); } berhenti(); delay(3500); }
Source 3.5 Pergerakan Motor
Setelah proses ini mikrokontroler akan mengecek koneksi dan nilai load cell kembali, dan siap membaca kartu RFID.