Автоматическая подсветка лестницы с помощью Arduino
(чертежи, схемы, руководство, видео)
Добрый день! В этом посте хочу поделится с хабро сообществом о том, как мне довелось сделать автоматическое освещение лестницы в своем двухэтажном коттедже. Начну с небольшого грустного отступления.Около четырех месяцев назад, возвращаясь с работы в полной темноте, я не удачно подскользнулся и сломал две плюсниевых кости (пальца) на левой ступне. Целый месяц пришлось провалятся в постели, так как наступать на ногу было невероятно больно. Потом еще пол месяца хромал без гипса (у кого были переломы меня сразу поймут). После этой печальной истории я начал задумываться об автоматизации освещения ступенек лестницы. Немного поиграв с поисковыми запросами, нашел для себя очень простое решение в этом блоге, как раз на основе моего любимого микроконтроллера Arduino. Схема не вызвала каких то трудностей, но отпугивало количество и длина проводов, которые мне предстояло смонтировать. До этого ничего подобного не делал. Покупать готовые решения или нанимать кого-то накладно. В течении месяца заказал нужные комплектующие и не торопясь смонтировал за несколько дней на свою лестницу. Всем кому интересно, что из этого получилось, добро пожаловать!Компоненты:Приведу примерную стоимость всех компонентов, которые были использованы в работе. Большинство комплектующих куплены в магазинах моего города поэтому все в рублях.Arduino Pro Mini 300 рUltrasonic Module HC-SR04 Distance Sensor 2 шт 230 рДрайвер светодиодов M5450 88 рРегулятор напряжения L78M05CV 26 рФоторезистор ФР-764 16 рКабель-канал 20x10 мм 10 М 100 рПровод 2x0,12 100 М (с запасом для лент) 190 рПровод 4x0,12 20 М (для сенсоров) 60 рСветодиодная лента LSP0603W15 White 17 шт по 30 см 1020 рМелочевка: текстолит 15x15 см, хлорное железо, сверло 0,9 мм, штыревые соединители типа PLS, разъемы на плату BLS, термоусадочная трубка, конденсаторы и резисторы 200 рБлок питания 12В (он же корпус) от сигнализации Парус 4 Бесплатно
Программный код:
#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) <, minTopIn) && (OurModuleUp.Ranging(INC) >, 0))
{
// Serial.println('Top sensor tripped.'),
bDescentStarted = true,
}
}
//Обработка нижнего датчика]
void UltrasonicDownFire() {
if((OurModuleDown.Ranging(INC) <, minTopIn) && (OurModuleDown.Ranging(INC) >, 0)) {
// Serial.println('Bottom sensor tripped.'),
bClimbStarted = true,
}
}
void climbLightSequence(){
LedsOnDown(),
}
void LedsOnDown(){
//Обнуляем
byte ledState[9],
for (int j=0,j<,9,j++) {
ledState[j] = B00000000,
}
//Зажигаем
for (int k=1,k>,=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<,9,j++) {
ledState[j] = B00000000,
}
//Зажигаем
for (int k=0,k<,=1,k++)
{
for (int j=0,j<,9,j++)
{
ledState[k]=(ledState[k] <,<, 1) + 1,
sinks.set(ledState),
delay(lightSpacing),
} }
delay(lightHold),
for (int k=0,k<,=1,k++)
{
for (int j=0,j<,9,j++)
{
ledState[k]=(ledState[k] <,<, 1),
sinks.set(ledState),
delay(lightSpacing),
}
}
delay(pingReadDelay),
}
Пример страниц:
Скачать:
Автоматическая подсветка лестницы.pdf (327 кБ)
Видео: