Table des matières:

Thermostat basé sur Arduino : 6 étapes
Thermostat basé sur Arduino : 6 étapes

Vidéo: Thermostat basé sur Arduino : 6 étapes

Vidéo: Thermostat basé sur Arduino : 6 étapes
Vidéo: Make an Arduino Temperature Sensor (Thermistor Tutorial) 2024, Juillet
Anonim
Thermostat basé sur Arduino
Thermostat basé sur Arduino
Thermostat basé sur Arduino
Thermostat basé sur Arduino
Thermostat basé sur Arduino
Thermostat basé sur Arduino

Cette fois, nous allons construire un thermostat basé sur Arduino, un capteur de température et un relais. Vous pouvez le trouver sur github

Étape 1: Configuration

Configuration
Configuration

Toute la configuration est stockée dans Config.h. Vous pouvez modifier les codes PIN contrôlant les relais, la température de lecture, les seuils ou les horaires.

Étape 2: Configuration des relais

Supposons que nous aimerions avoir 3 relais:

  • ID: 0, PIN: 1, Point de consigne de température: 20
  • ID:1, PIN: 10, Point de consigne de température: 30
  • ID: 2, PIN: 11, Point de consigne de température: 40

Vous devez d'abord vous assurer que le code PIN de votre choix n'est pas déjà utilisé. Toutes les broches peuvent être trouvées dans Config.h, elles sont définies par des variables commençant par DIG_PIN.

Vous devez éditer Config.h et configurer les codes PIN, les seuils et le nombre de relais. De toute évidence, certaines propriétés existent déjà, vous n'avez donc qu'à les modifier.

const statique uint8_t DIG_PIN_RELAY_0 = 1;const statique uint8_t DIG_PIN_RELAY_1 = 10; const statique uint8_t DIG_PIN_RELAY_2 = 11;

const statique uint8_t RELAYS_AMOUNT = 3;

const statique int16_t RELAY_TEMP_SET_POINT_0 = 20;

const statique int16_t RELAY_TEMP_SET_POINT_1 = 30; const statique int16_t RELAY_TEMP_SET_POINT_2 = 40;

Maintenant, nous devons configurer les relais et le contrôleur, cela se produit dans RelayDriver.cpp

initRelayHysteresisController(0, DIG_PIN_RELAY_0, RELAY_TEMP_SET_POINT_0);initRelayHysteresisController(1, DIG_PIN_RELAY_1, RELAY_TEMP_SET_POINT_1); initRelayHysteresisController(2, DIG_PIN_RELAY_2, RELAY_TEMP_SET_POINT_2);

xxx

Étape 3: Contrôleur d'hystérésis

C'est celui choisi dans l'exemple ci-dessus, il a quelques configurations supplémentaires:

const statique uint32_t RELAY_DELAY_AFTER_SWITCH_MS = 300000; // 5 minutesconst statique uint32_t RHC_RELAY_MIN_SWITCH_MS = 3600000;

RELAY_DELAY_AFTER_SWITCH_MS donne le temps d'attente pour la commutation du relais suivant. Imaginez que la configuration de notre exemple commence à fonctionner dans un environnement à 40 degrés. Cela entraînerait l'activation des trois relais en même temps. Cela pourrait éventuellement conduire à une consommation d'énergie élevée - en fonction de ce que vous contrôlez, le moteur électrique par exemple consomme plus d'énergie au démarrage. Dans notre cas, la commutation des relais a le flux suivant: le premier relais s'active, attendez 5 minutes, le deuxième s'allume, attendez 5 minutes, le troisième s'allume.

RHC_RELAY_MIN_SWITCH_MS définit l'hystérésis, c'est la fréquence minimale pour qu'un relais particulier change d'état. Une fois allumé, il restera allumé pendant au moins cette période de temps, en ignorant les changements de température. Ceci est très utile si vous contrôlez des moteurs électriques, car chaque interrupteur a un impact négatif sur la durée de vie.

Étape 4: Contrôleur PID

Contrôleur PID
Contrôleur PID
Contrôleur PID
Contrôleur PID

C'est un sujet avancé. La mise en œuvre d'un tel contrôleur est une tâche simple, trouver les bons réglages d'amplitude est une autre histoire.

Pour utiliser le contrôleur PID, vous devez changer initRelayHysteresisController(…..) en initRelayPiDController(….) et vous devez trouver les bons paramètres pour cela. Comme d'habitude vous les trouverez dans Config.h

J'ai implémenté un simulateur simple en Java, afin qu'il soit possible de visualiser les résultats. Il se trouve dans le dossier: pidsimulator. Ci-dessous, vous pouvez voir des simulations pour deux contrôleurs PID et P. PID n'est pas parfaitement stable car je n'ai appliqué aucun algorithme sophistiqué pour trouver les bonnes valeurs.

Sur les deux tracés, la température requise est réglée sur 30 (bleu). La température actuelle indique la ligne de lecture. Le relais a deux états ON et OFF. Lorsqu'il est activé, la température baisse de 1,5, lorsqu'il est désactivé, il augmente de 0,5.

Étape 5: Bus de messages

Bus de messages
Bus de messages
Bus de messages
Bus de messages
Bus de messages
Bus de messages
Bus de messages
Bus de messages

Différents modules logiciels doivent communiquer entre eux, espérons-le pas dans les deux sens;)

Par exemple:

  • le module de statistiques doit savoir quand un relais particulier s'allume et s'éteint,
  • appuyer sur un bouton doit modifier le contenu de l'affichage et doit également suspendre les services qui consommeraient de nombreux cycles CPU, par exemple la lecture de la température du capteur,
  • après un certain temps, la lecture de la température doit être renouvelée,
  • etc….

Chaque module est connecté à Message Bus et peut s'enregistrer pour des événements particuliers, et peut produire n'importe quel événement (premier diagramme).

Sur le deuxième diagramme, nous pouvons voir le flux d'événements en appuyant sur le bouton.

Certains composants ont des tâches qui doivent être exécutées périodiquement. Nous pourrions appeler leurs méthodes correspondantes à partir de la boucle principale, puisque nous avons Message Bus, il suffit de propager le bon événement (troisième diagramme)

Étape 6: bibliothèques

  • https://github.com/maciejmiklas/Thermostat
  • https://github.com/milesburton/Arduino-Temperature…
  • https://github.com/maciejmiklas/ArdLog.git

Conseillé: