incrementare suono buzzer in base all input piezo

Salve a tutti :slight_smile: sono nuovo su questo forum..

ho un problema, devo riprodurre con un buzzer un suono più o meno alto a seconda della pressione generata su una piastra piezo.. qualcuno saprebbe darmi una mano per favore?
grazie in anticipo :slight_smile:

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:

Un pezzo alla volta! Hai provato un programma semplice per legger il piezo?

si si per ora suono riuscito a riprodurre un suono con il piezo..

ecco lo sketch

#include "pitches.h"

int analogpin[1]={A0};
int buzpin=8;
int threshold=50;

void setup()
{
Serial.begin(9600);
}

void loop()
{
if(analogRead(analogpin[0])>threshold)
{
Serial.println("A0");
tone(8, NOTE_B4,1000/4); 
}
}

Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare ( pulsante </> ).
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

Per favore, modifica il tuo post precedente e metti il codice nei tag code. Grazie :slight_smile:

Non ho mai provato (o non ricordo), premendo con pressione diversa sul piezo, ottieni valori diversi con la analogRead() ?

si perche' il rpincipio del piezoelettrico e' proprio quello, trasformazione da meccanica ad elettrica, e di conseguenza il contrario.

Non credo pero' possa in uscita modificare il volume come vuole lui, perche' l'analog write va a modificare il pwm, non l'ampiezza del segnale

Per quel che mi ricordo dagli esperimenti scolastici se usi un un buzzer piezo auto oscillante a 5V puoi al massimo alterare il volume variando la tensione, ma non il tono.

devo riprodurre con un buzzer un suono più o meno alto a seconda della pressione generata su una piastra piezo..

Ma vuoi variare la frequenza o il volume ?

Brunello:
Ma vuoi variare la frequenza o il volume ?

Voglio variare il volume in base alla pressione.. mi sa mi sono espresso male ragazzi scusate..

nid69ita ma intendi sul monitor seriale?

Ci sono due tipo di trasduttori piezo: attivi e passivi.

I primi (detti anche buzzer) hanno al loro interno un circuito oscillante per cui, applicando una tensione, emettono una certa tonalità fissa.

I secondi, invece, abbisognano di un segnale esterno e possono riprodurre un certo range di frequenze.

E' sconsigliabile pilotarli direttamente con una uscita digitale di Arduino tramite il tone() in quanto, essendo equiparabili ad un condensatore, potrebbero assorbire una corrente superiore alla massima consentita (40mA).

Meglio usare un transistor NPN in configurazione ad emettitore comune.

piezo.png

resta il fatto che non puo' fare quello che chiede. Non puoi modificare il volume con solo arduino. Potresti usare dei potenziometri digitali pilotati da arduino.

Mentre invece se ti accontenti di cambiare tonnalita' in base alla pressione allora con Tone, e le precauzioni dette da cyberhs, puoi farlo.

INteressante l'uso di un piezo come rilevatore di pressione.
Ci posti il modello che stai usando e una screenshottata del serialmonitor quando premi su di esso ?

Testato:
INteressante l'uso di un piezo come rilevatore di pressione.
Ci posti il modello che stai usando e una screenshottata del serialmonitor quando premi su di esso ?

questo è il link con le caratteristiche dei piezo
http://www.dx.com/it/p/27mm-piezo-transducer-buzzer-10-pcs-152822#.Vv6bRaSLS71

questo è lo screen del monitor seriale dopo aver colpito il piezo

Lo schema che ti ho fornito può anche funzionare con tensione più alta di +5V, ad esempio a +12V.

In questo modo il trasduttore passivo che stai usando avrà un suono più potente.

Tieni presente che la sua frequenza di risonanza è 3.5kHz ed il rendimento massimo è attorno a questa frequenza.

cyberhs:
Lo schema che ti ho fornito può anche funzionare con tensione più alta di +5V, ad esempio a +12V.

In questo modo il trasduttore passivo che stai usando avrà un suono più potente.

Tieni presente che la sua frequenza di risonanza è 3.5kHz ed il rendimento massimo è attorno a questa frequenza.

scusa la mia ignoranza ma non ho capito bene.. :frowning:

Non puoi pretendere di sentire note basse minori di 1kHz senza una apprezzabile diminuzione del livello del suono.

I trasduttori piezo lavorano meglio a frequenze alte.

Danielesanna:
scusa la mia ignoranza ma non ho capito bene.. :frowning:

Ok, ho provato un piezo, quando lo colpisci a seconda della forza, hai valori diversi con la analogRead()
Come ti è stato detto da @Testato però della tone() puoi variare la tonalità ma non il volume.
Inoltre (almeno a me) quando colpisco il piezo, leggendo di continuo con delay(100) ho 2 o 3 valori ogni volta che colpisco, come se ci fossero dei "rimbalzi".

int r,vr;

void setup() {
 delay(1000);
 Serial.begin(9600);
 Serial.println("avvio..");
 r=0;
 vr=0;
}

void loop() 
{ r=analogRead(A0);
  if(r!=vr && r!=0)  // valore cambiato ?
  { vr=r;  // nuovo valore
    Serial.println(vr);
  }
  delay(100);
}

Premendo una volta ottengo qualcosa tipo 454, 84,3

Per variare il volume c'e' una libreria che usa un trucco. Non l'ho provata. Purtroppo richiede l'uso di due pin PWM e non uno solo:
https://bitbucket.org/teckel12/arduino-toneac/wiki/Home

nid69ita:
Inoltre (almeno a me) quando colpisco il piezo, leggendo di continuo con delay(100) ho 2 o 3 valori ogni volta che colpisco, come se ci fossero dei "rimbalzi".

Premendo una volta ottengo qualcosa tipo 454, 84,3

Credo che sia una curva con i valori in discesa, però con quel delay 100 stai campionando ogni 100 ms e ti perdi i punti intermedi. Prova a togliere il delay o a diminuirlo di molto.

Per variare il volume c'e' una libreria che usa un trucco. Non l'ho provata. Purtroppo richiede l'uso di due pin PWM e non uno solo:
https://bitbucket.org/teckel12/arduino-toneac/wiki/Home

Simpatica

Il giovine vuole fare un Drum Pad