Indholdsfortegnelse:

Termostat baseret på Arduino: 6 trin
Termostat baseret på Arduino: 6 trin

Video: Termostat baseret på Arduino: 6 trin

Video: Termostat baseret på Arduino: 6 trin
Video: Lesson 47: Using K-Type MAX6675 as thermostat | Arduino Step By Step Course 2024, Juli
Anonim
Termostat baseret på Arduino
Termostat baseret på Arduino
Termostat baseret på Arduino
Termostat baseret på Arduino
Termostat baseret på Arduino
Termostat baseret på Arduino

Denne gang skal vi bygge en termostat baseret på Arduino, temperatursensor og relæ. Du kan finde på github

Trin 1: Konfiguration

Konfiguration
Konfiguration

Hele konfigurationen er gemt i Config.h. Du kan ændre PIN -koder, der styrer relæer, læsetemperatur, tærskler eller tidspunkter.

Trin 2: Konfiguration af relæer

Lad os antage, at vi gerne vil have 3 relæer:

  • ID: 0, PIN: 1, Temperatur setpunkt: 20
  • ID: 1, PIN: 10, temperatur setpunkt: 30
  • ID: 2, PIN: 11, temperatur setpunkt: 40

Først skal du sørge for, at PIN efter eget valg ikke allerede er taget. Alle pins kan findes i Config.h, de er defineret af variabler, der starter med DIG_PIN.

Du skal redigere Config.h og konfigurere PIN -koder, tærskler og mængde relæer. Der findes naturligvis allerede nogle egenskaber, så du skal bare redigere dem.

const static uint8_t DIG_PIN_RELAY_0 = 1; const static uint8_t DIG_PIN_RELAY_1 = 10; const statisk 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;

Nu skal vi opsætte relæer og controller, dette sker i 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

Trin 3: Hysteresis Controller

Det er den, der er valgt i eksemplet ovenfor, den har få ekstra konfigurationer:

const static uint32_t RELAY_DELAY_AFTER_SWITCH_MS = 300000; // 5 minutter konstant statisk uint32_t RHC_RELAY_MIN_SWITCH_MS = 3600000;

RELAY_DELAY_AFTER_SWITCH_MS giver ventetid på at skifte næste relæ. Forestil dig, at konfigurationen fra vores eksempel ville begynde at fungere i et miljø på 40 grader. Dette ville resultere i aktivering af alle tre relæer på samme tid. Dette kan i sidste ende føre til et højt strømforbrug - afhængigt af hvad du styrer, bruger elektrisk motor f.eks. Mere strøm under start. I vores tilfælde har switch -relæer følgende flow: første relæ går, vent 5 minutter, andet fortsætter, vent 5 minutter, tredje fortsætter.

RHC_RELAY_MIN_SWITCH_MS definerer hysterese, det er minimumsfrekvensen for et bestemt relæ for at ændre dets tilstand. Når den er tændt, forbliver den tændt i mindst denne periode og ignorerer temperaturændringer. Dette er stille nyttigt, hvis du styrer elektriske motorer, da hver switch har en negativ indvirkning på levetid.

Trin 4: PID -controller

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

Dette er et avanceret emne. Implementering af en sådan controller er en simpel opgave, at finde de rigtige amplitudeindstillinger er en anden historie.

For at bruge PID -controller skal du ændre initRelayHysteresisController (…..) til initRelayPiDController (….), Og du skal finde de rigtige indstillinger for det. Som sædvanlig finder du dem i Config.h

Jeg har implementeret en simpel simulator i Java, så det er muligt at visualisere resultaterne. Det kan findes i mappen: pidsimulator. Herunder kan du se simuleringer for to controllere PID a P. PID er ikke helt stabil, fordi jeg ikke anvendte nogen sofistikeret algoritme til at finde de rigtige værdier.

På begge parceller er den nødvendige temperatur indstillet til 30 (blå). Aktuel temperatur angiver læselinje. Relæet har to tilstande ON og OFF. Når den er aktiveret, falder temperaturen med 1,5, når den er deaktiveret, stiger den med 0,5.

Trin 5: Besked Bus

Besked Bus
Besked Bus
Besked Bus
Besked Bus
Besked Bus
Besked Bus
Besked Bus
Besked Bus

Forskellige softwaremoduler skal kommunikere med hinanden, forhåbentlig ikke begge veje;)

For eksempel:

  • statistikmodul skal vide, hvornår et bestemt relæ tændes og slukkes,
  • at trykke på en knap skal ændre visningsindholdet, og det skal også suspendere tjenester, der ville forbruge mange CPU -cyklusser, for eksempel temperaturaflæsning fra sensor,
  • efter et stykke tid skal temperaturaflæsning fornyes,
  • og så videre….

Hvert modul er forbundet til Message Bus og kan registrere sig for bestemte begivenheder og kan producere enhver begivenhed (første diagram).

På det andet diagram kan vi se hændelsesforløbet ved at trykke på knappen.

Nogle komponenter har nogle opgaver, end der skal udføres med jævne mellemrum. Vi kunne kalde deres tilsvarende metoder fra hovedsløjfen, da vi har Message Bus, er det kun nødvendigt at udbrede den rigtige begivenhed (tredje diagram)

Trin 6: Libs

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

Anbefalede: