ARDUINO COLOR SENSOR TCS230 / TCS3200

Documenti analoghi
I SENSORI DI PROSSIMITA

Per vedere tutti i tutorial:

Per vedere tutti i tutorial:

SENSORI OTTICI - FOTORESISTENZE

5^ parte : Controllare un LED RGB con 3 potenziometri. Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

CORSO ARDUINO. Corso ASEV Giulio Fieramosca Stefano Panichi. Lezione 3 PWM e motori. Stefano Panichi e Giulio Fieramosca

Facciamo lampeggiare un led

FC-51: IR Infrared Obstacle Detection Sensor Module 2-30cm

CORSO ARDUINO. Jacopo Belli Giulio Fieramosca Luca Mattii GOLEM Jacopo Belli Giulio Fieramosca Luca Mattii

INSEGUITORE SOLARE CON ARDUINO. Dispositivo che insegue il movimento solare realizzato con: 1. Arduino 2. 2 foto resistenze 3.

Far lampeggiare un led o forse un semaforo?

8^ parte: Pilotare Motori passo-passo unipolari usando l integrato ULN2003A. Author: Ing. Sebastiano Giannitto (ITIS M.

Corso Arduino Maggio Riccardo Binetti Lezione 2 - Il calore dell analogico

STRUTTURE DI CONTROLLO DEL C++

CORSO ARDUINO. Corso ASEV Giulio Fieramosca Stefano Panichi. Stefano Panichi e Giulio Fieramosca

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

14^ parte : Sensore a ultrasuoni HC SR04 e Arduino. Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

N.B: Clicca qui per scaricare il file.zip con tutti gli sketch utilizzati per realizzare la faccia robotica.

Robot Beginner Kit con Arduino l elettronica

PRIMI PASSI CON ARDUINO

6^ parte : Acquisizione della temperatura con LM35. Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

TM1638 BOARD con ARDUINO

Corso di programmazione Arduino DI MALVEZZI DAVIDE

Corso Base Arduino ed Elettronica

Radar con Arduino. da Emanuele Lovera - Blogger

Arduino Tutorial #7 - Nunchuk materiale utilizzato Arduino, cavi elettrici, breadboard, nunchuk, 3 led.

ACCENDERE E SPEGNERE UN DIODO LED

Per controllare un motore DC (funzionante in corrente continua) con Arduino, devi utilizzare il circuito integrato Ponte H (nel mio caso un L293NE

Tipologie dei dati nell SDK di Arduino come in un vero LP ad alto livello :

E labirinto cronaca di un fallimento

In questo tutorial decodificheremo i segnali provenienti da un telecomando qualsiasi e utilizzeremo gli stessi segnali per comandare Arduino a

HP LED Driver Shield. EtherMania di Signorini Marco Via Cadore MALNATE (VA) P.I REA VA

Display numerico con i LED

8^ parte : Come pilotare i motori passo-passo unipolari. Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

ARDUINO. Colleghiamolo al PC/MAC - FUNZIONA?

CTU Presenta. Contest Automation con Arduino. IK0XBX - Francesco

Robot Beginner Kit 4WD

Arduino& Potenziometro

FONDAMENTI DI ARDUINO

byte Fase1 = 5; byte Fase2 = 6; byte Fase3 = 7; byte Fase4 = 8; int Ritardo = 15 ; puntatore! // sono equivalenti le sintassi:

CORSO ARDUINO. Jacopo Belli Giulio Fieramosca Luca Mattii GOLEM Jacopo Belli Giulio Fieramosca Luca Mattii

Macchina con Arduino Uno comandata tramite dispositivo Android e sensore ultrasuoni per fermarsi istantaneamente di fronte ad un ostacolo

Telecontrollo escavatore LEGO con board Arduino

Il Theremin con il microcontrollore

Progetto Arduino BART. Corso di Sistemi RT Prof. Davide Brugali Università degli Studi di Bergamo

QUADRO DI CONTROLLO AMBIENTALE

Progetto Esami Di Stato Anno 2014/2015

Relazione progetto Arduino

L abc di Arduino. Rocco Pelosi, Gianluca Palù, Davide Lodi Rizzini 24 febbraio 2016

Sensori di Prossimità Guida Utente


Realizzate il circuito come indicato nello schema seguente:

La Keyes 4 relay non è proprio una shield nel senso classico definito nel mondo arduino in quanto una shield dovrebbe essere concepita per essere

SENSORE AD ULTRASUONI HC-SR04 E ARDUINO

Relazione attività di laboratorio - Arduino

Corso di Fondamenti di Informatica (M-Z) Prof. Aldo Franco Dragoni. Prova Scritta 19 aprile 2007

CONTASECONDI CON DISPLAY A 7 SEGMENTI ARDUINO LIKE

ELECTRONICS LAB [WITH ARDUINO]

IL PROGETTO «TELECOMANDO» (sensore ad infrarossi)

AUTOMAZIONE CANCELLO SCORREVOLE A MICROCONTROLLORE con ARDUINO

Introduzione a Arduino

Quindi dopo aver collegato tutto avremo qualcosa di simile:

CORSO ARDUINO. Corso ASEV Giulio Fieramosca Stefano Panichi. Stefano Panichi e Giulio Fieramosca

Esercitazione Controllo di un motore DC mediante Arduino YUN

Corso Base Arduino ed Elettronica

Arduino. Laboratorio Arduino Base. HackLab Terni. Laboratorio aperto a tutti di elettronica, scienza e arte. hacklabterni.

11^ parte : Come gestire i servomotori con Arduino. Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

Programmatore Serie PRO

Sommario. 4 Download e installazione. 6 Come sono organizzati i progetti 7 Il prato magico. 21 Lo stagno. 23 In fondo al mare

Relazione progetto Arduino

Radar e Sistema di Puntamento con Arduino e Processing

2. Algoritmi e Programmi

Laboratorio Arduino seconda lezione Pietro Bonora - L.S. Sabin - Bologna

Controllo di una soglia analogica

Lab 10 Passaggio per riferimento

RELAZIONE DELLA PROVA DI LABORATORIO DI INFORMATICA

My First Robot. My First Robot. I m Learning Robotics. 1 Scarica l ultima versione della Arduino IDE (

A. CREARE E DETTAGLIARE UNA SUPERFICIE

La piattaforma hardware e software Arduino: parte II. Corso di autoapprendimento

Università degli studi di Roma LA SAPIENZA

Laboratorio di Elettronica. Arduino Lezione 1 Descrizione della board e installazione

Arduino L'elettronica Open Source!

Relazione Tecnica Sensore di Temperatura con interfacciamento microcontroller Arduino 1.3

Ultrasonic Sensor Block

Arduino MaxMSP Tutorial #3 - Arduino MaxMSP Play Sound Materiale utilizzato Arduino Uno, sensore (uno qualsiasi)

CORSO ARDUINO. Giulio Fieramosca Stefano Panichi. Corsi GOLEM 2014

8^ parte : Pilotare Motori passo-passo bipolari usando l integrato L298N. Author: Ing. Sebastiano Giannitto (ITIS M.

ELECTRONICS LAB [WITH ARDUINO]

Creazione di funzioni utente (UDF)

I Circuiti combinatori: LOGISIM

ARDUINO. Ing. Francesco Giurlanda

In questo nuovo fascicolo ZAKINPROGRESS COMPONENTI

Uno scenario IoT Maker Faire Rome, ott Internet of Things Duilio Peroni Alessandro Saracino

Tesina di Maturità. Gianfriddo Giuseppe Classe: 5^B I.T.I.S Indirizzo: Elettronica ed elettrotecnica Anno: 2014/15. Autore: Gianfriddo Giuseppe

Advanced Scratch: Gatto Raccogli Stelle

Transcript:

ARDUINO COLOR SENSOR TCS230 / TCS3200 Per imparare come rilevare i colori utilizzando il sensore di colore TCS3200 o il TCS230, si può guardare il seguente video: https://www.youtube.com/watch?v=cpuxxuyd9xw dal sito. http://howtomechatronics.com/tutorials/arduino/arduinocolor-sensing-tutorial-tcs230-tcs3200-color-sensor/

FUNZIONAMENTO DEL SENSORE DI COLORE TCS3200 /TCS230 Il TCS230 rileva un colore con l'aiuto di una matrice 8 x 8 di fotodiodi. Quindi utilizzando un convertitore corrente-frequenza le letture dei fotodiodi sono convertiti in un'onda quadra con una frequenza direttamente proporzionale all'intensità della luce. Infine, utilizzando la scheda Arduino possiamo leggere l'output dell onda quadra e ottenere i risultati per il colore. I fotodiodi hanno tre diversi filtri di colore. Sedici di loro hanno filtri rossi, un altro 16 hanno filtri verdi, altri 16 hanno filtri blu e gli altri 16 fotodiodi sono chiari senza filtri.

Ciascuno dei 16 fotodiodi sono collegati in parallelo, così utilizzando i due pin di controllo S2 e S3 possiamo selezionare quale di essi verràletto. Così, per esempio, se vogliamo rilevareil colore rosso, è sufficiente utilizzare i 16 fotodiodi rossi filtrati settando i due pin al livello logico low in base alla seguente tabella.

Il sensore ha due pin di controllo, S0 e S1 che vengono utilizzati per scalare la frequenza di uscita. La frequenza può essere scalata a tre diversi valori preimpostati del 100%, 20% o 2%. Questa funzione di frequenzy-scaling permette di ottimizzare l'uscita del sensore per vari contatori di frequenza o microcontrollori. Come collegare il sensore TCS230

DESCRIZIONE DEL CODICE Prima bisogna definire i pin a cui è collegato il sensore e definire una variabile per leggere la frequenza. Nella sezione di setup abbiamo bisogno di definire i quattro pin di controllo come uscite e l'uscita del sensore come input di Arduino. Qui abbiamo anche bisogno di impostare la frequenza-scaling, per questo esempio impostiamo il 20%, e avviamo la comunicazione seriale per la visualizzazione dei risultati nel monitor seriale Nella sezione loop, si inizierà con la lettura dei fotodiodi rossi filtrati. Per questo scopo imposteremo i due pin di controllo S2 e S3 a livello logico basso. Quindi, utilizzando la funzione "pulsein ()" leggeremo la frequenza di uscita che verrà posta nella variabile "frequency". Utilizzando la funzione Serial.print () verrà stampato il risultato sul monitor seriale. La stessa procedura vale per gli altri due colori, abbiamo solo bisogno di regolare i pin di controllo per il colore appropriato secondo la precedente tabella.

IL CODICE #define S0 4 #define S1 5 #define S2 6 #define S3 7 #define sensorout 8 int frequency = 0; void setup() { pinmode(s0, OUTPUT); pinmode(s1, OUTPUT); pinmode(s2, OUTPUT); pinmode(s3, OUTPUT); pinmode(sensorout, INPUT); // Setting frequency-scaling to 20% digitalwrite(s0,high); digitalwrite(s1,low); Serial.begin(9600); }

IL CODICE void loop() { // Setting red filtered photodiodes to be read digitalwrite(s2,low); digitalwrite(s3,low); // Reading the output frequency frequency = pulsein(sensorout, LOW); // Printing the value on the serial monitor Serial.print("R= ");//printing name Serial.print(frequency);//printing RED color frequency Serial.print(" "); delay(100); // Setting Green filtered photodiodes to be read digitalwrite(s2,high); digitalwrite(s3,high); // Reading the output frequency frequency = pulsein(sensorout, LOW); // Printing the value on the serial monitor Serial.print("G= ");//printing name Serial.print(frequency);//printing RED color frequency Serial.print(" "); delay(100);

IL CODICE // Setting Blue filtered photodiodes to be read digitalwrite(s2,low); digitalwrite(s3,high); // Reading the output frequency frequency = pulsein(sensorout, LOW); // Printing the value on the serial monitor Serial.print("B= ");//printing name Serial.print(frequency);//printing RED color frequency Serial.println(" "); delay(100); }

Ora, se apriamo il Serial Monitor si otterranno alcuni valori. Questi valori dipendono dalla frequenza di scala selezionata, nonché dall'illuminazione circostante. Si noti qui che tre valori differiscono a causa della diversa sensibilità di ciascun tipo fotodiodo, come si vede dal diagramma spettrale del datasheet del sensore. Tuttavia, ora vediamo come i valori cambiano vengono portati differenti colori davanti al sensore. Così, per esempio, se portiamo il colore rosso, il valore iniziale scenderà, nel mio caso da 70 a circa 25.

Così se ora vogliamo rappresentare i colori rilevati con un RGB Model, che ha valori da 0 a 255, useremo la funzione della mappa () per mappare o convertire le letture con valori da 0 a 255. // Remaping il valore della frequenza al modello RGB di 0 a 255 frequency = map( frequency, 25, 70, 255, 0 ) ; Il valore di 70 verrà associato a 0, e il valore di 25 a 255. La stessa procedura vale per gli altri due colori. #define S0 4 #define S1 5 #define S2 6 #define S3 7 #define sensorout 8 int frequency = 0; void setup() { pinmode(s0, OUTPUT); pinmode(s1, OUTPUT); pinmode(s2, OUTPUT); pinmode(s3, OUTPUT); pinmode(sensorout, INPUT); // Setting frequency-scaling to 20% digitalwrite(s0,high); digitalwrite(s1,low); Serial.begin(9600); }

void loop() { // Setting red filtered photodiodes to be read digitalwrite(s2,low); digitalwrite(s3,low); // Reading the output frequency frequency = pulsein(sensorout, LOW); //Remaping the value of the frequency to the RGB Model of 0 to 255 frequency = map(frequency, 25,72,255,0); // Printing the value on the serial monitor Serial.print("R= ");//printing name Serial.print(frequency);//printing RED color frequency Serial.print(" "); delay(100); // Setting Green filtered photodiodes to be read digitalwrite(s2,high); digitalwrite(s3,high); // Reading the output frequency frequency = pulsein(sensorout, LOW); //Remaping the value of the frequency to the RGB Model of 0 to 255 frequency = map(frequency, 30,90,255,0); // Printing the value on the serial monitor Serial.print("G= ");//printing name Serial.print(frequency);//printing RED color frequency Serial.print(" "); delay(100);

// Setting Blue filtered photodiodes to be read digitalwrite(s2,low); digitalwrite(s3,high); // Reading the output frequency frequency = pulsein(sensorout, LOW); //Remaping the value of the frequency to the RGB Model of 0 to 255 frequency = map(frequency, 25,70,255,0); // Printing the value on the serial monitor Serial.print("B= ");//printing name Serial.print(frequency);//printing RED color frequency Serial.println(" "); delay(100); } Si noti che i colori non sono molto accurati ma sono accettabili per progetti semplici.

LABORATORIO DISTRIBUTORE DI PALLINE COLORATE dal sito. http://howtomechatronics.com/projects/arduino-colorsorter-project/

FUNZIONAMENTO Inizialmente, le palline colorate vengono inserite nel caricatore e fatte cadere nella piattaforma attaccata sul servomotore superiore. Poi il servomotore ruota e porta la pallina al sensore di colore TCS3200 che ne rileva il colore. Dopo che il servomotore inferiore ruota nella posizione particolare corrispondente al contenitore che dovrà accogliere la pallina del colore individuato il servomotore superiore ruota fino alla caduta della pallina nella guida. Ecco il filmato https://www.youtube.com/watch?v=g3i51hdflaw

COMPONENTI Tutto quello di cui abbiamo bisogno per questo progetto è un sensore colore (TCS3200) e due servomotori. Utilizzando della masonite o altro materiale possiamo disegnare e ritagliare i vari pezzi della struttura. Scarica i disegni

Ottenute tutte le varie parti si assemblano con una pistola per colla partendo dalle parti esterne. Quindi, si fissano i due servomotori sulle loro piattaforme e la guida sul servomotore inferiore così come il supporto e la piattaforma necessaria per il servomotore superiore.

Successivamente, possiamo inserire un interruttore e un jack di alimentazione per alimentare Arduino con un adattatore a 5V e sulla terza piattaforma inseriamo il sensore di colore.

Terminato il montaggio delle varie parti, ecco il codice Arduino: #include <Servo.h> #define S0 2 #define S1 3 #define S2 4 #define S3 5 #define sensorout 6 Servo topservo; Servo bottomservo; int frequency = 0; int color=0; void setup() { pinmode(s0, OUTPUT); pinmode(s1, OUTPUT); pinmode(s2, OUTPUT); pinmode(s3, OUTPUT); pinmode(sensorout, INPUT); digitalwrite(s0, HIGH); digitalwrite(s1, LOW); topservo.attach(7); bottomservo.attach(8); Serial.begin(9600); }

void loop() { topservo.write(115); delay(500); for(int i = 115; i > 65; i--) { topservo.write(i); delay(2); } delay(500); color = readcolor(); delay(10); switch (color) { case 1: bottomservo.write(50); break; case 2: bottomservo.write(75);break; case 3: bottomservo.write(100);break; case 4: bottomservo.write(125);break; case 5: bottomservo.write(150);break; case 6: bottomservo.write(175);break; case 0: break; } delay(300);

for(int i = 65; i > 29; i--) { topservo.write(i); delay(2); } delay(200); for(int i = 29; i < 115; i++) { topservo.write(i); delay(2); } color=0; } // Custom Function - readcolor() int readcolor() { // Setting red filtered photodiodes to be read digitalwrite(s2, LOW); digitalwrite(s3, LOW); // Reading the output frequency frequency = pulsein(sensorout, LOW); int R = frequency; // Printing the value on the serial monitor Serial.print("R= ");//printing name Serial.print(frequency);//printing RED color frequency Serial.print(" "); delay(50);

// Setting Green filtered photodiodes to be read digitalwrite(s2, HIGH); digitalwrite(s3, HIGH); // Reading the output frequency frequency = pulsein(sensorout, LOW); int G = frequency; // Printing the value on the serial monitor Serial.print("G= "); //printing name Serial.print(frequency);//printing RED color frequency Serial.print(" "); delay(50); // Setting Blue filtered photodiodes to be read digitalwrite(s2, LOW); digitalwrite(s3, HIGH); // Reading the output frequency frequency = pulsein(sensorout, LOW); int B = frequency; // Printing the value on the serial monitor Serial.print("B= ");//printing name Serial.print(frequency);//printing RED color frequency Serial.println(" "); delay(50);

if(r<45 & R>32 & G<65 & G>55) { color = 1; // Red } if(g<55 & G>43 & B<47 &B>35) { color = 2; // Orange } if(r<53 & R>40 & G<53 & G>40) { color = 3; // Green } if(r<38 & R>24 & G<44 & G>30) { color = 4; // Yellow } if(r<56 & R>46 & G<65 & G>55) { color = 5; // Brown } if (G<58 & G>45 & B<40 &B>26) { color = 6; // Blue } return color; } Descrizione del codice: Quindi, abbiamo bisogno di includere la libreria "Servo.h", definire i pin a cui verrà collegato il sensore di colore, creare gli oggetti servo e dichiarare alcune variabili necessarie per il programma. Nella sezione di setup abbiamo bisogno di definire i pin di ingresso e di uscita, impostare la frequenza di scala per il sensore di colore, definire i pin per i servo e avviare la comunicazione seriale per la stampa dei risultati del colore di leggere sul monitor seriale. Nella sezione loop, il programma inizia con lo spostamento del servomotore superiore nella posizione del caricatore bowling. Si noti che il valore di 115 si adatta alle parti ma lo si potrebbe variare in base al servomotore che si utilizza.

Nel successivo ciclo for si ruoterà in modo da portare la pallina in prossimità del sensore di colore. Si utilizza un ciclo "for" in modo da poter controllare la velocità di rotazione, modificando il delay nel loop. Successivamente, dopo mezzo secondo di ritardo, utilizzando la funzione di misura, readcolor () leggeremo il colore della pallina Utilizzando i quattro pin di controllo e il pin di uscita frequenza del sensore di colore si legge colore della pallina Il sensore legge i 3 valori diversi rosso, verde e blu e in base a questi valori ci dice qual è il colore reale. Per maggiori dettagli su come il sensore di colore TCS3200 funziona è possibile controllare il relativo tutorial. https://www.youtube.com/watch?v=cpuxxuyd9xw Ivalori RGB ricevuti dal sensore per ogni pallina possono variare perché i sensori non sempre sono precisi. Pertanto, l'utilizzo di questi if" permettono al sensore di un errore di circa ±5 % del valore testato per quel particolare colore. Così, per esempio se abbiamo una pallina rossa, il primo "if" sarà vero e la variabile "colore" otterrà il valore 1. Ecco, questo è ciò che la funzione personalizzata readcolor () fa e dopo con l'utilizzo di un "switchcase ruotiamo il servo inferiore nella posizione voluta. Alla fine si ruota ulteriormente il servomotore superiore per fare in modo che la pallina cada nella guida per farlo ritornare nella posizione iniziale in modo che il processo possa ripetuto.

Fissato Arduino con un pò di silicone a caldo, con un tubo di plastica possiamo realizzare il caricatore come in figura: