Satura rādītājs:

Termostats, kura pamatā ir Arduino: 6 soļi
Termostats, kura pamatā ir Arduino: 6 soļi

Video: Termostats, kura pamatā ir Arduino: 6 soļi

Video: Termostats, kura pamatā ir Arduino: 6 soļi
Video: Использование Melexis MLX90614 Инфракрасный термометр с Arduino 2024, Novembris
Anonim
Termostats, kura pamatā ir Arduino
Termostats, kura pamatā ir Arduino
Termostats, kura pamatā ir Arduino
Termostats, kura pamatā ir Arduino
Termostats, kura pamatā ir Arduino
Termostats, kura pamatā ir Arduino

Šoreiz mēs izveidosim termostatu, kura pamatā ir Arduino, temperatūras sensors un relejs. Jūs varat atrast vietnē github

1. darbība: konfigurēšana

Konfigurācija
Konfigurācija

Visa konfigurācija tiek saglabāta Config.h. Jūs varat mainīt PIN, kas kontrolē relejus, lasīšanas temperatūru, sliekšņus vai laiku.

2. darbība. Releju konfigurēšana

Pieņemsim, ka mēs vēlētos, lai mums būtu 3 releji:

  • ID: 0, PIN: 1, Temperatūras uzdotā vērtība: 20
  • ID: 1, PIN: 10, Temperatūras uzdotā vērtība: 30
  • ID: 2, PIN: 11, Temperatūras uzdotā vērtība: 40

Vispirms jums jāpārliecinās, ka jūsu izvēlētais PIN nav jau ņemts. Visas tapas var atrast Config.h, tās nosaka mainīgie, kas sākas ar DIG_PIN.

Jums ir jārediģē Config.h un jākonfigurē PIN, sliekšņi un releju daudzums. Acīmredzot daži rekvizīti jau pastāv, tāpēc tie ir tikai jārediģē.

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;

Tagad mums ir jāiestata releji un kontrolieris, tas notiek vietnē 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. solis: Histerēzes kontrolieris

Tas ir tas, kas izvēlēts iepriekšējā piemērā, tam ir dažas papildu konfigurācijas:

const static uint32_t RELAY_DELAY_AFTER_SWITCH_MS = 300000; // 5 minūšu statiskais statiskais uint32_t RHC_RELAY_MIN_SWITCH_MS = 3600000;

RELAY_DELAY_AFTER_SWITCH_MS dod gaidīšanas laiku nākamā releja pārslēgšanai. Iedomājieties, ka konfigurācija no mūsu piemēra sāktu darboties 40 grādu vidē. Tādējādi visi trīs releji tiktu iespējoti vienlaicīgi. Tas galu galā var izraisīt lielu enerģijas patēriņu - atkarībā no tā, ko jūs kontrolējat, piemēram, elektromotors startēšanas laikā patērē vairāk enerģijas. Mūsu gadījumā pārslēgšanas relejiem ir šāda plūsma: pirmais relejs iet, pagaidiet 5 minūtes, otrais ieslēdzas, pagaidiet 5 minūtes, trešais ieslēdzas.

RHC_RELAY_MIN_SWITCH_MS definē histerēzi, tā ir minimālā frekvence, kādā konkrētais relejs var mainīt savu stāvokli. Kad tas ir ieslēgts, tas paliks ieslēgts vismaz šo laika periodu, neņemot vērā temperatūras izmaiņas. Tas ir kluss un noderīgs, vadot elektromotorus, jo katram slēdzim ir negatīva ietekme uz dzīvo laiku.

4. solis: PID kontrolieris

PID kontrolieris
PID kontrolieris
PID kontrolieris
PID kontrolieris

Šī ir uzlabota tēma. Šāda kontroliera ieviešana ir vienkāršs uzdevums, pareizo amplitūdas iestatījumu atrašana ir cits stāsts.

Lai izmantotu PID kontrolieri, jums ir jāmaina initRelayHysteresisController (…..) uz initRelayPiDController (…), un jums ir jāatrod tam piemēroti iestatījumi. Kā parasti, tos atradīsit Config.h

Esmu ieviesis vienkāršu simulatoru Java, lai būtu iespējams vizualizēt rezultātus. To var atrast mapē: pidsimulator. Zemāk jūs varat redzēt simulācijas diviem kontrolieriem PID a P. PID nav pilnīgi stabils, jo es neizmantoju sarežģītu algoritmu, lai atrastu pareizās vērtības.

Abos parauglaukumos nepieciešamā temperatūra ir iestatīta uz 30 (zila). Pašreizējā temperatūra norāda nolasīšanas rindu. Relejam ir divi stāvokļi ON un OFF. Ja tas ir iespējots, temperatūra pazeminās par 1,5, bet atspējota - par 0,5.

5. darbība. Ziņojumu kopne

Ziņojumu autobuss
Ziņojumu autobuss
Ziņojumu autobuss
Ziņojumu autobuss
Ziņojumu autobuss
Ziņojumu autobuss
Ziņojumu autobuss
Ziņojumu autobuss

Dažādiem programmatūras moduļiem ir jāsazinās savā starpā, cerams, ka ne abos virzienos;)

Piemēram:

  • statistikas modulim ir jāzina, kad konkrētais relejs ieslēdzas un izslēdzas,
  • nospiežot pogu, ir jāmaina displeja saturs, kā arī jāpārtrauc pakalpojumi, kas patērētu daudzus CPU ciklus, piemēram, temperatūras nolasīšana no sensora,
  • pēc kāda laika temperatūras rādījums ir jāatjauno,
  • un tā tālāk….

Katrs modulis ir savienots ar ziņojumu kopni un var reģistrēties noteiktiem notikumiem, kā arī var radīt jebkādus notikumus (pirmā diagramma).

Otrajā diagrammā mēs varam redzēt notikumu plūsmu, nospiežot pogu.

Dažām sastāvdaļām ir daži uzdevumi, nekā nepieciešams periodiski izpildīt. Mēs varētu izsaukt viņu atbilstošās metodes no galvenās cilpas, jo mums ir ziņojumu kopne, ir nepieciešams tikai izplatīt pareizo notikumu (trešā diagramma)

6. darbība: Libs

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

Ieteicams: