Thermostat de 3 zones Arduino alimenté (9 / 10 étapes)

Étape 9: Faire les boutons faire quelque chose.

Chaque bouton correspond à assigner une fonction ou un objet. Dans notre cas, les boutons de la premières et la deuxième sont pour augmenter ou diminuer les boutons respectivement, et le troisième bouton est pour basculer entre courir ou maintenez mode. J’ai inclus une quatrième case, mais je ne sais pas si son besoin. Pour l’instant je vais laisser dedans, mais nous allons voir.

Le Code Final :

Aux fins de ce Instructable, c’est le code final

/ * / * C’est l’application que je vais utiliser pour contrôler la fournaise. Le concept est la suivante : J’ai 3 zones je surveillerai. Chaque zone aura au moins un amortisseur de la zone qui sera contrôlée par l’application de l’arduino. Chaque zone aura un seul thermomètre qui rendra compte au contrôleur. Selon la lecture du thermomètre et le réglage du thermostat, ouvrir ou fermer les amortisseurs et le fourneau central s’allume. Après avoir atteint une température acceptable dans toutes les zones, le four s’éteint. En plus des cycles de chauffage général, le système sera programmable. Pour l’instant, cependant, le cycle de programmation est traité ici, sans passer par le thermostat. Des cas de TEST IMPORTANT: (à ajouter que je pense d’eux / tomber sur eux * doivent s’assurer que le four est toujours éteint si tous les 3 amortisseurs sont fermés. * amortisseurs doivent être ouverts, à moins qu’ils doivent spécifiquement être fermés. * Si le système est définie sur « hold », toutes les zones sont définies pour l’ouvrir et la programmation ne pas exécuter. * Si le système est substituée, mais n’a pas tenu , la substitution s’arrête une fois que le prochain intervalle programmé arrive * peut seulement substituer aux limites explicites supérieures et inférieures. * / #include < LiquidCrystal.h > //This est une bibliothèque nécessaire pour le LCD affichage #include < OneWire.h > //This est une bibliothèque nécessaire pour le thermomètre lectures #include < DallasTemperature.h > //This est une bibliothèque de température #include < Wire.h > #include « RTClib.h » / / liens: / / rs (broche 4 de LCD) pour Arduino pin 12 / / rw (broche 5 de LCD) pour Arduino pin 11 / / enable (broche LCD 6) sur la broche 10 de Arduino / / LCD pin 15 à goupille de Arduino 13 / / LCD pins d4 , d5, d6, d7 à Arduino épingle 5, 4, 3, 2 lcd innovente (12, 11, 10, 5, 4, 3, 2) ; deg octet [8] = {B01000, B10100, B01000, B00111, B00100, B00110, B00100, B00100} ; const int rétroéclairage = 13 ; contrôles rétro-éclairage #define THERM_BUS 6 / / toutes les lectures de température viennent via cette broche unique. OneWire oneWire(THERM_BUS) ; Capteurs DallasTemperature (& oneWire) ; DeviceAddress zone1Therm = {0 x 28, 0 x 48, 0 x 39, 0 x 11, 0 x 04, 0 x 00, 0 x 00, 0x94} ; DeviceAddress zone2Therm = {0 x 28, 0xF2, 0x1F, 0 x 11, 0 x 04, 0 x 00, 0 x 00, 0 x 38} ; DeviceAddress zone3Therm = {0 x 28, 0xBA, 0xF3, 0 x 10, 0 x 04, 0 x 00, 0 x 00, 0x98} ; RTC_DS1307 CCF ; DÉBUT de programmation / / temps sont 6 AM, 08:00, 15:00 et 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} ; FIN de programmation float zone1Temp = 0 ; float zone2Temp = 0 ; float zone3Temp = 0 ; Boolean z1Check = 0 ; Boolean z2Check = 0 ; Boolean z3Check = 0 ; isOverridden booléen = false ; furnaceState booléen = false ; avec furnaceState, false signifie qu’il est actuellement désactivé, true signifie son actuellement. String thermState = « exécuter » ; 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 ; nettoyage de broche de rétro-éclairage pour z3 void setup() {Serial.begin(57600); / / cela relie l’arduino vers l’ordinateur //TEMPERATURE capteur SETUP sensors.begin() ; sensors.setResolution (zone1Therm, 10); lcd.createChar (0, deg); / / CCF SETUP. Wire.Begin() ; RTC.begin() ; if (!. RTC.isrunning()) {Journal (« ERROR », "RTC n'est pas en cours d’exécution!"); //RTC.adjust (DateTime (__DATE__, __TIME__)); //THIS seulement a besoin pour être DÉCOMMENTÉ si vous sont réglage vers le haut votre RTC pour la première fois ! UNE FOIS QU’IL EST DÉFINI, IL DOIT ÊTRE DÉSACTIVÉ
! } //SETUP sorties pinMode (furnacePin, sortie) ; pinMode (z1Pin, sortie) ; pinMode (z2Pin, sortie) ; pinMode (z3Pin, sortie) ; finalement intègrent contrôle du rétro-éclairage arrière arduino. Pour l’instant nous allons juste affectez-lui la constante. digitalWrite (rétro-éclairage, HIGH) ; ENTRÉES de configuration pinMode (A0, INPUT_PULLUP) ; MISE EN PLACE DE LA PROGRAMMED_VALUES DE PROGRAMME HEBDOMADAIRE [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 ; } / / Cela va la loop() Sub boucle continue {delay(100) ; //DELAY actuellement fixé à.1 secondes. S’ajuster au besoin //DATE/TIME logique / / if (loopCounter % 2 == 0) {/ / log ("TIME", « Boucle ouverte à » + getDateAndTime()) ; } //TEMPERATURE logique / / logTemperatureData() ; Si (loopCounter 30 % == 0) {log ("info", loopCounter (String)); //changes sortie chaque outputToScreen() de 3 secondes;} / / ce qui suit nous permet de seulement Vérifier état du four toutes les 60 secondes tout en lisant le bouton se transforme en temps réel efficace si (loopCounter % 60 == 0) {log ("info", loopCounter (String)); sensors.requestTemperatures() ; zone1Temp = getTemperature(zone1Therm) ; zone2Temp = getTemperature(zone2Therm) ; zone3Temp = getTemperature(zone3Therm) ; z1Check = checkZoneTemp(zone1Temp) ; z2Check = checkZoneTemp(zone2Temp) ; z3Check = checkZoneTemp(zone3Temp) ; loopCounter = 0; if (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) ; CES NUMÉROS CHANGENT SELON VOS RÉSISTANCES. int targetTemp = getProgrammedTargetTemperature() ; if(a < 20) {//This signifie température jusqu'à isOverridden = true ; if (overrideValue! = targetTemp & & overrideValue! = 0) {overrideValue ++;} else {overrideValue = targetTemp + 1;} if(overrideValue > 80) {overrideValue = 80;} Journal ("info", "température jusqu'à" + (String) overrideValue) ; loopCounter = -1 ; CE RÉINITIALISE le compteur de boucle, sens tout va être exécuté à nouveau} si (un < 30 & & a > 20) {//This signifie température down. isOverridden = true ; if (overrideValue! = targetTemp & & overrideValue > 0) {overrideValue--;} else {overrideValue = targetTemp - 1;} if(overrideValue < 50) {overrideValue = 50;} Journal ("info", "température descendre à" + (String) overrideValue) ; loopCounter = -1 ; CE RÉINITIALISE le compteur de boucle, sens tout va être exécuté à nouveau} si (un 45 < & & a > 30) {//This est un cabillot pour cale/exécuter si (thermState == "hold") {thermState = "run"; isOverridden = false ; Journal ("info", "réglage thermState à exécuter");} autre {thermState = "hold"; isOverridden = true ; Journal ("info", "réglage thermState de tenir");} isOverridden = true ; loopCounter = -1 ; //THIS RÉINITIALISE le compteur de boucle, sens tout va être exécuté à nouveau} si (un < 60 & & a > 45) {//DO j’ai besoin d’un quatrième BOUTON ? } loopCounter ++ ; } boolean checkZoneTemp (int température) {int temp = getTargetTemperature() ; if(temperature > temp) {return false;} retourne true;} void logTemperatureData() {Journal ("Zone1Temp", (String)(int)zone1Temp) ; Journal ("Zone2Temp", (String)(int)zone2Temp) ; Journal ("Zone3Temp", (String)(int)zone3Temp);} void outputToScreen() {zoneCounter ++; if(zoneCounter == 1) {String val = "Zone1:" + (String) (int) zone1Temp ; Val += "(" + (String)getTargetTemperature() ; Val = (String) ")" ; toScreen (val, « Mode: "+ getModeString());} ElseIf (zoneCounter == 2) {String val = "Zone2:" + (String) (int) zone2Temp ; Val += "(" + (String)getTargetTemperature() ; Val = (String) ")" ; toScreen (val, "four:" + getFurnaceState());} else {zoneCounter = 0 ; String val = "Zone3:" + (String) (int) zone3Temp ; Val += "(" + (String)getTargetTemperature() ; Val = (String) ")" ; toScreen (val, "Open:" + getActiveZonesForScreen());}} void checkMode() {int mode = getMode() ; if (mode! = currentMode) {currentMode = mode ; if(isOverridden) {si (thermState == « run ») {//This logique simplement la valeur de remplacement en cas de renversement et reprend le programme si le thermstate ne tient pas. Dans le cas contraire, l’overrideValue est utilisé. isOverridden = false ; getTargetTemperature() int}}}} {checkMode() ; if(isOverridden) {return overrideValue;} else {return getProgrammedTargetTemperature();}} int getProgrammedTargetTemperature() {int mode = getMode() ; DateTime maintenant = RTC.now() ; date de l’int = now.dayOfWeek() ; valeurs d’int = {0} ; valeurs = PROGRAMMED_VALUES [date] ; Journal (« info », "avoir programmé la température cible:" + (String)values[mode]) ; retournent des valeurs [mode] ; } 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";} return retVal ; } String getFurnaceState() {if(furnaceState) {return « On »;} else {return « Off »;}} String getModeString() {if(isOverridden) {si (thermState == « run ») {return "Override";} d’autre {return "HOLD";}} int mode = getMode() ; switch (mode) {case 0: retourner « Wake »; case 1: return « Away »; case 2: retourner « Home »; case 3: retourner « Sleep »; case -1 : retour "Error", valeur par défaut : retourne « N/a »;}} int getMode() {DateTime maintenant = RTC.now() ; int heure = now.hour() ; if (heure < 6 || heure > = 21) {return 3;} si (heure > = 6 & & heure < 8) {return 0;} si (heure > = 8 & & heure < 15) {return 1;} Si (h > = 15 & & heure < 21) {return 2;} return -1 ; } float getTemperature (DeviceAddress deviceAddress) {float NC = sensors.getTempC(deviceAddress); / / Serial.println(tempC) ; if (NC == -127) {Serial.println ("ERROR getting température.");} return DallasTemperature::toFahrenheit(tempC);} function //convenience. Gère tous le passe-partout pour l’écriture de la toScreen void LCDScreen (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 maintenant = RTC.now() ; return String(now.year()) + « / » + String(now.month()) + « / » + String(now.day()) + "" + String(now.hour()) + ":" + String(now.minute()) + ":" + String(now.second());} void openDamper (int amortisseur) {si (amortisseur == z1Pin || amortisseur == z2Pin || amortisseur == z3Pin) {digitalWrite (amortisseur, HIGH); / / log (« info », « Ouverture clapet » + amortisseur);} else {Journal ("error", "Registre de problème ouverture. Amortisseur introuvable. S’attendait à 1, 2 ou 3. Eu "+ amortisseur);}} void closeDamper (int amortisseur) {si (amortisseur == z1Pin || amortisseur == z2Pin || amortisseur == z3Pin) {digitalWrite (amortisseur, LOW); / / log (« info », « Clapet de fermeture » + amortisseur);} else {Journal ("error", "amortisseur de fermeture de problème. Amortisseur introuvable. S’attendait à 1, 2 ou 3. Eu "+ amortisseur);}} fonction d’enregistrement des messages dans la console. Finalement l’intention d’écrire dans le fichier journal sur RPi Sub log (String code, String message) {Serial.println (code + ":" + message);} void recordData (String type, objet String, String value) {/ / TODO - sortie de base de données IPD} void startFurnace() {//Send signal approprié dans le four démarre if(!furnaceState) {furnaceState =! furnaceState ; log ("INFO", « À partir de four »); digitalWrite (furnacePin, HIGH);}} void stopFurnace() {//Send signal approprié dans le four pour arrêter if(furnaceState) {furnaceState =! furnaceState ; log ("INFO", « Arrêt four »); digitalWrite (furnacePin, basse);}}

