Mahir Arduino Sketch dan Elektro secara praktek

Proyek ini memiliki rangkaian sederhana, hanya untuk memberikan ide mengontrol tingkat kecerahan LED melalui arduino. Pada proyek sebelumnya, kita hanya mematikan dan menyalakan LED. Pada proyek ini kita akan menyalakan dari tingkat kecerahan rendah hingga maksimum, lalu mematikan dari dari tingkat kecerahan tinggi hingga padam.

Komponen yang digunakan
  • LED 5mm (silakan guanakan warna LED apa saja)
  • Resistor 
Skema



Sketch

// Project 11 - LED Dimmer
int ledPin = 11;
float sinVal;
int ledVal;


void setup() {
  pinMode(ledPin, OUTPUT);
}
 

void loop() {
  for (int x=0; x<180; x++) {
    // convert degrees to radians then obtain sin value
    sinVal = (sin(x*(3.1412/180)));
    ledVal = int(sinVal*255);
    analogWrite(ledPin, ledVal);
    delay(25);
  }
}


Verifikasi dan upload sketch diatas, LED akan menyala dari redup hingga terang, lalu dari terang, redup hingga padam. Mari kita lihat logika programnya.

Untuk melakukan hal tersebut, kita menggunakan gelombang sinus. Sinus memilki gelombang dari 0 merambat naik ke 1 dan kembali merambat turun ke 0 (seperti berbentuk setengah lingkaran).

Fungsi yang digunakan adalah sin(), fungsi trigonometri matematika untuk perhitungan sudut. Pada sketch, kiat  hanya menggunakan interval 0-179 (kita tidak memerlukan nilai negatif).

Fungsi sin memerlukan nilai dalam radian, bukan dalam sudut. Jadi persamaan yang digunakan adalah sin(x*(3.1412/180)), setelah mendapatkan nilai radian, untuk kebutuhan kita, nilai dari persamaan tadi dikalikan 255. Setelah itu kita akan menulis nilai tersebut ke pin dimana LED tersambung.

Nilai yang diperoleh dari perhitungan diatas akan berkisar dari 0 s/d 1. 0 untuk LED kondisi padam, 1 untuk LED menyala dengan tingkat kecerahan maksimum.

Artikel Sebelumnya Proyek Led Chase Advanced
Artikel Selanjutnya Proyek RGB Mood Lamp
Pada proyek kali ini, kita akan menggunakan fitur PWM dari Atmega untuk mengatur tingkat kecerahan pada LED.  Dengan menggunakan fitur ini, kita dapat menggunakan 3 LED (merah, hijau dan biru) untuk menghasilkan warna cahaya yang kita inginkan.

Gunakan Silinder Cover  untuk menutup 3 Led yang digunakan, agar gabungan warna cahaya dari led bisa disebarkan melalui cover.

Komponen yang dibutuhkan
  • Led Merah
  • Led Hijau
  • Led Biru
  • 3 Resistor

Skema

Sketch
// Project 12 - Mood Lamp
float RGB1[3];
float RGB2[3];
float INC[3];
int red, green, blue;
int RedPin = 11;
int GreenPin = 10;
int BluePin = 9;


void setup(){
  Serial.begin(9600);
  randomSeed(analogRead(0));
  RGB1[0] = 0;
  RGB1[1] = 0;
  RGB1[2] = 0;


  RGB2[0] = random(256);
  RGB2[1] = random(256);
  RGB2[2] = random(256);

}
 

void loop(){
  randomSeed(analogRead(0));
  for (int x=0; x<3; x++) {
    INC[x] = (RGB1[x] - RGB2[x]) / 256;

  }
  for (int x=0; x<256; x++) {
    red = int(RGB1[0]);
    green = int(RGB1[1]);
    blue = int(RGB1[2]);
    analogWrite (RedPin, red);
    analogWrite (GreenPin, green);
    analogWrite (BluePin, blue);
    delay(100);
    RGB1[0] -= INC[0];
    RGB1[1] -= INC[1];
    RGB1[2] -= INC[2];
  }
  for (int x=0; x<3; x++) {
    RGB2[x] = random(556)-300;
    RGB2[x] = constrain(RGB2[x], 0, 255);
    delay(1000);
  }

}

Setelah diupload, LED akan berubah warna secara perlahan menjadi mood lamp.

Penjelasan Code
Yang perlu diperhatikan adalah aturan warna dari cahaya, dengan kombinasi 3 elemen dasar cahaya yaitu Red, Green dan Blue, kita bisa menghasilkan warna yang kita ingingkan dengan mengatur intesitas masing-masing warna.

Gambar dibawah menunjukkan pencampuran warna dari RGB.




Dengan mengatur tingkat brightness menggunakan PWM, kita dapat menghasilkan variasi warna. Gunakan plastic diffuser untuk menutupi 3 LED pada skema kita, agar cahaya menyatu. Contoh masukkan 3 LED kedalam bola pingpong.

Total rentang warna yang dapat diperoleh dengan menggunakan PWM adalah 16.777.216 warna (256 x  256 x 256).

Pada code, kita deklarasikan floating point arrays dan integer untuk menyimpan nilai RGB.

float RGB1[3];
float RGB2[3];
float INC[3];
int red, green, blue;



randomSeed(analogRead(0));
Perintah randomSeed untuk menghasilkan angka random, sebetulnya chip komputer tidak bisa menghasilkan angka random. Prosesor akan menggunakan fungsi matematika untuk menghasilkan angka pseudo-random. Dengan “seed,” kita memberitahu processor kapan untuk mengembalikan nilai random. Pada code kita, value yang kita berikan pada perintah randomSeed adalah value dari hasil pembacaan pada analog pin ke -0. Dimana kita tidak melakukan koneksi apa-apa di pin analog 0, angka random akan dihasilkan dari analog noise. Setelah kita mengatur "seed" untuk angka random, kita dapat menghasilkan angka random melalui fungsi random(). Dari sini kita memiliki 2 angka random RGB yang disimpan dalam variable array.

RGB1 adalah variable untuk menyimpan warna awal. Dalam hal ini 0, alias tidak ada cahaya sama sekali.

  RGB1[0] = 0;
  RGB1[1] = 0;
  RGB1[2] = 0;


RGB2 adalah variable untuk menyimpan warna yang dituju. Program akan membuat peralihan warna dari RGB1 ke RGB2.

  RGB2[0] = random(256);
  RGB2[1] = random(256);
  RGB2[2] = random(256);


Dalam hal ini kita membuat warna random dengan fungsi random(256) dimana value yang diperoleh diantara 0 -255. Fungsi random juga bisa menggunakan 2 parameter, contoh random (10-50) angka menghasilan value antara 10-49.

Logika program selanjutnya adalah, kita akan menentukan nilai increment warna. Lalu code akan menuliskan ke pinout arduino. Saat sesudah melewati 256 loop, nilai RGB1 akan sama atau mendekati nilai RGB2, pada blok for ke-3 kita akan mengatur nilai RGB2 yang baru. Perintah constrain untuk memastikan nilai positif (PWM tidak bisa menerima nilai negatif).

Fungsi constrain memerlukan 3 parameter, yaitu constrain(x, a, b)
x adalah angka yang akan di constrain
a adalah range terendah
b adalah range tertinggi.

Dalam hal ini kita akan membatasi fungsi contrain dari 0 hingga 255.


  for (int x=0; x<3; x++) {
    INC[x] = (RGB1[x] - RGB2[x]) / 256;

  }
  for (int x=0; x<256; x++) {
    red = int(RGB1[0]);
    green = int(RGB1[1]);
    blue = int(RGB1[2]);
    analogWrite (RedPin, red);
    analogWrite (GreenPin, green);
    analogWrite (BluePin, blue);
    delay(100);
    RGB1[0] -= INC[0];
    RGB1[1] -= INC[1];
    RGB1[2] -= INC[2];
  }
  for (int x=0; x<3; x++) {
    RGB2[x] = random(556)-300;
    RGB2[x] = constrain(RGB2[x], 0, 255);
    delay(1000);
  }



