) ) ) ( ) ( ( /( ( /( ( /( )\ ) ( /( ( )\ )\()) )\()) )\())(()/( )\()) ( )\ (((_) ((_)\ ((_)\ ((_)\ /(_))((_)\ )\ ((_) )\___ _((_) ((_) _((_)(_)) _((_)((_) | __|((/ __|| || | / _ \|_ / |_ _| | \| || __| | _| | (__ | __ || (_) |/ / | | | .` || _| |___| \___||_||_| \___//___| |___| |_|\_||___| 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 : 1. start 2. inisialisasi 3. read data adc 4. convert data adc menjadi data suhu 5. formating data suhu 6. send data via rs232 7. delay 5 detik 8. loop ke 3 +------------------------------------------------------------------------ | 00. '-------------------------------------------------------------------- | 01. ' Monitoring Suhu Berbasis RS232 | 02. '-------------------------------------------------------------------- | 03. $regfile = "m8535.dat" | 04. $crystal = 8000000 | 05. $baud = 9600 | 05. | 07. $hwstack = 40 | 08. $swstack = 8 | 09. $framesize = 40 | 10. | 11. Config Adc = Single , Prescaler = Auto , Reference = Internal | 12. | 13. Start Adc | 14. | 15. Dim W As Word , Suhu As Single , Channel As Byte | 16. | 17. Channel = 0 | 18. 'now read A/D value from channel 0 | 19. Do | 20. | 21. W = Getadc(channel) | 22. Suhu = W * 25 | 23. Suhu = Suhu / 100 | 24. Print "Suhu : " ; Suhu ; " C " | 25. Wait 5 | 26. | 27. Loop | 28. | 29. End +---------------------------------------------------------------------- Software untuk mikrokontroller menggunakan bahasa BASCOM AVR. Setelah dicompile, kemudian didownload ke mikrokontroller melalui In System Programming (ISP AVR). Untuk dapat mengirim data melalui tcp/ip digunakan modul serial to ethernet produksi wiznet. Protokol yang digunakan untuk mengirim ke server bisa TCP maupun UDP, pada artikel ini digunakan protokol UDP. Setting untuk Wiznet digunakan Setting IP4 manual dengan delay idle (pemaketan) 5 detik dan setting RS232 menggunakan baudrate 9600, 8 bit -------[ b. Software Server Untuk dapat membaca data-data suhu yang dikirimkan melalui protokol UDP, dibuat suatu script yang di runnning secara backgroung (service). script ini menggunakan bahasa pemrograman python versi 2.5. Pada artikel ini juga dibuat database sebagai penyimpanan data suhu, sehingga nantinya dapat suhu terecord di database MySQL. agar dapat dimasukkan pada database, maka dibuat suatu script menggunakan python sebagai server UDP dan memparsing data UDP menjadi data record database. Hasil monitoring suhu pada database kemudian direpresentasikan menjadi grafik menggunakan PHP (JPGRAPH) sehingga user dapat melihat data suhu secara online melalui web. Script untuk membuat tabel pada database : +------------------------------------------------------ | 00. CREATE TABLE IF NOT EXISTS `temps` ( | 01. `id` int(11) NOT NULL AUTO_INCREMENT, | 02. `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | 03. `temp_value` double NOT NULL, | 04. PRIMARY KEY (`id`) | 05. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 ; +----------------------------------------------------- Script server : +----------------------------------------------------- | 00. #!/usr/bin/env python | 01. | 02. from socket import * | 03. import time | 04. import re | 05. | 06. import MySQLdb | 07. | 08. conn = MySQLdb.connect (host = "localhost", user = "root", passwd = "yourpassword", db = "test") | 09. | 10. # we want to bind on all possible IP addresses | 11. host = "0.0.0.0" | 12. | 13. #if you change the port, change it in the client program as well | 14. port = 5000 | 15. buffer = 102400 | 16. | 17. # Create socket and bind to address | 18. UDPSock = socket(AF_INET,SOCK_DGRAM) | 19. UDPSock.bind((host,port)) | 20. | 21. time.time() | 22. print "Starting UDP receive server... control-break to exit." | 23. print "\nWaiting for data..." | 24. | 25. # total bytes recieved since last 'reset' | 26. totalbytes = 0 | 27. | 28. # -1 is a deliberately invalid timestamp | 29. timestamp = -1 | 30. | 31. # the total number of bursts that have come in | 32. totalrcvs = 0 | 33. | 34. str_regex = r"(?P\w+)\s\:\s(?P\d+\.\d+)" | 35. obj_regex = re.compile(str_regex) | 36. | 37. while 1: | 38. data1,addr = UDPSock.recvfrom(buffer) | 39. | 40. if not data1: | 41. print "No data." | 42. break | 43. else: | 44. donestamp = time.time() | 45. # | 46. a = obj_regex.match(data1) | 47. data = len(data1) | 48. values = a.group('values') | 49. cursor = conn.cursor () | 50. query = "INSERT INTO temps(temp_value) VALUES(" + values + ")" | 51. cursor.execute (query) | 52. cursor.close () | 53. | 54. | 55. totalbytes += data | 56. totalrcvs += 1 | 57. | 58. rate = totalbytes/(donestamp - timestamp) * 8 / 1000 | 59. print data1, "\n" | 60. print(values) | 61. # print "\nRcvd: %s bytes, %s total in %s s at %s kbps" % (data, totalbytes, donestamp - timestamp, rate) | 62. | 63. if data1 == 1: | 64. # this is the reset, send one byte to trigger | 65. totalbytes = 0 | 66. timestamp = time.time() | 67. totalrcvs = 0 | 68. print "Reset recieved, clearing statistics." | 69. | 70. UDPSock.close() | 71. conn.close () +------------------------------------------------------------- script PHP(index.php) : +------------------------------------------------------------ | 01. | 02. | 03. | 04. | 05. | 06. Monitoring Suhu Ruangan via UDP | 07. | 14. | 15. | 16. | 17. | 18. | 19. +------------------------------------------------------------- script PHP (graph.php) +------------------------------------------------------------- | 00. img->SetMargin(40,40,40,80); | 25. | 26. $graph->img->SetAntiAliasing(); | 27. $graph->SetScale("textlin"); | 28. $graph->SetShadow(); | 29. $graph->title->Set("Monitoring Suhu Ruangan"); | 30. $graph->title->SetFont(FF_FONT1,FS_BOLD); | 31. | 32. // Display every 10:th datalabel | 33. $graph->xaxis->SetTextTickInterval(10); | 34. $graph->xaxis->SetTextLabelInterval(2); | 35. $graph->xaxis->SetTickLabels($datax); | 36. $graph->xaxis->SetLabelAngle(90); | 37. | 38. $p1 = new LinePlot($datay); | 39. $p1->mark->SetType(MARK_FILLEDCIRCLE); | 40. $p1->mark->SetFillColor("red"); | 41. $p1->mark->SetWidth(4); | 42. $p1->SetColor("blue"); | 43. $p1->SetCenter(); | 44. $graph->Add($p1); | 45. | 46. $graph->Stroke(); | 47. | 48. ?> +------------------------------------------------------- -----[ Penutup Penggunaan Sensor suhu LM35 dapat diganti dengan sensor temperatur yang lain, seperti SHT11 atau yang lainnya. artikel diatas merupakan penjelasan secara singkat mengenai data akuisisi menggunakan TCP/IP. Aplikasi ini dapat digunakan oleh Network Administrator atau yang berkepentingan untuk memonitor suhu ruangan server. Akhir kata, semoga aplikasi ini dapat dikembangkan lagi menjadi suatu hal yang lebih aplikatif dan berguna. " Knowlegde is belong to thw World" (Antitrust - 2001) -----[ Referensi : [x] http://jpgraph.net/ [x] http://php.net/ [x] http://mysql.com/ [x] http://python.org/ [x] http://mcselec.com/ [x] http://www.atmel.com/products/AVR [x] http://www.national.com/ds/LM/LM35.pdf +---------------------------------------------------------+ | ECHO MAGAZINE VOLUME VIII, ISSUE XXIII, PHILE 0x007.TXT | +---------------------------------------------------------+ | 31 DESEMBER 2010 | http://ezine.echo.or.id | +---------------------------------------------------------+