Oscillare cialda piezo

buona sera, vorrei far oscillare una cialda piezo ma non riesco. Ho provato con il seguente codice, ma sento solo il classico "click" della cialda. dove sto sbagliando? il piezo da far oscillare è collegato come un buzzer passivo

/*******************************************/
const int buzzerPin = 3;
int fre;
/*******************************************/
void setup()
{
pinMode(buzzerPin,OUTPUT);
}
/*******************************************/ 
void loop()
{
for(int i = 200;i <= 800;i++) 
{
tone(3,i); 
delay(5); 
}
delay(4000);
for(int i = 800;i >= 200;i--)
{
tone(3,i);
delay(10);
}
}

ma quale altoparlante piezo hai?

...e come lo hai collegato? Magari prima fare qualche prova seguendo qualche pagina come QUESTA? Hai messo una resistenza? Il buzzer è funzionante? (se è il normale piezo, le saldature le hai fatte tu? Se non le fai bene, o non suona o danneggi il piezo...). Hai un altro piezo da provare?

Poi sai che se non chiami noTone() il suono prosegue, si?
Quindi teoricamente quel primo suono prosegue per 4 secondi, fa il secondo e poi ricomincia (sei nel loop...).

Per finire alcune cosette secondarie che non sono il problema, ma meglio partire sempre col piede giusto.

Primo, INDENTA. Abituati ad indentare per bene perché quando arriverai a programmi da più di queste poche righe ti sarà utile per capire meglio cosa stai facendo (e quindi semplificarti il debug). Nel frattempo premi Ctrl-T nell'IDE e te lo indenta lui.

Secondo, perché definisci la costante buzzerPin e poi la usi solo nel setup?
Quando aggiungi un qualche parametro di configurazione (cosa buona e giusta), poi USALO! :slight_smile:

const int buzzerPin = 3;

void setup()
{
  pinMode(buzzerPin,OUTPUT);
}

void loop()
{
  for(int i = 200;i <= 800;i++) 
  {
    tone(buzzerPin,i); 
    delay(5); 
  }
  noTone(buzzerPin);
  delay(4000);
  for(int i = 800;i >= 200;i--)
  {
    tone(buzzerPin,i);
    delay(10);
  }
  noTone(buzzerPin);
  delay(2000);
}

Aggiungo solo, per la parte "hardware" ... un piezo ha tensioni di funzionamento piuttosto alte, per produrre un suono abbastanza forte, se alimentato con i 5V il suono sara' per forza debole, specie se e' una cialda "libera", senza supporto e camera risonante ... inoltre ricorda che fondamentalmente si comporta sia come un condensatore (se gli applichi una tensione si carica), sia come un generatore (se e' sollecitato meccanicamente genera tensione, anche di parecchi volt, e questa tensione, per quanto a correnti minime, puo essere sia positiva che negativa, e quindi bruciare un pin in condizioni estreme)

Andrebbero sempre usati in modo opportuno ... con una resistenza (anche di alto valore, 22K, 33K, o simile) in parallelo, ed anche con un diodo in antiparallelo, se collegati direttamente ad un'uscita digitale ... oppure connessi con un transistor a collettore aperto ... ad una tensione piu alta, se disponibile, oppure con in parallelo un'induttanza (o pilotato da un trasformatore elevatore o autotrasformatore), se la tensione piu alta non e' disponibile, per ottenere piu volume (con il transistor e l'induttanza o trasformatore, non serve mettee diodo e resistenza in parallelo alla cialda, ma ovviamente il transistor va scelto in modo che regga le extratensioni generate dal sistema)

Etemenanki:
Aggiungo solo, per la parte "hardware" ... un piezo ha tensioni di funzionamento piuttosto alte, per produrre un suono abbastanza forte, se alimentato con i 5V il suono sara' per forza debole, specie se e' una cialda "libera", senza supporto e camera risonante ...

Esatto, infatti se usati come cicalini li vendono in genere così:

Se lui magari ce l'ha appoggiato sul tavolo non riesce a vibrare, quantomeno deve provare a metterlo su una scatoletta di cerini ad esempio... Altrimenti deve pensare a soluzioni diverse (transistor ed altoparlantino quantomeno).

Andrebbero sempre usati in modo opportuno ... con una resistenza (anche di alto valore, 22K, 33K, o simile) in parallelo, ed anche con un diodo in antiparallelo, se collegati direttamente ad un'uscita digitale ... oppure connessi con un transistor a collettore aperto ... ad una tensione piu alta, se disponibile, oppure con in parallelo un'induttanza (o pilotato da un trasformatore elevatore o autotrasformatore)

