# Robotica educativa/Musica maestro

Robotica educativa

## Introduzione

* PrerequisitiRobotica educativa/Prerequisiti
* Etica della roboticaRobotica educativa/Etica della robotica

## Robotica con Arduino

* Le basi dell'informaticaRobotica educativa/Le basi dell'informatica
* Le basi dell'elettronicaRobotica educativa/Le basi dell'elettronica

## Primi passi nella robotica

* Invio di un SOSRobotica educativa/Invio di un SOS
* Che tempo che faRobotica educativa/Temperatura e umidità
* TermostatoRobotica educativa/Termostato
* Misurazione della distanzaRobotica educativa/Misurazione della distanza
* Sensore di parcheggioRobotica educativa/Sensore di parcheggio
* Gestione di un servomotoreRobotica educativa/Servomotore
* TelepassRobotica educativa/Telepass
* Dal computer ad ArduinoRobotica educativa/Dal computer ad Arduino
* Musica maestro!Robotica educativa/Musica maestro

## Ora che abbiamo un'idea...

Modifica il sommario
Ora che si sono sperimentate le programmazioni di base la sfida è cimentarsi con un algoritmo più complesso.

## Qui si fa musica

Lo scopo di questo paragrafo è far eseguire una musica ad Arduino una sola volta. Per questo motivo il codice verrà inserito nel setup.
L'obiettivo è fornire un ambiente in cui scrivere musica con una sintassi il più possibile vicina a quella di un musicista. Partiamo da un esempio molto semplice:
Per riprodurre Tanti auguri a te (o qualsiasi altra musica di proprio gusto), saranno necessari tre ingredienti base:
* l'elenco di tutte le note musicali con le rispettive frequenze;
* la musica da riprodurre, che dovrà contenere note e loro durata;
* il programma vero e proprio che eseguirà la canzone.
E, naturalmente, il circuito. Partiamo da quest'ultimo.

## Circuito elettrico

Il circuito è molto più semplice di quel che si possa immaginare. Oltre ad Arduino, utilizza una cicalina piezoelettrica che può essere equipaggiata nel pin 11 e GND.

## Programma principale

Come solito, iniziamo dalla fine, ovvero diamo per scontato di avere note e melodia. In questo caso partiamo dal difficile: la sua riproduzione.
Inizialmente viene calcolato il numero di note presenti nella nella melodia tramite la formula (linea 15):
${\text{notes}}={\frac {\text{sizeof(melody)}}{{\text{sizeof(melody[0])}}\times 2}}$
perché sizeof restituisce la dimensione in byte dell'array. Per il formato int alcuni modelli di Arduino usano 2 byte, altri 4 byte. Pertanto, per ottenere l'esatto numero di note si divide per il numero di byte occupato da un parametro (il primo) e si divide ulteriormente per 2 (nota e sua durata).
A questo punto si calcola la durata (in millisecondi) di una semibreve, ricordando che la variabile tempo – in musica – esprime la durata di una semiminima (linea 18):
${\text{wholenote}}={\frac {\overbrace {60.000~{\text{ms}}} ^{\text{un minuto}}\times 4}{\text{tempo}}}$
Restano due cose da sottolineare:
* il ciclo for viene incrementato a passi di 2, per eseguire l'intera melodia;
* la durata della singola nota è pari a (wholenote) / abs(divider), dove il divisore è la sua durata;
* nel caso il divisore sia negativo si aggiunge un 50% alla sua durata con noteDuration *= 1.5;
* la nota viene quindi eseguita per il 90% del tempo;
* il restante 10% serve a non far percepire come un unico suono note identiche e consecutive.

## Melodia

In un file separato che chiameremo melody.h (così da poter gestire tutte le melodie che si desiderano) verrà inserita la melodia da eseguire. Le regole sono semplici:
* prima le note, nella notazione anglosassone seguite dalla loro ottava. Il do centrale è alla quarta ottava;
* poi la durata. 1 è un intero, 2 una minima, 4 una semiminima, 8 una croma, 16 una semibiscroma e così via. Ecco perché nella riga 29 questo numero va a denominatore.
Riguardo la durata, questa viene espressa come nella notazione musicale dove i valori ammessi sono:
Note musicali :
| Nota | Durata | Valore |
| semibreve | $1/1$ | 1 |
| minima | $1/2$ | 2 |
| semiminima | $1/4$ | 4 |
| croma | $1/8$ | 8 |
| semicroma | $1/16$ | 16 |
| biscroma | $1/32$ | 32 |
| semibiscroma | $1/64$ | 64 |
Come anticipato, se si devono inserire punti di valore (per aumentare la durata della nota della sua metà) è sufficiente inserire il suo valore ma negativo.
Di seguito il codice happy-birthday.h, da inserire nella stessa cartella del codice principale:
Come si vede gli oggetti definiti sono due: tempo, una variabile intera, già utilizzata; e melody. Le parentesi quadre indicano ché è un vettore contenente un numero non definito di elementi.
I commenti servono solo per semplificare la lettura (dividono la melodia in battute).

## Le note musicali

Infine vengono definite le note musicali con le loro frequenze, nel file pitches.h. Le note non utilizzate non occuperanno memoria, quelle utilizzate verranno inserite in forma numerica nel vettore melody.
Le note sono definiti in base al loro nome, alla loro eventuale alterazione (s sta per sharp, in italiano diesis) e alla loro ottava.

## Espansioni suggerite

* Modificare il codice in modo tale che Arduino esegua diverse melodie alla pressione di diversi pulsanti. Questo passaggio è semplice: più impegnativo è far sì che la pressione del pulsante abbia effetto anche durante l'esecuzione della musica.
* Naturalmente Arduino ha un'uscita con potenza sufficiente per essere riprodotto anche nelle cuffie (con una miglior qualità di esecuzione). Se proprio si vuole esagerare è possibile utilizzare le casse del proprio computer: sono pensate per ricevere un segnale molto debole. Il risultato sarà di sicuro effetto e di qualità notevolmente migliore.
* Il codice può essere modificato profondamente se si ricorda che a ogni ottava la frequenza delle note musicali raddoppia, il la centrale ha una frequenza pari a $F_{A4}=440~{\text{Hz}}$, e le note – in un'ottava – sono 12 (sette note e cinque alterazioni), pertanto lo scostamento di frequenza tra una nota e la successiva (o la precedente) è pari a $\Delta F={\sqrt[{12}]{2}}\simeq 1,05946309$. Per un intervallo di un numero qualsiasi di semitoni è sufficiente elevare questa costante al numero di semitoni e si otterranno tutte le note musicali. Per gli amanti degli esponenziali.
* Più complesso: adattare uno xilofono per bambini e far suonare – tramite motori – una serie di melodie prestabilite. Potrebbe diventare un bellissimo regalo per chi ha un bimbo piccolo.