В данном Arduino уроке подключим модуль освещённости к Arduino, и научимся настраивать датчик для работы при различной освещённости.
В основе датчика лежит светочувствительный полупроводниковый прибор – фоторезистор. Что такое фоторезистор, и как его можно подключить к Arduino, рассматривали в предыдущем уроке: «Подключение фоторезистора к Arduino».
В чем преимущество модуля освещённости, и как его использовать в Arduino проектах, рассмотрим в данном уроке.
Два вида моделей освещённости
При покупке модуля освещённости, нужно определиться с вашей задачей. Что вы планируете собрать, и как должен работать модуль освещённости. Это связано с тем, что модули освещённости бывают разные. На фото ниже приведены 2 модуля освещённости.
Аналоговый модуль освещённости KY-018
Arduino модуль освещённости KY-018 черного цвета. Этот модуль состоит из фоторезистора и линейного резистора 10 кОм. Сопротивление фоторезистора будет уменьшаться при наличии света, и увеличиваться при его отсутствии. Выход аналоговый, и он определяет интенсивность света.
Схема подключения модуля освещённости KY-018 к Arduino
На модуль подается питание 5 Вольт, а в зависимости от освещенности в помещении, на выходе модуля (S) меняется напряжение от 0 до 5 Вольт. При подаче этого сигнала на аналоговый вход микроконтроллера, Arduino преобразует сигнал, при помощи АЦП, в диапазоне значений от 0 до 1023.
Скетч для модуля освещённости KY-018
Так как у датчика выход аналоговый, как и у фоторезистора, код можно взять из предыдущего урока без изменения. Например, скетч Светильника с автоматическим включением.
byte sensorPin = A0;
byte ledPin = 3;
// Присваиваем имя для цифрового значения аналогового входа A0
// int округляет значения
int value = 0;
void setup() {
// Пин 3 со светодиодом будет выходом (англ. «output»)
pinMode(ledPin, OUTPUT);
// Пин A0 с фоторезистором будет входом (англ. «input»)
pinMode(sensorPin, INPUT);
}
void loop() {
// Считываем значение с фоторезистора на аналоговом входе A0
value = analogRead(sensorPin);
// value значение в диапозоне от 0 до 1023
// Полученные значения на аналоговом входе A0 делим на 4
//чтобы уложиться в диопозон от 0 до 255
data = value / 4;
// Включаем светодиод с полученной ранее мощностью — от 0 до 255
analogWrite(ledPin, data);
}
Цифровой датчик освещённости на LM393
Модуль синего цвета устроен по-другому, и подключается уже к цифровому пину Arduino, и на выходе формирует логическую единицу, либо логический ноль. Давайте рассмотрим данный модуль и поговорим подробнее.
Модуль освещенности на LM393
Модуль освещенности на LM393 используется для измерения интенсивности света в различных устройствах, таких как: автоматизация света (включение света ночью), в роботах (определение дня или ночи) и приборах, контролирующих уровень освещенности. Измерение осуществляется с помощью светочувствительного элемента (фоторезистора), который меняет сопротивление в зависимости от освещенности.
Технические параметры
- Напряжение питания: 3.3 В. — 5.5 В.
- Потребляемый ток: 10 мА.
- Цифровой выход: TTL (лог 1 или лог 0)
- Аналоговый выход: 0 В. … Vcc
- Диаметр монтажного отверстия: 2.5 мм.
- Выходной ток: 15 мА.
- Габариты: 42мм. х 15мм. х 8мм.
Общие сведения датчик освещённости на LM393
Существуют два модуля на базе LM393, их визуальное отличие только в количестве выводов (3 pin и 4 pin), дополнительный вывод добавлен для снятия прямых показаний с фоторезистора (аналоговый выход), по аналогии работы модуля KY-018.
Рассмотрим четырех контактный вариант модуля. У этих двух модулей измерение осуществляется с помощью фоторезистора, который изменяет напряжение в цепи, в зависимости от количества света, попадающего на него.
Чтобы представить, как свет будет влиять на фоторезистор, приведу краткую таблицу.
Модуль освещенности с четырьмя выводами содержит два выходных контакта, аналоговый и цифровой, и два контакта для подключения питания. Для считывания аналогово сигнала предусмотрен отдельный вывод «AO», с которого можно считать показания напряжения с 0 В … 3.
3 В или 5 В, в зависимости от используемого источника питания. Цифровой вывод DO, устанавливается в лог «0» или лог «1», в зависимости от яркости, чувствительность выхода можно регулировать с помощью поворотного потенциометра.
Выходной ток цифрового выхода способен выдать более 15 мА, что очень упрощает использование модуля, и дает возможность использовать его, минуя контроллер Arduino, и подключая его напрямую к входу одноканального реле, или одному из входов двухканального реле.
Принципиальная схема модуля освещенности на LM393 с 3 pin и 4 pin, показана ниже.
Принципиальная схема модуля освещенности на LM393 с 4 pin.
Принципиальная схема модуля освещенности на LM393 с 3 pin.
Теперь, как же работает схема. Фоторезистор показан Foto (IN). Основная микросхема модуля — это компаратор LM393 (U1), который производит сравнение уровней напряжения на входах INA- и INA+.
Чувствительность порога срабатывания задается с помощью потенциометра R2, и, в результате сравнений, на выходе D0, микросхемы U1, формируется лог «0», или лог «2», который поступает на контакт D0 разъема J1.
Назначение J1 (в исполнении 4 pin)
- VCC — «+» питание модуля
- GND — «-» питание модуля
- D0 — цифровой выход
- A0 -аналоговый выход
Назначение J1 (в исполнении 3 pin)
- VCC — «+» питание модуля
- GND — «-» питание модуля
- D0 — цифровой выход
Подключение модуля освещенности к Arduino UNO
Подключение модуля освещенности к Arduino NANO
Необходимые детали:
- Arduino UNO или Arduino NANO
- Модуль освещенности, LM393
- Провод DuPont, 2,54 мм.
- Кабель USB 2.0
Подключение:
В данном примере буду использовать модуль освещенности LM393, 3 pin, и Arduino UNO, все данные будут передаваться в «Мониторинг порта».
Схема не сложная, необходимо всего три провода, сначала подключаем D0 к 2 цифровому пину Arduino, осталось подключить питание GND к GND и VCC к 5V (можно запитать и от 3.
3В), схема собрана, теперь надо подготовить программную часть.
Запускаем среду разработки и загружаем данный скетч, затем открываем мониторинг порта.
int pinD0 = A1; // Пин к которому подключен D0
// Присваиваем имя для порта 9 со светодиодом
#define LED 13
void setup()
{
// Пин 9 со светодиодом будет выходом (англ. «output»)
pinMode(LED, OUTPUT);
pinMode (pinD0, INPUT); // Установим вывод A1 как вход
Serial.begin (9600); // Задаем скорость передачи данных
}
void loop()
{
int xD0; // Создаем переменные
xD0 = digitalRead (pinD0); // считываем значение с порта pinD0
Serial.print(«Sensor: «); // Выводим текст
if (xD0 == HIGH) // Если xD0 равно «1»
{
Serial.println («ON»); // Выводим текст
digitalWrite(LED, HIGH);
}
else
{
Serial.println («OFF»); // Если xD0 равно «0»
digitalWrite(LED, LOW);
}
delay (500); // Ждем 500 мкс.
}
В мониторе порта можно увидеть, когда модуль освещенности срабатывает и отключается. При регулировке потенциометра на модуле можно настроить порог чувствительности срабатывания датчика.
Как видим, датчиков освещенности для Arduino проектов существует несколько. Возможно, это еще не все модификации. Поэтому, как и говорил в начале урока, необходимо определиться с вашей задачей, а уже после выбирать модуль освещенности.
- В этом уроке мы рассмотрели, как подключить модуля освещенности к Arduino, в предыдущем уроке мы подключили фоторезистор к Arduino.
- Появились вопросы или предложения, не стесняйся, пиши в комментарии!
- Не забывайте подписываться на канал Youtube и вступайте в группы в
Как подключить датчик освещённости BH1750 к Arduino
На этот раз подключим цифровой 16-битный датчик освещённости BH1750 (люксометр), реализованный на модуле GY-302, к Arduino.
Нам понадобится:
- Arduino UNO или иная совместимая плата;
- модуль GY-302 с цифровым датчиком освещённости BH1750;
- соединительные провода (вот хороший набор);
- персональный компьютер со средой разработки Arduino IDE.
1Схема подключения датчика BH1750 к Arduino
Рассмотрим модуль GY-302 с сенсором BH1750. Сенсор BH1750 представляет собой цифровой 16-битный цифровой датчик освещённости, что задаёт диапазон его измерений: от 1 до 65535 люкс.
Согласно техническому описанию, датчик BH1750 чувствителен к видимому свету и практически не подвержен влиянию инфракрасного излучения, т.е. реагирует примерно на тот же спектральный диапазон, что и человеческий глаз.
Вследствие этого такие сенсоры получили широкое распространение в современной электронной аппаратуре – мобильных устройствах, фото- и видеокамерах, в системах «умный дом» и многих других.
Подключение модуля производится по двухпроводному интерфейсу I2C, а питание осуществляется от +5 В. Интерфейс I2C в платах Arduino реализован на аналоговых пинах A4 и A5, которые отвечают за SDA (шина данных) и SCL (шина тактирования), соответственно. Вывод ADDR модуля GY-302 можно оставить не подключённым или соединить с землёй.
Схема подключения модуля GY-302 с датчиком BH1750 к Arduino
2 Библиотека и скетчдля датчика BH1750
Не будем углубляться в тонкости реализации интерфейса взаимодействия датчика BH1750 с Arduino, а воспользуемся готовой библиотекой для BH1750. Скачанный архив распакуем в директорию со средой разработки Arduino IDE/libraries/.
Напишем вот такой скетч и загрузим его в Arduino.
// подключаем библиотеку I2C: #include // подключаем библиотеку датчика BH1750: #include // объявляем объект lightMeter: BH1750 lightMeter; void setup() { Serial.begin(9600); //инициализация послед. порта lightMeter.begin(); //инициализация датчика BH1750 } void loop() { //считываем показания с BH1750: uint16_t lux = lightMeter.readLightLevel(); //выводим показания в послед. порт: Serial.println(String(lux) + » lx»); delay(100); //задержка 100 мсек }
В скетче мы каждые 100 мсек считываем с датчика BH1750 показания освещённости в люксах и выводим эти данные в последовательный порт.
3Сенсор BH1750 и Arduino в работе
Подключим датчик освещённости BH1750 к Arduino по приведённой выше схеме. Подключим Ардуино к компьютеру. Запустим среду разработки Arduino IDE и откроем монитор последовательного порта сочетанием клавиш Ctrl+Shift+M или через меню Инструменты. В мониторе последовательного порта побегут значения освещённости с нашего датчика BH1750.
Модуль GY-302 с датчиком BH1750 подключён к Arduino
Направьте датчик на источник света, потом закройте его от света, и вы увидите, как меняются показания.
4Взаимодействие с сенсором BH1750 в деталях
Давайте попробуем взаимодействовать с датчиком BH1750 без использования специальных библиотек. Для этого нам понадобится техническое описание на него, которое можно скачать по ссылке под статьёй.
Для управления датчиком мы должны по его I2C адресу записать код команды. Под управлением понимается изменение режима работы, изменение чувствительности, сброс и т.д. Команды можно передавать только по одной. Для чтения мы должны запросить из датчика 2 байта. Датчик хранит всегда значение в виде 16-битного числа, но его интерпретация зависит от текущей чувствительности.
Последовательность обмена с датчиком BH1750
На следующем рисунке представлен список команд, необходимых для работы с датчиком BH1750:
Команды управления датчиком BH1750
Как мы знаем, управление и обмен данными с датчиком BH1750 происходит по протоколу I2C. Мне нравится использовать для быстрых тестов общения с устройствами I2C и SPI отладочную плату с микросхемой FT2232H. Подключим SCL датчика к SCL микросхемы FT2232H, SDA датчика – к SDA и SDO микросхемы. Питание 5В возьмём с Arduino Nano, а все земли объединим.
Модуль с датчиком BH1750 управляется микросхемой FTDI
Теперь запустим программу SPI via FTDI и попробуем прочитать значения, хранящиеся в регистрах сенсора.
Чтение единичного показания датчика BH1750 с помощью FT2232H
Непрерывное считывание показаний датчика BH1750 с помощью FT2232H
Подключение датчика освещенности BH1750 к Arduino
Практически все современные смартфоны обладают функцией автоматического изменения яркости экрана в зависимости от условий освещенности окружающей среды. Аналогичная функция есть и во многих современных мониторах и телевизорах. Поэтому в данной статье мы рассмотрим подключение датчика освещенности BH1750 к Arduino. Значение освещенности мы будем показывать на экране ЖК дисплея 16×2.
Самым распространенным датчиком измерения освещенности у любителей платформы Arduino является фоторезистор – это аналоговый датчик, меняющий свое сопротивление в зависимости от интенсивности света (на нашем сайте вы можете посмотреть все проекты на основе фоторезисторов), однако точность его невысока и значение освещенности он выдает не в люксах. В отличие от него датчик BH1750 выдает значение освещенности как раз в люксах.
Люкс – (от лат. lux – свет; русское обозначение: лк, международное обозначение: lx) – единица измерения освещённости в Международной системе единиц (СИ). Люкс равен освещённости поверхности площадью 1 м² при световом потоке падающего на неё излучения, равном 1 лм (люмен).
Соответственно, справедливо равенство: 1 лк = 1 лм/м2. С другой стороны, люкс равен освещённости поверхности сферы радиусом 1 м, создаваемой точечным источником света, находящимся в её центре, сила света которого составляет 1 кд (Кандела).
Таким образом, с основными единицами СИ люкс связан соотношением: 1 лк = 1 кд/м2 (википедия).
Принципы работы датчика освещенности BH1750
BH1750 представляет собой цифровой датчик освещенности/люксметр, который можно использовать для автоматической регулировки яркости экранов смартфонов, мониторов, телевизоров и т.п. Также его можно применить для регулировки яркости свечения фар автомобиля. Внешний вид датчика BH1750 показан на следующем рисунке.
Датчик BH1750 работает по протоколу I2C, поэтому его легко подключить практически ко всем современным микроконтроллерам. Распиновка (назначение контактов) датчика освещенности BH1750 приведена в следующей таблице.
Контакт | Описание |
VCC | питание |
GND | земля (общий провод) |
SCL | линия тактирования (Serial CLock) |
SDA | линия данных (Serial Data) |
ADDR | выбор адреса |
В нашем проекте мы для подключения датчика по интерфейсу I2C будем использовать его контакты SDI и SDA.
Датчик BH1750 способен работать при величине питающего напряжения от 2.4V до 3.6V (обычно используется напряжение 3.0V) и во время своей работы потребляет ток 0.12mA. Датчик отличается широким диапазоном и высоким разрешением (65536 градаций освещенности — от 1 до 65536)
Необходимые компоненты
Схема проекта
Схема подключения датчика освещенности BH1750 к плате Arduino представлена на следующем рисунке.
Контакты SDA и SCL (интерфейс I2C) датчика BH1750 подключены к контактам A4 и A5 платы Arduino соответственно (они являются контактами интерфейса I2C в Arduino). Датчик запитывается от контакта 3.3V платы Arduino. Контакты данных ЖК дисплея D4-D7 подключены к контактам D2-D5 платы Arduino, а контакты RS и EN подключены к контактам D6 и D7 платы Arduino. Контакт V0 ЖК дисплея подключен к потенциометру, с помощью которого будет регулироваться яркость ЖК дисплея.
Внешний вид собранной конструкции проекта показан на следующем рисунке.
Объяснение программы для Arduino
Программа для взаимодействия платы Arduino с датчиком освещенности BH1750 достаточно проста. В этом проекте мы для взаимодействия с датчиком BH1750 использовали специальную библиотеку, но можно было бы обойтись и без нее. Полный текст программы приведен в конце статьи, здесь же мы кратко рассмотрим ее основные фрагменты.
Первым делом в программе мы подключим библиотеки для работы с протоколом I2C и ЖК дисплеем.
#include
#include
#include |
В функции setup мы инициализируем датчик BH1750 и ЖК дисплей, а также напечатаем приветственное сообщение на экране ЖК дисплея.
void setup()
{
Wire.begin();
lcd.begin(16,2);
lcd.print(» BH1750 Light «);
lcd.setCursor(0,1);
lcd.print(«Intensity Sensor»);
delay(2000);
}
lcd.print(» BH1750 Light «); lcd.print(«Intensity Sensor»); |
Также мы запрограммируем две функции – BH1750_Read (для считывания значения освещенности) и BH1750_Init (для записи значения освещенности).
Функция Wire.beginTransmission() используется для начала передачи по протоколу I2C, а функция Wire.requestFrom(address, 2) используется для считывания значения регистров (аргумент 2 в этой функции – число регистров).
Функция Wire.endTransmission() используется для завершения процесса передачи по протоколу I2C, а функция Wire.write() используется для перехода к необходимому регистру, аргументом этой функции является адрес регистра.
int BH1750_Read(int address)
{
int i=0;
Wire.beginTransmission(address);
Wire.requestFrom(address, 2);
while(Wire.available())
{
buff[i] = Wire.read();
i++;
}
Wire.endTransmission();
return i;
}
void BH1750_Init(int address)
{
Wire.beginTransmission(address);
Wire.write(0x10);
Wire.endTransmission();
}
int BH1750_Read(int address) Wire.beginTransmission(address); Wire.requestFrom(address, 2);void BH1750_Init(int address) Wire.beginTransmission(address); |
В функции loop мы в режиме реального времени выводим значение освещенности (в люксах) на экран ЖК дисплея. Сначала мы сравниваем значение, считанное с датчика BH1750, со значением 2 и если оно равно 2, то мы печатаем значение освещенности на экране ЖК дисплея.
Мы сравниваем значение с датчика BH1750 со значением 2 потому что функция BH1750_Read возвращает количество считанных регистров с датчика, а мы считываем как раз 2 регистра.
Поэтому когда мы считаем 2 регистра с датчика, мы выводим значение освещенности на экран ЖК дисплея.
Далее мы получаем значения обоих регистров и делим получившееся значение на 1.2 (здесь значение 1.2 определяет точность вычислений).
void loop()
{
int i;
uint16_t value=0;
BH1750_Init(BH1750address);
delay(200);
if(2==BH1750_Read(BH1750address))
{
value=((buff[0]
Как научить Arduino управлять светом
Сейчас на просторах китайских интернет магазинов можно найти различные системы освещения, которыми можно управлять, как с помощью пульта, так и с помощью адаптивных методов управления. Например, на www.aliexpress.com продаются лампочки, которыми можно управлять с помощью пульта.
Также там продаются лампочки, которые включаются автоматически при регистрации движения или при фиксации слабой освещенности. Каждому начинающему радиолюбителю будет интересно узнать, по какому принципу работает это умное оборудование.
Чтобы разобраться с этой задачей, мы подготовили материал, в котором подробно рассмотрим примеры управления светом с помощью Arduino. Проект Ардуино представляет собой платформу, на которой собираются платы, содержащие на своем борту микроконтроллер.
Особенностью этих плат является то, что к ним можно подключать десятки различных компонентов, которыми можно управлять через встроенный микроконтроллер. Для нашего материала мы будем использовать такие компоненты, как ИК-приемник, датчик освещенности и PIR-датчик.
Управляем освещением при помощи ИК-пульта
В этом примере мы рассмотрим управление с помощью обычного пульта управления от телевизора. Для этого примера потребуется такое оборудование и ПО:
- Arduino UNO — одна из разновидностей плат ардуино;
- Блок твердотельного реле FOTEK SSR-25DA;
- ИК-приемник TSOP1xxx;
- Любой ИК-Пульт от телевизора;
- Arduino IDE — программное обеспечение для загрузки микрокода в микроконтроллер Arduino;
- Лампочка, подключаемая к сети 220 вольт.
Первым делом нам нужно установить Arduino IDE. Скачать официальный установщик Arduino IDE можно, перейдя по ссылке www.arduino.cc/en/Main/Software. В нашем случае мы загрузим версию для Windows.
Установка достаточно проста и с ней должен справиться любой пользователь. После установки Arduino IDE приступим к непосредственной сборке схемы управления светом.
Ниже изображена схема подключения всех компонентов к плате Arduino UNO.
Теперь подключим наш собранный модуль управления светом к компьютеру посредством USB кабеля. Перед запуском Arduino IDE нужно установить модуль IRremote. Загрузить этот модуль можно на GitHub по ссылке https://github.com/z3t0/Arduino-Irremote/archive/master.zip. Загруженный архив нужно распаковать в папку «C:Program FilesArduinolibraries», где Arduino IDE хранит все библиотеки. Теперь можно запустить установленную ранее Arduino IDE. В запущенной программе нам нужно ввести код, изображенный ниже.
Скачать файл этого кода для загрузки в скетч можно по ссылке sketch_1.
Этот код нужен для того, чтобы узнать код кнопки, которую передает ИК-Пульт при нажатии.
В нашем случае мы будем использовать пульт от телевизора Samsung. Ниже показано изображение используемого ИК-Пульта.
Теперь загрузим наш код в микропроцессор и откроем «Монитор порта». На самом пульте нажмем понравившуюся кнопку и посмотрим на результат в «Мониторе порта». В нашем случае высветился код 16523466. Этот код мы и будем использовать для следующего скетча. Теперь загрузим второй код программы в Arduino IDE.
Скачать файл этого кода можно по ссылке sketch_2. Обратите внимание, что в 21 первой строке скетча записан код нашей кнопки. Код вашей кнопки будет совершенно другой. Загрузив этот код в микропроцессор, лампочка изначально не будет гореть. Нажав запрограммированную кнопку, мы ее включим.
Отключение лампочки производится нажатием этой же кнопки.
Из примера видно, что сделать систему управления светом на базе Arduino совсем несложно. Также стоит отметить, что для этого примера вы можете использовать практически любой ИК-Пульт. Саму же сборку лучше всего поместить в отдельный блок и разместить рядом с лампочкой.
Таким образом, при наведении пульта на лампочку, ее можно будет включать и отключать. Еще хотелось бы отметить, что удобней использовать схему с беспроводным Bluetooth адаптером. Такая схема намного функциональней, поскольку передает сигнал через радиоволну, а управление светом производится через смартфон.
Но такая схема будет намного дороже рассмотренной из-за стоимости беспроводного Bluetooth адаптера.
Управляем освещением при помощи датчика освещенности
В этом примере наш блок управления светом будет управлять светом автоматически. Поможет ему в этом датчик освещенности, который будет передавать информацию на микроконтроллер о состоянии текущего показателя освещения.
Если освещенность очень низкая, то микроконтроллер будет автоматически включать лампочку, подключенную к сети 220 вольт. Такую систему освещения еще называют адаптивной.
Для примера сборки схемы с адаптивным освещением потребуется такое оборудование и ПО:
- Arduino UNO — одна из разновидностей плат ардуино;
- Блок реле SRD-12VDC-SL-C;
- Резистор на 10 кОм;
- Фоторезистор (выступает в роли датчика освещенности);
- Arduino IDE — программное обеспечение для загрузки микрокода в микроконтроллер Arduino;
- Лампочка, подключаемая к сети 220 вольт.
Первым делом соберем схему с помощью этих компонентов изображенную ниже.
Теперь откроем Arduino IDE и внесем в нее такой код:
int s1 = A0; // Выбираем пин для подключения датчика освещенности «Фоторезистора»
int s2; // Переменная, которая будет хранить информацию, получаемую с датчика
void setup() {
Serial.
begin(9600); // Устанавливаем последовательный порт для связи
}
void loop() {
// Считываем информацию с датчика:
s2 = analogRead(s1); // Присваиваем значение переменой s2
Serial.
println(s2); // Выводим информацию на «Монитор порта» с датчика освещенности
delay(100); // Устанавливаем короткую задержку
}
Этот код не предназначен для включения нашей лампочки. С помощью этого кода мы проверим наш датчик освещенности. Поэтому загрузим этот код в Arduino UNO и откроем «Монитор порта».
В «Мониторе порта» видно, что мы получаем значения с фоторезистора, а это значит, что он нормально функционирует. Теперь пришло время загрузить основной код для автоматического управления светом.
Для этого вставьте этот код в Arduino IDE:
int s1 = A0; // Выбираем пин для подключения датчика освещенности «Фоторезистора»
int s2; // Переменная, которая будет хранить информацию, получаемую с датчика
void setup() {
pinMode(2, OUTPUT); // Подключаем второй пин к реле SRD-12VDC-SL-C
Serial.
begin(9600); // Устанавливаем последовательный порт для связи
}
void loop() {
// Считываем информацию с датчика:
s2 = analogRead(s1);// Присваиваем значение переменой s2
Serial.
println(s2); // Выводим информацию на «Монитор порта» с датчика освещенности
if(s2 < 700) //Устанавливаем пороговое значение, при котором лампочка будет включаться
digitalWrite(2,HIGH); //Включаем блок реле SRD-12VDC-SL-C
else digitalWrite(2,LOW); // Если показания датчика больше порогового значения, то лампочка не включится или отключится
delay(100); // Устанавливаем короткую задержку
}
Принцип работы этого скетча основан на условном операторе, при котором выполняется условие «s2 < 700». Это условие означает, что при значении датчика меньше 700 лампочка будет включаться, а если значение больше 700, то лампочка отключится. Из примера видно, как легко можно создать адаптивную систему автоматического освещения.
Управляем освещением при помощи датчика приближения
Датчик приближения удобно использовать для сигнализации, но мы его будем использовать для автоматического включения света при сближении с каким-либо объектом. Например, если человек входит в темный угол какого-то помещения, датчик его регистрирует, и микроконтроллер включает свет в этом месте. Для этого примера потребуется такое оборудование и ПО:
- Arduino UNO — одна из разновидностей плат ардуино;
- PIR-датчик;
- Блок реле SRD-12VDC-SL-C;
- Arduino IDE — программное обеспечение для загрузки микрокода в микроконтроллер Arduino;
- Лампочка, подключаемая к сети 220 вольт.
Как и в предыдущих примерах, первым делом соберем схему, представленную ниже.
Теперь наберем в Arduino IDE код, представленный ниже, и загрузим его на плату:
int p1 = 8; // Выбираем пин для подключения датчика освещенности «Фоторезистора»
int s1; // Переменная, которая будет хранить информацию, получаемую с датчика
void setup() {
pinMode(2, OUTPUT); // Подключаем второй пин к реле SRD-12VDC-SL-C
Serial.begin(9600); // Устанавливаем последовательный порт для связи
}
void loop() {
s1 = digitalRead(p1); // Считываем информацию с датчика
if (s1 == LOW) { // Условие
Serial.println(«The object does not move»); // Выводим сообщение в «Монитор порта» что объект не найден
digitalWrite(2,LOW); // Отключаем лампочку
}
else {
Serial.println(«The object started moving»); // Выводим сообщение в «Монитор порта» что объект найден
digitalWrite(2,HIGH); //Включаем блок реле SRD-12VDC-SL-C
}
delay(900); // Устанавливаем короткую задержку
}
Принцип работы этой программы детально описан в ее х. Проверить работу датчика можно с помощью «Монитора порта», в котором будут выводиться сообщения «The object started moving» и «The object does not move».
Подводим итог
В этой статье мы рассмотрели три способа управления светом при помощи датчика движения, фоторезистора и ИК-приемника. Каждый из методов найдет свое применение в различных помещениях и намного упростит управление светом. Также хочется отметить, что вы можете комбинировать эти примеры. Например, можно одновременно использовать датчик приближения и ИК-приемник.
Еще хотелось бы напомнить нашим читателям, что все рассмотренные примеры используют прямое подключение к сети 220 В, поэтому будьте предельно осторожны. Если у вас под рукой нет платы Arduino или она еще не дошла из Китая, то мы советуем воспользоваться бесплатным сервисом Autodesk Circuits. Этот сервис представляет собой конструктор с различными компонентами Arduino.
Все платы Arduino и компоненты в этом сервисе виртуальные.
Поэтому вы можете сколько угодно собирать различные схемы, а также схемы из наших примеров. Надеемся, материал, изложенный в статье, поможет вам создать систему управления освещением, и вы еще на один шаг приблизитесь к созданию умного дома.
Видео по теме
урок по использованию светозависимого сенсора
Простой проект с использованием Ардуино, который автоматически включает свет, когда датчик LDR зафиксировал сумерки.
Что такое LDR?
LDR сенсор на английском звучит как Light Dependent resistor, что в переводе означает «светозависимый резистор».
Неправда ли, было бы интересно иметь под рукой устройство, которое включает свет при наступлении сумерок? Цель нашего проекта сделать именно такое устройство.
Всякий раз, когда комната становится темной, лампочка автоматически будет включаться. Вы можете использовать это как систему аварийного освещения. Используйте её, чтобы автоматически включать свет, когда в комнате недостаточно света.
Чтобы обнаружить интенсивность света или темноты, мы используем датчик, называемый LDR (резистор, зависящий от света или светозависимый резистор).
LDR — это особый тип резистора, который позволяет пропускать через себя более высокие напряжения (низкое сопротивление), когда есть высокая интенсивность света, и пропускает низкое напряжение (высокое сопротивление), когда слабая интенсивность света. Мы можем воспользоваться этим свойством LDR и использовать его в нашем проекте Ардуино.
Как это работает?
Эта система работает, измеряя интенсивность света в окружающей среде. Датчик, который может использоваться для обнаружения света, является LDR. Он недорогой, и вы можете купить его в любом местном магазине электроники или в Интернете.
LDR выдает аналоговое напряжение при подключении к VCC (5V), которое изменяется по величине прямо пропорционально интенсивности входного света на нем. То есть, чем больше интенсивность света, тем больше будет соответствующее напряжение от LDR.
Поскольку LDR выдает аналоговое напряжение, он подключается к выходу аналогового входа на Arduino. Arduino со встроенным АЦП (аналого-цифровым преобразователем) преобразует аналоговое напряжение (от 0-5 В) в цифровое значение в диапазоне от 0 до 1023.
Когда в окружающей среде или на ее поверхности достаточно света, преобразованные цифровые значения, считываемые из LDR через Arduino, будут находиться в диапазоне 800-1023.
Кроме того, мы запрограммируем Ардуино на включение реле. Соответственно, реле заставит включиться лампочку при слабой интенсивности света (например, вы покроете датчик LDR полотенцем или чем-то еще), то есть когда цифровые значения считаются в более высоком диапазоне, чем обычно.
Соединение Arduino и LDR датчика
Во-первых, вам необходимо подключить LDR к выходу 0 аналогового входа на Arduino. Для этого вам нужно использовать конфигурацию делителя напряжения. Схема подключения для Arduino приведена ниже.
Одна нога LDR соединена с VCC (5V) на Arduino, а другая с аналоговым выводом 0 на Arduino. Резистор 100K также подключен к одной и той же ноге и заземлен.
Тестирование кода для датчика Arduino LDR
После подключения LDR к Arduino вы можете проверить значения, поступающие из LDR через Arduino. Для этого подключите Arduino через USB к компьютеру и откройте программное обеспечение Arduino IDE. Затем вставьте этот код и загрузите его в Arduino:
int sensorPin = A0; // select the input pin for LDR
int sensorValue = 0; // variable to store the value coming from the sensor
void setup() {
Serial.begin(9600); //sets serial port for communication
}
void loop() {
sensorValue = analogRead(sensorPin); // read the value from the sensor
Serial.println(sensorValue); //prints the values coming from the sensor on the screen
delay(100);
}
После загрузки кода нажмите кнопку на Arduino IDE под названием «Последовательный монитор» (Serial Monitor). Это откроет новое окно, которое печатает на экране различные значения.
Теперь, проверьте датчик, закрыв его поверхность от света и посмотрите, какие значения показывает серийный монитор. Вот как выглядит последовательный монитор:
Подключение реле к Arduino
Реле представляет собой электромеханический выключатель. Он может использоваться для включения / выключения устройства в режиме AC / DC. Когда Arduino подает на реле высокое напряжение (5 В), он включает его (переключатель включен), в противном случае он остается выключенным.
В этом проекте мы использовали реле 5D SPDT (single pole double throw — один полюс, два направления). Одна клемма катушки реле соединена с цифровым выводом 2 Arduino, а другая с землей GND.
Мы также подключили лампочку. Поскольку мы имеем дело с напряжением переменного тока большой мощности, обязательно соблюдайте надлежащие меры предосторожности. Общая схема показана ниже:
Скетч для Ардиуно
После подключения Ардуино, как показано выше, нам нужно проверить его, загрузив финальный код. Окончательный эскиз ниже:
int sensorPin = A0; // select the input pin for ldr
int sensorValue = 0; // variable to store the value coming from the sensor
void setup() {
pinMode(2, OUTPUT); //pin connected to the relay
Serial.begin(9600); //sets serial port for communication
}
void loop() {
// read the value from the sensor:
sensorValue = analogRead(sensorPin);
Serial.println(sensorValue); //prints the values coming from the sensor on the screen
if(sensorValue < 700) //setting a threshold value digitalWrite(2,HIGH); //turn relay ON else digitalWrite(2,LOW); //turn relay OFF delay(100); }
В этом коде мы устанавливаем пороговое значение света как 700, но оно может меняться под ваши проекты. Вам нужно будет узнать, какое значение должно включить лампочку. Это необходимо сделать после тестирования эмпирически.
Таким образом, Arduino включает лампочку (через реле), когда интенсивность света падает ниже 700. Когда она выше 700, она выключает лампочку.