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