Articles Liés

Comment construire un Robot jouant Arduino alimenté par Chess

Comment construire un Robot jouant Arduino alimenté par Chess

à en juger par le nombre d'échecs liés Instructables, je pense qu'il est sûr de dire que la communauté bénéficie du jeu.  Il peut être difficile, toutefois, de trouver quelqu'un qui joue au même niveau que vous faire.  Pour résoudre ce dilemme et d'a
Vélo - arduino alimenté système de purification de l’eau (à l’aide de lumière UVC)

Vélo - arduino alimenté système de purification de l’eau (à l’aide de lumière UVC)

Cette instructable montre comment alimenter un système de purification de l'eau UV-C avec un contrôle de la bicyclette et arduino. Une dynamo à l'arrière de la bicyclette charge une batterie (que nous avons initialement chargé déjà pour ce projet) qu
Arduino alimenté citrouille d’Halloween avec détection de mouvement

Arduino alimenté citrouille d’Halloween avec détection de mouvement

SalutCet Instructable va vous montrer comment faire certains Halloween décorations dont arduino alimenté citrouille d'Halloween avec détection de mouvement.Étape 1: Faire la citrouille d'Halloween Matériaux :Ballon rondVieux journauxFarine lisseEauTe
Arduino alimenté Infared chose

Arduino alimenté Infared chose

Bonjour, ceci est mon premier instructible. Je vais vous montrer comment faire un arduino alimenté par un capteur analogique lecteur (je vais utiliser une photodiode infrarouge).Étape 1: pièces Vous aurez besoin de plusieurs choses à faire ceci :1. u
Faire un Arduino alimenté automatisation de Rideau

Faire un Arduino alimenté automatisation de Rideau

Dans cette vidéo j'ai commencer à travailler sur vous montrant comment faire un dispositif Arduino alimenté par qui va ouvrir et fermer les rideaux !À l'aide d'une corde et un servo de rotation continue, je suis capable de créer un système de poulies
Lumières de Noël Musical Arduino alimenté

Lumières de Noël Musical Arduino alimenté

après explorant le site Instructables, j'ai trouvé quelques projets qui ont atteint un sommet de mon intérêt et ceux qui m'amènent à la réflexion, j'ai pu faire quelques lumières de Noël musicales. Plupart de ce que j'ai passé mon temps sur provenait
Arduino alimenté les doublures de gants chauffants

Arduino alimenté les doublures de gants chauffants

Arduino alimenté gants chauffantsCe projet est sur la façon de rendre les monde plus intelligent chauffé gant des doublures de conditions extrêmement froides comme celles de Minnesota ou personnes qui ont syndrome(like me) de Raynaud. Ces gants vous
Nocturnal Emissions : Mon Arduino alimenté par Internet activé rêve générateur

Nocturnal Emissions : Mon Arduino alimenté par Internet activé rêve générateur

nous avons tous besoin de rêver plus, j'ai donc créé ce Arduino alimenté « générateur de rêve » pour aider à planter des graines pour certains folie de penser grand.  Quand vous approchez le générateur d'un capteur à ultrasons Maxbotix déclenche lumi
Arduino alimenté ELMod

Arduino alimenté ELMod

c'est mon premier instructable s'il vous plaît ours avec moi. Mon nom est Stanley Deakins et j'ai joué avec électronique depuis un certain temps, bien qu'il y a ans. En raison de mon emploi récent j'ai raviver cette passion. J'ai obtenu mes mains sur
Arduino alimenté Gainclone (amplificateur)

Arduino alimenté Gainclone (amplificateur)

pour ceux d'entre vous qui ne connaissent pas (et je n'ai pas jusqu'à une date récente), un Gainclone est un ampli qui est un « clone » de la conception originale d'un ampli fabriqué par 47 Labs appelés un Gaincard et reposent sur des amplificateurs
Arduino alimenté RGB ambiance lampe plus Simon

Arduino alimenté RGB ambiance lampe plus Simon

c'est fondamentalement une lampe d'ambiance RGB arduino alimenté plus le jeune simon dit jeu, deux en un.Mode d'emploi : L'appareil commence avec le programme de lampe d'ambiance RVB par défaut, lorsque vous appuyez sur une des quatre touches en bas,
Arduino alimenté RGB LED Vodka plateau

Arduino alimenté RGB LED Vodka plateau

cette instructable va obtenir vous passer à faire vos propres arduino alimenté projet rouge vert et bleu LED. Il ne doit même pas être une tablette ! Bouteilles de vodka justement pour éclairer joliment c'est ainsi que ce que j'ai choisi de le faire.
Thermostat simple en utilisant Arduino

Thermostat simple en utilisant Arduino

L'objectif de ce projet est de créer un thermostat qui mesure la température d'une ampoule tout en utilisant les deux températures de seuil (tL étant une variable de seuil bas et e étant une variable seuil haut), qui provoquera l'ampoule à fluctuer e
CO2 Laser eau Flow Monitor - Arduino alimenté / Windows contrôlée

CO2 Laser eau Flow Monitor - Arduino alimenté / Windows contrôlée

Alarme et CO2 Laser eau Flow MonitorPropulsé par un Arduino et contrôlées par un logiciel personnalisé sur un PC WindowsAfin de prolonger la vie d'un CO2 tube de laser, il est nécessaire à pomper l'eau à travers elle de refroidissement pendant son fo