● 6.4. Подключение блока реле к модулю NodeMCU

Опубликовано: 23.01.2018

Теперь рассмотрим подключение Relay Shield к модулю NodeMCU.  Relay Shield мы будем использовать также – для включения/выключения света для освещения растений, вентилятора, насоса для полива растений. Светом будем управлять с помощью кнопки, включения/выключения вентилятора и помпы будет осуществляться в зависимости от значений температуры воздуха (вентилятор) и влажности почвы (мембранный вакуумный насос.
Схема соединений представлена на рис. 6.7.
 


Рис. 6.7. Схема подключений Relay Shield к модулю Node MCU.

Загрузим на плату Arduino MEGA скетч включения/выключения вентилятора и насоса в зависимости от данных температуры воздуха и влажности почвы, а также включения/выключения света с помощью кнопки.
Необходимо внести изменения в существующий скетч. Во первых добавляем массив пинов для подключения реле (пусть их будет 8, с запасом под расширения):

// массив для хранения данных состояний реле
int datarelays[]={0,0,0,0,0,0,0,0};

Т.к. реле, также как и светодиоды подключены через I2C расширитель выводов MCP23017 в setup производим настройку портов микросхемы MCP23017 (процедура ini_mcp23017().

void ini_mcp23017() {
  Wire.beginTransmission(0x20);  // i2c – адрес (A0-0,A1-0,A2-0)
  Wire.write(0x00); // IODIRA register
  Wire.write(0x00); // настроить PORT A как output (для светодиодов)
  Wire.endTransmission();
  Wire.beginTransmission(0x20);  
  Wire.write(0x01); // IODIRB register
  Wire.write(0x00); // настроить PORT B как output (для реле)
  Wire.endTransmission();
}



Необходимо добавить и константу в файл defines.h (пин подключения кнопки включения света).
#define BUTTONLIGHTPIN1         40
И переменные состояния кнопки
int lastButtons1=0;
int currentButtons1=0;
Теперь в основной файл скетча в цикл loop() добавим код включения/выключения реле, управляющих вентилятором и помпой в зависимости от показаний датчиков температуры DS18B20 и увлажненности почвы SoilMoisture и включения/выключения света по нажатию кнопки.
Содержимое данного фрагмента скетча представлено в листинге 6.1.
Листинг 6.4

void loop() {   
   …………
   // установка значений реле
   // вентилятор
   if(aktivesensors[1]==1 && datasensors[1]<999 
         && datasensors[1]>LIMIT_DS18B20MAX) {
      datarelays[2]=1;
      set_status_relays();
   }
   else {
      datarelays[2]=0;
      set_status_relays();
   }
   // помпа
   if(aktivesensors[2]==1 && datasensors[2]<999 
         && datasensors[1]>MAXVALUESOILMOISTURE 900) {
      datarelays[1]=1;
      set_status_relays();
   }
   else {
      datarelays[1]=0;
      set_status_relays();
   }
   // нажатие кнопки включения/выключения света
   currentButtons1 = debounce(lastButtons1, BUTTONLIGHTPIN1);
   if (lastButtons1 == 0 && currentButtons1 == 1) // если нажатие...
     {
     // изменить состояние реле
     datarelays[0]=1- datarelays[0];
     // вывести в порты MCP23017
     set_status_relays();
     }
   lastButtons1 = currentButtons1;
……..
}



Функция set_status_relays() осуществляет включение/выключение реле, установкой необходимых уровней на выходах порта B микросхемы MCP23017.

// управление реле
void set_status_relays() {
  int relays=0;
  for(int i=0;i<7;i++)
     relays=relays +( datarelays[i]<<i);
  // записать данные в PORT B
  Wire.beginTransmission(0x20);
  Wire.write(0x13); // address PORT B
  Wire.write(relays);    // PORT B
  Wire.endTransmission();
  delay(100); // пауза
}



Функция сглаживания дребезга debounce() принимает в качестве аргумента предыдущее состояние кнопки и выдает фактическое.
int debounce(int last,int pin1)

int debounce(int last,int pin1)
  {
  int current = digitalRead(pin1);   // Считать состояние кнопки
  if (last != current)               // если изменилось...
    {
    delay(5);                       // ждем 5мс
    current = digitalRead(pin1);   // считываем состояние кнопки
    return current;            // возвращаем состояние кнопки
    }
  }



После загрузки скетча на плату Arduino у Вас будет обеспечено автоматическое включение/выключение вентилятора и автоматический полив растений, а также включение/выключение света по нажатию клавиши.
Скачать данный скетч можно на сайте www.arduino-kit.ru по ссылке.


Главное меню

Каталог

Полезные ссылки

Цена
от
до