In precedenti articoli, sono stati descritti un anello con 16 led RGB a comando digitale e in modulo con un pulsante di navigazione tattile a 5 direzioni.
Vediamo ora un esempio di utilizzo dei due dispositivi
Indice
Descrizione dei Componenti utilizzati
Anello RGB LED
Anello a tecnologia NeoPixel con 16 diodi LED RGB tipo WS2812B che possono essere gestiti individualmente. Ognuno può produrre 256 tonalità del proprio colore, determinando un totale di 16.777.216 colori.
Il canale dati per la comunicazione è seriale di tipo One-Wire e può essere controllato con microcontrollori come Arduino, PIC, Mbed, ecc.
È possibile impostare a piacimento la frequenza di refresh, in modo da rendere impercettibili determinati giochi di luce. E’ anche possibile collegare più anelli in cascata per realizzare vari effetti.
L’alimentazione è di 5V.
Specifiche tecniche
Sigla: WCMCU-WS2812B-16 (CJMCU-WS2812B-16)
Numero di LED: 16
Colori di base: rosso, verde blu (risoluzione RGB a 24 bit)
Modello chip LED: SMD5050
Alimentazione: CC
Tipo di LED: SMD
Numero modello: chip LED WS2812b
Tensione: 4 V-7 V CC
Consumo energetico massimo (W): 0,24 W x 16 = 3,84 W
Dimensioni: ∅ esterno 68 mm , ∅ interno 54 mm , Spessore 3,1 mm.
Peso: 5,9 g
Per altre informazioni vedere l’articolo Anello con 16 led RGB a comando digitale
Pulsante di navigazione a 5 direzioni
Modulo di piccole dimensioni , circa 4×2,5 cm su sono presenti:
- un pulsante di navigazione tattile a 5 direzioni: clic su, giù, sinistro, destro e “seleziona” ottenuto premendo verso il basso;
- Due pulsanti (con serigrafia SET e RST) configurabili dall’utente;
- Pin strip a 8 poli per il collegamento;
Caratteristiche
- Nome: Modulo pulsante di navigazione a cinque direzioni
- Numero di I/O: 7
- Tensione di esercizio: 2,0 ÷ 9,0 V
- Dimensioni: 25 x 41mm
- Temperatura di esercizio: -40 ÷ +85 °C
Per altre informazioni vedere l’articolo Pulsante di navigazione a 5 direzioni
Video relativo al progetto
Materiale occorrente
Vediamo prima di tutto il materiale occorrente:
- La scheda Arduino UNO o sul clone, in questo caso, è stata utilizzata una scheda Keyestudio PLUS. Completamente compatibile con l’ambiente di sviluppo Arduino IDE. Contiene tutte le funzioni della scheda Arduino UNO R3 e alcuni miglioramenti che ne rafforzano notevolmente la funzione;
- Un modulo pulsante di navigazione a cinque direzioni;
- Un Anello con 16 led RGB tipo WS2812;
- n° 8 cavi con intestazioni Femmina/Maschio.
Scheda Keyestudio PLUS | |
Anello con 16 led RGB tipo WS2812 | Cavi di collegamento |
Dove trovare il materiale
Anello con 16 led RGB tipo WS2812
Il componente potrà essere acquistato su vari siti online.
Presso il sito Homotix, NeoPixel WS2812 5050 RGB 16 LED codice DLS0281216D
Altra possibilità è presso il sito Futura Elettronica, Anello con 16 LED RGB WS2812 e driver integrato codice 2846-RING16NEOPIXEL
Il led è disponibile anche su modulo singolo, vedere per esempio l’articolo WS2812B LED RGB a controllo digitale.
Modulo Pulsante di navigazione a 5 direzioni
Il modulo potrà essere trovato su vari siti online come: AMAZON, AliExpress
Schema dei collegamenti
Sotto è riportato lo schema dei collegamenti tra l’anello LED RGB e il pulsante tattile.
No. | Pin Arduino | Pin modulo | Anello RGB |
---|---|---|---|
1 | GND | COM | GND |
2 | D8 | UP | |
3 | D7 | DWN | |
4 | D6 | LFT | |
5 | D5 | RHT | |
6 | D4 | MID | |
7 | D3 | SET | |
8 | D2 | RST | |
9 | D9 | DI | |
10 | +5V | +5V | +5V |
Foto del montaggio per il test del modulo per comando anello RGB
Dettaglio del montaggio per il test del modulo per comando anello RGB
Dettaglio dei collegamenti sulla scheda di controllo
Vista dall’alto dei collegamenti sulla scheda di controllo
Libreria di gestione tramite Arduino
Per la gestione del led si utilizzerà la libreria NeoPixel realizzata dalla ditta Adafruit.
Per caricarla si dovrà inserire nel campo ricerca “neopixel” , quando apparirà basterà premere il tasto Installa,
La scritta “INSTALLED” segnalerà l’avvenuta installazione della libreria.
Per maggiori informazioni vedere l’articolo Anello con 16 LED RGB WS2812B
Codice del programma
Sotto è riportato il codice del programma utilizzato. All’interno sono presenti dei commenti che dovrebbero rendere abbastanza semplice comprenderne il funzionamento.
A seconda della direzione in cui è premuto il tasto si accenderanno sull’anello i LED che nei indicheranno visivamente la direzione. Prima del cambiamento del colore dei led, tutti saranno accesi di colore Blu
Se si sposta il tasto tattile verso l’alto si accenderanno 3 led di colore rosso nella parte alta
Premendo il tasto tattile si accenderanno 4 led di colore verde
Nel caso sia premuto il tasto SET si accederanno 5 led di colore magenta sul lato destro, nel caso sia premuto il tasto RST si accederanno 5 led di colore giallo sul lato sinistro.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 | const int buttonPin_RST = 2; // Pin pulsante RST const int buttonPin_SET = 3; // Pin pulsante SET const int buttonPin_MID = 4; // Pin pulsante Centrale const int buttonPin_RHT = 5; // Pin pulsante Destra const int buttonPin_LFT = 6; // Pin pulsante Sinistra const int buttonPin_DWN = 7; // Pin pulsante Giù const int buttonPin_UP = 8; // Pin pulsante Su #include <Adafruit_NeoPixel.h> #ifdef __AVR__ #include <avr/power.h> #endif //Pin a cui è collegato l'anello di led #define PIN 9 // Numero led dell'anello #define NUMPIXELS 16 //Impostazione dei parametri Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); void setup() { //Attiva le resistenze di PULLUP interne pinMode(buttonPin_RST, INPUT_PULLUP); pinMode(buttonPin_SET, INPUT_PULLUP); pinMode(buttonPin_MID, INPUT_PULLUP); pinMode(buttonPin_RHT, INPUT_PULLUP); pinMode(buttonPin_LFT, INPUT_PULLUP); pinMode(buttonPin_DWN, INPUT_PULLUP); pinMode(buttonPin_UP, INPUT_PULLUP); pixels.begin(); // Si inizializza la libreria NeoPixel. pixels.setBrightness(5); //Si regola la luminosità //Accende tutti i led di rosso colorWipe(pixels.Color(255, 0, 0), 50); // rosso } void loop() { if (digitalRead(buttonPin_RST) == LOW) { delay(250); colorWipe(pixels.Color(0, 0, 255), 50); // Blu RST(); while (digitalRead(buttonPin_RST) == LOW); } if (digitalRead(buttonPin_SET) == LOW) { delay(250); colorWipe(pixels.Color(0, 0, 255), 50); // Blu SET(); while (digitalRead(buttonPin_SET) == LOW); } if (digitalRead(buttonPin_MID) == LOW) { delay(250); colorWipe(pixels.Color(0, 0, 255), 50); // Blu MID(); while (digitalRead(buttonPin_MID) == LOW); } if (digitalRead(buttonPin_RHT) == LOW) { delay(250); colorWipe(pixels.Color(0, 0, 255), 50); // Blu RHT(); while (digitalRead(buttonPin_RHT) == LOW); } if (digitalRead(buttonPin_LFT) == LOW) { delay(250); colorWipe(pixels.Color(0, 0, 255), 50); // Blu LFT(); while (digitalRead(buttonPin_LFT) == LOW); } if (digitalRead(buttonPin_DWN) == LOW) { delay(250); colorWipe(pixels.Color(0, 0, 255), 50); // Blu DWN(); while (digitalRead(buttonPin_DWN) == LOW); } if (digitalRead(buttonPin_UP) == LOW) { delay(250); colorWipe(pixels.Color(0, 0, 255), 50); // Blu UP(); while (digitalRead(buttonPin_UP) == LOW); } } void UP() { // Accende 3 led ROSSI in alto pixels.setPixelColor(0, pixels.Color(255, 0, 0)); pixels.setPixelColor(1, pixels.Color(255, 0, 0)); pixels.setPixelColor(2, pixels.Color(255, 0, 0)); pixels.show(); // Aggiorna colore } void RHT() { // Accende 3 led ROSSI a destra pixels.setPixelColor(4, pixels.Color(255, 0, 0)); pixels.setPixelColor(5, pixels.Color(255, 0, 0)); pixels.setPixelColor(6, pixels.Color(255, 0, 0)); pixels.show(); // Aggiorna colore } void DWN() { // Accende 3 led ROSSI in basso pixels.setPixelColor(8, pixels.Color(255, 0, 0)); pixels.setPixelColor(9, pixels.Color(255, 0, 0)); pixels.setPixelColor(10, pixels.Color(255, 0, 0)); pixels.show(); // Aggiorna colore } void LFT() { // Accende 3 led ROSSI a sinistra pixels.setPixelColor(12, pixels.Color(255, 0, 0)); pixels.setPixelColor(13, pixels.Color(255, 0, 0)); pixels.setPixelColor(14, pixels.Color(255, 0, 0)); pixels.show(); // Aggiorna colore } void MID() { //Accende 4 led VERDI pixels.setPixelColor(3, pixels.Color(0, 255, 0)); pixels.setPixelColor(7, pixels.Color(0, 255, 0)); pixels.setPixelColor(11, pixels.Color(0, 255, 0)); pixels.setPixelColor(15, pixels.Color(0, 255, 0)); pixels.show(); // Aggiorna colore } void RST() { //Accende 5 led GIALLI a sinistra pixels.setPixelColor(2, pixels.Color(255, 255, 0)); pixels.setPixelColor(3, pixels.Color(255, 255, 0)); pixels.setPixelColor(4, pixels.Color(255, 255, 0)); pixels.setPixelColor(5, pixels.Color(255, 255, 0)); pixels.setPixelColor(6, pixels.Color(255, 255, 0)); pixels.show(); // Aggiorna colore } void SET() { //Accende 5 led MAGENTA a destra pixels.setPixelColor(10, pixels.Color(255, 0, 255)); pixels.setPixelColor(11, pixels.Color(255, 0, 255)); pixels.setPixelColor(12, pixels.Color(255, 0, 255)); pixels.setPixelColor(13, pixels.Color(255, 0, 255)); pixels.setPixelColor(14, pixels.Color(255, 0, 255)); pixels.show(); // Aggiorna colore } // Riempie uno dopo l'altro i led con un colore void colorWipe(uint32_t c, uint8_t wait) { for (uint16_t i = 0; i < pixels.numPixels(); i++) { pixels.setPixelColor(i, c); pixels.show(); delay(wait); } } |