Chalange
Untuk meningkatkan kreatifitas dalam programming, coba buat perubahan warna beradarkan urutan tertentu, misalnya urutan warna pelangi.

Artikel Sebelumnya Proyek Led Dimmer
Artikel Selanjutnya Piezo Sound Alarm
Nah, bila sudah mulai fasih bermain led, kita coba ke projek selanjutnya, kita coba bermain sound. Kita menggunakan piezo sounder sebagai latihan awal. Aplikasi dari suara bisa banyak, alarm, warning beeps atau alert notification. Code yang digunakan adalah tone(). Pada project 11 ini kita akan mencoba membuat alarm sederhana, seperti alarm mobil.

Komponen yang digunakan

  • Piezo Sounder 
  • 2 way screw terminal 


Saat memilih piezo sounder, pastikan jangan membeli tipe active buzzer, yang digunakan pada proyek ini adalah piezo sounder pasif AC.

Skema



Sketch

// Project 11 - Piezo Sounder Alarm
float sinVal;
int toneVal;

void setup() {
  pinMode(8, OUTPUT);
}

void loop() {
  for (int x=0; x<180; x++) {
    // convert degrees to radians then obtain sin value
    sinVal = (sin(x*(3.1412/180)));
    // generate a frequency from the sin value
    toneVal = 2000+(int(sinVal*1000));
    tone(8, toneVal);
    delay(2);
  }
}

Program diatas mirip dengan projek led dimmer, hanya saja output pada projek ini menggunakan piezo sounder.

Pertama kita siapkan 2 variables

  float sinVal;
  int toneVal;

variable sinVal float digunakan untuk menyimpang nilai sin, yang menghasilkan suara naik turun sesuai nilai sin. Variabel toneVal untuk menyimpan nilai sinVal yang telah kita konversi ke frekuensi yang dibutuhkan.

Pada fungsi setup, kita assign pin 8 sebagai output.

  void setup() {
    pinMode(8, OUTPUT);
  }

Pada fungsi main loop, kita akan melakukan loop dari 0 - 179.

  for (int x=0; x<180; x++) 

lalu nilai x akan kita convert ke radian dan ditampung dalam variable sinVal. Setelah nilai sinVal kita peroleh, kita convert ke frequency dan ditampung dalam variable toneVal.

    sinVal = (sin(x*(3.1412/180)));
    // generate a frequency from the sin value
    toneVal = 2000+(int(sinVal*1000));


Berikutnya kita menggunakan perintah tone() untuk menghasilkan suara pada piezo sounder.

    tone(8, toneVal);

Perintah tone()  membutuhkan 2  atau 3 parameters.
tone(pin, frequency)
tone(pin, frequency, duration)

Parameter pin adalah digital pin yang digunakan sebagai output ke piezo dan frequency adalah frequency dari tone dalam hertz. Parameter duration adalah optional, dalam satuan milisekon. Jika tidak diisi, maka tone akan terus dibunyikan hingga kita memainkan nada lainnya, atau hingga kita memberikan perintah berhenti dengan perintah noTone(pin).

Pada akhir sketch, kita memberikan perintah delay selama 2 milliseconds untuk memberikan jeda antara bunyi.

    delay(2);


Mungkin timbul pertanyaan, kenapa gak pake perintah seperti ini saja  tone(8, toneVal, 2); Karena loop yang kita gunakan sangat pendek, akan menyebabkan perubahan frequency kurang dari millisecond, jadi bila menggunakan perintah diatas, maka perubahan suara tidak akan terdengar. Dengan perintah delay 2 millisecond, kita memastikan piezo akan berbunyi di frekuensi yang kita assign selama 2 milliseconds.

Projek ini dapat dikembangkan sesuai kebutuhan dan kreatifitas Anda, bisa digunakan sebagai alert bila suhu mencapai derajat tertentu, atau bila ada orang mendekat atau apa saja.. silakan berimajinasi.. :)

Nilai 2000 dan 1000 pada perhitungan toneVal  dan waktu delay dapat Anda mainkan juga, silakan bereksperimen untuk mendapatkan suara yang Anda inginkan.

Related Article
Apa itu piezo sounder / disc
Referensi Perintah tone()

Proyek Sebelumnya RGB Mood Lamp
Proyek Selanjut Piezo Sounder Melody Player

Daripada bikin bunyi yang mengganggu, bagaimana bila kita bikin piezo memainkan melodi. Pada proyek ini akan kita bikin arduino memainkan lagu "Oh My Darling Clementine". Biarkan rangkaian tetap seperti proyek sebelumnya.

Code

// Project 14 - Piezo Sounder Melody Player

#define NOTE_C3 131
#define NOTE_CS3 139
#define NOTE_D3 147
#define NOTE_DS3 156
#define NOTE_E3 165
#define NOTE_F3 175
#define NOTE_FS3 185
#define NOTE_G3 196
#define NOTE_GS3 208
#define NOTE_A3 220
#define NOTE_AS3 233
#define NOTE_B3 247
#define NOTE_C4 262
#define NOTE_CS4 277
#define NOTE_D4 294
#define NOTE_DS4 311
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_FS4 370
#define NOTE_G4 392
#define NOTE_GS4 415
#define NOTE_A4 440
#define NOTE_AS4 466
#define NOTE_B4 494

#define WHOLE 1
#define HALF 0.5
#define QUARTER 0.25
#define EIGHTH 0.125
#define SIXTEENTH 0.0625

int tune[] = {
 NOTE_F3, NOTE_F3, NOTE_F3, NOTE_C3,
 NOTE_A3, NOTE_A3, NOTE_A3, NOTE_F3,
 NOTE_F3, NOTE_A3, NOTE_C4, NOTE_C4, NOTE_AS3, NOTE_A3, NOTE_G3,
 NOTE_G3, NOTE_A3, NOTE_AS3, NOTE_AS3,
 NOTE_A3, NOTE_G3, NOTE_A3, NOTE_F3,
 NOTE_F3, NOTE_A3, NOTE_G3, NOTE_C3, NOTE_E3, NOTE_G3, NOTE_F3
};

float duration[] = {
 EIGHTH+SIXTEENTH, SIXTEENTH, QUARTER, QUARTER,
 EIGHTH+SIXTEENTH, SIXTEENTH, QUARTER, QUARTER,
 EIGHTH+SIXTEENTH, SIXTEENTH, QUARTER+EIGHTH, EIGHTH, EIGHTH, EIGHTH, HALF,
 EIGHTH, SIXTEENTH, QUARTER, QUARTER,
 EIGHTH+SIXTEENTH, SIXTEENTH, QUARTER, QUARTER,
 EIGHTH+SIXTEENTH, SIXTEENTH, QUARTER+EIGHTH, EIGHTH, EIGHTH, SIXTEENTH, HALF
};

int length;

void setup() {
  pinMode(8, OUTPUT);
  length = sizeof(tune) / sizeof(tune[0]);
}

void loop() {
  for (int x=0; x<length; x++) {
    tone(8, tune[x]);
    delay(1500 * duration[x]);
    noTone(8);
  }
  delay(5000);
}

Pembahasan Kode
Kode kali ini diawali dengan perintah define, perintah ini berguna untuk mendifinisikan sebuah token berserta nilainya.

Pada proyek ini kita melakukan perintah define untuk set not dari C3 - B4 beserta nilai frekuensi tiap-tiap not. Sebetulnya lagu pada proyek ini tidak menggunakan semua lagu, namun kita sediakan, barangkali pembaca hendak bikin lagu pilihan sendiri.

Direktif berikutnya adalah panjang not. Yang sudah lupa pelajaran seni musik waktu SMP atau SMA, monggo dibuka-buka lagi bukunya.. ;)  Panjang note bisa berupa penuh, setengah, seperempat, seperdelapan atau seperenambelas. Angka tersebut akan kita gunakan untuk perhitungan panjang setiap note. Sebagai contoh note seperempat adalah 0.25, pada contoh kasus kita maka 1500 x 0.25 untuk mendapatkan panjang sebuah note seperempat.


Berikutnya kita akan mendefinisikan tune yang berisi lagu ‘Oh My Darling Clementine’.

int tune[] = {
 NOTE_F3, NOTE_F3, NOTE_F3, NOTE_C3,
 NOTE_A3, NOTE_A3, NOTE_A3, NOTE_F3,
 NOTE_F3, NOTE_A3, NOTE_C4, NOTE_C4, NOTE_AS3, NOTE_A3, NOTE_G3,
 NOTE_G3, NOTE_A3, NOTE_AS3, NOTE_AS3,
 NOTE_A3, NOTE_G3, NOTE_A3, NOTE_F3,
 NOTE_F3, NOTE_A3, NOTE_G3, NOTE_C3, NOTE_E3, NOTE_G3, NOTE_F3
};


Setelah itu, kita buat array baru dengan tipe float, untuk mengatur durasi setiap note pada array int.

float duration[] = {
 EIGHTH+SIXTEENTH, SIXTEENTH, QUARTER, QUARTER,
 EIGHTH+SIXTEENTH, SIXTEENTH, QUARTER, QUARTER,
 EIGHTH+SIXTEENTH, SIXTEENTH, QUARTER+EIGHTH, EIGHTH, EIGHTH, EIGHTH, HALF,
 EIGHTH, SIXTEENTH, QUARTER, QUARTER,
 EIGHTH+SIXTEENTH, SIXTEENTH, QUARTER, QUARTER,
 EIGHTH+SIXTEENTH, SIXTEENTH, QUARTER+EIGHTH, EIGHTH, EIGHTH, SIXTEENTH, HALF
};


Nah, tentu sekarang jelaskan, kenapa kita menggunakan perintah define, karena dengan perintah define, kode program kita akan lebih terbaca, dan bila ada salah, cukup merubah value di area define.

Berikutnya kita buat satu variable integer length.

int length;

variable length ini digunakan untuk menghitung dan menyimpan panjang array.

Pada routing setup, pertama kali kita atur digital pin 8 sebagai output.

  pinMode(8, OUTPUT);

kemudian initialisasi variable lenght

  length = sizeof(tune) / sizeof(tune[0]);


Fungsi sizeof()  mengembalikan nilai bytes dari parameter yang kita kirimkan. Pada contoh kasus kita maka hasilnya adalah 26 / 2, yaitu 13.

