En este tutorial te mostraremos cómo construir un detector de colores utilizando el sensor TCS3200 y un display OLED SH1106, todo controlado por una placa Arduino. Este sistema puede reconocer colores y mostrarlos de forma clara en la pantalla OLED, ¡ideal para proyectos de robótica, clasificación de objetos o cualquier idea creativa que tengas!
¿Qué Aprenderás?
- Configurar el sensor de color TCS3200: Aprende a interpretar la información RGB que detecta este sensor.
- Integrar un display OLED SH1106: Descubre cómo mostrar resultados en un formato legible y atractivo.
- Procesar datos de color con Arduino: Domina la conversión de lecturas en valores útiles para tus proyectos.
¿Por Qué Este Proyecto?
Este proyecto no solo es divertido de construir, sino también muy útil para aprender sobre sensores y procesamiento de datos. Además, puedes ampliarlo con nuevas funcionalidades, como clasificar objetos o realizar mediciones de color más precisas.
Sigue leyendo para descubrir el paso a paso, los materiales que necesitas y el código para llevar tu detector de colores al siguiente nivel. ¡Manos a la obra!
Tal vez pueda interesarte proyectos en arduino, pic, robótica, telecomunicaciones, suscribete en http://www.youtube.com/user/carlosvolt?sub_confirmation=1 mucho videos con código fuentes completos y diagramas
Componentes electrónicos del proyecto
Arduino Nano
El Arduino Nano es una placa pequeña, completa y compatible con la placa de pruebas basada en el ATmega328 (Arduino Nano 3.x). Tiene más o menos la misma funcionalidad del Arduino Duemilanove, pero en un paquete diferente. Solo carece de un conector de alimentación de CC y funciona con un cable USB Mini-B en lugar de uno estándar.
Microcontrolador | ATmega328 |
Arquitectura | AVR |
Tensión de funcionamiento | 5 V |
Memoria flash | 32 KB de los cuales 2 KB utiliza el gestor de arranque |
SRAM | 2 KB |
Velocidad de reloj | 16 MHz |
Pines analógicos IN | 8 |
EEPROM | 1 KB |
Corriente CC por pines de E / S | 40 mA (pines de E / S) |
Voltaje de entrada | 7-12 V |
Pines de E / S digitales | 22 (6 de los cuales son PWM) |
Salida PWM | 6 |
El consumo de energía | 19 mA |
Tamaño de PCB | 18 x 45 mm |
Peso | 7 g |
Diagrama de pines
Un Zócalo para arduino
Pines hembra
Cables dupont hembra macho
Display oled sh1106
Se trata de un módulo de pantalla OLED monocromática DE 128×64 puntos con interface I2C .Que presenta varias ventajas en comparación con pantallas LCD, y podemos destacar su alto brillo, un muy buen contraste, un ángulo de visión más amplio, y bajo consumo de energía. ES compatible con Arduino Rasberry Pi y microcontroladores PIC entre otros. Trabaja con niveles lógicos de 3.3V a 5V tiene un angulo de visión mayor a los 160 grados. el Tamaño de la pantalla es de 1,3 pulgadas. Se alimenta con un voltaje de 3.3V a 5V Se lo puede usar en aplicaciones como relojes inteligentes, MP3, termómetros, instrumentos, y proyectos varios, etc.
Características
- Interface: I2C(3.3V / 5V logic level)
- Resolution: 128 x 64
- Angle of view: >160 degree
- Display color: Blue
- Display size: 1.3 inch
- Driver IC: SH1106
- Power supply: DC 3.3V~5V
- Operating temperature: -20~70’C
- Application: smart watch, MP3, thermometer, instruments, DIY projects, etc.
Un Sensor TCS3200
El TCS3200 es un completo sensor de color RGB con 4 diodos LED incorporados y uede detectar casi un infinito rango de colores. Sus aplicaciones son varias como por ejemplo medir la luz ambiental, clasificación por color etc. Internamente el sensor tiene un array de pequeño phototransistores cada uno con varios filtros de color, lo que le permite ser bastante preciso y sensible. La salida del sensor devuelve un pulso de duración proporcional a la intensidad del color detectado.
Características:
- Alimentación: 2.7V a 5.5V
- Salida digital TTL
- Escala y filtros programables
- Función power down
- Tamaño: 28.4×28.4mm
Manual–> TCS3200 TCS3210
Circuito con PCB
Código Fuente
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 |
#include <U8g2lib.h> // Librería para manejar el display OLED // Pines de control del sensor de color TCS3200 #define S0 4 #define S1 5 #define S2 6 #define S3 7 #define sensorOut 12 // Pin de salida del sensor de color // Configuración del display OLED (modelo SH1106, 128x64, I2C) U8G2_SH1106_128X64_NONAME_F_HW_I2C oled(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); int frequency = 0; // Variable para almacenar la frecuencia leída del sensor void setup() { // Configuración de los pines del sensor como entradas/salidas pinMode(S0, OUTPUT); pinMode(S1, OUTPUT); pinMode(S2, OUTPUT); pinMode(S3, OUTPUT); pinMode(sensorOut, INPUT); // Configuración de la escala de frecuencia del sensor digitalWrite(S0, HIGH); // Escala del 20% de frecuencia digitalWrite(S1, LOW); // Inicializar el OLED oled.begin(); oled.clearBuffer(); oled.setFont(u8g2_font_ncenB08_tr); // Fuente básica para el OLED oled.drawStr(0, 12, "Sensor de Color"); // Mensaje inicial oled.sendBuffer(); // Inicializar la comunicación Serial Serial.begin(9600); } void loop() { int red, green, blue; // Variables para almacenar las mediciones RGB // Leer componente rojo digitalWrite(S2, LOW); // Configuración del filtro rojo digitalWrite(S3, LOW); frequency = pulseIn(sensorOut, LOW); // Medir frecuencia del pulso red = frequency; // Leer componente verde digitalWrite(S2, HIGH); // Configuración del filtro verde digitalWrite(S3, HIGH); frequency = pulseIn(sensorOut, LOW); // Medir frecuencia del pulso green = frequency; // Leer componente azul digitalWrite(S2, LOW); // Configuración del filtro azul digitalWrite(S3, HIGH); frequency = pulseIn(sensorOut, LOW); // Medir frecuencia del pulso blue = frequency; // Mostrar valores RGB en el monitor serial Serial.print("R: "); Serial.print(red); Serial.print(" G: "); Serial.print(green); Serial.print(" B: "); Serial.println(blue); // Determinar el color dominante basado en las mediciones RGB String colorDetectado; if(red < 20 || green < 20|| blue < 20){ colorDetectado = "Indefinido"; }else if (red < green && red < blue) { colorDetectado = "Rojo"; } else if (green < red && green < blue) { colorDetectado = "Verde"; } else if (blue < red && blue < green) { colorDetectado = "Azul"; } Serial.println(colorDetectado); // Mostrar el color detectado en el dosplay OLED oled.clearBuffer(); // Limpiar el buffer del OLED oled.setFont(u8g2_font_ncenB08_tr); // Establecer la fuente oled.drawStr(0, 12, "Sensor de Color"); // Mensaje principal oled.setCursor(0, 30); // Posición para el texto oled.print("Color: "); oled.print(colorDetectado); // Escribir el color detectado oled.sendBuffer(); // Enviar datos al OLED delay(1000); // Esperar antes de la próxima medición } |
Si deseas que revise algún producto escríbeme a reviews@rogerbit.com (sólo contacto empresarial ).
No te pierdas ningún video más suscríbete a nuestro canal de telegram https://t.me/carlosvolt_electronica_robotica
PROYECTO RECOMENDADO