Turinys:

Termostatas, pagrįstas „Arduino“: 6 žingsniai
Termostatas, pagrįstas „Arduino“: 6 žingsniai

Video: Termostatas, pagrįstas „Arduino“: 6 žingsniai

Video: Termostatas, pagrįstas „Arduino“: 6 žingsniai
Video: Output DC or AC Voltage using MCP4725 DAC with LCD and PWM to Voltage Converter with Arduino 2024, Lapkritis
Anonim
Termostatas, pagrįstas „Arduino“
Termostatas, pagrįstas „Arduino“
Termostatas, pagrįstas „Arduino“
Termostatas, pagrįstas „Arduino“
Termostatas, pagrįstas „Arduino“
Termostatas, pagrįstas „Arduino“

Šį kartą mes sukursime termostatą, pagrįstą „Arduino“, temperatūros jutikliu ir relė. Galite rasti „github“

1 žingsnis: konfigūravimas

Konfigūracija
Konfigūracija

Visa konfigūracija saugoma Config.h. Galite pakeisti PIN kodus, valdančius relės, skaitymo temperatūrą, slenksčius ar laiką.

2 veiksmas: relių konfigūravimas

Tarkime, kad norėtume turėti 3 relės:

  • ID: 0, PIN: 1, Temperatūros nuostata: 20
  • ID: 1, PIN: 10, Temperatūros nustatyta vertė: 30
  • ID: 2, PIN: 11, Temperatūros nustatyta vertė: 40

Pirmiausia turite įsitikinti, kad pasirinktas PIN kodas dar nėra paimtas. Visus kaiščius galima rasti „Config.h“, juos apibrėžia kintamieji, prasidedantys DIG_PIN.

Turite redaguoti Config.h ir sukonfigūruoti PIN kodus, slenksčius ir relių kiekį. Akivaizdu, kad kai kurios savybės jau egzistuoja, todėl turite jas tiesiog redaguoti.

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;

Dabar turime nustatyti relės ir valdiklį, tai atsitinka „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

3 žingsnis: histerezės valdiklis

Tai tas, kuris pasirinktas aukščiau pateiktame pavyzdyje, jis turi keletą papildomų konfigūracijų:

const static uint32_t RELAY_DELAY_AFTER_SWITCH_MS = 300000; // 5 minutesstatinis statinis uint32_t RHC_RELAY_MIN_SWITCH_MS = 3600000;

RELAY_DELAY_AFTER_SWITCH_MS suteikia laukimo laiko, kol bus perjungta kita relė. Įsivaizduokite, kad konfigūracija iš mūsų pavyzdžio pradėtų veikti 40 laipsnių aplinkoje. Dėl to visos trys relės būtų įjungtos vienu metu. Galų gale tai gali lemti dideles energijos sąnaudas - priklausomai nuo to, ką valdote, pavyzdžiui, elektrinis variklis paleidžia daugiau energijos. Mūsų atveju perjungimo relės turi tokį srautą: pirmoji relė eina, palaukite 5 minutes, antra įsijungia, palaukite 5 minutes, trečia įsijungia.

RHC_RELAY_MIN_SWITCH_MS apibrėžia histerezę, tai yra minimalus dažnis, kuriuo tam tikra relė gali pakeisti savo būseną. Įjungus, jis liks veikti mažiausiai tokį laiką, nepaisydamas temperatūros pokyčių. Tai tylu, nes jūs valdote elektros variklius, nes kiekvienas jungiklis turi neigiamos įtakos veikimo laikui.

4 žingsnis: PID valdiklis

PID valdiklis
PID valdiklis
PID valdiklis
PID valdiklis

Tai pažangi tema. Įdiegti tokį valdiklį yra paprasta užduotis, rasti tinkamus amplitudės nustatymus yra kita istorija.

Norėdami naudoti PID valdiklį, turite pakeisti „initRelayHysteresisController“(…..) į „initRelayPiDController“(…) ir jums reikia rasti tinkamus jo nustatymus. Kaip įprasta, juos rasite Config.h

„Java“įdiegiau paprastą simuliatorių, kad būtų galima vizualizuoti rezultatus. Jį galima rasti aplanke: pidsimulator. Žemiau galite pamatyti dviejų PID ir P valdiklių modeliavimą. PID nėra visiškai stabilus, nes netaikiau jokio sudėtingo algoritmo tinkamoms vertėms rasti.

Abiejuose sklypuose reikiama temperatūra yra 30 (mėlyna). Dabartinė temperatūra rodo skaitymo eilutę. Relė turi dvi būsenas: ON ir OFF. Įjungus, temperatūra nukrinta 1,5, o išjungus - 0,5.

5 veiksmas: pranešimų magistralė

Pranešimų autobusas
Pranešimų autobusas
Pranešimų autobusas
Pranešimų autobusas
Pranešimų autobusas
Pranešimų autobusas
Pranešimų autobusas
Pranešimų autobusas

Skirtingi programinės įrangos moduliai turi bendrauti tarpusavyje, tikiuosi ne abiem būdais;)

Pavyzdžiui:

  • statistikos modulis turi žinoti, kada įjungiama ir išjungiama tam tikra relė,
  • paspaudus mygtuką, turi būti pakeistas ekrano turinys, taip pat turi būti sustabdytos paslaugos, kurios sunaudotų daug procesoriaus ciklų, pvz., temperatūros nuskaitymas iš jutiklio,
  • po kurio laiko temperatūra turi būti atnaujinta,
  • ir taip toliau….

Kiekvienas modulis yra prijungtas prie pranešimų magistralės ir gali registruotis tam tikriems įvykiams ir gali sukurti bet kokius įvykius (pirmoji diagrama).

Antroje diagramoje matome įvykių srautą paspaudus mygtuką.

Kai kurie komponentai atlieka tam tikras užduotis, nei reikia atlikti periodiškai. Mes galėtume paskambinti atitinkamais jų metodais iš pagrindinės kilpos, nes mes turime pranešimų magistralę, tik reikia skleisti teisingą įvykį (trečioji diagrama)

6 žingsnis: Libs

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

Rekomenduojamas: