Mahir Arduino Sketch dan Elektro secara praktek

15 - Projek 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

No comments:

Post a Comment