Étape 8: L’esquisse de Thermostat
Bibliothèques de prérequis
L’esquisse de l’Arduino est attaché. Vous devez les bibliothèques suivantes installés afin de compiler et de l’utiliser :
- OneWire - utilisé pour lire le thermometre étanche IP65
- LiquidCrystal_I2C - utilisé pour l’écrans LCD série
Je vous recommande un petit circuit de construction et croquis pour tester chaque composant avant de construire le plus grand circuit, juste au cas où quelque chose a changé et vous avez besoin d’une autre bibliothèque.
Le fichier de dessin
Si vous souhaitez utiliser mon esquisse comme-est, il est attaché à cette étape comme Thermostat.ino. Il devrait fonctionner avec votre Arduino Uno (ou clone) sans modification si vous avez suivi mon circuit.
Comment ça marche...
Le thermostat est assez simple, et pas à la différence du thermostat vous permet de contrôler la température dans votre maison. L’écran LCD affiche la température actuelle de l’eau en degrés Fahrenheit et Celsius sur la première ligne et le réglage actuel sur la deuxième ligne. Chaque fois que la température de l’eau est supérieur au paramètre, la pompe et le refroidisseur sont allumés. Lorsque la température descend 1,75 F ° au-dessous du réglage, les refroidisseurs, pompe et les fans tous arrêtera jusqu'à ce que la température dépasse à nouveau le réglage.
Verrouillage d’entrée
En raison de la difficile d’obtenir un nettoyage du signal de l’Arduino interrompre Pins (c’est peut-être un problème avec mon vieux sur-utilisé Arduino Uno ? Ou c’est peut-être à cause du bruit du reste du circuit), j’ai ajouté une fonctionnalité de "Paramètre Lock". Afin de changer le thermostat de réglage vous doit maintenir enfoncés les boutons du haut et le bas pendant 1 seconde. Lorsque cela a été détecté, l’écran LCD affichera le message «---UNLOCKED---» sur la ligne supérieure et "Temp entrez:" sur la deuxième ligne de 3/4 de seconde. Alors qu’il est déverrouillé, les boutons haut et bas peuvent servir pour augmenter ou baisser le réglage du thermostat. Si aucune touche n’est pressée pendant 10 secondes, le lock-out d’entrée est rétabli. Si les deux boutons sont pressés et tenues simultanément à nouveau pendant 1 seconde, le verrouillage est également rétabli, mais soyez averti qu’il peut être difficile d’appuyer simultanément sur les deux boutons sans rebonds causant la réglage de température pour augmenter ou diminuer d’une ou deux. Pour cette raison, que vous préférerez peut-être juste laisse le système rebloquer sur ses propres en laissant les boutons intact pendant 10 secondes.
Lecture de la température
Veuillez lire attentivement l’esquisse pour tous les détails sur le fonctionne du code. Ici, je soulignerai seulement certaines parties de celui-ci. En particulier, la classe TemperatureModule utilise la bibliothèque OneWire 2 pour lire la température de la DS18B20 dans l’IP65 étanche numérique la sonde à température. La classe TemperatureModule est issue d’un code dans le DS18x20_Temperature, esquisse exemple OneWire 2. Il propose seulement deux méthodes : Initialize() et ReadTemperatureF(). Initialize() doit être appelée avant ReadTemperatureF est appelée pour la première fois. ReadTemperatureF sera de retour la température en degrés Fahrenheit et se remplit dans une variable passée avec la température en degrés Celsius. Une instance de TemperatureModule est déclarée à la ligne 171 de l’esquisse, après la définition de la classe :
Vous noterez également g_lcd sur la ligne 172 - une instance de LiquidCrystal_I2C. Deux de ces objets globaux utilisent les macros définis au début du fichier. Ces macros également définissent chaque goupille de Arduino utilisé par le croquis :
Programme d’installation
Lignes 1 à 3 comprennent les bibliothèques utilisées par cette esquisse. Sur la ligne 3, vous verrez la comprennent des EEPROM.h. Il sera utilisé pendant l’installation, et après le réglage du thermostat est ajusté à enregistrer la température dans l’Arduino de EEPROM pour qu’on se souvient à travers les réinitialisations de puissance. La température est stockée comme un seul octet et autorisée la température paramètres passent de 35° F à 85° F. Cela semble être une fourchette raisonnable pour nos besoins, et en utilisant un seul octet pour stocker la valeur des choses sont simplifiées.
La fonction setup() de l’esquisse sera d’abord définir quelques variables globales utilisées à debounce nos commutateurs de bouton poussoir. Après que cela, il fixera le Mode Pin pour chaque broche, nous utiliserons (lignes 255 à 260) :
En ligne 261, nous avons mis le refroidisseur à l’État Off, et en ligne 263 à 269 le réglage de la température est lu de l’EEPROM et 56° F la valeur si la valeur actuelle est hors limites. Lignes de 271 à 273 initialiser la bibliothèque I2C LCD et parce que cela prend environ une seconde pour initialiser le TemperatureModule, le message « Initialisation... » s’affiche sur l’écran LCD jusqu'à ce que le capteur de température est détectée (lignes 278 à 280). Supplémentaires 1 seconde attente est forcé sur la ligne 281--ce qui semble être exigés par la bibliothèque OneWire pour lire correctement le capteur de température.
Avec tout autre initialisée, nous attachons interruption 0 à la fonction BumpSettingsUp à la ligne 283 et interrompre 1 à BumpSettingsDown en ligne 284 et activez les interruptions (ligne 285).
Les fonctions BumpSettingsUp et BumpSettingsDown, il vérifie si l’entrée est verrouillée. Si ce n’est pas le cas, ils augmentera ou diminuera g_uiTemperatureSetting, tant que l’interruption (déclenchée par un coup de pouce) satisfait aux exigences de temps de ne pas se qualifier comme un rebond de l’interrupteur. Ces deux fonctions assurer également les séjours de réglage entre 35 et 85 degrés.
BumpSettingsDown() qui est identique à BumpSettingsUp mais il baisse la valeur de g_uiTemperatureSettings, n’est ne pas présentée ici. Il y a aussi quelques autres fonctions utilisées comme aides tels que OutputLCDLine() qui permet d’afficher une chaîne en ligne un ou deux de l’écran LCD. La fonction TurnCoolingOnOrOff ci-dessous est utilisée pour définir tous les 4 relais sur la position ON ou OFF et d’enregistrement si les choses sont ON ou OFF dans g_bCooling :
La fonction ToggleInputMode est appelée lorsque les deux boutons sont maintenues enfoncée pendant une seconde, ou après 10 secondes d’aucun bouton enfoncé pendant que l’entrée est déverrouillée. Comme vous pouvez le voir il enregistre un nouveau paramètre dans l’emplacement de l’EEPROM 0 :
Ce contrôle de double-touche s’effectue par la fonction d’assistance CheckLockUnlock() :
Tout cela mène à la boucle principale :
Dans cette première mi-temps, il y a un contrôle pour voir si l’utilisateur est déverrouillage d’entrée. Si 10 secondes s’est écoulé depuis un bouton a enfoncé, tandis que l’entrée est déverrouillée, le code sur les lignes 373 par le biais de 379 veillera à ce que le verrou est rétabli.
Sur la ligne 383 le réglage du thermostat actuel est affiché sur la deuxième ligne de l’écran LCD, et sur la ligne 387 la température actuelle est lue à partir du thermomètre. Il est ensuite affiché sur la première ligne de l’écran LCD, à la ligne 397. Car le réglage du thermostat a été converti en un flotteur sur la ligne 385 une comparaison simple peut être faite pour voir si le refroidisseur doit être activé :
Si la température dépasse le réglage du thermostat du refroidisseur est toujours activé (ligne 406). Dans le cas contraire, nous vérifions pour voir si la température est de 1,75 degrés au-dessous du réglage et si oui le refroidisseur est éteint.
Sur la ligne 418 une seconde un retard se produit afin de permettre le thermomètre à être lu correctement à nouveau et la boucle est rentrée.
Thermostat.INO