Introducción
En la era actual de la domótica y el internet de las cosas (IoT), el control remoto de dispositivos se ha vuelto una habilidad fundamental para cualquier entusiasta de la electrónica y la programación. Este tutorial te guiará en la creación de un sistema de control de luces LED utilizando un control remoto infrarrojo y una Raspberry Pi Pico, sentando las bases para proyectos más complejos de automatización del hogar.
El proyecto que desarrollaremos combina elementos de electrónica básica con programación moderna, permitiéndote controlar tres luces LED de manera independiente mediante un control remoto infrarrojo. Este sistema puede parecer simple a primera vista, pero incorpora conceptos fundamentales que se utilizan en sistemas domóticos profesionales y otros proyectos de IoT.
¿Por Qué Este Proyecto?
- Valor Educativo:
- Aprenderás sobre comunicación infrarroja, un protocolo ampliamente utilizado en electrónica de consumo
- Desarrollarás habilidades en programación con MicroPython, un lenguaje cada vez más popular en el mundo de los microcontroladores
- Comprenderás conceptos básicos de electrónica digital y control de dispositivos
- Ganarás experiencia práctica en el desarrollo de sistemas interactivos
- Aplicaciones Prácticas:
- Base para sistemas de iluminación inteligente
- Punto de partida para proyectos más complejos de domótica
- Control remoto de dispositivos electrónicos
- Automatización de espacios de trabajo o habitaciones
- Habilidades Transferibles:
- Programación de microcontroladores
- Diseño de interfaces de usuario básicas
- Depuración de sistemas en tiempo real
- Integración de hardware y software
Aspectos Técnicos Destacados
Este proyecto utiliza el protocolo NEC, uno de los estándares más comunes en comunicación infrarroja. Algunas características técnicas importantes incluyen:
- Protocolo NEC:
- Codificación de modulación por pulsos
- Alta fiabilidad en la transmisión de datos
- Amplia compatibilidad con dispositivos comerciales
- Sistema de detección y corrección de errores
- Raspberry Pi Pico:
- Microcontrolador potente y accesible
- Capacidades de procesamiento en tiempo real
- Múltiples pines de entrada/salida
- Programación sencilla con MicroPython
- Sistema de Control:
- Control independiente de múltiples LEDs
- Retroalimentación visual instantánea
- Capacidad de expansión
- Bajo consumo de energía
Posibilidades de Expansión
Una vez completado el proyecto base, podrás expandirlo de múltiples formas:
- Añadir más LEDs y funcionalidades
- Implementar efectos de iluminación
- Integrar sensores adicionales
- Crear secuencias programadas
- Añadir control por Wi-Fi o Bluetooth
- Desarrollar una interfaz web de control
Este proyecto no es solo un ejercicio de programación y electrónica, sino un punto de partida para explorar el fascinante mundo de la automatización y el control de dispositivos. A medida que avances en el tutorial, descubrirás que los conceptos aprendidos son aplicables a una amplia gama de proyectos más avanzados.
Componentes electrónicos

26 pines GPIO multifunción

Pines hembra

Cables dupont hembra macho

PCB

Control Remoto x infrarrojos

Módulo receptor infrarrojo ky-022

Tamaño: 6.4 * 7.4 * 5.1MM, ángulo de aceptación 90 °, voltaje de trabajo 2.7-5.5V.
Frecuencia 37.9KHZ, recibiendo la distancia 18 m.
Rechazo de luz diurna hasta 500LUX, capacidad de interferencia electromagnética, IC dedicado de infrarrojos incorporado.
Ampliamente utilizado: estéreo, TV, VCR, CD, decodificadores, marco de fotos digital, audio para el automóvil, juguetes de control remoto, receptores de satélite, disco duro, aire acondicionado, calefacción, ventiladores, iluminación y otros electrodomésticos.
Pinout:
1 …. GND (-)
2 …. + 5V
3 …. Salida (S)
Semáforo con Arduino

Este mini módulo de semáforo LED ofrece una iluminación brillante y difusa, ideal para la simulación de sistemas de control de tráfico. Su diseño compacto y liviano lo hace perfecto para diversas aplicaciones que requieren una señalización visual rápida y clara. Gracias a su rápida respuesta y alta resistencia a interferencias, es una opción confiable y eficiente en consumo de energía para proyectos de automatización y modelado de tráfico.
Especificaciones:
Tamaño: 56 * 21 * 11 mm
Peso: 4g
Color: Rojo, amarillo y verde
LED: 5mm * 3
Brillo: Brillo normal
Voltaje: 5V
Entrada: Señal digital de salida
Interfaz: Cátodo común rojo y amarillo, verde control por separado
Interfaz: Cátodo común rojo, amarillo, verde control por separado
Respuesta ultrarrápida, fuerte capacidad anti interferencias y alto rendimiento costo.
Consumo de energía ultra bajo y larga distancia de transmisión.
Circuito

Descargar archivo gerber—>Gerber_raspberry-pi-pico
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 |
#include <EEPROM.h> // Definición de pines #define RELE_1 7 #define RELE_2 8 // Estados iniciales de las luces bool estadoLuz1 = false; // Estado de la luz en RELE_1 bool estadoLuz2 = false; // Estado de la luz en RELE_2 // Función para actualizar el estado de los relés y guardar en EEPROM void actualizarRele(int pinRele, bool estado, int direccionEEPROM) { digitalWrite(pinRele, estado ? LOW : HIGH); // Lógica invertida EEPROM.update(direccionEEPROM, estado); } // Función para imprimir el estado de las luces void imprimirEstado() { Serial.print("Luz1:"); Serial.print(estadoLuz1 ? "ENCENDIDA" : "APAGADA"); Serial.print("|Luz2:"); Serial.println(estadoLuz2 ? "ENCENDIDA" : "APAGADA"); } void setup() { // Configurar pines como salida pinMode(RELE_1, OUTPUT); pinMode(RELE_2, OUTPUT); // Leer estados almacenados en EEPROM estadoLuz1 = EEPROM.read(0); estadoLuz2 = EEPROM.read(1); // Configurar estados iniciales de los relés actualizarRele(RELE_1, estadoLuz1, 0); actualizarRele(RELE_2, estadoLuz2, 1); // Iniciar comunicación serie Serial.begin(9600); Serial.println("Listo para recibir comandos. Usa d7on, d7off, d8on, d8off."); imprimirEstado(); } void loop() { if (Serial.available()) { String comando = Serial.readStringUntil('\n'); // Leer comando hasta nueva línea comando.trim(); // Eliminar espacios y saltos de línea if (comando == "d7on") { estadoLuz1 = true; actualizarRele(RELE_1, estadoLuz1, 0); Serial.println("Comando:d7on"); } else if (comando == "d7off") { estadoLuz1 = false; actualizarRele(RELE_1, estadoLuz1, 0); Serial.println("Comando:d7off"); } else if (comando == "d8on") { estadoLuz2 = true; actualizarRele(RELE_2, estadoLuz2, 1); Serial.println("Comando:d8on"); } else if (comando == "d8off") { estadoLuz2 = false; actualizarRele(RELE_2, estadoLuz2, 1); Serial.println("Comando:d8off"); } else { Serial.println("Comando no admitido."); } // Imprimir el estado actual de las luces imprimirEstado(); } } |
PROYECTO RECOMENDADO