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

payaem.ru

Паяем — Все о электронике

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

В этой статье рассказывается о самодельной подсветке лестницы на основе Arduino. Это очень интересная и удобная штука, не позволит вам шмякнуться с лестницы в тёмное время суток :). И смотрится довольно красиво. Итак, начнём.

Вот примерно так это должно работать

Собственно вот сама лестница.

Собрать электрическую схему управления

  • Мозг всего устройства — Arduino mini

  • В качестве датчиков используется пара PIR — сенсоров
  • Для увеличения пинов, применяется микросхема 74HC595

  • Лентами — LED управляет ИМС ULN2003A

  • Датчик освещённости — фототранзистор

  • Блок питания PD-45A с двумя выходами +12 и +5

2. Печатная плата схемы и корпус

Проектирование несложное. Использовать можно различные программы, одна из более удобных — EAGLE. Скачать файлы можно по этой ссылке https://docs.google.com/file/d/0B7mjQCYtg0hsOUdleFdIdlZRNVE/edit

Всё устройство сделано отдельным блоком с разъёмами, это на случай если вдруг случится поломка или будет модернизация устройства, чтобы можно было заменить модуль управления либо рабочий орган.

Коробка сделана из гетинакса. Разъёмы оторваны из ненужных устройств и приклеены на холодную сварку.

3. Написать программу

Код программы спрятан здесь

4. Производим монтаж на лестницу

Это самый трудоёмкий и утомительный этап работы, надо было проложить 40 метров кабеля и спаять примерно 80 проводников.Управляющее оборудование размещено под лестницей.

Провода убраны в кабельные каналы.Датчики спрятаны под первыми ступеньками сверху и снизу, их размещение находилось экспериментально, основная задача ограничить угол обзора, чтобы лестница не включалась зря.Фототранзистор стоит по центру лестницы, где меньше всего света, по этой причине в пасмурную погоду лестница работает великолепно.Светодиодные ленты приклеены с обратных сторон ступенек, чтобы не били в глаза своим светом при подъёме наверх. Поскольку ленты были от разных фирм и IP, пришлось чередовать их через ступеньку, а это знаете ли вышло очень даже оригинально :).

Можно сделать и получше. Более так сказать модифицировать:

  • Датчики закреплены на двухсторонний скотч, можно их закрепить понадёжней.
  • Получше замаскировать проводники под ступеньками.
  • Можно перенести блоки питания и управления, чтобы они закрывались шторкой.
  • Разъемы можно установить на плату, тогда устройство станет компактней, а пайки станет в 2 раза меньше.
  • Микросхему ULN2003A можно поменять на нормальный светодиодный драйвер, или же на транзисторную микросхему, тогда появится возможность ШИМ (т.е. плавного включения).
  • Также можно применить менее навороченный блок питания, подойдет и обыкновенный светодиодный на 12 Вольт. Arduino питать через стабилизатор на 5 Вольт.
  • Ну и конечно, в идеале, применить четыре датчика, или два дальномера вдоль лестницы, тогда будет возможность с точностью определить число человек и их поведение на лестнице.

Затраты на всё

Вот так всё получилось

Конечно же вы можете сделать всё как вам угодно. Можно сделать другой корпус или поэкспериментировать с деталями, это уже на ваше усмотрение.

Ну вот и всё. Всем пока. Удачи вам в проектировании различных интересных штучек :).

Свобода в действии

Записки по применению свободных технологий в программировании и повседневной работе с персональным компьютером

Подсветка лестницы. Продолжение 1

  • Получить ссылку
  • Facebook
  • Twitter
  • Pinterest
  • Электронная почта
  • Другие приложения

Что может этот прототип

Что ещё предстоит добавить

Пошаговая сборка прототипа

Подключаем линейный регулятор

Подключение драйвера светодиодных лент

На фотографии внизу драйвера подключены зелёный (на цифровой пин 7 arduino) и белый (на цифровой пин 6) провода. Это то, что на схеме называется «CLOCK IN» и «DATA IN» соответственно. Сверху драйвера на фото вино, что к первому пину (VDD) подключен красный провод — это +12 вольт. Второй пин драйвера (BRIGHTNESS CONTROL) так же подключен к +12 вольт через резистор номаналом 1 КОм. Последний пин в верхнем ряду драйвера на фото подключен жёлтым проводом к «минусу» двенадцати вольт. Оставшиеся пины (OUTPUT BIT) подключены к катодам (короткие ножки, «минусы») двенадцативольтовых светодиодов. Аноды (длинные ножки, «плюсы») светодиодов подключены к +12 вольт.

Подключаем дальномеры

Подключаем фоторезистор

Мой скетч

В скетче используется библиотека для работы со светодиодным драйвером lightuino3, взятая из пакета по ссылке. Только пришлось внести небольшую правку в эту библиотеку (иначе не компилировалось). Строку 81 дополнил словом «const». Было:
Стало:

  • Получить ссылку
  • Facebook
  • Twitter
  • Pinterest
  • Электронная почта
  • Другие приложения

Комментарии

Хорошая статья! А как насчёт ШИМ?

Светодиодный драйвер M5451 умеет плавно зажигать/тушить своих подопечных. Как это реализуется на практике опишу в «Продолжении 2». Пока (как находится время) делаю платку со всей обвязкой для светодиодных лент.

У меня имеется М5450. Она тоже умеет плавно зажигать? Жду с нетерпением продолжения проекта)

Различия между этими драйверами минимальные. Так что почти все возможности и трудности совпадают. На макетке я собрал схемку, где плавное зажигание/гашение работали (программа чужая из тырнета), но уже успел всё разобрать. Но зарисовал всё в Fritzing и пытаюсь найти время всё это спаять. А вот с программой мне ещё предстоит разбираться, т.к. мои хотелки несколько больше, чем те примеры, которые нашлись.

Нескромный вопрос: когда можно ожидать готовую третью часть? заранее спасибо. P.S. наглость второе счастье

Ох, медленно дело продвигается 🙁 До готового установленного изделия ещё далеко. Но в ближайшие пару недель выложу «Продолжение 2» по «железу» — плата с транзисторами uln2803 и инверторами логики 74hc04. За окончательную программу ещё не брался.

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

В данной программе из статьи отдельной переменной для количества ступенек нет. За количество «ступенек» отвечают наибольшие числа в циклах за комментариями «//Обнуляем», «//Зажигаем», «//Гасим». Там стоит «9» (в некоторых местах 9-1=»8″) — вместо девяти поставьте ваше количество ступенек.

здравствуйте, помогите разобраться в ошибке Arduino: 1.6.5 (Windows XP), Плата»Arduino Uno»

In file included from C:Documents and SettingsLonerМои документыArduinolibrarieslightuino5/lightuino3.h:28:0,
from sketch_jul21c.ino:1:
C:Documents and SettingsLonerМои документыArduinolibrarieslightuino5/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) ^
C:Documents and SettingsLonerМои документыArduinolibrarieslightuino5/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) ^
C:Documents and SettingsLonerМои документыArduinolibrarieslightuino5/lightuinoSink.h:166:3: error: ‘prog_uchar’ does not name a type
prog_uchar* ani;
^
C:Documents and SettingsLonerМои документыArduinolibrarieslightuino5/lightuinoSink.h:167:3: error: ‘prog_uint16_t’ does not name a type
prog_uint16_t* delays;
^
C:Documents and SettingsLonerМои документыArduinolibrarieslightuino5/lightuinoSink.h: In constructor ‘AniPattern::AniPattern(Lightuino&, int*, int*, int)’:
C:Documents and SettingsLonerМои документыArduinolibrarieslightuino5/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) ^
C:Documents and SettingsLonerМои документыArduinolibrarieslightuino5/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) ^
Ошибка компиляции.

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

Я пока проверить не могу. Видимо, в какой-то момент изменились доступные типы переменных в языке программирования для Arduino. Возможно, поможет, изменить «prog_uchar» на «const unsigned char», а «prog_uint16_t» на «const uint16_t». Я постараюсь выяснить и добавить в статью это.

Олег,
здравствуйте!
Планировал установку контроллера у себя в доме. Прошу Вас написать мне на эл.почту ovchinnikovr собака mail.ru . Надеюсь, что получится посотрудничать.

Hello
I’m trying to build this project but stummble on some problems. when importing sketch i get errors related to lightuino library.

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

Добрый день, уважаемые читатели, хотел бы вас ознакомить со своей версией проекта автоматической подсветки лестницы на основе контроллера Arduino Pro Mini. Возможно, для кого-то эта статья станет основой для своих собственных проектов, ну а мне будет приятно прочитать строгую критику в комментариях.

Цель проекта: смонтировать подсветку лестницы на второй этаж при следующих условиях.

  1. Автоматика срабатывает только в темное время суток.
  2. Каждая ступенька лестницы подсвечивается после включения предыдущей.
  3. Ступеньки подсвечиваются снизу вверх и наоборот.
  4. Есть запас времени полностью подсвеченной лестницы.

Подготовка к монтажу

В качестве контроллера использовал всем знакомый 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) и то можно было обойтись без неё. Пришлось повозиться с битовыми операциями, так как необходимо определенным образом загружать два байта в каскад сдвиговых регистров (в самом скетче сделал доходчивые пояснения).

// Пины
#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 Nano.

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



Шаг второй. Пару слов о датчике движения
Автор не делал датчик движения фиксированным, поскольку была идея сделать его на «рожках», это позволит менять его направление при необходимости. Также пока однозначно не решено, где именно будет крепиться прибор. Особенность датчика в том, что при первом запуске ему надо дать время порядка 10-30 секунд. За это время он сам настроиться, произведет калибровку и будет работать как надо. В принципе, этот момент не так важен.

Шаг третий. Прошивка электроники
Прошивка собрана из кусков различных «туториалов» для датчиков. Работает электроника очень просто, когда датчик обнаруживает движение, идет сравнивание показателей фоторезистора с пороговым значением, которое необходимо для срабатывания реле. Это значение регулируется с помощью потенциометра. Если все требования соблюдены, реле включается на три минуты, можно задать и другой временной промежуток. Далее, если движения нет, то система отключает свет.

Чтобы проверить пороговые значения фоторезистора он был закрыт пальцем и затем автор направил на него фонарик мощностью в 2000 люмен.

В общей сложности с учетом праздников и помощи надежного коллеги — кота, на всю сборку было затрачено порядка 12-15 часов. Для работы системы достаточно источника питания в 4 Ватта, автору он обошелся в 200 рублей.

Подключается система тоже очень просто. Достаточно подключить освещение через реле и подать на электронику через источник питание в 5В.

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

Ссылка на основную публикацию
Adblock
detector