Автоматическая подсветка лестницы с помощью arduino

Как сделать автоматическую подсветку лестницы на Arduino

• 27-12-2018 •
Быстрые ссылки на Aliexpress

Наткнулся на очень интересный проект, где реализована красивая подсветка лестницы с помощью arduino. Но к сожалению код и библиотеки, которые выложил автор уже давно устарели и не запускались у меня, пришлось написать свой скетч.

Подумал что это может быть полезным для многих, по этому решил написать целую статью на эту тему.

Что я использовал

  1. Arduino uno 1шт.
  2. HC-SR 04 2шт.
  3. M5450B7 1шт
  4. Провода

Как это выглядит на схеме:

Так выглядит схема для простых светодиодов, где 5в достаточно для тестов. Но скорей всего для подсветки лестницы вы будете использовать диодную ленту, а тут уже потребуется 12 вольт. Для этого нам понадобиться регулятор напряжения: L78M05. Он нужен для того, чтобы снизить с 12в. до 5в., чтобы питать ардуино.

Примерно так будет выглядеть вариант для 12в.:

Как это выглядит на фотографии:

Как это выглядит на видео:

Скетч

В скетче, вначале вы можете задать время горения диодов, а также скорость зажигания. Все практически прокомментировал, так что должно быть понятно. Конечно, самый большой вопрос остается с проводами. Так как проводов нужно очень много, а как их аккуратно спрятать возле лестницы.. Так что для меня, этот вопрос остался открытым. Если кто реализовывал подсветку лестницы на ардуино, делитесь опытом в комментариях!

5 thoughts on “ Как сделать автоматическую подсветку лестницы на Arduino ”

Пытался сделать, тоже уперся в проблему проводов.
Сейчас думаю:
— об адресной светодиодной ленте, но не уверен что получится избежать наводок;
— и о нескольких сдвиговых регистрах.

Кстати, не смотрел саму библиотеку, там есть фильтр ложных срабатываний? а то датчики раз, через пять, показывают ерунду от 4 см до 4 км ))

используйте или витую пару как удлениетль проводов, или развяжите сенсоры по безпроводу

Подскажите пожалуйста, на сколько ступеней возможно реализовать эту схему?

Источник

Умная подсветка лестницы своими руками

Автоматическая подсветка лестницы на Arduino с адресной лентой WS2812B — простой проект, который способен в лучшую сторону преобразить интерьер вашего дома. Наш вариант этого популярного DIY проекта отличается простой электрической схемой и программой (скетчем). Для автоматического включения лестничных светильников можно использовать датчики движения или ультразвуковые датчики расстояния.

В лестничных светильниках используется по два адресных светодиода ws2812b (это количество можно увеличить по желанию), поэтому для подсветки лесенки можно использовать блок питания на 5 Вольт с минимальной мощностью. Включателем можно задействовать «ночной режим» в котором лестничный марш будет всегда подсвечиваться с установленной яркостью, что смотрится очень эффектно.

Подсветка лестницы на Ардуино своими руками

Для этого проекта потребуется:

  • Arduino Nano / Arduino Uno / Arduino Mega;
  • адресная лента WS2812B;
  • блок питания DC 5V;
  • датчик движения или расстояния;
  • включатель;
  • провода, припой, термоусадка и т.д.

В первом варианте проекта для индикации наличия движения используются HC-SR04 ультразвуковые датчики расстояния Ардуино. Далее размещена схема сборки умной лестницы — подключение адресной ленты и датчиков к плате Arduino Nano (можно использовать Arduino Uno) и рабочая прошивка для микроконтроллера. Библиотеки для работы программы можно скачать на странице — Библиотеки Ардуино.

Схема на Arduino и ws2812b для подсветки ступеней лестницы

Все настройки, которые можно внести в скетч, даже без знаний основ программирования Arduino — расположены в начале программы. Но при изменении количества светодиодов, размещенных на одной ступени, в код потребуется внести небольшие правки. В этом случае, необходимо будет добавить или убавить строчки в циклах for — strip.setPixelColor(i + 1, strip.Color(j, j, j * 2));

Скетч. Подсветка лестницы на ws2812b с датчиком расстояния

Пояснения к коду:

  1. в начале программы можно указать количество ступеней в лестнице, скорость включения «умной» подсветки и задать минимальную яркость освещения;
  2. оттенок свечения адресной ленты можно также указать свою, по умолчанию стоит голубоватый цвет для автоматической подсветки лестницы;
  3. лучше всего использовать в схеме ультразвуковые датчики, так как, в отличие от датчиков движения, можно самому указать расстояние для срабатывания подсветки и производить сразу несколько измерений для исключения ошибки.

