) ) ) ( ) ( ( /( ( /( ( /( )\ ) ( /( ( )\ )\()) )\()) )\())(()/( )\()) ( )\ (((_) ((_)\ ((_)\ ((_)\ /(_))((_)\ )\ ((_) )\___ _((_) ((_) _((_)(_)) _((_)((_) | __|((/ __|| || | / _ \|_ / |_ _| | \| || __| | _| | (__ | __ || (_) |/ / | | | .

` || _| |___| \___||_||_| \___//___| |___| |_|\_||___|

ECHO MAGAZINE VOLUME VIII, ISSUE XXIII, PHILE 0x007.TXT Monitoring Suhu Ruangan berbasis TCP/IP - rampuriezt rampuriezt/at/gmail/dot/com -----[ Pendahuluan Data Akuisisi banyak diaplikasikan pada bidang industri, namun tidak menutup kemungkinan pada bidang-bidang lain. Sebagai salah satu contoh adalah data akuisi suhu ruangan untuk memonitor suhu server. Pada artikel kali ini akan dibahas mengenai aplikasi monitoring suhu berbasis TCP/IP sehingga dapat diaplikasikan pada suatu jaringan/Network. Peralatan yaang digunakan cukup mudah diperoleh, akan tetapi sedikit membutuhkan pengetahuan mengenai elektronika (mikrokontroller). Sensor yang digunakan adalah LM35 sesbuah sensor suhu yang mempunyai range -55 s/d 150 derajat Celcius. Sedangkan mikrokontroller yang digunakan adalah ATMEGA8535 (mikrokontroller 8 bit) yang sudah mempunyai ADC sebesar 10 bit. Komunikasi yang digunakan adalah Serial (RS232) dengan mode asyncronous yang menghubungkan antara mikrokontroller dengan sebuah modul serial to ethernet. Modul TCP/IP Serial to Ethernet merupakan produksi Wiznet (WIZ110SR). Berikut spesifikasi alat dan bahan : 1. System Minimum Mikrokontroller ATMEGA8535 2. Modul Serial to Ethernet (Wiznet) 3. Sensor suhu LM 35 4. PC sebagai server 5. Serial/RS232 cable 6. UTP Cable 7. Power Supply 5 - 12 V PC <- WIZ110SR <- RS232 <- SysMin ATMega8535 <- LM35 -----[ Rancangan Monitoring suhu ruang server dibagi dalaim beberapa bagian aplikasi yaitu: -------[ a. Board board terdiri dari beberapa bagian : - rangkaian power supply, untuk mikrokontroller atmega 8535 power yang digunakan berkisar dari 5 - 12 V. - rangkaian minimum adalah mikrokontroller atmega 8535 dengan sumber clock sebesar 8 MHz. - rangkaian driver sensor, LM35 dapat langsung dikoneksikan ke mikrokontroller tanpa harus menggunakan rangkaian penguat. Logika software mikrokontroller :

agar dapat dimasukkan pada database. End +---------------------------------------------------------------------Software untuk mikrokontroller menggunakan bahasa BASCOM AVR. '-------------------------------------------------------------------| 03. 4. Software Server Untuk dapat membaca data-data suhu yang dikirimkan melalui protokol UDP. 5. dibuat suatu script yang di runnning secara backgroung (service). 2. 6. start inisialisasi read data adc convert data adc menjadi data suhu formating data suhu send data via rs232 delay 5 detik loop ke 3 +-----------------------------------------------------------------------| 00. 3. $framesize = 40 | 10. $regfile = "m8535. $baud = 9600 | 05. Suhu = W * 25 | 23. Start Adc | 14.1. Prescaler = Auto . Pada artikel ini juga dibuat database sebagai penyimpanan data suhu. maka dibuat suatu script menggunakan python sebagai server UDP dan memparsing data UDP menjadi data record database. Print "Suhu : " . pada artikel ini digunakan protokol UDP. | 13. $hwstack = 40 | 08. Untuk dapat mengirim data melalui tcp/ip digunakan modul serial to ethernet produksi wiznet. | 27. | 11. | 15. Setelah dicompile. ' Monitoring Suhu Berbasis RS232 | 02. Suhu . Wait 5 | 26. script ini menggunakan bahasa pemrograman python versi 2. Channel = 0 | 18.5. W = Getadc(channel) | 22.dat" | 04. Protokol yang digunakan untuk mengirim ke server bisa TCP maupun UDP. Channel As Byte | 16. Suhu = Suhu / 100 | 24. | 21. Do | 20. Hasil monitoring suhu pada . Dim W As Word . Config Adc = Single . Setting untuk Wiznet digunakan Setting IP4 manual dengan delay idle (pemaketan) 5 detik dan setting RS232 menggunakan baudrate 9600. $crystal = 8000000 | 05. | 29. 8. 'now read A/D value from channel 0 | 19. | 07. " C " | 25. sehingga nantinya dapat suhu terecord di database MySQL. kemudian didownload ke mikrokontroller melalui In System Programming (ISP AVR). | 17. $swstack = 8 | 09. Reference = Internal | 12. 7. '-------------------------------------------------------------------| 01. Suhu As Single . 8 bit -------[ b. Loop | 28.

| 34. `id` int(11) NOT NULL AUTO_INCREMENT. # total bytes recieved since last 'reset' | 26. | 06.connect (host = "localhost". | 25.SOCK_DGRAM) | 19. # the total number of bursts that have come in | 32.0" | 12.compile(str_regex) | 36.\d+)" | 35. print "No data. `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP. | 03.port)) | 20. | 04. | 17. | 13." | 42. control-break to exit. obj_regex = re. # -1 is a deliberately invalid timestamp | 29. timestamp = -1 | 30. #if you change the port. user = "root". conn = MySQLdb. data1. PRIMARY KEY (`id`) | 05..recvfrom(buffer) | 39. while 1: | 38.database kemudian direpresentasikan menjadi grafik menggunakan PHP (JPGRAPH) sehingga user dapat melihat data suhu secara online melalui web. passwd = "yourp assword"." | 23. #!/usr/bin/env python | 01. Script untuk membuat tabel pada database : +-----------------------------------------------------| 00. | 31.. from socket import * | 03. totalrcvs = 0 | 33. `temp_value` double NOT NULL. UDPSock. if not data1: | 41. host = "0. | 10.. str_regex = r"(?P<fields>\w+)\s\:\s(?P<values>\d+\. UDPSock = socket(AF_INET. db = "test") | 09. import MySQLdb | 07. | 08.0. break . # we want to bind on all possible IP addresses | 11. | 02. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 ." | 24.addr = UDPSock. change it in the client program as well | 14. # Create socket and bind to address | 18.bind((host. +----------------------------------------------------Script server : +----------------------------------------------------| 00. | 40. | 02. time.0. print "\nWaiting for data. | 37. totalbytes = 0 | 27. port = 5000 | 15. import time | 04. import re | 05. | 21.. CREATE TABLE IF NOT EXISTS `temps` ( | 01. | 28. buffer = 102400 | 16. print "Starting UDP receive server.time() | 22.

UDPSock. # 46. | 63.time() 45. a = obj_regex.load graph --> | 17. send one byte to trigger | 65. cursor. <head> | 06. </body> | 19.time() | 67. } | 12. function move() { | 10.php) : +-----------------------------------------------------------| 01. 54.close () 53. donestamp = time.10000)"> | 16. <head> | 02.| | | | | | | | | | | | | | | | | | | 43. rate = totalbytes/(donestamp .match(data1) 47. <html> | 05. if data1 == 1: | 64. data = len(data1) 48. charset=utf-8" . print "Reset recieved. totalrcvs = 0 | 68.php) +------------------------------------------------------------| 00.timestamp) * 8 / 1000 59. <img src="graph. <title>Monitoring Suhu Ruangan via UDP</title> | 07. totalbytes. | 70. %s total in %s s at %s kbps" % (data. # this is the reset. values = a. <meta equiv="REFRESH" content="5"> | 03. timestamp = time. window. conn. "\n" 60. </script> | 14.execute (query) 52. 58. donestamp . </head> | 15.php"> | 18.cursor () 50. <?php // content="text/plain.timestamp. </head> | 04. query = "INSERT INTO temps(temp_value) VALUES(" + values + ")" 51. # print "\nRcvd: %s bytes. totalrcvs += 1 57. 55. else: 44.group('values') 49. cursor. print data1.close() | 71.location = 'index. <body onload="timer=setTimeout('move()'. <script language="JavaScript"> | 08. totalbytes = 0 | 66. rate) | 62. print(values) 61. clearing statistics. </html> +------------------------------------------------------------script PHP (graph. <!-. var time = null | 09." | 69. cursor = conn. totalbytes += data 56. //--> | 13.php' | 11.close () +------------------------------------------------------------script PHP(index.

| 01. | 20. $graph->xaxis->SetTextLabelInterval(2). $p1->SetColor("blue"). "root". | 35. | 47. 10. require_once ('src/jpgraph_line. 120". | 32. semoga aplikasi ini dapat dikembangkan lagi menjadi suatu hal yang lebih aplikatif dan berguna.php'). | 45. | 37. | 25. require_once ('src/jpgraph. $array = array (). | 23. $graph->xaxis->SetTextTickInterval(10). | 31. | 36. | 07. | 34. | 27. $num = mysql_num_rows($result). | 28. $p1->mark->SetWidth(4). $link = mysql_connect("localhost". $graph->Add($p1). $graph = new Graph(1024. $i++. | 08. | 41. | 40. 18). | 17. // Display every 10:th datalabel | 33. "yourpassword"). | 38. ?> +-----------------------------------------------------------[ Penutup Penggunaan Sensor suhu LM35 dapat diganti dengan sensor temperatur yang lain. $link). $graph->title->Set("Monitoring Suhu Ruangan"). Akhir kata. | 44. artikel diatas merupakan penjelasan secara singkat mengenai data akuisisi menggunakan TCP/IP. $p1->SetCenter(). $p1->mark->SetFillColor("red"). // requirement file (jpgraph) | 02. $p1->mark->SetType(MARK_FILLEDCIRCLE). | 29. | 43. seperti SHT11 atau yang lainnya. $graph->SetShadow(). | 11. } | 18.40. mysql_select_db("test". $graph->img->SetMargin(40. | 05. | 24. $p1 = new LinePlot($datay). | 21.2001) . $graph->title->SetFont(FF_FONT1. | 16.FS_BOLD). /** Graph **/ | 22. | 26. /** mysql **/ | 06. | 04.40. | 39. $datay[$i] = $row[2]. | 19. $graph->SetScale("textlin"). $graph->Stroke().php'). | 42. $i=0.80). $graph->img->SetAntiAliasing().280). | 10. $datax[$i] = substr($row[1]. $result = mysql_query($query). $numinarray=0. | 09. $graph->xaxis->SetLabelAngle(90). | 13. | 46. | 15. | 12. Aplikasi ini dapat digunakan oleh Network Administrator atau yang berkepentingan untuk memonitor suhu ruangan server. $query = "SELECT * FROM temps ORDER BY id DESC LIMIT 0. $graph->xaxis->SetTickLabels($datax). | 48. " Knowlegde is belong to thw World" (Antitrust . | 03. | 30. while ( $row = mysql_fetch_row ( $result ) ) { | 14.

atmel.net/ http://php.org/ http://mcselec.pdf +---------------------------------------------------------+ | ECHO MAGAZINE VOLUME VIII.com/ http://www.com/products/AVR http://www.net/ http://mysql.TXT | +---------------------------------------------------------+ | 31 DESEMBER 2010 | http://ezine. PHILE 0x007.id | +---------------------------------------------------------+ .echo.com/ http://python. ISSUE XXIII.com/ds/LM/LM35.or.national.-----[ Referensi : [x] [x] [x] [x] [x] [x] [x] http://jpgraph.