Съдържание:

Термостат на базата на Arduino: 6 стъпки
Термостат на базата на Arduino: 6 стъпки

Видео: Термостат на базата на Arduino: 6 стъпки

Видео: Термостат на базата на Arduino: 6 стъпки
Видео: Как использовать термопару MAX6675 типа k с Arduino 2024, Юли
Anonim
Термостат на базата на Arduino
Термостат на базата на Arduino
Термостат на базата на Arduino
Термостат на базата на Arduino
Термостат на базата на Arduino
Термостат на базата на Arduino

Този път ще изградим термостат на базата на Arduino, температурен сензор и реле. Можете да намерите на github

Стъпка 1: Конфигурация

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

Цялата конфигурация се съхранява в Config.h. Можете да променяте ПИН кодове, управляващи релета, температура на четене, прагове или време.

Стъпка 2: Конфигуриране на релета

Да приемем, че бихме искали да имаме 3 релета:

  • ID: 0, PIN: 1, зададена температура: 20
  • ID: 1, PIN: 10, зададена температура: 30
  • ID: 2, PIN: 11, зададена температура: 40

Първо трябва да се уверите, че ПИН по ваш избор вече не е взет. Всички щифтове могат да бъдат намерени в Config.h, те са дефинирани от променливи, започващи с DIG_PIN.

Трябва да редактирате Config.h и да конфигурирате ПИН кодове, прагове и количество релета. Очевидно някои свойства вече съществуват, така че просто трябва да ги редактирате.

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;

Сега трябва да настроим релета и контролер, това се случва в 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 static uint32_t RELAY_DELAY_AFTER_SWITCH_MS = 300000; // 5 минути const static 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 (синьо). Текущата температура показва реда за четене. Релето има две състояния ON и OFF. Когато е активирана, температурата пада с 1,5, когато е деактивирана, тя се повишава с 0,5.

Стъпка 5: Шина за съобщения

Автобус за съобщения
Автобус за съобщения
Автобус за съобщения
Автобус за съобщения
Автобус за съобщения
Автобус за съобщения
Автобус за съобщения
Автобус за съобщения

Различните софтуерни модули трябва да комуникират помежду си, надявам се не и в двата начина;)

Например:

  • статистическият модул трябва да знае кога дадено реле се включва и изключва,
  • натискането на бутон трябва да промени съдържанието на дисплея и също така трябва да спре услугите, които биха консумирали много цикли на процесора, например отчитане на температурата от сензора,
  • след известно време отчитането на температурата трябва да бъде подновено,
  • и така нататък….

Всеки модул е свързан към Message Bus и може да се регистрира за конкретни събития и може да произвежда всякакви събития (първа диаграма).

На втората диаграма можем да видим потока на събитията при натискане на бутона.

Някои компоненти имат някои задачи, които трябва да се изпълняват периодично. Можем да извикаме съответните им методи от основния цикъл, тъй като имаме Message Bus, необходимо е само да разпространим правилното събитие (трета диаграма)

Стъпка 6: Устни

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

Препоръчано: