Dimmer-Arduino _ Arduino

57
1/8/2014 Dimmer-Arduino | Arduino http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 1/57 Dimmer-Arduino Publicado el 19 de octubre 2012 Cambio de una carga de corriente alterna con un Arduino es bastante simpel: o bien un relé mecánico o un relé de estado sólido con un triac ópticamente aislado. Se convierte en un poco más complejo si se quiere regular una lámpara de CA de la red con un arduino: simplemente limitando la corriente a través un triac no es realmente posible debido a la gran potencia del triac entonces tendrá que disipar, resultando en mucho calor y también no es eficiente desde el punto de vista de uso de la energía. La forma correcta de hacerlo es a través de control de fase:. El Triac entonces está completamente abierto, pero sólo durante una parte de la onda AC sinoid Uno podría un Arduino dejar abierta la Triac para un número de microsegundos, pero que tiene el problema de que es impredecible durante qué parte del sinuswave el triac se abre y por lo tanto el nivel de regulación es impredecible. Se necesita un punto de referencia en la onda de seno. Para que un detector de cruce por cero es necesario. Este es un circuito que cuenta la Arduino (u otro microcontrolador) cuando la onda de seno pasa a través de cero y por lo tanto da un punto definido en el que la onda de seno. Apertura de la Triac para un número de microsegundos después de por lo tanto, el cruce por cero da un nivel predecible de atenuación . Arduino Arduino y cosas relacionadas

Transcript of Dimmer-Arduino _ Arduino

Page 1: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 1/57

Dimmer-Arduino

Publicado el 19 de octubre 2012

Cambio de una carga de corriente alterna con un Arduino es bastante simpel: o bien un relé

mecánico o un relé de estado sólido con un triac ópticamente aislado.

Se convierte en un poco más complejo si se quiere regular una lámpara de CA de la red con un

arduino: simplemente limitando la corriente a través un triac no es realmente posible debido a la

gran potencia del triac entonces tendrá que disipar, resultando en mucho calor y también no es

eficiente desde el punto de vista de uso de la energía.

La forma correcta de hacerlo es a través de control de fase:. El Triac entonces está

completamente abierto, pero sólo durante una parte de la onda AC sinoid

Uno podría un Arduino dejar abierta la Triac para un número de microsegundos, pero que tiene el

problema de que es impredecible durante qué parte del sinuswave el triac se abre y por lo tanto el

nivel de regulación es impredecible. Se necesita un punto de referencia en la onda de seno.

Para que un detector de cruce por cero es necesario. Este es un circuito que cuenta la Arduino (u

otro microcontrolador) cuando la onda de seno pasa a través de cero y por lo tanto da un punto

definido en el que la onda de seno.

Apertura de la Triac para un número de microsegundos después de por lo tanto, el cruce por cero

da un nivel predecible de atenuación .

ArduinoArduino y cosas relacionadas

Page 2: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 2/57

Este circuito, que es un ejemplo.

Dicho circuito es fácil de construir: El paso por cero se deriva directamente de la red de corriente

alterna rectificada líneas - a través de un acoplador óptico, por supuesto-y le da una señal cada

vez que la onda pasa por cero. Debido a que la onda senoidal pasa primero por la rectificación

doble por etapas (véase la figura a continuación), la señal de cruce por cero se da sin tener en

cuenta si la onda de seno sube por cero o hacia abajo por cero. Esta señal se puede utilizar para

dirigir una interrupción en el Arduino.

Seguir

Siga "Arduino"

Obtenga cada nuevo post

entregado a su bandeja de

entrada.

Únete a otros 42 seguidores

Enter your email address

Registrarme

Desarrollado por WordPress.com

Page 3: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 3/57

Apertura de

la triac se realiza a través de un circuito de triac opto acoplada probado y comprobado. Para el

Triac un TIC206 se puede utilizar, pero un BT136 (un poco más barato) probablemente funcionaría

también. Con respecto a la MOC3021: que tiene una tensión directa de aproximadamente 1.2 a

1.4 voltios y una corriente de disparo de 8-15 mA. Un LED tiene una tensión directa de unos

2Volts. Suponiendo una señal de dirección digital de 5 V que da un valor de resistencia entre (5-

3.2) / 0.015 = 120 Ohm y (5-3.2) / 0.008 = 225 Ohm, por lo que 220 una opción decente. En

realidad, un LED puede tener una tensión directa ligeramente inferior y una resistencia de 330

Ohm fue encontrado para trabajar también. Es importante no elegir un opto-triac aquí con un filtro

de cruce por cero incorporado. El MOC3041 MOC3061 o para el caso, por lo tanto no es utilizable

en este circuito. El MOC 3021 es. NOTA: algunas personas han experimentado el parpadeo como

consecuencia de una señal de entrada débil. Como la caída de tensión sobre un LED puede variar

dependiendo del color. que es más seguro para reemplazar el LED por un puente de alambre y

aumentar la resistencia de 220 Ohm a 330 o 470 Ohm En cuanto a las resistencias de 30k: El

1/2 Watt debe hacerlo como las resistencias disipan algunos 400mW. Si usted piensa que es

demasiado, reemplazar el 4N25 4N33 con una y las dos resistencias de 30k con dos resistencias

100 k. Tenga cuidado sin embargo al usar optoacopladores sensibles como el 4N32, ya que será

fácilmente plenamente en la saturación.

Page 4: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 4/57

Este es el circuito completo del dimmer

Todos los que uno necesita entonces es el software. Afortunadamente alguien ya ha hecho el

trabajo básico. Simplemente adapté el código ligeramente:

/ *

AC Voltaje dimmer con Zero detección cruzada

Autor: Charith Fernanado http://www.inmojo.com

Licencia: Creative Commons Attribution Share-Alike 3.0 License.

Coloque el pasador transversal cero del módulo de Arduino pin de interrupción externa

Seleccione la correcta Interrupción # de la siguiente tabla:

(Los números de pin son los pines digitales, NO pins físicas:

pin digital 2 [INT0] = pin físico 4

y pin digital 3 [INT1] = pin física 5)

Pin | de interrupción de # | Plataforma Arduino

---------------------------------------

2 | 0 | Todo

3 | 1 | Todos

18 | 5 | Arduino Mega Sólo

19 | 4 | Arduino Mega Sólo

20 | 3 | Arduino Mega Sólo

21 | 2 | Arduino Mega Sólo

En el pin programa se elige 2

* /

int AC_LOAD = 3; / / Salida de pin Opto Triac

int oscurecimiento = 128; / / Nivel de atenuación (0-128) 0 = ON, 128 = OFF

/ * Debido a problemas de tiempo, el uso de '0 'a veces puede hacer que el circuito

parpadeo. Es más seguro utilizar un valor ligeramente superior a '0 '

Page 5: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 5/57

* /

void setup ()

{

pinMode (AC_LOAD, OUTPUT) ;/ / pin de carga Set AC como salida

attachInterrupt (0, zero_crosss_int, RISING);

/ / Escoge '0 'como interrupción para el cruce por cero

}

/ / La función de interrupción debe tener parámetros y devolver nada

void zero_crosss_int ()

/ / Función para ser disparado en el cruce por cero para atenuar la luz

{

Cálculo del ángulo / / cocción: 1 onda 50Hz completo = 1/50 = 20 ms

/ / Cada zerocrossing así: (50 Hz) -> 10 ms (1/2 Ciclo) Para 60Hz => 8,33 ms

/ / 10 ms = 10000US

/ / (10000US - 10us) / 128 = 75 (aprox) Para 60Hz => 65

int DimTime = (75 * oscurecimiento); / / Para 60Hz => 65

delayMicroseconds (DimTime); Ciclo / / Off

digitalWrite (AC_LOAD, HIGH); / / Triac despido

delayMicroseconds (10); / / Triac El retardo de propagación

/ / (Para uso 60Hz 8,33)

digitalWrite (AC_LOAD, LOW); / / Triac Off

}

void loop () {

for (int i = 5; i <= 128; i + +)

{

atenuación = i;

de retardo (10);

}

}

Diseño de impresión . Mirrorred .

Page 6: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 6/57

El aspecto a considerar es que si usted está construyendo un sistema en el que no está

utilizando una fuente de alimentación ya hecho, sino más bien proporcionar su propia fuente de

alimentación, construido a partir de un transformador y un rectificador, usted podría considerar

recogiendo el 0-travesía desde el lado secundario del transformador.

Un posible circuito podría tener este aspecto:

Page 7: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 7/57

101 PENSAMIENTOS EN " DIMMER-ARDUINO "

E. diez Winkel

COMPARTE ESTA:

Gorjeo Facebook 11

Esta entrada fue publicada en dimmer por Arduino . Guarda el enlace permanente

[http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/] .

Like

One blogger likes this.

CONEXO

Conmutación de baja

tensión de CA con un

microcontrolador

Interruptor de un solo

canal Triac AC

Relé de estado sólido

para el microcontrolador

Con 8 comentarios

C

en15 de diciembre 2012 a las 17:03 dijo:

Page 8: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 8/57

Swell. Voy a intentar esto. Estoy en 115V/60Hz

Ha proporcionado los valores de 60 Hz, pero lo que haga con los 30K resistencias? ¿Debo

duplicarlas o medio de ellos y lo que acerca de su Potencia? Lo siento, no soy tan hábil

Arduino

en16 de diciembre 2012 a las 10:50 am dijo:

Gracias mitad de ellos. Potencia puede seguir siendo la misma. Más que

suficiente

Jos

en22 de diciembre 2012 a las 11:57 am dijo:

Saludos, tengo un par de preguntas tontas (?); Soy un tipo de matemáticas y (hasta) Yo

no sé nada sobre el hardware; mi hermano construyó la cosa y parece que funciona, pero

no entiendo por qué; es probablemente porque no sé cómo funciona un triac ...

A partir del código Puedo ver que la mitad de un ciclo de toma 10000US y el pin

AC_LOAD se establece en alto para 10us en algún momento durante ese ciclo. Mi

calculadora muestra que (10000US-10us) / 128 == 78.046875us así ¿no 78us ser una

mejor aproximación en lugar de 75us? ¿Por qué se divide el (medio) ciclo en 128 partes?

Sería más 'natural' no 256 partes?

Mi otra pregunta trata sobre el propio procesador: durante ese retraso puede el procesador

aún se interrumpa o se trata efectivamente muerto durante ese período de retardo? (Lo

siento por esto, no pude encontrar una respuesta de Google en cualquier lugar).

Gracias por la lectura y

Saludos cordiales,

Jos

Arduino

en28 de febrero 2013 a las 1:41 am dijo:

Josh, disculpas por mi última contestación. 78 nosotros puede de hecho ser una

Page 9: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 9/57

mejor aproximación, sólo haber elegido un número agradable cerca

wether 256 sería un proceso más natural es de hasta al gusto, incluso a 256 la

velocidad del cambio es más importante que el tamaño del paso. Para mi

propósito pasos 0f 128a parecía satisfactoria, pero no hay problema en tomar

pasos más pequeños

Gracias por su interés

Jos

en28 de febrero 2013 a las 9:58 am dijo:

No hay problema; en la media hora que tomé un enfoque diferent: su solución hace que la

espera hasta que el procesador tiene que enviar un pulso a la triac; en mi solicitud de que

es una pérdida de tiempo, así que utiliza un temporizador que interrumpe el procesador de

nuevo cuando ha llegado el momento de enviar un pulso. Divido los 0,01 s en 256 partes y

preescala el temporizador / 8; eso hace 20.000 ticks por 0,01 segundos y funciona muy

bien, mientras que mi procesador puede hacer otras cosas; cerca de la "ventaja" de la

alarma de cruce por cero simplemente me dejo el triac o desactivar porque la corriente es

demasiado baja para cambiar correctamente a un estado encendido (este valor difiere

según el tipo de triac).

Arduino

en20 de marzo 2014 a las 12:55 pm dijo:

Esa es, de hecho, una buena solución Josh. El ejemplo que di era sólo eso, un

ejemplo. He dado una solución con una interrupción del temporizador, así

Nativepr

en03 de marzo 2013 a las 2:54 am dijo:

¿Puedo usar un arduino a dimm 220v para un todavía?

Page 10: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 10/57

Gracias por su respuesta

Arduino

en07 de abril 2013 a las 22:31 dijo:

No estoy seguro de lo que quieres decir con un alambique

nativerpr

en28 de abril 2013 a las 2:02 am dijo:

Me refiero a un aparato de destilación. Para controlar la temperatura de la

caldera

Arduino

en20 de junio 2013 a las 20:41 dijo:

En principio esto es posible, pero puede haber soluciones más fáciles para

que

Andy

en21 de marzo 2013 a las 16:40 dijo:

¿Alguien más ha tenido problemas con el parpadeo / brillantes destellos de la lámpara?

Me parece que no puede conseguir una transición sin problemas, incluso con la 'DimTime'

set variable a un valor fijo tengo los mismos problemas donde me esperaba un brillo

constante.

Voy a ser la partida a un Hackspace local del domingo (donde tienen un osciloscopio) y

publicaré lo que me entero.

Andy

Page 11: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 11/57

en26 de marzo 2013 a las 10:52 am dijo:

He echado un vistazo a mi alimentación de 5V en un ámbito. La forma de onda es

terrible. No es de extrañar el arduino consigue flancos ascendentes adicionales.

Hizo que mi propio suministro de 5V y funciona muy bien ahora.

Arduino

en07 de abril 2013 a las 22:32 dijo:

Estoy feliz de que ya se enteró de lo que pr eproblem es, fuente de alimentación

5volt año. Gracias por publicarlo

Arduinodiy

en28 de marzo 2013 a las 22:08 dijo:

Ese es un enfoque interesante. Mi programa era sólo una manera rápida de mostrar el

funcionamiento pero si yoy establece una interrupción de temporizador que sería más

eficiente.

¿Le importaría compartir su código?

Jeff

en30 de abril 2013 a las 1:51 am dijo:

He encontrado una gran cantidad de problemas con "parpadeo / destellos brillantes" en el

poder en torno a un 40-50%. La manera de solucionar este problema es abandonar el

puente de diodos como un detector de cruce por cero. En su lugar colocar la red eléctrica

a través de 150K de resistencia (yo usé 3 * 47K en serie) para controlar directamente la

entrada óptica, pero (lo más importante) poner un diodo en paralelo con la entrada óptica,

dirección inversa. Así que ahora en el columpio positivo de la vivo, la entrada óptica se

"ilumina", y en la oscilación negativa del diodo en paralelo atrapa el voltaje en la entrada

óptica de ir más de ~ 0,7 voltios polaridad inversa, y la entrada óptica es "oscuro ". Ahora

Page 12: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 12/57

usted tiene una buena onda cuadrada en el colector opto o "el cruce por cero out", el

cambio de 0-5v y 5v a 0V etc exactamente con la red de cruce cero.

En el código, cambie:

attachInterrupt (0, zero_crosss_int, RISING);

a:

attachInterrupt (0, zero_crosss_int, CHANGE);

Ahora "vacío zero_crosss_int ()" se denomina a cada paso por cero como antes.

He utilizado un 4N33 en lugar de un 4N25. Es posible que necesite más bajo que 150K si

está utilizando un 4N25. También me pareció que necesitaba un 2.2K tire hacia arriba de

la resistencia en el colector opto (10k es mucho a mayor), a conseguir lindas fuertes

subidas y caídas. Tener buenos fuertes subidas y caídas en los cruces por cero es clave

para evitar "parpadeo" o miss-disparo.

He adaptado el código se ejecute en interrupción utilizando el temporizador 1, en lugar de

poner en un retraso en el código de servicio zero_crosss_int. Aquí está mi código de

prueba arduino leonado:

Char inByte ;/ / personaje de recepción serie

int volátiles variar = 19980; / / .. Esto es OFF valor .. 200 = 100 uS con un preescala 8,

100 * 200 = 10 ms ... pero int respuesta tarda 10us a fin de utilizar 19.980

int AC_LOAD = 3; / / Salida Opto Triac pin

int atenuación = 10; / / Nivel de atenuación (0-100) 0 = apagado, 100 = en

void setup ()

{

pinMode (AC_LOAD, OUTPUT) ;/ / pin de carga Set AC como salida

attachInterrupt (1, zero_crosss_int, CHANGE);

/ / cambio elige como interrumpir el paso por cero

Serial.begin (115.200);

}

/ / la función de interrupción debe tener parámetros y devolver nada

vacío zero_crosss_int ()

/ / Función para ser disparado en el cruce por cero para atenuar la luz

{

ajuste del ángulo / / Firing

/ / inicializa Timer1

TCCR1A = 0; / / Establecer toda registro TCCR1A a 0

TCCR1B = 0; / / Igual para TCCR1B

/ / set comparar registro de coincidencia a cuenta del temporizador deseada:

OCR1A = varían;

/ / activar el modo de CTC:

TCCR1B | = (1 << WGM12);

/ / bit Set CS11 para 8 prescaler:

Page 13: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 13/57

TCCR1B | = ( ; 1 << CS11)

: / / temporizador comparar habilitación de interrupción

| = (1 <0) {TIMSK1

: / / obtener byte entrante

; inByte = Serial.read ()

interruptor (inByte) {

case 'h':

atenuación = oscurecimiento + 5;

if (atenuación> 95) {

desvaneciendo = 95;

}

Serial.print ("nivel es");

Serial.println (oscurecimiento);

break;

case 'l':

atenuación = atenuación-5;

if (oscurecimiento <10) {

atenuación = 10;

}

Serial.print ("nivel es");

Serial.println (oscurecimiento);

romper;

caso 'p':

Serial.print ("Vary es");

Serial.println (varía);

romper;

caso '3 ':

regulación = 30;

romper;

caso '6 ':

regulación de luz = 60;

}

}

variar = 200 * (100-oscurecimiento) -20;

}

Arduino

en20 de junio 2013 a las 20:33 dijo:

Gracias por la sugerencia año. No he tenido el problema que usted describe, sin

embargo, voy a tenerlo en cuenta y tal vez voy a ser de utilidad en el futuro. Si

usted no utiliza un puente, obviamente, la frecuencia de la señal se reduce a la

mitad

Page 14: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 14/57

Jeff

en30 de abril 2013 a las 2:01 am dijo:

una parte del código no fue fijado derecha. un trozo faltaba en el medio. Aquí está el

código de nuevo:

Char inByte ;/ / personaje de recepción serie

int volátiles variar = 19980; / / 200 = 100 nosotros con una preescala 8, 100 * 200 = 10 ms

de interrupción = off ... pero int respuesta = 10us así 19980

int AC_LOAD = 3; / / Salida Opto Triac pin

int atenuación = 10; / / Nivel de atenuación (0-100) 0 = apagado, 100 = en

void setup ()

{

pinMode (AC_LOAD, OUTPUT) ;/ / pin de carga Set AC como salida

attachInterrupt (1, zero_crosss_int, CHANGE);

/ / Permite seleccionar '1 "como interrupción para el cruce por cero

Serial.begin (115.200);

}

/ / la función de interrupción debe tener parámetros y devolver nada

vacío zero_crosss_int ()

para ser disparado en el cruce por cero para atenuar la luz / / Función

{

/ / Firing ajuste del ángulo

/ / inicializa Timer1

TCCR1A = 0; / / Establecer toda registro TCCR1A a 0

TCCR1B = 0; / / Igual para TCCR1B

/ / set comparar registro de coincidencia a cuenta del temporizador deseada:

OCR1A = varían;

/ / activar el modo de CTC:

TCCR1B | = (1 << WGM12);

/ / bit Set CS11 para 8 prescaler:

TCCR1B | = ( ; 1 << CS11)

: / / temporizador comparar habilitación de interrupción

| = (1 <0) {TIMSK1

: / / obtener byte entrante

; inByte = Serial.read ()

interruptor (inByte) {

case 'h':

atenuación = oscurecimiento + 5;

if (atenuación> 95) {

desvaneciendo = 95;

Page 15: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 15/57

}

Serial.print ("nivel es");

Serial.println (oscurecimiento);

break;

case 'l':

atenuación = atenuación-5;

if (oscurecimiento <10) {

atenuación = 10;

}

Serial.print ("nivel es");

Serial.println (oscurecimiento);

romper;

caso 'p':

Serial.print ("Vary es");

Serial.println (varía);

romper;

caso '3 ':

regulación = 30;

romper;

caso '6 ':

regulación de luz = 60;

}

}

variar = 200 * (100-oscurecimiento) -20;

}

Jeff

en30 de abril 2013 a las 2:11 am dijo:

segundo intento de pegar código también parece haber fracasado. este bit no está

presente:

"

}

ISR (TIMER1_COMPA_vect)

{

digitalWrite (AC_LOAD, HIGH); De disparo / / triac

delayMicroseconds (10); / / Triac El retardo de propagación

digitalWrite (AC_LOAD, LOW); / / Triac Off

TCCR1A = 0; / / Establecer toda registro TCCR1A a 0

TCCR1B = 0; / / Igual para TCCR1B

Page 16: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 16/57

}

void loop () {

if (Serial.available ()> 0)

"

insertar arriba exacto después TIMSK1 texto | = (1 <0)

Jeff

en30 de abril 2013 a las 2:37 am dijo:

mensaje al moderador ...

Veo otros fragmentos de código removido de la pasta, por lo que incluso mi corrección de

código que falta también tiene algo de código que falta. No creo que esta entrada de blog

es bueno para el código. Hay texto en la carga de ser filtrado y eliminado por la aplicación

web por alguna razón. Envíame un correo electrónico si usted piensa que otros estarían

interesados en el código del temporizador.

Jeff

Arduino

en20 de junio 2013 a las 8:30 pm dijo:

Puede que tengas razón. Ha tenido problemas con él antes.

Arduino

en20 de junio 2013 a las 20:37 dijo:

Estoy en el móvil ahora lo que no puede ponerse en contacto con u por correo

electrónico, pero seguramente lo haré

Arduino

en20 de junio 2013 a las 22:36 dijo:

Page 17: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 17/57

Lamentablemente no puedo enviar u correo electrónico, ya que no tengo dirección

yr

Nikoas

en06 de mayo 2013 a las 22:29 dijo:

Tratar de utilizar un temporizador en lugar de los delayMicroseconds pero sigue

parpadeando .. Código es como esto:

int AC_LOAD = 3;

volátil int atenuación = 128;

void setup ()

{

pinMode (AC_LOAD, OUTPUT) ;/ / pin de carga Set AC como salida

attachInterrupt (0, zero_cross_int, RISING);

}

void loop ()

{

}

void zero_cross_int ()

{

SetTimer (65 * oscurecimiento);

}

ISR (TIMER1_COMPA_vect)

{

digitalWrite (AC_LOAD, HIGH);

delayMicroseconds (8,33);

digitalWrite (AC_LOAD, LOW);

}

void SetTimer (microsegundos int)

{

TCCR1A = 0; / / Establecer toda registro TCCR1A a 0

TCCR1B = 0; / / Igual para TCCR1B

Page 18: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 18/57

TCCR1B | = (1 << WGM12);

TCCR1B | = (1 << CS11);

TCCR1B & = ~ (1 << CS10);

TCCR1B & = ~ (1 << CS12);

OCR1A = microsegundos * 2 -1;

TIMSK1 | = (1 << OCIE1A);

}

Alguien tiene alguna ideia?

Gracias!

Arduino

en20 de junio 2013 a las 20:28 dijo:

No puedo ver de inmediato un problema con el código. Tal vez alguien más lo hará

Arduino

en07 de septiembre 2013 a las 22:38 dijo:

parpadeo también puede ser causef si el LED de la entrada le quita demasiado de

una caída de tensión. Reemplace el LED por un puente de alambre y aumentar el

valor de la resistencia de 220 oghm a 330 o 470 ohmios

Chethan

en19 de julio 2013 a las 9:25 am dijo:

Hola, quiero comprar este módulo, ¿está disponible en la India?

Arduino

en19 de julio 2013 a las 10:07 am dijo:

Page 19: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 19/57

No estoy vendiendo cualquier módulo de che. El que he vinculado es mailorder

Chethan

en19 de julio 2013 a las 19:44 dijo:

Hola, si no está disponible, entonces voy a tratar de construir mi propio.

¿Podría usted los pls compartir el circuito completo esquemática ...? ..

Tengo que construir en la India por lo que mi alimentación de CA será

50Hz 230v ...

Arduino

en19 de julio 2013 a las 23:13 dijo:

Che que, el circuito completo es en este artículo. En caso de que no

estaba claro, se necesita el circuito que u verá inmediatamente por encima

de la lista de programas que tiene el 4N25, el MOC3021, el puente

rectificador y el triac. Anuncio se puede ver un circuito simple rally.

Encontrará el diseño de impresión por debajo de la lista de programas y

una foto de los componentes en el PCB justo debajo. Los valores

indicados se refieren a 230 voltios. No dude en preguntar si lo que necesita

saber más

Arduino

en27 de agosto 2013 a las 19:43 dijo:

no estoy seguro de lo que quieres decir Chethan. lo que forma parte del

circuito le falta?

Indra

en29 de septiembre 2013 a las 6:10 pm dijo:

Page 20: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 20/57

Hola, he construido este circuite mi cuenta, y ahora quiero programar mi controlador atmel

8051 para recibir la señal de accionamiento paso a cero, la señal de atenuación en.

Lo que entendí desde el programa anterior es, Conecte estos puntos a los pines de

microcontrolador, y utilizar el programa anterior. Zero Crossing señal o / p trabajo como de

interrupción en el controlador y en base a esto se acciona la señal del atenuador hacia

fuera puesto ..

¿Puedo utilizar encima programa directamente con sólo dando detalles pin correcto en el

programa ..

Arduino

en29 de septiembre 2013 a las 19:29 dijo:

Indra, sí que se entiende wel. Tendrá que conectar el cruce por cero a una

interrupción del microcontrolador annd continuación tiene un pin de salida del

microcontrolador encienda el optoaislador / triac

Sin embargo, el programa en sí mismo probablemente no funciona

inmediatamente, ya que no es puro C, pero si usted tiene un compilador de C para

el año 8051 un uso dyou este programa, obtendrá bastante lejos, mediante la

adaptación de los pasadores y haciendo que la lengua un poco más pura C.

Si consigues que funcione, yo estaría muy interesado para que usted pueda

compartirlo

Gracias por yr comentario

Arduino

en29 de septiembre 2013 a las 22:18 dijo:

es posible que desee comprobar aquí:

http://www.linuxforturkey.com/lamp_dimmer/lamp_dimmer.php . durante algún

código

que sé que hace muchos años que escribí algo de código para hacer esto por un

8051, incluso en ensamblador, pero después de 20 años he perdido ese código y

no estoy trabajando con más de 8.051

Page 21: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 21/57

indra

en30 de septiembre 2013 a las 6:18 am dijo:

Gracias por la información, a continuación es el código que he escrito, me dejaron test y

post los resultados

# include

/*=============================================================================

=============================================================================*/

int oscurecimiento = 0;

delayMicroseconds void (unsigned int i)

{

unsigned int j, k;

for (j = 0; j <= i; j + +)

{

for (k = 0; k <256; k + +);

}

}

void delay (unsigned int i)

{

unsigned int j, k;

for (j = 0; j <= i; j + +)

{

for (k = 0; K65

delayMicroseconds (DimTime); / / Off ciclo

P1 = 0x01; / / disparo triac

delayMicroseconds (10) / / triac Retardo de propagación

/ / (para uso 60Hz 8.33)

P1 = 0x00; / / triac Off

}

void ex0_isr (void) interrumpa 0

{

Drive_Trac (); / / Incrementa el conteo

}

/*=============================================================================

=============================================================================*/

Page 22: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 22/57

void main (void)

{

/ * ----------------

Zero Crossing interrupción

---------------- * /

IT0 = 1; / / Configurar Zero Configurar interrumpa 0 para el borde que cae sobre / INT0

(P3.2)

EX0 = 1; / / Habilitar la interrupción EX0

EA = 1; / / Habilitar Global Interrupt Flag

/ * ----------------

para Triac unidad P1.0

---------------- * /

P1 = 0x00;

/ * ----------------

esperar para

siempre. ---------------- * /

int i;

for (i = 5; i <= 128; i + +)

{

atenuación = i;

delay (10);

}

while (1)

{

}

}

/*=============================================================================

=============================================================================*/

Arduino

en30 de septiembre 2013 a las 6:19 am dijo:

Thanx

Indra

en08 de octubre 2013 a las 7:10 pm dijo:

Page 23: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 23/57

Hola, he intentado mi tabla con el código que he escrito para 89V51RD2.

recibo la interrupción de Zerocrossing pin de salida ...

Pero la carga (bombilla) que estoy conectado no está variando, su siempre ON .. si me

quito la señal de entrada triac también mi carga es ON ".. Es TRIAC está bien?

Dado que no he tenido 30k (1,2 vatio), conecté 33k (1/2watt) todos los demás o normal

resistencia ..

aquí está mi retraso y el código de ISR

delayMicroseconds void (unsigned int i)

{

for (j = 0; j <= i; j + +)

{

for (k = 0; k <256; k + +);

}

}

void ex0_isr (void) interrumpa 0

{

P0 = 0x01; De disparo / / triac

delayMicroseconds (10); / / Triac El retardo de propagación

P0 = 0X00 ;/ / triac Off

}

Arduino

en08 de octubre 2013 a las 22:17 dijo:

Indra, si desconecta la entrada al optoacoplador y triac años todavía está en

entonces, evidentemente, ya sea triac años ha tenido o optoaislador año tiene un

corto. Si ha utilizado un pie ic para optoaislador año le sugiero que tome el chip y

vuelve a intentarlo con sólo aplicar la tensión de red de nuevo. Si triac año está

apagado, el optoaislador tiene un corto. Si todavía está en espero un triac

defectuoso

Page 24: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 24/57

indra

en09 de octubre 2013 a las 5:51 am dijo:

Hola, Ya que yo no he puesto ningún pie ic,, voy a tratar de reemplazar el IC y comprobar

...

Tengo una pequeña pregunta: ¿

Tengo que apoyar a cuatro niveles de regulación para mi carga (bombilla).

se cambia el retardo entre ON y OFF triac funciona bien?

Al igual que a continuación.

/ / Nivel: 0

P0 = 0 × 01; De disparo / / triac

delayMicroseconds (8); / / Triac El retardo de propagación de Nivel: 0

P0 = 0X00 ;/ / triac Off

/ / Nivel: 1

P0 = 0 × 01; De disparo / / triac

delayMicroseconds (10); / / Triac El retardo de propagación de Nivel: 1

P0 = 0X00 ;/ / triac Off

/ / Nivel: 3

P0 = 0 × 01; De disparo / / triac

delayMicroseconds (12); / / Triac El retardo de propagación de Nivel: 2

P0 = 0X00 ;/ / triac Off

Arduino

en10 de octubre 2013 a las 1:42 am dijo:

Es mejor primero desoldar un pin de la resistencia.

Con respecto a los 4levels usted tiene que establecer los ajustando el retardo

desde el zerocrossing

Page 25: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 25/57

indra

en10 de octubre 2013 a las 11:23 am dijo:

Hola, el problema era con optoaislador, me desoldar resistencia de 1k .. ahora no es ON

.. Así como usted sugirió que intentaré sustituir con el nuevo ...

Con 4levls sentido, yo no entendía "retardo desde el zerocrossing" .. ¿Está agregando un

cierto retraso en la rutina de interrupción que me pasa por la salida de cruce por cero ..

según mi código de abajo, cada vez que tengo la interrupción, en la rutina de interrupción

que hago el disparo traic y OFF ..

Entonces, ¿dónde agregar el dealy con el fin de tener niveles tenues diffrent

vacío ex0_isr (void) interrumpen 0

{

P0 = 0 × 01; De disparo / / triac

delayMicroseconds (10); / / Triac El retardo de propagación

P0 = 0X00 ;/ / triac Off

}

Arduino

en11 de octubre 2013 a las 9:24 am dijo:

Hola Indra, bueno que identificaron el problema. Sin embargo, asegúrese de que no

interrumpía cualquier cortocircuito accidental entre las pistas de la optoaislador.

Con el retardo de la zeorcrossing quiero decir que el lightlevel de la lámpara depende de

en qué parte del 50Hz (o 60Hz) Ciclo de enviar un pulso a la TRIAC.

En un ciclo de 50 Hz el tiempo transcurrido entre dos cruces por cero es de 10 ms (8,33

en una 60Hz) .

Así que si usted quiere tener la lámpara de yr a media potencia, es necesario encender el

TRIAC mitad de ese ciclo, que es de 5 ms después de la zerocrossing.

Si quieres lámpara año en el 25% hay que esperar para 7,5 ms después de la

zerocrossing antes de que se activa el TRIAC y si quieres lámpara año a la fuerza el 75%

que necesita para activar el TRIAC después de 2,5 ms.

(técnicamente para el 25% y el 75% se trata de una aproximación como el área bajo la

curva no es liniair, pero está lo suficientemente cerca para la ilustración de los proces).

Hay que añadir que la demora en su programa antes de disparar el TRIAC. ¿Dónde está

exactamente depende de ti, pero lo que he hecho en mi código de Arduino es que en mi

rutina de interrupción, multiplico un stepvariable con un steptime. Posteriormente me puse

Page 26: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 26/57

esa variable en mi bucle principal.

Desde solo deseas 4 niveles, podría establecer una más grande steptime ejemplo 2.4ms

y que se multiplican con una variable.

Posteriormente, en el bucle principal se establece esa variable que decir 1, 2, 3 o 4

También puede establecer el total de DimTime directamente en su mainloop de la

siguiente manera:

interrumpir {

delayMicroseconds (DimTime);

P0 = 0x01;

delayMicroseconds (10); / / Propogationdelay

P0 = 0x00;

}

loop {

IF condición DimTime = 9,000;

ELSE IF condición DimTime = 7,000;

ELSE IF condición DimTime = 5,000;

ELSE DimTime = 2000;

}

He elegido 9000 en lugar de (10000-10) porque el 4N25 que da la zerocrossing no es ideal

en un sentido de que no da un pulso muy estrecho. A los efectos normales de regulación

que no es un problema, pero podría dar algunos problemas de tiempo cuando se regula

cerca de los bordes de su ciclo

Espero que ayude, buena suerte. no vacilamos en preguntar si necesita más ayuda

Indra

en12 de octubre 2013 a las 10:14 am dijo:

Hola,

Gracias por la información detallada. Traté como usted ha dicho anteriormente.

en lugar de la regulación a nivel constante .. Mi carga (bombilla) parpadea al ritmo que he

añadido como DimTime ...

este es mi código de demora.

delayMicroseconds void (unsigned int i)

Page 27: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 27/57

{

for (j = 0; j <= i; j + +)

{

for (k = 0; k <256; k + +);

}

}

Isr () {

delayMicroseconds (2000);

P0 = 0 × 01;

delayMicroseconds (10); / / Propogationdelay

P0 = 0 × 00;

}

Por favor ayuda si he cometido algún error en el retardo adecuado establecer ..

Arduino

en12 de octubre 2013 a las 11:58 am dijo:

Indra Actualmente estoy viajando. Yo todo contacto con usted

Arduino

en12 de octubre 2013 a las 19:09 dijo:

Como estoy en el móvil sólo puedo dar una respuesta corta pero, francamente, no

entiendo su código. Si 'i' es tenue yr tiempo, entonces ¿cuál es la función de la de

2000, y cuál es la función de la 'k'?

Yo no estoy seguro de cómo retraso año es llamado por lo que la función de año

parece hacer es simplemente repita el retraso 2000microsecond un número de

veces. Si se trata del paso por cero que llama a esto, entonces tal vez la primera

vez que nosotros bien, pero después de eso no hay una relación adecuada con el

cruce por cero más y usted incluso pasar a la siguiente fase del ciclo. A mí me

parece que J y K no tienen ninguna función en absoluto, sino que es necesario por

ejemplo, i * 2000 en el que i es entre 0 y 4.

Basta con mirar el ejemplo que di en mi respuesta de 11 de octubre 2013 @

09:24:11 Eso muestra la estructura que tiene que seguir. Su código-lamento

decirlo-es completamente erróneo, hará TRIAC año se descomponga

Page 28: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 28/57

Indra

en14 de octubre 2013 a las 19:48 dijo:

Hola, gracias por su ayuda .. yo soy capaz de obtener cuatro niveles DIM ..

Pero de repente la carga parpadea .. como se había sugerido reemplacé con 220ohm

440ohm y 1kohm, pero aún así me sale el parpadeo durante el funcionamiento normal ..

pls sugieren cómo para superar este parpadeo ..

Desde mi 8051 pin hacia fuera puesto no era capaz de conducir el MOC3021, he usado

un TIP122 para conducir .. como below https://lh3.googleusercontent.com/-

OHBImWUiKVM/UlwtYFIGwgI/AAAAAAAAABo/_o4aIjLk8ts/w776-h458-no/test.png

Y a continuación es mi código completo

/ * Dimmer.C - Keil Evaluation Board MCBx51 con 80C51 dispositivo * /

# Include

# include

int regulación = 0;

unsigned int j, k;

anular delayMicro (unsigned int nosotros)

{

for (; nosotros> 0; nosotros-)

{

_nop_ (); / / Si el cristal es cristal de 11 MHz a continuación retraso es de ~ 1

microsegundo

}

}

void delay (unsigned int i)

{

for (j = 0; j <= i; j + +)

{

for (j = 0; j <= 256; j + +)

Page 29: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 29/57

{

for (j = 0; j <= 256; j + +)

{

}

}

}

}

void Drive_Trac (void )

{

delayMicro (oscurecimiento);

/ / delayMicro (550);

P0 = 0xFF; / / Triac disparar

delayMicro (10);

/ / (para uso 60Hz 8.33)

P0 = 0x00 ;/ / triac Off

}

void ex0_isr (void) interrumpa 0

{

/ / P1 = ~ P1;

Drive_Trac (); / / Incrementa el conteo

}

/ ******************************************* ****************?

void main (void)

{

/ / P1 = 0x00; Cocción / / triac

P0 = 0x00;

/ * ----------------

Zero Crossing interrupción

---------------- * /

IT0 = 1; / / Configurar Zero Configurar interrumpa 0 para el borde que cae sobre / INT0

(P3.2)

EX0 = 1; / / Habilitar la interrupción EX0

EA = 1; / / Habilitar Global Interrupt Flag

/ * ----------------

para Triac unidad P1.0

---------------- * /

/ * ----------------

Esperar

siempre. ---------------- * /

while (1)

Page 30: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 30/57

{

atenuación = 380; / / Nivel 1

delay (9999);

atenuación = 450; / / Nivel 2

delay (9999);

atenuación = 500; / / Nivel 3

delay (9999);

atenuación = 550; / / Nivel 4

delay (9999);

}

}

Arduino

en14 de octubre 2013 a las 23:24 dijo:

Hola Indra, gracias por su código. Pero para ser sincero, es difícil de decir. Sigo dando un

ejemplo de que en la medida de lo que puedo ver es sólo simple y debería trabajar

su Drive_Trac rutina parece totalmente innecesario, ya que se puede establecer que en su

routne interrupción. Ahora sólo tienes años de interrupción llamada de rutina otra rutina.

Su función de retardo parece un poco demasiado complicado y se puede simplificar. P0 =

0 × FF supuesto enciende la totalidad del puerto, pero como yo no sé en que TRIAC pin

año está, lo dejé como tal, pero creo que podría escribir por ejemplo P0_1 = 1.

No soy un programador de C, pero ¿por qué no intenta algo como esto y ver lo que

sucede:

/ * ================================================ === * /

void ex0_isr (void) interrumpa 0

{

int DimTime = (75 * oscurecimiento);

delayMicroseconds (DimTime);

P0 = 0 × FF;

delayMicroseconds (10); / / Propogationdelay

P0 = 0 × 00;

}

void msdelay (valor unsigned int) {

unsigned int x, y;

for (x = 0; x <valor, x + +)

para (y = 0; y <1,275; y + +);

Page 31: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 31/57

}

/ * ================================================ === * /

void main (void)

{

/ * ----------------

Configurar INT0 (interrupción externa 0) para generar

una interrupción en el flanco de bajada de / INT0 (P3.2).

Habilitar la interrupción EX0 y luego habilitar el

indicador de interrupción

mundial. ---------------- * /

IT0 = 1; / / Configurar interrumpa 0 para el borde que cae sobre / INT0 (P3.2)

EX0 = 1; / / Habilitar la interrupción EX0

EA = 1; / / Habilitar Global Interrupt Flag

P0 = 0 × 00; / / Todos los pines de PORT0 declarada como salida

/ * ----------------

Esperar

siempre. ---------------- * /

while ( 1)

{

for (i = 5; i <128; i + +) {

atenuación = i;

msdelay (10);

}

}

/ * ================================================ === * /

En los programas en C que usted no puede estar seguro de retraso, porque depende de

compilador cómo optimizar los bucles, tan pronto como se realizan cambios en las

opciones de los cambios de retardo.

usted tendrá que utilizar temporizadores para hacer retrasos exactas ..... que no temas si

necesidad de u retrasos de ms, nosotros o incluso segundos ...

a continuación es una función de 1 segundo utilizando temporizadores .....

/ / La idea es hacer un retardo de 50 ms y ejecutarlo 20 veces más 20x50ms = 1000 ms =

1 seg

delay_1s () / / temporizador de 1 seg

{

int d;

for (d = 0, d <= 20, d + +)

Page 32: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 32/57

{

TMOD = 0 × 01;

TL0 = 0xFD;

TH0 = 0x04B;

TR0 = 1; / / Iniciar el temporizador.

while (TF0 == 0); / / Run hasta TF se convierte en 1

TR0 = 0; Temporizador / / detener

TF0 = 0; / / Restablecer la bandera

}

}

indra

en15 de octubre 2013 a las 19:18 dijo:

Hola, gracias a su paciencia y buena respuesta ... yo tratamos con osciloscopio para

cotejarla con el retardo adecuado .. parece que he puesto los retrasos propios

Ahora he hecho un programa, en el que usuario enviará su nivel deseado (como un

comando de UART, como SET L1, L2 SET etc) .. Su trabajo también.

Pero todavía tengo un poco de problema, es decir, cuando la carga está en un cierto nivel,

se enciende correctamente hasta que se recibe el comando siguiente UART del usuario.

Durante en algún nivel de la carga de repente parpadea (parpadeo repentino) a nivel alto y

reaparece al mismo nivel .. Esto no está relacionado con mi retraso o periodo, que ocurre

de forma irregular, y muy a menudo. ¿Es a causa de algún problema en mi circuito? Traté

de cambiar todos los valores de la resistencia, pero todavía esto sigue ..

Arduino

en16 de octubre 2013 a las 3:13 am dijo:

No creo que se trata de un fallo en el circuito de año, podría ser picos en PSU

año. Si comparte código yr conmigo voy a comprobar.

Trate de ejecutar el código que te di y ver cómo se comporta

Page 33: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 33/57

Maha

en08 de noviembre 2013 a las 20:18 dijo:

hola,

He conectado el circuito de dimmer, pero yo solía MOC3020. lo hace adecuado o tengo

que usar 3021?

Arduino

en14 de noviembre 2013 a las 7:14 am dijo:

Sí u can. Lo más importante es que el acoplador óptico es la detección de uno sin

paso por cero

Malí

en22 de noviembre 2013 a las 20:32 dijo:

Saludos y gracias por compartir. No me queda claro cómo se limita la corriente que va

hacia la puerta del Triac. Es una resistencia de 1K (CA a que MOC3021), lo que permitiría

aprox I_G = 215 mA pasar, es decir, -220 + V_R + V_ {TM} + T_ {GT} = 0, donde R = V_R

/ I_G. Tanto los triacs que mencionas tienen una sensibilidad puerta mucho más bajo que

esto. Es probablemente 10k? Gracias

Arduino

en22 de noviembre 2013 a las 21:03 dijo:

Es cierto que a veces se utilizan los valores más altos de la resistencia, y creo que

también yo veo 68 o 100k. Sin embargo, no hay 220 voltios sobre el triac, ya que está en

serie con la carga. Esto probablemente no es una resistencia muy alta, dependiendo de la

potencia de la carga de modo de cálculo año se acerca para esos momentos el triac está

apagado. El 220 voltios es sin embargo un promedio. Si desea activar el triac cerca del

cruce por cero, los números son diferentes.

Page 34: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 34/57

Más que para iniciar el cálculo de que he elegido un diseño existente que conozco

funcionó bien. Estoy seguro de que a pesar de una mayor resistencia también funcionaría.

Puedo intentar una vez lo que podría ser la resistencia máx. Si usted descubre que wld

encantaría oír.

De Tony

en25 de noviembre 2013 a las 22:44 dijo:

¿Cuál es la carga de corriente máxima de esto? Estoy diseñando un control para un

elemento de calefacción 5500W a 240 VCA (~ 23Amp max) que quiero ser capaz de

ajustarse de 0 V (apagado) a plena potencia (a) a 240VAC. El 240VAC PSU tiene dos

líneas telefónicas a 120VCA 180 grados fuera de fase. ¿Es este el tipo de circuito que

debe utilizarse para esta aplicación? ¿Tengo que usar diferentes componentes de

corriente con una capacidad superior?

Arduino

en26 de noviembre 2013 a las 7:35 am dijo:

Tony, no soy lo suficientemente competente en 2 o 3 fases de corriente alterna

para responder con seguridad a esta pregunta. En principio este circuito es

adecuado para cualquier carga, siempre y cuando se elige el triac derecha. Usted

dice que tiene 2 líneas de alta tensión de 180 grados fuera de fase, pero si puedo

entender también tiene un feed neutro, 3 hilos ir al dispositivo de año? Si se trata

de sólo dos líneas, entonces la única cosa que cuenta es el hecho de que hay un

cruce por cero. Si usted tiene 3 líneas de lo que es un poco más complicado, pero

sí, en principio, 2 circuitos podría ser la respuesta, sin embargo no tengo

experiencia con eso. Tal vez alguien aquí puede ayudar

Malí

en25 de noviembre 2013 a las 23:18 dijo:

Gracias por su respuesta. Después de algunas lecturas por fin he entendido los criterios

para elegir el valor de la resistencia de R_G. Cuando se coloca en este circuito, tendrá

Page 35: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 35/57

dos efectos principales:

a) Se limitará / Proporcionar la corriente que pasa por la puerta del triac (I_ {GT})

b) Se hará que la tensión disminuya cuando el triac está encendido ( V_R)

El valor más bajo de esta resistencia puede tener (para 220 V AC) es de R = 220 * sqrt (2)

/ I_ {TMS}, donde I_ {} TMS es la máxima corriente permitida en fototriac del

fotoacoplador. Estos son valores de la oleada, por lo que son transitorios y representan un

límite antes de desmontarlo. Por lo tanto, en su circuito R sería de R = 220 * sqrt (2) / 1 =

311,12 o 330 ohmios, ya I_ del MOC3021 {TMS} = 1A. Esto es consistente con I_ {GM}

que es la corriente de pico puerta de la TIC206. En el esquema se utiliza 1K lo que

limitaría la corriente a 311mA.

Este caso "aumento" puede tener lugar sólo cuando se recibe un impulso por la fototriac y

es capaz de realizar I_ {GT}, y por supuesto, para un valor de la línea de 220 * sqrt (2).

Carga entonces se acumulan en la puerta del triac hasta V_ {GT} se acumulan y el triac

se activa.

En el cuadrante I, (V_ {GT} y A1 son más positivas que A2) para que la carga suficiente

para edificar y V_ {GT} en el triac principal a la abeja alcanzado, el voltaje a través del

triac debe ser igual V_R + V_ {TM } + V_ {GT}

Por supuesto V_R = I_ {GT} * R. Comúnmente, V_ {TM} + V_ {GT} será tanto representan

aproximadamente 3V (hoja de datos). Al mismo tiempo, la resistencia debe ofrecer

suficiente corriente a la puerta del Triac, digamos que un mínimo de 25 mA (sensibilidad

del Triac), así

V_ {triac} = 330ohms * 1.3 V 25 mA 1.1 V = 10.65V y

V_ {triac} = 1k ohmios * 1.3 V 25 mA 1.1 V = 27.4V (el valor de su circuito)

¿Cuál es la tensión necesaria para activar el triac. Por lo tanto, el más pequeño de la

resistencia se requiere menos voltaje para encender el triac principal. Lo que sucede

después es principalmente que hay una caída de tensión en A1 y A2, por lo que la

tensión y la corriente fototriac caerá causando estado de apagado (del fototriac). La tríada

principal se mantendrá interruptor si se respeta la I_H corriente de mantenimiento. Cuando

la corriente de carga está por debajo de I_H, el triac principal se apaga hasta que un

impulso del fotodiodo se emite de nuevo con el fin de polarizar V_ {GT} y construir la carga

requerida en el siguiente ciclo. Q1 y Q3 son los cuadrantes para esta configuración.

Saludos.

Arduino

en26 de noviembre 2013 a las 7:16 am dijo:

Gracias Malí para clasificar hacia fuera y escribirla claramente. Parece hasta

cierto punto es posible que haya leído los mismos artículos en que hice y que me

hizo decidirme a usar sólo un tratado y reposó en el diseño

Page 36: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 36/57

franssenrogier

en26 de noviembre 2013 a las 1:15 am dijo:

Hola,

Soy un programador / usuario arduino novato y estoy tratando de configurar este dimmer

para que la luz se descolora in / out. Me dimmer sí configurado correctamente y funciona

perfectamente con el código de seguridad.

Ahora que he estado intentando algunas cosas a mí mismo en el código, pero me siguen

dando la "búsqueda de nombre de '" mensaje de error cuando i verifico ella.

Yo sólo ajusté el bucle del código original de este modo:

void loop () {

int x = 1;

for (int i = 5; i> -1, i = i + x) {

if (i == 128) x = -1;

}

{

atenuación = i; / / Línea de mensaje de error de

delay (10);

}

}

Miré el código de error en la web y me enteré de que tiene algo que ver con una "i" algo

demasiado o, pero pensé que la "i" para la regulación sigue siendo la misma que la 'i' en

de bucle.

Arduino

en27 de noviembre 2013 a las 2:44 am dijo:

Este error significa que u hacer múltiples declaraciones de i. Donde u hacer esto

no es inmediatamente claro para mí, pero su código es un poco extraño. . Dado

que no es inmediatamente claro para mí lo que está tratando de achive es difícil

decir lo que hay que cambiar

El problema sin embargo es en el ';' después de que su 'x = -1' en su sentencia if

Page 37: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 37/57

No debe haber un punto y coma después de una sentencia if. Debe haber un

punto y coma después de la acción que se define por corchetes alrededor

Si x = -1 es la acción tras su condición, no debe haber corchetes alrededor.

Cuando su soporte final debe ir depende de lo que usted está tratando de lograr.

Sin embargo, parece que acaba de agregar al azar una sentencia if sin tener la

estructura de la actual bucle "for" en consideración.

No estoy seguro de lo que está tratando de lograr, pero eliminando el punto y

coma hace año error desaparece, pero luego por supuesto pide un punto y coma.

retirar 'x = -1;' en total hace que el error de código de funcionamiento libre.

Así, ergo usted ha estructurado su caso, condición equivocada. Un caso de

condiciones debería tener este aspecto:

Si (condición) {action;}

Mientras que usted tiene:

Si algo (condición);

acción existente del bucle FOR

Jos

en27 de noviembre 2013 a las 8:43 am dijo:

Su variable 'i' se declara en un for-loop, por lo que es local para ese bucle, es

decir, no se puede utilizar fuera de ese circuito; el remedio es simple: declare

fuera del bucle, por ejemplo, cuando usted declaró 'x' es un buen lugar.

Saludos cordiales,

Jos

Malí

en26 de noviembre 2013 a las 2:55 pm dijo:

Por el contrario, gracias a ti por compartir. Esta fue mi primera vez la publicación y era

muy servicial. Diseños felices.

Page 38: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 38/57

bigWcharly

en04 de diciembre 2013 a las 9:33 am dijo:

Muchas gracias por compartir esto! También los comentarios y el apoyo que dan son

realmente útiles!

@ Mali, también gracias a usted por su detallada explicación sobre el valor de la

resistencia entre el moc y triac Si he entendido bien, el valor más pequeño es mejor,

ya que entonces el voltaje al otro lado del triac es menor y menos energía se disipa?

¿Existe la posibilidad de que las corrientes transitorias se romperá la R de menor valor?

He visto circuitos similares donde también añaden una resistencia entre la puerta y la T1

del triac. ¿Le suena familiar a cualquiera? ¿Por qué esto se necesitaría? He estado

rompiendo la cabeza de él, pero la única razón que se me ocurre es que sólo es

necesario si la corriente de puerta max es menor que la corriente del terminal máx del

moc? Así que por lo general no necesita entonces ... ¿Alguien puede confirmar?

Ahora, que he construido el circuito con R 330 y también una resistencia similar entre G y

T1. He notado que cuando conecto el circuito a la red eléctrica, la lámpara parpadea y

hasta mi arduino recoge falsas alarmas (yo uso una interrupción adicional para controlar la

luz con un interruptor). Alguien se dio cuenta de esto también? ¿Cómo puedo solucionar

esto? La carga es puramente resistiva (bombilla tradicional).

En espera de su respuesta, muchas gracias de nuevo

Arduino

en04 de diciembre 2013 a las 21:35 dijo:

Gracias bigWcharley

comentario de Malí era útil por cierto. Yo, básicamente, elegí un valor que es

seguro para el MOC y la puerta.

Conozco el circuito te refieres, yo siempre supuse que era conseguir una

definición más estricta de la tensión en la puerta coz que tiene un divisor de

tensión, pero no estoy seguro . Youe explicación podría ser verdad, así

lo que se refiere a la oscilación, ¿esto sólo sucede cuando se agrega que la

resistencia extra?

El parpadeo de la lámpara puede ser causado por el arduino recogiendo falsas

alarmas, pero ¿por qué se recoge éstos (es decir, ¿cuál es la razón) que no sé.

Tal vez alguien más kmnows

Page 39: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 39/57

aficionado

en06 de enero 2014 a las 22:49 dijo:

Hola,

no entiendo lo que he hecho, pero que funcione.

/ / -------------

int AC_LOAD = 3;

int atenuación = 8;

void setup ()

{

pinMode (AC_LOAD, OUTPUT) ;/ / pin de carga Set AC como salida

attachInterrupt (0, zero_crosss_int, RISING);

pinMode (4, INPUT);

digitalWrite (4, HIGH);

pinMode (5, INPUT);

digitalWrite (5, HIGH);

}

void zero_crosss_int ()

{

int DimTime = (75 * oscurecimiento); / / Para 60Hz => 65

delayMicroseconds (DimTime); Ciclo / / Off

digitalWrite (AC_LOAD, HIGH); De disparo / / triac

delayMicroseconds (10); / / Triac El retardo de propagación / / (para uso 60Hz 8.33)

digitalWrite (AC_LOAD, LOW); / / Triac Off

}

void loop () {

if (digitalRead (4) == LOW) oscurecimiento + +;

delay (10);

if (digitalRead (5) == LOW) oscurecimiento;

delay (10);

if (atenuación> 120) oscurecimiento;

if (oscurecimiento <5) oscurecimiento + +;

}

Page 40: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 40/57

/ / ----------------------

Gracias por este proyecto, un cordial saludo

Arduino

en07 de enero 2014 a las 5:07 am dijo:

Eso es bueno. Gracias por reacción año

scott2512

en17 de enero 2014 a las 20:27 dijo:

¿Habrá alguien capaz de darme una lista de todas las piezas que necesito para construir

esto, por favor?

Arduino

en17 de enero 2014 a las 22:03 dijo:

Scott, estoy un poco sorprendido ya que parecía evidente desde el circuito, pero

tal vez yo no estaba claro:

10k resistor, 1 k, 220R, 30k, 30k

4N25

MOC3021

Puente rectificador

TRIAC como TIC206

LED rojo

Usted podría saltar el LED y hacer la resistencia de 220R una 470 R

Tom

en20 de marzo 2014 a las 1:28 am dijo:

Page 41: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 41/57

Hola,

Gran mensaje. No puedo hacer que funcione, aunque. Creo que mi problema es con la

detección de cruce por cero (cuando intento configurar +5 V a Triac manualmente las

luces luz correctamente, así que para este circuito funciona muy bien).

Para el puente rectificador utilizo DF08, es BR adecuado para esto? Como usted ha

mencionado más arriba, me supuesto utilizo 4N25 junto con dos resistencias de 30k

(230V 60 Hz).

Traté de controlar el puerto serie (debe mostrar '1 'cada interrupción), y me dieron

resultado sólo al enchufar el cable de 230 V y desenchufarlo.

Lo siento por mi pregunta de novato, pero estoy realmente nuevo a la electrónica.

Gracias de antemano por su respuesta,

Tom

Arduino

en20 de marzo 2014 a las 4:22 am dijo:

El dfo8 debería estar bien, pero sólo le dou comprobar la disposición de pines para

ver si es compatible. U puede medir cualquier salida en el pin crissing cero?

Tom

en20 de marzo 2014 a las 4:29 am dijo:

Como mencioné antes, cuando trato de medir la producción de cero pin

cruce consigo 5 V sólo cuando estoy enchufando y desenchufando 230V,

de lo contrario no pasa nada. Revisé todos los pins montón de veces y

todo parece estar conectado bien. Como puedo ver que está utilizando

doble rectificación gradual, DF08 es monofásico, ¿importa?

Tal vez debería publicar foto de Circut en placa si no es demasiado para

usted?

Arduino

en20 de marzo 2014 a las 4:46 am dijo:

Sí, seguir adelante y publicar eso. El shld rectificador ser un puente. Tuve

Page 42: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 42/57

la impresión de que el DF08 es un puente. ¿Se inserta el camino

correcto? ¿El 4N25 insertado de la manera correcta?

Tom

en20 de marzo 2014 a las 5:00 am dijo:

Sí, tanto 4N25 y DF08 se colocan en la posición correcta. ¿Podría decirme qué BR que

utilizó en su caso?

Por favor envíeme un correo electrónico, ya que no puedo poner fotos aquí, voy a enviar de

vuelta en respuesta a su correo electrónico.

Arduino

en20 de marzo 2014 a las 5:02 am dijo:

Voy a tener que comprobar. Enviará u email cuando estoy detrás de mi escritorio

Tom

en20 de marzo 2014 a las 24:18 dijo:

Ok, a la espera, gracias!

Arduino

en20 de marzo 2014 a las 24:38 dijo:

He hecho utilizado un DF02

Page 43: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 43/57

Tom

en20 de marzo 2014 a las 24:58 dijo:

DF02 es también única por etapas que he podido ver en la ficha técnica. Yo acabo de

enviar un correo electrónico

Arduino

en20 de marzo 2014 a las 13:03 dijo:

Tiene que uno y verlo. ¿Es realmente un 4N25? Realmente no puedo distinguir el

número

Tom

en20 de marzo 2014 a las 13:08 dijo:

Sí, esto es 100% 4N25. Tiene LTV 4N25 escrito en él, que creo que es

LTV código de productor (Lite-On)

Arduino

en20 de marzo 2014 a las 13:12 dijo:

Tengo una hoja de datos. No está seguro de lo que la monofásica se referiría a ya

que es un rectificador normal de puente. De todos modos, la configuración parece

bien.

¿Ha utilizado el programa exactamente como yo siempre que (con INT 0)?

Lo que quiero que hagas es medir el voltaje en el lado primario del optoacoplador.

Si la configuración es correcta, el software está bien, los cables están bien,

entonces empiezo a pensar que quizás su 4N25 no está bien.

Después de hacer la medición puede cambiarla por otra?

Tom

en20 de marzo 2014 a las 13:29 dijo:

Ok, acabo medí lo que está pasando justo después de BR, y no da

ninguna Votage. Ahí es donde sucede la magia - como he mencionado

antes sólo cuando enchufo y enchufo el cable 230V consigo algunos

Page 44: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 44/57

resultados - cuando lo intenté con el multímetro veo que incluso cuando

mostrando 0 cuando conecto o alejar el multímetro cable muestra - 0.00V

por un rato.

De hecho, yo no sé cómo es posible porque yo ya cambié DF08 dos

veces. He cambiado de nuevo y ... funciona. El primero que yo sólo sé que

roto, segundo parecía estar bien!

Voy a terminar el circuito de regulación y le dejaré saber si todo funciona

bien.

Arduino

en20 de marzo 2014 a las 13:31 dijo:

ok parece que tienes el problema existe. Componentes impares, pero he

tenido vienen directamente desde la tienda y ser defectuoso también. daño

no puede comprobar

Tom

en20 de marzo 2014 a las 3:05 pm dijo:

Sí, funciona bien ahora. Tengo otro problema ahora, y tal vez algo en el

código. Estoy tratando de valores diferentes para la regulación:

Cuando me puse int atenuación de 25 que parece tener la potencia

máxima, cuando me puse a 23 empieza a parpadear mal. Cuando me

puse de atenuación a 128 que tiene aproximadamente 1/2 de potencia,

149 es el valor que se ilumina sólo un poco.

Parece que los valores propios son entre 25 y 149. ¿Por qué?

Arduino

en20 de marzo 2014 a las 16:41 dijo:

¿Se refiere a los valores de "i"?

Si es así que me sorprendería. Los valores límite son teóricamente 0 y

Page 45: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 45/57

128 debido a que el software toma 128 pasos de 75 microsegundos (para

50Hz). Esa es una aproximación, ya que en teoría podría ir a 133 (como

133.3 * 75 es 10000US = 100 Hz).

Polonia-donde está-ha 50 Hz de frecuencia por lo que el 75 de nosotros en

el software debe estar en lo cierto. ¿Está seguro que no por casualidad

selecciona 60Hz? En ese caso, en 128 su tiempo sería 8320 nosotros y

por lo tanto la lámpara no sería totalmente apagado.

Si, efectivamente, usted tendría que a 60 Hz y luego a 149 su tiempo sería

9685, que es de hecho casi apagado.

Si, efectivamente, ha seleccionado correctamente 50Hz luego una fuente

de alimentación "sucia" puede causar estragos ya que puede couse picos

adicionales que provocan la interrupción.

Así que primero me gustaría comprobar el software de año para ver lo que

el tiempo que ha seleccionado.

Assaf Laufer

en09 de abril 2014 a las 14:09 dijo:

Hola Arduino, usted escribió:

El aspecto a considerar es que si usted está construyendo un sistema en el que no está

utilizando una fuente de alimentación ya hecho, sino más bien proporcionar su propia

fuente de alimentación, construido a partir de un transformador y un rectificador, usted

podría considerar recogiendo el 0-travesía desde el lado secundario del transformador.

¿Es posible conectarse a 4N25 y 1k directamente a BR1 y BR2 así a eliminar?

Arduino

en10 de abril 2014 a las 9:06 am dijo:

Querido Assaf, mi respuesta es "depende"

Usted no puede captar la señal directamente desde BR1 porque hay un

condensador de filtrado sobre el + y -. líneas y, por tanto, simplemente no hay

ninguna señal de zerocrossing izquierda ya

Lo que podría hacer es tomarlo off BR1 y luego usar un diodo antes de alimentar

Page 46: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 46/57

la tensión de los capacitores.

Sin embargo, ya que el puente es un componente barato, decidí simplemente

mantenerlo limpio y separar las dos señales por completo.

Confío en que responde a su pregunta

Christoph

en24 de mayo 2014 a las 23:10 dijo:

Estoy interesado en hacer este proyecto. Acabo de recibir una chispa Core y funciona

muy bien. Así que ese es mi plan - para adaptar este proyecto para el Núcleo. Mi

pregunta no es sobre eso, aunque (aún no). Más bien, es en lo que respecta a los cables

al dimmer. Mi dimmer actual tiene dos cables. Uno de la red y uno para la carga (y una

tierra). ¿Cómo voy a ser capaz de hacer este proyecto (que parece que necesita dos

cables de la red eléctrica y dos fuera)?

Arduino

en30 de mayo 2014 a las 7:12 am dijo:

Christoph no estoy del todo seguro de lo que u están pidiendo, pero voy a tratar de

responder. No estoy seguro de si te están diciendo yr dimmer actual tiene dos

cables + un tercero o que realmente tiene 3 cables, pero no es tan importante. De

hecho, un dimmer puede ser visto como un dispositivo que está en serie con la

carga. Por lo tanto sólo dos cables son lo suficientemente: uno procedente de la

red eléctrica y uno que va a la carga. La carga, por supuesto, tiene otro cable que

va de nuevo a la red eléctrica.

El dimmer para el arduino es de hecho el mismo, pero tiene un circuito agregado a

él a ella para detectar el cruce por cero. Eso tiene dos cables de la red eléctrica.

La carga como u puede ver tiene un cable que va directamente a la red, pero

simplemente se conecta a través de la Junta de Coordinación de este circuito.

¿Eso aclarar o hace necesidad de u un poco más de explicación. No dude en

preguntar

Page 47: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 47/57

Steven obstáculo

en25 de mayo 2014 a las 7:07 am dijo:

Me parece que la mitad superior del circuito sería redundante si operaba PWM del triac

a> 480Hz, porque usted estaría promediando 8 o más muestras de la carga en la onda

sinusoidal - el patrón de ritmo estaría por encima del nivel de discernimiento de la

persistencia de la visión humana.

Steven obstáculo

en26 de mayo 2014 a las 2:32 am dijo:

Rasque eso. Me olvidé de que un triac se enciende hasta que la onda pasa por cero de

nuevo, por lo que no puede cambiar de línea de CA más rápido que 120 Hz (100 en el

Reino Unido.)

Daniel

en22 de junio 2014 a las 4:39 am dijo:

Hola me gustaria sabre si Tienes el Programa en el Caso si coloco Potenciómetro un, párr

Realizar la Regulación de la ampolleta. Gracias

Arduino

en22 de junio 2014 a las 5:00 pm dijo:

/ *

Control de Luz AC

Puesto al día por Robert Twomey

Cambiado de detección de cruce por cero para buscar flancoascendente en lugar de caer. (En principio, sólo estaba cortando la mitad negativa de la forma de onda de CA).

También cambió la dim_check () para encender el Triac, dejándola a hasta de fuera de la zero_cross_detect () a su vez.

Page 48: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 48/57

Ryan McLaughlin

El hardware consiste en un Triac para actuar como un interruptor deA / C y un opto-aislador para darnos una referencia de cruce por cero. El software utiliza dos interrupciones para controlar la atenuaciónde la luz. La primera es una alarma de proceso para detectar el cerotransversal de la onda sinusoidal de CA, la segunda está basada en software ysiempre corriendo a 1/128 de la velocidad de la onda de corriente alterna. Después dedetectar el cruce por cero de la prueba de funcionamiento para asegurarse de que ha sido elnivel de regulación adecuado alcanzado y la luz se enciende de onda media, sólo proporcionar corriente parcial y atenuación nuestra carga de CA, por lo tanto.

Gracias a http://www.andrewkilpatrick.org/blog/?page_id=445 y http://www.hoelscher-hi.de/hendrik/english/dimmer.htm

* /

# Include / / Disponible desdehttp://www.arduino.cc/playground/Code/Timer1

volatile int i = 0; / / Variable para utilizar como un contador de zero_cross booleano volátil = 0; / / Boolean para almacenar un"interruptor" que nos diga si hemos cruzado cero int AC_pin = 11; / / Salida Opto Triac int POT_pin = A0; / / Pot para probar la atenuación LED int = 3; / / LED para la prueba int dim = 0; / / Nivel de atenuación (0-128) 0 = en, 128 = 0ff

int freqStep = 65; / / Este es el paso de retraso-por-el brillo enmicrosegundos. Se calcula / / basada en la frecuencia de la tensión de alimentación(50Hz o 60Hz) / / y el número de pasos de brillo que desee. / / / / El único complicado parte es que el circuito de chopper chuletasde la onda de CA dos veces por / / ciclo, una vez en el medio positivo y una vez en el medionegativo. Este meeans / / el picado sucede en 120 Hz para un suministro de 60 Hz o 100 Hzpara un suministro de 50Hz.

/ / Para calcular freqStep se divide la longitud de una onda mediolleno del poder / / ciclo (en microsegundos) por el número de pasos de brillo. / / / / (1,000,000 uS / 120 Hz) / 128 pasos de brillo = 65 uS / brillopaso / / / / 1000000 us / 120 Hz = 8333 uS, longitud de una onda media.

void setup () {/ / Comienza configuración pinMode (AC_pin, OUTPUT); / / Establecer el pin como salida Triac pinMode (LED, OUTPUT); / / Establecer el pin LED como salida attachInterrupt (0, zero_cross_detect, RISING); / / Conecte un

Page 49: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 49/57

Interupt al Pin 2 (interupt 0) para cruce por cero de detección Timer1.initialize (freqStep); Biblioteca / / Inicializar TimerOnepara la frecuencia que necesitamos Timer1.attachInterrupt (dim_check, freqStep); / / Usar la Biblioteca TimerOne adjuntar una interrupción / / a la función que utilizamos para comprobar para ver si es / / el momento adecuado para disparar el triac. Esta función / / Ahora se ejecute cada freqStep en microsegundos. }

void zero_cross_detect () { zero_cross = true; / / Establecer el valor booleano true para contarnuestra función de regulación de que un cruce por cero se haproducido i = 0; digitalWrite (AC_pin, LOW); }

/ / Activar el TRIAC en el momento oportuno sin efecto dim_check () { if (zero_cross == true) { if (i> = dim) { digitalWrite (AC_pin, HIGH); / / Enciende la luz i = 0; / / Paso de tiempo de restauración del contador zero_cross = false; / / Restablecer la detección de cruce por cero } else { i + +; / / Incrementa contador de paso de tiempo } } }

void loop () { dim = analogRead (POT_pin) / 8; / / Leer el valor del dimmer desdepotenciómetro analogWrite (LED, dim); / / Escribir el valor dimmer al LED, para ladepuración }

Daniel

en23 de junio 2014 en 12:57a.m. dijo:

Muchas muchas gracias, me salvaste la vida

Pratik. R. Bhagat

en30 de junio 2014 a las 9:36 am dijo:

Page 50: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 50/57

Mi circuito está trabajando muy bien.

Estoy usando triac-BTA16 600b para la regulación bombilla 200watt. La tensión de

alimentación es de 230 V CA 50Hz. La bombilla sólo toma 0.800ma de la corriente y

sigue siendo mi triac se calientan después de 30 minutos. ¿Qué puede ser la causa?

Estoy utilizando el mismo código que en este foro.

resistencia de puerta = 330R.

MOC3021 Conductor

controlador ATtiny85

cordiales.

PRB

Arduino

en30 de junio 2014 a las 16:17 dijo:

Pratik. Es difícil decir si es que hay algo mal. Pero déjame ver primero si entiendo

correcto de u: se quedó realmente significa 0.800mA? O 0,800? A = 800 mA

800 mA es todavía un anuncio actual de tamaño considerable, incluso si no sería

decir 20 voltios sobre el triac que todavía es el equivalente de un soldador

pequeño. Así que tal vez todo está bien. Es difícil decir qué tan caliente "caliente"

es. La temperatura también depende del nivel de atenuación de la lámpara. U

puede querer intentar ver si hay una diferencia entre la máxima potencia y decir

3/4 de potencia

Pratik

en01 de julio 2014 a las 19:53 dijo:

Hola amigo,

Gracias por tu respuesta.

Extremadamente siento su 0.800Amp es decir, 800 mA.

Temperatura del triac cae entre 50-60 C On-FULL-POWER.

Estoy usando ATTINY85 para controlar el triac que tiene comandos de maestro arduino

usando el protocolo I2C. He preparado un pequeño circuito que consigue instalado en el

interior de la placa del interruptor. Así que debido a que la temperatura aumenta, me temo

que en el interior del tablero de interruptor de la temperatura aumentará más y que puede

dañar el triac. Para evitar el daño que utilicé max triac amp BTA16-600b. Pensé que el

actual 0.800A sería nada a este triac.

Examiné que si yo uso MOC3041 zc-conductor del triac permanece warm45-50c. ¿Hay

algún problema en el disparo de triac (en el código anterior)..

Page 51: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 51/57

¿Qué pasa si he añadido carga inductiva como ventilador de techo i temo que mi triac

conseguirá tostado Por cierto que he añadido varistor en paralelo con el triac. .

¿Su triac también calentando.

Arduino

en02 de julio 2014 a las 1:49 am dijo:

De hecho 800mA hay nada para este triac. Sin embargo, si u no enfrían lo que

todavía puede llegar a ser muy caliente. No me atrevo a decir si es 50-60 grados

es u usual. Que el 3041 mantiene el enfriador triac es de hecho sorprendente. Es

que cuando ambos están en full.power? El tiempo puede ser un problema. ¿De

qué tamaño son las resistencias u han utilizado para cortar la tensión hacia el

4N25 therhe optocoplw?

pratik Bhagat

en02 de julio 2014 a las 15:09 dijo:

Saludos,

Estoy usando 1 watt resitor 120k 1206 SMD en paralelo. Eso hace 2

vatios y 60k.

Hoy me simultáneamente probado CKT triac MOC3041 y con triac con

MOC3021. El triac MOC3041 era poco más fresco que 3021. Carga fue de

2 ventiladores de mesa. Disparando momento de triac está haciendo más

cálido. Pero aún así, funciona bien. He notado un comportamiento starnge

en circ triac MOC3021 es que a valores de atenuación 115-117 bombilla se

queda en penumbra y de alta de forma continua como un latido del

corazón. Mi ATtiny está funcionando con oscilador interno de 8 MHz y se

calibra tinytuner.

Yo no soy bueno en los temporizadores. ¿Podemos utilizar atattin85 8bit

temporizador difícil para disparar con precisión el triac. ¿Se puede apoyar

con el código.

También podemos detectar la detección zerocrossing sólo mediante el uso

de un acoplador óptico como PC817 y un diodo.

Saludos,

Pratik bhagat

Arduino

en03 de julio 2014 a las 2:37 am dijo:

Me pregunto si el temporizador del ATtiny es quizás un poco apagado.

Page 52: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 52/57

Como estoy a punto de dormir contestaré más tarde

Arduino

en03 de julio 2014 a las 24:33 dijo:

Pratik. Sólo para asegurarse de que están en la misma página: el 3041

tiene una detección zerocross incorporado y el 3021 no lo ha hecho. Es

por ello que en este circuito utilizo el 3021, ya que el usuario determina

cuándo se cortará la fase. El 3041 se disparará siempre en el zerocross.

Para propósitos de prueba por supuesto el 3041 cab usarse sino porque

siempre se abrirá completamente el triac, no es de extrañar que un triac

con un 3021 obtendrá un poco warnmer que con un 3041, ya que con la

3021 espero que usted es, de hecho, la regulación del TRIAC, por lo que

es en realidad 'trabajando duro', mientras que el 3041 el Triac será activado

o desactivado.

Cuando usted está detectando el zerocross ti mismo-como en este

circuito, el problema es que se trata de no un detector ideal: en lugar de

dar un impulso fuerte exactamente en el zerocrossing, será más como una

pendiente que comienza a subir un poco antes del zerocross y va a la baja

después de la zerocross. La calidad de este pico es en cierta medida

definida por el valor de la resistencia en la línea de CA: si el valor es

demasiado grande, se obtiene un pico ancho si es demasiado bajo, el

optoacoplador morirá.

Respecto al temporizador: Supongo que usted está utilizando el oscilador

interno. Supongo que debe ser lo suficientemente precisa para los tiempos

de la micro y la banda de milisegundo. Para utilizar el temporizador para el

disparo, presumo que desea establecer un temporizador y luego usar la

interrupción del temporizador para disparar el triac en lugar de dejar que el

ATtiny esperar a través de un retraso. Eso es definitivamente posible

comprobar aquí durante algún arduino basado es mi artículo sobre

instructables).

con respecto a simplemente usando un acoplador óptico y un diodo para

la detección zerocross, pues sí y no. He visto a gente hacer esto, pero le

falta un zerocross cada ciclo, es mejor que utilizar un optoacoplador AC

como el LT814 o el IL251 o H11AA11, porque van a reaccionar ante la ola

de pecado completo.

Entonces, para resumir ... que su TRIAC se está caliente es difícil de

evaluar para mí, ya que no es infrecuente. pero no podemos evaluar que es

"demasiado caliente"

En lo que respecta a su triac cada vez más caliente con un moc 3021 que

Page 53: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 53/57

con un moc 3041 que no está más allá de las expectativas.

Con respecto a su parpadeo de la lámpara a un nivel de 115 a 117 (se

comporta ? normal en 120) Me imagino que eso de hecho es un problema

de tiempo y que a ese nivel que usted parece estar ya en el límite de su

período de tiempo, en lugar de eso que sucede en 128 Si no me queda

claro, voy a explicar.: en un seno 50Hz usted tiene 10 ms que hacer toda

la regulación que desee. El software divide ese período en 128 pasos, pero

por supuesto, si la detección de su zerocross es un poco fuera bien podría

ser que el nuevo zerocrossing ya está allí, la conmutación del triac año,

mientras que usted todavía tratar de tenerlo fuego. Preferiría esperar esto

si la interrupción está configurado para detectar el flanco descendente en

lugar de la salida (como yo lo puse en mi programa).

Pero tengo los siguientes consejos para que usted acerca de lo que usted

podría intentar:

Trate dos cosas, escoger el que i seasiets para usted primero:

- reducir el valor de su resistencia de 60 k, 40 k hacer y ver lo que hace a

su situación

- cambiar la detección de bordes de la interrupción de flanco descendente

y quiero saber si el efecto que se ve en 115-117 ahora sucede más pronto

(digamos a 110) o no

buena suerte

Greg

en18 de julio 2014 a las 16:40 dijo:

Hola a todos .. empecé aquí como estoy teniendo problemas con un proyecto de la

estación de soldadura - Mega Arduino, con termopares sobre el MAX6675, un PID y

PIDautotune bibliotecas y los TRIAC. Sé que debería soportar la totalidad del proyecto en

alguna parte (Fritzing, Arduino, aquí -??? Me dicen).

Es bastante ambicioso, con 128 × 64 GLCD, soldador y pistola de aire caliente. No hay

control de temperatura independiente para las dos herramientas, así como el control de

flujo de aire para la pistola de aire caliente.

Todo es realmente notable buena, lo que permite una primera carrera y la integración de

todos ̂esas cosas ... pero el fuego del TRIAC sólo en algunos ciclos de la red eléctrica .

OC bipolar EL817 y el puente rectificado ac seconday transformador como interrupción

para zerocrossing - esto comienza un contador (el período de las cuales es la del último

Page 54: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 54/57

período, conocido, microsegundos contado () ...) y que el recuento se divide y éstos

división se cuentan de nuevo para determinar cuando se dispara el respectivo triac. La

pantalla LCD sólo se actualiza (no redibujado, sólo por escrito a) y los termopares de sólo

lectura una vez cada 250 ms.

Justo en la parte superior de este hilo se mencionó que el código en el ejemplo dado se

necesitarían alrededor de 10000US ejecutar - que es la duración de un ciclo medio de la

red a 50Hz. Creo que esa es la ruta de mi problema. ¿Cree usted?

Mi código de Arduino es 27704bytes compilados ... ¿no sería eso significa que se

necesita sobre ... algo nos bucle?, El reloj ATmega 16MHz. lo cierto es, es demasiado a

muchos a seguir el ritmo de la toma de corriente? ¡! ¡! ¡! No me parece bien .. 16 MHz es

mucha más rápida (un montón de ips) de 10 ms de la mitad del ciclo.

Mi pensamiento es, si el bucle se 10mS a ... loop, entonces eso sería dictar cuando (y si)

un TRIAC se dispara y no el "contador" necesaria para dictar el tiempo que el TRIAC es

"on" para.

el croquis está aquí:

http://www.eightyeight.co.uk/solderstation/solderstation_v209j_ino.html y el esquema está

aquí: http://www.eightyeight.co.uk/solderstation/Solder% 20Station% 20v208k_schem.pdf

pic del "alcance (? oscillogram!) que muestra el pulso de fuego TRIAC sobrepuesto en la

forma de onda al otro lado del LED OC, cae bastante cerca el uno zerocrossing - todo

esto es bueno. Llamada ISR en flanco de bajada, "disparador alcance está en la fuente:

http://www.eightyeight.co.uk/solderstation/solderstation% 20fire% 20en% 2050pc.JPG allí

al 50% de potencia, los picos están bien situadas a medio camino a lo largo del ciclo

medio - pero no todos los medio ciclo tiene uno! Los pulsos de fuego son irregulares por lo

que lo que yo puedo decir, no discernible que repite el modelo - ciertamente nunca dos

veces las mismas formas de onda relativas en el 'ámbito de aplicación.

Y aquí, el 80% de potencia, mismos, bien colocados "fuegos", pero faltan algunos:

http://www.eightyeight.co.uk/solderstation/solderstation% 20fire% 20en% 2080pc.JPG

La proximidad a zerocrossing de los pulsos zerocrossing (alarmas) no es lo que tengo

que resolver todavía (en su caso) - tengo que encontrar las espigas faltantes

el esquema no es ideal, ya que he sido torturado (sólo un poco litte, es bueno para ser

gratuito) por fritzing - por ejemplo. los puentes rectificadores BR1 y BR3 son sólo

"conectores" en el esquema, pero el + se etiqueta (BR2 fue en una versión anterior de una

bomba de aire del motor de corriente continua, ha ido). Y los números de pieza falta o

está mal. por ejemplo MOC3023 y TRIAC BT137. Y R31, al otro lado del LED en los

Page 55: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 55/57

EL817is optoacoplador zerocrossing sin dispositivo - pero una gorra 1nF está montado

como un solo LPF escenario (con el gotero R) para el seno 50Hz - había un 'joggle'

perfecto en cada zerocrossing donde el sine haría azotar alrededor y causar dos disparos

zerocross. - Así que R31 es un condensador de 1 nF - fritzing nuevo partes limitaciones.

Que se ha añadido como un equipamiento adicional y no es la causa de los doodahs

faltan.

Después de todo este mensaje, mi pregunta es en realidad sólo - será la ausencia de

(quizás el 50%) de los pulsos de fuego-drive TRIAC ser porque el ATmega ha estado

haciendo otras cosas y los echaba de menos? O alguna otra idea?

Si hay más interés que me hago con mucho gusto más a publicar esto como un proyecto

... http://www.eightyeight.co.uk/solderstation/solderstation.JPG

Pero no sería de mucho tiempo que no trabaja!

-Gran consejo para los usuarios GLCD: utilizar el disco duro IDE de un PC (RIP) cable

plano IDC y el uso de los Mega Arduino pines digitales a lo largo del borde corto. Sólo

requiere que el archivo de configuración de Arduino es modificado, el archivo de

configuración de la biblioteca GLCD se comenta en el boceto, hay que nombrar a los

pines DI / O (pines alternativas para que pueda obtener sólo una de las filas), pero todo es

bueno desde allí .... Esto puede afectar a la velocidad del bucle, aunque también, como

algunos de los pins estarán en diferentes puertos que significan las líneas adicionales

compilados que conozco.

Greg

Arduino

en22 de julio 2014 en 12:38a.m. dijo:

Ambicioso proyecto Greg.

Con respecto al circuito ... Encuentro Fritzing horrible para circuito. I ISE sPlan7

Con respecto a su pregunta, difícil de decir. Es difícil obtener una comprensión

completa de software de año, normalmente si se trata de una interrupción, un

procesador ocupado debe ser interrumpido.

Asimismo, no puedo imaginar lo que el procesador shld todavía estar ocupado con

en un ciclo, pero no en el próximo ciclo.

Si Miro las imágenes de alcance yr, que ha incluido las fotografías con principios

y con fines phasecutting y el problema es similar lo que significa que no es un

problema de tiempo. En lo que a unas cuantas formas de onda pueden mostrar un

patrón, el perdedor de los picos de activación parece ser bastante aleatorio.

Ahora que ha usado una rectificación fase sinle que puede causar problemas año

y también su código no es realmente óptima para que su uP hecho podría seguir

siendo hacer las cosas, mientras que la siguiente interrupción ya está ahí.

Page 56: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 56/57

Yo diría que comienzan con el uso de un rectificador de doble fase y ver lo que

hace y en la media hora intente optimizar código yr.

Greg

en24 de julio 2014 a las 9:23 am dijo:

muchas gracias por sus pensamientos, creo que me voy a tener que

sacarlo de mi cabeza ronda la manipulación portuaria para conducir los

pines de salida en sus bits de registro (es que bitbanging ellos - o no del

todo).

rectificador de doble fase? no estoy seguro exaclty qué quiere decir con

eso. Tal vez mi puente rectificador (o su simbología) en Fritzing te ha

engañado. El aire acondicionado es de onda completa (puente) rectificada,

por lo que el detector zc pone medios ciclos positivos y negativos que van,

que no se diferencian. Creo pulso perdidos son muy al azar (de larga base

de tiempo en 'scope).

Acabo de cortar hoy el boceto de vuelta a desnudar esencial probar sólo el

zc y triac disparo del código y ejecutar eso - hizo exactamente lo mismo -

pulsos perdidos. Pero, cuando yo borrado el digitalWrite (triac_pin, LOW)

del loop () (donde siguieron el conjunto ALTA 3US antes en el caso de las

pruebas ..) y que se mueve y escritura BAJA al zc ISR, cada pulso se

dispara correctamente ... y es una muy buena onda cuadrada que termina

siempre en la próxima zc y se inicia en la variable de acuerdo a la entrada

analógica conjunto olla. Yo sólo lo he hecho en un pin de salida - no los

tres a la vez. Yo podría hacer los tres. Además, me podría enviar micros ()

al monitor de serie para ver cuántos somos nosotros que consiguen a

través de - problemas con eso: la producción en serie es muy, muy lento

(incluso a 115200 bps) en comparación por lo que influye en gran medida

el tiempo de bucle.

Yo sólo estoy usando interrupciones para marcar el inicio del ciclo medio

y comenzar simultáneamente contando centésimas 's del ciclo medio. El

disparo del triac no funciona por interrupciones-, porque hasta ahora no he

codificado para los tres triacs que cada uno tiene diferentes requisitos de

accionamiento (POWER), serían tres más interrupciones de

desbordamiento del temporizador.

voy a recodificar un montón, creo.

y voy a tratar sPlan7, no conocí antes y lo necesito!

Gracias de nuevo. Voy a publicar de nuevo aquí cuando hay más.

Page 57: Dimmer-Arduino _ Arduino

1/8/2014 Dimmer-Arduino | Arduino

http://arduinodiy.wordpress.com/2012/10/19/dimmer-arduino/ 57/57

Pensé que podría hacer un video de la pulsestart ola cuadrados en

movimiento a lo largo del ciclo de media ac sincronizado perfectamente

con twiddling la olla-i - pero Arduinos conducir los servos y leds y cortinas

en youtube en respuesta a nunchucks Wii y .. bueno, cualquier cosa. . . el

precio del pescado .. son todos mucho más impresionante. tehe hay un

tío utiliza arduino para alimentar a su perro con un teléfono eh!!.