Innholdsfortegnelse:

Termostat basert på Arduino: 6 trinn
Termostat basert på Arduino: 6 trinn

Video: Termostat basert på Arduino: 6 trinn

Video: Termostat basert på Arduino: 6 trinn
Video: Lesson 47: Using K-Type MAX6675 as thermostat | Arduino Step By Step Course 2024, November
Anonim
Termostat basert på Arduino
Termostat basert på Arduino
Termostat basert på Arduino
Termostat basert på Arduino
Termostat basert på Arduino
Termostat basert på Arduino

Denne gangen skal vi bygge en termostat basert på Arduino, temperatursensor og relé. Du finner på github

Trinn 1: Konfigurasjon

Konfigurasjon
Konfigurasjon

Hele konfigurasjonen er lagret i Config.h. Du kan endre PIN -koder som styrer reléer, lesetemperatur, terskler eller tidspunkter.

Trinn 2: Konfigurering av reléer

La oss anta at vi gjerne vil ha 3 reléer:

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

Først må du sørge for at PIN -koden du har valgt ikke allerede er tatt. Alle pinnene kan bli funnet i Config.h, de er definert av variabler som starter med DIG_PIN.

Du må redigere Config.h og konfigurere PIN -koder, terskler og mengde reléer. Det er åpenbart at noen eiendommer allerede eksisterer, så du må bare redigere dem.

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;

Nå må vi sette opp reléer og kontroller, dette skjer 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

Trinn 3: Hysteresis Controller

Det er den som er valgt i eksemplet ovenfor, den har få tilleggskonfigurasjoner:

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 gir ventetid for å bytte neste relé. Tenk deg at konfigurasjonen fra vårt eksempel ville begynne å fungere i et miljø på 40 grader. Dette vil resultere i at alle tre reléene kan aktiveres samtidig. Dette kan til slutt føre til høyt strømforbruk - avhengig av hva du styrer, bruker for eksempel elektrisk motor mer strøm under start. I vårt tilfelle bytter reléer følgende strømning: første relé går, vent 5 minutter, andre går på, vent 5 minutter, tredje fortsetter.

RHC_RELAY_MIN_SWITCH_MS definerer hysterese, det er minimumsfrekvensen for et bestemt relé for å endre tilstanden. Når den er på, vil den forbli på i minst denne perioden, uten å se på temperaturendringer. Dette er stille nyttig, det er du som styrer elektriske motorer, siden hver bryter har en negativ innvirkning på levetid.

Trinn 4: PID -kontrolleren

PID -kontroller
PID -kontroller
PID -kontroller
PID -kontroller

Dette er et avansert tema. Å implementere en slik kontroller er en enkel oppgave, å finne riktige amplitudeinnstillinger er en annen historie.

For å bruke PID -kontrolleren må du endre initRelayHysteresisController (…..) til initRelayPiDController (….), Og du må finne riktige innstillinger for den. Som vanlig finner du dem i Config.h

Jeg har implementert enkel simulator i Java, slik at det er mulig å visualisere resultatene. Den finner du i mappen: pidsimulator. Nedenfor kan du se simuleringer for to kontrollere PID a P. PID er ikke helt stabil fordi jeg ikke brukte noen sofistikert algoritme for å finne riktige verdier.

På begge tomter er nødvendig temperatur satt til 30 (blå). Gjeldende temperatur indikerer leselinje. Reléet har to tilstander PÅ og AV. Når den er aktivert, synker temperaturen med 1,5, når den er deaktivert, stiger den med 0,5.

Trinn 5: Meldingsbuss

Melding Buss
Melding Buss
Melding Buss
Melding Buss
Melding Buss
Melding Buss
Melding Buss
Melding Buss

Ulike programvaremoduler må kommunisere med hverandre, forhåpentligvis ikke begge veier;)

For eksempel:

  • statistikkmodulen må vite når et bestemt relé går av og på,
  • å trykke på en knapp må endre visningsinnhold, og det må også suspendere tjenester som vil bruke mange CPU -sykluser, for eksempel temperaturavlesning fra sensor,
  • etter en tid må temperaturavlesningen fornyes,
  • og så videre….

Hver modul er koblet til Message Bus og kan registrere seg for bestemte hendelser, og kan produsere alle hendelser (første diagram).

På det andre diagrammet kan vi se hendelsesflyt ved å trykke på knappen.

Noen komponenter har noen oppgaver enn det som må utføres med jevne mellomrom. Vi kan kalle de tilhørende metodene fra hovedsløyfen, siden vi har Message Bus er det bare nødvendig å spre riktig hendelse (tredje diagram)

Trinn 6: Libs

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

Anbefalt: