Pada kesempatan ini kita akan mencoba mendesain sebuah data logger suhu DS1820 produksi Dallas Semiconductor. Sensor suhu ini outputnya data digital yang tidak membutuhkan kalibrasi lagi. DS1820 menggunakan metode 1 wire dalam komunikasinya. Sehingga cukup menggunakan 3 jalur, yaitu: data (DQ), Vcc dan Ground. DS1820 juga dapat diatur melalui Alarm Signaling, yaitu dimana kita bisa mengatur suatu nilai batas, dimana jika nilai batas tersebut dilampau maka kita bisa mengetahui dengan membaca Alarmnya. Kita juga akan menggunakan chip mikrokontroller AVR ATMega8535 untuk kontroler yang bertugas membaca suhu dan berkomunikasi dengan computer. Kita bisa menggunakan fasilitas wizard dari CodeVision untuk membuat program di ATMega8535. Hal ini kita lakukan untuk mempermudah kita, karena kita akan bisa lebih focus pada pembuatan data loggernya. ATMega8535 dan computer akan berkomunikasi melalui serial. Selanjutnya ikutilah langkah-langkah berikut untuk membuat sebuah data logger dengan Matlab. Di Matlab, sebuah serial port termasuk kedalam sebuah object. Dimana untuk dapat menggunakannya kita harus menciptakan object tersebut dan melakukan pengaturan pada object tersebut. Untuk membuat sebuah object serial pada matlab kita ketik:
s1 = serial(COM1 ); %kita menciptakan object s1 sebagai COM1. Kemudian untuk mengetahui propeti dari object tersebut kita ketik: get(s1,{Type,'Name,'Port}) ans = serial Serial-COM1 COM1 Selanjutnya kita atur nilai masing-masing property yang diperlukan. Pada kali ini kita perlu mengatur nilai baud rate, data bit, stop bit, dan input buffer size. Ketik: set(s1,BaudRate,115200,DataBits,8,StopBits,1,InputBufferSize,16000) Kemudian untuk dapat menggunakan object serial, kita perlu menghubungkan object ke device serial sendiri. Ketik: fopen(s1)
Untuk membaca data dari serial kita menggunakan perintah: A=fscanf(s1) Maka data yang dibaca akan disimpan di variable A. Untuk mengirimkan data ke serial kita menggunakan perintah: fprintf(s1,DataADC); Setelah kita selesai menggunakan object serial, kita perlu memutus koneksi object dengan fclose(s1) Jika kita sudah tidak memerlukan object serial tersebut, kita harus menghapus object serial delete(s1) Membaca Suhu dengan DS1820 Untuk membaca suhu dengan DS1820, maka kita dapat menggunakan software CodeVision. Dengan menggunakan fasilitas wizard yang ada, kita dapat melakukannya dengan mudah. Ikuti langkah berikut untuk membuatnya. 1. Pada tab Chip, tentukan jenis chip dan Xtal yang akan digunakan. Pada kesempatan ini digunakan chip ATmega8535 dengan Xtal 11.05920 MHz dari memori untuk mengembalikan memori. Ketik: device, agar bisa digunakan oleh software lainnya. Ketik:
2. Pada tab 1 Wire, pilih PORT yang akan digunakan sebagai koneksi komunikasi dengan sensor DS1820 dari combo 1 Wire Port. Kemudian check Enabled pada DS1820/DS18S20.
3. Pada tab USART, check pada Transmitter dan pilih Baud Rate: 115200
5. Lengkapilah script sehingga menjadi seperti berikut: #include #include // 1 Wire Bus functions #asm .equ __w1_port=0x1B ;PORTA .equ __w1_bit=0 #endasm #include // DS1820 Temperature Sensor functions #include // Alphanumeric LCD Module functions #asm .equ __lcd_port=015 ;PORTC #endasm #include #include // Standard Input/Output functions #include // DS1820 Temperature Sensor functions #include /* maximum number of DS1820/DS18S20 connected to the bus */ #define MAX_DEVICES 8 /* DS1820/DS18S20 devices ROM code storage area, 9 bytes are used for each device see the w1_search function description),but only the first 8 bytes contain the ROM code and CRC */ unsigned char rom_codes[MAX_DEVICES][9]; int y,x, Status; /* allocate space for ROM codes of the devices hich generate an alarm */ unsigned char alarm_rom_codes[MAX_DEVICES][9]; // Declare your global variables here unsigned char i,devices; int temp; char lcd_buffer[33]; void main(void) { // USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: On // USART Transmitter: On // USART Mode: Asynchronous
// USART Baud rate: 115200 UCSRA=000; UCSRB=098; UCSRC=086; UBRRH=000; UBRRL=005; // 1 Wire Bus initialization w1_init(); // LCD module initialization lcd_init(16); // Global enable interrupts #asm(sei) /* detect how many DS1820/DS18S20 devices are connected to the bus and store their ROM codes in the rom_codes array */ devices=w1_search(0xf0,rom_codes); /* display the number */ printf(%-u DEVICE(S) DETECTED\n\r,devices); /* if no devices were detected then halt */ if (devices==0) while (1); /* loop forever */ while (1) { // Place your code here temp=ds1820_temperature_10(&rom_codes[0][0]); printf(%-i.%-u\n\r,temp/10,abs(temp%10)); lcd_clear(); sprintf (lcd_buffer,Suhu:%-i.%-u%\xf8C,temp/10,abs(temp%10)); lcd_puts(lcd_buffer); }; }
6. Maka hasilnya akan dapat dilihat pada bagian terminal CodeVision yang menampilkan suhu
Membuat Data Logger di Matlab Untuk dapat mengambil data dari mikrokontroller, maka kita perlu membuat sebuah object serial di matlab. Kemudian membaca data yang dikirimkan dari mikrokontroller dan menampilkannya pada sebuah grafik dan menyimpannya. Berikut adalah script matlab untuk membuat sebuah data logger sederhana dari data suhu DS1820, beserta keterangan. %menghapus semua variable yang ada di work space clear all; %menutup semua figure yang terbuka jika ada close all; %membuat sebuah figure yang akan digunakan sebagai tempat membuat grafik logging figure(1); clc; %membuat sebuah object serial pada matlab dan mengatur setting sesuai dengan setting %di mikrokontroller fid = serial(COM4 ,BaudRate,115200,DataBits,8,StopBits,1,InputBufferSize,16000); %membuka koneksi object dengan port serial fopen(fid) %meminta user untuk memasukkan sejumlah nilai pengambilan data SET = input(Masukkan jumlah data logging,Start Logging(PRESS>Enter!)); clear A; %melakukan lopping sejumlah data yang dimasukkan for i=1:SET %membaca data dari serial data1=str2num(fscanf(fid)); if (data1>0) title(['Data#= ' num2str(data1)]); A(i)=data1; %menampilkan data dalam grafik plot(A,red); axis([0 SET 0 100]) hold on; pause(.5) end end %menutup koneksi dengan serial fclose(fid) %menghapus object serial delete(fid); %menyimpan data hasil pengukuran save(data_pengukuran.mat,A);
Demikian sedikit contoh data logging menggunakan Matlab, selanjutnya data yang disimpan dapat diolah lebih lanjut.