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

Étape 8: Ajout de boutons analogiques

D'accord. Depuis que je suis assez maigre sur mes broches disponibles sur l’arduino (j’ai actuellement les 7, 8 et 9 broches numériques disponibles et j’ai encore besoin de brancher le four et les amortisseurs), je vais chercher un moyen d’utiliser les entrées analogiques disponibles (j’ai A0 à A3 disponible, A4 et A5 étant connectés au CCF) d’accepter l’entrée du bouton. Jolie quckly que j’ai trouver quelque chose qui est très prometteur - un tutoriel sur la façon d’accepter l’entrée de plusieurs boutons via un entrée analogique unique. Payer la saleté. C’est parfait, et tout ce qu’il exige, c’est quelques résistances supplémentaires. Aucun problème quel que soit. Nous allons aller au câblage.

(Voir ce tutoriel pour une partir du tutoriel de bouche de chevaux sur comment ça marche)

Le câblage pour c’est super simple. Courir un fil dans la broche analogique de votre choix (mon programme lit dans broches A0) et qui se connecter sur le côté du tableau bouton. L’autre côté du tableau bouton est reliée à la terre. A partir de là, les touches sont simplement chaînées ensemble via un réseau de résistance. Un fil supplémentaire est ajouté de chaque bouton sur la broche d’entrée analogique, donc chaque bouton possède un chemin direct vers l’analogique épingle (voir schéma).

En prenant les pièces pertinentes du code du didacticiel et modifiez-le pour nos propres besoins, nous obtenons ce qui suit :

/ * 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 * / #include //This est une bibliothèque nécessaire pour le LCD affichage #include //This est une bibliothèque nécessaire pour le thermomètre lectures #include //This est une bibliothèque de température #include #include « RTClib.h » / / connexions: / / 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 ; isOverrideHeld booléen = false ; 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 ; const int furnacePin = 1 ; int zoneCounter = 0 ; int a = 0 ; 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 (contre-jour, sortie) ; 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(3000) ; //DELAY actuellement définie à 10 secondes. AJUSTER au besoin //DATE/TIME logique enregistrera ("TIME", « Boucle ouverte à » + getDateAndTime()) ; Sensors.requestTemperatures() de température logique ; zone1Temp = getTemperature(zone1Therm) ; zone2Temp = getTemperature(zone2Therm) ; zone3Temp = getTemperature(zone3Therm) ; logTemperatureData() ; getScreenOutput() ; z1Check = checkZoneTemp(zone1Temp) ; z2Check = checkZoneTemp(zone2Temp) ; z3Check = checkZoneTemp(zone3Temp) ; Si (z1Check || z2Check || z3Check) {startFurnace();} else {stopFurnace();} si (z1Check & & furnaceState) {closeDamper(1);} else {openDamper(1);} si (z2Check & & furnaceState) {closeDamper(2);} else {openDamper(2);} si (z3Check & & furnaceState) {closeDamper(3);} else {openDamper(3);} un = analogRead(0) ; CES NUMÉROS CHANGENT SELON VOS RÉSISTANCES. if(a < 20) {//This signifie température jusqu'à isOverridden = true;} si (un < 30 & & a > 20) {//This signifie température down. isOverridden = true;} si (un 45 < & & a > 30) {//This est un cabillot pour cale/exécuter si (thermState == "hold") {thermState = "run"; isOverridden = false;} autre {thermState = "hold"; isOverridden = true;} isOverridden = true;} si (un < 60 & & a > 45) {//DO j’ai besoin d’un quatrième bouton?}} 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 getScreenOutput() {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());}} int getTargetTemperature() {int mode = getMode() ; DateTime maintenant = RTC.now() ; date de l’int = now.dayOfWeek() ; valeurs d’int = {0} ; log (« info », date (String)) ; valeurs = PROGRAMMED_VALUES [date] ; Journal (« info », "obtenir 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() {int mode = getMode() ; switch (mode) {case 0: retourner « Wake »; case 1: return « Away »; case 2: retourner « Home »; case 3: return « Sleep »; 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 (heure > = 15 & & heure < 21) {return 2;}} 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 == damper1Pin || amortisseur == damper2Pin || amortisseur == damper3Pin) {/ / digitalWrite (amortisseur, HIGH); / /} else {/ / log ("problème clapet d’ouverture. Amortisseur introuvable. S’attendait à 1, 2 ou 3. A obtenu "+ amortisseur) ; }} void closeDamper (int amortisseur) {/ / si (amortisseur == damper1Pin || amortisseur == damper2Pin || amortisseur == damper3Pin) {/ / digitalWrite (amortisseur, faible); / /} else {/ / log ("problème clapet de fermeture. Amortisseur introuvable. S’attendait à 1, 2 ou 3. A obtenu "+ amortisseur) ; //function}} pour l’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