In un precedente articolo si è utilizzato il sensore TCS3200 per il riconoscimento dei colori (vedere TCS3200 sensore colore – Caratteristiche).
Il progetto qui illustrato permette di riconoscere i colori primari e di comunicare tramite i file audio registrati nella memoria Mini SD il colore trovato tramite un alktoparlante.
Indice
TCS3200 Sensore di colore – Descrizione
Il sensore di colore TCS3200 è un convertitore luce-frequenza, è composto da 16 fotodiodi con filtri blu, 16 con filtri verdi, 16 con filtri rossi e 16 non filtrati. Tutti i fotodiodi dello stesso colore sono collegati in parallelo. Quando un oggetto è posto frontalmente al modulo, ad una distanza non superiore a 10 mm, questo viene illuminato dai 4 LED bianchi e la luce riflessa andrà a colpire i 64 fotodiodi, ottenendo in uscita un’onda quadra (Duty cycle 50%) con una frequenza direttamente proporzionale all’intensità della luce riflessa.
Informazioni più approfondite sul sensore possono essere trovate nell’articolo TCS3200 sensore colore – Caratteristiche
Foto del modulo prodotto dalla SUNFOUNDER
Altri modelli di sensore
Il sensore di colore TCS3200 per il riconoscimento colori è stato utilizzato da altri produttori per creare i propri moduli. Sotto sono riportate alcune versioni
Dove trovare il sensore TCS3200
Il sensore utilizzato nell’articolo è prodotto dalla SUNFOUNDER, ma come riportato nel paragrafo precedente, il sensore di colore TCS3200 è stato implementato in modulo prodotto da altre aziende.
Uno di questi è il modulo che può essere acquistato presso il sito Homotix, codice prodotto HMTTCS3200., oppure codice HMTTCS3200P.
Il sensore può essere trovato anche presso il sito FUTURA ELETTRONICA, il codice prodotto è 2846-SENSORECOLORE2.
Esempio di utilizzo del sensore
Per l’applicazione mostrata in questo articolo collegheremo il sensore TCS3200, tramite il circuito mostrato in seguito, utilizzeremo una scheda Arduino UNO (originale o clone), a cui collegheremo il sensore TCS3200, un modulo DFPlayer Mini e un led RGB tipo WS2812 .
Sono inoltre necessari: una resistenza da 1KΩ, una breadboard e dei cavetti colorati di tipo M/M-M/F a seconda dei pin a cui sono da collegare.
Per ulteriori informazioni vedere gli articoli DFPlayer Mini Riproduttore MP3 per Arduino e WS2812B LED RGB a controllo digitale
Riassunto materiale necessario
Scheda Arduino UNO | TCS3200 sensore colore |
Modulo DFPlayer Mini | Led RGB WS2812B |
Cavi colorati M/M M/F | Breadboard |
Resistenze | Altoparlante 8 Ω 0,5 W |
1 x 1KΩ (marrone , nero, rosso) |
Descrizione del Led WS2812B
La presenza del chip interno, permette ai led RGB tipo WS2812B di essere programmati per emettere diversi colori tramite un protocollo ad 1 bit. Per il pilotaggio sono utilizzati solo 3 pin, due per l’alimentazione (+5V e GND) e uno per la programmazione.
Con questi led è possibile accendere con differenti colori, per esempio, delle strisce di led formate da uno sino a 500 led contemporaneamente (frequenza di trasmissione dei dati 400 kHz). L’unico limite sono le resistenze dei fili che portano l’alimentazione e la velocità con cui vogliamo cambiare i colori dei led.
Per altre informazioni vedere l’articolo WS2812B LED RGB a controllo digitale
Descrizione modulo DFPLayer Mini
In rete è presente la pagina wiki che riporta tutte le principali informazioni che permettono di utilizzare in modo semplice il lettore proposto. Nell’immagine sottostante è riportato il pinout, che come visibile, dispone di 16 pin di connessione; i pin sono inerenti l’alimentazione, il collegamento dello speaker e dei pulsanti con cui inviare comandi al DFPlayer mini per lavorare anche senza un microcontrollore. Sono poi presenti i pin RX-TX per la gestione da microcontrollore esterno.
Per altre informazioni vedere l’articolo DFPlayer Mini Riproduttore MP3 per Arduino
Caratteristiche
- Frequenze di campionamento supportate (kHz): 8 / 11.025 / 12/16 / 22.05 / 24/32 / 44.1 / 48
- Uscita DAC a 24 bit, supporto per gamma dinamica 90 dB, supporto SNR 85 dB
- Supporta pienamente FAT16, file system FAT32, supporto massimo 32G della scheda TF, supporto 32G di disco U, 64M byte NORFLASH
- Vasta varietà di modalità di controllo, modalità di controllo I/O, modalità seriale, modalità di controllo tramite pulsanti
- Funzione di attesa sonora pubblicitaria, la musica può essere sospesa. quando la pubblicità è finita la musica continua
- Dati audio ordinati per cartella, supporta fino a 100 cartelle, ogni cartella può contenere fino a 255 canzoni
- 30 livelli di volume regolabile, 6 livelli EQ regolabili
Schema dei collegamenti
Collegamento dei componenti tra Scheda Arduino e breadboard
Dettaglio modulo DFPLayer Mini
Dettaglio led WS2812B
Listato del programma
Segue lo Sketch del programma per utilizzare il TCS3200 per il riconoscimento dei colori.
Per il suo corretto funzionamento occorre che siano caricate le opportune librerie: per la gestione del modulo DFPlayer Mini e per la gestione del led RGB WS2812B.
Per la gestione del sensore non occorrono librerie.
1 2 3 4 |
#include <Arduino.h> #include "SoftwareSerial.h" #include "DFRobotDFPlayerMini.h" #include <Adafruit_NeoPixel.h> |
Le librerie Arduino.h, SoftwareSerial.h sono già presenti nell’IDE, le altre sono: Adafruit NeoPixel e DFRobotDFPalyerMini
Per vedere come caricare una libreria si faccia riferimento all’articolo Arduino – Tutorial, come installare una libreria.
All’interno del modulo si dovranno caricare i relativi file audio, utilizzando una microSD, formattata in formato FAT16 o FAT32 della dimensione massima di 32G. I file da caricare sono in formato WAV.
Una volta lanciato il programma, quando si mostrerà la superficie colorata al sensore, il led RGB GB WS2812B riprodurrà il colore riconosciuto mentre l’altoparlante lo comunicherà a voce.
In questa demo il programma è impostato per tre colori primari: rosso, verde e blu.
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 |
#include <Arduino.h> #include "SoftwareSerial.h" #include "DFRobotDFPlayerMini.h" #include <Adafruit_NeoPixel.h> //Pin color sensor const int s0 = 2; const int s1 = 3; const int s2 = 4; const int s3 = 5; const int out = 6; // Pin di comunicazione con modulo DFPlayer Mini int TX = 12; //Collegato al pin 3-TX del DFPlayer mini int RX = 11; //Collegato al pin 2-RX del DFPlayer mini // Variables int red = 0; int green = 0; int blue = 0; // Impostazione modulo DFPlayer mini SoftwareSerial ss(RX, TX); //RX, TX DFRobotDFPlayerMini mp3; //IMPOSTAZIONE LED RGB int PIN_RGB = 7; // LED rgb Adafruit_NeoPixel pixels(1, PIN_RGB, NEO_GRB + NEO_KHZ800); void setup() { Serial.begin(9600); pinMode(s0, OUTPUT); pinMode(s1, OUTPUT); pinMode(s2, OUTPUT); pinMode(s3, OUTPUT); pinMode(out, INPUT); ss.begin(9600); Serial.begin(9600); delay(500); if (!mp3.begin(ss)) { Serial.println("Errore mp3"); for (;;); } mp3.volume(15); pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED) digitalWrite(s0, HIGH); digitalWrite(s1, HIGH); } void loop() { pixels.clear(); // Set all pixel colors to 'off' color(); Serial.print("R Intensità:"); Serial.print(red, DEC); Serial.print(" G Intensità: "); Serial.print(green, DEC); Serial.print(" B Intensità : "); Serial.print(blue, DEC); if (red < blue && red < green && red < 20) { pixels.setPixelColor(0, pixels.Color(255, 0, 0)); pixels.show(); delay (500); Serial.println(" - (Colore ROSSO)"); mp3.play(2); //Frase Colore ROSSO delay (2000); } else if (blue < red && blue < green) { pixels.setPixelColor(0, pixels.Color(0, 0, 255)); pixels.show(); Serial.println(" - (Colore BLU)"); delay (500); mp3.play(3); //Frase Colore BLU delay (2000); } else if (green < red && green < blue) { pixels.setPixelColor(0, pixels.Color(0, 255, 0)); pixels.show(); Serial.println(" - (Colore VERDE)"); delay (500); mp3.play(1); //Frase Colore VERDE delay (2000); } else { Serial.println(); } delay(500); } void color() { digitalWrite(s2, LOW); digitalWrite(s3, LOW); //count OUT, pRed, RED red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); digitalWrite(s3, HIGH); //count OUT, pBLUE, BLUE blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); digitalWrite(s2, HIGH); //count OUT, pGreen, GREEN green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); } |
Filmato che mostra il funzionamento del programma
Versione con modulo audio JQ6500
E’ disponibile lo stesso progetto che utilizza però un diverso modulo audio, in questo caso il JQ6500.
Nel progetto una volta riconosciuto il colore, viene acceso opportunamente un led RGB e si comunica a voce tramite i file audio registrati su un modulo JQ6500 il colore trovato.
Vedere articolo Sensore colore TCS3200 e modulo audio JQ6500