Testiamo il sensore TCS3200 in un circuito con l’utilizzo di un modulo audio JQ6500: il colore riconosciuto dal sensore sarà poi pronunciato tramite un modulo audio e mostrato tramite l’accessione di un led RGB.
Altri sensori di luce possono essere trovati in questo articolo Panoramica dei moduli sensori di luce
Indice
TCS3200 Sensore di colore – Descrizione
Il sensore di colore TCS3200 è un convertitore colore 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.
La frequenza a fondo scala in uscita può essere regolata su uno dei tre valori preimpostati disponibili tramite due piedini dell’ingresso di controllo.
Gli ingressi digitali e l’uscita digitale permettono di interfacciarlo direttamente ad Arduino o ad altri circuiti logici. I piedini S2 e S3 sono usati per selezionare quale gruppo di fotodiodi (rosso, verde, blu, chiaro) sono attivi.
Specifiche tecniche
- Chip: TCS3200
- Alimentazione: da 3 Vdc a 5 Vdc
- Uscita a livello TTL: 0 – 5 V
- Distanza di rilevamento: 10 mm
- Dimensioni (mm): 28x24x18
Dove trovare il sensore
Il sensore utilizzato nell’articolo è prodotto dalla SUNFOUNDER, ma come riportato nel paragrafo precedente, il sensore di colore TCS3200 è stato implementato in moduli prodotti da altre aziende.
Uno di questi è il modulo codice HMTTCS3200 che può essere acquistato presso il sito Homotix, il suo costo al momento della pubblicazione di questo articolo è di circa 12€.
Se al momento dell’ordine inserirete il codice sconto dedicato agli utenti del sito adrirobot avrete diritto ad uno sconto.
Descrizione del progetto
In questo progetto utilizzeremo una scheda Arduino UNO R3 (originale o clone), a cui collegheremo il sensore di colore TCS3200, un modulo JQ6500 e un modulo KY-009 RGB full color LED SMD, alcune resistenze limitatrici, questi ultimi componenti saranno montati su una piccola breadboard.
Per i collegamenti si useranno dei cavetti colorati di tipo maschi/maschio e maschio/femmina a seconda dei pin a cui sono da collegare.
Scheda Arduino UNO
La scheda Arduino Uno è una scheda microcontrollore basato sul processore Atmega328. Dispone di 14 ingressi/uscita digitali (di cui 6 possono essere utilizzate come uscite PWM), 6 ingressi analogici, come oscillatore è utilizzato un risuonatore da 16 MHz.
Sono disponibili: un collegamento USB, un jack di alimentazione, un header ICSP, e un pulsante di reset.
Esso contiene tutto il necessario per utilizzare il microcontrollore, è sufficiente collegarsi a un computer con un cavo USB (l’alimentazione può essere derivata alla presa USB) oppure alimentare con un adattatore AC-DC oppure tramite batteria per iniziare.
Modulo JQ6500
Per dare voce ad Arduino viene utilizzato un modulo JQ6500 in grado di riprodurre file wav mono o stereo standard,
N° Pin | Nome Pin | Funzione | Nota |
---|---|---|---|
1 | K1 | Esecuzione primo file | Portare a GND per mandare in esecuzione |
2 | K2 | Esecuzione secondo file | Portare a GND per mandare in esecuzione |
3 | K3 | Esecuzione terzo file | Portare a GND per mandare in esecuzione |
4 | K4 | Esecuzione quarto file | Portare a GND per mandare in esecuzione |
5 | K5 | Esecuzione quinto file | Portare a GND per mandare in esecuzione |
6 | SGND | Massa | Terminale di massa |
7 | ADKEY | Porta AD | |
8 | BUSY | Modulo in Play | Livello alto quando c'è l'uscita audio (led acceso) |
Livello basso quando non c'è nessuna uscita audio | |||
9 | RX | Ricezione dati seriale UART | |
10 | TX | Trasmissione dati seriale UART | |
11 | GND | Terminale di massa | Massa alimentazione |
12 | DC-5V | ingresso di alimentazione del modulo | La tensione non può superare 5.2V |
13 | ADC_R | canale destro | Uscita amplificatore cuffie |
14 | ADC_L | canale sinistro | |
15 | SPK- | - altoparlante | Amplificatore altoparlanti a trasmissione diretta < 1W / 8Ω |
16 | SPK+ | + altoparlante |
Per controllare la riproduzione dei brani viene utilizzato un protocollo di comunicazione seriale.
Il modulo JQ6500-16P dispone di una memoria flash da 16Mbit, per la programmazione è presente sul modulo una porta micro-USB, il programma di gestione è direttamente presente nella memoria del modulo.
Alcune caratteristiche
- Supporto frequenza di campionamento (KHz): 8 / 11,025 / 12/16 / 22.05 / 24/32 / 44,1 / 48
- Uscita DAC a 24 bit; dinamica 90dB ; SNR 85dB
- Supporto file system FAT16, FAT32
- Una varietà di modalità di controllo: modalità seriale, modalità di controllo tramite tasti
- Supporta l’annuncio inter-cut mettendo in pausa la musica di sottofondo in corso
- Classificazione dei dati audio in base alla cartella; supporta fino a 100 cartelle con ogni cartella assegnata a 1000 brani
- Livello di volume regolabile con 30 valori, 10 tipi di equalizzazione.
- Flash SPI esterno se collegato al computer, in grado di visualizzare flash drive SPI per aggiornare il contenuto
- Riproduzione della musica attraverso il controllo tramite linea seriale con Micro controller
- Nella modalità di gestione a pulsanti, è possibile scegliere modalità di play.
KY-009 RGB full color LED Module
Il modulo KY-009 RGB full color LED , si presenta come una piccolo circuito che misura 18,5 millimetri x 15mm, su di esso è montato un LED RGB tipo 5050 SMD e un connettore a 4 pin.
Il LED può emette una ampia gamma di colori mescolando rosso, verde e blu. La quantità di ciascun colore primario può venire regolata tramite un pilotaggio di tipo PWM.
Mini breadboard
La Mini breadboard utilizzata misura 4.5 x 3.5 cm su cui sono presenti 170 punti di collegamento e una base autoadesiva che la rende ideale per applicazioni in spazi ristretti. La si può trovare in 5 diversi colori (verde, bianco, blu, nero, rosso).
Riassunto materiale necessario
Schema dei collegamenti
Listato del programma
Segue lo Sketch del programma, per la gestione del sensore di colore TCS3200 e del modulo audio JQ6500.
Per il suo funzionamento occorre che sia stata caricata la libreria per la gestione del modulo JQ6500. Per le istruzioni riferirsi al relativo articolo.
All’interno del modulo si dovranno caricare i relativi file audio.
Una volta lanciato il programma, quando si mostrerà la superficie colorata al sensore, il modulo KY-009 RGB full color LED riprodurrà il colore riconosciuto mentre l’altoparlante comunicherà a voce il valore.
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 |
#include <Arduino.h> #include <SoftwareSerial.h> #include <JQ6500_Serial.h> //Pin color sensor const int out = 2; const int s0 = 3; const int s1 = 4; const int s2 = 5; const int s3 = 6; // LED pins connected to Arduino int redLed = 8; int greenLed = 9; int blueLed = 10; // Pin di comunicazione con modulo JQ6500 int TX = 12; int RX = 11; // Variables int red = 0; int green = 0; int blue = 0; // Impostazione modulo JQ6500 JQ6500_Serial mp3(TX, RX); void setup() { Serial.begin(9600); pinMode(s0, OUTPUT); pinMode(s1, OUTPUT); pinMode(s2, OUTPUT); pinMode(s3, OUTPUT); pinMode(out, INPUT); pinMode(redLed, OUTPUT); pinMode(greenLed, OUTPUT); pinMode(blueLed, OUTPUT); mp3.begin(9600); mp3.reset(); mp3.setVolume(30); mp3.setLoopMode(MP3_LOOP_NONE); digitalWrite(s0, HIGH); digitalWrite(s1, HIGH); } void loop() { color(); Serial.print("R Intensity:"); Serial.print(red, DEC); Serial.print(" G Intensity: "); Serial.print(green, DEC); Serial.print(" B Intensity : "); Serial.print(blue, DEC); //Serial.println(); if (red < blue && red < green && red < 20) { Serial.println(" - (Red Color)"); digitalWrite(redLed, HIGH); // Accendo Led Rosso digitalWrite(greenLed, LOW); digitalWrite(blueLed, LOW); mp3.playFileByIndexNumber(2); //Frase LED ROSSO delay (1000); } else if (blue < red && blue < green) { Serial.println(" - (Blue Color)"); digitalWrite(redLed, LOW); digitalWrite(greenLed, LOW); digitalWrite(blueLed, HIGH); // Accende Led Blu mp3.playFileByIndexNumber(3); //Frase LED BLU delay (1000); } else if (green < red && green < blue) { Serial.println(" - (Green Color)"); digitalWrite(redLed, LOW); digitalWrite(greenLed, HIGH); // Accende Led Verde digitalWrite(blueLed, LOW); mp3.playFileByIndexNumber(1); //Frase LED VERDE delay (1000); } else { Serial.println(); } delay(300); digitalWrite(redLed, LOW); digitalWrite(greenLed, LOW); digitalWrite(blueLed, LOW); } 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 DFPalyer Mini
E’ disponibile lo stesso progetto che utilizza però un diverso modulo audio, in questo caso il DFPlayer Mini.
Vedere articolo Riconoscimento colori con TCS3200 e DFPlayer mini