Скетч. Подсветка лестницы на ws2812b с датчиком движения

Пояснения к коду:

  1. радиус срабатывания PIR датчиков движения HC-SR501 программно изменить нельзя, в отличие от ультразвуковых датчиков движения;
  2. датчики движения можно заменить датчиками препятствия (KY-032 Arduino), при этом схема сборки и прошивка микроконтроллера не изменится.

Заключение. Для создания «умной» подсветки лестницы своими руками на Ардуино существует множество вариантов исполнения. В нашем случае большинство настроек задается только в программе, что значительно упрощает схему сборки и прошивку DIY проекта, а менять с помощью тактовых кнопок цвет или вообще превратить подсветку лестницы в новогоднюю гирлянду на ws2812b Ардуино нам показалось не уместно.

Источник

Автоматическая подсветка лестницы

В качестве контроллера использовал всем знакомый Arduino Pro Mini.

Сначала о самой лестнице количество ступеней 11, ширина 550 мм. В общей сложности необходимо 6 м светодиодной ленты (заказал 2 шт по 5 м 5050 SMD), со степенью защиты IP67 (то есть защита от пыли и воды), чтобы можно было протереть пыль и не задумываться о том, попадешь ли под напряжение или повредишь ленту.

После подключения 5-ти м светодиодной ленты ток через нее оказался всего 2,5 A, то есть, для 6-ти м светодиодной ленты нужен блок питания на 36 Вт. Выбор остановился на китайском блоке питания 12 В 8.3 А 100 Вт. 100, конечно, много, но 12 В понадобилось для другого проекта, поэтому подключился к нему же.

В качестве питания самого контроллера, а также сенсоров (питание 5 В) использовал простенькую схему понижения напряжения с помощью стабилизатора напряжения L7805CV и двух керамических конденсаторов 0,1 мкФ и 0,33 мкФ.

В качестве датчиков фиксирующих движение остановился на ультразвуковых сенсорах HC-SR04, так как испускают узкий пучок ультразвуковых импульсов и можно настроить расстояние срабатывания. Таким образом, можно установить на отслеживании пересечения импульса на первой и последней ступенях. Вдаваться в подробности характеристик, способа подключения, принципа работы сенсора не вижу смысла в интернете достаточно много информации о них.

Вопрос измерения освещенности решился, также, довольно просто с помощью схемы делителя напряжения, в которой в качестве переменного резистора используется фоторезистор Gl5516.

Далее рассмотрим вопрос количества использованных контактов 11 цифровых для ступеней, 4 для двух сенсоров и один аналоговый для измерения освещенности. Итого 15 цифровых, что не дает нам Arduino. Недолго думая, использовал микросхему 74НС595N, а точнее каскад из двух сдвиговых регистров для увеличения количества цифровых выходов Arduino.

Почитав литературу и мнения радиолюбителей, поставил керамический конденсатор 0,1 мкФ на 12-ой ножке STcp первого регистра, якобы для минимизации шума при подачи «защелкивающего» импульса. При опробовании мною каскада «на столе», действительно с конденсатором работает лучше, в особенности при первой подачи питания на микросхемы.

Одно дело подключать к Arduino слабую нагрузку, наподобие светодиода, другое подключать кусок светодиодной ленты, длиной 500-550 мм (максимальный ток цифрового выхода Arduino 40 мА). Более доступно для меня оказалась микросхема ULN2003A (сборка Дарлингтона), максимальный ток через один выход которой составляет 0,5 А.

Хочу обратить внимание, что контакт Echo второго сенсора приходит на 13-й контакт Arduino, на котором находится светодиод самого контроллера.

Сделано это специально, для удобства, в тот момент, когда удовлетворяется условие «достаточно ли темно для начало опроса сенсоров?», светодиод на 13-ом контакте начинает мигать.

Плату рисовал в Sprint-Layout. Делал акцент на том, чтобы микросхемы и контроллер снимались, припаивал панельки SCS-14 и 16, а также гнездо на плату PBS 2×12 2.54. Единственный минус пришлось выгибать в другую сторону ножки микросхем 74НС595N.

Составление скетча

При составлении скетча использовалась только одна библиотека Ultrasonic (для работы с сенсорами HC-SR04) и то можно было обойтись без неё. Пришлось повозиться с битовыми операциями, так как необходимо определенным образом загружать два байта в каскад сдвиговых регистров (в самом скетче сделал доходчивые пояснения).

// ***Скетч подсветка лестницы V1***
// Библиотеки
#include «Ultrasonic.h»

// Пины
#define Trig_1 10 // Устанавливаем контакты для первого датчика.
#define Echo_1 11
#define Trig_2 12 // Устанавливаем контакты для второго датчика.
#define Echo_2 13
#define Ds 8 // Ds/SDI первого сдвигового регистра 75HC595N_1.
#define STcp 7 // STcp/RCLK сдвиговых регистров 75HC595_1, 2.
#define SHcp 6 // SHcp/SRCLK сдвиговых регистров 75HC595_1, 2.
#define LDR A0 // Аналоговый сигнал с фоторезистора.

Ultrasonic Sensor_1(Trig_1, Echo_1); // Определяем первый датчик.
Ultrasonic Sensor_2(Trig_2, Echo_2); // Определяем второй датчик.

// Параметры
const int Limit = 100; // Переменная для хранения предела сравнения с освещенностью.
const float Min_Disrance = 50.0; /* Диапазон, при котором сработает сенсор
Ширина ступеньки 55 см.*/

boolean Up_Sensor_Started = false; // Переменная отражающая факт срабатывания верхнего сенсора.
boolean Down_Sensor_Started = false; // Переменная отражающая факт срабатывания нижнего сенсора.

const int Read_Delay = 50; // Переменная для хранения времени задержки опроса сенсоров.

unsigned int leds = 0; // Переменная для хранения передаваемых битов в регистры.
const int N = 10; /* Переменная для хранения количества ступеней лестницы.
Отсчет идет с нуля! Максимум выходов 14-ть 2 Сборки Дарлингтона.*/
const int T_Ladder = 3000; // Переменная для хранения времени включенной лестницы.
const int T_Stair = 500; // Переменная для хранения времени между включениями.

void setup()
<
pinMode(Ds, OUTPUT);
pinMode(STcp, OUTPUT);
pinMode(SHcp, OUTPUT);
// Serial.begin(9600); // Инициализация последовательного порта на скорости 9600 бойд.
>

void loop()
<
int LDR_Value = analogRead(LDR); // Считываем значение с фоторезистора.
// Serial.println(LDR_Value); // Проверяем уровень освещенности в пределах от 0 до 1023.
if(LDR_Value 0))
// Если измеренное расстояние больше нуля, но меньше предела то.
<
Up_Sensor_Started = true; // Факт срабатывания верхнего сенсора.
>
>

// Процедура опрос нижнего датчика
void Down_Sensor()
<
if((Sensor_2.Ranging(CM) 0))
// Если измеренное расстояние больше нуля, но меньше предела то.
<
Down_Sensor_Started = true; // Факт срабатывания нижнего сенсора.
>
>

// Процедура загрузки битов в регистры
void updateShiftRegister()
<
digitalWrite(STcp, LOW); // Подаем низкий сигнал для загрузки битов в регистры.
byte First = lowByte(leds); /* Разделяем наш байт на младший и старший,
так как функция shiftOut за раз пропускает только 8 бит.*/
byte Second = highByte(leds);
shiftOut(Ds, SHcp, MSBFIRST, Second); // Проталкиваем 1-й байт и читаем его слева направо.
shiftOut(Ds, SHcp, MSBFIRST, First); // Проталкиваем 2-й байт.
digitalWrite(STcp, HIGH); // Сбрасываем на выходы полученные биты.
>

// Процедура включения подсветки снизу вверх
void Turing_Upward()
<
for (int i = 0; i = 0; i—)
<
bitSet(leds, i); // Изменение всех N битов на состояние 1 (или HIGH).
updateShiftRegister(); // Включение подсветки загрузкой измененного байта.
delay(T_Stair); // Задержка между включением ступеней.
>
delay(T_Ladder); // Задержка включенной лестницы.
leds = 0; // Обнуление байта.
updateShiftRegister(); // Потушить подсветку.
>

Особенности монтажа

Теперь про монтаж, укладывать светодиодную ленту, конечно же, лучше в специально для неё созданный профиль, но стоимость его довольно высока. Я брал кабель канал 12×12, срезал раскаленным канцелярским ножом лишнее, получилось следующее.

Чтобы спрятать сенсоры HC-SR04, нашел для них по размеру коробку IEK 20 мм.

Монтаж щитка особого труда тоже не составил, так как на плате заранее задумывалось установка винтовых клеммников.

Получившийся проект удовлетворил все поставленные задачи, во время работы автоматики не было замечено каких-либо отказов, замечаний.

Единственное, по моему мнению, можно было бы сделать щиток более компактным и полностью его закрыть от посторонних рук.

Источник

Автоматическая подсветка лестницы с помощью Arduino

Добрый день! В этом посте хочу поделится с интернет сообществом о том, как мне довелось сделать автоматическое освещение лестницы в своем двухэтажном коттедже. Около четырех месяцев назад, возвращаясь с работы в полной темноте, я не удачно подскользнулся и сломал две плюсниевых кости (пальца) на левой ступне. Целый месяц пришлось провалятся в постеле, так как наступать на ногу было невероятно больно. Потом еще пол месяца хромал без гипса (у кого были переломы меня сразу поймут). После этой печальной истории я начал задумываться об автоматизации освещения ступенек лестницы. Немного поиграв с поисковыми запросами, нашел для себя очень простое решение в этом блоге, как раз на основе моего любимого микроконтроллера Arduino. Схема не вызвала каких то трудностей, но отпугивало количество и длина проводов, которые мне предстояло смонтировать. До этого ничего подобного не делал. Покупать готовые решения или нанимать кого-то — накладно. В течении месяца заказал нужные комплектующие и не торопясь смонтировал за несколько дней на свою лестницу. Всем кому интересно, что из этого получилось, добро пожаловать под кат!

Компоненты

Приведу примерную стоимость всех компонентов, которые были использованы в работе. Большинство комплектующих куплены в магазинах моего города поэтому приведу все в рублях.

Arduino Pro Mini 300 р
Ultrasonic Module HC-SR04 Distance Sensor — 2 шт 230 р
Драйвер светодиодов M5450 88 р
Регулятор напряжения L78M05CV 26 р
Фоторезистор ФР-764 16 р
Кабель-канал 20×10 мм — 10 М 100 р
Провод 2×0,12 — 100 М (с запасом для лент) 190 р
Провод 4×0,12 — 20 М (для сенсоров) 60 р
Светодиодная лента LSP0603W15 White — 17 шт по 30 см 1020 р
Мелочевка: текстолит 15×15 см, хлорное железо, сверло 0,9 мм, штыревые соединители типа PLS, разъемы на плату BLS, термоусадочная трубка, конденсаторы и резисторы 200 р
Блок питания 12В (он же корпус) от сигнализации «Парус 4» Бесплатно
Итого 2230 р

Прототип

Отладку прошивки для Arduino, как и все, я производил на макетной плате с использованием обычных светодиодов.

Схема

С помощью небезызвестной среды для проектирования Eagle CAD была доработана схема автора и печатная плата. Здесь я добавил регулятор напряжения на 5 В, изменил датчики с 3х контактных дорогих Ping на четырех контактные дешевые HC-SR04. Для того, что бы подсветка лестницы срабатывала только в темное время суток, в схему добавлен советский фоторезистор ФР-764 (можно использовать и другой).

Скетч

В скетче используется свободно распространяемая библиотека для работы со светодиодным драйвером M5450, а также библиотека для работы с ультразвуковым дальномером HC-SR04.

#include «lightuino3.h»
#include «Ultrasonic.h»

//Устанавливаем контакты для первого датчика
#define TRIG_PIN 12
#define ECHO_PIN 13
//Устанавливаем контакты для второго датчика
#define TRIG2_PIN 10
#define ECHO2_PIN 11
//Определяем первый датчик
Ultrasonic OurModuleUp(TRIG_PIN, ECHO_PIN);
//Определяем второй датчик
Ultrasonic OurModuleDown(TRIG2_PIN, ECHO2_PIN);
// pins 0, 1 used by Serial
const unsigned char DataPin = 6;
const unsigned char clockPin = 7;

// задержка между ступеньками
const long lightSpacing = 280;
//задержка свечения всей лестницы
const long lightHold = 10000;
//задержка выстрела сенсоров
const long pingReadDelay = 50;

// Диапазон при котором сработает сенсор
const float minBottomIn = 33.0f;
const float minTopIn = minBottomIn;

LightuinoSink sinks(clockPin, DataPin, 100, 4);

boolean bClimbStarted = false;
boolean bDescentStarted = false;

int val;
void setup() <
Serial.begin(9600);
pinMode(DataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
delay(1000);
sinks.set(0,0,0);
>

void loop() <
val = analogRead(0);
//Проверяем освещенность в помещении
if (val>=1020)<

UltrasonicDownFire();//Выстрел нижнего датчика
if(bClimbStarted) <
bClimbStarted = false;
bDescentStarted = false;
climbLightSequence();
>
else <
// Выстрел верхнего датчика
UltrasonicUpFire();
if(bDescentStarted) <
bClimbStarted = false;
bDescentStarted = false;
descentLightSequence();
>
>
delay(pingReadDelay);
>
>

//Обработка верхнего датчика
void UltrasonicUpFire() <

if((OurModuleUp.Ranging(INC) 0))
<
Serial.println(«Top sensor tripped.»);
bDescentStarted = true;
>
>

//Обработка нижнего датчика]
void UltrasonicDownFire() <

if((OurModuleDown.Ranging(INC) 0)) <
Serial.println(«Bottom sensor tripped.»);
bClimbStarted = true;
>
>

void climbLightSequence() <
LedsOnDown();
>
void LedsOnDown() <
//Обнуляем
byte ledState[9];
for (int j=0;j=0;k—)
<
for (int j=8;j>=1;j—)
<
ledState[k] = (ledState[k] >> 1) + 128;
sinks.set(ledState);
delay(lightSpacing);
>
>
//Задержка
delay(lightHold);
//Гасим
for (int k=1;k>=0;k—)
<
for (int j=8;j>=1;j—)
<
ledState[k] = (ledState[k] >> 1);
sinks.set(ledState);
delay(lightSpacing);
>
>
delay(pingReadDelay);
>

void descentLightSequence() <
LedsOnUp();
>

void LedsOnUp() <
//Обнуляем
byte ledState[9];
for (int j=0;j ledState[j] = B00000000;
>
//Зажигаем
for (int k=0;k <
for (int j=0;j <
ledState[k]=(ledState[k] [download >[/stextbox]

96 комментариев к “Автоматическая подсветка лестницы с помощью Arduino”

Arduino: 1.8.9 (Windows 7), Плата:»Arduino Pro or Pro Mini, ATmega328P (5V, 16 MHz)»

In file included from d:\Documents\Arduino\libraries\lightuino5/lightuino3.h:28:0,

d:\Documents\Arduino\libraries\lightuino5/lightuinoSink.h:158:31: error: ‘prog_uchar’ has not been declared

AniPattern(Lightuino& shld, prog_uchar* anim,prog_uint16_t* delayLst, int total_frames): shield(shld)

d:\Documents\Arduino\libraries\lightuino5/lightuinoSink.h:158:48: error: ‘prog_uint16_t’ has not been declared

AniPattern(Lightuino& shld, prog_uchar* anim,prog_uint16_t* delayLst, int total_frames): shield(shld)

d:\Documents\Arduino\libraries\lightuino5/lightuinoSink.h:166:3: error: ‘prog_uchar’ does not name a type

d:\Documents\Arduino\libraries\lightuino5/lightuinoSink.h:167:3: error: ‘prog_uint16_t’ does not name a type

d:\Documents\Arduino\libraries\lightuino5/lightuinoSink.h: In constructor ‘AniPattern::AniPattern(Lightuino&, int*, int*, int)’:

d:\Documents\Arduino\libraries\lightuino5/lightuinoSink.h:158:115: error: ‘delays’ was not declared in this scope

AniPattern(Lightuino& shld, prog_uchar* anim,prog_uint16_t* delayLst, int total_frames): shield(shld)

d:\Documents\Arduino\libraries\lightuino5/lightuinoSink.h:158:132: error: ‘ani’ was not declared in this scope

AniPattern(Lightuino& shld, prog_uchar* anim,prog_uint16_t* delayLst, int total_frames): shield(shld)

D:\Documents\Arduino\________\________.ino: In function ‘void LedsOnDown()’:

________:92:20: error: ‘k’ was not declared in this scope

D:\Documents\Arduino\________\________.ino: In function ‘void LedsOnUp()’:

________:123:21: error: expected ‘;’ before ‘ledState’

for (int j=0;j ledState[j] = B00000000;

________:123:44: error: expected ‘)’ before ‘;’ token

for (int j=0;j ledState[j] = B00000000;

D:\Documents\Arduino\________\________.ino: At global scope:

________:126:3: error: expected unqualified-id before ‘for’

________:126:16: error: ‘k’ does not name a type

________:132:8: error: expected constructor, destructor, or type conversion before ‘(‘ token

________:133:3: error: expected unqualified-id before ‘for’

________:133:16: error: ‘k’ does not name a type

________:140:7: error: expected constructor, destructor, or type conversion before ‘(‘ token

________:141:1: error: expected declaration before ‘>’ token

exit status 1
‘k’ was not declared in this scope

Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
«Показать подробный вывод во время компиляции»

Добрый день. не могу найти библиотеку для HC-SR04 ссылка не работает. если можно отправьте мне на почту. Заранее благодарен.

Оставьте комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Источник

Adblock
detector