KOMPOSTER HOMESCALE
Oleh:
PHILIPPIANS MANURUNG
NIM: 23220338
(Program Studi Magister Teknik Elektro)
Gambar 4 – Wiring Sensor Suhu DS18B20 dengan RPi 3 Gambar 5 - Implementasi Sensor Suhu DS18B20
os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')
base_dir = '/sys/bus/w1/devices/'
i1=0
i2=0
i3=0
sensor1 = '28-0115a84fdeff'
sensor2 = '28-0115a85ffdff'
sensor3 = '28-0315a81322ff'
kelembaban1 = "sensor1"
kelembaban2 = "sensor2"
kelembaban3 = "sensor3"
#motor
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
in1= 23
in2= 24
ena= 25
GPIO.setup(in1,GPIO.OUT)
GPIO.setup(in2,GPIO.OUT)
GPIO.setup(ena,GPIO.OUT)
pwm=GPIO.PWM(ena,100)
#relay
r1=2 #pompa
r2=3 #motorac
low=0
high=1
GPIO.setup(r1, GPIO.OUT)
GPIO.setup(r2, GPIO.OUT)
ulang = 1
#Read_Sensor_Temperature1
def read_temp_raw1():
f = open(device_file1, 'r')
lines1 = f.readlines()
f.close()
return lines1
def read_temp1():
lines1 = read_temp_raw1()
while lines1[0].strip()[-3:] != 'YES':
time.sleep(0.2)
lines1 = read_temp_raw1()
equals_pos = lines1[1].find('t=')
if equals_pos != -1:
temp_string1 = lines1[1][equals_pos+2:]
temp_c1 = float(temp_string1) / 1000.0
temp_f1 = temp_c1 * 9.0 / 5.0 + 32.0
return temp_c1
#Read_Sensor_Temperature2
def read_temp_raw2():
f = open(device_file2, 'r')
lines2 = f.readlines()
f.close()
return lines2
def read_temp2():
lines2 = read_temp_raw2()
equals_pos = lines2[1].find('t=')
if equals_pos != -1:
temp_string2 = lines2[1][equals_pos+2:]
temp_c2 = float(temp_string2) / 1000.0
temp_f2 = temp_c2 * 9.0 / 5.0 + 32.0
return temp_c2
#Read_Sensor_Temperature3
def read_temp_raw3():
f = open(device_file3, 'r')
lines3 = f.readlines()
f.close()
return lines3
def read_temp3():
lines3 = read_temp_raw3()
while lines3[0].strip()[-3:] != 'YES':
time.sleep(0.2)
lines3 = read_temp_raw3()
equals_pos = lines3[1].find('t=')
if equals_pos != -1:
temp_string3 = lines3[1][equals_pos+2:]
temp_c3 = float(temp_string3) / 1000.0
temp_f3 = temp_c3 * 9.0 / 5.0 + 32.0
return temp_c3
def serial_test():
line = ser.readline()
return line
def read_moisture1():
baris1 = serial_test()
data1 = baris1.split("-")
moisture1 = data1[0]
return moisture1
def read_moisture2():
baris2 = serial_test()
data2 = baris2.split("-")
moisture2 = data2[1]
return moisture2
def read_moisture3():
baris3 = serial_test()
data3 = baris3.split("-")
moisture3 = data3[2]
return moisture3
def ph1():
baris4 = serial_test()
data4 = baris4.split("-")
ph = data4[3]
return ph
def motormaju():
GPIO.output(in2,True)
GPIO.output(in1,False)
GPIO.output(ena,True)
time.sleep(25)
GPIO.output(in2,False)
GPIO.output(in1,False)
GPIO.output(ena,False)
def motormundur():
GPIO.output(in1,True)
GPIO.output(in2,False)
GPIO.output(ena,True)
time.sleep(25)
GPIO.output(in2,False)
GPIO.output(in1,False)
GPIO.output(ena,False)
def motorstop():
GPIO.output(in2,False)
GPIO.output(in1,False)
GPIO.output(ena,False)
def relayoff():
GPIO.output(r2,0)
GPIO.output(r1,0)
def relayon():
GPIO.output(r2,1)
GPIO.output(r1,1)
while True:
GPIO.output(r2,0)
GPIO.output(r1,0)
temperature1 = read_temp1()
temperature2 = read_temp2()
temperature3 = read_temp3()
ts = time.time()
timestamp =datetime.datetime.fromtimestamp(ts).strftime('%d-%m-%Y %H:%M')
print temperature1
print temperature2
print temperature3
print moisture1
print moisture2
print moisture3
print ph
print timestamp
Berdasarkan finite state machine diatas, dapat diperhatikan bahwa ketika mesin
pengomposan aktif maka posisi state akan berada pada state idle, kemudian ketiga sensor suhu
mulai melakukan sensing, maka apabila suhu dari ketiga sensor mencapai 60°C atau lebih maka
state akan berpindah pada state “Heat” yang mengindikasikan bahwa suhu sudah melebihi set
value (60°C) maka motor AC sebagai pengaduk bahan organik akan aktif dan system akan
mengaduk bahan organic yang berada di dalam drum dan motor DC akan bergerak maju
(membuka penutup drum pengomposan) agar suhu dapat diturunkan dan dinetralisir karena
sirkulasi udara di dalam drum dapat berganti.
Namun apabila ketika system aktif dan suhu mendeteksi < 60°C maka mengindikasikan
suhu pengomposan sudah normal, state akan bergerak ke state “normal” dan motor AC akan
“Off” dan motor DC akan “Off” karena kondisi suhu sudah dibawah dari set point yang
ditetapkan.
Skema control dilakukan agar system dapat mempertahankan suhu ideal pengomposan yaitu
52°C - 60°C.
III.2 Scheduling
Pada system ini juga ditanamkan suatu penjadwalan (scheduling). Penjadwalan ini
dioperasikan pada mikrokomputer RPi 3 yang memiliki system scheduling pada system operasi
linux yang bernama “crontab job”. Crontab job merupakan suatu utilitas pada OS linux yang
dapat menjalankan suatu script atau kode program dengan waktu tertentu. Sistem penulisan
waktu pada script memiliki format sebagai berikut:
Berdasarkan format penulisan diatas, maka akan dilakukan penjadwalan pada system ini
dengan 2 skema yaitu: penjadwalan penyiramana bakteri activator sekali seminggu dan
penjadwalan script monitoring dan control apabila system memulai ulang (reboot). Berikut
penjadwalan yang dilakukan:
Kode program “control.py” bertugas untuk menjalankan program control dan monitoring,
sementara kode program “sprayer.py” bertugas untuk menjalankan program penyiraman EM4
(bakteri aktivator) pada hari Senin pukul 09:00.