Innehållsförteckning:

Termostat baserad på Arduino: 6 steg
Termostat baserad på Arduino: 6 steg

Video: Termostat baserad på Arduino: 6 steg

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

Den här gången ska vi bygga en termostat baserad på Arduino, temperaturgivare och relä. Du kan hitta på github

Steg 1: Konfiguration

Konfiguration
Konfiguration

Hela konfigurationen lagras i Config.h. Du kan ändra PIN -koder som styr reläer, avläsningstemperatur, trösklar eller tidpunkter.

Steg 2: Konfigurera reläer

Låt oss anta att vi skulle vilja ha tre reläer:

  • ID: 0, PIN: 1, Temperatur börvärde: 20
  • ID: 1, PIN: 10, Temperatur börvärde: 30
  • ID: 2, PIN: 11, börvärde för temperatur: 40

Först måste du se till att den valda PIN -koden inte redan har tagits. Alla stift kan hittas i Config.h, de definieras av variabler som börjar med DIG_PIN.

Du måste redigera Config.h och konfigurera PIN -koder, trösklar och antal reläer. Uppenbarligen finns det redan några egenskaper, så du måste bara redigera 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;

Nu måste vi konfigurera reläer och kontroller, detta händer 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

Steg 3: Hysteres Controller

Det är den som valts i exemplet ovan, den har några ytterligare konfigurationer:

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

RELAY_DELAY_AFTER_SWITCH_MS ger väntetid för att byta nästa relä. Föreställ dig att konfigurationen från vårt exempel skulle börja fungera i 40 graders miljö. Detta skulle resultera i att alla tre reläer kan aktiveras samtidigt. Detta kan så småningom leda till hög strömförbrukning - beroende på vad du styr, förbrukar elmotorn till exempel mer kraft under start. I vårt fall har kopplingsreläer följande flöde: första reläet går, väntar 5 minuter, det andra fortsätter, väntar 5 minuter, det tredje fortsätter.

RHC_RELAY_MIN_SWITCH_MS definierar hysteres, det är minimifrekvensen för ett visst relä för att ändra dess tillstånd. När den väl är på, kommer den att vara på under åtminstone denna period, utan att ignorera temperaturförändringar. Detta är tyst användbart, det är du som styr elmotorer, eftersom varje omkopplare har en negativ inverkan på livstid.

Steg 4: PID -styrenhet

PID -styrenhet
PID -styrenhet
PID -styrenhet
PID -styrenhet

Detta är ett avancerat ämne. Att implementera en sådan styrenhet är en enkel uppgift, att hitta rätt amplitudinställningar är en annan historia.

För att använda PID -styrenheten måste du ändra initRelayHysteresisController (…..) till initRelayPiDController (….) Och du måste hitta rätt inställningar för den. Som vanligt hittar du dem i Config.h

Jag har implementerat en enkel simulator i Java, så att det är möjligt att visualisera resultaten. Det finns i mappen: pidsimulator. Nedan kan du se simuleringar för två kontroller PID a P. PID är inte helt stabil eftersom jag inte använde någon sofistikerad algoritm för att hitta rätt värden.

På båda tomterna krävs önskad temperatur till 30 (blå). Aktuell temperatur indikerar läsrad. Reläet har två tillstånd PÅ och AV. När den är aktiverad sjunker temperaturen med 1,5, när den är inaktiverad stiger den med 0,5.

Steg 5: Meddelandebuss

Meddelande Buss
Meddelande Buss
Meddelande Buss
Meddelande Buss
Meddelande Buss
Meddelande Buss
Meddelande Buss
Meddelande Buss

Olika programvarumoduler måste kommunicera med varandra, förhoppningsvis inte båda sätten;)

Till exempel:

  • statistikmodulen måste veta när ett visst relä går av och på,
  • att trycka på en knapp måste ändra visningsinnehåll och det måste också stänga av tjänster som skulle förbruka många CPU -cykler, till exempel temperaturavläsning från sensorn,
  • efter en tid måste temperaturavläsningen förnyas,
  • och så vidare….

Varje modul är ansluten till Message Bus och kan registrera sig för specifika händelser och kan producera eventuella händelser (första diagrammet).

På det andra diagrammet kan vi se händelseflödet när du trycker på knappen.

Vissa komponenter har vissa uppgifter än som behöver utföras regelbundet. Vi kan kalla deras motsvarande metoder från huvudslingan, eftersom vi har Message Bus är det bara nödvändigt att sprida rätt händelse (tredje diagram)

Steg 6: Libs

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

Rekommenderad: