Este tutorial te guiará a través de la creación de un semáforo interactivo con un display OLED utilizando Arduino y la biblioteca U8glib. En este proyecto, programaremos un semáforo que cambia de color y muestra el tiempo restante en cada estado en un display OLED SH1106. A medida que avanzamos, también ajustaremos el tamaño de la fuente para mejorar la legibilidad.
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

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.
Tres diodos led de 5 mm, de color rojo, amarillo y verde

Tres resistores de 1 KOhm

PCB


Diagrama electrónico del 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 | #include <U8glib.h> U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);  // Configura la interfaz I2C para el display oled SH1106 const int pinRojo = 4;       // Pin para el semáforo rojo const int pinAmarillo = 5;  // Pin para el semáforo amarillo const int pinVerde = 6;    // Pin para el semáforo verde int tiempoRojo = 20;      // Tiempo en segundos para el semáforo rojo int tiempoAmarillo = 5;  // Tiempo en segundos para el semáforo amarillo int tiempoVerde = 20;   // Tiempo en segundos para el semáforo verde void setup() {   pinMode(pinRojo, OUTPUT);   pinMode(pinAmarillo, OUTPUT);   pinMode(pinVerde, OUTPUT);   u8g.begin();// Inicia la comunicación I2C con el display } void loop() {   // Semáforo Rojo   digitalWrite(pinRojo, HIGH);   digitalWrite(pinAmarillo, LOW);   digitalWrite(pinVerde, LOW);   cuentaRegresiva("Rojo", tiempoRojo);//Envia el parámetro para el color Rojo y el tiempo     // Semáforo Verde   digitalWrite(pinRojo, LOW);   digitalWrite(pinAmarillo, LOW);   digitalWrite(pinVerde, HIGH);   cuentaRegresiva("Verde", tiempoVerde);//Envia el parámetro para el color Verde y el tiempo   // Semáforo Amarillo    digitalWrite(pinRojo, LOW);    digitalWrite(pinAmarillo, HIGH);   digitalWrite(pinVerde, LOW);    cuentaRegresiva("Amarillo", tiempoAmarillo);//Envia el parámetro para el color Amarillo y el tiempo  } //Muestra en el display el conteo en forma regresiva y el color del led void cuentaRegresiva(const char* text, int seconds) {   u8g.firstPage();   for (int i = seconds ; i >= 0; i--) {     u8g.firstPage();     do {     u8g.setFont(u8g_font_10x20);  // Cambia el tamaño de la fuente     u8g.drawStr(0, 15, text);     // Ajusta las coordenadas según el tamaño de la fuente     u8g.setFont(u8g_font_osb35);     u8g.setPrintPos(30, 55);        u8g.print(i);     } while (u8g.nextPage());     delay(1000);//Conteo de un segundo   } } | 
PROYECTO RECOMENDADO
 
		



