Мазмұны:

Arduino негізіндегі термостат: 6 қадам
Arduino негізіндегі термостат: 6 қадам

Бейне: Arduino негізіндегі термостат: 6 қадам

Бейне: Arduino негізіндегі термостат: 6 қадам
Бейне: Octopus Max EZ v1.0 - Hotend and Automatic Cooling Fans 2024, Қараша
Anonim
Arduino негізіндегі термостат
Arduino негізіндегі термостат
Arduino негізіндегі термостат
Arduino негізіндегі термостат
Arduino негізіндегі термостат
Arduino негізіндегі термостат

Бұл жолы біз Arduino, температура сенсоры мен реле негізінде термостат құрастырмақпыз.

1 -қадам: конфигурация

Конфигурация
Конфигурация

Тұтас конфигурация Config.h -те сақталады. PIN кодын реле, оқу температурасы, шекті мәндер немесе уақытты өзгертуге болады.

2 -қадам: реле конфигурациясы

Біз 3 эстафетаны алғымыз келеді деп есептейік:

  • Идентификатор: 0, PIN: 1, температураның белгіленген мәні: 20
  • Идентификатор: 1, ПИН: 10, Температураның белгіленген мәні: 30
  • Идентификатор: 2, ПИН: 11, Температураның белгіленген мәні: 40

Алдымен сіз таңдаған PIN коды әлі алынбағанына көз жеткізуіңіз керек. Барлық түйреуіштерді Config.h сайтынан табуға болады, олар DIG_PIN -ден басталатын айнымалылармен анықталады.

Config.h -ды өңдеп, PIN кодтарын, шектерді және реле мөлшерін конфигурациялау қажет. Әлбетте, кейбір қасиеттер бұрыннан бар, сондықтан оларды өңдеу керек.

тұрақты статикалық uint8_t DIG_PIN_RELAY_0 = 1; тұрақты статикалық uint8_t DIG_PIN_RELAY_1 = 10; const статикалық uint8_t DIG_PIN_RELAY_2 = 11;

const статикалық 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;

Енді біз реле мен контроллерді орнатуымыз керек, бұл 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 -қадам: гистерезис контроллері

Бұл жоғарыда келтірілген мысалда таңдалған, оның бірнеше қосымша конфигурациясы бар:

const статикалық uint32_t RELAY_DELAY_AFTER_SWITCH_MS = 300000; // 5 минуттық тұрақты uint32_t RHC_RELAY_MIN_SWITCH_MS = 3600000;

RELAY_DELAY_AFTER_SWITCH_MS келесі релені ауыстыру үшін күту уақытын береді. Біздің мысалдағы конфигурация 40 градус ортада жұмыс жасай бастайды деп елестетіп көріңіз. Бұл бір уақытта барлық үш релені қосуға мүмкіндік береді. Бұл ақыр соңында жоғары қуат тұтынуына әкелуі мүмкін - сіз басқаратын нәрсеге байланысты, мысалы, электр қозғалтқышы іске қосу кезінде көбірек қуат жұмсайды. Біздің жағдайда ауыспалы реле келесі ағынмен жүреді: бірінші реле өтеді, 5 минут күтеді, екіншісі жалғасады, 5 минут күтеді, үшіншісі жалғасады.

RHC_RELAY_MIN_SWITCH_MS гистерезис анықтайды, бұл оның релесін өзгерту үшін ең төменгі жиілік. Қосылғаннан кейін ол температураның өзгеруін елемей, ең аз уақыт осы күйде қалады. Бұл электр қозғалтқыштарын басқару үшін тыныш, өйткені әр қосқыш тірі уақытқа теріс әсер етеді.

4 -қадам: PID контроллері

PID контроллері
PID контроллері
PID контроллері
PID контроллері

Бұл жетілдірілген тақырып. Мұндай контроллерді енгізу - қарапайым міндет, амплитуданың дұрыс параметрлерін табу - бұл бөлек әңгіме.

PID контроллерін пайдалану үшін initRelayHysteresisController (…..) initRelayPiDController (….) Етіп өзгерту керек және сіз оған дұрыс параметрлерді табуыңыз керек. Әдеттегідей, оларды Config.h сайтынан табасыз

Мен Java -де қарапайым тренажерды енгіздім, осылайша нәтижелерді визуализациялауға болады. Оны қалтадан табуға болады: pidsimulator. Төменде сіз PID a P. PID екі контроллеріне арналған модельдеуді көре аласыз, өйткені мен дұрыс мәндерді табу үшін күрделі алгоритм қолданбағанмын.

Екі учаскеде де қажетті температура 30 -ға орнатылған (көк). Ағымдағы температура оқу сызығын көрсетеді. Реле қосулы және өшірілген екі күйге ие. Ол қосылған кезде температура 1,5 -ке төмендейді, сөндірілгенде ол 0,5 -ке көтеріледі.

5 -қадам: Хабарлама шинасы

Хабарламалық автобус
Хабарламалық автобус
Хабарламалық автобус
Хабарламалық автобус
Хабарламалық автобус
Хабарламалық автобус
Хабарламалық автобус
Хабарламалық автобус

Бағдарламалық қамтамасыз етудің әр түрлі модульдері бір -бірімен байланысқа түсуі керек, екі жағынан да емес;)

Мысалға:

  • статистикалық модуль белгілі бір реленің қашан қосылатынын және өшетінін білуі керек.
  • түймені басу дисплей мазмұнын өзгертуі керек, сонымен қатар процессордың көптеген циклдарын тұтынатын қызметтерді тоқтатуы керек, мысалы, сенсордан температураны оқу,
  • Біраз уақыттан кейін температура көрсеткішін жаңарту қажет.
  • және тағы басқа….

Әрбір модуль хабарлама шинасына қосылған және белгілі бір оқиғаларға тіркеле алады және кез келген оқиғаларды шығара алады (бірінші диаграмма).

Екінші диаграммада біз батырманы басу арқылы оқиғаның барысын көре аламыз.

Кейбір компоненттерде мезгіл -мезгіл орындалатын міндеттер бар. Біз олардың сәйкес әдістерін негізгі циклден шақыра аламыз, өйткені бізде Message Bus бар, тек дұрыс оқиғаны тарату қажет (үшінші диаграмма)

6 -қадам: Libs

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

Ұсынылған: