Dokumen ini membahas tentang inkubator otomatis untuk telur yang dirancang menggunakan Arduino. Inkubator ini dapat mengatur suhu secara otomatis dengan menggunakan sensor suhu, relay, dan kipas/lampu untuk menghangatkan atau mendinginkan. Inkubator ini juga dilengkapi alarm gerak dan antarmuka keypad untuk pengaturan manual.
2.
Ayam memiliki ‘mood’ untuk mengerami telur
hanya pada waktu tertentu (broody)
Dibutuhkan inkubator saat kekurangan ayam untuk
mengerami telur
Inkubator yang ada dan dibuat sendiri bersifat
manual harus memantau temperatur dengan
termometer.
Pendahuluan
9.
User menyalakan inkubator melalui switch
User memasukkan suhu ideal melalui keypad
Sistem akan menyesuaikan agar suhu di dalam
inkubator sesuai dengan suhu yang diinput
User menekan keypad untuk mematikan alarm,
mengatur mode manual/otomatis, menyalakan
lampu/kipas, serta mematikan lampu dan kipas
Spesifikasi Inkubator -
Interaksi
13. Kode Program – Arduino 1 (Input)
/* Sensor LM 35
Mencetak temperatur ke serial monitor */
#include <Wire.h>
#include <Keypad.h>
#include <LiquidCrystal.h>
int state = 0; // 0 = otomatis & 1 = manual
//Variable untuk keypad
const int inPin = 0;
const byte ROWS = 4; // jumlah baris = 4
const byte COLS = 3; // jumlah kolom = 3
// Mendefiniskan keypad map
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
// Menyambungkan keypad ROW0, ROW1, ROW2 dan ROW3 ke pin digital arduino.
byte rowPins[ROWS] = { 0, 1 , 7, 8 };
// Menyambungkan keypad COL0, COL1 and COL2 ke pin digital arduino.
byte colPins[COLS] = { 9, 10, 13 };
//Menciptakan 'objek keypad'
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
// Inisialisasi library tadi dengan nomor pin
// yang digunakan untuk interface
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
// Kita set bit rate dari komunikasi serialnya 9600 bps
Serial.begin(9600);
// Banyaknya kolom yang dipakai 16. Dan barisnya
// sebanyak 2. Itu dari sananya.
lcd.begin(16, 2);
// Tuliskan pesannya ke LCD
lcd.print("Suhunya saat ini :");
Wire.begin(); // join i2c bus (address optional for master)
}
void loop() {
int alarm = 0;
char key = kpd.getKey();
//mengeset hasil pembacaan sensor LM 35
int value = analogRead(inPin);
/* mengubah hasil pembacaan sensor LM 35
ke dalam milivolt */
float millivolts = (value / 1024.0) * 5000;
// mengkonversi ke dalam Celcius
float celcius = millivolts / 10;
// Pindahkan kursor ke baris 2, kolom paling kiri
lcd.setCursor(0, 1);
15. Kode Program – Arduino 2 (Output)
#include <Wire.h>
//define names for the 4 Digital pins On the Arduino
7,8,9,10
//These data pins link to 4 Relay board pins IN1, IN2,
IN3, IN4
#define RELAY1 8
#define RELAY2 9
int valPIR = LOW;
int statePIR = LOW; // we start, assuming no
motion detected
int inputPIR = 7; // choose the input pin (for PIR
sensor)
int lampstate = 0; //kondisi lampu
int fanstate = 0; //kondisi kipas
int pinALARM = 13;
int statemove = 0;
int counter = 0;
void setup()
{
// Initialise the Arduino data pins for OUTPUT
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
pinMode(inputPIR, INPUT);
pinMode(pinALARM, OUTPUT);
Wire.begin(4); // join i2c bus with address #4
Wire.onReceive(receiveEvent); // register event
Serial.begin(9600); // start serial for output
}
void loop()
{
delay(100);
}
16. Kode Program – Arduino 2 (Output)
// function that executes whenever data is received from
master
// this function is registered as an event, see setup()
void receiveEvent(int howMany)
{
int x = Wire.read(); // receive byte as an integer
Serial.print("X = ");
Serial.println(x);
if (x == 1 && lampstate == 0) { //lampu nyalain
digitalWrite(RELAY1,LOW);
digitalWrite(RELAY2,HIGH);
lampstate = 1;
} else if (x == 2 && lampstate == 1 || x ==2 && fanstate
== 1) { //matiin lampu atau kipas
digitalWrite(RELAY1,HIGH);
lampstate = 0;
digitalWrite(RELAY2,HIGH);
fanstate = 0;
} else if (x == 3 && fanstate == 0) { //kipas nyalain
digitalWrite(RELAY1,HIGH);
digitalWrite(RELAY2,LOW);
fanstate = 1;
} else if (x == 4) { //lampu nyalain mode darurat
digitalWrite(RELAY1,LOW);
digitalWrite(RELAY2,HIGH);
lampstate = 1;
} else if (x == 5) { //kipas nyalain mode darurat
digitalWrite(RELAY1,HIGH);
digitalWrite(RELAY2,LOW);
fanstate = 1;
}
valPIR = digitalRead(inputPIR); // read input value
if(valPIR == HIGH && statePIR == LOW){
//kirim sinyal untuk menyalakan alarm
digitalWrite(pinALARM, HIGH);
statemove = 1;
statePIR = HIGH;
}
Serial.print("sensor gerak = ");
Serial.println(x);
if (statemove = 1) {
counter++;
}
if (counter >= 30 || x == 9 ) {
statemove = 0;
counter = 0;
digitalWrite(pinALARM, LOW);
statePIR = LOW;
}
}
17.
Pengetesan dengan membandingkan kerja inkubator
dengan hasil pembacaan LM35.
Testing
18.
Temperatur yang dibaca oleh arduino input saat
ditransfer ke arduino output nilainya aneh
Kabel diganti menjadi kabel fleksibel yang di dalamnya
berupa serabut harus dilapisi timah
Serial monitor tidak ada perubahan, masalah hardware
atau masalah software?
Saat menggunakan baterai kerja inkubator menjadi aneh.
Kendala