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
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
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.
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
No comments:
Post a Comment