Cuprins:

Termostat bazat pe Arduino: 6 pași
Termostat bazat pe Arduino: 6 pași
Anonim
Termostat bazat pe Arduino
Termostat bazat pe Arduino
Termostat bazat pe Arduino
Termostat bazat pe Arduino
Termostat bazat pe Arduino
Termostat bazat pe Arduino

De data aceasta vom construi un termostat bazat pe Arduino, senzor de temperatură și releu. Puteți găsi pe github

Pasul 1: Configurare

Configurare
Configurare

Întreaga configurație este stocată în Config.h. Puteți schimba codurile PIN care controlează releele, temperatura de citire, pragurile sau temporizările.

Pasul 2: Configurarea releelor

Să presupunem că am dori să avem 3 relee:

  • ID: 0, PIN: 1, temperatura setată: 20
  • ID: 1, PIN: 10, temperatura setată: 30
  • ID: 2, PIN: 11, temperatura setată: 40

Mai întâi trebuie să vă asigurați că PIN-ul ales de dvs. nu este deja luat. Toți pinii pot fi găsiți în Config.h, sunt definiți de variabile care încep cu DIG_PIN.

Trebuie să editați Config.h și să configurați codurile PIN, pragurile și cantitatea de relee. Evident, unele proprietăți există deja, deci trebuie doar să le editați.

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;

Acum trebuie să configurăm relee și controler, acest lucru se întâmplă în 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

Pasul 3: Controler de histerezis

Este cea aleasă în exemplul de mai sus, are puține configurații suplimentare:

const static uint32_t RELAY_DELAY_AFTER_SWITCH_MS = 300000; // 5 minuteesconst static uint32_t RHC_RELAY_MIN_SWITCH_MS = 3600000;

RELAY_DELAY_AFTER_SWITCH_MS oferă timp de așteptare pentru comutarea următorului releu. Imaginați-vă că configurația din exemplul nostru ar începe să funcționeze într-un mediu de 40 de grade. Acest lucru ar duce la activarea tuturor celor trei relee în același timp. Acest lucru ar putea duce în cele din urmă la un consum mare de energie - în funcție de ceea ce controlați, motorul electric, de exemplu, consumă mai multă putere în timpul pornirii. În cazul nostru, releele de comutare au următorul flux: primul releu merge, așteptați 5 minute, al doilea merge, așteptați 5 minute, al treilea merge.

RHC_RELAY_MIN_SWITCH_MS definește histerezisul, este frecvența minimă pentru un anumit releu pentru a-și schimba starea. Odată pornit, va rămâne aprins cel puțin această perioadă de timp, ignorând schimbările de temperatură. Acest lucru este liniștit util dacă controlați motoarele electrice, deoarece fiecare comutator are un impact negativ asupra timpului live.

Pasul 4: Controler PID

Controler PID
Controler PID
Controler PID
Controler PID

Acesta este un subiect avansat. Implementarea unui astfel de controler este o sarcină simplă, găsirea unor setări de amplitudine corecte este o poveste diferită.

Pentru a utiliza controlerul PID trebuie să schimbați initRelayHysteresisController (…..) în initRelayPiDController (….) și trebuie să găsiți setările corecte pentru acesta. Ca de obicei, le veți găsi în Config.h

Am implementat un simulator simplu în Java, astfel încât să fie posibil să vizualizez rezultatele. Poate fi găsit în folderul: pidsimulator. Mai jos puteți vedea simulări pentru două controlere PID un P. PID nu este perfect stabil deoarece nu am aplicat niciun algoritm sofisticat pentru a găsi valori corecte.

Pe ambele parcele temperatura necesară este setată la 30 (albastru). Temperatura actuală indică linia citită. Releul are două stări ON și OFF. Când este activată temperatura scade cu 1,5, când este dezactivată crește cu 0,5.

Pasul 5: Autobuz de mesaje

Autobuz de mesaje
Autobuz de mesaje
Autobuz de mesaje
Autobuz de mesaje
Autobuz de mesaje
Autobuz de mesaje
Autobuz de mesaje
Autobuz de mesaje

Diferite module software trebuie să comunice între ele, sperăm că nu în ambele sensuri;)

De exemplu:

  • modulul de statistici trebuie să știe când un anumit releu pornește și se oprește,
  • apăsarea unui buton trebuie să schimbe conținutul afișat și, de asemenea, trebuie să suspende serviciile care ar consuma multe cicluri de procesor, de exemplu citirea temperaturii de la senzor,
  • după un timp, citirea temperaturii trebuie reînnoită,
  • si asa mai departe….

Fiecare modul este conectat la Message Bus și se poate înregistra pentru anumite evenimente și poate produce orice evenimente (prima diagramă).

Pe a doua diagramă putem vedea fluxul evenimentelor apăsând butonul.

Unele componente au anumite sarcini decât trebuie executate periodic. Le-am putea apela metodele corespunzătoare din bucla principală, deoarece avem Autobuz de mesaje este necesar doar să propagăm evenimentul corect (a treia diagramă)

Pasul 6: Libs

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

Recomandat: