Умная фитолампа

Умная фитолампа на Arduino.

                   В предыдущей статье посвещенной фитолампам я упомнинал о возможности управления лампами дистанционно и установке адаптивного режима яркости по уровню внешней освещенности. В этой статье речь пойдет как раз о такой фитолампе, оснащенной контроллером Arduino и модулем Bluetooth hc-05.
Fito_Lamp_Smart

рис 1

Сердцем лампы стал контроллер Arduino Nano, управляющий светодиодным драйвером по средствам ШИМ. Тем самым обеспечивая возможность плавной регулировки яркости свечения 3W фитосветодиодов.

Управлять лампой можно как по Bluetooth с приложения на смартфоне, так и с пульта управления ( радиомодуль 433 Mhz). В лампе реализованно 3 режима: включение, выключения и уравление по датчику освещенности ( фоторезистору). Монтажная схема приведена на рис. 2

Arduino_diagram

рис. 2

Вся схема запитана от блока питания 24V. На стороне 220В установлен предохранитель на 1 А.  Питание на светодиоды подается через драйвер LDD-700H с выходным током 700 mA и входом для диммирования, поддерживающим ШИМ. Мощность лампы 18 Вт, фитолампа обеспечивает освещенность ..лк на расстоянии 20 см.  Стоит отметить что питание на контроллер подается через стабилизатор напряжения L7809С, который понижает напряжение с 24V от блока питания до приемлемых 9V на вход Vin контроллера. В обвязке стабилизатора напряжения установленны 2 конденсатора номиналами 0.33 мкФ на входе и 0.1 мкФ на выходе, это сделано для фильтрации скачков напряжения и позволяет уменьшить нагрев стабилизатора. Резисторы R3 = 1кОМ, R4 = 2 кОм на входе Rx Bluetooth модуля предназначенны для уменьшения напряжения до 3.3 вольт. Резистор R1 = 10 кОм  вместе с фоторезистором представляют собой делитель напряжения и позволяют измерить изменение напряжения ( а вернее сопротивления) на фоторезисторе в зависимости от внешнего освещения. И наконец резистор R2 = 100 Ом на выходе 10 arduino, установлен для его защиты. Выход 10 управлет яркостью лампы, а также выключает ее при подаже нулевого потенциала. ( более подробно о работе LDD-700 вы сможете узнать из прилагаемого datasheet ).

Arduino_box

рис 3

Программа для управления со смартфона имеет простой интерейс и понятна без пояснений, она написана в среде app Inventor. Элементы программы составленны из блоков как это показанно на фотографии 5 Скачать приложение можно тут. При желании вы можете изменить программу в App inventor, исходный файл. Для работы в среде app Inventor необходима регистрация в Google. Выражаю благодарность Дмитрию Осипову за подробные видео по разработке приложения для Arduino.

Fito_lamp_smart_interface

рис 4

app_arduino

рис 5

Прилагаю к статье ссылки на готовое приложения под Android и на исходный файл програмы в который можно внести изменеия.

Ниже приведен код программы для контроллера. Команды Bluetooth вопринимаются контроллром через serial Port. Команды 433 Mhz обрабатываются с помощью библиотеки RemoteReceiver.h  ( скачать можно тут ). Для фильтрации данных получаемых с аналогового датчика ( фоторезистора) используется скользящая средняя по 100 значениям с задержкой в измерении 100 мс. При уровне яркости меньше 25, вся шкала 255, светильник выключается, так как ниже этого значения светодиоды начинают работать нестабильно и мерцать, так же это значит что внешнего освещения вполне достаточно.


Ссылки на используемые в статье материалы:

1. Линейки светодиодные http://ali.pub/rgyew

2. Мощные 3W светодиоды http://ali.pub/rgyew

3. Контроллеры Arduino у проверенного продавца http://ali.pub/rgyew

Открыть код

#include // вход для радиоприемника, пин 2
byte Signal;
int incomingByte;
int sensePin = 0; // Пин 0 для фоторезистора
int lamp = 10; // Пин 10 для управления лампой, с помощью ШИМ
int flag;
void setup() {
Serial.begin(9600);
RemoteReceiver::init(0, 3, showCode);
// initialize the LED pin as an output:
pinMode(lamp, OUTPUT);
analogReference(DEFAULT);
flag = 0;
}

void loop() {

long p = 0; // Функция вычисляющая
for ( int i=0; i<100; i++) // Среднее значение из 100 { long val = analogRead(sensePin); // измерений освещенности p = p + val; // или скользащая средняя } p = p/99; delay(100); p = constrain(p, 0, 800); // ограничение диапазона значений с датчика int ledLevel = map(p, 0, 800, 255, 0); // задача вых диапазона относительно вход диапазона // получение данных в Serial port if (Serial.available() > 0 || flag > 0 ) {
incomingByte = Serial.read();
// Если поступает 1, включение светодиода
if (incomingByte == '1' || flag == 1) {
flag = 0;
digitalWrite(lamp, HIGH);
Serial.println("12");
}
// Если поступает 2, выключение светодиода
if (incomingByte == '2' || flag == 2) {
flag = 0;
digitalWrite(lamp, LOW);
Serial.println("21");
}
// Если поступает 3, яркость задается по показаниям с фоторезистора
if (incomingByte == '3' || flag == 3) {
flag = 3;
if ( ledLevel > 30 ){
analogWrite(lamp, ledLevel);
Serial.println("31"); }
if (ledLevel < 25 ) { digitalWrite (lamp, LOW);}
}
}
// Для отладки
// Serial.print(ledLevel);
// Serial.println(" lamp brietnes");
// Serial.print(analogRead(sensePin));
// Serial.println(" Sensor value");
// Serial.println(flag);
// delay(1000);
}
// Получение сигнала с пульта 433 Mhz
void showCode(unsigned long receivedCode, unsigned int period) {
if (receivedCode == 531363 ) {flag = 1; }
if (receivedCode == 531387 ) {flag = 2; }
if (receivedCode == 531361 ) {flag = 3; }
delay(100);
}

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *