Arduino Powered Home (7 / 10 paso)

Paso 7: Programación Arduino

Abajo es el sketch de Arduino para mi última versión de este proyecto. Para su conveniencia, es comprimido en una carpeta con el mismo nombre que el bosquejo. Esto es necesario para su uso con el software Arduino IDE. *** bosquejo puede verse con cualquier editor de texto ***

Tenga cuidado con la colocación de abrir y cerrar llaves {y} porque el código de trabajo las llaves tienen que equilibrarse. Si te pierdes tratando de mantenerse al día con los refuerzos, debería notar que usando el IDE de Arduino (he estado usando IDE 1.0 en Linux y previamente 1.0.5 en Windows) si pones el cursor justo después de una llave de apertura o cierre, el IDE rodearán su soporte correspondiente dentro de un rectángulo. Puede que necesite desplazarse arriba o abajo dentro de su código para encontrar la llave que empareja, como gran parte de su código puede contener llaves con muchos otros pares de llaves entre ellos. Puede utilizar esta característica del IDE para encontrar la llave que está fuera de balance o extra, o tal vez debería combinarse con una llave que falta.

Va sobre el código de alto nivel, principalmente quiero señalar la parte del código que hace la página web. Comienza con client.println(""); Esto dice el Arduino para imprimir una línea con el navegador web al servidor de la conexión con la conexión establecida. Si usted está algo familiarizado con HTML, puede modificar el contenido de la página y enlaces a continuación para satisfacer sus necesidades. Sólo tener en cuenta se necesita esas declaraciones de client.print al principio de cada línea que contiene el contenido de la página web; o salto de línea al final, o un client.print que imprime lo que sigue client.println que imprime una línea con el efecto de un retorno de carro, pero tendrá que terminar con el código html
para salto de línea conseguir el mismo efecto. Para imprimir varias cosas en la misma línea, usar algo como:

Client.Print ("I");

Client.Print ("como");

Client.Print ("Arduino");

Client.println ("proyectos de automatización del hogar");

Lo anterior imprimirá

Me gusta Arduino domótica proyectos

a la página web con un retorno de carro-avance de línea luego.

He añadido una vuelta de tuerca a la página de CDCosma cuando decidí agregar PC y MT interruptor de control, así que usted ' ll ver una pequeña cantidad de código entre partes del HTML que sólo es utilizado por Arduino para decidir lo que mostrará el código HTML en el navegador. Por ejemplo:

Si (digitalRead(8) > 0) {}

Client.Print ("MV está activada");

Client.println("");

Client.println ("apagado MV");

} else {}

Client.Print ("MV está apagado");

Client.println("");

Client.println ("MV encendido");

}

Esto significa que el Arduino Lee pin digital 8 para determinar si es alta o baja. Pin digital 8 se conecta en el riel de alimentación + 5 v potencia de la MV para que el Arduino puede detectar el estado de energía. Si el pin 8 se lee como una alta digital, llevará a cabo las siguientes 3 líneas de código, impresión 'Media Vault está encendido' (ON estará en texto negrita, de color verde), línea 2 rompe así el texto no ' t sobreponer el botón de abajo, que se lee 'Media bóveda apagado' y la dirección url vinculada de ese botón es? mvoff o http://192.168.1.97/?mvoff. (Ver imagen arriba de la página web). Esto significa que enviará? mvoff como la cabecera a Arduino, y cuando el Arduino Lee esa cadena, llevará a cabo código casi al final del bosquejo a partir de las

if(readString.IndexOf("?mvoff") > 0) //checks cadena de encabezado de solicitud

Otra cosa, lo que se lleva a cabo si el pin 8 es baja, se imprimirá el código a la página web del cliente 'Media Vault es OFF' (OFF estará en texto negrita, rojo), 2 línea rompe así el texto no ' t sobreponer el botón de abajo, que va a leer Media bóveda encendido y la dirección url vinculada de ese botón es? mvon y Arduino llevará a cabo el código casi al final del bosquejo correspondiente a? mvon.

Me gustó la manera que esto trabajado lo suficiente como para volver atrás y modificar la luz y piezas de control de ventilador de techo de la página web para incluir este comportamiento condicional. Lo único que no me gusta acerca del uso de esto es que la página no es verdaderamente dinámica, lo que significa que no se actualiza después de hacer clic en un botón. Creo que sería necesario agregar AJAX o JSON que no he aprendido todavía. Me experimentar ampliamente con JavaScript normal y no era capaz de tener éxito. Entonces agregué botones de 'Actualizar' para cada sección que realmente no actualizar como haría el botón de refrescar del navegador, pero sólo enlazan a http://192.168.1.97/ para el Arduino devolver una página fresca sin el navegador envía cualquier cadena de encabezado adicional al final de la URL. Mis botones de pseudo-actualización no hará que el Arduino cambiar el estado de las patas. Si el explorador muestra http://192.168.1.97/?pcon, usando el botón de refrescar del navegador provocaría el navegador para volver a enviar que solicitar y hacer que mi PC a suspender. Esto es desde que estoy usando el interruptor de alimentación para interfaz con el Arduino y la misma acción se requiere para el interruptor Encender como apagar. Es una buena idea para evitar el uso de cualquiera de los botones de navegación del navegador en casos como este.

Después de ese código casi al final del bosquejo, podrás ver las acciones causadas por cada una de las cadenas de encabezado, incluyendo las peticiones de luz de torneado o ventilador encendido y apagado. Los pins que he conectado a la placa de relé de Sainsmart se inicializan como alto en la función de configuración del bosquejo empezando por void setup() para que cuando el Arduino enciende en primer lugar y el bosquejo se ejecuta, los relés están desactivados. Esto debe tenerse en cuenta. Porque entonces ¿qué sucede cuando el Arduino pierde poder, recupera energía? Inicia y ejecuta el dibujo desde el principio. La función de configuración donde se inicializan pines de Arduino se ejecuta sólo una vez cada vez que se ejecuta el bosquejo. Que probablemente algo de vez en cuando dejar en la oscuridad durante unos segundos si su casero de la energía ciclos brevemente mientras son el hogar, que vienen de trabajo o de vacaciones para encontrar todas las luces en porque el poder se fue y volvió nuevo mientras estabas lejos.

También tengo el Arduino escribir al puerto serie qué acción se está realizando. Esto ayuda a resolver problemas con el monitor serial de la Arduino IDE.

Aviso que el código en el bosquejo para el encendido de la PC funciona muy diferente que para el MV. Esto es debido a las diferencias en los tipos de interruptores del panel frontal. La PC necesita sólo un corto momentáneo de su interruptor del panel frontal (o de cualquier interruptor exterior mímico el interruptor frontal). Debido a esto, pin 9 debe causar el relé cerrar momentáneamente y a continuación, abra otra vez. Para ello, puse pin 9 a la baja, que se activa el relé de Sainsmart (recordemos que estoy usando la placa de relé en lugar de un relé de láminas externas), el bosquejo espera 1/4 de segundo antes de instalación pin 9 en alto otra vez, desactivando el relé, este mímico el efecto de pulsar el interruptor de alimentación frontal brevemente y soltarlo. La exacta misma acción del bosquejo es necesaria para causar la PC para despertar de su estado suspendido como para suspenderlo. También escribí en la capacidad para reiniciar la PC imitando un 4 segundos se presiona el interruptor de encendido en caso de que el PC se bloquea en mí. Don t esperar a necesitar utilizar este uno, pero pensado en agregar mientras iba a través de las entradas de interruptor de panel frontal posible en mi mente.

En la parte inferior de la página web, he añadido algunas líneas para recordarme que bosquejo fue cargado, cuando lo subido y desde que ordenador. Recientemente pasó una laptop y una PC de Windows a Linux y no estaba seguro si habría diferencias en el comportamiento de mis bocetos subidos basado en el sistema operativo utiliza para ejecutar el IDE. Lo único que noté que debido a mi mudanza OS es que con Linux, cuando abres el monitor serial en el IDE, restablece su bosquejo. Así que en mi caso, mi relés de alta potencia interruptor para apagado. No ha habido ninguna diferencia en el comportamiento de mis bocetos relacionados con mi movimiento de OS.

Actualización agosto de 2014:

Además de agregar la placa de circuito con interruptores de tacto, he añadido algunos trucos que he recogido de buceo profundo en Arduino intermedio de amandaghassaei: entradas y salidas. Con el fin de imprimir al puerto serial del estado de cada pin cuando lo quiero, he añadido una sección a mi bosquejo antes el setup() que declara una variable de estado de cada pin, como:

int pinState1 = digitalRead(4); Lo hice para cada pin en mi proyecto, pernos 4-9, 11 y 22-25, todas las entradas y salidas.

y usar su ejemplo para contra rebotes un interruptor antes de determinar su estado, declaró variables Booleanas para currentState, lastState, debouncedState para cada botón (como currentState1, currentState2), timeOfLastButtonEvent largo sin signo para cada botón y un debounceInterval estándar para ser utilizado por todos como esto:

boolean currentState1 = bajo; almacenamiento para el actual estado de button1 medido,... etc. para 2, 3 y 4

boolean lastState1 = bajo; almacenamiento para última medida estado de button1,... etc. para 2, 3 y 4

boolean debouncedState1 = bajo; debounced estado de button1,... etc. para 2, 3 y 4

int debounceInterval = 20; esperar 20ms para botones resolver

timeOfLastButtonEvent1 largos sin signo = 0; tienda el último estado de button1 de tiempo cambió,... etc. para 2, 3 y 4

Al final de mi bosquejo fuera mi lazo setup(), agregué la siguiente función que había llamado «Estados»:

void States() {}

pinState1 = digitalRead(4);

pinState2 = digitalRead(5);

pinState3 = digitalRead(6);

pinState4 = digitalRead(7);

pinState5 = digitalRead(8);

pinState6 = digitalRead(9);

pinState7 = digitalRead(11);

pinState8 = digitalRead(22);

pinState9 = digitalRead(23);

pinState10 = digitalRead(24);

pinState11 = digitalRead(25);

Serial.Print ("ventilador lr bajo activo estado de circuito de salida pin 4:");

Serial.println(pinState1);

Serial.Print ("luz activa br bajo estado del pin del circuito de salida de 5:");

Serial.println(pinState2);

Serial.Print ("ventilador activa br bajo estado de circuito de salida pin 6:");

Serial.println(pinState3);

Serial.Print ("estado pin de salida de interruptor MV 7:");

Serial.println(pinState4);

Serial.Print ("power MV estado estado entrada de pin 8:");

Serial.println(pinState5); Serial.Print ("estado pin de salida interruptor de PC de 9:");

Serial.println(pinState6);

Serial.Print ("poder de la PC estado de clavija de entrada de estado del 11:"); Serial.println(pinState7);

Serial.Print ("estado de LR ventilador botón entrada pin 22:");

Serial.println(pinState8); Serial.Print ("estado de la clavija de entrada de botón de luz de BR 23:");

Serial.println(pinState9);

Serial.Print ("estado de la BR ventilador botón entrada pin de 24:"); Serial.println(pinState10);

Serial.Print ("estado de MV interruptor botón entrada pin 25:");

Serial.println(pinState11); }


Y debounce cada interruptor, determinar su estado, decidir si cambia y llamar a mi función States() de cada sección dentro de mi loop() como esta:

luz del dormitorio principal
currentState2 = digitalRead(buttonPin2);

currentTime2 largo sin signo = millis();

Si (currentState2! = lastState2) {}

timeOfLastButtonEvent2 = currentTime2;

}

si (currentTime2 - timeOfLastButtonEvent2 > debounceInterval) { //if ha pasado suficiente tiempo

si (currentState2! = debouncedState2) { //if el estado actual es aún diferente de nuestra última almacena estado debounced

debouncedState2 = currentState2; actualizar el estado debounced

activar un evento para la luz del dormitorio principal

Si (debouncedState2 == HIGH) {}

States();

Serial.println ("Button2 pulsado");

digitalWrite (5,! digitalRead(5)); invertir el estado del pin 5 primera lectura su valor digital, y luego escribir lo contrario

Serial.println("---");

Serial.println();

}

Else {}

States();

Serial.println ("Button2 lanzado");

Serial.println("---");

Serial.println();

}

}

}

lastState2 = currentState2;

También llamo States() cada vez que una acción se toma basada en el aporte de la página web, lo que para una serio gran cantidad de salida serie. Era sobre todo solucionar algún comportamiento extraño que resultó ser causada por una superficie ligeramente conductora (parte superior del pecho antiguo manchado) donde ponen mi Arduino y el interruptor de circuito, aún sin un caso de proyecto. Necesito arreglar eso pronto pero por ahora, he puesto una hoja de papel debajo de todo. Antes de eso, pude colocar mi mano en la parte superior del pecho y un relé invertir los Estados. Resultados no deseables. Yo a recortar el uso pesado de States() o whiddle por su contenido pronto. También cerca de la parte superior de mi ' lista' es para terminar mi caja de plexiglás para la Arduino Mega ethernet escudo y hacer algo similar para el interruptor de circuito impreso.

Las últimas tres imágenes de arriba son imágenes de la salida del monitor serial con notas.

-Final de actualización-

Artículos Relacionados

3 canal arduino Powered controlador de luces de Navidad!

3 canal arduino Powered controlador de luces de Navidad!

Para Navidad este año, quise hacer un proyecto genial pero bastante no sabía qué hacer. Como me estaba poniendo la salida de luces de Navidad para decorar, había un viejo temporizador de luz de Navidad roto. Tomé distancia y miró a su alrededor en el
Cómo construir un Arduino Powered ajedrez jugar Robot