Pada main loop, kita gunakan perintah for untuk looping seluruh note dari lagu.
  for (int x=0; x<length; x++) {

Kemudian memainkan note tersebut pada pin 8 dengan perintah berikut

    tone(8, tune[x]);

Kemudian kita gunakan delay, panjang delay adalah  1500 milliseconds dikalikan dengan panjang note.

delay(1500 * duration[x]);

Sebelum dilanjut ke note berikutnya, kita matikan dahulu tone yang telah kita assign di pin 8

noTone(8);

Perintah ini untuk memastikan tidak ada 2 nada yang  bermain bersamaan. Tanpa perintah noTone, note akan bercampur, anda bisa bereksperimen untuk melihat hasilnya dengan menghapus perintah noTone.

Akhir program, setelah lagu selesai dimainkan oleh perintah for, kita delay selama 5 detik sebelum memulai lagu dari awal lagi.

delay(5000);

Jika kamu ingin mempercepat atau memperlambat lagu, dapat mengubah nilai 1500 pada delay fuction.


Related Artikel
Projek Sebelumnya Piezo Sounder Alarm
Projek Berikutnya Piezo Knock Sensor
Piezo disc bekerja ketika terjadi medan listrik pada materi ceramic pada disc yang menyebabkan ceramic berubah bentuk dan menimbulkan suara. Piezo juga bekerja sebaliknya, saat kita mengetuknya atau menekan, gaya pada material dapat menimbulkan arus listrik dan dengan menggunakan arduino, kita dapat membaca arus yang terjadi. Nah ini dapat kita gunakan sebagai sensor ketuk.

Komponen

  • Piezo Sounder (or piezo disc)
  • 2-Way Screw Terminal
  • 5mm LED (any color)
  • 1MW Resistor
  • 150W Current-Limiting Resistor


Skema




Sketch
// Project 15 - Piezo Knock Sensor
int ledPin = 9; // LED on Digital Pin 9
int piezoPin = 5; // Piezo on Analog Pin 5
int threshold = 120; // The sensor value to reach before activation
int sensorValue = 0; // A variable to store the value read from the sensor
float ledValue = 0; // The brightness of the LED

void setup() {
  pinMode(ledPin, OUTPUT); // Set the ledPin to an OUTPUT

  // Flash the LED twice to show the program has started
  digitalWrite(ledPin, HIGH); delay(150); digitalWrite(ledPin, LOW); delay(150);
  digitalWrite(ledPin, HIGH); delay(150); digitalWrite(ledPin, LOW); delay(150);
}

void loop() {
  sensorValue = analogRead(piezoPin); // Read the value from the sensor
  if (sensorValue >= threshold) { // If knock detected set brightness to max
    ledValue = 255;
  }
  analogWrite(ledPin, int(ledValue) ); // Write brightness value to LED
  ledValue = ledValue - 0.05; // Dim the LED slowly
  if (ledValue <= 0) { ledValue = 0;} // Make sure value does not go below zero
}

Setelah kode diupload, LED akan berkedip cepat sebanyak dua kali, menunjukan program telah jalan. Kita dapat coba sensor ketuk kita. Bila ingin test ketuk, letakan pada permukaan datar, lalu coba ketuk atau tekan dengan jari kamu. Setiap Arduino mendeteksi ketukan atau tekanan, LED akan menyala dan meredup hingga padam secara perlahan.

Nilai treshold sensitive untuk piezo disc bisa berbeda, kamu mesti coba-coba. Makin rendah makin sensitif, makan tinggi makin tidak sensitif.

Pembahasan Kode
Pada projek ini, kita belum ada perintah baru, namun mari kita bahas ;)

Pertama kita inisialisasi variable.

int ledPin = 9; // LED on Digital Pin 9
int piezoPin = 5; // Piezo on Analog Pin 5
int threshold = 120; // The sensor value to reach before activation
int sensorValue = 0; // A variable to store the value read from the sensor
float ledValue = 0; // The brightness of the LED


Pada fungsi setuup, set output dengan variable ledPin  dan LED akan berkedip 2 kali sebagai indikator program telah berjalan.

void setup() {
  pinMode(ledPin, OUTPUT); // Set the ledPin to an OUTPUT

  // Flash the LED twice to show the program has started
  digitalWrite(ledPin, HIGH); delay(150); digitalWrite(ledPin, LOW); delay(150);
  digitalWrite(ledPin, HIGH); delay(150); digitalWrite(ledPin, LOW); delay(150);
}


Pada main loop, pertama kita membaca nilai analog dari pin 5 yang terhubung dengan piezo

sensorValue = analogRead(piezoPin); // Read the value from the sensor

Lalu kita akan bandingkan nilai tersebut dengan  varaible treshold untuk menentukan apakah terjadi ketukan atau tekanan pada piezo. Jika terjadi, set ledValue ke 255, yaitu voltage maksimum pin PWM di no 9.

  if (sensorValue >= threshold) { // If knock detected set brightness to max
    ledValue = 255;
  }

