Juni 2015 - Elang Sakti
Download Ebook Belajar Arduino PDF, Arduino untuk pemula
Jasa Pembuatan Program Arduino, pemrograman Arduino
# Hack Your Skills! to be Professional Mechatronics

Rangkaian Sensor Cahaya dengan LDR untuk Membuat Lampu Otomatis

20 komentar
Sebelum membahas tentang Rangkaian Sensor Cahaya dengan LDR untuk membuat Lampu Otomatis, pernahkah Anda mengalami ketika ingin meninggalkan rumah atau kontrakan dalam waktu yang lama, kemudian dengan alasan tertentu Anda memutuskan untuk menyalakan lampu depan rumah secara terus-menerus? Hal tersebut merupakan hal yang biasa. Tapi begini, kita bisa tahu bahwa pemilik rumah sedang tidak ada dengan dua indikasi : lampunya mati terus atau lampunya nyala terus. Apakah itu masalah? Tidak selalu, sebab tidak semua orang punya niat jahat dan tidak semua orang punya niat baik. :)

Dengan lampu otomatis ini setidaknya kita bisa mendapatkan dua keuntungan, pertama kita bisa menghemat listrik dan yang kedua, kita setidaknya menghindari orang yang tak dikenal mengintai rumah kita karena tak berpenghuni. Dengan adanya lampu otomatis, kita bisa menghemat setidaknya 50 % dari daya yang bisa dihabiskan lampu tersebut.

Katakanlah kita kita punya lampu depan 10 watt dinyalakan 24 jam sehari selama 10 hari, maka setidaknya lampu tersebut akan mengkonsumsi daya sebanyak 10 waat x (24x10) jam = 2400 watt jam atau 2400 wh atau 2.4 kwh. Misal, misal lho ya, misal 1 kwh harganya 1000, maka biaya yang dipakai listrik adalah 2.4 x 1000 = 2400 rupiah. Itu kalau satu, tapi kalau banyak? Jika kita menggunakan lampu otomatis, kita bisa menghemat sekitar 50% karena lampu akan nyala setidaknya setengah hari saja.

Selain untuk menghemat energi, lampu otomatis ini juga bisa membuat rumah tampak hidup dan tampak ada penghuninya. Sebab, siang lampunya mati, kalau malam lampu ada yang ngidupin. Jika ada orang asing, tentu akan menganggap bahwa penghuni rumah ada di dalam. Begitulah kira-kira manfaat dari lampu otomatis ini. Untuk membuat lampu otomatis, ada banyak cara. Salah satunya dengan sensor cahaya. Rangkaian dan cara membuatnya pun tidak terlalu susah (tidak susah bagi yang sudah tahu, :p).

Baca juga contoh implementasi LDR dengan alat yang sederhana :
1. Lampu Rumah Otomatis
2. Fitting Lampu Otomatis untuk lampu senja

Sekilas tentang Cara kerja LDR (Sensor Cahaya)

Gambar LDR - Rangkaian Sensor Cahaya LDR untuk Lampu Otomatis
Gambar LDR ukuran besar
Light Dependent resistor (LDR) merupakan sebuah resistor yang nilai resistansinya berubah seiring perubahan initensitas cahaya yang mengenainya. Dalam kondisi gelap, resistansi LDR sekitar 10MΩ, tapi dalam kondisi terang resistansi LDR menurun hingga 1KΩ atau bahkan lebih kecil lagi.

LDR terbuat dari sebuah cakram semikonduktor seperti kadmium sulfida dengan dua buah elektroda pada permukaannya. Pada saat intensitas cahaya yang mengenai LDR sedikit, bahan dari cakram LDR tersebut menghasilkan elektron bebas dengan jumlah yang relatif kecil. Sehingga hanya ada sedikit elektron untuk mengangkut muatan elektrik. Artinya saat intensitas cahaya yang mengenai LDR sedikit maka LDR akan memiliki resistansi yang besar.

Sedangkan pada saat kondisi terang, maka intensitas yang mengenai LDR banyak. Maka energi cahaya yang diserap akan membuat elektron bergerak cepat sehingga lepas dari atom bahan semikonduktor tersebut. Dengan banyaknya elektron bebas, maka muatan listrik lebih mudah untuk dialirkan. Artinya saat intensitas cahaya yang mengenai LDR banyak maka LDR akan memiliki resistansi yang kecil dan menjadi konduktor yang baik.

Hambatan Rangkaian Sensor Cahaya LDR untuk Lampu Otomatis gelap
Resistansi LDR pada kondisi terang (1.85 K ohm)

Resistansi LDR pada kondisi agak gelap (24.9 K ohm)
Gambar di atas adalah resistansi pada LDR dalam kondisi terang dan kondisi gelap. Dalam kondisi terang, resistansi masih kisaran 1K ohm, dan ketika cahaya sedikit terhalangi sehingga agak gelap, maka resistansi meningkat hingga puluhan kilo ohm. Karakteristik inilah yang bisa kita manfaatkan untuk mengaktifkan relay dan menghidupkan lampu.

Skema LDR / Rangkaian LDR untuk Lampu Otomatis

Untuk membuat lampu otomatis, setidaknya kita butuh 5 komponen sebagai berikut:
  • LDR, berfungsi untuk mendeteksi cahaya. Rencananya : jika siang maka lampu mati, jika malam lampu menyala.
  • Potensiometer, berfungsi untuk kalibrasi intensitas cahaya untuk menyalakan atau mematikan lampu.
  • Transistor jenis NPN, berfungsi sebagai sakelar elektrik untuk menghidupkan relay.
  • Resistor, sebagai pengaman arus yang masuk ke transistor.
  • Relay, berfungsi sebagai sakelar untuk menghidupkan lampu.

Setidaknya, kita hanya butuh 5 komponen untuk membuat sakelar cahaya untuk menghidupkan lampu. Kelima komponen tersebut belum termasuk kabel dan peralatan tambahan seperti tang untuk memotong, selotip (jika perlu), serta solder dan timahnya. Dalam percobaan kali ini, kami akan men-simulasikan rangkaian sakelar cahaya atau sensor cahaya untuk menghidupkan led dengan sumber daya dari baterai. Berikut skema lengkap dari sensor cahaya tersebut.

Skema Rangkaian Sensor Cahaya LDR untuk Lampu Otomatis


Cara kerja skema sakelar cahaya di atas yaitu : ketika cahaya terang, maka resistansi pada LDR akan berkurang sehingga tegangan antara basis dan emitor yang diwakili oleh resistor 330, sebagian resistansi VR, dan resistansi LDR lebih kecil daripada resistansi pada VR sebelah atas (antara basis ke positif). Sehingga transistor dalam keadaan tidak bekerja dan relay dalam kondisi terbuka.

Tapi ketika cahaya berkurang, maka resistansi meningkat dan sekaligus meningkat pula tegangan antara basis dan emitor. Kondisi ini membuat transistor aktif dan mengalirkan arus dari kolektor ke emitor. Karena arus yang mengalir melalui kolektor di seri dengan relay, maka relay akan ikut aktif. Aktifnya relay bisa kita manfaatkan untuk menghidupkan lampu dari PLN, atau dalam simulasi yang kami lakukan yaitu untuk menghidupkan led dengan baterai. Berikut adalah komponen yang siap dirakit + (baterai, led merah, dan resistor 1K untuk simulasi).

Komponen Rangkaian Sensor Cahaya LDR untuk Lampu Otomatis



Hasil rakitan komponen tersebut dalam project board ditambah dengan simulasi lampu led dengan baterai.

Skema Rangkaian Sensor Cahaya LDR
Kondisi terang, relay mati, led mati

Skema Rangkaian Sensor Cahaya LDR untuk saklar cahaya
LDR terhalangi (agak gelap), relay nyala, dan led nyala.

Cek hasilnya dengan melihat video di bawah ini.


Semoga tulisan ini bermanfaat dan memberikan pengetahuan baru untuk kita semua. Selamat mencoba, dan salam olah raga!! :D

Written by ElangSakti
Rangkaian Sensor Cahaya dengan LDR untuk Membuat Lampu Otomatis
Bahasan: Sebelum membahas tentang Rangkaian Sensor Cahaya dengan LDR untuk membuat Lampu Otomatis , pernahkah Anda mengalami ketika ingin men...
Published at Jumat, 26 Juni 2015, Updated at Jumat, 26 Juni 2015
Reviewed by dr. on
Rating: 4.7

20 komentar :

Posting Komentar

# Hack Your Skills! to be Professional Mechatronics

Menguji Rangkaian & Source Code RTC DS1302 + Arduino Uno

1 komentar
Yak, kali ini kita akan bercerita tentang modul Real Time Clock - RTC DS1302 dan Arduino Uno. Pada tulisan ini kita akan mencoba beberapa sampel source code dari library yang diposting oleh Playground Arduino dan beberapa keanehannya, atau lebih tepatnya, kita akan mencoba menganalisa source code yang error (sementara akan kita sebut error karena ini adalah tulisan awal dalam web ini tentang RTC). Artinya, kami baru mulai mempelajari RTC dan sampel awalnya adalah IC DS1302. :D

Untuk menggunakan RTC DS1302, selain membuat sendiri library prosedur komunikasinya, kita bisa menggunakan library yang sudah ada. Salah satu library yang bisa kita langsung gunakan adalah library yang dibuat oleh Henning Karlsen yang bis didownload di link ini [1]. Selain library untuk interfacing DS1302, kita juga butuh library Time, karena kita akan bermain dengan waktu. Library time yang kami pakai adalah versi 1.3 dan bisa Anda download di link ini [2].

Karena kami ingin buru-buru mencoba modul ini, maka kami tidak melakukan coding dari awal dan memilih untuk mencoba salah satu sampel bawaan dari library DS1302. File yang kami coba ada di folder DS1302_Serial dengan file bernama DS1302_Serial.ino. Berikut isi dari source code dalam file tersebut:

// DS1302_Serial_Easy (C)2010 Henning Karlsen
// web: http://www.henningkarlsen.com/electronics
//
// Adopted for DS1302RTC library by Timur Maksimov 2014
//
// A quick demo of how to use my DS1302-library to
// quickly send time and date information over a serial link
//
// I assume you know how to connect the DS1302.
// DS1302:  CE pin    -> Arduino Digital 27
//          I/O pin   -> Arduino Digital 29
//          SCLK pin  -> Arduino Digital 31
//          VCC pin   -> Arduino Digital 33
//          GND pin   -> Arduino Digital 35

#include <Time.h>
#include <DS1302RTC.h>

// Set pins:  CE, IO,CLK
DS1302RTC RTC(27, 29, 31);

// Optional connection for RTC module
#define DS1302_GND_PIN 33
#define DS1302_VCC_PIN 35

void setup()
{

  // Setup Serial connection
  Serial.begin(9600);
  
  Serial.println("DS1302RTC Read Test");
  Serial.println("-------------------");
  
  // Activate RTC module
  digitalWrite(DS1302_GND_PIN, LOW);
  pinMode(DS1302_GND_PIN, OUTPUT);

  digitalWrite(DS1302_VCC_PIN, HIGH);
  pinMode(DS1302_VCC_PIN, OUTPUT);
  
  Serial.println("RTC module activated");
  Serial.println();
  delay(500);
  
  if (RTC.haltRTC()) {
    Serial.println("The DS1302 is stopped.  Please run the SetTime");
    Serial.println("example to initialize the time and begin running.");
    Serial.println();
  }
  if (!RTC.writeEN()) {
    Serial.println("The DS1302 is write protected. This normal.");
    Serial.println();
  }
  
  delay(5000);
}

void loop()
{
  tmElements_t tm;
  
  Serial.print("UNIX Time: ");
  Serial.print(RTC.get());

  if (! RTC.read(tm)) {
    Serial.print("  Time = ");
    print2digits(tm.Hour);
    Serial.write(':');
    print2digits(tm.Minute);
    Serial.write(':');
    print2digits(tm.Second);
    Serial.print(", Date (D/M/Y) = ");
    Serial.print(tm.Day);
    Serial.write('/');
    Serial.print(tm.Month);
    Serial.write('/');
    Serial.print(tmYearToCalendar(tm.Year));
    Serial.print(", DoW = ");
    Serial.print(tm.Wday);
    Serial.println();
  } else {
    Serial.println("DS1302 read error!  Please check the circuitry.");
    Serial.println();
    delay(9000);
  }
  
  // Wait one second before repeating :)
  delay (1000);
}

void print2digits(int number) {
  if (number >= 0 && number < 10)
    Serial.write('0');
  Serial.print(number);
}

Sebelum mengcompile, biasanya kami membaca setiap baris dari source code yang akan kami coba tersebut dengan harapan bisa memahami alur program yang akan kami upload nanti. Dari hasil pembacaan sekilas tersebut, ada yang mengganjal di pikiran kami. Perhatikan pada baris 66, di situ ada perintah if (! RTC.read(tm)) {, artinya, jika RTC tidak bisa dibaca maka munculkan data waktu dan tanggal. Aneh. Kalau ndak bisa dibaca, tanggal apa yang mau dimunculkan? Untuk sekilas, okelah. Sebab kan belum baca semua dan baca file header dan file yang diimport.

Sekilas Tentang Modul RTC DS1302


Gambar Menguji Rangkaian & Source Code RTC DS1302 + Arduino Uno
Gambar Modul RTC DS1302
RTC DS1302 memiliki 5 pin yang bisa dihubungkan ke Arduino, pin-pin tersebut adalah VCC, GND, CE (RST), IO (DAT), dan SCLK (CLK). Dalam komunikasinya, kita membutuhkan 3 pin yang dikondisikan untuk membaca atau menulis data ke dalam RTC tersebut. Sebenarnya banyak karakteristik yang perlu diketahui tentang modul ini baik dari segi memory, konfigurasi pin, dan format data yang digunakan dalam modul tersebut. Akan tetapi, pada tulisan ini kami tidak akan membahasnya terlalu detail. Semoga pembahasan mendetail tentang modul ini bisa kita ulas pada beberapa artikel lainnya di website ini.

Rangkaian dan Source Code RTC DS1302 + Arduino Uno
Gambar rangkain RTC DS1302 dan Arduino Uno
Konfigurasi yang kami gunakan dalam percobaan ini terlihat seperti pada gambar di atas dan posisi pin-pinnya adalah sebagai berikut:
VCC pada pin 8
GND pada pin 9
RST pada pin 11
DAT pada pin 12
CLK pada pin 13

Sehingga script yang kami ubah adalah :
// Set pins:  CE, IO,CLK
DS1302RTC RTC(11, 12, 13);

// Optional connection for RTC module
#define DS1302_GND_PIN 9
#define DS1302_VCC_PIN 8

Hasil yang kami dapatkan setelah mengcompile dan mengupload pada arduino, muncul pesan error. Pesan error tadi ada kaitannya dengan bagian script yang kami curigai tadi. Berikut adalah pesan error yang muncul pada terminal. Pesan yang bunyinya, "DS1302 read error!  Please check the circuitry." Arti dari pesan tersebut adalah : COBA LAGI, DAN LEBIH TELITI! :D

Menguji Rangkaian & Source Code RTC DS1302 + Arduino Uno 1

Berdasarkan logika yang dipakai, tentu aneh, ketika kita ingin menampilkan sesuatu yang tidak bisa dibaca. Oleh sebab itu, kami iseng mengubah logika source code yang tadi menjadi if ( RTC.read(tm)) {, artinya, jika RTC bisa dibaca, tampilkan waktu dan tanggal. Setelah kami upload ke sistem, ternyata datanya keluar. Yang muncul adalah jam dan tanggal. Eng, tapi kenapa tanggal yang muncul tahunnya 2165? :D Padahal, menurut informasi yang ada pada link ini [3], data tahun pada modul ini terdiri dari 2 digit, yaitu dari 0 hingga 99. Yang artinya 2000 hingga 2099. Apakah data yang keluar tersebut benar? Entahlah. Yang pasti, jam yang muncul bertambah layaknya jam beneran :D.

Rangkaian & Source Code RTC DS1302 dan Arduino Uno

Pada gambar di atas, UNIX time bernilai 0. Apa itu UNIX time? Entahlah. Yang pasti data ini diambil dengan kode RTC.get(). Setelah ditelusuri, script tersebuat ada pada file library RTC DS1302, yaitu pada file DS1302RTC.cpp. Script untuk fungsi get() terdapat pada baris 51 yang isi lengkapnya adalah sebagai berikut :

// --------------------------------------------------------
// Read the current time from the RTC and return it as a 
// time_t value. Returns a zero value if an bus error occurred
// (e.g. RTC not present).
time_t DS1302RTC::get()
{
    tmElements_t tm;
    
    if ( read(tm) ) return 0;
    return( makeTime(tm) );
}

Nah, pada fungsi tersebut juga aneh. Perhatikan logika pada kode if ( read(tm) ) return 0;, artinya, sebelum kita melihat apa isi dari fungsi read(), maka baris tersebut setidaknya akan bermakna : jika tm bisa terbaca, maka nilai dari fungsi get adalah 0. Logikanya, jika variabel tm bisa terbaca, kenapa tidak ambil saja nilai tm? Berdasarkan rasa penasaran tersebut, kami mengganti mengubah logika script tersebut menjadi if (! read(tm) ) return 0; yang artinya, jika tm TIDAK bisa dibaca, maka beri nilai 0. Tapi jika kondisi tersebut tidak sesuai, maka tm bisa dibaca dan tm diproses dengan fungsi makeTime(tm). Dan ternyata hasilnya mirip dengan timestamp (eh, istilahnya timestamp atau bukan ya? :D). Yang pasti, setelah fungsi tersebut dirubah menjadi seperti ini :

// --------------------------------------------------------
// Read the current time from the RTC and return it as a 
// time_t value. Returns a zero value if an bus error occurred
// (e.g. RTC not present).
time_t DS1302RTC::get()
{
    tmElements_t tm;
    
    //if ( read(tm) ) return 0;
    if (! read(tm) ) return 0;
    return( makeTime(tm) );
}

Maka data yang keluar pada terminal setelah source code dicompile ulang adalah seperti berikut:

Contoh Rangkaian & Source Code RTC DS1302 + Arduino Uno

Dengan demikian, sepertinya data dari modul RTC sudah bisa terbaca (terlepas benar atau tidak data tersebut). Selanjutkan akan kami konfirmasi kebenaran data default dari modul RTC tersebut dan kami akan mencoba untuk mengganti data tanggal dan waktu dalam RT DS1302. Semoga tulisan ini bermanfaat dan selamat bermain-main dengan modul RTC DS1302. :)

Update 28/06/15

Ternyata kesalahan yang saya paparkan di atas hanya berlaku untuk modul DS1302 yang masih baru dan belum pernah dirubah data tanggalnya. Ketika saya mencoba sample yang kedua, yaitu sampel untuk ngeset data dalam modul DS1302 (file SetSerial.ino dalam folder SetSerial), maka ketika kembali mengupload file yang saya rubah di atas, maka akan terjadi error yang sama dengan ketika belum dimodifikasi.

So, source code library di atas tidak perlu dimodifikasi jika akan digunakan untuk RTC yang sudah diset dan disesuaikan tanggalnya. Tapi akan error jika tanggal belum pernah diset atau disesuaikan.


Referensi :
[1] http://playground.arduino.cc/uploads/Main/DS1302RTC.zip
[2] http://www.pjrc.com/teensy/arduino_libraries/Time.zip
[3] http://playground.arduino.cc/Main/DS1302

Written by ElangSakti
Menguji Rangkaian & Source Code RTC DS1302 + Arduino Uno
Bahasan: Yak, kali ini kita akan bercerita tentang modul Real Time Clock - RTC DS1302 dan Arduino Uno . Pada tulisan ini kita akan mencoba beberap...
Published at , Updated at
Reviewed by dr. on
Rating: 4.7

1 komentar :

Posting Komentar

# Hack Your Skills! to be Professional Mechatronics

Cara Mendeteksi Pengunjung yang Menggunakan Smartphone (Mobile) pada Blogger

1 komentar
Tulisan ini akan berfokus pada cara mendeteksi pengunjung blog atau website yang menggunakan handphone / smartphone (mobile), khususnya untuk website atau blog yang dibangun dengan blogger. Selain menggunakan javascript, kita bisa menggunakan data API yang disediakan oleh blogger. Tapi sebelum itu, apa sih gunanya membeda-bedakan pengunjung website berdasarkan perangkat yang digunakan? Lalu kalau sudah bisa membedakan antara pengunjung yang menggunakan mobile dengan pengunjung yang menggunakan desktop, terus mau diapakan?

Cara Mendeteksi Pengunjung yang Menggunakan Smartphone (Mobile) pada Blogger

Baik, pendeteksian perangkat yang digunakan pengunjung merupakan informasi yang penting, baik untuk mengoptimasi website, atau untuk menganalisa seperti apa pengungjung yang banyak mengakses website atau blog kita. Berikut sebagian manfaat yang akan bisa kita dapatkan ketika kita bisa mendeteksi browser atau perangkat yang digunakan oleh pengunjung website kita:

  • Kita bisa membedakan template antara pengguna mobile dan pengguna desktop.
  • Kita bisa membuat template yang lebih ringan untuk pengguna mobile, sehingga konsumsi bandwidth kita dan bandwidth pengunjung bisa diminimalisir
  • Dengan template yang lebih "ringan", maka waktu loading website akan lebih cepat dan pengunjung tidak terlalu lama menunggu
  • Kita bisa menentukan bagian dari website yang perlu ditampilkan atau tidak, kita bisa mengurangi gambar, mengurangi menu, dll
  • Kita bisa memetakan kelas dari pengunjung website kita, apakah pengguna awam atau kelas menengah ke atas (tapi ini lebih kompleks)

Baik, itu sedikit manfaat ketika kita bisa membedakan antara user yang menggunakan browser pada smartphone atau mobile, atau user pengunjung yang menggunakan browser desktop.

Untuk website yang dibangun dengan blogger, maka ada satu data yang bisa dijadikan acuan, yaitu data:blog.isMobile. Data ini akan bernilai true apabila pengguna menggunakan browser pada perangkat mobile, dan akan bernilai false apabila pengguna menggukan browser pada komputer dekstop. Untuk mendeteksi apakah menggunakan mobile atau tidak, maka kita bisa menggunakan script untuk pengkondisian seperti berikut:

<b:if cond='data:blog.isMobile == "true"'>
  <!-- if mobile -->
<b:else/>
  <!-- if not mobile -->
</b:if>

Pada kasus yang saya alami, script di atas tidak bisa digunakan untuk mendeteksi pengguna mobile atau bukan, fyuh! Ketika saya menggunakan smartphone untuk mengetesnya, nilai isMobile selalu false, artinya smartphone saya terdeteksi bukan sebagai mobile. Saya pun bingung dan saya coba menggunakan beberapa aplikasi mobile test yang ada di online, dan hasinya keren, sama saja. Semua aplikasi mobile test tetap terdeteksi sebagai bukan mobile. :D

Alternatif solusi yang terpikirkan untuk masalah ini mungkin hanya satu, deteksi lebar layar dengan javascipt!

Tapi saya berpikir, masak google sampai sebodoh ini sampai sistem yang dia buat tidak bisa mendeteksi perangkat mobile? Padahal url ketika saya buka dengan smartphone masih tersemat ?m=1 di akhir linknya. Artinya, google bisa mendeteksi bahwa yang saya gunakan adalah perangkat mobile, bukan perangkat desktop.

Sekedar tambahan, jika kita mengunjungi suatu website yang dibuat dengan blogger dengan smartphone (mobile), maka setiap url akan ditambahkan satu parameter, yaitu parameter 'm' yang artinya mobile. Parameter m=1 jika perangkat yang digunakan adalah mobile, sedangkan m=0 (atau tidak ada paramter) jika perangkat yang digunakan bukan mobile. Ini terisi secara otomatis, tapi kita juga bisa mengisinya dengan manual. Secara logika, harusnya google bisa mendeteksi bahwa ini mobile, bukan selain mobile.

Saya kembali cari-cari di google API, dan akhirnya belum ketemu juga. Tapi setelah beberapa puluh menit, solusi ditemukan di stackoverflow. Ternyata ada satu data yang bisa digunakan untuk mendeteksi mobile, dan data ini merefer ke paramter m=1 atau m=0. Variabel untuk data tersebut adalah data:blog.isMobileRequest, yap, bukan data:blog.isMobile. Jika m=1, maka data:blog.isMobileRequest = true, jika parameter m=0 atau tidak terdefenisi, maka data:blog.isMobileRequest = false.

Dan setelah dicoba, cring, pengguna mobile pun terdeteksi. Yess! Sehingga kode yang saya gunakan untuk mendeteksi pengguna mobile yaitu:

<b:if cond='data:blog.isMobileRequest == "true"'>
  <!-- if mobile -->
<b:else/>
  <!-- if not mobile -->
</b:if>

Semoga cerita ini membuat Anda semua bahagia, dan selamat berakhir pekan! :D

Written by ElangSakti
Cara Mendeteksi Pengunjung yang Menggunakan Smartphone (Mobile) pada Blogger
Bahasan: Tulisan ini akan berfokus pada cara mendeteksi pengunjung blog atau website yang menggunakan handphone / smartphone (mobile), khususnya u...
Published at Sabtu, 13 Juni 2015, Updated at Sabtu, 13 Juni 2015
Reviewed by dr. on
Rating: 4.7

1 komentar :

Posting Komentar

# Hack Your Skills! to be Professional Mechatronics

Arduino - Apa itu PWM?

34 komentar
Memahami konsep PWM itu penting dalam mikrokontoller, sebab PWM adalah bentuk sinyal yang harus kita pahami dalam dunia digital-analog. Beberapa pertanyaan tentang PWM, apa itu PWM? Apa pengertian PWM? Apa fungsi PWM dan bagaimana cara kerjanya? Dalam hal ini kita akan membahas tentang PWM yang lebih khusus pada Arduino.

PWM adalah singkatan dari Pulse Width Modulation. Pada Arduino, sinyal PWM adalah sinyal yang beroperasi pada frekuensi 500Hz (ini akan kita bahas pada paragraf selanjutnya). Pada board arduino Uno, pin yang bisa dimanfaatkan untuk PWM adalah pin yang diberi tanda tilde (~), yaitu pin 3, 5, 6, 9, 10, dan pin 11. Mungkin ada yang berpikir, bukankah pin-pin tersebut adalah pin analog? Ya! Pin-pin tersebut merupakan pin yang bisa difungsikan untuk input analog atau output analog. Oleh sebab itu, jika akan menggunakan PWM pada pin ini, bisa dilakukan dengan perintah analogWrite();

PWM pada arduino bekerja pada frekuensi 500Hz, artinya 500 siklus/ketukan dalam satu detik. Untuk setiap siklus, kita bisa memberi nilai dari 0 hingga 255.  Ketika kita memberikan angka 0, berarti pada pin tersebut tidak akan pernah bernilai 5 volt (pin selalu bernilai 0 volt). Sedangkan jika kita memberikan nilai 255, maka sepanjang siklus akan bernilai 5 volt (tidak pernah 0 volt). Jika kita memberikan nilai 127 (kita anggap setengah dari 0 hingga 255, atau 50% dari 255), maka setengah siklus akan bernilai 5 volt, dan setengah siklus lagi akan bernilai 0 volt. Sedangkan jika jika memberikan 25% dari 255 (1/4 * 255 atau 64), maka 1/4 siklus akan bernilai 5 volt, dan 3/4 sisanya akan bernilai 0 volt, dan ini akan terjadi 500 kali dalam 1 detik. Untuk visualisasi siklus PWM, bisa Anda lihat gambar berikut:

Siklus sinyal PWM Arduino - pengertian PWM adalah
Siklus sinyal PWM pada Arduino (klik untuk memperbesar)

Begitulah cara kerja PWM (Pulse Width Modulation), jika masih ada yang kurang jelas, jangan sungkan-sungkan untuk bertanya :). Berdasarkan konsep PWM tersebut, kira-kira apa yang bisa kita lakukan? Banyak hal. Salah satunya, kita bisa membuat sistem yang bisa dikontrol untuk menaikkan atau menurunkan secara bertahap. Misal, menaikkan atau menurunkan volume secara digital, menaikkan atau menurunkan tingkat kecerahan lampu dengan tombol, mempercepat atau memperlambat sesuatu, dll.

Baik, selanjutnya akan kita bahas tentang salah satu implementasi dari PWM yang digunakan untuk mengatur intensitas cahaya dari suatu led dengan dua tombol (tombol untuk menurunkan kecerahan / nyala led dan tombol untuk menaikkan kecerahan led).

Written by ElangSakti
Arduino - Apa itu PWM?
Bahasan: Memahami konsep PWM itu penting dalam mikrokontoller, sebab PWM adalah bentuk sinyal yang harus kita pahami dalam dunia digital-analog. Be...
Published at Selasa, 09 Juni 2015, Updated at Selasa, 09 Juni 2015
Reviewed by dr. on
Rating: 4.7

34 komentar :

Posting Komentar