Ежедневный радиожурнал со звуком. Иногда с юмором. Всегда с картинками

Доставка квітів Чернігів

31.05.2022

"Arduino" - це дуже просто 7

Ось ми і отримали основу свого пристрою – вимірювальний датчик. Тепер залишилося лише контролювати величину нашої змінної та реагувати відповідно до змін. Наприклад, ми вважаємо величину 23 градуси Цельсія мінімально допустимою для скалярій. Значить як тільки температура води впаде до 23,00 градусів, настав час включати нагрівач.  Це означає, що на якийсь пин (OUT) Arduino потрібно подати низький рівень, щоб включилося одне з реле на 2-х релейній платі. На них є готові вузли управління реле і навіть світлодіоди, що індикують спрацьовування реле. Достатньо з'єднати дві плати з'єднувальними проводами і все запрацює. Підключити "сухі контакти" реле до виконавчого пристрою не складе труднощів. Так само ці контакти можна підключити до точок управління домашнього електричного котла і таким чином стабілізувати температуру в будинку.  Вибираємо для керування реле нагрівача цифровий пін 9. Тому на момент включення ми прописуємо на цей пін низький рівень.

else if(sensors.getTempCByIndex(1)<23.00)
//Если температура МЕНЬШЕ заданной включен нагреватель
{
digitalWrite(9, LOW);
digitalWrite(11, HIGH);
lcd.setCursor(0, 1);
lcd.print("Aqua");
lcd.setCursor(5, 1);
lcd.print(sensors.getTempCByIndex(1));
lcd.setCursor(10, 1);
lcd.print(" Heat");
}
І навпаки, якщо вода розігрівається до температури 23,50 градусів, значить настав час включати вентилятор. Тоді ми вибираємо для управління вентилятором пін 11 (OUT) та ініціюємо низький рівень на піні 11. Так як він з'єднаний з іншим реле на платі реле, контакти цього реле включають вентилятор і вода починає охолоджуватися.

if (sensors.getTempCByIndex(1)>23.50) //Если температура БОЛЬШЕ заданной включен вентилятор
{
  lcd.setCursor(10, 1);
  lcd.print("  Cool");
  digitalWrite(11, LOW);
  digitalWrite(9, HIGH);
  lcd.setCursor(5, 1);
  lcd.print(sensors.getTempCByIndex(1));
}
А якщо температура перебуває у заданому інтервалі, від 23,00 до 23,50 градусів, робити нічого не потрібно. Чекаємо поки що температура внаслідок впливу навколишнього середовища або нагріється або охолоне. Ми вибрали для контролю досить широкий інтервал температури. Але за бажанням можна вказати інтервал набагато вуже, наприклад, в діапазоні від 24 до 25 градусів. Або ще менше: вiд 24,5 до 24,8. Але точності більш ніж 0.06 градуси ми отримати не зможемо через недосконалість самого датчика. Втім, риби не такі вибагливі, тому вони будуть перебувати в доброму гуморі весь час. Для того, щоб прилад не "клацав" кожних 5 секунд можливо ввести затримку  мiж вимiрюваннями ( в милисекундах).

else // ничего не происходит
{
digitalWrite(11, HIGH);
digitalWrite(9, HIGH);
lcd.setCursor(11, 1);
lcd.print(" ");
}

Упродовж теми давайте додамо екран і другий датчик температури для того щоб мати ще й кімнатний термометр. Додаємо код підключення дворядкового дисплея.  Тепер ми можемо виводити на екран температуру води, температуру в кімнаті та індикувати стан приладу: очікування, нагрівання або охолодження.  Як підключити LCD дисплей дивись у попередньому посту. А на новій схемі підключення можна побачити з'єднання двох датчиків температури та двох реле.


Далi новий код скетча.

#include <LiquidCrystal.h>
#include <OneWire.h>
#include <DallasTemperature.h>// Инициализация библиотеки термодатчиков.
#define ONE_WIRE_BUS 10// Подключение цифрового вывода датчика к 10-му пину Ардуино.
#define ONE_WIRE_BUS_2 11// Подключение цифрового вывода датчика к 11-му пину Ардуино.
OneWire oneWire(ONE_WIRE_BUS);// Запуск интерфейса OneWire для подключения OneWire устройств первой линии.
OneWire oneWire_2(ONE_WIRE_BUS_2);// Запуск интерфейса OneWire для подключения OneWire устройств второй линии.
DallasTemperature sensors(&oneWire);// Указание, что устройством oneWire является термодатчик от Dallas Temperature.
DallasTemperature sensors2(&oneWire_2);
 const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
float gist = 0.15;

void setup()  {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  pinMode(11, OUTPUT);
  digitalWrite(11, HIGH);    
    pinMode(9, OUTPUT);
  digitalWrite(9, HIGH);   
}

void loop(void)  {
sensors.begin(); // Запуск 1 линии сенсоров.
//sensors2.begin();} // Запуск 2 линии сенсоров если нужно.
sensors.requestTemperatures(); // Команда опроса температуры первой шины.
sensors2.requestTemperatures(); // Команда опроса температуры второй шины, если она есть.
                                                                                                                                                  
   lcd.setCursor(0, 0);
   lcd.print("Room");
   lcd.setCursor(5,0);
   lcd.print(sensors.getTempCByIndex(0));
   lcd.setCursor(0, 1);
  lcd.print("Aqua");
  lcd.setCursor(5, 1);
   lcd.print(sensors.getTempCByIndex(1));

if (sensors.getTempCByIndex(1)>23.50) //Если температура БОЛЬШЕ заданной включен //////вентилятор
  {
  lcd.setCursor(10, 1);
  lcd.print("  Cool");
  digitalWrite(11, LOW);
  digitalWrite(9, HIGH);
  lcd.setCursor(5, 1);
  lcd.print(sensors.getTempCByIndex(1));
 delay (5000);
 } 

else if(sensors.getTempCByIndex(1)<23.00)   //Если температура МЕНЬШЕ заданной включен нагреватель
{
digitalWrite(9, LOW); 
digitalWrite(11, HIGH);
lcd.setCursor(0, 1);
lcd.print("Aqua");
lcd.setCursor(5, 1);
lcd.print(sensors.getTempCByIndex(1));
lcd.setCursor(10, 1);
 lcd.print("  Heat");
 delay (5000);
 }
 
else   // ничего не происходит
{
  digitalWrite(11, HIGH);
    digitalWrite(9, HIGH);
  lcd.setCursor(11, 1);
  lcd.print("     ");
}

}

І на завершення новий видосик який показує, що наш пристрій працює згідно з алгоритмом що ми придумали та реально може управляти кондиціонером у акваріумі. Ці прості прийоми можна використовувати для своїх завдань. Може ближче до радіо, ніж до акуаріуму.
© Copyright 2011-2021 UY2RA,    All rights reserved.    Все права защищены.    Пожалуйста уважайте их. Использование материалов c этого сайта разрешается только с указанием АКТИВНОЙ ссылки на этот сайт.

FREE & OPEN UKRAINIAN HAM  RADIO  BANNERS NET