Paso 4: Detalles de Software
Introducción
El software finalmente fue compilado y había probado utilizando Arduino IDE 1.6.5.
Para empezar te va a necesitar las siguientes librerías creadas por Paul Stoffregen;
Biblioteca DS1307RTC.h
https://github.com/PaulStoffregen/DS1307RTC
Librería Time.h
https://github.com/PaulStoffregen/Time
¿Que no estén familiarizados con la instalación de las bibliotecas de Arduino? Vaya aquí para las instrucciones completas;
https://www.Arduino.CC/en/Guide/Libraries
Operación
-Inicio
En el software de inicio inicializa el shield Ethernet con valores Puerto HTTP (80), dirección MAC (DEADBEEFFEED), dirección de IP (su 192.168.1.177, no DHCP), dirección IP de puerta de enlace (aquí Router es 192.168.1.1) y máscara de subred (aquí clase C, 255.255.255.0) y comienza el servidor 'server.begin()'.
Todas las direcciones son IPv 4.
El código entonces entra en la sección bucle del marco de software de Arduino.
-Lazo
El software lleva a cabo las siguientes acciones en cada paso sucesivo del lazo;
- Leer en la salida del sensor de temperatura vía A0 'sensorPin' y convertir a grados C. Si el valor calculado es superior al nivel de 'OVER_TEMP' todo el relé de salida se apagan y un marcador de temperatura se establece. Esto reduce la disipación de energía en el gabinete de servidor. La bandera se utiliza más adelante para controlar el formato del HTML por el cliente, provocando un mensaje de advertencia.
- El software registra el tiempo actual 'RTC.read(on_timer)' y lee el estado de los botones de entrada vía indirectas banderas booleanas; 'SwanLightButtonState', 'TopShelfButtonState' y 'UnderDeskButtonState'. El tiempo de este Lee 'GlobalTimeCurrent' se compara con 'GlobalElapsedTime'. Si 'HOURS_DELAY' + 'MINUTES_DELAY' es se ha superado las luces se apagan automáticamente. Este código es no bloqueando así permite el Arduino para pasar más tiempo de seguimiento para solicitudes de conexión HTTP y mejora Web Server rendimiento <> = cliente. Este 'estancia en temporizador' puede ampliarse con una pulsación (vía página web o caja del botón) de cualquier botón, formando funcionalidad monoestable restaurable.
- Cada entrada de botón real entonces se controla secuencialmente a través de un 'digitalRead()' utilizando las referencias de pin 'SwanLightButton', 'TopShelfButton' o 'UnderDeskButton'. El código para este utiliza la llamada 'millis()' a crear software switch de rebote. Aquí interruptor de rebote se extiende deliberadamente para evitar la activación accidental. Su funcionalidad se desarrolló para alternar la luz si mantiene permanentemente en la posición on. Esto sirve a tres propósitos; 1: se necesita sólo un botón para activar o desactivar la luz correspondiente, 2: Esto reduce el número de entradas necesarias en el Arduino, 3: alerta al usuario si se presiona accidentalmente un botón como sería el caso si algo pesado se coloca en la caja del botón sin saberlo (me incliné a esta a través de la experiencia). Otra vez estas llamadas de demora son no-bloqueo.
- El código entonces comprueba para una solicitud de cliente y lee en los caracteres de un HTTP GET a través de un 'client.read()'.
- Si la petición HTTP es completa, terminada por '\n' el software responde con una serie de comandos de 'client.println()'. Cada uno de que contiene un HTML con formato de respuesta, formando la versión luz de estudio página web en el cliente, incluyendo hora, fecha, temperatura (o sobre ADVERTENCIA temp), s/w, restante en tiempo etc.. Observará desde la parte superior del código he añadido la respuesta del compilador que indica cuánta memoria de programa y memoria dinámica estaba disponible. La biblioteca de Ethernet es bastante memoria de 'hambre' por lo que necesitará tener en cuenta el tamaño de su código. Para hacer un uso más eficiente de la memoria no volátil disponible rodeado de cada literal con la macro 'F()' de cadena 'client.println()' que se almacenaría en el espacio flash y no código.
- Al final de la respuesta de la solicitud GET se comprueba para ver si el cliente está solicitando un tiempo cambiar 'strHTTPTimeLiteral', una fecha de cambio strHTTPDateLiteral. Si este es el caso entonces el RTC se actualiza en consecuencia.
- Finalmente se hace una comprobación para determinar si se ha solicitado un cambio en el estado de luz a través de la interfaz web, si es así las respectivas banderas booleanas indirectas son actualizados ('SwanLightButtonState', 'TopShelfButtonState', 'UnderDeskButtonState') junto con el correspondiente pin de salida de Arduino para manejar correctamente el relé asociado.
- Bucle se repite.
.
Cálculo de la temperatura con el MCP9700
De la hoja de datos de fabricantes, la MCP9700 da un cambio de la salida de 10mV/grados centígrados. La ecuación para el cálculo de la respuesta es Vout = Tc * Ta + Vout0C. (o y = mx + c) Donde Tc (coeficientes de la temperatura) es 10mV/grados centígrados, Ta es la temperatura ambiente se mide, Vout0C es la salida de MPC9700 a 0 grados C.
Así que la temperatura se calcula así; TemperatureDegC = ((sensorValue * (5.0/1024.0))-0.5)/0.01
Otros elementos a considerar
- Tiempo auto establecido en Inicio. O actualización automática periódicamente. Ahorra tener que hacerlo manualmente.
- Visualización del estado actual de cada indicación en página web.
- Mejorar el código HTML. Posiblemente vuelva a escribir usar sirve las páginas de la tarjeta Ethernet Shield de uSD a bordo. Literales de cadena codificado no es un método particularmente eficaz de utilizar.
- Si se hace 3, añadir un servidor FTP tan actualizado páginas web y ser cargado fácilmente.
Lecciones aprendidas
- Usar una versión de Arduino Pro por lo que puede añadir sus propio, conectores confiables.
- Pasar más tiempo aprendiendo HTML. Me engañó y utilizar WireShark para ver exactamente lo que estaba pasando sobre el Ethernet por lo que pude averiguar lo que sucedía en el escudo de Ethernet. El IDE de Arduino es bastante bueno para ponerse en marcha pero lamentablemente inadecuada para depurar con. Si no te gusta usar declaraciones 'impresión'. No.
.
.
Finalmente, como siempre, el código, diagrama del circuito, detalles de construcción etc. se proporcionan gratis para usar en cualquier modo de ver cabe (apenas hacen una mención de mí), aunque vienen sin soporte.
.
Feliz inventando.