Компоненты
Приведу примерную стоимость всех компонентов, которые были использованы в работе. Большинство комплектующих куплены в магазинах моего города поэтому приведу все в рублях.
Прототип
Отладку прошивки для 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); }
Немного про монтаж
Так как у меня самая простая деревянная лестница (без подступенной доски), крепление светодиодных лент осуществил с торца каждой ступеньки.
По всей длине проходит кабель-канал с уложенными проводами, который приклеен на жидкие гвозди. Светодиодные ленты изначально имеют клейкую сторону, они прекрасно держатся на дереве.
Сенсоры были установлены в начале каждой первой ступени вверху и внизу лестницы. В качестве крепления использовал обычные подрозетники для гипсокартона.
Из корпуса блока питания сигнализации был выброшен севший аккумулятор, в место него легко поместился наш контроллер.
Крышка на месте. Размещаем контроллер под лестничной площадкой.
Результат
На самом деле видео не отражает реальной картины. Лестница освещается намного красивее и ярче.
VIDEO
Рекомендуем почитать ПРОСТО И УДОБНО Напряжение от 1 до 12 В с интервалом через один вольт позволяет получать трансформатор, схема которого приведена на рисунке. При желании коммутацию легко осуществить двухплатным... ДИЗАЙН… ИЗ ЧЕРЕПКОВ Не надо быть специалистом, чтобы делать такие чудесные вещи. Старая ваза превратилась в оригинальное украшение интерьера; простая глиняная миска — в чашу с изящным геометрическим...