Мазмуну:

Arduino негизделген термостат: 6 кадам
Arduino негизделген термостат: 6 кадам

Video: Arduino негизделген термостат: 6 кадам

Video: Arduino негизделген термостат: 6 кадам
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, Июль
Anonim
Ардуиного негизделген термостат
Ардуиного негизделген термостат
Ардуиного негизделген термостат
Ардуиного негизделген термостат
Ардуиного негизделген термостат
Ардуиного негизделген термостат

Бул жолу биз Arduino, температура сенсорунун жана реленин негизинде термостат курабыз. Githubдан таба аласыз.

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

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

Бүт конфигурация Config.h сакталат. Сиз PIN'лерди көзөмөлдөө релесин, окуу температурасын, босоголорду же убакытты өзгөртө аласыз.

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

Келгиле, биз 3 релеге ээ болууну каалайбыз:

  • ID: 0, PIN: 1, Температуранын белгиленген чекити: 20
  • ID: 1, PIN: 10, Температуранын белгиленген чекити: 30
  • ID: 2, PIN: 11, Температуранын белгиленген чекити: 40

Адегенде сиз тандаган PIN мурунтан эле алынбаганына ынанууңуз керек. Бардык казыктарды Config.h сайтынан табууга болот, алар DIG_PIN менен башталган өзгөрмөлөр менен аныкталат.

Сиз Config.h түзөтүп, PIN коддорду, чектерди жана реле көлөмүн конфигурациялашыңыз керек. Албетте, кээ бир касиеттер мурунтан эле бар, андыктан аларды жөн гана түзөтүү керек.

const статикалык uint8_t DIG_PIN_RELAY_0 = 1; const статикалык 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 -кадам: Hysteresis Controller

Бул жогорудагы мисалда тандалган, анын кошумча конфигурациялары аз:

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 Controller

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

Бул өнүккөн тема. Мындай контроллерди ишке ашыруу - жөнөкөй иш, туура амплитудалык орнотууларды табуу - бул башка окуя.

PID контроллерин колдонуу үчүн initRelayHysteresisController (…..) initRelayPiDController (….) Кылып өзгөртүшүңүз керек жана ага туура орнотууларды табышыңыз керек. Адаттагыдай эле аларды Config.h сайтынан таба аласыз

Мен Javaда жөнөкөй тренажерду ишке киргиздим, натыйжада элестетүү мүмкүн. Бул папкадан табууга болот: pidsimulator. Below сиз симуляцияларды көрө аласыз эки контролер PID a P. PID туруктуу эмес, анткени мен туура баалуулуктарды табуу үчүн эч кандай татаал алгоритмди колдонгон жокмун.

Эки участокто тең керектүү температура 30 (көк) коюлган. Учурдагы температура окуу сызыгын көрсөтөт. Эстафета күйүк жана өчүк эки абалга ээ. Иштетилгенде температура 1,5 төмөндөйт, ал өчүрүлгөндө 0,5ке көтөрүлөт.

5 -кадам: Билдирүү автобусу

Билдирүү автобусу
Билдирүү автобусу
Билдирүү автобусу
Билдирүү автобусу
Билдирүү автобусу
Билдирүү автобусу
Билдирүү автобусу
Билдирүү автобусу

Ар кандай программалык модулдар бири -бири менен байланышта болушу керек, үмүт эки жол менен эмес;)

Мисалы:

  • статистикалык модуль белгилүү бир реле качан өчүп -күйөрүн билиши керек,
  • баскычты басуу дисплейдин мазмунун өзгөртүшү керек, ошондой эле көптөгөн CPU циклдерин керектөөчү кызматтарды токтотушу керек, мисалы сенсордон температураны окуу,
  • бир аз убакыттан кийин температуранын көрсөткүчү жаңыртылышы керек,
  • жана башка….

Ар бир модуль Message Bus менен туташып турат жана белгилүү бир окуяларга каттала алат жана ар кандай окуяларды чыгара алат (биринчи диаграмма).

Экинчи диаграммада биз баскычты басуу менен окуялардын агымын көрө алабыз.

Кээ бир компоненттер мезгил -мезгили менен аткарылышы керек болгон кээ бир милдеттерге ээ. Биз алардын тиешелүү ыкмаларын негизги циклден чакыра алмакпыз, анткени бизде Message Bus болгону үчүн туура окуяны жайылтуу гана керек (үчүнчү диаграмма)

6 -кадам: Libs

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

Сунушталууда: