Contenidos
ocultar
INTRODUCCIÓN
Hace más de 2 años publiqué un video explicando sobre un circuito DIMMER, prácticamente regulando la intensidad de luz de un bombillo de 220VAC, dicho circuito era muy simple, por ende no se podía controlar la totalidad de luminosidad del foco. Viendo esos inconvenientes hoy crearemos una tarjeta dimmer digital con arduino, lo cual nos permitirá controlar la totalidad de luz y eficientemente.
ESPECIFICACIONES TÉCNICAS
- Tensión de alimentación……………………….…………12VDC
- Corriente de alimentación………………….……………70mA
- Entradas digitales 12Vdc……………………………………………2
- Entrada AC (110-220Vac)……………………………………….1
- Entradas Analógicas……………………………………………….1
- Reloj de tiempo Real………………………………………….Extremadamente preciso
- Pantalla LCD (16×2)…………………………………………..Sí
- Programación Directa………………………………….….Ordenador o celular – MAIN BOARD
- Entorno de programación………………………..……..Arduino IDE
- Condiciones ambientales min………………………….-10°
- Condiciones ambientales max…………………..…….80°
- Salida para keypad (4*4)……………………………………….1
- Salida RELAY………………………………………………………1
- Tensión salida AC…………………………..….……220V
- Corriente AC………………………………………….2A
- Tensión DC……………………………………………30V
- Corriente DC…………………………………………2A
- Salida TRIAC………………………………………………………….1
- Tensión salida AC…………………………….……250V
- Corriente AC……………………….……………….12A
- Dimensiones…………………………………….………….80×80mm
- Empotrable…………………………………………………Sí
ESQUEMÁTICO ELECTRÓNICO CON ARDUINO UNO
LISTA DE MATERIALES
Categoría | Cantidad | Referencias | Valor | PCB Package | Datasheet |
Condensadores | 10 | C1,C2,C3,C4,C5,C7,C8,C9,C11,C13 | 100nF | 0603_CAP | |
Condensadores | 2 | C6,C17 | 10uF | 0805_CAP | |
Condensadores | 1 | C10 | 470uF | CAP SMD 10.5X10MM ALUMINUM 470UF/35V | |
Condensadores | 1 | C12 | 220uF | CAP SMD 6.3X7.7MM ALUMINUM 220UF/16V | |
Condensadores | 1 | C14 | 100nF | 1206_CAP | |
Condensadores | 1 | C15 | 1000uF | ELEC-RAD25 | |
Condensadores | 1 | C16 | 100nF | CAP60 | |
Resistencias | 6 | R1,R10,R11,R14,R20,R22 | 10k | 0603_RES | |
Resistencias | 4 | R2,R3,R21,R24 | 1k | 0603_RES | |
Resistencias | 1 | R4 | 1M | 0603_RES | |
Resistencias | 2 | R5,R6 | 4.7k | RES_ARRAY 0603X4 | |
Resistencias | 1 | R7 | 470 | 0603_RES | |
Resistencias | 2 | R8,R9 | 20k | 1206_RES | |
Resistencias | 1 | R12 | 470 | 1206_RES | |
Resistencias | 1 | R13 | 220 | 0603_RES | |
Resistencias | 1 | R15 | 470 | RES50 | |
Resistencias | 4 | R16,R17,R18,R19 | 100k | RES50 | |
Resistencias | 1 | R23 | 4.7k | 0603_RES | |
Integrados | 1 | U1 | ATMEGA328P | QFP80P900X900X120-32 | |
Integrados | 1 | U2 | CH340C | SO16 | |
Integrados | 1 | U3 | AT24C512B | SO8 | |
Integrados | 1 | U4 | DS3232 | SO16W | |
Integrados | 1 | U5 | ILD207T | SO8 | |
Integrados | 1 | U6 | 7805 | P1 | |
Integrados | 1 | U7 | MOC3021 | DIL06 | |
Integrados | 2 | U8,U9 | TRIAC | TO220 | |
Integrados | 1 | U10 | PC817 | SOIC250P670X300-4 | |
Transistores | 1 | Q1 | PMBT3904,215 | SOT23-3 | |
Diodos | 2 | D1,D4 | RR1VWM6STFTR | SOD2614X116 | |
Diodos | 2 | D2,D5 | LED-RED | LEDC2012X120 | |
Diodos | 1 | D3 | B330A-13-F | DIOM5336X240 | |
Miscelánea | 1 | BAT1 | 3V | BAT 3V | |
Miscelánea | 1 | BR1 | KBP206 | BRIDGE5 | |
Miscelánea | 1 | BTN1 | RST | BUTTON SMD 2P | |
Miscelánea | 1 | J1 | MICRO USB B | MICRO USB B | |
Miscelánea | 1 | J2 | CONN-H4 | CONN-SIL4 | |
Miscelánea | 1 | J3 | Keypad_4*4 | ARDUINO-SIL8 | |
Miscelánea | 2 | J4,J10 | TBLOCK-M3 | T-BLOCK 3PIN BLUE | |
Miscelánea | 1 | J5 | TBLOCK-M2 | TERMINAL BLOCKS DIBO | |
Miscelánea | 4 | J6,J7,J8,J9 | TBLOCK-M2 | T-BLOCK 2PIN BLUE | |
Miscelánea | 1 | RL1 | 12V | RL12V NORMAL | |
Miscelánea | 1 | X1 | CRYSTAL SMD S | OSCILADOR SMD CERAMIC RESONATORS |
CONEXIONES EXTERNAS
COMO SUBIR BOOTLOADER
CODIGOS ARDUINO
CÓDIGO BÁSICO (VARIACIÓN DE TIEMPO EN UN CICLO)
const int AC_IN_ZERO = 2; const int triac = 3; int pot_value = 0; boolean state = LOW; int estado_AC_IN_ZERO = 0; int lastButtonState_asc = 0; void setup() { pinMode(AC_IN_ZERO, INPUT); pinMode (triac, OUTPUT); } void loop() { estado_AC_IN_ZERO = digitalRead(AC_IN_ZERO); if (estado_AC_IN_ZERO != lastButtonState_asc) { if (estado_AC_IN_ZERO == LOW) { state = true; } } lastButtonState_asc = estado_AC_IN_ZERO; pot_value = map(analogRead(A6), 0, 1023, 7300, 0); if (state == true) { delayMicroseconds(pot_value); digitalWrite(triac, HIGH); delayMicroseconds(10); digitalWrite(triac, LOW); state = false; } }
#include <Keypad.h> const byte COLUMNAS = 4; const byte FILAS = 4; char teclas [FILAS] [COLUMNAS] = { {'1', '2', '3', 'X'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', '='} }; byte filasPines[FILAS] = {4, 5, 6, 7}; //Define lineas byte columnasPines[COLUMNAS] = {8, 9, 10, 11}; //Define columnas Keypad miTeclado = Keypad( makeKeymap(teclas), filasPines, columnasPines, FILAS, COLUMNAS );// sincronizacion de las teclas boolean valorActual = false; String numero1; long calculoTotal; const int AC_IMPUT = 2; const int triac = 3; volatile byte state = LOW; int estado_AC_IMPUT = 0; int lastButtonState_asc = 0; void setup() { pinMode(AC_IMPUT, INPUT); pinMode (triac, OUTPUT); } void loop() { estado_AC_IMPUT = digitalRead(AC_IMPUT); if (estado_AC_IMPUT != lastButtonState_asc) { if (estado_AC_IMPUT == LOW) { state = true; } } lastButtonState_asc = estado_AC_IMPUT; if (state == true) { delayMicroseconds(calculoTotal); digitalWrite(triac, HIGH); delayMicroseconds(10); digitalWrite(triac, LOW); state = false; } char tecla = miTeclado.getKey(); int longitudDelNumero; if (tecla != NO_KEY && (tecla == '1' || tecla == '2' || tecla == '3' || tecla == '4' || tecla == '5' || tecla == '6' || tecla == '7' || tecla == '8' || tecla == '9' || tecla == '0')) { if (valorActual != true) { numero1 = numero1 + tecla; longitudDelNumero = numero1.length(); } } else if ((tecla == '#') && valorActual == false && tecla != NO_KEY) { valorActual = true; calculoTotal = numero1.toInt(); } else if (tecla == '*' && tecla != NO_KEY) { valorActual = false; numero1 = ""; calculoTotal = 0; }