Съдържание:
- Стъпка 1: Конфигурация
- Стъпка 2: Конфигуриране на релета
- Стъпка 3: Контролер за хистерезис
- Стъпка 4: PID контролер
- Стъпка 5: Шина за съобщения
- Стъпка 6: Устни
Видео: Термостат на базата на Arduino: 6 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:54
Този път ще изградим термостат на базата на 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 контролер, трябва да промените 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
Препоръчано:
Направи си сам лаборатория - HD центрофуга на базата на Arduino: 3 стъпки
DIY Lab - HD центрофуга Arduino Базирана: PT // Construimos uma centrífuga utilizando um HD velho com controle de velocidade baseado em Arduino. BG // Изградихме центрофуга, използвайки стар HD с контрол на скоростта, базиран на Arduino
Автоматизиран модел на железопътна схема, управляващ два влака (V2.0) - На базата на Arduino: 15 стъпки (със снимки)
Автоматизиран модел на железопътна схема, управляващ два влака (V2.0) | На базата на Arduino: Автоматизирането на моделите на железопътни оформления с помощта на микроконтролери Arduino е чудесен начин за обединяване на микроконтролери, програмиране и моделиране на железопътни линии в едно хоби. Налични са куп проекти за автономно управление на влак по модел railroa
Инфрачервен термометър на базата на Arduino - Инфрачервен термометър, използващ Arduino: 4 стъпки
Инфрачервен термометър на базата на Arduino | Инфрачервен термометър, използващ Arduino: Здравейте, момчета, в тази инструкция ще направим безконтактен термометър, използващ arduino. Тъй като понякога температурата на течността/твърдото вещество е твърде висока или твърде ниска, а след това е трудно да се установи контакт с нея и да се прочете температура тогава в този пейзаж
Индукционен металдетектор на базата на Arduino на базата на DIY: 5 стъпки
DIY Ардуино базиран импулсен метален детектор: Това е сравнително прост металдетектор с отлични характеристики
Първи стъпки с кодиране на базата на браузър MBlock за HyperDuino: 3 стъпки
Първи стъпки с кодиране на базата на браузър MBlock за HyperDuino: Добре дошли в уеб базирания урок на mBlock с HyperDuino. Това ще ви покаже как да настроите mBlock и да качите кода във вашия HyperDuino. Това също ще ви покаже как да създадете основен код за интелигентна кола. За да започнете, нека веднага влезем