Guia completa de construccion, instalacion y configuracion
El Calendario Perpetuo mostrando enero con festivos, aniversarios y el reloj de colores
Este proyecto es un calendario perpetuo fisico que muestra todos los dias del mes actual usando LEDs de colores. Los digitos de los dias estan posicionados de tal manera que cualquier mes puede mostrarse simplemente encendiendo los LEDs en las posiciones correctas.
Enero 2022 - Domingo como primer dia
Enero 2022 - Lunes como primer dia
El calendario se sincroniza automaticamente con Google Calendar para mostrar:
Cada tipo de evento se muestra en un color diferente, permitiendo ver de un vistazo que dias son especiales.
Los numeros permanecen fijos en su lugar. Solo los LEDs se encienden en diferentes posiciones y colores segun el mes:
La Version 2 incluye mejoras significativas sobre el proyecto original:
Instala el firmware directamente desde el navegador. No necesitas Arduino IDE ni conocimientos de programacion.
Configura todo desde tu telefono o computadora: WiFi, colores, brillo, Google Calendar.
Actualiza el firmware sin cables, directamente por WiFi.
Accede facilmente via http://perpetualcalendar.local
Ajusta automaticamente el brillo segun la hora. Modo nocturno para apagar LEDs de noche.
Cambia los colores de cada tipo de dia desde la interfaz web.
Configura red principal y de respaldo. Reconexion automatica.
Opcion de mostrar HH:MM:SS usando 6 LEDs con colores codificados.
| Parametro | Valor |
|---|---|
| Microcontrolador | ESP8266 (D1 Mini, NodeMCU, etc.) |
| LEDs | 75 LEDs WS2811/WS2812B |
| Pin de datos | GPIO 2 (D4 en NodeMCU) |
| Alimentacion | 5V, minimo 3A |
| Conexion | WiFi 2.4GHz |
| Puerto web | 80 |
| Puerto OTA | 8266 |
| Componente | Cantidad | Notas |
|---|---|---|
| ESP8266 (D1 Mini o NodeMCU) | 1 | Recomendado: Wemos D1 Mini |
| Tira LED WS2811/WS2812B | 75 LEDs | 60 LEDs/m, cortar en tiras |
| Fuente de alimentacion 5V | 1 | Minimo 3A (75 LEDs x 60mA) |
| Conector DC hembra 5.5mm/2.5mm | 1 | Para la fuente de poder |
| Modulo regulador 5V/3.3V | 1 | Para alimentar el ESP |
| Resistencia 3K ohm | 1 | Entre GPIO2 y VCC (importante) |
| Cables de colores | Varios | Para conexiones |
Acrilico ahumado de 2mm de grosor
| Material | Especificacion |
|---|---|
| Piezas impresas 3D | Marco, soporte de LEDs, rejilla, pata |
| Acrilico ahumado | 191mm x 96mm x 2mm |
| Papel blanco impreso | Con numeros de dias y meses (PDF incluido) |
| Pegamento caliente | Para fijar componentes |
| Cinta adhesiva de espuma | 1mm de grosor, para la pata |
Soporte para los LEDs con relieves
Rejilla separadora
Marco frontal
Pata y tapa trasera
Corta la tira de LEDs en las siguientes piezas:
Las 6 tiras de LEDs cortadas y listas para montar
LEDs montados en el soporte mostrando el patron zigzag
Diagrama completo de conexiones - nota el patron zigzag y la resistencia de 3K
Plantilla impresa con los numeros y nombres de meses
plantilla_numeros.pdf contiene la plantilla lista para imprimir en papel A4. Recorta siguiendo el contorno.
El ensamblaje se realiza en capas, de atras hacia adelante:
La forma mas facil de instalar. No requiere ningun software.
# Clonar repositorio
git clone https://github.com/XE1E/Perpetual-Calendar-with-Google-Calendar-Connection-V2.git
# Version estandar
pio run -e standard -t upload
# Version con reloj de colores
pio run -e color_coded_clock -t upload
http://arduino.esp8266.com/stable/package_esp8266com_index.jsonDespues de flashear, el ESP8266 crea una red WiFi:
| Parametro | Valor |
|---|---|
| Nombre de red (SSID) | Calendario |
| Contrasena | 12345678 |
| IP de configuracion | http://192.168.4.1 |
http://192.168.4.1time.cloudflare.com (o uno local)Una vez configurado, accede al calendario mediante:
http://perpetualcalendar.localNecesitas tres calendarios separados:
Para cada calendario, crea un script en script.google.com:
function doGet() {
var calId = 'TU_CALENDAR_ID_AQUI';
var calendar = CalendarApp.getCalendarById(calId);
if (!calendar) {
return ContentService.createTextOutput('Error: Calendario no encontrado');
}
var now = new Date();
var start = new Date(now.getFullYear(), now.getMonth(), 1);
var end = new Date(now.getFullYear(), now.getMonth() + 1, 0, 23, 59, 59);
var events = calendar.getEvents(start, end);
var days = "";
var added = {};
for (var i = 0; i < events.length; i++) {
var d = events[i].getStartTime().getDate();
if (!added[d]) {
days += d + "-";
added[d] = true;
}
}
return ContentService.createTextOutput(days);
}
La version "Color Coded Clock" usa los LEDs 62-67 para mostrar la hora en formato HH:MM:SS, donde cada digito se representa con un color diferente.
| Digito | Color | Muestra |
|---|---|---|
| 0 | Negro/Apagado | |
| 1 | Rojo | |
| 2 | Naranja | |
| 3 | Amarillo | |
| 4 | Verde | |
| 5 | Cyan | |
| 6 | Azul | |
| 7 | Purpura | |
| 8 | Rosa | |
| 9 | Blanco/Gris |
| Pagina | URL | Descripcion |
|---|---|---|
| Calendario Perpetuo | / | Menu de administracion |
| Configuracion de Red | /config.html | Configurar redes WiFi |
| Informacion | /info.html | Estado del sistema, reinicio |
| Configuracion NTP | /ntp.html | Servidor de tiempo |
| Apps Script Config | /appsscript.html | IDs de Google Scripts |
| Ajuste Manual de Hora | /time.html | Ajustar hora manualmente |
| Configuracion LEDs | /led.html | Control de brillo, test LEDs |
| Brillo Automatico | /autobrightness.html | Modo dia/noche |
| Configuracion Colores | /colors.html | Personalizar colores |
| Actualizacion OTA | /ota.html | Actualizaciones por WiFi |
Pagina principal con acceso a todas las opciones de configuracion. Incluye boton para cambiar entre espanol e ingles.
Permite configurar la conexion WiFi del dispositivo.
| Seccion | Campos |
|---|---|
| Red Principal | SSID y Contrasena de la red WiFi principal |
| Red de Respaldo | SSID2 y Contrasena2 (opcional, si la principal falla) |
| Config IP | DHCP (checkbox), IP estatica, Mascara de red, Puerta de enlace |
| Estado Conexion | Muestra el estado actual (Conectado, Desconectado, etc.) |
| Redes | Lista de redes WiFi disponibles con calidad de senal |
Muestra el estado actual del dispositivo y permite acciones de mantenimiento.
| Seccion | Informacion |
|---|---|
| Red | SSID conectado, IP, Mascara, Gateway, direccion MAC |
| Recursos | RAM libre, RAM fragmentada, tamano Flash, frecuencia CPU, tiempo encendido (uptime) |
Acciones disponibles:
Configura la sincronizacion de hora por Internet.
| Parametro | Descripcion |
|---|---|
| Servidor NTP | Direccion del servidor de tiempo (ej: time.cloudflare.com) |
| Intervalo (min) | Cada cuantos minutos sincronizar la hora (0=desactivado) |
| Zona Horaria | Selecciona tu zona horaria (GMT-12 a GMT+13) |
| Primer dia semana | Lunes o Domingo como primer dia de la semana |
| Horario de Verano | Activar si tu region usa horario de verano (DST) |
Configura los IDs de los Google Apps Scripts para sincronizar calendarios.
| Campo | Descripcion |
|---|---|
| Festivos | ID del script que devuelve los dias festivos |
| Aniversarios | ID del script que devuelve cumpleanos y aniversarios |
| Tareas | ID del script que devuelve tareas y eventos |
AKfycbw...
Permite establecer la fecha y hora manualmente sin usar NTP.
| Campo | Formato |
|---|---|
| Ano | 4 digitos (ej: 2024) |
| Mes | 1-12 |
| Dia | 1-31 |
| Hora | 0-23 |
| Minuto | 0-59 |
| Segundo | 0-59 |
Controla el brillo y permite probar los LEDs.
| Parametro | Descripcion | Rango |
|---|---|---|
| Brillo | Control deslizante para ajustar intensidad | 5-255 |
Botones:
Configura el brillo segun la hora del dia para ahorrar energia y evitar molestias nocturnas.
| Parametro | Descripcion | Rango |
|---|---|---|
| Activar | Habilita/deshabilita el brillo automatico | On/Off |
| Brillo de dia | Intensidad durante horas diurnas | 5-255 |
| Brillo de noche | Intensidad durante horas nocturnas | 0-255 (0=apagado) |
| Dia inicia a las | Hora y minuto cuando comienza el modo dia | 00:00-23:55 |
| Noche inicia a las | Hora y minuto cuando comienza el modo noche | 00:00-23:55 |
Estado Actual: Muestra la hora actual, si esta en modo dia o noche, y el brillo aplicado.
Personaliza los colores de cada tipo de dia en el calendario.
| Tipo de dia | Color por defecto |
|---|---|
| Dias laborales | Verde |
| Fin de semana | Rojo |
| Dia actual | Azul |
| Mes actual | Gris |
| Festivos | Magenta |
| Aniversarios | Cyan |
| Tareas | Naranja |
Botones:
Correccion Gamma: Ajusta el perfil de color y temperatura para mejorar la apariencia de los LEDs.
| Opcion | Descripcion |
|---|---|
| Perfil color | Sin correccion, TypicalLEDStrip (recomendado), TypicalSMD5050 |
| Temperatura | Sin ajuste, DirectSunlight (recomendado), Tungsten100W, ClearBlueSky |
Permite actualizar el firmware sin cables, directamente por WiFi.
| Informacion | Descripcion |
|---|---|
| Hostname | Nombre del dispositivo en la red (ej: perpetualcalendar.local) |
| Direccion IP | IP actual del dispositivo |
| Puerto | 8266 (puerto estandar OTA) |
| Estado | Listo para recibir actualizaciones |
Instrucciones para actualizar:
perpetualcalendar at 192.168.x.x)Causa: No se recibe respuesta del servidor NTP.
Solucion:
time.google.com)Causa: Problema con los scripts de Google Apps.
Solucion:
https://script.google.com/macros/s/TU_ID/execSolucion:
Solucion:
Solucion:
Causa: Falta la resistencia de 3K o problema de alimentacion.
Solucion: