Setelah memahami mengenai Pulse Width Modulation (PWM), kali ini saya akan membahas mengenai cara mengukur suhu dengan menggunakan Arduino dan bantuan Sensor LM35.
Apa itu Sensor LM35?
Sensor suhu LM35 seperti namanya digunakan untuk mengukur suhu. LM35 dapat beroperasi direntang suhu -55⁰C hingga 150⁰C. LM35 mengukur suhu dalam satuan celsius, pengukuran dilakukan secara linear dengan output 10.0mV/⁰C. Tingkat akurasinya sebesar 0.5⁰C. LM35 dapat beroperasi dalam rentang tegangan 4 - 30 V. Arus yang dibutuhkan LM35 untuk beroperasi kurang dari 60µA.
Percobaan
Setelah mengetahui apa itu sensor suhu LM35, maka sekarang saatnya melakukan percobaan. Sensor suhu yang saya gunakan adalah LM35DZ, gambar strukturnya dapat dilihat pada gambar 1. Alat-alat yang digunakan pada percobaan kali ini adalah:
board Arduino x1
kabel USB untuk power Arduino x1
LM35 x1
breadboard x1
kabel (untuk jumper) secukupnya
Gambar 1 - struktur LM35DZ
Setelah melihat struktur LM35DZ dan alat-alat sudah siap, saatnya membuat rangkaian, rangkaian dibuat seperti pada gambar 2.
Gambar 2 - skema rangkaian percobaan
Setelah membuat rangkaian seperti pada gambar 2, dengan menggunakan alat dan komponen yang sudah disebutkan sebelumnya, maka saatnya untuk membuat kode program dan diunggah ke board Arduino Uno.
Kode program yang saya gunakan adalah
/*
program untuk mengukur suhu
dengan menggunakan LM35
*/
const int inPin = 0; //analog pin
void setup()
{
Serial.begin(9600);//inisiasi koneksi serial dengan 9600 baud rate
}
void loop()
{
int value = analogRead(inPin);
Serial.print(value); Serial.print(" > ");
float millivolts = (value / 1024.0) * 5000;//konversi perhitungan dari input
//analog ke digital
float celsius = millivolts / 10; //output sensor sebesar 10mV per derajat celsius
Serial.print(celsius);
Serial.print(" degrees Celsius, ");
Serial.print( (celsius * 9)/ 5 + 32 ); //konversi ke fahrenheit
Serial.println(" degrees Fahrenheit");
delay(1000); //delay selama 1 detik
}
Setelah membuat rangkaian berdasarkan skema, serta menghubungkan Arduino dan mengunggah kode program ke Arduino, maka akan didapatkan hasil seperti pada video berikut
Penjelasan
Pada kode program terdapat baris yang berisi float millivolts = (value / 1024.0) * 5000;
Kode ini didapat karena analog input ke Pin A0 berkisar antara 0-1023 (10bit), angka 5000 didapat dari nilai tegangan yang di-supply oleh board Arduino.
Untuk lebih jelasnya, lihat gambar 3.
Gambar 3 - hasil yang terbaca pada serial monitor dan tegangan output yang terukur
Pada gambar 3, tegangan output dari LM35 yang terbaca sebesar 303.1mV, jika melihat datasheet LM35, maka 303.1mV bisa diartikan sebagai 30.3⁰C, nilai ini bisa berbeda dari nilai yang terbaca pada serial monitor disebabkan karena besarnya input tegangan yang masuk ke sensor LM35 tidak tepat 5V, selain itu juga karena adanya pembulatan dalam perhitungan pada board Arduino.
Demikian posting saya kali ini, semoga bermanfaat dan selamat mencoba!
Setelah berhasil menyalakan LED dengan menggunakan Push Button, postingan kali ini akan membahas tentang penggunaan Pin PWM(Pulse Width Modulation) pada Arduino beserta dengan percobaannya. Langsung saja ya...
Apasih PWM itu?
PWM merupakan singkatan dari Pulse Width Modulation. PWM merupakan teknik untuk membuat output sinyal digital seolah-olah menghasilkan sinyal analog. Sinyal digital merupakan sinyal nilainya 0 atau 1 saja. PWM dilakukan dengan memanipulasi durasi sinyal bernilai 1 dalam periode waktu tertentu.
PWM pada board Arduino Uno R3 seperti apa?
Arduino Uno R3 menggunakan ATMega328P-PU(datasheet) sebagai mikrokontrollernya. Pada mikrokontroller seri ATMega328P ini terdapat 3 buah Timer/ Counter yang dapat digunakan untuk melakukan PWM, yaitu timer-0(8-bit), timer-1(16-bit), timer-2(8-bit).
timer-0 terhubung dengan pin 5, 6
timer-1 terhubung dengan pin 9, 10
timer-2 terhubung dengan pin 3, 11
Penggunaan PWM pada Arduino dapat dilakukan dengan memanggil fungsi analogWrite(pin, value), dimana pin nya merupakan pin yang secara default mensupport PWM (Pin 3, 5, 6, 9, 10, 11) dilambangkan dengan tanda "~" disebelah angka pin. Kita juga dapat melakukan manipulasi di program untuk membuat pin lainnya di Arduino menjadi pin PWM. Valuenya sendiri bernilai antara 0-255 karena timer yang ada hanya 8-bit.
Output PWM pada pin 5 dan 6 mempunyai duty-cycle lebih besar dari yang diharapkan, hal ini terjadi karea pin 5 dan 6 menggunakan timer-0 yang juga merupakan timer yang digunakan untuk menangani fungsi milis() dan delay().
Pada saat fungsi analogWrite(64) dijalankan, maka sinyal digital yang terlihat bernilai 1 dengan durasi 25% periode normalnya, pada saat ini, bila pin tersebut terhubung dengan LED maka sebenarnya LED mati/hidup dalam waktu cepat, namun mata kita tidak dapat melihat perubahan itu, sehingga LED akan tampak redup, begitu pula yang terjadi pada analogWrite(127) dan analogWrite(191).
Setelah membaca teori yang panjang, saatnya melakukan percobaan.
Percobaan #1 Menyalakan LED dari Padam, Redup, Terang Sekali, Redup hingga Padam Kembali
Alat dan komponen yang dibutuhkan:
Board Arduino x1
Kabel USB untuk power Arduino x1
Resistor 10k Ohm x1
LED x1
Breadboard x1
Kabel(untuk jumper) secukupnya
Skema rangkaian dapat dilihat pada gambar 1.
gambar 1 : skema rangkaian percobaan #1
Setelah membuat rangkaian dengan menggunakan alat dan komponen yang sudah disebutkan sebelumnya, maka saatnya untuk membuat kode program untuk diunggah ke board Arduino Uno.
Kode program yang saya gunakan adalah
//Percobaan kali ini akan membuat LED menjadi nyala perlahan sampai
//terang sekali kemudian redup hingga mati
const int LED = 9; //pin untuk LED
int i = 0; //variabel yang akan berubah-ubah nilainya untuk looping
void setup() {
pinMode(LED, OUTPUT); //memberitahu ke Arduino bahwa LED(pin 9) merupakan
//OUTPUT
}
void loop(){
for (i = 0; i < 255; i++) { //looping dari 0 ke 254 (semakin terang)
analogWrite(LED, i); //menentukan tingkat kecerahan LED
delay(10); //delay 10ms karena tanpa ada delay kita tidak dapat melihat
//perubahan yang terjadi
}
for (i = 255; i > 0; i--) { //looping dari 255 ke 1 (semakin redup)
analogWrite(LED, i); //menentukan tingkat kecerahan LED
delay(10); //delay 10ms
}
}
Setelah membuat rangkaian berdasarkan skema, serta menghubungkan Arduino dan mengunggah program ke Arduino, maka akan didapatkan hasil seperti pada video berikut.
Percobaan #2 Menyalakan LED dari Padam, Redup, Terang Sekali, Redup hingga Padam Kembali dengan Push Button Switch
Alat dan komponen yang dibutuhkan:
Board Arduino x1
Kabel USB untuk power Arduino x1
Resistor 10k Ohm x2
LED x1
Breadboard x1
Kabel(untuk jumper) secukupnya
Push Button Switch
Skema rangkaian dapat dilihat pada gambar 2.
gambar 2 : skema percobaan #2.
Selanjutnya saya mengunggah program berikut ke Arduino Uno
/*
menyalakan LED dengan menekan switch, jika switch ditekan terus maka
LED akan menyala dengan tingkat kecerahan yang berubah
*/
const int LED = 9; //pin output untuk LED
const int BUTTON = 7; //pin input untuk switch
int val = 0; //menyimpan kondisi switch sekarang
int old_val = 0; //menyimpan nilai val yang lama
int state = 0; //0=LED padam, 1=LED nyala
int brightness = 128; //tingkat kecerahan
unsigned long startTime = 0; //waktu saat button mulai ditekan
boolean lastButton = LOW; //state switch terakhir
boolean currentButton = LOW; //state switch sekarang
/*
Fungsi debounce berfungsi untuk memastikan bahwa switch tertekan
dengan benar dan kembali pada posisi semula
*/
boolean debounce(boolean last){
boolean current = digitalRead(BUTTON);
if(last != current){
delay(5);
current = digitalRead(BUTTON);
}
return current;
}
void setup() {
pinMode(LED, OUTPUT); //memberitahu ke Arduino bahwa LED(pin 9)
//merupakan OUTPUT
pinMode(BUTTON, INPUT); //memberitahu ke Arduino bahwa
//Push Button Switch (pin 7) merupakan INPUT
}
void loop() {
currentButton = debounce(lastButton);//mendeklarasikan currentButton
//dengan menjalankan
//fungsi debounce;
val = currentButton; //assign val dengan currentButton
//cek apakah ada perubahan atau tidak
if ((val == HIGH) && (old_val == LOW)) {
state = 1 - state; //ubah state dari off ke on atau sebaliknya
startTime = millis(); /*millis() adalah jam di arduino, fungsi ini
mengembalikan berapa ms yang sudah berlalu
sejak board terakhir di reset
(baris ini mengingat kapan switch
terakhir ditekan)*/
delay(10);
}
//cek apakah switch ditekan atau tidak
if ((val == HIGH) && (old_val == HIGH)) {
//jika switch ditekan lebih dari 500ms...
if (state == 1 && (millis() - startTime) > 500) {
brightness++; //tingkat kecerahan ditingkatkan sebanyak 1
delay(10); //delay selama 10ms agar perubahan tingkat kecerahan
//dapat terlihat
if (brightness > 255) { //255 adalah tingkat maksimum kecerahan
brightness = 0; //jika tingkat kecerahan melebihi 255 maka
//dikembalikan ke 1
}
}
}
old_val = val; //val sudah tidak dipakai, disimpan ke old_val;
lastButton = currentButton; //currentButton sudah tidak dipakai,
//disimpan ke lastButton
if (state == 1) {
analogWrite(LED, brightness); //menyalakan LED dengan tingkat
//kecerahan sesuai nilai
//pada variabel brightness
} else {
analogWrite(LED, 0); //memadamkan LED
}
}
Setelah dijalankan, hasilnya adalah seperti pada video berikut.
Demikian postingan saya kali ini, selamat mencoba dan semoga bermanfaat.
Postingan kali ini saya akan membuat rangkaian yang menghubungkan Arduino Uno, LED, dan button switch. Button switch disini digunakan untuk menghidupkan dan mematikan LED. Diharapkan pembaca sudah mengerti dasar membuat rangkaian elektrik dengan menggunakan bantuan breadboard.
Alat dan komponen yang dibutuhkan:
Board Arduino x1
Kabel USB untuk power Arduino x1
Resistor 10k Ohm x1
LED x1
Button Switch x1
Breadboard x1
Kabel(untuk jumper) secukupnya
Skema rangkaian dapat dilihat pada gambar 1.
gambar 1 : skema rangkaian
Pin #13 pada Arduino digunakan sebagai output untuk menyalakan LED. Pin #8 digunakan sebagai input. Pada rangkaian terdapat resistor dengan besar hambatan 10k, resistor ini berfungsi sebagai pull-down resistor, untuk membuat agar tegangan yang terbaca pada pin #8 benar-benar bernilai 0V. Hal ini diperlukan agar pin #8 dapat menentukan dengan pasti nilai LOW/ HIGH yang terbaca. Jika resistor dilepaskan maka yang akan terjadi adalah LED akan berkedip dalam waktu yang cepat karena pin #8 tidak dapat memastikan nilai apa yang terbaca, karena tidak ada rangkaian yang tertutup. Hal yang sama akan terjadi apabila kabel pada pin #8 dilepas.
Setelah melihat rangkaian, maka saatnya membuat kode program untuk di-upload ke Arduino Uno. Kode program yang saya upload sebagai berikut.
int switchPin = 8;
int ledPin = 13;
boolean lastButton = LOW;
boolean currentButton = LOW;
boolean ledOn = false;
/*
Fungsi debounce berfungsi untuk memastikan bahwa switch tertekan
dengan benar dan kembali pada posisi semula
*/
boolean debounce(boolean last){
boolean current = digitalRead(switchPin);
if(last != current){
delay(5);
current = digitalRead(switchPin);
}
return current;
}
void setup(){
pinMode(switchPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop(){
currentButton = debounce(lastButton);
if(lastButton == LOW && currentButton == HIGH){
ledOn = !ledOn;
}
lastButton = currentButton;
digitalWrite(ledPin, ledOn);
}
Setelah membuat rangkaian berdasarkan skema, serta menghubungkan Arduino dan meng-upload program ke Arduino, maka akan didapatkan hasil seperti pada video berikut.
Demikian posting saya kali ini, semoga bermanfaat dan selamat mencoba.