Obsah:
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-13 06:57
Tentokrát budeme stavět termostat založený na Arduinu, teplotním senzoru a relé. Najdete na github
Krok 1: Konfigurace
Celá konfigurace je uložena v Config.h. Můžete změnit PINy ovládající relé, teplotu čtení, prahové hodnoty nebo časování.
Krok 2: Konfigurace relé
Předpokládejme, že bychom chtěli mít 3 relé:
- ID: 0, PIN: 1, žádaná teplota: 20
- ID: 1, PIN: 10, žádaná teplota: 30
- ID: 2, PIN: 11, žádaná teplota: 40
Nejprve se musíte ujistit, že vámi zvolený PIN již není zadán. Všechny piny lze nalézt v Config.h, jsou definovány proměnnými začínajícími DIG_PIN.
Musíte upravit Config.h a nakonfigurovat PINy, prahové hodnoty a počet relé. Některé vlastnosti již zjevně existují, takže je musíte pouze upravit.
const static uint8_t DIG_PIN_RELAY_0 = 1; const static uint8_t DIG_PIN_RELAY_1 = 10; konstantní 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;
Nyní musíme nastavit relé a ovladač, to se děje v 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
Krok 3: Regulátor hystereze
Je to ten, který byl vybrán v příkladu výše, má několik dalších konfigurací:
konstantní uint32_t RELAY_DELAY_AFTER_SWITCH_MS = 300000; // 5 minutesconst static uint32_t RHC_RELAY_MIN_SWITCH_MS = 3600000;
RELAY_DELAY_AFTER_SWITCH_MS dává čekací dobu na přepnutí dalšího relé. Představte si, že konfigurace z našeho příkladu by začala fungovat v prostředí 40 stupňů. To by mělo za následek povolení všech tří relé současně. To by nakonec mohlo vést k vysoké spotřebě energie - v závislosti na tom, co ovládáte, spotřebuje například elektrický motor při startu více energie. V našem případě mají spínací relé následující tok: první relé sepne, počkejte 5 minut, druhé sepne, počkáte 5 minut, třetí sepne.
RHC_RELAY_MIN_SWITCH_MS definuje hysterezi, je to minimální frekvence pro konkrétní relé ke změně stavu. Jakmile je zapnutý, zůstane zapnutý ještě alespoň tuto dobu, přičemž ignoruje změny teploty. To je velmi užitečné, protože ovládáte elektromotory, protože každý spínač má negativní dopad na živý čas.
Krok 4: PID regulátor
Toto je pokročilé téma. Implementace takového ovladače je jednoduchý úkol, najít správné nastavení amplitudy je jiný příběh.
Abyste mohli používat PID regulátor, musíte změnit initRelayHysteresisController (…..) na initRelayPiDController (….) A musíte pro něj najít správná nastavení. Jako obvykle je najdete v Config.h
Implementoval jsem jednoduchý simulátor v Javě, takže je možné vizualizovat výsledky. Lze jej nalézt ve složce: pidsimulator. Níže vidíte simulace pro dva řadiče PID a P. PID není dokonale stabilní, protože jsem nepoužil žádný sofistikovaný algoritmus k nalezení správných hodnot.
Na obou grafech je požadovaná teplota nastavena na 30 (modrá). Aktuální teplota indikuje čtecí řádek. Relé má dva stavy ZAP a VYP. Když je povolena, teplota klesne o 1,5, když je deaktivována, stoupne o 0,5.
Krok 5: Sběrnice zpráv
Různé softwarové moduly spolu musí komunikovat, doufejme, že ne oběma způsoby;)
Například:
- statistický modul musí vědět, kdy se určité relé zapíná a vypíná,
- stisknutím tlačítka se změní obsah zobrazení a také se musí pozastavit služby, které by spotřebovaly mnoho cyklů CPU, například čtení teploty ze senzoru,
- po určité době je třeba odečítání teploty obnovit,
- a tak dále….
Každý modul je připojen ke sběrnici zpráv a může se registrovat pro konkrétní události a může vytvářet jakékoli události (první diagram).
Na druhém diagramu vidíme tok událostí po stisknutí tlačítka.
Některé součásti mají některé úkoly, než je třeba provádět pravidelně. Mohli bychom volat jejich odpovídající metody z hlavní smyčky, protože máme Message Bus, je nutné pouze šířit správnou událost (třetí diagram)
Krok 6: Libs
- https://github.com/maciejmiklas/Thermostat
- https://github.com/milesburton/Arduino-Temperature…
- https://github.com/maciejmiklas/ArdLog.git