Termostato zona 3 Arduino Powered (9 / 10 paso)

Paso 9: Haga los botones de hacer algo.

Cada botón tiene que asignar una función o propósito. En nuestro caso, los botones primeros y segundo son para aumentar o disminuir respectivamente los botones, y el tercer botón es para conmutar entre funcionamiento o modo de espera. He incluido un cuarto botón, pero no sé si su necesaria. Por ahora lo dejo en, pero vamos a ver.

El código Final:

Para los efectos de este Instructable, este es el código final

/ * / * Esta es la aplicación que utilizará para controlar el horno. El concepto es la siguiente: tengo 3 zonas monitorizará. Cada zona tendrá al menos un regulador de zona que será controlado por la aplicación de arduino. Cada zona tendrá un único termómetro que presentará un informe al regulador. Dependiendo de la lectura del termómetro y el termostato, los amortiguadores se abierto o cerrado y se encenderá el horno central. Una vez que se haya alcanzado una temperatura aceptable en todas las zonas, el horno se apagará. Además de ciclos de calefacción general, el sistema es programable. En este momento, sin embargo, el ciclo de programación se atenderán aquí, no a través del termostato. IMPORTANTES casos de prueba: (agregarse como que piensan venir a través de ellos * necesita asegurarse de que el horno siempre está apagado si se cierran todos los 3 amortiguadores. * amortiguadores deben estar abiertos a menos que específicamente necesitan cerrarse. * Si el sistema se establece en "hold", todas las zonas están listos para abrir y la programación hace no funciona. * Si sistema es invalidado pero no , la anulación se detiene una vez que sale el próximo intervalo programado * puede reemplazar sólo parte superior explícita y límites inferiores. * / #include < LiquidCrystal.h > //This es una librería para el LCD pantalla #include < OneWire.h > //This es una librería necesaria para el termómetro lecturas #include < DallasTemperature.h > //This es una biblioteca de temperatura #include < Wire.h > #include "RTClib.h" / / conexiones: / / rs (pin 4 del LCD) para Arduino pin 12 / / rw (pin 5 del LCD) para Arduino pin 11 / / habilitar (pin 6 del LCD) a pin 10 del Arduino / / LCD pin 15 al pin 13 de Arduino / / LCD pines d4 , d5, d6, d7 a Arduino pins 5, 4, 3, 2 lcd LiquidCrystal (12, 11, 10, 5, 4, 3, 2); grados de Byte [8] = {B01000 B10100, B01000, B00111, B00100, B00110, B00100, B00100}; const int contraluz = 13; controles de retroiluminación #define THERM_BUS 6 / / todas las lecturas de temperatura llegan a través de este pin único. OneWire oneWire(THERM_BUS); DallasTemperature sensors (& oneWire); DeviceAddress zone1Therm = {0x28, 0x48, 0 x 39, 0x11, 0 x 04, 0 x 00, 0 x 00, 0x94}; DeviceAddress zone2Therm = {0x28, 0xF2, 0x1F, 0x11, 0 x 04, 0 x 00, 0 x 00, 0x38}; DeviceAddress zone3Therm = {0x28, 0xBA, 0xF3, 0 x 10, 0 x 04, 0 x 00, 0 x 00, 0x98}; RTC_DS1307 RTC; Inicio programación / veces son 6 AM, 8:00, 15:00 y 21:00 int * PROGRAMMED_VALUES [7]; int SUNDAY_VALUES [4] = {67, 67, 67, 60}; int MONDAY_VALUES [4] = {67, 67, 67, 60}; int TUESDAY_VALUES [4] = {67, 67, 67, 60}; int WEDNESDAY_VALUES [4] = {67, 67, 67, 60}; int THURSDAY_VALUES [4] = {67, 67, 67, 60}; int FRIDAY_VALUES [4] = {67, 67, 90, 75}; int SATURDAY_VALUES [4] = {67, 67, 67, 60}; PROGRAMACIÓN final float zone1Temp = 0; Float zone2Temp = 0; Float zone3Temp = 0; Boolean z1Check = 0; Boolean z2Check = 0; Boolean z3Check = 0; Boolean isOverridden = false; Boolean furnaceState = false; con furnaceState, false significa que es en la actualidad, verdad significa su en la actualidad. String thermState = "ejecutar"; int overrideValue = 0; currentMode int = 0; const int furnacePin = 7; int zoneCounter = 0; int a = 0; int loopCounter = 0; int z1Pin = 8; int z2Pin = 9; int z3Pin = 13; borrado pin backlight para z3 void setup() {Serial.begin(57600); / / Esto conecta el arduino al ordenador //TEMPERATURE SENSOR SETUP sensors.begin(); sensors.setResolution (zone1Therm, 10); lcd.createChar (0, grados); / / configuración RTC. Wire.Begin(); RTC.begin(); if (!. RTC.isrunning()) {registro ("ERROR", "RTC no corre!"); //RTC.adjust (DateTime (__DATE__, __TIME__)); //THIS sólo necesita a ser línea si usted son ajuste hasta su RTC por primera vez! UNA VEZ QUE, ESTA DEBE ESTAR DESACTIVADA
! } //SETUP salidas pinMode (furnacePin, salida); pinMode (z1Pin, salida); pinMode (z2Pin, salida); pinMode (z3Pin, salida); Finalmente ajuste control de contraluz en arduino. Por ahora sólo instalaremos lo constante. digitalWrite (luz de fondo, alto); CONFIGURACIÓN entradas pinMode (A0, INPUT_PULLUP); CONFIGURACIÓN DE LA PROGRAMMED_VALUES PROGRAMA SEMANAL [0] = SUNDAY_VALUES; PROGRAMMED_VALUES [1] = MONDAY_VALUES; PROGRAMMED_VALUES [2] = TUESDAY_VALUES; PROGRAMMED_VALUES [3] = WEDNESDAY_VALUES; PROGRAMMED_VALUES [4] = THURSDAY_VALUES; PROGRAMMED_VALUES [5] = FRIDAY_VALUES; PROGRAMMED_VALUES [6] = SATURDAY_VALUES; } / / Esto funciona el bucle continua void loop() {delay(100); //DELAY.1 segundos actualmente definido. QUE ajustar como sea necesario //DATE/TIME lógica / / if (loopCounter % 2 == 0) {/ / log ("tiempo", "Bucle iniciado en" + getDateAndTime()); } //TEMPERATURE Lógica / / logTemperatureData(); Si (loopCounter % 30 == 0) {registro ("info", loopCounter (cadena)); //changes salida cada 3 segundos outputToScreen();} / / el siguiente nos permite sólo comprobar estado horno cada 60 segundos mientras leía el botón cambia en tiempo real efectivo si (loopCounter % 60 == 0) {registro ("info", loopCounter (cadena)); sensors.requestTemperatures(); zone1Temp = getTemperature(zone1Therm); zone2Temp = getTemperature(zone2Therm); zone3Temp = getTemperature(zone3Therm); z1Check = checkZoneTemp(zone1Temp); z2Check = checkZoneTemp(zone2Temp); z3Check = checkZoneTemp(zone3Temp); loopCounter = 0; si (z1Check || z2Check || z3Check) {startFurnace();} else {stopFurnace();} si (z1Check & & furnaceState) {closeDamper(z1Pin);} else {openDamper(z1Pin);} Si (z2Check & & furnaceState) {closeDamper(z2Pin);} else {openDamper(z2Pin);} si (z3Check & & furnaceState) {closeDamper(z3Pin);} else {openDamper(z3Pin);}} un = analogRead(0); ESTOS NÚMEROS CAMBIAN DEPENDIENDO DE TUS RESISTENCIAS. int targetTemp = getProgrammedTargetTemperature(); if(a < 20) {//This significa temperatura arriba isOverridden = true; si (overrideValue! = targetTemp & & overrideValue! = 0) {overrideValue ++;} else {overrideValue = targetTemp + 1;} if(overrideValue > 80) {overrideValue = 80;} registro ("info", "temperatura hasta" + (String) overrideValue); loopCounter = -1; Este restablece el contador de bucle, significado todo va ser correr otra vez} si (< 30 & & a > 20) {//This significa temperatura abajo. isOverridden = true; si (overrideValue! = targetTemp & & overrideValue > 0) {overrideValue--;} else {overrideValue = targetTemp - 1;} if(overrideValue < 50) {overrideValue = 50;} registro ("info", "temperatura para" + (String) overrideValue); loopCounter = -1; Este restablece el contador de bucle, significado todo va ser correr otra vez} si (< 45 & & a > 30) {//This es un palanca para hold/run si (thermState == 'hold') {thermState = "ejecutar"; isOverridden = false; registro ("info", "ajuste de thermState para ejecutar");} persona {thermState = "hold"; isOverridden = true; registro ("info", "ajuste de thermState para sujetar");} isOverridden = true; loopCounter = -1; //THIS restablece el contador de bucle, significado todo va ser correr otra vez} si (< 60 & & a > 45) {//DO necesito un cuarto ¿BOTÓN? } loopCounter ++; } boolean checkZoneTemp (int temperatura) {int temp = getTargetTemperature(); if(temperature > temp) {vuelta falso;} verdaderas;} void logTemperatureData() {registro ("Zone1Temp", (String)(int)zone1Temp); registro ("Zone2Temp", (String)(int)zone2Temp); registro ("Zone3Temp", (String)(int)zone3Temp);} void outputToScreen() {zoneCounter ++; if(zoneCounter == 1) {String val = "Zone1:" + (String) (int) zone1Temp; Val += "(" + (String)getTargetTemperature(); += de Val (cadena) ")"; toScreen (val, "modo de:" + getModeString());} else if (zoneCounter == 2) {String val = "Zone2:" + (String) (int) zone2Temp; Val += "(" + (String)getTargetTemperature(); += de Val (cadena) ")"; toScreen (val, "horno de:" + getFurnaceState());} Else {zoneCounter = 0; Cadena val = "Zone3:" + (String) (int) zone3Temp; Val += "(" + (String)getTargetTemperature(); += de Val (cadena) ")"; toScreen (val, "abrir:" + getActiveZonesForScreen());}} void checkMode() {int modo = getMode(); si (modo! = currentMode) {currentMode = modo; if(isOverridden) {si (thermState == "run") {//This lógica simplemente anula el valor de la anulación y se reanuda el programa si no se lleva a cabo la thermstate. De lo contrario, se utiliza el overrideValue. isOverridden = false; }}}} int getTargetTemperature() {checkMode(); if(isOverridden) {return overrideValue;} else {regresar getProgrammedTargetTemperature();}} int getProgrammedTargetTemperature() {int modo = getMode(); Fecha y hora = ahora RTC.now(); fecha de int = now.dayOfWeek(); int * valores = {0}; valores = PROGRAMMED_VALUES [fecha]; log ("info", "conseguir programa temperatura objetivo:" + (String)values[mode]); devolver valores [modo]; } String getActiveZonesForScreen() {String retVal = ""; Si (z1Check & &! furnaceState) {retVal += "1";} si (z2Check & &! furnaceState) {retVal += "2,";} if(z3Check && ! furnaceState) {retVal += "3";} if(retVal.length() == 0) {retVal += 'None';} vuelta retVal; } String getFurnaceState() {if(furnaceState) {return "On";} else {return "Off";}} String getModeString() {if(isOverridden) {si (thermState == "run") {vuelta "Reemplazar";} más {vuelta "HOLD";}} int modo = getMode(); switch (modo) {caso 0: volver "Wake", caso 1: volver 'Cantar'; caso 2: volver a "Inicio"; 3 del caso: volver a "Dormir"; -1 del caso: retorno "Error"; por defecto: volver "N/A";}} int getMode() {DateTime ahora = RTC.now(); int hora = now.hour(); si (hora < 6 || hora > = 21) {vuelta 3;} si (hora > = 6 & & hora < 8) {return 0;} si (hora > = 8 & & hora < 15) {Regresar 1;} Si (hora > = 15 & & hora < 21) {vuelta 2;} vuelta -1; } float getTemperature (DeviceAddress deviceAddress) {flotador tempC = sensors.getTempC(deviceAddress); / / Serial.println(tempC); si (tempC ==-127) {Serial.println ("ERROR al obtener la temperatura.");} vuelta DallasTemperature::toFahrenheit(tempC);} //convenience función. Se encarga de todo el modelo para escribir en el LCDScreen void toScreen (String line1Value, String line2Value) {lcd.begin(16,2); lcd.clear(); lcd.setCursor(0,0); lcd.print(line1Value); lcd.setCursor(0,1); lcd.print(line2Value);} String getDateAndTime() {DateTime ahora = RTC.now(); volver String(now.year()) + "/" + String(now.month()) + "/" + String(now.day()) + "" + String(now.hour()) + ":" + String(now.minute()) + ":" + String(now.second());} void openDamper (int apagador) {si (amortiguador == z1Pin || amortiguador == z2Pin || amortiguador == z3Pin) {digitalWrite (apagador, HIGH); / / log ("información", "Amortiguador de apertura" + amortiguador);} else {registro ("error", "amortiguador de apertura del problema. Amortiguador que no se encuentra. Esperaba 1, 2 o 3. Tiene "+ amortiguador);}} void closeDamper (int apagador) {si (amortiguador == z1Pin || amortiguador == z2Pin || amortiguador == z3Pin) {digitalWrite (apagador, LOW); / / log ("información", "Amortiguador de cierre" + amortiguador);} else {registro ("error", "amortiguador de cierre del problema. Amortiguador que no se encuentra. Esperaba 1, 2 o 3. Tiene "+ amortiguador);}} función de mensajes de registro a la consola. Finalmente planea escribir al archivo de registro en RPi registro vacío (código de cadena, String mensaje) {Serial.println (código + ":" + mensaje);} anular recordData (tipo cadena, objeto String, String valor) {/ TODO - salida a base de datos de RPi} void startFurnace() {//Send señal adecuada para el horno para poner en marcha if(!furnaceState) {furnaceState =! furnaceState; registro ("INFO", "A partir de horno"); digitalWrite (furnacePin, HIGH);}} void stopFurnace() {//Send señal adecuada al horno dejar if(furnaceState) {furnaceState =! furnaceState; registro ("INFO", "Horno de detener"); digitalWrite (furnacePin, LOW);}}

Artículos Relacionados

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
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
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
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
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
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,
Arduino Powered RGB LED Vodka estante

Arduino Powered RGB LED Vodka estante

este instructable conseguir va hacer su propio arduino powered proyecto rojo verde y azul LED. Incluso no tiene que ser un estante! Botellas de vodka se suceden iluminar muy bien así que es lo que elegí hacer.En este proyecto utilizamos cada pin en e