Inhoudsopgave:

Thermostaat gebaseerd op Arduino: 6 stappen
Thermostaat gebaseerd op Arduino: 6 stappen

Video: Thermostaat gebaseerd op Arduino: 6 stappen

Video: Thermostaat gebaseerd op Arduino: 6 stappen
Video: 3D-printer onderdelen: megatronics 2024, November
Anonim
Thermostaat Gebaseerd op Arduino
Thermostaat Gebaseerd op Arduino
Thermostaat Gebaseerd op Arduino
Thermostaat Gebaseerd op Arduino
Thermostaat Gebaseerd op Arduino
Thermostaat Gebaseerd op Arduino

Deze keer gaan we een thermostaat bouwen op basis van Arduino, temperatuursensor en relais. Je kunt vinden op github

Stap 1: Configuratie

Configuratie
Configuratie

De hele configuratie wordt opgeslagen in Config.h. U kunt pincodes wijzigen die relais, temperatuurmetingen, drempels of timings regelen.

Stap 2: Relais configureren

Laten we aannemen dat we 3 relais willen hebben:

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

Eerst moet u ervoor zorgen dat de pincode van uw keuze niet al in gebruik is. Alle pinnen zijn te vinden in Config.h, ze worden gedefinieerd door variabelen die beginnen met DIG_PIN.

U moet Config.h bewerken en pincodes, drempels en het aantal relais configureren. Het is duidelijk dat sommige eigenschappen al bestaan, dus je hoeft ze alleen maar te bewerken.

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

const statisch uint8_t RELAYS_AMOUNT = 3;

const statisch int16_t RELAY_TEMP_SET_POINT_0 = 20;

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

Nu moeten we relais en controller instellen, dit gebeurt 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: Hysterese-controller

Het is degene die in het bovenstaande voorbeeld is gekozen, het heeft enkele extra configuraties:

const statisch uint32_t RELAY_DELAY_AFTER_SWITCH_MS = 300000; // 5 minutenconst statisch uint32_t RHC_RELAY_MIN_SWITCH_MS = 3600000;

RELAY_DELAY_AFTER_SWITCH_MS geeft wachttijd voor het schakelen van het volgende relais. Stel je voor dat de configuratie uit ons voorbeeld zou gaan werken in een omgeving van 40 graden. Dit zou ertoe leiden dat alle drie de relais tegelijkertijd worden ingeschakeld. Dit kan uiteindelijk leiden tot een hoog stroomverbruik - afhankelijk van wat u regelt, verbruikt een elektrische motor bijvoorbeeld meer stroom tijdens het starten. In ons geval heeft het schakelen van relais de volgende stroom: eerste relais gaat, wacht 5 minuten, tweede gaat aan, wacht 5 minuten, derde gaat aan.

RHC_RELAY_MIN_SWITCH_MS definieert hysteresis, het is de minimumfrequentie voor een bepaald relais om zijn status te veranderen. Als het eenmaal is ingeschakeld, blijft het gedurende ten minste deze periode aan, waarbij temperatuurveranderingen worden genegeerd. Dit is erg handig als u elektromotoren bedient, aangezien elke schakelaar een negatieve invloed heeft op de live-tijd.

Stap 4: PID-controller

PID-controller
PID-controller
PID-controller
PID-controller

Dit is een geavanceerd onderwerp. Het implementeren van een dergelijke controller is een eenvoudige taak, het vinden van de juiste amplitude-instellingen is een ander verhaal.

Om de PID-controller te gebruiken, moet u initRelayHysteresisController(…..) wijzigen in initRelayPiDController(….) en moet u de juiste instellingen ervoor vinden. Zoals gewoonlijk vind je ze in Config.h

Ik heb een eenvoudige simulator in Java geïmplementeerd, zodat het mogelijk is om de resultaten te visualiseren. Het is te vinden in de map: pidsimulator. Hieronder zie je simulaties voor twee controllers PID a P. PID is niet perfect stabiel omdat ik geen geavanceerd algoritme heb toegepast om de juiste waarden te vinden.

Op beide plots is de gewenste temperatuur ingesteld op 30 (blauw). De huidige temperatuur geeft de leesregel aan. Relais heeft twee standen AAN en UIT. Als het is ingeschakeld, daalt de temperatuur met 1,5, als het is uitgeschakeld, stijgt het met 0,5.

Stap 5: Berichtenbus

Berichtenbus
Berichtenbus
Berichtenbus
Berichtenbus
Berichtenbus
Berichtenbus
Berichtenbus
Berichtenbus

Verschillende softwaremodules moeten met elkaar communiceren, hopelijk niet in beide richtingen;)

Bijvoorbeeld:

  • statistiekmodule moet weten wanneer een bepaald relais aan en uit gaat,
  • door op een knop te drukken, moet de weergave-inhoud worden gewijzigd en moeten ook services worden onderbroken die veel CPU-cycli zouden verbruiken, bijvoorbeeld temperatuurmeting van een sensor,
  • na enige tijd moet de temperatuurmeting worden vernieuwd,
  • enzovoort….

Elke module is aangesloten op Message Bus en kan zich registreren voor bepaalde gebeurtenissen en kan elke gebeurtenis produceren (eerste diagram).

Op het tweede diagram kunnen we de gebeurtenisstroom zien door op de knop te drukken.

Sommige componenten hebben taken die periodiek moeten worden uitgevoerd. We zouden hun corresponderende methoden vanuit de hoofdlus kunnen aanroepen, aangezien we Message Bus hebben, het is alleen nodig om de juiste gebeurtenis te propageren (derde diagram)

Stap 6: Libs

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

Aanbevolen: