WWW.USBINOV.COMPiranti USB untuk PC, Laptop dan Raspberry Pi.

Membuat Sendiri Kontroler Fan Otomatis Untuk Raspberry Pi

raspi_fan_controller_off

Halo, selamat berjumpa lagi pada Catatan Eksperimen Raspberry Pi.

Pada postingan-postingan sebelumnya saya sudah memberikan catatan eksperimen tentang bagaimana menampilkan suhu CPU Raspberry Pi pada LCD dan bagaimana mengontrol relay menggunakan Raspberry Pi. Saya menggabungkan keduanya dan membuat sebuah sistem fan otomatis untuk Raspberry Pi yang bekerja berdasarkan pada kondisi suhu CPU. Jika suhu CPU melebihi batas yang telah ditentukan, maka fan akan diaktifkan. Dan jika suhu turun dibawah batas yang telah ditentukan, maka fan akan dimatikan.

Rangkaian LCD dan Relay serta pin-pin GPIO yang digunakan pada eksperimen ini sama seperti pada eksperimen sebelumnya. Jadi jika Anda belum membaca postingan-postingan sebelumnya, sebaiknya Anda membacanya terlebih dahulu untuk mengetahui rangkaian untuk LCD dan relay dan juga kode program untuk menampilkan suhu CPU dan mengontrol relay. Silakan mengikuti link pada paragraf sebelumnya.

Kode Program rpifan.r

REBOL [
  Title: "Kontrol Fan Otomatis Berdasar Suhu CPU"
  Version: 0.1.0
  Date: 16-Jan-2016
  File: %rpifan.r
  Programmer: "Chandra MDE" 
  Homepage: http://raspi.teknikelektrolinks.com
  History: [ 16-Jan-2016 0.1.0 "Mulai bikin" ]
  Usage:   [ sudo ./r3 rpifan.r atau sudo ./r3 rpifan.r &]
]

;Konfigurasi GPIO untuk LCD dan RELAY
;LCD-GPIO [RS,  E, D4, D5, D6, D7]
LCD-GPIO: [20  21  26  19  13   6]
LCD-RS: LCD-GPIO/1
LCD-E: LCD-GPIO/2
LCD-D4: LCD-GPIO/3
LCD-D5: LCD-GPIO/4
LCD-D6: LCD-GPIO/5
LCD-D7: LCD-GPIO/6
RELAY: 23

;setup dan konfigurasi GPIO untuk LCD
init-gpio: func [ gpios [block!]
][
	foreach n gpios [
		either exists? to file! ajoin [%/sys/class/gpio/gpio n] [
			write to file! ajoin [%/sys/class/gpio/gpio n "/direction"] "out^/"
		][
			write %/sys/class/gpio/export ajoin [n newline]
			write to file! ajoin [%/sys/class/gpio/gpio n "/direction"] "out^/"
		]
	]
]

;set logika GPIO
set-gpio: func [
  n [integer!] 
  val [string!] 
][
  write to file! ajoin [%/sys/class/gpio/gpio n "/value"] val
]

