Sadržaj:

Termostat baziran na Arduinu: 6 koraka
Termostat baziran na Arduinu: 6 koraka

Video: Termostat baziran na Arduinu: 6 koraka

Video: Termostat baziran na Arduinu: 6 koraka
Video: Терморегулятор c Удаленным Управлением 📈 на ESP8266. Часть 1 2024, Juli
Anonim
Termostat zasnovan na Arduinu
Termostat zasnovan na Arduinu
Termostat zasnovan na Arduinu
Termostat zasnovan na Arduinu
Termostat zasnovan na Arduinu
Termostat zasnovan na Arduinu

Ovaj put ćemo izgraditi termostat zasnovan na Arduinu, temperaturnom senzoru i releju. Možete pronaći na githubu

Korak 1: Konfiguracija

Konfiguracija
Konfiguracija

Cijela konfiguracija pohranjena je u Config.h. Možete promijeniti PIN -ove kontrolirajući releje, temperaturu očitavanja, pragove ili vrijeme.

Korak 2: Konfiguriranje releja

Pretpostavimo da bismo željeli imati 3 releja:

  • ID: 0, PIN: 1, zadana temperatura: 20
  • ID: 1, PIN: 10, zadana temperatura: 30
  • ID: 2, PIN: 11, Zadana temperatura: 40

Prvo morate biti sigurni da PIN po vašem izboru nije već zauzet. Svi pinovi se mogu pronaći u Config.h, definirani su varijablama koje počinju s DIG_PIN.

Morate urediti Config.h i konfigurirati PIN -ove, pragove i količinu releja. Očigledno da neka svojstva već postoje, pa ih morate samo urediti.

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;

Sada moramo postaviti releje i kontroler, to se događa u 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

Korak 3: Kontroler histereze

To je onaj odabran u gornjem primjeru, ima nekoliko dodatnih konfiguracija:

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

RELAY_DELAY_AFTER_SWITCH_MS daje vrijeme čekanja za prebacivanje sljedećeg releja. Zamislite da bi konfiguracija iz našeg primjera počela raditi u okruženju od 40 stepeni. To bi rezultiralo uključivanjem sva tri releja u isto vrijeme. To bi na kraju moglo dovesti do velike potrošnje energije - ovisno o tome što kontrolirate, na primjer, električni motor troši više energije tijekom pokretanja. U našem slučaju sklopni releji imaju sljedeći tok: prvi relej ide, pričekajte 5 minuta, drugi se uključuje, pričekajte 5 minuta, treći se uključuje.

RHC_RELAY_MIN_SWITCH_MS definira histerezu, to je minimalna frekvencija za promjenu stanja releja. Kada se uključi, ostat će uključena barem još neko vrijeme, zanemarujući promjene temperature. Ovo je tiho, korisno ako upravljate elektromotorima, jer svaki prekidač negativno utječe na vrijeme rada.

Korak 4: PID kontroler

PID kontroler
PID kontroler
PID kontroler
PID kontroler

Ovo je napredna tema. Implementacija takvog kontrolera je jednostavan zadatak, a pronalaženje ispravnih postavki amplitude je druga priča.

Da biste koristili PID kontroler, morate promijeniti initRelayHysteresisController (…..) u initRelayPiDController (….) I trebate pronaći odgovarajuće postavke za njega. Kao i obično, pronaći ćete ih u Config.h

Implementirao sam jednostavan simulator u Javi, tako da je moguće vizualizirati rezultate. Može se pronaći u mapi: pidsimulator. Ispod možete vidjeti simulacije za dva kontrolera PID i P. PID nije savršeno stabilan jer nisam primijenio nikakav sofisticirani algoritam za pronalaženje pravih vrijednosti.

Na obje parcele potrebna temperatura je postavljena na 30 (plavo). Trenutna temperatura označava liniju za čitanje. Relej ima dva stanja ON i OFF. Kada je omogućeno, temperatura pada za 1,5, a kada je onemogućeno, raste za 0,5.

Korak 5: Sabirnica poruka

Autobus poruka
Autobus poruka
Autobus poruka
Autobus poruka
Autobus poruka
Autobus poruka
Autobus poruka
Autobus poruka

Različiti softverski moduli moraju međusobno komunicirati, nadam se ne u oba smjera;)

Na primjer:

  • modul statistike mora znati kada se određeni relej uključuje i isključuje,
  • pritiskom na dugme mora se promijeniti sadržaj prikaza, a mora se i obustaviti usluge koje bi trošile mnoge cikluse procesora, na primjer očitavanje temperature sa senzora,
  • nakon nekog vremena očitavanje temperature mora biti obnovljeno,
  • i tako dalje….

Svaki modul je spojen na sabirnicu poruka i može se registrirati za određene događaje te može proizvesti bilo koje događaje (prvi dijagram).

Na drugom dijagramu možemo vidjeti tok događaja pritiskom na dugme.

Neke komponente imaju neke zadatke koje je potrebno povremeno izvršavati. Njihove odgovarajuće metode mogli bismo nazvati iz glavne petlje, budući da imamo sabirnicu poruka, potrebno je samo propagirati desni događaj (treći dijagram)

Korak 6: Libs

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

Preporučuje se: