Software lámpara ajustable en el Arduino

Ha caminado mucho tiempo la idea de la luz, de ajuste continuo, ni por asomo. H4> Mientras LEDs eran impopulares, costoso, e incandescente no quiero, ya que la tensión y el consumo.
Y entonces llegó el día ...

Recientemente completó una versión alfa de arañas de intelectuales, que sólo puede suceder si el administrador del sistema recoge un soldador y C ++.

Antes de compartir un poco de la tecnología para contar lo que sabe y lo que yo no era capaz de lograr H5> -. Cuando está activado, la araña está incluido en el máximo (como es lógico), es decir, que puede ser utilizado como una lámpara de araña ordinaria con la conmutación física;
- Chandelier controlado así como de forma remota desde el panel de control (cuatro para Arduino);
- El brillo se puede ajustar continuamente (relativamente) hacia atrás y adelante por medio de dos botones. En este ajuste cíclico, es decir, si usted comete un máximo brillante - la luz se apaga (reajustar a 0), y si usted gana menos de mínimo - máximo su vez en (por lo que el toque de un botón en el control remoto, la araña se puede encender y apagar)
- Media hora más tarde después de que el poco araña restablece el brillo. La luz brillante no siempre es necesario, y esto muleta poco para enfriar el sistema. Después de restablecer el brillo, se puede volver al máximo, y de nuevo durante media hora.
- Hay un temporizador inevitable candelabros sueño. De forma predeterminada, es una hora. Uso del control remoto (pulsando uno de los botones) puede ser instalado en la media hora, dos horas o una hora. Pero no es estúpido porque temporizador:
- Tenemos unas lámparas con sensor de movimiento, respectivamente, el temporizador cuenta el tiempo después del último movimiento detectado;
- Por la noche, cuando se detecta movimiento, la lámpara se enciende muy poco brillo durante un minuto. Durante el día no funciona, porque la lámpara debe encenderse sensor. Los movimientos necesitan unos pocos (unos 5 segundos), la araña no fue incluida cuando Me doy la vuelta en la cama;
- Fitch incluye lámparas de araña en la noche apagan pulsando el botón del mando a distancia, ya que el concepto de "tiempo de noche" para el sensor de luz para los seres humanos es ligeramente diferente;
- Cuando llegue el tiempo de espera fuera - luz comienza gradualmente a extinguirse, y si en ese momento ocurre el movimiento - la luz volverá a su valor anterior;
- Chandelier capaz de indicar su estado usando svetodiodika, e incluso la mayoría de los candelabros
.
Tener el deseo de leer más? Entonces adelante.

Para iluminar los chinos ordinarios fueron LEDs, 20 vatios, la luz cálida
blanco seleccionado



Para gestionar la parte lógica fue elegido Arduino Mini


Sensor de movimiento ofrece TI


Un sensor de luz aquí


El control remoto utiliza aquí tales


Conductor chino común.


No voy a estorbar lectores circuitos innecesarios teóricos inútiles conectados en cada bloque totalmente primitivo.
Sensor para el mando a distancia tiene cuatro salidas que devuelven la unidad presionando los botones del mando a distancia. Ellos nos conectan a las entradas digitales. El sensor de movimiento también. Sensor de luz está conectada a la entrada analógica A0.
El techo pintado se tomó demasiado barato y chino.

Especial atención debe ser tenue, ajustable por software. En Internet un montón de esquemas, una gran cantidad de dispositivos preparados. Fui de una manera sencilla, y puse una sola MOSFET, IRF840. Por cierto, funciona.

pido disculpas por el diagrama dibujado a mano, esquemática por desgracia yo no soy especial. El principio aquí es una conexión: h5>

pido disculpas por el código, por desgracia programación no SPEC: h5>
 & lt; code class = & quot; cpp & quot; & gt; // Lieb Especial, lo que reduce la latencia cuando se usa digitalRead \ digitalWrite. # include & lt; digitalWriteFast.h & gt; int LED = 7; // Ping, que es indicador LED conectado int mov = 5; // Ping, donde se conecta el sensor de movimiento int tra = 9; // Ping, que es la puerta comunicada de la int FET arriba = 12; // Pin, donde Pin Un int abajo = 11; // Pin donde Pin B int swi = 10; // Pin, donde Pin C int swi1 = 6; // Pin, donde Pin D Cadena btn; int tmp; int mv; int temporizador, inttimer; // Variable de temporizador int ancho = 255; // Brillo LED defecto int act = 255; // Servicio variable de brillo int hidráulico paso a paso = 5; // ¿Cuánto hay que cambiar el brillo int movió; // Trabajo Síntoma después de ir fuera int = 3600; // Tiempo de espera después del cual la luz se apaga int svet = 60; // ¿Cuántos encender las luces al conducir de noche void setup () {pinMode (led, OUTPUT); pinMode (tra, OUTPUT); pinMode (13, OUTPUT); pinMode (mov, INPUT); pinMode (arriba, INPUT); pinMode (abajo, INPUT); pinMode (SWI, INPUT); temporizador = 0; Serial.begin (9600); analogWrite (tra, 255); } Lazo vacío () {// Aumentamos temporizadores temporizador ++; inttimer ++; int sensorValue = analogRead (A0); // Leer el brillo de la luz mv = mv + digitalReadFast (MOV); si (== mv 7) {mv = 0;} // contar cuántos movimientos, y se restablece si les gusta 7 btn = buttonPressed (); // Leer el que se pulsa el botón en la // remoto Si se pulsa el botón, la formación de la acción si (btn = & quot;! & Quot;) {if (br & gt; 10) {hidráulico paso a paso = 10;} // Si el valor actual es mayor que 10 luego de la subasta establecido en 10. Esto hace que para un cambio más notable en el brillo si (btn == & quot; a & quot;) {br = br + hidráulico paso a paso;} if (btn == & quot; b & quot;) {br = br-hidráulico paso a paso;} si (btn == & quot; c & quot;) {// Si al pulsar la tecla Opción de tiempo de espera, entonces, si (a == 7200) {a = 3,600; parpadeo (8, 50); retardo (1000);} else // Si la corriente de tiempo de espera durante dos horas, a continuación, restablece durante una hora, y blimkaem 8 veces si (a cabo == 1800) {OUT = 7,200; abrir y cerrar (0, 2000); retardo (1000);} else // Si el tiempo de espera de corriente durante media hora, a continuación, poner en dos y uno blimkaem mucho tiempo si (a == 3600) {a = 1,800; parpadeo (50, 15); retardo (1000);} // Si la hora de tiempo de espera actual, a continuación, poner en la media hora y la luz parpadeante} if (br & lt ; 0) {br = 255;} // Si el umbral de luminosidad demasiado baja, entonces se ajusta al máximo (encender la luz) si (br & gt; 255) {br = 0;} // Si se supera el umbral de luminosidad, restablezca a 0 (desactivar la luz ) act = br; analogWrite (tra, ancho); // Establecer la tensión en la salida del PWM de Arduino, y en consecuencia la puerta tranzictora // Cambiar las variables después de presionar cada botón del temporizador = 0; inttimer = 0; movido = 0; retardo (250); } // Si había un movimiento es detectado, el conteo comienza de nuevo si (digitalReadFast (mov) == 1) {temporizador = 0; digitalWriteFast (13, HIGH); } Else {digitalWriteFast (13, LOW); } If ((br & gt; 240) y (inttimer == 1800)) {br = 180; cur = 180; analogWrite (tra, act);} // Si ha pasado media hora, y el brillo de la lámpara es alta, restablezca un poco // Para lograr un determinado temporizador extinguir gradualmente la luz, sino para recuperar, si en este momento para detectar el movimiento si (timer == fuera) {for (int i = br; i & gt; = 0; i--) {analogWrite (tra, i); br = 0; si (digitalReadFast (mov) == 1) {temporizador = 0; br = act; analogWrite (tra, act); break; } Delay (100); }} // Si la luz nocturna carga temporizador y fuera de la luz si ((timer == svet) y (== movido 1)) {br = 0; movido = 0; mv = 0; act = 0; analogWrite (tra, ancho); } // Si no hubiera movimiento y brillo de la lámpara - un cero, a continuación, encienda la luz en el Pyaterochka y restablezca el temporizador si ((mv & gt; 5) y (br == 0) y (sensorValue & gt; 1020)) {br = 5; act = 5; temporizador = 0; movido = 1; mv = 0; analogWrite (tra, ancho); }} Parpadeo Void (int cuenta, int del) {for (int i = 0; i & lt; = cuenta; i ++) {// establece el valor (rango de 0 a 255): retraso (del); digitalWriteFast (LED, HIGH); retraso (del); digitalWriteFast (dirigido, LOW); }} Cadena buttonPressed () // función para determinar la muleta de prensado en el teclado + pausa {btn = & quot; & quot ;; for (int i = 0; i & lt; = 1,000; i ++) {if (digitalReadFast (abajo) == 1) {btn = & quot; b & quot ;;} if (digitalReadFast (hasta) == 1) {btn = & quot; a & quot ;;} if (digitalReadFast (SWI) == 1) {btn = & quot; c & quot ;;} if (digitalReadFast (swi1) == 1) {btn = & quot; d & quot ;;} if (btn = & quot;! & quot ;) {parpadeo (0, 20); break;} retardo (1); } Btn Retorno; } & Lt; / Código & gt;  pre> 
Un flujo de trabajo poco: h5>
 







Una pequeña demostración de vídeo: h5>

poco decepcionante: h5> - El diseño, que fue filmada en video - es inutilizable. Dos de 20 vatios LED caliente radiador raskochegarilsya luz hasta tal punto que el estaño fundido, que a ellos se soldaron cables. Sustituido dos de 20 vatios caliente, cuatro de 10 vatios neutral e introdujo una muleta por el brillo.
- LED blanco neutro - repugnantes y desagradables a la vista
. - No puedo pensar en emulación de sujeción teclas en un teclado de computadora. Debido a esto, la luz cambia a borbotones, porque demora - fijos.
- Control remoto periódicamente proglyuchivaet, a saber, no atrapado por el receptor, por lo tanto, cuando se tiene indicador de encendido del mando a distancia - no es una garantía de la entrega de la señal. Para ello fue necesario introducir un indicador sobre la araña
- Radiador masivo para dos LED de 20 vatios - no era suficiente, o están trabajando en modo extremo. Mañana mido las corrientes y trato de poner una resistencia.
- Luz de cortesía - mierda completa, ya que muestra todos los mocos en los cables. Tengo la intención de pedir el acrílico mate, y hacer que la luz blanca difusa.
- ¿No ha encontrado el KREN5A (increíble pero cierto) del mercado, debido a esto, para Arduin tuvo que poner extra. fuente de alimentación, pero quería darle de comer al conductor.
- Snot - no es bueno, Arduino también. Cuota grabado para atmegi, llegado programador - deshacerse del exceso de mucosidad
.

Gracias por leer hasta el final. H4> ¿Está usted interesado en el hecho de que he publicado otro artículo con una araña de mejora?

no Votado 242 personas. 40 personas se abstuvieron. Sólo los usuarios registrados pueden votar en las encuestas. sesión , por favor.

Fuente: habrahabr.ru/post/247151/