Knock con piezo

buonasera a tutti,
domanda banale ma utile .. sto cercando di fare un applicativo utilizzando il piezo , ma nell'esempio riporta un valore di TRESHOLD di 100 , mi sapete dire se è una frequenza o comunque che cosa è ?
grazie mille
saluti
massib

potrebbe essere una tensione, ma se non indichi cosè quel 100 potrebbero essere anche carote :slight_smile:
o in alternativa allegare la documentazione per capire di cosa si sta parlando :smiley:

Ci dai lo sketch?
Potrebbe essere anche i valori ADC letti.
Ciao Uwe

salve, scusate .. è negli esempi di arduino

const int ledPin = 13;      // led connected to digital pin 13
const int knockSensor = A0; // the piezo is connected to analog pin 0
const int threshold = 100;  // threshold value to decide when the detected sound is a knock or not


// these variables will change:
int sensorReading = 0;      // variable to store the value read from the sensor pin
int ledState = LOW;         // variable used to store the last LED status, to toggle the light

void setup() {
  pinMode(ledPin, OUTPUT); // declare the ledPin as as OUTPUT
  Serial.begin(9600);       // use the serial port
}

void loop() {
  // read the sensor and store it in the variable sensorReading:
  sensorReading = analogRead(knockSensor);

  // if the sensor reading is greater than the threshold:
  if (sensorReading >= threshold) {
    // toggle the status of the ledPin:
    ledState = !ledState;
    // update the LED pin itself:
    digitalWrite(ledPin, ledState);
    // send the string "Knock!" back to the computer, followed by newline
    Serial.println("batti");
  }
  delay(100);  // delay to avoid overloading the serial port buffer
}

saluti e grazie

E' la "soglia" dopo la quale il led cambia stato.
Nel tuo sketch leggi il valore dell'input analogico (0 : 1023), e lo confronti con threshold:

  if (sensorReading >= threshold) {
    // toggle the status of the ledPin:
    ledState = !ledState;
    // update the LED pin itself:
    digitalWrite(ledPin, ledState);
    // send the string "Knock!" back to the computer, followed by newline
    Serial.println("batti");
  }

Ps.
Usa i tag code per includere lo sketch.

grazie

ma continuo a non capire , se aumento il valore del threshold da 100 a 500 cosa significa ?

saluti

Se non ricordo male sull'ingresso analogico dovresti avere un potenziometro (resistenza variabile), giusto?

Sappiamo che gli ingressi analogici restituiscono un valore proporzionale, che varia in base al variare della tensione ad essi applicati. (Leggere http://arduino.cc/en/Reference/AnalogRead)
Quindi se leggo 0, vuol dire che ho 0V (circa), se leggo 1023 ho 5V (circa sull'ingresso).

Detto questo vuol dire che se imposti una soglia a 100, ti basta ruotare lievemente il tuo potenziometro per rendere vero quell'if postato sopra.
Se sposti la soglia a 500 cosa avrai ? E se la sposti a 1000?

A te la risposta. :wink:

PS.
Questo è un problema SW, non HW.

in realtà il problema è hardware perchè il piezo funziona non come output per riprodurre un suono ma come INPUT , cioè sente la varazione di frequenza legata al KNOCK prodotto esternamente... per cui quello che non comprendo è cose "sente " in piezo.. cioè
se riproduco un rumore di frequenza diversa o di tono o di lunghezza!!
grazie mille
massi

non hai degli schemi elettrici da fornirci?
perche cosi molto ad occhio... potrebbe "sentire" una risonanza... quindi lavorare in frequenza.... ma è solo un ipotesi buttata lì!

Anche se come gia detto prima, sembra più un valore di tensione!!

ok allego schema semplicissimo !

Piezo-knock-sensor-circuit.png

grosso modo un piezo "produce" delle cariche in base alla pressione applicata, quindi più urli e più dovrebbe produrre un impulso di corrente maggiore (che poi veien letto come tensione), e la tua solgia, decide se questo livello di tensione prodotto dal piezo sotto uan certa pressione, è sufficiente o meno per accendere il tuo led!

p.s. spero che in quel led ci sia uan resistenza!!!!

ok
quindi se io aumento la soglia da 100 a 500 , dovrei aumentare il livello del rumore ? corretto?

aumenti la soglia di attivazione....

non so per esempio:

se Th= 100 led acceso a 30dB
se Th = 500 led acceso a 40dB

(numeri puramente d'esempio senza nessun riferimento reale!)

perfetto è quello che mi serviva capire... comunque non è il caso di toccare, cioè battere sul piezo è sufficiente produrre un rumore, cioè la mia domanda è se deve essere a contatto con la sorgente del knock oppure è sufficiente un battito di mano?

Il "piezo" è un trasduttore piezoelettrico che può funzionare sia come altoparlante (utilizzo più comune) che come microfono.

Il tuo sketch sfrutta questa seconda possibilità.

Quando un suono colpisci il diaframma argenteo del trasduttore, quest'ultimo genera una differenza di potenziale proporzionale all'intensità del suono ed alla sua frequenza.

Il valore di TRESHOLD (soglia) 500 corrisponde ad una tensione sull'ingresso analogico di circa 2.5V, in quanto il campionatore analogico digitale a 10 bit "vede" tensioni tra 0-1023 volte il passo di campionamento, cioè 5V / 1024 = 0,0049 V = 49mV.

Qualsiasi suono superiore alla soglia impostata (cioè 500 x 49mV = 2.45V) farà accendere il LED.

I problemi nascono quando si vuole discriminare il tipo di suono, ad esempio un suono di tonalità bassa dagli altri suoni.

In questo caso si deve ricorrere ad un circuito elettronico in grado di filtrare il suono desiderato, il cosiddetto "filtro passa basso" che attenuerà le frequenze acute facendo passare solo le frequenze basse.

perfetto ... ora tutto chiaro!

solo un dubbio ho visto sulla rete un tizio che ha costruito un'apri porta usando il piezo, ma per aprire riproduce con il battito della mano una " canzone", e solo con quella canzone si apre la porta .,. si può fare con un semplice piezo o no ?
grazie

ecco link

Sì è fattibile anche senza usare stadi di amplificazione/filtraggio (se non software).

Quello proposto nel video è un piezo con autoapprendimento del "knock-knock".

In pratica memorizza il numero dei colpi e la pausa tra essi.

Interessante progetto.

massibal:
si può fare con un semplice piezo o no ?

Uno speaker piezo è poco efficiente come microfono, comunque è in grado di rilevare vibrazioni dirette come nel caso della porta, infatti è messo a contatto della stessa.
Il limite è Arduino, non il sensore, non è possibile fargli riconoscere una melodia generica, però nel caso in esame viene riconosciuto il singolo TOC sulla porta, tramite soglia, e il tempo che intercorre tra questi, se la sequenza corrisponde a quella memorizzata, con la dovuta tolleranza, viene azionato il motore che apre la porta.
Sintetizzando, Arduino rileva degli impulsi, puoi vederli come un pin che passa rapidamente da 0 a 1 e ritorna a 0, misura il tempo intercorso tra questi, se la serie di impulsi rispetta il pattern memorizzato attiva un out per accendere un led o attivare un motore.

perfetto ... grazie a tutti...
comunque è forte scoprire cosa si può fare anche con "materiali" semplci come un piezo!!

in questi giorni provo e poi se ho problemi , vi scrivo!

ancora grazie

massi

salve
ieri sera mi è venuto un dubbio amletico…
ma i BAZZER magneti ( magnetic buzzer) sono dei PIEZO o sono diversi… ?

grazie
massib