En este tutorial, exploraremos paso a paso cómo conectar y programar un Arduino para controlar la intensidad de una tira de LED utilizando señales infrarrojas. Desde la configuración inicial hasta la escritura del código, te guiaremos a través de cada etapa del proceso para que puedas crear tus propias experiencias luminosas personalizadas.
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
Arduino mini pro
El Arduino Pro Mini es una placa de microcontrolador basada en el ATmega328 .
Tiene 14 pines de entrada / salida digital (de los cuales 6 se pueden usar como salidas PWM), 6 entradas analógicas, un resonador integrado, un botón de reinicio y orificios para montar encabezados de pines. Se puede conectar un encabezado de seis pines a un cable FTDI o una placa de conexión Sparkfun para proporcionar alimentación USB y comunicación a la placa.
El Arduino Pro Mini está diseñado para su instalación semipermanente en objetos o exposiciones. La placa viene sin encabezados pre montados, lo que permite el uso de varios tipos de conectores o la soldadura directa de cables. El diseño del pin es compatible con el Arduino Mini.
Hay dos versiones del Pro Mini. Uno corre a 3.3V y 8 MHz, el otro a 5V y 16 MHz.
Microcontrolador | ATmega328 * |
Fuente de alimentación de la placa | 3,35-12 V (modelo de 3,3 V) o 5-12 V (modelo de 5 V) |
Voltaje de funcionamiento del circuito | 3.3V o 5V (dependiendo del modelo) |
Pines de E / S digitales | 14 |
Pines PWM | 6 6 |
UART | 1 |
SPI | 1 |
I2C | 1 |
Pines de entrada analógica | 6 6 |
Interrupciones externas | 2 |
Corriente CC por pin de E / S | 40 mA |
Memoria flash | 32 KB de los cuales 2 KB utilizados por el gestor de arranque * |
SRAM | 2 KB * |
EEPROM | 1 KB * |
Velocidad de reloj | 8 MHz (versiones de 3.3V) o 16 MHz (versiones de 5V) |
Pines hembra
Zócalo para arduino nano
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)
PCB
Descargar archivo gerber –> pcb alarma ir
Una tira de led de 12 voltios
Transistor TIP31C NPN
El transistor TIP31C hace parte de la familia de semiconductores de potencia en encapsulado plástico TO-220 de muy alto desempeño que puede usarse en diseños relacionados con aplicaciones de audio y conmutación rápida. Su complemento es el TIP32C.
Caracteristicas:
- Transistor tipo: NPN
- Corriente máxima de colector: 3A
- Voltaje máximo Colector-Emisor: 100V
- Voltaje de saturación colector-emisor (Max) @,Ib,Ic: 1.2V @ 375mA, 3A
- Máxima potencia: 2W
- Temperatura de operación máxima: 150°C
- Encapsulado TO-220
Un resistor de 220 ohm
Circuito
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 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
#include <IRremote.h> #define PIN_IR 2 // Pin al que está conectado el módulo receptor IR #define PIN_LED 9 // Pin al que está conectada la tira de LED #define PASO_INTENSIDAD 25 // Paso de incremento o decremento de la intensidad PWM int intensidadActual = 0; // Intensidad actual del LED (valor PWM) IRrecv receptorIR(PIN_IR); decode_results resultados; void setup() { pinMode(PIN_LED, OUTPUT); Serial.begin(9600); receptorIR.enableIRIn(); // Inicializar el módulo receptor IR } void loop() { // Verificar si se recibió una señal IR if (receptorIR.decode(&resultados)) { Serial.println(resultados.value, HEX);// Lo convertimos a valor hexadecimal // Si la señal corresponde al botón de aumentar, incrementar la intensidad if (resultados.value == 0xFFA05F) { // Código IR correspondiente al botón + aumentarIntensidad(); } // Si la señal corresponde al botón de disminuir, disminuir la intensidad else if (resultados.value == 0xFF40BF) { // Código IR correspondiente al botón - disminuirIntensidad(); } //Si la señal corresponde al botón de encender al máximo, establecer la intensidad al máximo else if (resultados.value == 0xFFB24D) { // Código IR correspondiente al botón de encender al máximo intensidadActual = 250; analogWrite(PIN_LED, intensidadActual); Serial.println(intensidadActual); } //Si la señal corresponde al botón de apagar, establecer la intensidad a 0 else if (resultados.value == 0xFF6897) { // Código IR correspondiente al botón de apagar intensidadActual = 0; analogWrite(PIN_LED, intensidadActual); Serial.println(intensidadActual); } //Botón 0 del control remoto else if (resultados.value == 0xFF48B7) { // Código IR correspondiente al botón 0 intensidadActual = 25; analogWrite(PIN_LED, intensidadActual); Serial.println(intensidadActual); } //Botón 1 del control remoto else if (resultados.value == 0xFF906F) { // Código IR correspondiente al botón 1 intensidadActual = 50; analogWrite(PIN_LED, intensidadActual); Serial.println(intensidadActual); } //Botón 2 del control remoto else if (resultados.value == 0xFFB847) { // Código IR correspondiente al botón 2 intensidadActual = 75; analogWrite(PIN_LED, intensidadActual); Serial.println(intensidadActual); } //Botón 3 del control remoto else if (resultados.value == 0xFFF807) { // Código IR correspondiente al botón 3 intensidadActual = 100; analogWrite(PIN_LED, intensidadActual); Serial.println(intensidadActual); } //Botón 4 del control remoto else if (resultados.value == 0xFFB04F) { // Código IR correspondiente al botón 4 intensidadActual = 125; analogWrite(PIN_LED, intensidadActual); Serial.println(intensidadActual); } //Botón 5 del control remoto else if (resultados.value == 0xFF9867) { // Código IR correspondiente al botón 5 intensidadActual = 150; analogWrite(PIN_LED, intensidadActual); Serial.println(intensidadActual); } //Botón 6 del control remoto else if (resultados.value == 0xFFD827) { // Código IR correspondiente al botón 6 intensidadActual = 175; analogWrite(PIN_LED, intensidadActual); Serial.println(intensidadActual); } //Botón 7 del control remoto else if (resultados.value == 0xFF8877) { // Código IR correspondiente al botón 7 intensidadActual = 200; analogWrite(PIN_LED, intensidadActual); Serial.println(intensidadActual); } //Botón 8 del control remoto else if (resultados.value == 0xFFA857) { // Código IR correspondiente al botón 8 intensidadActual = 225; analogWrite(PIN_LED, intensidadActual); Serial.println(intensidadActual); } //Botón 9 del control remoto else if (resultados.value == 0xFFE817) { // Código IR correspondiente al botón 9 intensidadActual = 250; analogWrite(PIN_LED, intensidadActual); Serial.println(intensidadActual); } receptorIR.resume(); // Recibir el siguiente valor IR } } // Función para aumentar la intensidad del LED void aumentarIntensidad() { if (intensidadActual < 250) { intensidadActual += PASO_INTENSIDAD; Serial.println(intensidadActual); analogWrite(PIN_LED, intensidadActual); delay(100); // Pequeña pausa para evitar cambios demasiado rápidos } } // Función para disminuir la intensidad del LED void disminuirIntensidad() { if (intensidadActual > 0) { intensidadActual -= PASO_INTENSIDAD; Serial.println(intensidadActual); analogWrite(PIN_LED, intensidadActual); delay(100); // Pequeña pausa para evitar cambios demasiado rápidos } } |
PROYECTO RECOMENDADO