Obsah:

Termostat založený na Arduinu: 6 kroků
Termostat založený na Arduinu: 6 kroků

Video: Termostat založený na Arduinu: 6 kroků

Video: Termostat založený na Arduinu: 6 kroků
Video: CS50 2013 - Week 9 2024, Listopad
Anonim
Termostat na bázi Arduina
Termostat na bázi Arduina
Termostat na bázi Arduina
Termostat na bázi Arduina
Termostat na bázi Arduina
Termostat na bázi Arduina

Tentokrát budeme stavět termostat založený na Arduinu, teplotním senzoru a relé. Najdete na github

Krok 1: Konfigurace

Konfigurace
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

PID regulátor
PID regulátor
PID regulátor
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

Sběrnice zpráv
Sběrnice zpráv
Sběrnice zpráv
Sběrnice zpráv
Sběrnice zpráv
Sběrnice zpráv
Sběrnice zpráv
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

Doporučuje: