Praktikum uP&uC Modul 4
Rancang Bangun Kontrol Ikan Mas Koki
1. Pendahuluan[kembali]
Ikan mas koki adalah spesies yang sensitif terhadap perubahan lingkungan. Kondisi air yang buruk dapat menyebabkan stres, penyakit, dan kematian pada ikan. Beberapa parameter yang penting untuk dikendalikan meliputi pH air, suhu, kejernihan air, ketinggian air, dan pemberian pakan yang tepat waktu. Dengan menggunakan sensor dan mikrokontroler, pemantauan dan pengendalian parameter-parameter ini dapat dilakukan secara otomatis dan real-time..
Akuarium ikan mas koki membutuhkan perawatan yang teliti agar ikan dapat hidup dalam kondisi optimal. Pemantauan dan pengendalian parameter lingkungan di akuarium sangat penting untuk menjaga kesehatan ikan. Dalam konteks ini, penggunaan mikrokontroler dan mikroprosesor untuk merancang sistem kontrol otomatis akuarium merupakan solusi yang inovatif dan efisien. Berikut adalah latar belakang mengenai tugas pemodelan mikroprosesor dan mikrokontroler dalam proyek "Rancang Bangun Kontrol Akuarium Ikan Mas Koki" dengan prinsip kerja menggunakan lima sensor diantaranya sensor pH, sensor DHT11, sensor touch, sensor RTD, sensor ultrasonic
Latar belakang di balik desain kontrol ikan mas koki otomatis dapat dilihat dari beberapa aspek, yaitu:
Ketidakpraktisan Pengelolaan Manual Ikan Mas Koki:
- Pengelolaan ikan mas koki secara manual sering kali memerlukan perhatian dan waktu yang banyak dari pemiliknya, seperti memberi makan, memantau kualitas air, dan menjaga kebersihan akuarium.
- Kesalahan dalam perawatan manual, seperti pemberian makan berlebihan atau kurangnya perawatan air, dapat menyebabkan stres dan penyakit pada ikan mas koki.
Kebutuhan Akan Solusi yang Efisien dan Mudah Digunakan:
- Gaya hidup modern yang sibuk membuat banyak pemilik ikan mencari cara yang lebih mudah dan efisien untuk merawat ikan mereka.
- Sistem kontrol otomatis dapat mengurangi beban perawatan harian, memberikan kenyamanan lebih kepada pemilik tanpa mengorbankan kualitas perawatan ikan mas koki.
Peningkatan Kesejahteraan dan Kelangsungan Hidup Ikan:
- Kondisi lingkungan yang stabil dan optimal sangat penting untuk kesehatan dan kesejahteraan ikan mas koki. Ini termasuk parameter seperti suhu, pH air, dan kadar oksigen.
- Sistem kontrol otomatis dapat secara konsisten memantau dan menyesuaikan parameter lingkungan, memastikan ikan mas koki tetap dalam kondisi terbaik dan mengurangi risiko penyakit.
Dengan demikian, pengembangan sistem kontrol ikan mas koki otomatis tidak hanya memudahkan pemilik dalam mengelola akuarium, tetapi juga berkontribusi pada kesehatan dan kesejahteraan ikan mas koki.
2. Tujuan[kembali]
Berikut beberapa tujuan dibalik alasan pembuatan rancang bangun kontrol ikan mas koki:
Meningkatkan Efisiensi Pengelolaan Akuarium:
Mengurangi kebutuhan pemantauan dan intervensi manual dari pemilik, sehingga menghemat waktu dan usaha dalam perawatan ikan mas koki.
Menjaga Kesehatan dan Kesejahteraan Ikan
Memastikan kondisi lingkungan akuarium selalu optimal dengan pemantauan dan penyesuaian parameter seperti suhu, pH, dan kadar oksigen secara otomatis
Menyediakan Solusi Praktis dan Mudah Digunakan
Mengembangkan sistem yang mudah dioperasikan oleh pemilik, termasuk mereka yang tidak memiliki banyak pengalaman dalam pemeliharaan ikan mas koki.
Mengurangi Risiko Kesalahan dalam Perawatan:
Meminimalkan kesalahan umum dalam perawatan manual, seperti pemberian makan berlebihan atau kurangnya perawatan air, yang dapat menyebabkan stres dan penyakit pada ikan.
Meningkatkan Kepuasan dan Kenyamanan Pemilik:
Menyediakan solusi yang mempermudah pemilik dalam menjaga ikan mas koki tetap sehat, sehingga memberikan pengalaman yang lebih menyenangkan dan memuaskan dalam memelihara ikan hias.
Mendorong Penggunaan Teknologi dalam Pemeliharaan Ikan:
Memperkenalkan teknologi otomatisasi kepada pemilik ikan hias, mendorong adopsi solusi modern yang dapat meningkatkan kualitas hidup ikan dan efisiensi perawatan.
Spesifikasi dari sensor pH :
- Tegangan Catu Daya: 5VDC
- Rentang Pengukuran: 0 - 14PH
- Suhu pengukuran: 0 - 60 ℃
- Akurasi: ± 0.1pH (25 ℃)
- Waktu Respon: ≤ 1 menit
- Sensor pH dengan Konektor BNC
- Antarmuka : pH2.0 (tambalan 3 kaki)
- Adjustable Potensiometer
- Indikator Daya LED
- Ukuran modul: 43 x 32mm (1.69x1.26 ")
Grafik respon sensor
Sensor sentuh (touch sensor) adalah perangkat yang mendeteksi sentuhan fisik atau tekananpada permukaannya dan mengubahnya menjadi sinyal listrik yang dapat diukur dan diproses oleh sistem elektronik. Ada beberapa jenis sensor sentuh, termasuk resistif, kapasitif, dan piezoelektrik.
Spesifikasi dari sensor Touch :
· Konsumsi daya yang rendah
· Bisa menerima tegangan dari 2 ~ 5.5V DC
· Dapat menggantikan fungsi saklar tradisional
· Dilengkapi 4 lobang baut untuk memudahkan pemasangan
· Tegangan kerja : 2v s/d 5.5v (optimal 3V)
· Output high VOH : 0.8 VCC (typical)
· Output low VOL : 0.3 VCC (max)
· Arus Output Pin Sink (VCC 3V, VOL 0.6V) : 8 mA
· Arus Output pin pull-up (VCC=3V, VOH=2.4V) : 4 mA
· Waktu respon (low power mode): max 220 ms
· Waktu respon (touch mode): max 60 ms
· Ukuran: 24 mm x 24 mm x 7.2 mm
Grafik respon sensor
4. Sensor TDS
Spesifikasi dari sensor TDS :
· Tegangan Input: 3.3 ~ 5.5V
· Tegangan Output: 0 ~ 2.3V
· Arus Kerja: 3 ~ 6mA
· Pengukuran TDS: 0 ~ 1000ppm
· Akurasi: ± 10% F.S. (25°C)
· Dimensi Modul: 42 x 32 mm
· Pajang Probe 83 cm
· Tipe Output: Tegangan Analog
Spesifikasi dari sensor ultrasonik :
· Dimensi : 45 mm (P) x 20 mm (L) x 15 mm (T)
· Tegangan : 5 VDC
· Arus pada mode siaga : < 2 mA
· Arus pada saat deteksi : 15 mA
· Frekuensi suara : 40 kHz
· Jangkauan Minimum : 2 cm
· Jangkauan Maksimum : 400 cm
Grafik respon sensor
6. Sensor Suhu DSI18B20
Spesifikasi dari sensor dht11 :
· Konsumsi daya yang rendah
· Bisa menerima tegangan dari 2 ~ 5.5V DC
· Dapat menggantikan fungsi saklar tradisional
· Dilengkapi 4 lobang baut untuk memudahkan pemasangan
· Tegangan kerja : 2v s/d 5.5v (optimal 3V)
· Output high VOH : 0.8 VCC (typical)
· Output low VOL : 0.3 VCC (max)
· Arus Output Pin Sink ( VCC 3V, VOL 0.6V) : 8 mA
· Arus Output pin pull-up (VCC 3V, VOH 2.4V) : 4 mA
· Waktu respon (low power mode): max 220 ms
· Waktu respon (touch mode): max 60 ms
· Ukuran: 24 mm x 24 mm x 7.2 mm
Grafik respon sensor
LCD (Liquid-Crystal Display) atau Penampil Kristal Cair adalah layar panel datar atau perangkat optik elektronik termodulasi yang menggunakan sifat modulasi cahaya dari kristal cair (liquid crystal) yang dikombinasikan dengan polarizer. Kristal cair tidak memancarkan cahaya secara langsung, melainkan menggunakan lampu latar atau reflektor untuk menghasilkan gambar berwarna atau monokrom.
Spesifikasi :
· Format tampilan : 16 x 2 karakter
· Pengontrol bawaan : ST 7066 (atau setara)
· Siklus kerja : 1/16
· 5 x 8 titik termasuk kursor
· hjbjscdncabmdbchjbawsdcsahb Supply + 5 V (juga tersedia untuk + 3 V)
· LED dapat digerakkan oleh pin 1, pin 2, pin 15, pin 16 atau A dan K
· N.V. opsional untuk supply + 3 V
8. Motor Driver
Motor driver adalah sebuah modul yang sering sekali digunakan untuk mengendalikan motor DC. Dengan menggunakan motor driver dapat dengan mudah mengendalikan baik itu kecepatan maupun arah rotasi 2 motor sekaligus. Motor driver dirancang menggunakan IC L298 Dual H-Bridge Motor Driver berisikan gerbang gerbang logika yang sudah sangat populer dalam dunia elektronika sebagai pengendali motor
Spesifikasi :
· Tegangan Input : 3.2V - 40V
· Driver : Driver Motor L298N Dual H Bridge DC
· Supply : 5V
· Arus puncak : 2A
· Kisaran operasi : 0 - 36 mA
· Konsumsi daya maksimum : 20W (ketika suhu 75 ℃)
· Suhu penyimpanan : -25 ℃ ~ +130 ℃
· Keluaran pin 10 (sumber tegangan IC) jika berfungsi sebagai pin output : 5V
· Ukuran : 3.4cm x 4.3cm x 2.7cm
9. Motor Pump
Motor pump / pompa air adalah alat untuk menggerakan air dari tempat bertekanan rendah ke tempat bertekanan yang lebih tinggi. Pada dasarnya motor pump sama dengan motor DC pada umumnya, hanya saja sudah di-packing sedemikian rupa sehingga dapat digunakan di dalam air.
Spesifikasi :
· Nilai Tegangan : DC 12V
· Beban : Air
· Penyerapan air : 1L – 1.2L/min
· Arus (dengan beban) : Kurang dari 320mA
· Arus : 2.0LPM
· Ukuran total : D27 x 75mm
· Diameter lubang air : 6.5mm
· Tekanan maksimum : Lebih dari 360mmHg
· Kebisingan : Kurang dari <60dB
4.1 Universal Asynchronous Receiver Transmitter (UART)
UART (Universal Asynchronous Receiver-Transmitter) adalah bagian perangkat keras komputer yang menerjemahkan antara bit-bit paralel data dan bit-bit serial. UART biasanya berupa sirkuit terintegrasi yang digunakan untuk komunikasi serial pada komputer atau port serial perangkat periperal.
4.2 Motor Servo
Motor servo adalah perangkat elektromekanis yang digunakan untuk mengontrol posisi sudut, kecepatan, dan akselerasi dengan presisi tinggi. Motor ini terdiri dari motor biasa yang digabungkan dengan sensor posisi dan rangkaian kontrol. Sensor posisi, sering berupa potensiometer atau enkoder, menyediakan umpan balik ke rangkaian kontrol, yang kemudian mengatur arus ke motor untuk mencapai posisi yang diinginkan. Motor servo digunakan dalam berbagai aplikasi yang memerlukan kontrol gerakan yang tepat, seperti robotika, kontrol pesawat, sistem navigasi otomatis, dan mekanisme penggerak presisi dalam industri manufaktur. Keandalannya dalam mencapai dan mempertahankan posisi tertentu membuatnya sangat populer dalam sistem otomatisasi dan kontrol gerak.
4.3. Motor Pump DC
Motor DC (Direct Current) adalah jenis motor listrik yang mengubah energi listrik arus searah menjadi energi mekanis berupa gerakan rotasi. Motor ini terdiri dari beberapa komponen utama: stator, rotor (atau armatur), komutator, sikat, dan sumber daya DC.
Pompa air DC adalah perangkat yang menggunakan motor listrik berarus searah (DC) untuk memompa air dari satu lokasi ke lokasi lain. Pompa ini sering digunakan dalam aplikasi portabel dan sistem energi terbarukan karena dapat dioperasikan menggunakan baterai atau panel surya. Komponennya meliputi motor DC, impeller untuk memindahkan air, dan casing yang melindungi serta mengarahkan aliran air. Pompa air DC umumnya digunakan dalam irigasi taman, sistem pendingin, akuarium, dan aplikasi rumah tangga lainnya yang memerlukan transfer air yang efisien dan andal. Keunggulannya termasuk konsumsi energi rendah, kemampuan untuk beroperasi pada tegangan rendah, dan kesederhanaan dalam instalasi serta perawatan.
4.4 Arduino
Arduino adalah kit elektronik atau papan rangkaian elektronik open source yang di dalamnya terdapat komponen utama yaitu sebuah chip mikrokontroler dengan jenis AVR dari perusahaan Atmel. Arduino yang kita gunakan dalam praktikum ini adalah Arduino Uno yang menggunakan chip AVR ATmega 328P. Dalam memprogram Arduino, kita bisa menggunakan komunikasi serial agar Arduino dapat berhubungan dengan komputer ataupun perangkat lain.
4.5 PWM (Pulse Width Modulation)
PWM (Pulse Width Modulation) adalah salah satu teknik modulasi dengan mengubah lebar pulsa (duty cylce) dengan nilai amplitudo dan frekuensi yang tetap. Satu siklus pulsa merupakan kondisi high kemudian berada di zona transisi ke kondisi low . Lebar pulsa PWM berbanding lurus dengan amplitudo sinyal asli yang belum termodulasi. Duty Cycle adalah perbandingan antara waktu ON (lebar pulsa High) dengan perioda. Duty Cycle biasanya dinyatakan dalam bentuk persen (%). PWM pada arduino bekerja pada frekuensi 500Hz, artinya 500 siklus/ketukan dalam satu detik. Untuk setiap siklus, kita bisa memberi nilai dari 0 hingga 255. Ketika kita memberikan angka 0, berarti pada pin tersebut tidak akan pernah bernilai 5 volt (pin selalu bernilai 0 volt). Sedangkan jika kita memberikan nilai 255, maka sepanjang siklus akan bernilai 5 volt (tidak pernah 0 volt). Jika kita memberikan nilai 127 (kita anggap setengah dari 0 hingga 255, atau 50% dari 255), maka setengah siklus akan bernilai 5 volt, dan setengah siklus lagi akan bernilai 0 volt. Sedangkan jika jika memberikan 25% dari 255 (1/4 x 255 atau 64), maka 1/4 siklus akan bernilai 5 volt, dan 3/4 sisanya akan bernilai 0 volt, dan ini akan terjadi 500 kali dalam 1 detik.
4.6 ADC (Analog to Digital Converter)
ADC atau Analog to Digital Converter merupakan salah satu perangkat elektronika yang digunakan sebagai penghubung dalam pemrosesan sinyal analog oleh sistem digital. Fungsi utama dari fitur ini adalah mengubah sinyal masukan yang masih dalam bentuk sinyal analog menjadi sinyal digital dengan bentuk kode-kode digital.Ada 2 faktor yang perlu diperhatikan pada proses kerja ADC yaitu kecepatan sampling dan resolusi.
Kecepatan sampling menyatakan seberapa sering perangkat mampu mengkonversi sinyal analog ke dalam bentuk sinyal digital dalam selang waktu yang tertentu. Biasa dinyatakan dalam sample per second (SPS). Sementara Resolusi menyatakan tingkat ketelitian yang dimilliki. Pada Arduino, resolusi yang dimiliki adalah 10 bit atau rentang nilai digital antara 0 - 1023. Dan pada Arduino tegangan referensi yang digunakan adalah 5 volt, hal ini berarti ADC pada Arduino mampu menangani sinyal analog dengan tegangan 0 - 5 volt. Pada Arduino, menggunakan pin analog input yang diawali dengan kode A (A0- A5 pada Arduino Uno). Fungsi untuk mengambil data sinyal input analog menggunakan analogRead(pin);.
Prosedur program terdiri dari
- Download library yang diperlukan pada bagian download dalam blog.
- Buka proteus yang sudah diinstal untuk membuat rangkaian.
- Tambahkan komponen seperti Arduino, sensor, dan perangkat lainnya lalu susun menjadi rangkaian.
- Buka Arduino IDE yang sudah diinstal.
- Di Arduino IDE, pergi ke menu "File" > "Preferences".Pastikan opsi
- "Show verbose during compile" dicentang untuk mendapatkan informasi detail saat kompilasi.
- Salin kode program Arduino pada blog kemudian tempelkan program tadi ke Arduino IDE.
- Kompilasikan kode dengan menekan tombol "Verify" di Arduino IDE.
- Cari dan salin path file HEX yang dihasilkan selama proses kompilasi.
- Kembali ke Proteus dan pilih Arduino yang telah Anda tambahkan di rangkaian.
- Buka opsi "Program File" dan tempelkan path HEX yang telah Anda salin dari Arduino IDE.
- Jalankan simulasi di Proteus.
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
const int tdsPin = A0;
const int suhuPin = A1;
const int pHPin = A2;
const int echoPin = 12;
const int triggerPin = 11;
const int touchPin = 2;
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
}
void loop() {
// Baca nilai sensor
float tdsValue = analogRead(tdsPin) * (5.0 / 1023.0) * 1000;
float suhuValue = analogRead(suhuPin) * (5.0 / 1023.0) * 100;
float pHValue = analogRead(pHPin) * (14.0 / 1023.0);
//Sensor Ultrasonik
long duration, jarak;
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
duration = pulseIn(echoPin, HIGH);
jarak = (duration / 2) / 29.1;
//Sensor Touch
int touchStatus = digitalRead(touchPin);
// Kirim karakter ke slave
if (touchStatus == HIGH){
Serial.write('A');
} else{
Serial.write('B');
}
if (suhuValue > 35){
Serial.write('C');
} else{
Serial.write('D');
}
if (pHValue > 8){
Serial.write('E');
} else if(pHValue < 7){
Serial.write('F');
} else{
Serial.write('G');
}
if (tdsValue > 20 || jarak > 23){
Serial.write('H');
} else{
Serial.write('I');
}
if(jarak < 10){
Serial.write('J');
} else{
Serial.write('K');
}
// Tampilkan nilai sensor di LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("TDS: ");
lcd.print(tdsValue);
lcd.print(" ppm");
lcd.setCursor(0, 1);
lcd.print("Suhu: ");
lcd.print(suhuValue);
lcd.print(" C");
lcd.setCursor(0, 2);
lcd.print("pH: ");
lcd.print(pHValue);
lcd.setCursor(0, 3);
lcd.print("Jarak: ");
lcd.print(jarak);
lcd.print(" cm");
delay(100);
}
#include <Servo.h>
const int motorKipas = 3;
const int motorPengurasAir = 5;
const int motorPenambahAir = 6;
Servo motorPakan;
Servo motorCairanAsamBasa;
void setup() {
Serial.begin(9600);
pinMode(motorKipas, OUTPUT); // motorKipas (DC)
pinMode(motorPengurasAir, OUTPUT); // motorPengurasAir (DC)
pinMode(motorPenambahAir, OUTPUT); // motorPenambahAir (DC)
motorPakan.attach(10); // motorPakan (servo)
motorCairanAsamBasa.attach(11); // motorCairanAsamBasa (servo)
}
void loop() {
if (Serial.available() > 0) {
char input = Serial.read();
switch(input) {
case 'A':
motorPakan.write(90); // Mengaktifkan motor pakan
break;
case 'B':
motorPakan.write(0); // Mengembalikan motor pakan ke posisi semula
break;
case 'C':
digitalWrite(motorKipas, HIGH);
break;
case 'D':
digitalWrite(motorKipas, LOW);
break;
case 'E':
motorCairanAsamBasa.write(0); //Putar ke kiri menambah cairan asam
break;
case 'F':
motorCairanAsamBasa.write(180); //Putar ke kanan menambah cairan basa
break;
case 'G':
motorCairanAsamBasa.write(90); //Kembali ke posisi awal
break;
case 'H':
digitalWrite(motorPengurasAir, HIGH);
break;
case 'I':
digitalWrite(motorPengurasAir, LOW);
break;
case 'J':
digitalWrite(motorPenambahAir, HIGH);
break;
case 'K':
digitalWrite(motorPenambahAir, LOW);
break;
}
}
}