Cara Kerja
Alat
1.
Pada dasarnya sistem pengontrolan suhu
dan kelembaban kumbung jamur tiram ini bergantung pada waktu menggunakan RTC (Real Time Clock). Pukul 00.00 - 06.59, aksi
mikrokontroler adalah memastikan atap tertutup dan mematikan pompa air.
2.
Pada pukul 07.00 – 07.59, pintu
kumbung jamur tiram masih ditutup dan mulai pembacaan kelembaban, jika ruangan
dinyatakan kering (<60 %RH) oleh sensor DHT11 maka pompa akan hidup otomatis
dan mengalirkan air ke dalam kumbung jamur tiram. Hasil pembacaan kelembaban
tersebut ditampilkan pada LCD (Liquid
Crystal Display).
3.
Pukul 08.00 – 16.00, jika
sensor elektroda mendeteksi adanya hujan maka atap akan tertutup, jika tidak
maka sensor DHT11 akan membaca 4 kondisi yaitu suhu normal (25 °C – 30 °C),
panas (31 °C – 35 °C), sangat panas
(> 35 °C), dan dingin (< 25 °C). Jika suhu normal maka atap akan
terbuka secara penuh, jika suhu panas maka atap akan terbuka setengah, jika
suhu sangat panas maka atap akan terbuka seperempat, dan jika suhu dingin maka
atap akan tertutup. Hal ini bertujuan untuk menjaga suhu kumbung jamur tiram
tetap stabil sehingga meningkatkan produktifitas jamur tiram. Untuk membuka dan
menutup atap tersebut digunakan motor DC dan hasil pembacaan suhu pada kumbung
jamur tiram akan ditampilkan pada LCD dan LED indikator.
4.
Pukul 16.00 - 16.59, tutup atap
kembali dan akan melakukan penyiraman lagi jika ruangan rumah kaca kering
(<60 %RH). Jadi penyiraman yang terjadi pada kumbung jamur tiram ini adalah
sebanyak dua kali yaitu pagi dan sore hari.
5.
Pukul 17.00 – 23.59, kembali
memastikan atap harus tertutup dan pompa air harus mati.
PROGRAM BASCOM AVR
$regfile = "m8535.dat"
$crystal = 12000000
$baud = 9600
Config Lcdpin = Pin , Rs = Portc.2 , E = Portc.3 , Db4 = Portc.4
Config Lcdpin = Pin , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7
Config Lcd = 16 * 2
$crystal = 12000000
$baud = 9600
Config Lcdpin = Pin , Rs = Portc.2 , E = Portc.3 , Db4 = Portc.4
Config Lcdpin = Pin , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7
Config Lcd = 16 * 2
'deklarasi variabel DHT11
Declare Sub Get_th(t As Byte , H As Byte)
Config Serialin = Buffered , Size = 128
Config Serialout = Buffered , Size = 128
Dht_put Alias Portb.2
Dht_get Alias Pinb.2
Dht_io_set Alias Ddrb.2
Dim T As Byte
Dim H As Byte
Dim Crc As Byte
Dim Mybyte As Byte
Dim Sensor_data As String * 40
Dim Tmp_str8 As String * 8
Dim Count As Byte
Enable Interrupts
Set Dht_io_set
Set Dht_put
'Deklarasi Variabel Jam digital
$lib "ds1307clock.lib"
Config Sda = Portc.1
Config Scl = Portc.0
Const Ds1307w = &HD0
Const Ds1307r = &HD1
Config Clock = User
Dim Weekday As Byte
Dim Char As String * 10 , Tanda As String * 1
Dim Jam As String * 10 , Menit As String * 10 , Detik As String * 10
Dim Hari As String * 10 , Bulan As String * 10 , Tahun As String * 10
Dim A As Byte , B As Byte , C As Byte
Dim X As Byte , Y As Byte , Z As Byte
Time$ = "09:30:00" 'setting waktu awal
Date$ = "02-20-12" 'setting tanggal awal
Ddrd.0 = 1
Ddrd.1 = 0
Pompa Alias Portd.0
Elektroda Alias Pind.1
Set Elektroda
Cls
Cursor Off
Cls
Cursor Off
Mulai:
Do
Waitms 1500
Call Get_th(t , H )
Upperline
Lcd "Waktu : " ; _hour ; ":" ; _min ; ":" ; _sec
Lowerline
Lcd "T: " ; T ; " C" ; " H: " ; H ; " %"
If _hour > 1 And _hour < 7 Then
'menutup atap
'pompa mati
Pompa = 0
End If
If _hour > 7 And _hour < 8 And H < 60 Then
'pompa menyala 10 detik
Pompa = 1
Wait 10
Pompa = 0
End If
If _hour > 8 And _hour < 16 And Elektroda = 0 Then
'menutup atap
End If
If _hour > 8 And _hour < 16 And Elektroda = 1 Then
'membaca suhu
If T > 24 And T < 31 Then
Cls
Upperline
Lcd "SUHU NORMAL"
Wait 3
'atap terbuka penuh
Elseif T > 30 And T < 36 Then
Cls
Upperline
Lcd "SUHU PANAS"
Wait 3
'atap terbuka setengah
Elseif T > 35 Then
Cls
Upperline
Lcd "SUHU PANAS BGT"
Wait 3
'atap terbuka seperempat
Elseif T < 25 Then
Cls
Upperline
Lcd "SUHU DINGIN"
Wait 3
'atap tertutup
End If
End If
If _hour > 16 And _hour < 17 And H < 60 Then
'pompa menyala 10 detik
Pompa = 1
Wait 10
Pompa = 0
End If
If _hour > 17 And _hour < 23 Then
'menutup atap
'pompa mati
Pompa = 0
End If
Loop
Sub Get_th(t As Byte , H As Byte)
Count = 0
Sensor_data = ""
Set Dht_io_set
Reset Dht_put
Waitms 25
Set Dht_put
Waitus 40
Reset Dht_io_set
Waitus 40
If Dht_get = 1 Then
H = 1
Exit Sub
End If
Waitus 80
If Dht_get = 0 Then
H = 2
Exit Sub
End If
While Dht_get = 1 : Wend
Do
While Dht_get = 0 : Wend
Waitus 30
If Dht_get = 1 Then
Sensor_data = Sensor_data + "1"
While Dht_get = 1 : Wend
Else
Sensor_data = Sensor_data + "0"
End If
Incr Count
Loop Until Count = 40
Set Dht_io_set
Set Dht_put
Tmp_str8 = Left(sensor_data , 8)
H = Binval(tmp_str8)
Tmp_str8 = Mid(sensor_data , 17 , 8)
T = Binval(tmp_str8)
Tmp_str8 = Right(sensor_data , 8)
Crc = Binval(tmp_str8)
Mybyte = T + H
If Mybyte <> Crc Then
H = 3
End If
'Pengambilan data RTC DS1307
Getdatetime:
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cstart
I2cwbyte Ds1307r
I2crbyte _sec , Ack
I2crbyte _min , Ack
I2crbyte _hour , Ack
I2crbyte Weekday , Ack
I2crbyte _day , Ack
I2crbyte _month , Ack
I2crbyte _year , Nack
I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return
Setdate:
_day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 4
I2cwbyte _day
I2cwbyte _month
I2cwbyte _year
I2cstop
Return
Settime:
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cwbyte _sec
I2cwbyte _min
I2cwbyte _hour
I2cstop
End Sub
Return
No comments:
Post a Comment