Come direbbe Renato Pozzetto "ellamadonna!"... :smiley: Non esageriamo, per un buzzer non mi metterei a fare tutta sta cattedrale.. :wink:
Forse gli basta anche un buzzer con la scatolina come risonante, o un transistorino ed un mini altoparlante è più che sufficiente.

docdoc:
...
Come direbbe Renato Pozzetto "ellamadonna!"....

:stuck_out_tongue: :smiley:

No, seriamente, dipende tutto da cosa vuole fargli fare ... solo il dischetto, senza nulla, a 5V al massimo "pigola" in sordina :smiley: ... gia solo prendendo il fondo di un bicchierino di plastica (tagliato alto mezzo centimetro basta), ed incollandocelo sul bordo dopo aver fatto un foro sul fondo del bicchierino (anche solo un cm), piu o meno raddoppia (se la plastica fosse piu rigida, tipo tappi da bombole spray, anche di piu) ... pero' se ci vuoi un bel po di rumore, induttanza, trasformatorino o autotrasformatore sono quasi obbligatori (e date le correnti in gioco, pure il transistor)

Quello che io andrò ad utilizzare è un disco piezo, (quello dell'allarme delle auto per intenderci) con i fili già collegati quindi non saldati da me. Il problema è che collegandolo ad Arduino, sento solo il classico "click" e niente piu. Un circuito con il buzzer attivo l ho fatto in passato con diodi transistor induttanze e resistenze (magari ve lo posto pure). Ora lo voglio creare partendo da questi dischi piezo, solo che non riesco a riprodurre nessun suono... Come mai con il circuito dell'allarme funziona e con Arduino no? Grazie

Il diaframma piezoelettrico è equiparabile ad un condensatore di capacità tra 8 e 40 nF, perciò, onde evitare di sovraccaricare l'uscita del micro, è buona norma inserire in serie un resistore da 200 Ohm.

La frequenza di risonanza dipende dalla dimensioni del disco: ad esempio, per un diametro di 40 mm è circa 2 kHz, mentre con un diametro di 20 mm è circa 6 kHz.

Se vengono utilizzate frequenze diverse da quella di risonanza, il suono sarà più debole.

Emanuele1993:
... sento solo il classico "click" e niente piu...

... non e' che stai cercando di alimentarlo in DC come se fosse attivo ? ... perche' al dischetto "nudo", se non gli mandi tu una frequenza, non suona di certo ...

Voglio dire, ho visto che usi la "tone" , ma il "click" c'e' di solito se gli si collega la DC, non una frequenza ... se al posto del buzzer colleghi un'altoparlante normale (con in serie una R da 220 ohm), senti qualcosa o nulla anche su quello ? ... tanto per capire se il problema e' hardware o software ...

Se collego un buzzer attivo, funziona senza problemi...solo che preferisco usare questo disco piezo dell'allarme perché so che raggiunge una potenza sonora elevata...secondo me, sbaglio qualcosa nel programma...

Prova a vedere se questo lo fa suonare in qualche modo:

const int buzzerPin = 3;

void setup() {
  pinMode(buzzerPin,OUTPUT);
}

void loop() {
  for(int i=0; i<=10000; i++) {
    digitalWrite(buzzerPin, HIGH);
    delay(1); 
    digitalWrite(buzzerPin, LOW);
    delay(1); 
  }
  delay(1000);
}

Ciao,
P.

Emanuele1993:
Se collego un buzzer attivo, funziona senza problemi...

Il dubbio che avevo era proprio questo ... i buzzer attivi vanno in DC, mandandogli una "tone" NON dovrebbero funzionare correttamente ... prova con un'altoparlantino passivo, anche piccolo, sempre con la resistenza in serie ... se senti la frequenza che butti fuori con la tone, anche poco, allora e' una cosa, se senti solo il click (o toc) anche con quello, allora c'e' qualcos'altro che non va ...

risolto:) grazie:):slight_smile:

Emanuele1993:
risolto:) grazie:):slight_smile:

Bene! Ma come hai risolto? Spiega, così potrà servire per altri che dovessero leggere questo thread. E magari modifica il primo tuo post cambiando l'oggetto per inserire "[RISOLTO]".
Ciao!

Ho semplicemente cambiato uscita:) da 3 a 9