Cómo construir un Arduino Powered ajedrez jugar Robot

a juzgar por el número de ajedrez Instructables relacionados, creo que es seguro decir que la comunidad disfruta el juego.  Sin embargo, puede ser difícil, encontrar alguien que juega en el mismo nivel te.  Para resolver este dilema y para aumentar m
Arduino Powered Infared cosa

Arduino Powered Infared cosa

Hola, este es mi primer instructible. Voy a mostrar cómo hacer un lector de arduino powered sensor análogo (va a utilizar un fotodiodo infrarrojo).Paso 1: partes Necesita varias cosas para hacerlo:1. algún tipo de caja o caja de2. un escudo de Adafru
Arduino Powered trazadores de líneas del guante Heated

Arduino Powered trazadores de líneas del guante Heated

Arduino Powered Guantes calientesEste proyecto es sobre cómo hacer las más inteligente del mundo calienta guante los trazadores de líneas para condiciones de frío extremo como los de Minnesota o personas que tienen syndrome(like me) de Raynaud. Estos
Arduino powered calabaza de Halloween con detección de movimiento

Arduino powered calabaza de Halloween con detección de movimiento

Hola,Este Instructable le mostrará cómo hacer algunos Halloween decoraciones incluyendo arduino powered calabaza de Halloween con detección de movimiento.Paso 1: Hacer calabaza de Halloween Materiales:Globo redondoPeriódicos viejosHarina suaveAguaTém
Orientada a solar, reloj de Arduino-Powered

Orientada a solar, reloj de Arduino-Powered

esto es un reloj diseñado para mantener la hora exacta (independiente de atómico o GPS), Mostrar la salida local del sol, el mediodía solar y puesta de sol y también sí mismo ajustar horario de verano.Quería el reloj para ser fácil de usar y flexible
Un controlado inalámbricamente, tablero de mensajes Arduino-Powered

Un controlado inalámbricamente, tablero de mensajes Arduino-Powered

usted mismo construir un tablero de mensajes controlados de forma inalámbrica, Arduino powered!Aquí es un proyecto fácil que crea una tabla de forma inalámbrica programable del mensaje. Utiliza los módulos XBee para un enlace serial inalámbrico entre
Arduino Powered RGB humor lámpara además Simon

Arduino Powered RGB humor lámpara además Simon

esto es básicamente una lámpara de estado de ánimo de arduino powered RGB y el simon dice juego, dos en uno.Modo de empleo: El dispositivo se inicia con el programa de humor de RGB lámpara por defecto, al pulsar cualquiera de las cuatro teclas en la
Arduino powered tanque RC

Arduino powered tanque RC

este es mi primer instructable así que por favor oso conmigo. Mi nombre es Stanley Deakins y he estado jugando con la electrónica desde hace algún tiempo, aunque fue hace años. Debido a mi trabajo reciente he reavivar esa pasión. He conseguido mis ma
Reloj de LED Arduino powered

Reloj de LED Arduino powered

Un divertido y sencillo reloj LED, que te dará la hora a la media hora más cercana utilizando LEDs solo-color. Piezas necesarias son las siguientes:Arduino NanoTablero de 400 puntos de amarreCable de cintaDS1307 RTC IC32,768 kHz cristal(12) 10mm LEDs
La más terrorífica, arduino powered, intermitente y gritando calabaza de halloween!

La más terrorífica, arduino powered, intermitente y gritando calabaza de halloween!

Aquí le damos un instructivo para un proyecto por la tarde que tenía que hacer: intermitente, gritando, arduino powered calabaza de halloween. Es muy divertido, consiste en un poquito de soldadura y es ideal para aprender sobre sensores y salida de l
Arduino Powered Gainclone (amplificador)

Arduino Powered Gainclone (amplificador)

para aquellos de ustedes que no saben y no lo hice hasta hace poco, un Gainclone es un amplificador que es un 'clon' del original diseño de un amplificador de 47 laboratorios llamados un Gaincard y está basado en amplificadores de único chip de Natio
GSM 900 + ARDUINO smart home control a través de sms

GSM 900 + ARDUINO smart home control a través de sms

requisito deunoGSM 900placa de reléPaso 1: GSM 900 + ARDUINO smart home control a través de smsArduin Unoo GSM + placa de relé + codificación
Termómetro binario Arduino Powered

Termómetro binario Arduino Powered

recientemente adquirí un Arduino Uno y estaba buscando un proyecto "getting started" cool. Decidí hacer un termómetro, como el kit he tenido todas las piezas necesarias (termistor, cables, resistencias, LEDs). A través de iteraciones de un par,