34 3.1. Persiapan Perancangan Alat
Bab ini akan membahas mengenai perancangan alat mulai dari perangkat lunak (Software) hingga ke perangkat Keras (Hardware), mengenai sistem perancangan akan dilakukan pengecekan contoh program sesuai standar yang dimiliki Arduino.
Pada proses persiapan perakitan perangkat harus didukung dengan peralatan yang lengkap dan standar, agar memudahkan selama perakitan. Dan perancangan mesin penetas telur tentunya merupakan penggabungan dari perangkat lunak mulai dari :
1. Arduino
Merupakan induk program dari perangkat lunak untuk di aplikasikan sesuai kebutuhan
2. Sensor DHT11
Sebuah sensor yang dikemas dalam rangkaian integrasi, sehingga perancang dimudahkan dan terkoneksi ke pin digital Arduino dan dapat di program sesuai kebutuhan.
3. Fan
Berfungsi untuk membuang kelebihan temperature panas dan melakukan sirkulasi udara dalam ruang inkubator
4. LCD 16 X 2
Merupakan indikator yang memberikan tapilan level air secara jelas sehingga lebih mudah dari segi pembacaan
5. Relay Shield
Komponen ini hanya difungsikan sebagai sakelar yang akan mentriger ke fan, apabila kondisi ruang tidak sesuai dengan suhu (sesuai batas yang di program dalam Arduino), maka Relay akan bekerja dan apabila telah mencapai titik terntu akan putus (Cutoff). 6. Power supply
Memberikan supply tegangan untuk arduino, fan dan motor DC 7. Motor DC 12V, Untuk memutar rak telur dalam ruang inkubator 8. Bohlam lampu, Digunakan sebagai pemanas ruang inkubator
3.2. Proses Perancangan Alat
Perancangan mesin penetas telur ini akan kita bahas mengenai Blok Diagram, Prinsip Kerja dan pengenalan Program- program Arduino yang akan dipakai dalam sistem ini
3.2.1 Blok Diagram
Berdasarkan pada gambar alur di bawah ini, maka prinsip kerja dari alat mesin penetas telur sebagai berikut :
Sensor DHT11 berfungsi untuk mendapatkan data suhu dan kelembaman, kemudian dimasukan ke input digital arduino untuk di proses.
Hasil pembacaan sensor DHT11 akan ditampilkan kedalan LCD (Liquid Crystal Display). Ketika suhu terlalu tinggi maka kipas akan menyala dan lampu akan mati, dan sebaliknya jika suhu terlalu rendah dari set point maka lampu menyala kembali dan kipas akan mati.
Gambar 3.1 Diagram Blok Mesin Penetas Telur Otomatis
3.2.2 Rangkaian Sensor DHT11
Sensor Suhu DHT11 berfungsi sebagai masukan pada sistem rangkaian Arduino Uno. PIN V+ dari DHT11 dihubungkan dengan catu daya pada pin power 5 volt yang terdapat pada Arduino Uno, PIN GND dihubungkan ke PIN GND Power Arduino Duemolanove dan pin Vout – yang menghasilkan tegangan
analog hasil pengindera suhu dihubungkan ke pin A0 Analog In pada Arduino Uno.
Gambar 3.2 Sensor DHT11
DHT11 dapat mengukur suhu antara 0-50 derajat celcius dan kelembaban udara antara 20%-90% dengan resolusi masing-masing sebesar 0,1 derajat Celcius dan 1% RH (Relative Humidity). Akurasi untuk pengukuran dan kelembaban adalah (+/- ) 2 derajat celcius dan (+/-) 4% RH.
Keluaran Modul sensor DHT11 telah dikalibrasi dengan tabung kalibrasi secara akurat, dan nilai koefisien kalibrasinya disimpan dalam memori OTP. DHT11 menggunakan teknologi sensor kelembaban yang baik dan menggunakan teknik akuisisi data eksklusif dengan memanfaatkan mikrokontroler 8 bit untuk menghasilkan data dalam format single bus.
3.2.3 Aplikasi Program Arduino IDE (Integrated Development Environment) Setelah proses rangkaian selesai dibuat langkah selanjutnya adalah membuat program pada apliaksi program arduino IDE (Integrated Development Environment). Buka program aplikasi arduino IDE kemudian bentuk tampilan kerja aplikasi arduino IDE Sketch terlihat seperti gambar 3.4
Gambar 3.3 Program Arduino IDE (Integrated Development Environment)
3.2.3.1 Bahasa Program Arduino IDE yang digunakan Float
Float point numbers sering digunakan untuk memperkirakan nilai analog dan berkelanjutan karena nilai tersebut memiliki resolusi yang lebih besar daripada integers. float point numbers dapat menyimpan sebesar 32bit dengan range 3.4028235E+38 sampai
-3.4028235E+38. Angka tersebut disimpan dalam 32 bits (4 bytes) dari informasi. Float hanya memiliki 6-7 digit decimal. Pada arduino, Double sama nilainya dengan Float.
Contoh :
float myfloat;
float sensorCalbrate = 1.117;
Syntax :
float var = val;
var - your float variable name
val - the value you assign to that variable Contoh kode :
int x; int y; float z; x = 1;
y = x / 2; // y now contains 0, ints can't hold fractions
z = (float)x / 2.0; // z now contains .5 (you have to use 2.0, not 2)
Byte
Tipe byte dapat menyimpan 8-bit nilai angka bilangan asli tanapa koma. Byte memiliki range 0 – 255.
Contoh :
Byte biteVariable = 180; // mendeklarasikan ‘biteVariable’ sebagai type byte
Void (Setup)
Fungsi setup() hanya di panggil satu kali ketika program pertama kali di jalankan. Ini digunakan untuk pendefinisian mode pin atau memulai komunikasi serial. Fungsi setup() harus di ikut sertakan dalam program walaupun tidak ada statement yang di jalankan. Contoh :
void setup() {
pinMode(13,OUTPUT); // mengset ‘pin’ 13 sebagai output
}
Loop
Setelah melakukan fungsi setup() maka secara langsung akan melakukan fungsi loop() secara berurutan dan melakukan instruksi-instruksi yang ada dalam fungsi loop().
Contoh :
void loop() {
digitalWrite(13, HIGH); // nyalakan ‘pin’ 13 delay(1000); // pause selama 1 detik
digitalWrite(13, LOW); // matikan ‘pin’ 13 delay(1000); /// pause selama 1 detik }
Serial begin ()
Statement ini di gunakan untuk mengaktifkan komunikasi serial dan mengset baudrate.
Contoh :
void setup() {
Serial.begin(9600); //open serial port and set baudrate 9600 bps
Analog Read ()
Papan Arduino memiliki 6 chanel, 10 bit analog ke digital, artinya kita dapat memasukkan tegangan antara 0 dan 5 volts pada nilai integer antara 0 sampai 1023. Kisaran input atau masukan dan resolusi dapat dirubah menggunakan analog reference. Untuk membaca analog input dibutuhkan dibutuhkan sekitar 100 microsecond (0.0001 s). Jadi rata – rata membacanya sekitar 10.000 kali dalam satu detik. Catatan : jika pin analog input tidak dapat terkoneksi dengan apapun nilainya akan kembali pada analogRead.
Syntax :
analogRead(pin) Contoh :
Int analogPin = 3 // potentiometer wiper middle terminal connected to analog pin 3
Void setup () { Serial.begin (9600); } Void loop () {
Val = analogRead(analogPin); // Read the input pin
Serial.println(val); //debug value }
Delay ()
Menghentikan program untuk mengukur waktu (dalam millisecond) yang terspesifikasi pada parameter (ada 1000 milisecond dalam setiap detik). Pada saat mudahnya membuat LED berkedip dengan fungsi delay, beberapa sketch atau lembar kerja mengalami delay. Membaca sensor, perhitungan Matematika, atau memanipulasi
Pin dapat berkerja pada saat fungsi delay bekerja. Beberapa program berbasis pengetahuan biasanya menghindari penggunaan delay untuk kegiatan yang membutuhkan waktu lebih dari 10 miliseconds.
Delay(1000); // menunggu selama satu detik
Selanjutnya hubungkan Arduino Uno ke komputer dengan menggunakan kabel USB (Universal Serial Bus). Lalu kita dapat mengetikkan program pada lembar kerja Sketch kemudian compile untuk mengecek atau memeriksa apakah kode sudah benar sebelum dikirim ke papan Arduino, program tersebut dapat diketik seperti dibawah ini :
#define DHT11_PIN 0 // define analog port 0 byte read_dht11_dat()
{
byte i = 0; byte result=0; for(i=0; i< 8; i++) {
while(!(PINC & _BV(DHT11_PIN))) {};
delayMicroseconds(30); if(PINC & _BV(DHT11_PIN)) result |=(1<<(7-i));
while((PINC & _BV(DHT11_PIN))); // wait '1' finish }
return result; }
void setup() {
DDRC |= _BV(DHT11_PIN); //let analog port 0 be output port
PORTC |= _BV(DHT11_PIN); //let the initial value of this port be '1' Serial.begin(9600); Serial.println("Ready"); } void loop() { byte dht11_dat[5]; byte dht11_in;
byte i;// start condition PORTC &= ~_BV(DHT11_PIN); delay(18);
PORTC |= _BV(DHT11_PIN); delayMicroseconds(1);
DDRC &= ~_BV(DHT11_PIN);//let analog port 0 be input port delayMicroseconds(40);
dht11_in = PINC & _BV(DHT11_PIN);// read only the input port 0
if(dht11_in) {
Serial.println("dht11 start condition 1 not met"); // wait for DHT response signal: LOW
delay(1000); return; }
delayMicroseconds(80);
{
Serial.println("dht11 start condition 2 not met"); //wair for second response signal:HIGH
return; }
delayMicroseconds(80);// now ready for data reception for (i=0; i<5; i++)
{ dht11_dat[i] = read_dht11_dat();} DDRC |= _BV(DHT11_PIN); PORTC |= _BV(DHT11_PIN); byte dht11_check_sum = dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat[3]; if(dht11_dat[4]!= dht11_check_sum) {
Serial.println("DHT11 checksum error"); } Serial.print("Kelembaban = "); Serial.print(dht11_dat[0], DEC); Serial.print("."); Serial.print(dht11_dat[1], DEC); Serial.print("% "); if(dht11_dat[0]>=60){ digitalWrite(13,HIGH); } else{ digitalWrite(13,LOW); delay(2000); } Serial.print("Suhu = "); Serial.print(dht11_dat[2], DEC);
Serial.print("."); Serial.print(dht11_dat[3], DEC); Serial.println("C "); if(dht11_dat[2]>=25,dht11_dat[2]<=30){ digitalWrite(12,HIGH); } else{ digitalWrite(12,LOW); delay(2000); } delay(2000); }
3.2.4 Program Relay dengan Arduino
Dengan menggunkan Relay shield yang mana kompetibe dengan Arduino. Relay ini bisa difungsikan untuk mengontrol sebuah teganggan listrik, saklar lampu dan lain – lain. Dalam perancangan ini, relay shield akan difungsikan untuk saklar yang dihubungkan dengan Arduino.
Pada bagian Bab II telah dibahas skema Relay Shield, karena dalam perakitan tidak digunakan Relay Shield yang Pabrikasi, melainkan dirakit sendiri. Secara fungsi sama tetapi dari segi biaya lebih efisiensi.
Berikut contoh wiring diagram Relay Shield :
Gambar 3.5 Skema Arduino dengan Relay Shield
Selanjutnya hubungkan Arduino Duemilanove ke komputer dengan menggunakan kabel USB (Universal Serial Bus). Lalu kita dapat mengetikkan program pada lembar kerja Sketch kemudian compile untuk mengecek atau memeriksa apakah kode sudah benar sebelum dikirim ke papan Arduino, program tersebut dapat diketik seperti dibawah ini :
//Arduino Sample Code //www.DFRobot.com
//This code has been updated to work with the sample code provided in the Wiki
int Relay = 3; void setup() {
pinMode(13, OUTPUT); //Set Pin13 as output digitalWrite(13, HIGH); //Set Pin13 High
pinMode(Relay, OUTPUT); //Set Pin3 as output }
void loop() {
digitalWrite(Relay, HIGH); //Turn off relay delay(2000);
digitalWrite(Relay, LOW); //Turn on relay delay(2000);
}
3.2.5 Program LCD Dengan Arduino
Pada bagian ini kami akan mengulas tentang metode contoh program standar dari Arduino untuk LCD (Liquid Crystal Display) .
Modul LCD Character dapat dengan mudah dihubungkan dengan mikrokontroller seperti AT89S51. LCD yang akan kita praktikumkan ini mempunyai lebar display 2 baris 16 kolom atau biasa disebut sebagai LCD Character 16X2. dengan 16 pin konektor, yang didifinisikan sebagai berikut:
Gambar 3.7 Modul LCD Karakter 16X2 LCD memiliki karakteristik sebagai berikut:
• Terdapat 16 x 2 karakter huruf yang bisa ditampilkan. • Terdapat 192 macam karakter.
• Terdapat 80 x 8 bit display RAM (maksimal 80 karakter).
• Memiliki kemampuan penulisan dengan 8 bit maupun dengan 4 bit. • Dibangun dengan osilator lokal.
• Satu sumber tegangan 5 volt.
• Otomatis reset saat tegangan dihidupkan. • Bekerja pada suhu 0oC sampai 55oC
Selanjutnya menghubungkan Arduino Duemilanove ke komputer dengan menggunakan kabel USB (Universal Serial Bus). Lalu kita dapat mengetikkan program pada lembar kerja Sketch kemudian compile untuk mengecek atau memeriksa apakah kode sudah benar sebelum dikirim ke papan Arduino, program tersebut dapat diketik seperti dibawah ini :
// include the library code: #include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
// set up the LCD's number of columns and rows: lcd.begin(16, 2);
// Print a message to the LCD. lcd.print("hello, world!"); }
void loop() {
// Turn off the display: lcd.noDisplay();
delay(500);
// Turn on the display: lcd.display();
delay(500); }
3.2.6 Driver Motor DC ( L298P )
Untuk memutar rak telur ( egg tray ) digunakan sebuah motor DC 12V untuk memindahkan posisi rak, pemutaran telur sedikitnya adalah 3 kali sampai 6 kali selama 24 jam, dalam rancangan penulis dibuat perputaran selama 6 kali, untuk mengatur kecepatan motor digunakan sebuah driver L298P yang terintegrasi dengan modul arduino, pengiriman arus keluaran sampai dengan 2A setiap saluran.
Pengaturan kecepatan dicapai melalui PWM konvensional yang dapat diperoleh dari Pin output PWM Arduino ini 5 dan 6. ini mengaktifkan / menonaktifkan fungsi kontrol motorik ditandai dengan Arduino Digital Pin 4 dan 7.Pelindung motor dapat diaktifkan langsung dari Arduino atau dari sumber daya
eksternal.
Gambar 3.8 Arduino Motor Shield L298P
Contoh program pengendali motor DC menggunakan Arduino motor shield L293P
// Motor shield ini menggunakan pin 4,5, untuk mengontrol 1 motor
// Sambungkan motor DC ke M1+, M1-, // Upload sketch ke Arduino
// Via serial monitor, ketikkan "a", "s", "d", "w", dan "x" // Last Modified : 10 Feb 2012, toto giyarto
#define leftMotor_Dir 4 // arah putar
#define leftMotor_Vel 5 // kontrol kecepatan void leftMotor(int pwm, boolean reverse) {
analogWrite(leftMotor_Vel, pwm);
if (reverse) digitalWrite(leftMotor_Dir, HIGH); else digitalWrite(leftMotor_Dir, LOW);
}
void setup() {
int i;
for(i=4;i<=7;i++) //set pin 4,5, to output mode pinMode(i, OUTPUT); Serial.begin(9600); } void maju (){ leftMotor(100,true); delay (1000); } void mundur (){ leftMotor(100,false); delay (1000); } void loop() { maju (); delay (5000); leftMotor(0,false); delay (2*60*60*1000);
mundur (); delay (3000); }
Selanjutnya hubungkan gabungkan dari beberapa komponen yaitu sensor DHT11 dan relay dengan Arduino Duemilanove ke komputer dengan menggunakan kabel USB (Universal Serial Bus). Lalu kita dapat mengetikkan program pada lembar kerja Sketch kemudian compile untuk mengecek atau memeriksa apakah kode sudah benar sebelum dikirim ke papan Arduino, program tersebut dapat diketik seperti dibawah ini :
// Program Penetas Telur Secara Otomatis Berbasis Arduino #define leftMotor_Dir 4 // arah putar (Motor 2 / Kiri)
#define leftMotor_Vel 5 // kontrol kecepatan (Motor 2 / Kiri void leftMotor(int pwm, boolean reverse) {
analogWrite(leftMotor_Vel, pwm);
if (reverse) digitalWrite(leftMotor_Dir, HIGH); else digitalWrite(leftMotor_Dir, LOW);
} /*
The circuit:
* LCD RS pin to digital pin 8 * LCD Enable pin to digital pin 9 * LCD D4 pin to digital pin 4 * LCD D5 pin to digital pin 5 * LCD D6 pin to digital pin 6 * LCD D7 pin to digital pin 7 * LCD BL pin to digital pin 10 * KEY pin to analogl pin 0
*/
#include <LiquidCrystal.h> #include <LCDKeypad.h>
LiquidCrystal lcd(9, 8, 7, 6, 5, 4); #define DHT11_PIN 0 // ADC0 byte read_dht11_dat()
{
byte i = 0; byte result=0; for(i=0; i< 8; i++) {
while(!(PINC & _BV(DHT11_PIN))); // wait for 50us delayMicroseconds(30);
if(PINC & _BV(DHT11_PIN)) result |=(1<<(7-i));
while((PINC & _BV(DHT11_PIN))); // wait '1' finish } return result; } int Relay = 3; int Relay1 = 2; void setup() { int i;
for(i=4;i<=7;i++) //set pin 4,5, to output mode pinMode(i, OUTPUT); Serial.begin(9600); DDRC |= _BV(DHT11_PIN); PORTC |= _BV(DHT11_PIN); Serial.begin(9600); lcd.println("Ready"); lcd.clear(); lcd.begin(16, 2); pinMode(12, OUTPUT);
digitalWrite(12, HIGH); pinMode(Relay, OUTPUT); pinMode(13, OUTPUT); digitalWrite(13, HIGH); pinMode(Relay1, OUTPUT); } void maju (){ leftMotor(100,true); delay (1000); } void mundur (){ leftMotor(100,false); delay (1000); } void loop() { byte dht11_dat[5]; byte dht11_in;
byte i;// start condition
// 1. pull-down i/o pin from 18ms PORTC &= ~_BV(DHT11_PIN);
delay(18); PORTC |= _BV(DHT11_PIN); delayMicroseconds(40); DDRC &= ~_BV(DHT11_PIN); delayMicroseconds(40);
dht11_in = PINC & _BV(DHT11_PIN); if(dht11_in)
{
lcd.println("dht11 start condition 1 not met"); return;
}
delayMicroseconds(80);
dht11_in = PINC & _BV(DHT11_PIN); if(!dht11_in)
{
lcd.println("dht11 start condition 2 not met"); return;
}
delayMicroseconds(80);// now ready for data reception for (i=0; i<5; i++)
dht11_dat[i] = read_dht11_dat(); DDRC |= _BV(DHT11_PIN); PORTC |= _BV(DHT11_PIN); byte dht11_check_sum = dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat[3];// check check_sum if(dht11_dat[4]!= dht11_check_sum) {
lcd.println("DHT11 checksum error"); } lcd.clear(); lcd.print("Kelembaban="); lcd.print(dht11_dat[0],DEC); lcd.print("."); lcd.print(dht11_dat[1],DEC); lcd.print("%"); lcd.setCursor(0,1); if(dht11_dat[0]<=50){ digitalWrite(Relay,HIGH); } else{ digitalWrite(Relay,LOW); //delay(2000); } lcd.print(" Suhu = "); lcd.print(dht11_dat[2],DEC); lcd.print("."); lcd.print(dht11_dat[3],DEC); lcd.println("C"); lcd.setCursor(0,0); if((dht11_dat[2])<=38){ digitalWrite(Relay1,HIGH); }
else { digitalWrite(Relay1,LOW); delay(2000); } delay(2000); maju (); delay (5000); leftMotor(0,false); delay (2*60*60*1000); mundur (); delay (3000); }
3.3. Perancangan Mesin Inkubator penetas telur
Mesin penetas dibuat dari bahan multiplek berbentuk kotak persegi dengan ukuran PxLxT (40x30x40) seperti terlihat dibawah ini:
3.3.1 Bahan yang digunakan Papan multiplek Ram Aluminium Lem kayu Kertas eksterior Mika bening
3.3.2 Peralatan yang digunakan Penggaris, pensil
Paku, palu, amplas Tang, obeng
Bor listrik, gergaji mesin
Potong papan multiplek sesuai dengan ukuran yang telah dikehendaki, haluskan sisa pemotongan dengan menggunakan amplas, dilanjutkan dengan menyatukan potongan – potongan tadi dengan menggunakan lem kayu untuk merekatkan antar bagian, kemudian dipaku agar menjadi lebih kuat.
Setelah mesin penetas jadi, agar terlihat lebih bagus dan menambah nilai jual bagian luar mesin penetas diberi lapisan kertas eksterior.