Автоматическая подсветка лестницы с помощью 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) < 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=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] << 1) + 1;
    sinks.set(ledState);
     delay(lightSpacing);
  }    }
  delay(lightHold);
  for (int k=0;k  {
  for (int j=0;j  {
    ledState[k]=(ledState[k] << 1);
    sinks.set(ledState);
     delay(lightSpacing);
  }
}
 delay(pingReadDelay);
}

Немного про монтаж

Так как у меня самая простая деревянная лестница (без подступенной доски), крепление светодиодных лент осуществил с торца каждой ступеньки.

По всей длине проходит кабель-канал с уложенными проводами, который приклеен на жидкие гвозди. Светодиодные ленты изначально имеют клейкую сторону, они прекрасно держатся на дереве.Сенсоры были установлены в начале каждой первой ступени вверху и внизу лестницы. В качестве крепления использовал обычные подрозетники для гипсокартона.Из корпуса блока питания сигнализации был выброшен севший аккумулятор, в место него легко поместился наш контроллер.

Крышка на месте. Размещаем контроллер под лестничной площадкой.

Результат

На самом деле видео не отражает реальной картины. Лестница освещается намного красивее и ярче.

Скачать все необходимые файлы

  lesenka.zip (79,3 KiB, 11 106 загрузок)

Запись опубликована в рубрике Arduino с метками . Добавьте в закладки постоянную ссылку.

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

  1. Александр говорит:

    Здравствуйте. Владимир если не сложно могли бы вы подсказать. Сделал все по вашей схеме датчики и фоторезистор работают а вот М5450 не как не могу заставить работать. Ее случайно саму по себе не надо прошивать покупал в китае. На выходе напрежение максимум 1.2В и прыгает

  2. Какая разница какую Arduino использовать. В самом коде указаны пины к которым подключается m5450. Они идентичны что у мини, что у нано или уно. Смотрите внимательней.

  3. Александр говорит:

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

    • Приобрести у меня контроллер в котором это реализовано или изучить программирование и написать прошивку с программным ШИМом.

    • Алексей говорит:

      При помощи цифровых потенциометров, например 6-ти канальный AD5206 управлять 6-ю светодиодами.

  4. Vlad говорит:

    Владимир Лукьянов, здравствуйте! Собрал ваш проект очень понравился, всё работает отлично, нарисовал новую печатную плату, хотел спросить: вы сможете выслать скетч с ШИМ (с плавным зажиганием светодиодных лент), и сколько будет это стоить?

    • Добрый день. Исходные коды с ШИМ не продаются и не дарятся. Все очень просто. Не хочу, что бы он в сеть утек или кто то на нем зарабатывал. Очень много сил ушло, что бы кто то им просто пользовался.

      • Robi говорит:

        healthy

        I Robi. I saw your project that pulled me inside. I have 17 steps and I said to myself that this knowledge. I startet it by ARDUINO NANO V3.0. The problem is in the program by gentle resolved so I turned to you. I am a novice in this business so please help. Can you give me a email adras so I can email you a print sc. Thanks Robi

  5. Руслан говорит:

    Добрый день, Владимир! Заинтересовала Ваша разработка с точки зрения бизнеса. В своем городе Вы занимаетесь монтажем или исключительно продаете через интернет?

  6. Анзор говорит:

    Владимир, день добрый.
    Заинтересовала Ваша разработка.
    Возметесь сделать «под ключ» с небольшими уточнениями?

  7. Placidus говорит:

    Hi,
    great work. I am currently working on this and preparing my PCB at home .
    Are you in the process of updating the circuit .If yes then I shall wait a little longer .Also can we replace M5450B with : MM5450N 34 Segment LED Display Driver DIP-40

  8. Уведомление: Освещение лестницы в доме. Организация освещения. Варианты освещения. Автоматическое управление освещением. Фото. Видео.Ремонт своими рук

  9. Johnc555 говорит:

    I loved your blog article. Really Cool. akgegkaecbee

  10. suliman говорит:

    Dear Sir:
    Can you please help me with detailed instructions about how to program the M5450.

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

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