RyujiAndy Inviato 7 Dicembre 2012 Condividi Inviato 7 Dicembre 2012 (modificato) Creare toni con Arduino Come mi avevate chiesto in uno dei tutorial precedenti, questa volta vediamo come collegare un Buzzer o un piccolo altoparlante da 8ohm ad Arduino e fargli riprodurre un suono. Per evitare che Arduino suoni non appena viene programmato ho aggiunto un pulsante allo schema: in questo modo possiamo decidere se riprodurre il suono o no. http://www.nonsologaming.com/vd/arduino_buzz_push_sch.png Materiale necessario:Arduino UNO R1 = resistenza da 100ohm R2 = resistenza da 10kohm S1 = pulsante J1 = buzzer o box da 8ohm Schema elettrico: http://www.nonsologaming.com/vd/arduino_buzz_push_sch2.png Arduino prevede già di suo una funzione che possiamo sfruttare per fargli riprodurre un suono, ovvero "tone": tone(pin, frequenza, durata); Esiste anche un'altro comando che a sua volta permette di fermare la riproduzione del suono: noTone(pin); Nel circuito che realizzeremo in questo tutorial vogliamo che arduino emetta un suono quando il pulsante viene premuto, quindi i nostro programma sarà: int freq = 1047; int pinbuzz = 8; int pintasto = 2; void setup() { pinMode(pintasto, INPUT); } void loop() { if(digitalRead(pintasto)) { tone(pinbuzz, freq); } else { noTone(pinbuzz); } } Per comodità ho creato una variabile con la frequenza del tono: in questo modo basta cambiare il valore per cambiare il suono. Come potete notare, nella funzione tone non ho specificato la durata, questo perchè il suono deve venire riprodotto solo quando il pulsante viene premuto, e non appena viene rilasciato la funzione noTone fa smettere la riproduzione. Ora invece creiamo una vera e propria melodia: ricercando in internet ho trovato una lista dove definisce le note con le relative frequenze. Integrando questo file nel nostro programma diventerà più semplice indicare ad Arduino che suono deve riprodurre ed in che sequenza. Chiamiamo la "libreria delle note" pitches.h, questo file deve essere messo nella stessa cartella dove andremo a salvare il programma che abbiamo realizzato per Arduino. All'interno del file pitches.h scriviamo: #define NOTE_B0 31 #define NOTE_C1 33 #define NOTE_CS1 35 #define NOTE_D1 37 #define NOTE_DS1 39 #define NOTE_E1 41 #define NOTE_F1 44 #define NOTE_FS1 46 #define NOTE_G1 49 #define NOTE_GS1 52 #define NOTE_A1 55 #define NOTE_AS1 58 #define NOTE_B1 62 #define NOTE_C2 65 #define NOTE_CS2 69 #define NOTE_D2 73 #define NOTE_DS2 78 #define NOTE_E2 82 #define NOTE_F2 87 #define NOTE_FS2 93 #define NOTE_G2 98 #define NOTE_GS2 104 #define NOTE_A2 110 #define NOTE_AS2 117 #define NOTE_B2 123 #define NOTE_C3 131 #define NOTE_CS3 139 #define NOTE_D3 147 #define NOTE_DS3 156 #define NOTE_E3 165 #define NOTE_F3 175 #define NOTE_FS3 185 #define NOTE_G3 196 #define NOTE_GS3 208 #define NOTE_A3 220 #define NOTE_AS3 233 #define NOTE_B3 247 #define NOTE_C4 262 #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349 #define NOTE_FS4 370 #define NOTE_G4 392 #define NOTE_GS4 415 #define NOTE_A4 440 #define NOTE_AS4 466 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_CS5 554 #define NOTE_D5 587 #define NOTE_DS5 622 #define NOTE_E5 659 #define NOTE_F5 698 #define NOTE_FS5 740 #define NOTE_G5 784 #define NOTE_GS5 831 #define NOTE_A5 880 #define NOTE_AS5 932 #define NOTE_B5 988 #define NOTE_C6 1047 #define NOTE_CS6 1109 #define NOTE_D6 1175 #define NOTE_DS6 1245 #define NOTE_E6 1319 #define NOTE_F6 1397 #define NOTE_FS6 1480 #define NOTE_G6 1568 #define NOTE_GS6 1661 #define NOTE_A6 1760 #define NOTE_AS6 1865 #define NOTE_B6 1976 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_DS7 2489 #define NOTE_E7 2637 #define NOTE_F7 2794 #define NOTE_FS7 2960 #define NOTE_G7 3136 #define NOTE_GS7 3322 #define NOTE_A7 3520 #define NOTE_AS7 3729 #define NOTE_B7 3951 #define NOTE_C8 4186 #define NOTE_CS8 4435 #define NOTE_D8 4699 #define NOTE_DS8 4978 Ora sarà sufficiente scrivere il nostro programma: #include "pitches.h" int pinbuzz = 8; int pintasto = 2; int melodia[] = {NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3, NOTE_B3, NOTE_C4}; int tempo[] = {4, 8, 8, 4, 4, 4, 4, 4 } int nr = 8; void setup() { pinMode(pintasto, INPUT); } void loop() { if(digitalRead(pintasto)) { for (int numero = 0; numero < nr; numero++) { int duratanota = 1000 / tempo[numero]; tone(pinbuzz, melodia[numero], duratanota); delay(duratanota * 1.30) noTone(pinbuzz); } delay(50); } } Come potete vedere ho creato due array, uno dove vado a scrivere la melodia mentre l'altro con la durata delle note... e poi ho aggiunto il numero corrispondente alle note da eseguire. Ora il nostro programma non fa altro che aspettare la pressione del pulsante per eseguire la melodia. Nell'array ho fatto in modo da dover iserire il valore reali 1 = 4/4, 2 = 1/2, 4 = 1/4, ecc, in seguito ho reato un'altra variabile dove viene calcolato il tempo in millisecondi. Buon divertimento nel modificare questo semplice programma! Modificato 8 Dicembre 2012 da RyujiAndy Link al commento Condividi su altri siti Altre opzioni di condivisione...
ManuelX Inviato 8 Dicembre 2012 Condividi Inviato 8 Dicembre 2012 Ma così facendo posso crearmi un mini synth o sbaglio? Link al commento Condividi su altri siti Altre opzioni di condivisione...
RyujiAndy Inviato 8 Dicembre 2012 Autore Condividi Inviato 8 Dicembre 2012 (modificato) un sintetizzatore è in grado di riprodurre più di una frequenza contemporaneamente cosa che qui non avviene, o si utilizza più di un pin e poi si mixano i segnali o dobbiamo passare ad arduino due, infatti possiede due uscite analogiche. Modificato 8 Dicembre 2012 da RyujiAndy Link al commento Condividi su altri siti Altre opzioni di condivisione...
ManuelX Inviato 9 Dicembre 2012 Condividi Inviato 9 Dicembre 2012 un sintetizzatore è in grado di riprodurre più di una frequenza contemporaneamente cosa che qui non avviene, o si utilizza più di un pin e poi si mixano i segnali o dobbiamo passare ad arduino due, infatti possiede due uscite analogiche. Capisco Grazie Andy asd Link al commento Condividi su altri siti Altre opzioni di condivisione...
busbunny Inviato 21 Febbraio 2014 Condividi Inviato 21 Febbraio 2014 ahh finalmente ho trovato l'argomento giusto per me XD Link al commento Condividi su altri siti Altre opzioni di condivisione...
Messaggi raccomandati
Crea un account o accedi per lasciare un commento
Devi essere un membro per lasciare un commento
Crea un account
Iscriviti per un nuovo account nella nostra community. È facile!
Registra un nuovo accountAccedi
Sei già registrato? Accedi qui.
Accedi Ora