Arduino и RGB – лента. Изменение цвета ленты в зависимости от влажности

Пример самодельного корпуса Arduino UNO R3 на борту с дисплеем LCD 1602

В прошлый раз был рассмотрен способ подключения светодиодной ленты к ардуино через драйвер L298. Управление цветом осуществлялось программно — функция Random. Теперь пришла пора разобраться, как управлять цветом светодиодной ленты на основании показаний датчика температуры и влажности DHT 11.

За основу взят пример подключения светодиодной ленты через драйвер L298. Плюсом ко всему в пример добавлен дисплей LCD 1602, который будет отображать показания датчика DHT 11.

Для проекта понадобятся следующие элементы Ардуино:

  1. Плата Ардуино УНО.
  2. Дисплей LCD 1602 + I2C.
  3. Датчик температуры и влажности DHT
  4. Светодиодная лента.
  5. Драйвер L298.
  6. Блок питания 9-12В.
  7. Корпус для ардуино и дисплея (по желанию).

Первым делом посмотрим на принципиальную схему (рис. 1). На ней можно увидеть, как нужно подключить все вышеперечисленные элементы. В сборке схемы и подключении ничего сложного нет, однако стоит упомянуть об одном нюансе, о котором большинство людей забывают, и в итоге получают неправильные результаты работы LED – ленты с Ардуино.

Схема управления светодиодной лентой через драйвер L298 на основании показаний датчика DHT 11
Рисунок 1. Принципиальная схема подключения Arduino и светодиодной ленты с датчиком DHT 11

Во избежание некорректной работы светодиодной ленты (мерцание, несоответствие цветов, неполное свечение и т.д.), питание всей схемы необходимо сделать общим, т.е. объединить контакты GND (земля) контроллера Ардуино и драйвера L298 (светодиодной ленты). Как это сделать, можно посмотреть на схеме.

 

Пару слов о подключении датчика влажности. Если покупать голый DHT 11, без обвязки, то между первым и вторым контактами, 5В и Data, соответственно, нужно впаять резистор номиналом 5-10 кОм. Диапазон измерения температуры и влажности написан на обратной стороне корпуса датчика DHT 11. Температура: 0-50 градусов по Цельсию. Влажность: 0-80%.

Схема подключения DHT 11 с сопротивлением
Рисунок 2. Правильное подключение датчика влажности DHT 11

После сборки всех элементов проекта по схеме, необходимо написать программный код, который заставит все это работать так, как нам нужно. А нужно нам, чтобы светодиодная лента изменяла цвет в зависимости от показаний датчика DHT 11 (влажности).

Для программирования датчика DHT 11 понадобится дополнительная библиотека.

Код программы Arduino и RGB – лента. Изменение цвета ленты в зависимости от влажности.

#include  
#include  //библиотека для работы с дисплеем LCD 1602
#include  //библиотека для работы с датчиком влажности и температуры DHT 11
 
int chk; //переменная будет хранить все данные с датчика DHT11
int hum; //переменная будет хранить показания влажности с датчика DHT11
 
dht11 DHT; //объект типа DHT
#define DHT11_PIN 4 //контакт Data датчика DHT11 подключен на вход 4
 
#define LED_R 9    // пин для канала R
#define LED_G 10    // пин для канала G
#define LED_B 11    // пин для канала B
 
//переменные будут хранить значения цветов
//при смешивании всех трех цветов будет получаться необходимый цвет
int led_r=0, led_g=0, led_b=0;
 
//объявление объекта дисплея с адресом 0х27 
//не забываем использовать в проекте дисплей через плату I2C
LiquidCrystal_I2C lcd(0x27,16,2);
 
void setup()
{
  //создание дисплея
  lcd.init();                 
  lcd.backlight();
 
  // объявляем пины выходами
  pinMode(LED_R, OUTPUT);
  pinMode(LED_G, OUTPUT);
  pinMode(LED_B, OUTPUT);
}
 
void loop()
{  
  chk = DHT.read(DHT11_PIN);//читаем данные с датчика DHT11
 
  //вывод данных на дисплей
  lcd.print("Temp: ");
  lcd.print(DHT.temperature, 1);
  lcd.print(" C");
  lcd.setCursor(0,1);
 
  lcd.print("Hum: ");
  lcd.print(DHT.humidity, 1);
  lcd.print(" %");
 
  delay(1500); //для корректной работы датчика нужна задержка на опрос
 
  lcd.clear(); 
 
  hum = DHT.humidity; //берем показания влажности
 
  //в диапозоне от 19 до 30% влажности выдать зеленый цвет
  if ((hum >= 19) && (hum <= 30)) { led_r = 1; led_g = 255; led_b = 1; } //в диапозоне от 31 до 40% влажности выдать красный цвет if ((hum >= 31) && (hum <= 40)) { led_r = 255; led_g = 1; led_b = 1; } //в диапозоне от 41 до 49% влажности выдать синий цвет if ((hum >= 41) && (hum <= 49))
  {   
    led_r = 1;
    led_g = 1;
    led_b = 255;
  }
 
  // подача сигналов цвета на выхода
  analogWrite(LED_R, led_r);
  analogWrite(LED_G, led_g);
  analogWrite(LED_B, led_b); 
}

Метки: Метки