Paso 8: El bosquejo del termostato
Bibliotecas de prerrequisitos
El sketch de Arduino está conectado. Usted necesitará las siguientes bibliotecas instaladas para poder compilar y utilizar:
- OneWire - solía leer el termómetro impermeable Digital IP65
- LiquidCrystal_I2C - utilizado para la LCD Serial
Les recomiendo construir un pequeño circuito y bosquejo para probar cada componente antes de construir el circuito más grande, si acaso algo ha cambiado y necesita una biblioteca diferente.
El archivo de dibujo
Si desea utilizar mi bosquejo como-es, se adjunta a este paso como Thermostat.ino. Debe trabajar con el Arduino Uno (o clon) sin cambios si seguiste mi circuito.
Cómo funciona...
El termostato es bastante simple, y no al contrario el termostato utiliza para controlar la temperatura en su hogar. La pantalla LCD muestra la temperatura actual en grados Fahrenheit y Celsius en la primera línea y la configuración actual en la segunda línea. Cuando la temperatura del agua está por encima de la posición, la bomba y el refrigerador están activadas. Cuando la temperatura baja 1,75 ° F por debajo del ajuste, el refrigerador, bomba y ventiladores todos cerrará hasta que la temperatura se eleva otra vez sobre el escenario.
Bloqueo de entrada
¿Debido a la dificultad de conseguir una señal de los pines de Arduino interrumpir (tal vez se trata de un problema con mi viejo sobre-usado Arduino Uno? O tal vez es por el ruido del resto del circuito), he añadido una función de "Bloqueo de configuración". Para cambiar el termostato de ajuste debe tener botones del arriba y abajo durante 1 segundo. Cuando esto se ha detectado, la pantalla mostrará el mensaje "Unlocked desbloqueado------" en la línea superior y "Temp entrar:" en la segunda línea de 3/4 de segundo. Mientras que desbloqueado, pueden utilizarse los botones UP y DOWN para aumentar o disminuir el ajuste del termostato. Si se presiona ningún botón durante 10 segundos, se restituye el bloqueo de entrada. Ambos botones se presionan y se llevó a cabo simultáneamente otra vez durante 1 segundo la cerradura también se restituye, aunque se advierte que puede ser difícil de presionar ambos botones simultáneamente sin rebotes haciendo que la temperatura aumente o disminuya por uno o dos. Por razón que usted puede preferir sólo deje que el sistema cierre sobre su propio por tocar los botones durante 10 segundos.
Lectura de la temperatura
Por favor lea el bosquejo de todos los detalles sobre cómo funciona el código. Aquí sólo señalaré las porciones de él. En particular, la clase TemperatureModule utiliza la librería OneWire 2 para leer la temperatura DS18B20 en la IP65 sonda Digital de temperatura impermeable. La clase TemperatureModule se basa en código en el DS18x20_Temperature, OneWire 2 bosquejo de ejemplo. Ofrece sólo dos métodos: Initialize() y ReadTemperatureF(). Initialize() debe llamarse antes de ReadTemperatureF por primera vez. ReadTemperatureF devuelve la temperatura en grados Fahrenheit y se llenará en una variable pasa de la temperatura en grados Celsius. Una instancia de TemperatureModule se declara en la línea 171 del bosquejo, después de la definición de la clase:
Usted también notará g_lcd en línea 172 - una instancia de LiquidCrystal_I2C. Ambos de estos objetos globales utilizan macros definidas en la parte superior del archivo. Estas macros también definen cada PIN del Arduino utilizado por el bosquejo:
Programa de instalación
Las líneas 1 a 3 son las bibliotecas utilizadas por este bosquejo. En la línea 3 se verá la inclusión de EEPROM.h. Esto se utilizará durante la instalación, y después se ajusta el termostato guardar la temperatura en el Arduino de EEPROM que es recordado a través de la alimentación se restablece. La temperatura se almacena como un solo byte y permite temperatura ajustes van desde 35 º F a 85° F. Esto parece una oferta razonable para nuestros fines y mediante el uso de un solo byte para almacenar el valor de las cosas se simplifican.
La función setup() del esbozo creará primero un par de variables globales solía debounce nuestros interruptores de botón. Después de ello establecerá el modo de Pin para cada pin se usará (líneas de 255 a 260):
En línea 261, configuramos el enfriador al estado Off, y en línea 263 a 269 el ajuste de temperatura es leer de la EEPROM y a 56° F si el valor está fuera del intervalo. Líneas 271 a 273 inicializar la biblioteca LCD I2C y porque se tarda aproximadamente un segundo para inicializar el TemperatureModule, el mensaje de "Inicializando..." aparece en la pantalla LCD hasta que el sensor de temperatura es detectada (líneas 278 a 280). Adicional 1 segundo espera es forzada en línea 281--esto parece ser requerido por la librería OneWire para leer correctamente el sensor de temperatura.
Con todo lo otro inicializado Coloque interrupción 0 a la función BumpSettingsUp en línea 283 e interrumpir 1 a BumpSettingsDown en línea 284 y habilitar interrupciones (línea 285).
Las funciones BumpSettingsUp y BumpSettingsDown comprobar si la entrada está bloqueada. Si no es así, que aumentar o disminuir g_uiTemperatureSetting, como la interrupción (activada por un pulsador) satisface los requisitos de tiempo para no calificar como un rebote del interruptor. Estas dos funciones también aseguran de que la configuración se mantiene entre 35 y 85 grados.
No se muestra aquí es BumpSettingsDown() que es igual a BumpSettingsUp salvo que disminuye el valor en g_uiTemperatureSettings. También hay algunas otras funciones como ayudantes como OutputLCDLine() que muestra una cadena en línea uno o dos de la pantalla LCD. La función TurnCoolingOnOrOff se muestra a continuación se utiliza para establecer todos los relevadores de 4 a la posición ON o OFF y a grabar cosas sean ON u OFF en g_bCooling:
La función ToggleInputMode se llama cuando ambos botones son mantenidos por un segundo, o después de 10 segundos de ningún botón se oprime mientras entrada está desbloqueada. Como se puede ver registros de un nuevo ajuste en la ranura 0 de la EEPROM:
Esta comprobación de doble pulsación la realiza la función auxiliar CheckLockUnlock():
Todo esto conduce al bucle principal:
En esta primera mitad, hay un cheque para ver si el usuario es desbloquear la entrada. Si ha pasado 10 segundos desde que se pulsa un botón, mientras que la entrada es abierta, el código de líneas 373 por 379 se asegurará de que la cerradura es reintegrada.
En línea 383 el termostato actual se muestra en la segunda línea de la pantalla LCD, y en línea 387 la temperatura se lee en el termómetro. A continuación se muestra en la primera línea de la pantalla LCD, en la línea 397. Porque el ajuste del termostato se convirtió en un flotador en línea 385 puede hacer una simple comparación para ver si el refrigerador tiene que activarse:
Si la temperatura está por encima de la posición de termostato del refrigerador se enciende siempre (línea 406). Si no comprobamos si la temperatura es 1,75 grados por debajo del y si el enfriador es apagado.
En línea 418 segundo un retraso se produce dar tiempo para el termómetro leer correctamente otra vez y el bucle es entrar de nuevo.