Недавно я начал изучать программирование микроконтроллера Arduino. После того, как я выполнил несколько базовых упражнений (мигание светодиодом, работа с дискретными и аналоговыми входами, вывод информации на ЖК дисплей и т.д.) мне захотелось сделать какое нибудь полезное устройство для дома.
Я решил сделать измеритель температуры и влажности в комнате, с индикацией параметров на ЖК дисплее. Также я сделал адаптивную подсветку дисплея, которая меняет яркость в зависимости от уровня освещенности в комнате. Это позволяет уменьшить энергопотребление устройства, и тем самым увеличить срок службы батарейки.
В проекте я использовал следующие комплектующие:
1. Плата Arduino Uno

2. Дисплей LCD1602 c модулем поддержки протокола I2C. Для того чтобы уменьшить число проводов и упростить подключение дисплея, я решил подключать его через протокол I2C, для этого я к LCD дисплею припаял специальный модуль преобразователь.
"
3. Датчик температуры и влажности DHT11. Он позволяет определять влажность от 20-80% и температуру от 0-50˚С. Датчик имеет 4 вывода, но используется только 3. Между выводом питания и выводом данных должен быть установлен резистор 10кОм. Я использовал уже готовый датчик, смонтированный на плате, с подключенным резистором, поэтому можно смело подключать его к плате Arduino.
"
4. Фоторезистор. Подключается к плате Arduino с подтяжкой к GND, через резистор 10кОм.

Схема подключения следующая:

Фоторезистор подключается к аналоговому входу А0 платы Arduino. Линия данных датчика DHT11 подключается к дискретному выводу 2, вывод питания подключается к +5В Arduino, соответственно вывод GND подключаем в земле платы Arduino. LCD дисплей подключается к питанию платы, вывод SDA подключается к А4, вывод SCL к А5. Линия управления яркостью подсветки подключается к выводу 9, на котором формируется ШИМ сигнал.
Ниже представлен исходный код:
Скомпилировав данный код, получаем вот такое работающее устройство:

В дальнейшем планирую сделать еще какие-нибудь интересные и более сложные устройства на Arduino.
Также я сделал видеоролик, где показал как работает устройство:
Я решил сделать измеритель температуры и влажности в комнате, с индикацией параметров на ЖК дисплее. Также я сделал адаптивную подсветку дисплея, которая меняет яркость в зависимости от уровня освещенности в комнате. Это позволяет уменьшить энергопотребление устройства, и тем самым увеличить срок службы батарейки.
В проекте я использовал следующие комплектующие:
1. Плата Arduino Uno

2. Дисплей LCD1602 c модулем поддержки протокола I2C. Для того чтобы уменьшить число проводов и упростить подключение дисплея, я решил подключать его через протокол I2C, для этого я к LCD дисплею припаял специальный модуль преобразователь.
"3. Датчик температуры и влажности DHT11. Он позволяет определять влажность от 20-80% и температуру от 0-50˚С. Датчик имеет 4 вывода, но используется только 3. Между выводом питания и выводом данных должен быть установлен резистор 10кОм. Я использовал уже готовый датчик, смонтированный на плате, с подключенным резистором, поэтому можно смело подключать его к плате Arduino.
"4. Фоторезистор. Подключается к плате Arduino с подтяжкой к GND, через резистор 10кОм.

Схема подключения следующая:

Фоторезистор подключается к аналоговому входу А0 платы Arduino. Линия данных датчика DHT11 подключается к дискретному выводу 2, вывод питания подключается к +5В Arduino, соответственно вывод GND подключаем в земле платы Arduino. LCD дисплей подключается к питанию платы, вывод SDA подключается к А4, вывод SCL к А5. Линия управления яркостью подсветки подключается к выводу 9, на котором формируется ШИМ сигнал.
Ниже представлен исходный код:
#include "DHT.h" //Подключаем библиотеку для работы с датчиком DHT11 #include "Wire.h" #include "LiquidCrystal_I2C.h" //Подключаем библиотеки для работы с LCD дисплеем int LD; //Объявляем вспомогательную переменную #define DHTPIN 2 //Задаем PIN для подключения датчика DHT11 #define LED 9 //Задаем PIN который выдает ШИМ-сигнал #define FOTO 0 //Задаем PIN для подключения фоторезистора DHT dht(DHTPIN, DHT11); //Инициализируем датчик DHT11 LiquidCrystal_I2C lcd(0x27,16,2); //Инициализируем дисплей void setup() { pinMode(LED, OUTPUT); //Настраиваем PIN LED как выход dht.begin(); //Включаем датчик температуры и влажности lcd.init(); //Включаем LCD дисплей lcd.backlight(); } int light(int svet) //Функция преобразования { //значения с датчика освещенности if (svet<25) //в значение ШИМ-сигнала { return 255; } if(svet>1020) { return 2; } else { int L=(int)(-0.2*svet+261.262); return L; } } void loop() { int f = analogRead(FOTO); //Считываем значение с датчика освещенности LD=light(f); delay(2000); analogWrite(LED, LD); //Устанавливаем значение ШИМ float h=dht.readHumidity(); //Считываем значение влажности float t=dht.readTemperature(); //Считываем значение температуры lcd.setCursor(0,0); //Устанавливаем курсор в нулевую позицию верхней строки lcd.print("Temp "); //Отображаем значение температуры lcd.print(t); lcd.setCursor(0,1); //Помещаем курсор в нулевую позицию нижней строки lcd.print("Hum "); //Отображаем значение влажности lcd.print(h); }
Скомпилировав данный код, получаем вот такое работающее устройство:

В дальнейшем планирую сделать еще какие-нибудь интересные и более сложные устройства на Arduino.
Также я сделал видеоролик, где показал как работает устройство:
