Mündəricat:

Arduino əsasında Termostat: 6 addım
Arduino əsasında Termostat: 6 addım

Video: Arduino əsasında Termostat: 6 addım

Video: Arduino əsasında Termostat: 6 addım
Video: Lesson 47: Using K-Type MAX6675 as thermostat | Arduino Step By Step Course 2024, Iyul
Anonim
Arduino əsasında Termostat
Arduino əsasında Termostat
Arduino əsasında Termostat
Arduino əsasında Termostat
Arduino əsasında termostat
Arduino əsasında termostat

Bu dəfə Arduino, temperatur sensoru və röle əsasında bir Termostat quracağıq. Github -da tapa bilərsiniz.

Addım 1: Konfiqurasiya

Konfiqurasiya
Konfiqurasiya

Bütün konfiqurasiya Config.h -də saxlanılır. Röleləri, oxu temperaturunu, eşikləri və ya vaxtları idarə edən PIN kodlarını dəyişə bilərsiniz.

Addım 2: Röleləri konfiqurasiya edin

Tutaq ki, 3 röleyə sahib olmaq istərdik:

  • ID: 0, PIN: 1, İstilik təyin nöqtəsi: 20
  • ID: 1, PIN: 10, İstilik təyin nöqtəsi: 30
  • ID: 2, PIN: 11, İstilik təyin nöqtəsi: 40

Əvvəlcə seçdiyiniz PİN kodunun alınmadığından əmin olmalısınız. Bütün sancaqlar Config.h -də tapıla bilər, DIG_PIN ilə başlayan dəyişənlərlə təyin olunur.

Config.h -i redaktə etməli və PİN -ləri, eşikləri və rölelərin miqdarını konfiqurasiya etməlisiniz. Aydındır ki, bəzi xüsusiyyətlər artıq mövcuddur, buna görə onları sadəcə redaktə etməlisiniz.

const statik uint8_t DIG_PIN_RELAY_0 = 1; const statik uint8_t DIG_PIN_RELAY_1 = 10; const statik uint8_t DIG_PIN_RELAY_2 = 11;

const statik uint8_t RELAYS_AMOUNT = 3;

const statik int16_t RELAY_TEMP_SET_POINT_0 = 20;

const statik int16_t RELAY_TEMP_SET_POINT_1 = 30; const statik int16_t RELAY_TEMP_SET_POINT_2 = 40;

İndi röle və nəzarətçi qurmalıyıq, bu RelayDriver.cpp -də olur

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

Addım 3: Histerezis Nəzarətçisi

Yuxarıdakı nümunədə seçilmiş, bir neçə əlavə konfiqurasiyaya malikdir:

const statik uint32_t RELAY_DELAY_AFTER_SWITCH_MS = 300000; // 5 dəqiqə statik uint32_t RHC_RELAY_MIN_SWITCH_MS = 3600000;

RELAY_DELAY_AFTER_SWITCH_MS, növbəti röleyi dəyişdirmək üçün gözləmə vaxtı verir. Nümunəmizdəki konfiqurasiyanın 40 dərəcə bir mühitdə işə başlayacağını düşünün. Bu, hər üç rölin eyni vaxtda işə salınması ilə nəticələnəcək. Bu, nəticədə yüksək enerji istehlakına səbəb ola bilər - nəzarət etdiyiniz şeydən asılı olaraq, məsələn, elektrik mühərriki işə salındıqda daha çox enerji istehlak edir. Bizim vəziyyətimizdə keçid rölesi aşağıdakı axına malikdir: birinci röle gedir, 5 dəqiqə gözləyin, ikinci davam edir, 5 dəqiqə gözləyin, üçüncüsü davam edir.

RHC_RELAY_MIN_SWITCH_MS histerezisi müəyyən edir, xüsusi rölin vəziyyətini dəyişməsi üçün minimum tezlikdir. Açıldıqdan sonra temperatur dəyişikliyinə məhəl qoymadan ən az bu müddət ərzində qalacaq. Elektrik mühərriklərini idarə etməyiniz çox faydalıdır, çünki hər bir keçid canlı vaxta mənfi təsir göstərir.

Addım 4: PID nəzarətçisi

PID nəzarətçisi
PID nəzarətçisi
PID nəzarətçisi
PID nəzarətçisi

Bu inkişaf etmiş bir mövzudur. Belə bir nəzarətçini tətbiq etmək sadə bir işdir, doğru amplituda parametrlərini tapmaq fərqli bir hekayədir.

PID nəzarətçisini istifadə etmək üçün initRelayHysteresisController (…..) parametrini initRelayPiDController (….) Olaraq dəyişdirməlisiniz və bunun üçün doğru parametrləri tapmalısınız. Həmişə olduğu kimi bunları Config.h -də tapa bilərsiniz

Nəticələri görselleştirmek üçün Java -da sadə bir simulyator tətbiq etdim. Aşağıdakı qovluqda tapıla bilər: pidsimulator. Bunun altında iki nəzarətçi üçün simulyasiyalar görə bilərsiniz PID a P. PID mükəmməl sabit deyil, çünki doğru dəyərləri tapmaq üçün hər hansı bir inkişaf etmiş alqoritm tətbiq etməmişəm.

Hər iki sahədə tələb olunan temperatur 30 (mavi) olaraq təyin olunur. Cari temperatur oxu xəttini göstərir. Relay -ın iki vəziyyəti ON və OFF -a malikdir. İşə salındıqda temperatur 1,5 azalır, söndürüldükdə isə 0,5 yüksəlir.

Addım 5: Mesaj Avtobusu

Mesaj Avtobusu
Mesaj Avtobusu
Mesaj Avtobusu
Mesaj Avtobusu
Mesaj Avtobusu
Mesaj Avtobusu
Mesaj Avtobusu
Mesaj Avtobusu

Fərqli proqram modulları bir -biri ilə ünsiyyət qurmalıdır, inşallah hər iki şəkildə deyil;)

Misal üçün:

  • statistika modulu müəyyən bir rölin nə vaxt açılacağını və ya söndüyünü bilməlidir.
  • bir düyməyə basmaq ekran məzmununu dəyişdirməli və eyni zamanda bir çox CPU dövrü istehlak edəcək xidmətləri dayandırmalıdır, məsələn, sensordan temperaturun oxunması,
  • bir müddət sonra temperaturun oxunması yenilənməlidir.
  • və s….

Hər bir modul Mesaj Avtobusuna bağlıdır və müəyyən hadisələr üçün qeydiyyatdan keçə bilər və hər hansı bir hadisə (ilk diaqram) hazırlaya bilər.

İkinci diaqramda düyməni basaraq hadisənin gedişatını görə bilərik.

Bəzi komponentlərin vaxtaşırı yerinə yetirilməsi lazım olan bəzi vəzifələri var. Mesaj Avtobusuna sahib olduğumuz üçün onların uyğun metodlarını əsas döngədən çağıra bilərik (yalnız üçüncü hadisəni) təbliğ etmək lazımdır.

Addım 6: Libs

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

Tövsiyə: