Sadržaj:

Termostat temeljen na Arduinu: 6 koraka
Termostat temeljen na Arduinu: 6 koraka

Video: Termostat temeljen na Arduinu: 6 koraka

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

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

Korak 1: Konfiguracija

Konfiguracija
Konfiguracija

Cijela konfiguracija spremljena je u Config.h. Možete promijeniti PIN -ove koji kontroliraju releje, temperaturu očitanja, 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 se morate uvjeriti da PIN po vašem izboru već nije zauzet. Sve pinove možete 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čito 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: Regulator histereze

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

const static uint32_t RELAY_DELAY_AFTER_SWITCH_MS = 300000; // 5 minutakonst. Statički 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 stupnjeva. 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. Kad 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 regulatora jednostavan je zadatak, a pronalaženje ispravnih postavki amplitude je druga priča.

Da biste koristili PID kontroler, morate promijeniti initRelayHysteresisController (…..) u initRelayPiDController (….) I morate 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 a 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 kad 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 obostrano;)

Na primjer:

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

Svaki je modul 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 tipku.

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: Usi

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

Preporučeni: