Cambiare tonalità buzzer e durata

salve! come è possibile cambiare tonalità ad un buzzer ,facendolo sembrare simile ad un beep e come possibile cambiarne la durata di circa un secondo ? questo è il codice:

#define led 13
#define pulsante 7
#define suono 6
int a;
void setup() {
pinMode(led,OUTPUT);
pinMode(pulsante,INPUT);
pinMode(suono,OUTPUT);
digitalWrite(led,LOW);
digitalWrite(suono,LOW);
}

void loop() {
a=digitalRead(pulsante);
if(a==HIGH)
{
  digitalWrite(led,HIGH);
  digitalWrite(suono,HIGH);
}else{
  digitalWrite(led,LOW);
  digitalWrite(suono,LOW);
}
}

>alexxandro: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More → Modify che si trova in basso a destra del tuo post) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo.

Guglielmo

ok corretto aspetto un aiuto come dicevo vorrei che il cicalino emettesse un beep e non suono fastidioso,e di almeno un secondo

dipende se stai usando un buzzer attivo o passivo, in quello attivo che dovrebbe essere quello usato nello sketch, tu ti limiti a fornire una tensione e il buzzer emette il suono che non è variabile (alimentandolo in PWM puoi ottenere una leggera variazione ma sempre un ronzio resta).
se al contrario vuoi emettere dei suoni a frequenze ben definite (come le note musicali) allora devi usare un buzzer passivo e usando la funzione tone lo fai suonare come vuoi tu.

per la durata del suono per un secondo o più usi un ciclo while con l’uso di millis()

Patrick_M: per la durata del suono per un secondo o più usi un ciclo while con l'uso di millis()

È piú semplice usare un delay() che é nello stesso modo bloccante come un while con millis(). Si deve usare millis in un altro modo per ottenere uno sketch che non si blocca durante il tempo di attesa/ritardo. Ciao Uwe

si, è vero.... però (sono andato a rivedermela) con l'istruzione tone è ancora più semplice, metti direttamente la durata nell'istruzione ;)

Syntax

tone(pin, frequency)

tone(pin, frequency, duration)

quindi nel mio caso che devo far emettere un suono come il beep del pc,ma leggermente piu forte ,dovrei prendere un cicalino attivo?
esempio Buzzer Attivo 5V beep continuo?

mi era parso di capire che volessi variare il suono...

nel tuo caso invece basta digitalWrite(suono,HIGH);

seguito da delay(lunghezzaSuono)

e quindi digitalWrite(suono,LOW);

alexxandro: quindi nel mio caso che devo far emettere un suono come il beep del pc,ma leggermente piu forte ,dovrei prendere un cicalino attivo?

Si ma decidi cosa vuoi fare. Prima dici che vuoi "cambiare tonalità ad un buzzer" e dallo sketch si deduce che il tuo sia un buzzer attivo (come ti ha detto @Patrick_M), per cui se vuoi cambiare tonalità dovresti passare ad un cicalino passivo (sempre come ha detto anche @Patrick_M) che gestisci tu con il comando "tone". Ora dici che vuoi un suono "tipo PC" (?) e chiedi se prendere un cicalino attivo (ma non lo avevi già?)...

La differenza quindi la vedi nel post #5 di Patrick_M sta a te definire cosa vuoi: buzzer attivo: semplice da attivare ma non puoi cambiare frequenza buzzer passivo: puoi definire tu la nota da suonare

Per il secondo, direi che puoi aggiungere un transistor per amplificare un poco il suono o addirittura collegare un piccolo altoparlante. Per lo schema puoi prendere spunto da questo schema, ricavato dall'ottima guida "Arduino Basic connections" di pighixxx: |500x353

il buzzer deve emettere un beep io pensavo che potevo prendere un cicalino che gia di default mi emettesse un beep quindi dovrei inserire questo?: tone(pin, frequency)

e chge frequenza per emettere un beep simile al suono del cicalino del pc ??

Si, scusa, ripeto:

A) un buzzer ATTIVO suona LUI, basta che lo alimenti con un pin, quindi si, puoi usare un cicalino “che di default ti emette un beep”.
B) MA se non ti piace quel beep o vuoi fare un suono di frequenza diversa, allora DEVI usare un buzzer PASSIVO (generalmente un dischetto piezoelettrico, che è come un altoparlantino, non suona se non gli mandi tu il tono con il comando tone()).
C) Se poi vuoi un suono più potente del piezo, allora metti quel circuitino con un transistor ed un qualsiasi altoparlantino tipo quelli dei PC (anche lì sono gestiti tramite un transistor…), sempre con la tone() ci fai quello che vuoi.

Chiaro ora?

Quale soluzione scegli quindi? La “A” o la “B” o la “C”?? Eh, siòra Longari? Devo chiamare anche la valletta di Mike Bongiorno? :smiley:

Per la frequenza “tipo PC” fatti qualche esperimento tu, ci metti 5 minuti in totale: fai uno sketch che suona una frequenza diversa ogni secondo, e ad orecchio scegli quella che ti piace.
Ma direi che dovrebbe essere sugli 800-1000Hz max.

alexxandro:
il buzzer deve emettere un beep

Beh visto che stai sperimentando, cerca in giro qualche esempio, come questo:

Una volta compreso il meccanismo, è facile.

il suono deve essere come questo ,un beep pulito e non basso,dato che servirà per addestrare un cane https://youtu.be/Cbd8QGViJ84?t=20s

qual'è il piu adatto?

Io allora userei un altoparlantino col circuito che ti ho postato, per amplificare il suono (il volume lo regoli col trimmer che vedi a sinistra). Pratico e adattabile.

La frequenza di quel beep, come ti avevo anticipato, è attorno agli 800Hz.

Sperimenta il suono a questo indirizzo:
http://onlinetonegenerator.com/
Imposta la forma d’onda quadra e sopra digita 800 poi fai Play.

quindi riepilogando servirebbe come componenti:

cassa 0,25 watt,8 ohm? potenziometro 10 kohm 2 condensatori 10 uf e 100 uf 2 resistenze 10 kohm , 1 kohm 1 transistor 2n222

quindi dal circuito l'out va collegato ad un pin di arduino ?

E del transistor al neutro e il più della cassa alla 5 volt ??

docdoc: Sperimenta il suono a questo indirizzo: http://onlinetonegenerator.com/ Imposta la forma d'onda quadra e sopra digita 800 poi fai Play.

bello questo :) non lo conoscevo grazie

guardando un video dei vari cicalini sembra che quello nero che ascolto nel video ,è ideale per il mio scopo, https://www.youtube.com/watch?v=lXpQayhGB1E che dovrebbe essere :BZRP2418

dice che si sente fino a 10 metri

meglio il circuito con l'altoparlante?

alexxandro: guardando un video dei vari cicalini sembra che quello nero che ascolto nel video ,è ideale per il mio scopo, che dovrebbe essere :BZRP2418 dice che si sente fino a 10 metri meglio il circuito con l'altoparlante?

Come detto sopra, dipende da te: i buzzer sono semplici da usare ma non puoi variare nulla, né il tono né il volume (questo al massimo un poco tramite PWM), mentre con l'altoparlante puoi gestire volume e tono.

O fai qualche esperimento (quel buzzer non costa tanto, per i componenti non so se tu li abbia già) e poi prendi la decisione, oppure se prosegui con questi dubbi li avrai in eterno.

alexxandro: cassa 0,25 watt,8 ohm?

Si beh più che "cassa" un altoparlantino anche di quelli rimediati da un vecchio PC.

potenziometro 10 kohm

Se non hai necessità di cambiare il volume frequentemente, fai prima con un trimmer da 10k (al limite con un forellino nella scatola per accedervi con un cacciavitino).

2 condensatori 10 uf e 100 uf

si ma occhio che il 100 uF è elettrolitico (quanta pratica hai con l'hardware?).

2 resistenze 10 kohm , 1 kohm 1 transistor 2n222

si.

quindi dal circuito l'out va collegato ad un pin di arduino ?

Certo. A quello che userai con la tone().

E del transistor al neutro e il più della cassa alla 5 volt ??

Si, ma occhio non al pin 5V di Arduino, devi collegarlo al "+" dell'alimentatore (anche 9V), mentre il "-" va in comune quindi con il GND di Arduino.

Devo solo provare con un cicalino prima,quello attivo?
Io per ora ho ordinato arduino
Cosa devo prendere per testare il tutto.la board quella di plastica e jumper?
Se nel caso opto per il cicalino, come alimento arduino .premettendo che in questo progetto devo andare ad aggiungerci un servo motore
Invece se nel caso opto per il circuitino con il piccolo altoparlante?