Kemudian tulis nilai tersebut ke pin PWM 9.  perintah int() adalah cara kita mengkonversi tipe data, karena variable ledValue bertipe float.

  analogWrite(ledPin, int(ledValue) ); // Write brightness value to LED


Kemudian kita kurangi nilai dari variable ledValue sebesear 0.05. LED akan meredup dengan perlahan, karena kita menggunakan angka 0.05 untuk menurunkan tingkat kecerahan LED. Bila ingin lebih cepat atau lebih lambat, bisa diubah nilai 0.05 tersebut.

  ledValue = ledValue - 0.05; // Dim the LED slowly


Pada akhir program, kita periksa nilai ledValue tidak dibawah 0, karena PWM pin 9 hanya menerima nilai 0-255. Jika lebih kecil atau sama dengan 0, kita kembalikan ke nilai 0.

  if (ledValue <= 0) { ledValue = 0;} // Make sure value does not go below zero

Program akan kembali  keawal,  LED akan meredup perlahan hingga padam atau ketukan berikutnya terdeteksi dan kecerahan LED akan kembali ke maksimum.

Related Artikel
Projek Sebelumnya Piezo Sounder Melody Player
Proyek Selanjutnya Light Sensor Dengan Piezo
Pada proyek kali ini, kita akan menggunakan LDR (Light Dependent Resistor), sesuai dengan namanya, komponen resistor ini tergantung pada cahaya. Pada situasi gelap nilai resistance akan tinggi. Saat terang, nilai resistance akan rendah. Makin terang, makin rendah nilai resistance.

Proyek ini akan membaca nilai resistance pada LDR dan menggunakan piezo untuk output suara.

Click disini untuk Pengenalan LDR

Rangkain pada proyek ini menggunakan rangkaian dasar potential divider, merupakan rangkaian dasar elektro yang cukup penting. Untuk memahami lebih lanjut, click disini Rangkaian Potential Divider.


Komponen yang digunakan

  • Piezo Sounder (or Piezo Disc)
  • 2-Way Screw Terminal
  • Light-Dependent Resistor
  • 10kW Resistor


Skema


LDR dapat dipasang bolak-balik, karena tidak memiliki kaki polarity. Pada proyek ini, digunakan 10kW resistor, mungkin pada kasus yang lain dibutuhkan resistor yang berbeda yang sesuai dengan LDR yang kamu gunakan. Kamu bisa gunakan resistor antara 1kW and 10kW.

Sketch
// Project 16 - Light Sensor
int piezoPin = 8; // Piezo on Pin 8
int ldrPin = 0; // LDR on Analog Pin 0
int ldrValue = 0; // Value read from the LDR

void setup() {
  // nothing to do here
}

void loop() {
  ldrValue = analogRead(ldrPin); // read the value from the LDR
  tone(piezoPin,1000); // play a 1000Hz tone from the piezo
  delay(25); // wait a bit
  noTone(piezoPin); // stop the tone
  delay(ldrValue); // wait the amount of milliseconds in ldrValue
}


Setelah diupload, Arduino akan mengeluarkan beep pendek. Interval antara beep akan panjang bila LDR kurang mendapat cahaya, dan jarak antara beep akan pendek bila LDR cukup mendapat cahaya.

Jadi proyek ini seperti geiger counter, namun fungsinya adalah mendeteksi photon cahaya. Coba solder LDR pada kabel yang panjang untuk memudahkan kamu memposisikan LDR, misalnya dibawah meja, dekat lampu atau lainnya.

Untuk pembahasan kode/sketch sekiranya tidak diperlukan karena cukup simple dan kamu bisa memahaminya dengan mudah.

Related Article
Proyek Sebelumnya : Piezo Knock Sensor
Proyek Selanjutnya : Controling DC Motor

Pengenalan LDR
Pengenalan Rangkaian Potential Divider