;tulis data byte ke LCD
write-lcd: func [
	d [binary!]
	/DATA
][
	either DATA [set-gpio LCD-RS "1"] [set-gpio LCD-RS "0"]
	
	set-gpio LCD-D4 "0"
	set-gpio LCD-D5 "0"
	set-gpio LCD-D6 "0"
	set-gpio LCD-D7 "0"

	;high-nibble
	all [equal? #{10} d and #{10} set-gpio LCD-D4 "1"]
	all [equal? #{20} d and #{20} set-gpio LCD-D5 "1"]
	all [equal? #{40} d and #{40} set-gpio LCD-D6 "1"]
	all [equal? #{80} d and #{80} set-gpio LCD-D7 "1"]

	set-gpio LCD-E "1"
	set-gpio LCD-E "0"

	set-gpio LCD-D4 "0"
	set-gpio LCD-D5 "0"
	set-gpio LCD-D6 "0"
	set-gpio LCD-D7 "0"

	;low-nibble
	all [equal? #{01} d and #{01} set-gpio LCD-D4 "1"]
	all [equal? #{02} d and #{02} set-gpio LCD-D5 "1"]
	all [equal? #{04} d and #{04} set-gpio LCD-D6 "1"]
	all [equal? #{08} d and #{08} set-gpio LCD-D7 "1"]

	set-gpio LCD-E "1"
	set-gpio LCD-E "0"
]

;inisialisasi LCD
init-lcd: func [ 
][
  write-lcd #{33}
  write-lcd #{32}
  write-lcd #{28}
  write-lcd #{0C}  
  write-lcd #{06}
  write-lcd #{01}  
]

;tulis string ke LCD
puts-lcd: func [
	s [string!]
][
	foreach ch s [write-lcd/DATA to binary! ch]
]

;set lokasi kursor LCD
gotoxy-lcd: func [
	x [integer!]
	y [integer!]
	/LOCAL k1 k2 l
][
	k1: [#{80} #{81} #{82} #{83} #{84} #{85} #{86} #{87}
	 #{88} #{89} #{8A} #{8B} #{8C} #{8D} #{8E} #{8F}]
	
	k2: [#{C0} #{C1} #{C2} #{C3} #{C4} #{C5} #{C6} #{C7}
	 #{C8} #{C9} #{CA} #{CB} #{CC} #{CD} #{CE} #{CF}]
	
	either y = 0 [
		write-lcd pick k1 x
	][
		write-lcd pick k2 x
	]
]


init-gpio LCD-GPIO
init-gpio [23]
init-lcd
puts-lcd "Raspberry Pi    "
gotoxy-lcd 1 1
puts-lcd "Fan Controller  "
wait 5
write-lcd #{01}
puts-lcd "SUHU:           "
gotoxy-lcd 1 1
puts-lcd "RELAY: OFF      "
forever [
	call/wait "vcgencmd measure_temp > temp.txt"
	if exists? %temp.txt [t: read %temp.txt]
	pt: parse t "='C"
	gotoxy-lcd 7 0
	puts-lcd ajoin [pt/2 "'C"]

	suhu: to decimal! pt/2
	either suhu >= 41.0 [
		set-gpio RELAY "1"
		gotoxy-lcd 8 1
		puts-lcd "ON "
	][
		set-gpio RELAY "0"
		gotoxy-lcd 8 1
		puts-lcd "OFF"
	]
	wait 3
]
quit

Penjelasan Singkat Program

Pertama-tama, program akan melakukan inisialisasi Setelah melakukan inisialisasi GPIO dan LCD, program akan menampilkan judul sistem yakni “Raspbery Pi Fan Controller” pada LCD dan melakukan delay proses selama 5 detik.

Selanjutnya, program membaca suhu CPU dengan perintah vcgencmd dan menampilkannya pada LCD. Program kemudian membandingkan nilai suhu CPU dengan suhu batas yang telah ditentukan yakni 41.0’C. Batas suhu ini tentu saja hanyalah untuk keperluan testing saja. Batas suhu untuk aplikasi sesungguhnya bisa diset pada kisaran nilai 60’C atau 70’C, karena suhu operasional maksimum Raspberry Pi adalah 85’C. Program juga menampilkan status kondisi relay apakah relay sedang on ataukah sedang off.

Dengan program dan rangkaian sederhana ini, kita dapat meningkatkan keamanan fisik Raspberry Pi kita. Tentunya kita tidak ingin Raspberry Pi kita terbakar karena bekerja terlalu lama pada suhu tinggi.

Selain fan, kita juga bisa menambahkan buzzer yang dapat memberikan peringatan audible bila suhu CPU Raspberry Pi meningkat melebihi batas yang telah ditentukan.

Video Demo

Anda dapat melihat aksi kontroler fan otomatis ini di situs YouTube. Berikut adalah link videonya.

File-file Eksperimen

File-file yang digunakan pada eksperimen ini adalah program aplikasi REBOL3 (r3) dan file kode program rpifan.r. Anda dapat meminta file ini jika berminat. Silakan menuliskan komentar di bawah postingan ini beserta nama dan alamat email. Saya akan mengirimkan file-filenya langsung ke alamat email Anda.

Nah, sekian dulu Catatan Eksperimen Raspberry Pi kali ini, semoga bermanfaat.

Selamat berkarya.

4 Comments

Add a Comment

Your email address will not be published. Required fields are marked *