Progettare con Adafruit Circuit Playground Classic: Parte 2

schede di sviluppo

La scheda di sviluppo Adafruit Circuit Playground Classic offre una piattaforma completa dal punto di vista delle funzionalità per poter sviluppare una miriade di progetti embedded. Infatti, grazie alla ricca dotazione di sensoristica e alla presenza di LED RGB è possibile realizzare progetti divertenti e accattivanti semplicemente con la singola scheda. Inoltre, Adafruit ha elaborato differenti shield di espansione per aggiungere ulteriori funzionalità.

Nella prima parte abbiamo osservato come muovere i primi passi con la scheda di sviluppo Adafruit Circuit Playground Classic (Figura 1) andando a realizzare un progetto che utilizza i 10 neopixel, il sensore di temperatura e quello di luminosità. In questo articolo, invece, andremo ad osservare gli altri sensori e periferiche della scheda quali:

  • input capacitivi
  • buzzer o cicalino
Adafruit Circuit Playground Classic

Figura 1: Scheda Adafruit Circuit Playground Classic

Gli input capacitivi

Prima di parlare direttamente degli input capacitivi possiamo effettuare una panoramica generale sul PINOUT delle 14 PADS che sono disponibili lungo la circonferenza della scheda Circuit Playground. In particolare, queste presentano le seguenti funzionalità:

  • 6 PAD dedicate alle alimentazioni: una corrisponde alla VIN, 2 corrispondono alla tensione del micro di 3.3V e infine ci sono 3 PAD connesse a GND
  • 2 PAD (#3 e #4) con le funzionalità I2C dei segnali SCL e SDA
  • 2 PAD (#0 e #1) con le funzionalità UART dei segnali RX e TX
  • 4 PAD con le funzionalità analogiche di ingresso (#6, #9 e #10) e di uscita (#12) come riportato in Figura 2.

Infine, le 8 PAD dedicate ai segnali (dunque #0, #1, #3, #4, #6, #9, #10 e #12) possono essere utilizzate come 8 I/O digitali (GPIO) o anche come 8 ingressi capacitivi grazie alle circuiterie presenti. Per sfruttare la funzionalità di input capacitivi basta semplicemente leggerne il valore facendo ricorso alla funzione di libreria CircuitPlayground.readCap(“numero PADS”) dove il parametro “numero PADS” deve essere sostituito dal valore corrispondente della PAD come riportato in precedenza (dunque sono validi i numeri 0, 1, 3, 4, 6, 9, 10 e 12).

Adafruit Circuit Playground Classic

Figura 2: Indicazione delle funzionalità delle PADS della scheda

Il Buzzer

La scheda Circuit Playground, come già ampiamente detto, è dotata anche di un piccolo buzzer per poter gestire delle notifiche audio. Attraverso questo buzzer possiamo riprodurre anche melodie gestendo opportunamente la frequenza del segnale e la durata della nota musicale. Vi consiglio di leggere l’articolo “Arduino Projects: divertiamoci con le note musicali” che spiega nel dettaglio il principio di funzionamento.

La libreria Adafruit ci aiuta a lavorare anche con il buzzer attraverso la funzione playTone(uint16_t freq, uint16_t time, bool wait = true) dove i parametri sono:

  • freq = frequenza del segnale
  • time = tempo della nota
  • wait= serve per abilitare la pausa

Ogni nota musicale è caratterizzata da una particolare frequenza, mentre tempo e attesa dipendono dalla composizione e dunque dallo spartito musicale. Per il nostro progetto ci limiteremo a suonare le 7 note semplici della scala musicale che presentano le seguenti caratteristiche di frequenza:

  • DO: 262 Hz
  • RE: 294 Hz
  • MI: 330 Hz
  • FA: 349 Hz
  • SOL: 392 Hz
  • LA: 440 Hz
  • SI: 494 Hz

Progetto e Sketch

Unendo le funzionalità degli input capacitivi, del buzzer e dei NeoPixel (che abbiamo utilizzato nella Parte 1) andiamo ora a realizzare uno strumento musicale digitale con il seguente funzionamento: ad ogni nota della scala musicale associamo una PAD di tipo touch e il NeoPixel più vicino ad essa. In tal modo, ogni volta che toccheremo la PAD sentiremo emettere il suono associato alla relativa nota musicale e vedremo accendere il LED NeoPixel corrispondente.

L'associazione nota musicale, PAD e Neo Pixel è la seguente:

  • DO -> PADS touch #3 -> NeoPixel numero 0
  • RE -> PADS touch #2 -> NeoPixel numero 1
  • MI -> PADS touch #0 -> NeoPixel numero 3
  • FA -> PADS touch #1 -> NeoPixel numero 4
  • SOL -> PADS touch #12 -> NeoPixel numero 5
  • LA -> PADS touch #6 -> NeoPixel numero 6
  • SI -> PADS touch #9 -> NeoPixel numero 8

Di seguito, riporto lo sketch completo che potete copiare e incollare all'interno della vostra IDE Arduino per provare lo strumento musicale.

#include <Adafruit_CircuitPlayground.h>

uint16_t time;

//definizione delle frequenze delle note 
#define DO 262
#define RE 294
#define MI 330
#define FA 349
#define SOL 392
#define LA 440 
#define SI 494

//associazione pads touch alle note
#define touch_DO 3
#define touch_RE 2
#define touch_MI 0
#define touch_FA 1
#define touch_SOL 12
#define touch_LA 6 
#define touch_SI 9

//associazione NeoPixel alle note musicali
#define neo_DO 0
#define neo_RE 1
#define neo_MI 3
#define neo_FA 4
#define neo_SOL 5
#define neo_LA 6 
#define neo_SI 8


//funzione di setup
void setup() {
Serial.begin(9600);
CircuitPlayground.begin();

//inizializzo i NeoPixel e configuro un valore di luminosità
CircuitPlayground.clearPixels();
CircuitPlayground.setBrightness(15);

time = 250;

}

void loop() {

if (CircuitPlayground.readCap(touch_DO)>100){
CircuitPlayground.setPixelColor(neo_DO, 0X00FF00);
CircuitPlayground.playTone(DO, time, false);
}
CircuitPlayground.clearPixels();

if (CircuitPlayground.readCap(touch_RE)>100){
CircuitPlayground.setPixelColor(neo_RE, 0X00FF00);
CircuitPlayground.playTone(RE, time, false);
}
CircuitPlayground.clearPixels();

if (CircuitPlayground.readCap(touch_MI)>100){
CircuitPlayground.setPixelColor(neo_MI, 0X00FF00);
CircuitPlayground.playTone(MI, time, false);
}
CircuitPlayground.clearPixels();

if (CircuitPlayground.readCap(touch_FA)>100){
CircuitPlayground.setPixelColor(neo_FA, 0X00FF00);
CircuitPlayground.playTone(FA, time, false);
}
CircuitPlayground.clearPixels();

if (CircuitPlayground.readCap(touch_SOL)>100){
CircuitPlayground.setPixelColor(neo_SOL, 0X00FF00);
CircuitPlayground.playTone(SOL, time, false);
}
CircuitPlayground.clearPixels();

if (CircuitPlayground.readCap(touch_LA)>100){
CircuitPlayground.setPixelColor(neo_LA, 0X00FF00);
CircuitPlayground.playTone(LA, time, false);
}
CircuitPlayground.clearPixels();

if (CircuitPlayground.readCap(touch_SI)>100){
CircuitPlayground.setPixelColor(neo_SI, 0X00FF00);
CircuitPlayground.playTone(SI, time, false);
}
CircuitPlayground.clearPixels();

}

Buzzer per PRO

Abbiamo visto un semplice progetto che utilizza il buzzer in maniera semplificata configurando una frequenza prestabilita (in funzione della nota musicale) e con dei tempi prestabiliti a 250 millisecondi. In realtà, con quel semplice buzzer possiamo realizzare innumerevoli sfumature (per chi volesse approfondire consiglio anche l'articolo "Jukeboxino: scegli il tuo brano con Arduino"). [...]

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2255 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend