Proyek 11 – Piezo Knock Sensor

Proyek Piezo knock sensor akan menggunakan piezo disc. 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 diketuk atau ditekan, gaya pada material dapat menimbulkan arus listrik. Arus yang terjadi dapat dibaca, dan dapat digunakan sebagai sensor ketuk.

Komponen

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

Skema

Proyek Arduino Piezo Knock Sensor

Sketch

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
}

Pembahasan Sketch

Pertama lakukan 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 setup, 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, baca nilai analog dari pin 5 yang terhubung dengan piezo

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

Bandingkan nilai tersebut dengan variable 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<br>
    ledValue = 255;<br>
  }

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 kurangi nilai 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, periksa nilai ledValue tidak dibawah 0, karena PWM pin 9 hanya menerima nilai 0-255. Jika lebih kecil atau sama dengan 0, 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.

Sharing is caring: