3er ojo

de: juan

Dificultad:

Principiante

Plataforma:

Arduino

Categoria:

Arduino

Favoritos:

favorite3

reportReportar

Descripción:

Describir mediante audio los colores detectados mediante el senor de colores RGB de adfruit.

Licencia: GNU Lesser General Public License v3.0


Tags:

sonido
daltonico
Colores
rgb
musica
detector

Componentes:

  • Arduino uno x 1
  • Sensor RGB Adafruit x 1
  • Cables/Jumpers x 15
  • Protoboard x 1
  • MP3 Shield v4.1 Arduino x 1
  • IDE Arduino

Paso 1:

1- Descargar software necesario para programar placa Arduino

2- Conectar sensor RGB a arduino siguiendo la conexión mostrada en los pines (tierra a tierra, positivo a positivo y las dos señales a los pines 6 y 7

3- Copiar el código que se deja en la descarga y cargarlo al IDE de arduino para luego compilarlo en la placa, una vez compilado y subido a la placa:

4- Abrir visor serial y revisar que aparezcan los códigos de los colores que se estén probando con el sensor RGB, la manera de saber si están correctamente funcionando es ver los valores hexadecimales de los colores en la pantalla

5- Hacer la conexión del shield MP3 v4.1

6-Cargar a la USB los archivos de audio que se utilizaran para reproducir los colores, cargarlos en las condiciones donde se imprime cada color , en el codigo se muestra como

7-Los archivos de audio se cual sea su nombre deberan ser archivos en mp3 y tener el prefijo 0000, 0001, etc

Ejemplo: 0015-La niña bonita

8- Conectar al shield de MP3 una bocina o audifonos mediante el puerto jack y probar aplicación

Código:

                                    
                                            // Libraries einbinden
#include "Servo.h"
#include "Wire.h"
#include "Adafruit_TCS34725.h"
#include "SoftwareSerial.h"
#include "MP3.h" //ELECHOUSE MP3 shield v4.1
 
// Servo-Positionen in Grad für Farben, bitte anpassen
const int redPos = 160;
const int orangePos = 130;
const int yellowPos = 100;
const int greenPos = 70;
const int bluePos = 30;
const int nonePos = 0; // Kein Objekt erkannt
 
// Servo-Objekt initialisieren
Servo myservo;
MP3 mp3;
 
// Color Sensor-Objekt initialisieren
// Parameter siehe: https://learn.adafruit.com/adafruit-color-sensors/program-it
Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_1X);
 
// setup() wird einmal beim Start des Arduino ausgeführt
void setup() {

  mp3.begin(MP3_SOFTWARE_SERIAL);
  mp3.volume(0x1F);
 
 // Serielle Kommunikation zur Ausgabe der Wert im seriellen Monitor
 Serial.begin(9600);
 Serial.println("Makerblog.at - MuMs Color Sensor");
 
 // Überprüfen, ob Color Sensor sich auch zurückmeldet
 if (tcs.begin()) {
 // Alles OK
 Serial.println("Sensor gefunden");
 } else {
 // Kein Sensor gefunden. Programm an dieser Stelle einfrieren
 Serial.println("TCS34725 nicht gefunden ... Ablauf gestoppt!");
 while (1); // Halt!


  
 } 
 
 // Der Servo hängt am PWM-Pin 3 
 myservo.attach(3);
 // Servo in Grundstellung fahren
 myservo.write(0);
 delay(1000);

 

 
}
 
// loop() wird wiederholt, solange der Arduino läuft
void loop() {
 
 // Der Sensor liefert Werte für R, G, B und einen Clear-Wert zurück
 uint16_t clearcol, red, green, blue;
 float average, r, g, b;
 delay(100); // Farbmessung dauert c. 50ms 
 tcs.getRawData(&red, &green, &blue, &clearcol);
 
 // Mein Versuch einer Farbbestimmung für 
 // die 5 M&M-Farben Rot, Grün, Blau, Orange und Gelb
 
 // Durchschnitt von RGB ermitteln
 average = (red+green+blue)/3;
 // Farbwerte durch Durchschnitt, 
 // alle Werte bewegen sich jetzt rund um 1 
 r = red/average;
 g = green/average;
 b = blue/average;
 
 // Clear-Wert und r,g,b seriell ausgeben zur Kontrolle
 // r,g und b sollten sich ca. zwischen 0,5 und 1,5 
 // bewegen. Sieht der Sensor rot, dann sollte r deutlich über 1.0
 // liegen, g und b zwischen 0.5 und 1.0 usw.
 Serial.print("\tClear:"); Serial.print(clearcol);
 Serial.print("\tRed:"); Serial.print(r);
 Serial.print("\tGreen:"); Serial.print(g);
 Serial.print("\tBlue:"); Serial.print(b);
 
 // Versuch der Farbfeststellung anhand der r,g,b-Werte.
 // Am besten mit Rot, Grün, Blau anfangen die die Schwellenwerte 
 // mit der seriellen Ausgabe entsprechend anpassen
 if ((r > 1.4) && (g < 0.9) && (b < 0.9)) {
 
 mp3.play_usb_disk(0x0001);
         delay(4000);
      Serial.println("Reproduciendo Audio 1 Rojo");
     
 myservo.write(redPos);
 }
 else if ((r < 0.95) && (g > 1.2) && (b < 0.99)) {
 mp3.play_usb_disk(0x0002);
 delay(4000);
 myservo.write(greenPos);
 }
 else if ((r < 0.8) && (g < 1.2) && (b > 1.2)) {
 mp3.play_usb_disk(0x0005);
 delay(4000);
 myservo.write(bluePos);
 }
 // Gelb und Orange sind etwas tricky, aber nach etwas
 // Herumprobieren haben sich bei mir diese Werte als
 // gut erwiesen
 else if ((r > 1.15) && (g > 1.15) && (b < 0.7)) {
 mp3.play_usb_disk(0x0004);
 delay(4000);
 myservo.write(yellowPos);
 }
 else if ((r > 1.4) && (g < 1.0) && (b < 0.7)) {
 mp3.play_usb_disk(0x0003);
 delay(4000);
 myservo.write(orangePos);
 } 
 // Wenn keine Regel greift, dann ehrlich sein
 else {
 Serial.print("No se detecta color"); 
 // myservo.write(nonePos);
 }
 
 
 // Zeilenwechsel ausgeben
 Serial.println("");
 
 // Wartezeit anpassen für serielles Debugging
 delay(100);
 
}
                                    
                                
                                    
                                            Jumperso
                                    
                                

Comentarios:

  • ViriCruz ViriCruz

    hola, el proyecto está muy padre, pero creo que le faltan más fotos del circuito para saber como armarlo paso por paso, en el código los comentarios están en alemán supongo, si pudieras transcribirlos o hacer tus propios comentarios en español, sería genial :D. Por último si no es mucho pedir, un pequeño video donde muestre una pequeña demo de qué hace y para saber cual es el producto final.

    01/07/2016

  • DariusLau DariusLau

    Concuerdo con Victor. Le sumaría un listado de lo necesario para el proyecto y de lujo sería que incluyera ligas a dónde encontrar los insumos.

    01/07/2016

mode_edit