Creazione di toni musicali con un buzzer

Per chi ha un buzzer, collegatelo al pin 9 e gnd e ascoltate, sicuramente qualcuno già lo sapeva ma io lo scoperto oggi.

Fonti:
http://www.arduino.cc/en/Tutorial/PlayMelody
http://www.phys-x.org/rbots/index.php?option=com_content&view=article&id=66:lesson-5-play-melody-with-piezo&catid=41:kits&Itemid=70

#define  c3    7634
#define  d3    6803
#define  e3    6061
#define  f3    5714
#define  g3    5102
#define  a3    4545
#define  b3    4049
#define  c4    3816    // 261 Hz 
#define  d4    3401    // 294 Hz 
#define  e4    3030    // 329 Hz 
#define  f4    2865    // 349 Hz 
#define  g4    2551    // 392 Hz 
#define  a4    2272    // 440 Hz 
#define  a4s   2146
#define  b4    2028    // 493 Hz 
#define  c5    1912    // 523 Hz
#define  d5    1706
#define  d5s   1608
#define  e5    1517
#define  f5    1433
#define  g5    1276
#define  a5    1136
#define  a5s   1073
#define  b5    1012
#define  c6    955


int speakerOut = 9;

int DEBUG = 1;

void setup() { 
  pinMode(speakerOut, OUTPUT);
  if (DEBUG) { 
    Serial.begin(9600); 
  } 
}


int melody[] = {  f4,  f4, f4,  a4s,   f5,  d5s,  d5,  c5, a5s, f5, d5s,  d5,  c5, a5s, f5, d5s, d5, d5s,   c5};
int beats[]  = {  21,  21, 21,  128,  128,   21,  21,  21, 128, 64,  21,  21,  21, 128, 64,  21, 21,  21, 128 }; 

int MAX_COUNT = sizeof(melody) / 2; // Melody length, for looping.

// Set overall tempo
long tempo = 10000;
// Set length of pause between notes
int pause = 1000;
// Loop variable to increase Rest length
int rest_count = 50; //<-BLETCHEROUS HACK; See NOTES

// Initialize core variables
int toneM = 0;
int beat = 0;
long duration  = 0;

// PLAY TONE  ==============================================
// Pulse the speaker to play a tone for a particular duration
void playTone() {
  long elapsed_time = 0;
  if (toneM > 0) { // if this isn't a Rest beat, while the tone has 
    //  played less long than 'duration', pulse speaker HIGH and LOW
    while (elapsed_time < duration) {

      digitalWrite(speakerOut,HIGH);
      delayMicroseconds(toneM / 2);

      // DOWN
      digitalWrite(speakerOut, LOW);
      delayMicroseconds(toneM / 2);

      // Keep track of how long we pulsed
      elapsed_time += (toneM);
    } 
  }
  else { // Rest beat; loop times delay
    for (int j = 0; j < rest_count; j++) { // See NOTE on rest_count
      delayMicroseconds(duration);  
    }                                
  }                                 
}

// LET THE WILD RUMPUS BEGIN =============================
void loop() {
  // Set up a counter to pull from melody[] and beats[]
  for (int i=0; i<MAX_COUNT; i++) {
    toneM = melody[i];
    beat = beats[i];

    duration = beat * tempo; // Set up timing

    playTone(); 
    // A pause between notes...
    delayMicroseconds(pause);

    if (DEBUG) { // If debugging, report loop, tone, beat, and duration
      Serial.print(i);
      Serial.print(":");
      Serial.print(beat);
      Serial.print(" ");    
      Serial.print(toneM);
      Serial.print(" ");
      Serial.println(duration);
    }
  }
}

Notte a tutti

Ci ho fatto un orribile Jingle Bells per Natale, una cosa inudibile ]:D

hahaha si in effetti fa schifo ma è molto divertente hahahah

iz2rpn: hahaha si in effetti fa schifo ma è molto divertente hahahah

ahahahahahaha pensa quelli che fanno suonare le testine degli hardisk e cd-rom :)

Usando i toni dtmf e un telefono è possibile far comporre il numero al buzzer senza premere i tasti dell'apparecchio... non sapete quante birre ho vinto scommettendo con gli amici ]:D

Pelletta: Usando i toni dtmf e un telefono è possibile far comporre il numero al buzzer senza premere i tasti dell'apparecchio... non sapete quante birre ho vinto scommettendo con gli amici ]:D

io vincevo componendo il numero corretto cliccando velocemente sulla levetta di chiusura del telefono XD (vecchia composizione a impulsi), se rispondeva un altro, sconfitta atroce

Pelletta: Usando i toni dtmf e un telefono è possibile far comporre il numero al buzzer senza premere i tasti dell'apparecchio... non sapete quante birre ho vinto scommettendo con gli amici ]:D

in capo radio amatoriale, esiste una cosa simile per attivare un ponte radio in ricezione, tutte le radio moderne hanno questa opzione dove prima di parlare inviano un tono e il ponte ti da l'accesso, ma ho qui una radio molto vecchia sprovvista di questa cosa, con Arduino potrei dotarla di questa funziona, grazie Pelletta tu non sai minimamente quale contributo con questa frase hai dato.... ;)

@pablos ho visto il video sono dei geni del male hahahah :)

iz2rpn: ... Pelletta tu non sai minimamente quale contributo con questa frase hai dato.... ;)

Per cosi poco? Vorrà dire che segno una birra in più...

Pelletta: Usando i toni dtmf e un telefono è possibile far comporre il numero al buzzer senza premere i tasti dell'apparecchio... non sapete quante birre ho vinto scommettendo con gli amici ]:D

Sapevo che funzionava, ma credevo fosse necessario registrare su supporto i suoni. Sono sorpreso che un "semplice" buzzer possa riprodurre abbastanza fedelmente i toni da farli riconoscere alla centrale. Davvero basta un semplice buzzer? E come lo interfacci alla linea telefonica? mediante "accoppiamento diretto"? :)

Magari qualcuno ci spiega anche come funziona il telefono e la relativa linea telefonica ]:smiley:

Io avevo scoperTo questo giochetto della composizione con un elenco telefonico su cd della Telecom che ti componeva il numero dalle casse, bastava alzare la cornetta e il pc riproducendo i toni faceva il numero :p

Ciao, io avevo fatto un antifurto da mettere in macchina usando e de-assemblando un cellulare che quando si attivava l'allarme mi faceva una video chiamata, rispondendo alla video chiamata ,tramite i toni DTMF, potevo spostare la telecamera con i tasti 2,4,6,8 per vedere cosa stava succedendo in più ,cosa che non ho implementato, avevo altri tasti da poter usare per altri comandi da svolgere nella macchina. Al contrario potevo telefonare io alla macchina e dare un'occhiata intorno. Per i toni DTMF si usa MT8870, è un integrato con uscita a 4 bit che cambia valore in base al tono ricevuto in ingresso..... :grin:

Edit all'epoca non sapevo cosa fosse arduino. Ma credo lo si possa usare e migliorare la cosa :grin:

@Pelletta sicuramente anche 2 birre non immagini che problema mi hai risolto per aganciare i ponti radio non è cosi semplice come sembra più tardi ci provo...

@Johnny779 una volta bastava appoggiare all'apparecchio un generatore di toni, il centralino riconosceba il tono e dgt il numero al posto tuo, ancora prima esisteva un sistema denominato blubox che simulava con il tono 2600 hz la cornetta abbassata e si poteva chiamare gratuitamente perchè il centralino non capiva e andava in confusione.

@Tonid che io sappia MT8870 è fuori produzione da molti lustri, ma spero che qualcuno mi smentisca.

Sono contento che si stia divagando su questo post, e proprio quello che volevo far nascere discussioni parallele rimanendo su la filosofia tinkering :) amo sempre di più questo forum e le sue persone :)

@Tonid che io sappia MT8870 è fuori produzione da molti lustri, ma spero che qualcuno mi smentisca.

Si trova ancora in giro e mi pare che futura elettronica lo tratta ancora :roll_eyes:

tonid:

@Tonid che io sappia MT8870 è fuori produzione da molti lustri, ma spero che qualcuno mi smentisca.

Si trova ancora in giro e mi pare che futura elettronica lo tratta ancora :roll_eyes:

se riesco oggi li vado a trovare, speriamo che li abbiano ancora :) Grazie Tonid

gli 8870 li ho trovati la settimana scorsa su ebay, lo stesso rivenditore ha anche i suoi quarzi da 3,5 etc Mhz. http://www.ebay.it/itm/N-8-MT8870DE-Integrato-decodificatore-DTMF-Dual-Tone-Multi-Freq-decoder-MT8870-/170832440158?pt=Componenti_elettronici_attivi&hash=item27c6682b5e http://www.ebay.it/itm/N-3-Quarzo-3-579545-MHz-HC49-S-Crystal-Xtal-3-579545MHz-/150796341085?pt=Componenti_elettronici_attivi&hash=item231c298f5d Io ho quasi pronto il telecomando a DTMF .....

ma scusate un attimo ma arduino oltre a generare i dtmf dovrebbe anche decodificarli giusto?

Io ho quasi pronto il telecomando a DTMF .....

Ciao Paolo S,per cosa lo volevi usare ?

pablos:

iz2rpn: hahaha si in effetti fa schifo ma è molto divertente hahahah

ahahahahahaha pensa quelli che fanno suonare le testine degli hardisk e cd-rom :)

ecco quello che servee per il moppy (music floppy) http://leganerd.com/2012/03/20/diy-moppy-musica-con-i-floppy-drives/ è in italiano :D ed è fatto molto bene, è una guida completa

ecco quello che servee per il moppy (music floppy) http://leganerd.com/2012/03/20/diy-moppy-musica-con-i-floppy-drives/ è in italiano ed è fatto molto bene, è una guida completa

Certo che non c'è limite alla ''pazzia'' ,divertente o meglio pittoresco !!