Talaan ng mga Nilalaman:

Thermostat Batay sa Arduino: 6 Mga Hakbang
Thermostat Batay sa Arduino: 6 Mga Hakbang

Video: Thermostat Batay sa Arduino: 6 Mga Hakbang

Video: Thermostat Batay sa Arduino: 6 Mga Hakbang
Video: Dobol B TV Livestream: January 24, 2024 - Replay 2024, Nobyembre
Anonim
Termostat Batay sa Arduino
Termostat Batay sa Arduino
Termostat Batay sa Arduino
Termostat Batay sa Arduino
Termostat Batay sa Arduino
Termostat Batay sa Arduino

Sa oras na ito ay magtatayo kami ng isang Therostat batay sa Arduino, sensor ng temperatura at relay. Maaari mong makita sa github

Hakbang 1: Pag-configure

Pag-configure
Pag-configure

Ang buong pagsasaayos ay nakaimbak sa Config.h. Maaari mong baguhin ang mga PIN na nagkokontrol sa mga relay, temperatura sa pagbabasa, mga threshold o oras.

Hakbang 2: Pag-configure ng Mga Relay

Ipagpalagay na nais nating magkaroon ng 3 relay:

  • ID: 0, PIN: 1, Setpoint ng temperatura: 20
  • ID: 1, PIN: 10, Setpoint ng temperatura: 30
  • ID: 2, PIN: 11, Temperatura ng punto ng punto: 40

Una dapat mong tiyakin na ang PIN na iyong pinili ay hindi pa nakuha. Ang lahat ng mga pin ay matatagpuan sa Config.h, tinukoy ang mga ito sa pamamagitan ng mga variable na nagsisimula sa DIG_PIN.

Kailangan mong i-edit ang Config.h at i-configure ang mga PIN, threshold at dami ng mga relay. Malinaw na mayroon nang mga pag-aari, kaya kailangan mo lamang i-edit ang mga ito.

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;

Ngayon kailangan naming mag-setup ng mga relay at controller, nangyayari ito sa 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

Hakbang 3: Controller ng Hysteresis

Ito ang napili sa halimbawa sa itaas, mayroon itong ilang mga karagdagang pagsasaayos:

Const static uint32_t RELAY_DELAY_AFTER_SWITCH_MS = 300000; // 5 minutesconst static uint32_t RHC_RELAY_MIN_SWITCH_MS = 3600000;

Nagbibigay ang RELAY_DELAY_AFTER_SWITCH_MS ng oras ng paghihintay para sa paglipat ng susunod na relay. Isipin na ang pagsasaayos mula sa aming halimbawa ay magsisimulang magtrabaho sa 40 degree na kapaligiran. Magreresulta ito sa pagpapagana ng lahat ng tatlong mga relay nang sabay. Maaari itong humantong sa mataas na pagkonsumo ng kuryente - nakasalalay sa kung ano ang iyong kinokontrol, halimbawa, ang electric engine ay kumakain ng mas maraming lakas sa simula. Sa aming kaso ang paglipat ng mga relay ay may sumusunod na daloy: ang unang relay ay nagpapatuloy, maghintay ng 5 minuto, ang pangalawa ay nagpapatuloy, maghintay ng 5 minuto, ang pangatlo ay nagpapatuloy.

Tinutukoy ng RHC_RELAY_MIN_SWITCH_MS ang hysteresis, ito ang minimum na dalas para sa partikular na relay upang mabago ang estado nito. Kapag ito ay, ito ay mananatili sa para sa pinakamaliit sa panahong ito ng oras, hindi papansin ang mga pagbabago sa temperatura. Ito ay tahimik na kapaki-pakinabang ito ay iyong kinokontrol ang mga de-kuryenteng motor, dahil ang bawat switch ay may negatibong epekto sa live na oras.

Hakbang 4: Controller ng PID

Controller ng PID
Controller ng PID
Controller ng PID
Controller ng PID

Ito ay advanced na paksa. Ang pagpapatupad ng naturang controller ay simpleng gawain, ang paghahanap ng tamang mga setting ng amplitude ay ibang kuwento.

Upang magamit ang PID controller kailangan mong baguhin ang initRelayHysteresisController (…..) sa initRelayPiDController (….) At kailangan mong hanapin ang tamang mga setting para dito. Tulad ng dati makikita mo sila sa Config.h

Ipinatupad ko ang simpleng simulator sa Java, upang posible na mailarawan ang mga resulta. Maaari itong matagpuan sa folder: pidsimulator. Sa ibaba maaari mong makita ang mga simulation para sa dalawang mga tagakontrol PID isang P. PID ay hindi perpektong matatag dahil hindi ako naglapat ng anumang sopistikadong algorithm upang makahanap ng tamang mga halaga.

Sa parehong mga lagay ng lupa ang kinakailangang temperatura ay nakatakda sa 30 (asul). Ipinapahiwatig ng kasalukuyang temperatura ang nabasang linya. Ang relay ay may dalawang estado na ON at OFF. Kapag pinagana ang temperatura ay bumaba ng 1.5, kapag hindi ito pinagana ay tumataas ito ng 0.5.

Hakbang 5: Bus ng Mensahe

Mensahe ng Bus
Mensahe ng Bus
Mensahe ng Bus
Mensahe ng Bus
Mensahe ng Bus
Mensahe ng Bus
Mensahe ng Bus
Mensahe ng Bus

Ang magkakaibang mga module ng software ay kailangang makipag-usap sa bawat isa, sana ay hindi kapwa paraan;)

Halimbawa:

  • kailangang malaman ng module ng istatistika kung kailan nagpapatuloy at patay ang isang partikular na relay,
  • ang pagpindot sa isang pindutan ay kailangang baguhin ang nilalaman ng display at kailangan ding suspindihin ang mga serbisyo na gugugol ng maraming mga siklo ng CPU, halimbawa ng pagbabasa ng temperatura mula sa sensor,
  • pagkatapos ng ilang oras na pagbabasa ng temperatura ay kailangang i-update,
  • at iba pa….

Ang bawat module ay konektado sa Message Bus at maaaring magparehistro para sa mga partikular na kaganapan, at maaaring gumawa ng anumang mga kaganapan (unang diagram).

Sa pangalawang diagram makikita natin ang daloy ng kaganapan sa pagpindot sa pindutan.

Ang ilang mga sangkap ay may ilang mga gawain kaysa sa kailangang i-implement nang pana-panahon. Maaari naming tawagan ang kanilang kaukulang pamamaraan mula sa pangunahing loop, dahil mayroon kaming Message Bus kinakailangan lamang upang maipalaganap ang tamang kaganapan (pangatlong diagram)

Hakbang 6: Libs

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

Inirerekumendang: