Rabu, 08 Maret 2017

Tutorial Belajar Arduino Part 11: Termometer Digital/ Komunikasi Serial

Sebelum kita membuat termometer digital, kita akan belajar bagaimana menggunakan Serial Monitor sebagai alat untuk melihat apakah sensor menghasilkan data yang benar atau tidak. Maksudnya begini, ketika kita menggunakan sebuah sensor untuk mengambil data, maka sensor akan mengirimkan data untuk diproses oleh mikrokontroller. Untuk memastikan data dari sensor tersebut merupakan data yang benar, maka kita bisa melihatnya melalui Serial Monitor. Cara kerjanya begini:
1.        Mikrokontroller akan membaca data dari sensor
2.        Kemudian mikrokontroller akan membuat koneksi serial ke komputer
3.        Selanjutnya mikrokontroller akan mengirimkan data ke komputer melalui komunikasi serial tersebut
4.       Lalu kita bisa melihat data yang diterima oleh komputer menggunakan serial monitor, hyperterminal, atau aplikasi sejenis seperti CoolTerm dan PuTTY.

Serial Monitor
Serial monitor bisa kita gunakan untuk men-debug secara software. Jika tanpa serial monitor, kita tidak bisa melakukan debug untuk aplikasi yang kita buat sehingga untuk menemukan solusinya, kita harus men- debug dari sisi hardware. Misal ketika ada error, kita akan mencoba dengan LED atau menambah/ mengurangi rangkaian.

Tapi jika menggunakan serial monitor, kita akan tahu error-nya melalui data yang dikirimkan oleh Arduino. Misal ketika nyala LED terlalu lama atau terlalu pelan, kita langsung bisa mengecek nilai (angka) yang digunakan untuk delay dan semua isi variabel dalam program yang kita buat. Sehingga kita bisa menelusuri logika dan algoritma program berdasarkan data-data yang dikirimkan tadi.

Perhatikan pada board arduino, pin 0 dan 1 ada tulisan RX dan TX. Pin tersebut berfungsi untuk menerima dan mengirim data melalui komunikasi serial dari Arduino ke komputer melalui kabel USB. Untuk menggunakan komunikasi serial, kita tidak perlu menambahkan komponen tambahan pada Arduino karena pada board tersebut sudah disediakan. Kita cukup menghubungkan Arduino ke komputer, dan kita bisa langsung membuat program. Mari kita mulai dengan Sketch Komunikasi Serial.


// Sketch Komunikasi Serial

void setup() {
 Serial.begin(9600);
 Serial.println("With Arduino :");
}
int number = 0;
void loop() {
 Serial.print("Hello World! ");
 Serial.println( number++ );
 delay(1000);
}
 
Sebelum kita melihat hasilnya, mari kita sedikit membahas program pada Sketch Komunikasi Serial.

 Serial.begin(9600);

Pada baris ke-3, perintah Serial.begin(9600); berarti kita akan membuat koneksi serial dengan baud rate 9600. Sederhananya, baud berkaitan dengan jumlah bit yang akan ditransfer setiap detik. Nilai baud rate ini tergantung pada clock mikrokontroller. Arduino Pro Mini sendiri menggunakan clock 16 MHz. Jika clock-nya makin rendah, maka baud rate harus kita kurangi. Sebagai contoh, jika kita menggunakan mikrokontroller dengan clock 1 MHz, maka baud rate yang cocok adalah 4800. Jika clock 1 MHz kita menggunakan baud rate 9600, maka data yang dikirim ke komputer tidak akan terbaca. Pada Arduino IDE, nilai baud rate default pada Serial Monitor adalah 9600.

Silakan Anda coba-coba dengan mengubah nilainya sesuai pilihan yang ada.

Pada baris ke-4, awalnya Arduino akan mengirim pesan With Arduino ketika pertama kali Arduino start. Setelah itu, Arduino akan mengirim pesan Hello World! dan dilanjutkan dengan angka 0, 1, 2, 3, dst. Jika Serial Monitor kita tutup dan kita buka kembali, maka Arduino seakan-akan melakukan reset program. Arduino akan kembali mengirimkan pesan With Arduino”’ dan angka kembali ke 0 lagi.
 
 Serial.print("Hello World! ");
 Serial.println( number++ );

Pada baris ke 10 dan 11, kita menemukan perintha print yang berbeda, yaitu print() dan println(). Jika kita menggunakan print, maka kita sekedar mengirim data tanpa diikuti end of line (perintah untuk ganti baris , atau ENTER). Jika kita menggunakan println(), maka tulisan akan diikuti perintah untuk pindah baris.


Kita kembali ke board Arduino. Setelah program Sketch Komunikasi Serial diupload ke Arduino. Perhatikan board Arduino, maka LED yang berlabel TX akan berkedip. Setiap LED TX berkedip, artinya Arduino sedang mengirim data. Buka Serial Monitor dengan cara mengklik icon Serial Monitor. Jika Anda menggunakan versi Arduino IDE selain versi 1.81, mungkin letaknya berbeda.

Tracking timeDelay
Kali ini kita akan men-tracking timeDelay dan mengirimkan pesan ke komputer bahwa LED sedang nyala atau mati. LED yang akan kita gunakan untuk percobaan adalah LED yang ada pada board Arduino yang terhubung ke pin 13, perhatikan LED dengan label “L” pada board Arduino.

// Sketch Program tracking timeDelay
const int LED = 13;
int timeDelay = 3000;
 
void setup() {
 Serial.begin(9600); 
 Serial.println("pin 13 as OUTPUT");
 
 pinMode(LED, OUTPUT);
 Serial.println("LED = ON, selama timeDelay = 3 detik");
 digitalWrite(LED, HIGH);
 delay(timeDelay);
}
 
void loop() {
 if(timeDelay <= 100){
 Serial.println("Reset timeDelay to 1000");
  timeDelay = 1000;
 }
 Serial.println();
 Serial.print("timeDelay = ");
 Serial.println(timeDelay);
 Serial.println("LED = OFF");
 digitalWrite(LED, LOW);
 delay(timeDelay);
 Serial.println("LED = ON");
 digitalWrite(LED, HIGH);
 delay(timeDelay);
 timeDelay = timeDelay - 100;
}
 
Program pada Sketch Program tracking timeDelay merupakan contoh simpel untuk melakukan debugging, artinya kita ingin mengetahui apa yang dilakukan program dengan mengetahui setiap variabel dan bagaimana perilaku program tersebut. Setidaknya program pada Sketch Program tracking timeDelay memiliki output seperti berikut:
pin 13 as OUTPUT
LED = ON, selama timeDelay = 3 detik
timeDelay = 3000 LED = OFF LED = ON
timeDelay = 2900 LED = OFF LED = ON
timeDelay = 2800 LED = OFF LED = ON
dst...

Mengukur Suhu dengan LM 35
LM35 merupakan IC sensor suhu dengan bentuk yang mirip dengan transistor. Kaki IC ini hanya ada tiga, yaitu untuk VCC, Output, dan GND 



Sensor ini bisa digunakan untuk mengukur suhu dari -55o - 150o celcius. Berdasarkan datasheet LM35, maka kita bisa menggunakan pengukuran penuh (-55 — 150o celcius) atau pengukuran sebagian yaitu hanya bisa menghitung dari 2 — 150o celcius. Untuk pengukuran penuh, maka rangkaian dasarnya seperti tampak pada Gambar Full-Range sedangkan untuk pengukuran sebagian, rangkaian dasarnya adalah seperti pada Gambar Basic.

  

Rangkaian

Rangkaian sensor suhu LM35

Berdasarkan karakteristik kaki-kaki pada IC LM35, maka kita akan menggunakan rangkaian sebagian sehingga Rangkaian hanya bisa mengukur suhu dari 2 hingga 150 derajat celcius. Cara merangkainya yaitu:
1.        Sambungkan kaki 1 ke VCC
2.        Sambungkan kaki kedua (tengah) ke A0. A0 adalah pin analog, kaki pin analog berfungsi untuk berbagasi tranduser / sensor yang mengharuskan sinyal analog. Oleh sebab itu, untuk membaca kaki ini menggunakan analogRead(), sedangkan untuk menulisnya menggunakan analogWrite().
3.        Sambungkan kaki ke-3 ke GND.

Karakteristik dari sensor ini yaitu setiap kenaikan 10 mV pada kaki output, menandakan kenaikan suhu 1o celcius. Sehingga, karena Rangkaian hanya mampu mengukur dari 2o celcius, maka output LM35 minimal adalah 20 mV dan maksimal 1500 mV. Konversi suhu pada output LM35 juga tergantung pada tegangan referensi yang digunakan.

Tegangan referensi pada arduino ada tiga (khusus Arduino Uno), tegangan referensi default, internal, dan eksternal. Jika kita tidak mendefinisikan tegangan referensi yang akan kita gunakan, maka Arduino secara default akan menggunakan tegangan referensi 5 volt. Selain 5 volt, tegangan default yang disediakan oleh arduino adalah 3.3 volt. Akan tetapi kita harus membuat jumper dari 3.3 volt (di board Arduino) ke pin AREF, lalu mengeksekusi perintah analogRference(DEFAULT).

Tegangan referensi internal Arduino yaitu 1.1 volt, untuk menggunakan tegangan referensi ini, kita harus memberikan perintah analogReference(INTERNAL).

Tapi jika ingin menggunakan tegangan referensi selain 5, 3.3, dan 1.1 volt, kita bisa menggunakan tegangan referensi eksternal. Tegangan referensi ini harus antara 0 dan 5 volt, jika tidak, Arduino bisa jadi akan rusak. Jika kita menggunakan tegangan referensi custom ini, maka kita harus memasang sumber tegangan ke AREF dan memberi perintah analogReference(EXTERNAL);

Program
Sebelum membuat program, kita akan menghitung bagaimana cara mengukur dan mengkonversi output dari LM35 menjadi suhu. Kita akan mengkonversi voltase pada kaki output LM35, kemudian menghitungnya berdasarkan tegangan referensi yang digunakan, mengubahnya menjadi celcius, lalu mengirimkannya ke komputer melalui komunikasi serial.

Jika kita menggunakan tegangan referensi 5 volt, maka Arduino bisa mengukur setidaknya hingga 5000 mV. padahal kemampuan LM35 hanya sebatas 150o celcius atau 150 x 10 mV = 1500 mV (1.5volt). Sehingga tegangan yang keluar dari kaki output LM35 tidak akan mungkin melebihi 1.5 volt.

Berdasarkan persamaan sederhana, maka kita bisa menghitung suhu berdasarkan perbandingan antara kapasitas voltase yang bisa dicacah oleh pin analog Arduino (1024) dan kemampuan LM35 mengukur suhu.

Suhu dalam Voltase (T)                        : 0 - 500
Cacahan Voltase input (Vin)                : 0 - 1024
0/500 = 0/1024
T/500 = Vin/1024
T = (Vin * 500) / 1024

//Sketch Program sensor suhu LM35
const int pSuhu = A0;
float suhu, data;
void setup() {
 Serial.begin(9600);
 pinMode(pSuhu, INPUT);
}
void loop() {
 data = analogRead(pSuhu);
 suhu = data * 500 / 1024;
 Serial.print("data: ");
 Serial.print(data);
 Serial.print(", suhu: ");
 Serial.print(suhu);
 Serial.println();
 delay(1000);
}

Program pada Sketch Program sensor suhu LM35 akan membaca data dari sensor suhu pada pin A0 di board Arduino kemudian mengkonversinya menjadi suhu. Informasi suhu akan dikirim ke komputer melalui komunikasi serial dengan baud rate 9600 setiap 1000 milisekon.

float suhu, data;

Variabel suhu dan data menggunakan float, yaitu tipe data yang memungkinkan memuat angka desimal. Di sini menggunakan desimal karena adanya pembagian sehingga jika kita menggunakan integer, maka hasil perhitungan kita kurang presisi karena hasil pembagiannya akan selalu dibulatkan.

data = analogRead(pSuhu);

Fungsi analogRead() digunakan untuk membaca masukan dari sensor analog. Nilai dari analog read ini berkisar dari 0 hingga 1023 berdasarkan kemampuan dari mikrokontroller dalam mencacah dari 0 — 5 volt.

Untuk mendapatkan hasil pengukuran yang lebih presisi, maka kita bisa mengganti tegangan referensi yang digunakan. Jika kita menggunakan tegangan referensi 5000 mV, maka space dari 1500 — 5000 mV tidak akan pernah terpakai. Oleh sebab itu, kita bisa menggunakan tegangan referensi 1500 mV (sesuai dengan output maksimal pada LM35) atau menggunakan tegangan referensi yang lebih rendah, misal tegangan referensi INTERNAL yang nilainya adalah 1.1 volt. Sebagai catatan, jika Anda menggunakan tegangan referensi 1.1 volt (1100 mV), maka batas maksimal suhu yang bisa dihitungan adalah 110o celcius.

//Sketch Program sensor suhu tegangan referensi 1.1 volt
const int pSuhu = A0;
float suhu, data;
void setup() {
// mengubah tegangan referensi ke internal, 1.1 volt
analogReference(INTERNAL);
 
Serial.begin(9600);
pinMode(pSuhu, INPUT);
}
void loop() {
data = analogRead(pSuhu);
suhu = data * 110 / 1024;
Serial.print("data: ");
Serial.print(data);
Serial.print(", suhu: ");
Serial.print(suhu);
Serial.print(" C (");
Serial.print(convertToF(suhu));
Serial.print(" F)");
Serial.println();
delay(1000);
}
float convertToF(float suhuC){
return (suhuC * 9.0/5.0) + 32;
}

Program pada Sketch Program sensor suhu tegangan referensi  menggunakan tegangan referensi internal 1.1 volt kemudian suhu dalam celcius dikonversi menjadi Fahrenheit. Berdasarkan konsepnya, konversi celcius ke Fahrenheit menggunakan rumus:

Kemudian informasi suhu dalam celcius dan Fahrenheit dikirim ke komputer dengan komunikasi serial.

Tidak ada komentar:

Posting Komentar