Translate

SISTEM PENGONTROLAN SUHU DAN KELEMBABAN JAMUR TIRAM

SISTEM PENGONTROLAN SUHU DAN KELEMBABAN JAMUR TIRAM

    


  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

'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