Mundarija:

Arduino -ga asoslangan termostat: 6 qadam
Arduino -ga asoslangan termostat: 6 qadam

Video: Arduino -ga asoslangan termostat: 6 qadam

Video: Arduino -ga asoslangan termostat: 6 qadam
Video: Mavzu Kengayish termometrlari 2024, Noyabr
Anonim
Arduino -ga asoslangan termostat
Arduino -ga asoslangan termostat
Arduino -ga asoslangan termostat
Arduino -ga asoslangan termostat
Arduino -ga asoslangan termostat
Arduino -ga asoslangan termostat

Bu safar biz Arduino, harorat sensori va o'rni asosida termostatni qurmoqchimiz.

1 -qadam: Konfiguratsiya

Konfiguratsiya
Konfiguratsiya

Butun konfiguratsiya Config.h da saqlanadi. Siz PIN -kodni boshqarish o'rni, o'qish harorati, chegaralar yoki vaqtni o'zgartirishingiz mumkin.

2 -qadam: O'rnatish moslamalarini sozlash

Faraz qilaylik, bizda 3 ta o'rni bo'lishi kerak:

  • ID: 0, PIN: 1, haroratni sozlash nuqtasi: 20
  • ID: 1, PIN -kod: 10, haroratni belgilash nuqtasi: 30
  • ID: 2, PIN -kod: 11, Haroratning belgilangan nuqtasi: 40

Avval siz tanlagan PIN -kod hali olinmaganligiga ishonch hosil qilishingiz kerak. Barcha pinlarni Config.h da topish mumkin, ular DIG_PIN bilan boshlanadigan o'zgaruvchilar bilan belgilanadi.

Siz Config.h -ni tahrir qilishingiz va PIN -kodlarni, chegaralarni va o'rni miqdorini sozlashingiz kerak. Shubhasiz, ba'zi xususiyatlar allaqachon mavjud, shuning uchun ularni tahrir qilish kerak.

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;

Endi biz o'rni va tekshirgichni sozlashimiz kerak, bu RelayDriver.cpp da sodir bo'ladi

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 -qadam: Histerezis boshqaruvchisi

Bu yuqoridagi misolda tanlangan, u bir nechta qo'shimcha konfiguratsiyaga ega:

const statik uint32_t RELAY_DELAY_AFTER_SWITCH_MS = 300000; // 5 daqiqa statik uint32_t RHC_RELAY_MIN_SWITCH_MS = 3600000;

RELAY_DELAY_AFTER_SWITCH_MS keyingi röleyni almashtirish uchun kutish vaqtini beradi. Tasavvur qiling, bizning misolimizdagi konfiguratsiya 40 graduslik muhitda ishlay boshlaydi. Bu bir vaqtning o'zida barcha uchta o'rni yoqilishiga olib keladi. Bu oxir -oqibat yuqori quvvat sarflanishiga olib kelishi mumkin - nima boshqarayotganingizga qarab, masalan, elektr dvigatel ishga tushganda ko'proq quvvat sarflaydi. Bizning holatda, o'tish rölesi quyidagi oqimga ega: birinchi o'rni ketadi, 5 daqiqa kutadi, ikkinchisi davom etadi, 5 daqiqa kutadi, uchinchisi davom etadi.

RHC_RELAY_MIN_SWITCH_MS histerezni aniqlaydi, bu uning holatini o'zgartirish uchun ma'lum o'rni uchun minimal chastota. Yoqilgandan so'ng, u harorat o'zgarishiga e'tibor bermay, shu vaqtgacha yonib turadi. Bu elektr dvigatellarni boshqarishda juda qulay, chunki har bir kalit hayot vaqtiga salbiy ta'sir qiladi.

4 -qadam: PID tekshiruvi

PID tekshiruvi
PID tekshiruvi
PID tekshiruvi
PID tekshiruvi

Bu rivojlangan mavzu. Bunday boshqaruvchini amalga oshirish - oddiy ish, to'g'ri amplituda sozlamalarini topish - bu boshqa hikoya.

PID tekshirgichidan foydalanish uchun initRelayHysteresisController (…..) ni initRelayPiDController (….) Ga o'zgartirishingiz kerak va buning uchun to'g'ri sozlamalarni topishingiz kerak. Odatdagidek, ularni Config.h -da topasiz

Men Java -da oddiy simulyatorni qo'lladim, natijada natijalarni ingl. Buni quyidagi papkada topish mumkin: pidsimulator. Bundan pastda siz ikkita PID va PID kontrollerlari uchun simulyatsiyalarni ko'rishingiz mumkin. PID juda barqaror emas, chunki men to'g'ri qiymatlarni topish uchun murakkab algoritmni qo'llaganim yo'q.

Ikkala uchastkada ham kerakli harorat 30 (ko'k) ga o'rnatiladi. Joriy harorat o'qish chizig'ini ko'rsatadi. Relayda ikkita holat yoqilgan va o'chirilgan. U yoqilganda harorat 1,5 ga pasayadi, o'chirilganda esa 0,5 ga ko'tariladi.

5 -qadam: Avtobus xabari

Xabar avtobusi
Xabar avtobusi
Xabar avtobusi
Xabar avtobusi
Xabar avtobusi
Xabar avtobusi
Xabar avtobusi
Xabar avtobusi

Har xil dasturiy ta'minot modullari bir -biri bilan aloqa o'rnatishi kerak, umid qilamanki, har ikkala usulda ham emas;)

Masalan:

  • statistika moduli ma'lum bir o'rni qachon yoqilishini va o'chishini bilishi kerak.
  • tugmani bosish displey tarkibini o'zgartirishi kerak, shuningdek, protsessorning ko'p tsiklini ishlatadigan xizmatlarni to'xtatishi kerak, masalan, sensordan harorat o'qilishi,
  • Biroz vaqt o'tgach, harorat ko'rsatkichini yangilash kerak.
  • va hokazo….

Har bir modul Message Bus -ga ulangan va ma'lum hodisalar uchun ro'yxatdan o'tishi mumkin va har qanday hodisani (birinchi diagramma) ishlab chiqarishi mumkin.

Ikkinchi diagrammada biz tugmani bosish orqali voqealar oqimini ko'ramiz.

Ba'zi tarkibiy qismlar vaqti -vaqti bilan bajarilishi kerak bo'lgan vazifalarga ega. Biz ularga mos keladigan usullarni asosiy tsikldan chaqirishimiz mumkin, chunki bizda "Xabar avtobusi" bor, faqat to'g'ri hodisani tarqatish kerak (uchinchi diagramma).

6 -qadam: Liboslar

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

Tavsiya: