- PVSM.RU - https://www.pvsm.ru -

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

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

Компоненты

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

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

Прототип

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

Схема

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

image

image

image

Скетч

В скетче используется свободно распространяемая библиотека [11] для работы со светодиодным драйвером M5450 [12], а также библиотека [13] для работы с ультразвуковым дальномером 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<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);  
}

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

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

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

Сенсоры были установлены в начале каждой первой ступени вверху и внизу лестницы. В качестве крепления использовал обычные подрозетники для гипсокартона.
image

Из корпуса блока питания сигнализации был выброшен севший аккумулятор, в место него легко поместился наш контроллер.
image

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

Результат

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

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

Автор: Rimidalw


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/arduino/6100

Ссылки в тексте:

[1] блоге: http://www.thekanes.org/projects/automated-led-stairs-howto

[2] Arduino Pro Mini: http://www.ebay.com/itm/Pro-Mini-Atmega-168-5V-16MHz-your-project-Arduino-compatible-/280852829119?pt=LH_DefaultDomain_0&amp;hash=item41642213bf

[3] Ultrasonic Module HC-SR04 Distance Sensor: http://www.ebay.com/itm/New-Arduino-Ultrasonic-Module-HC-SR04-Distance-Sensor-New-condition?item=280778106586&amp;cmd=ViewItem&amp;_trksid=p5197.m7&amp;_trkparms=algo%3DLVI%26itu%3DUCI%26otn%3D3%26po%3DLVI%26ps%3D63%26clkid%3D7916305586107749541

[4] Драйвер светодиодов M5450: http://escor.ru/catalog/product/importnye_mic/m5450b7/

[5] Регулятор напряжения L78M05CV: http://escor.ru/catalog/product/importnye_mic/l78m05cv/

[6] Фоторезистор ФР-764: http://escor.ru/catalog/product/fotorezistory/fr_764/

[7] Светодиодная лента LSP0603W15 White: http://escor.ru/catalog/product/smd_0603/lsp0603w15_white_30sm/

[8] Eagle CAD: http://en.wikipedia.org/wiki/Eagle_(program)

[9] схема автора: http://www.thekanes.org/wordpress/wp-content/uploads/2011/07/LED-stairs-schematic.png

[10] Ping: http://www.parallax.com/tabid/768/ProductID/92/Default.aspx

[11] библиотека: http://code.google.com/p/arduino-m5451-current-driver/

[12] M5450: http://www.google.ru/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;ved=0CC8QFjAA&amp;url=http%3A%2F%2Fwww.grifo.com%2FPRESS%2FDOC%2FST%2FM5450_51.pdf&amp;ei=qCCWT7bxBs2VOseD-dIN&amp;usg=AFQjCNEVxGj1T8qkxwZWeCqFcJovk4fojg&amp;sig2=5JaQC5bYA4twzYDAmJKKkw

[13] библиотека: http://iteadstudio.com/application-note/arduino-library-for-ultrasonic-ranging-module-hc-sr04/

[14] Скачать все необходимые файлы одним архивом: http://lukjanow.ru/?dl_id=56