INHOUDSOPGAWE:

Termostaat gebaseer op Arduino: 6 stappe
Termostaat gebaseer op Arduino: 6 stappe

Video: Termostaat gebaseer op Arduino: 6 stappe

Video: Termostaat gebaseer op Arduino: 6 stappe
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, November
Anonim
Termostaat gebaseer op Arduino
Termostaat gebaseer op Arduino
Termostaat gebaseer op Arduino
Termostaat gebaseer op Arduino
Termostaat gebaseer op Arduino
Termostaat gebaseer op Arduino

Hierdie keer gaan ons 'n termostaat bou op grond van Arduino, temperatuursensor en relais. U kan dit op github vind

Stap 1: Konfigurasie

Konfigurasie
Konfigurasie

Die hele opset word in Config.h gestoor. U kan PIN's verander wat relais, leestemperatuur, drempels of tydsberekeninge beheer.

Stap 2: Relays instel

Kom ons neem aan dat ons 3 relais wil hê:

  • ID: 0, PIN: 1, temperatuur setpoint: 20
  • ID: 1, PIN: 10, temperatuur setpoint: 30
  • ID: 2, PIN: 11, temperatuur setpoint: 40

U moet eers seker maak dat die PIN van u keuse nog nie geneem is nie. Alle penne kan gevind word in Config.h, dit word gedefinieer deur veranderlikes wat begin met DIG_PIN.

U moet Config.h wysig en PIN's, drempels en hoeveelheid relais opstel. Uiteraard bestaan daar reeds 'n paar eiendomme, dus u moet dit net wysig.

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

const static uint8_t RELAYS_AMOUNT = 3;

const static int16_t RELAY_TEMP_SET_POINT_0 = 20;

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

Nou moet ons relais en kontroleerder instel, dit gebeur in 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

Stap 3: Histerese -beheerder

Dit is die een wat in die voorbeeld hierbo gekies is, en dit het min ekstra konfigurasies:

const static uint32_t RELAY_DELAY_AFTER_SWITCH_MS = 300000; // 5 minute konstant statiese uint32_t RHC_RELAY_MIN_SWITCH_MS = 3600000;

RELAY_DELAY_AFTER_SWITCH_MS gee wag tyd om die volgende aflos oor te skakel. Stel u voor dat die konfigurasie uit ons voorbeeld in 'n omgewing van 40 grade sal begin werk. Dit sal lei tot die moontlikheid van al drie relais op dieselfde tyd. Dit kan uiteindelik lei tot 'n hoë kragverbruik - afhangende van wat u beheer, verbruik die elektriese enjin byvoorbeeld meer krag tydens die aanvang. In ons geval het die skakelaar die volgende skakel: eerste relais gaan, wag 5 minute, tweede gaan aan, wag 5 minute, derde gaan aan.

RHC_RELAY_MIN_SWITCH_MS definieer histerese, dit is die minimum frekwensie vir 'n spesifieke relais om die toestand daarvan te verander. Sodra dit aan is, bly dit vir ten minste hierdie tydperk aan, sonder om temperatuurveranderinge te ignoreer. Dit is baie handig, aangesien u elektriese motors beheer, aangesien elke skakelaar 'n negatiewe uitwerking op lewendige tyd het.

Stap 4: PID -beheerder

PID -beheerder
PID -beheerder
PID -beheerder
PID -beheerder

Dit is 'n gevorderde onderwerp. Die implementering van so 'n kontroleerder is 'n eenvoudige taak; om die regte amplitude -instellings te vind, is 'n ander storie.

Om die PID -beheerder te kan gebruik, moet u initRelayHysteresisController (…..) verander na initRelayPiDController (….) en u moet die regte instellings daarvoor vind. Soos gewoonlik vind u dit in Config.h

Ek het 'n eenvoudige simulator in Java geïmplementeer, sodat dit moontlik is om die resultate te visualiseer. Dit kan gevind word in die gids: pidsimulator. Hieronder kan u simulasies sien vir twee beheerders PID 'n P. PID is nie heeltemal stabiel nie, want ek het geen gesofistikeerde algoritme toegepas om die regte waardes te vind nie.

Op albei plotte is die vereiste temperatuur ingestel op 30 (blou). Huidige temperatuur dui leeslyn aan. Relais het twee toestande AAN en UIT. As dit geaktiveer is, daal die temperatuur met 1,5, as dit uitgeskakel word, styg dit met 0,5.

Stap 5: Boodskapbus

Boodskap Bus
Boodskap Bus
Boodskap Bus
Boodskap Bus
Boodskap Bus
Boodskap Bus
Boodskap Bus
Boodskap Bus

Verskillende sagtewaremodules moet met mekaar kommunikeer, hopelik nie beide kante nie;)

Byvoorbeeld:

  • statistiekmodule moet weet wanneer 'n spesifieke aflos aan en af gaan,
  • Deur op 'n knoppie te druk, moet die inhoud van die skerm verander word, en die dienste moet opskort word wat baie CPU -siklusse sal verbruik, byvoorbeeld temperatuurlesing vanaf sensor,
  • na 'n geruime tyd moet die temperatuurlesing hernu word,
  • en so aan….

Elke module is gekoppel aan Message Bus en kan vir spesifieke geleenthede registreer en kan enige gebeurtenisse produseer (eerste diagram).

Op die tweede diagram kan ons die gebeurtenisvloei sien deur op die knoppie te druk.

Sommige komponente het 'n paar take as wat periodiek uitgevoer moet word. Ons kan hul ooreenstemmende metodes vanaf die hooflus noem, aangesien ons Message Bus het, is dit slegs nodig om die regte gebeurtenis (derde diagram) te versprei

Stap 6: Libs

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

Aanbeveel: