"A piezoelektromosság olyan elektromos jelenség, melynek során bizonyos anyagokon (kristály, kerámia) összenyomás hatására elektromos feszültség keletkezik, illetve elektromos feszültség hatására alakváltozás jön létre." / bővebben: http://hu.wikipedia.org/wiki/Piezoelektromoss%C3%A1g
A piezo hangszórók csak megfelelő polaritással működnek, ez azt jelenti hogy meghatározott irányban kell hogy ármenjen rajta az áram, ezért a fekete vagy kék drótját a földbe még a pirosat az analóg pinbe kell kötni. Plusz 1MOhm-os ellenállást is használunk, ugyanebből a pinbe kell a másik Gnd (földelés) pinbe kötni, hogy megóvjuk az arduinot. (Piezo hangszoró 12V DC gerjesztő áramkörrel.)
Műanyag borítás nélkül is beszerezhető a piezo, fényes lemezeknek látszanak, könnyebb őket szenzorként használni, pl. lehet nyomogatni. Akkor működnek a legjobban ha az érzékelő felületük erősen neki van támasztva valaminek, vagy fel van ragasztva. Így néz ki: https://www.youtube.com/watch?v=Xuw9frP1GNo&feature=related
Léteznek hajlékony piezo-film lapok, vagy kisebb elemek, ezekkel nagyobb felületen lehet érzékelni.
A lejebb található kódban, a piezóból érkező adatok egy általunk megadott küszöbértékhez vannak viszonyítva. Próbáld meg növelni vagy csökkenteni ezt az értéket, hogy kihasználd a szenzorod teljes érzékanységi tartományát.
Arduino kód:
/* Knock Sensor - Kopogás szenzor
This sketch reads a piezo element to detect a knocking sound.
It reads an analog pin and compares the result to a set threshold.
If the result is greater than the threshold, it writes
"knock" to the serial port, and toggles the LED on pin 13.
The circuit:
* + connection of the piezo attached to analog in 0
* - connection of the piezo attached to ground
* 1-megohm resistor attached from analog in 0 to ground
http://www.arduino.cc/en/Tutorial/Knock
created 25 Mar 2007
by David Cuartielles <http://www.0j0.org>
modified 30 Aug 2011
by Tom Igoe
This example code is in the public domain.
*/
// defíniáljuk az állandókat, ezek nem változnak majd
const int ledPin = 13; // la 13 digit pinbe tegyünk LEDet
const int knockSensor = A0; // piezot az analog pin0-ba kötjük
const int threshold = 50; // 0-100-ig, az a küszöbérték amihez
// viszonyítjuk hogy a hang kopogás-e vagy sem
// ezt növeld vagy csökkentsd hogy működjön a szenzor
// ezek a változók:
// ez a változó tárolja a szenzor pin-jéből kiolvasott értéket:
int sensorReading = 0;
// ez a változó tárolja el a LED utolsó állását:
int ledState = LOW;
void setup() {
pinMode(ledPin, OUTPUT); // deklaráljuk a ledPin-t OUTPUT-ként
Serial.begin(9600); // bekapcsoljuk a serial portot
}
void loop() {
// olvassuk ki és tároljuk el a szenzor értékét:
sensorReading = analogRead(knockSensor);
// ha a kiolvasott érték nagyobb mint a küszöb érték:
if (sensorReading >= threshold) {
// kapcsold át a ledPin állapotát
// ! boolean jelentése: nem
// ledÁllapota = nem ledÁllapottal, tehát az ellenkezőjével
ledState = !ledState;
// frissítsd a LEDpin értékét az aktuális állapotával:
digitalWrite(ledPin, ledState);
// a "Knock!" string-et küldd vissza a sz.gépnek:
// a string-et karakterek tárolására használjuk
Serial.println("Knock!");
}
delay(100);
// késleltetés, hogy elkerüljük a
// serial port buffer túlterhelését
}
Serial portot használunk. Ha a jobb felső sarokban megnyomod a Serial Monitor gombot, láthatod ahogy kiírja a "Knock!" stringet, amikor érzékeli a piezo szenzo a hangot.