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

Тема в разделе "Глядите, что я сделал", создана пользователем ИгорьК, 19 сен 2013.

  1. Saniok

    Saniok Нерд

    Привет Всем,

    По ходу сборки столкнулся со множеством проблем, но дорогие Господа, как не раз упоминает автор, ВАЖНО!!!

    1) Повторите схему из исходника
    2) Если нет, то проверьте все соединения
    3) Проверьте работоспособность на макетке,
    -если на ней все работает, то ошибка не в скетче, а в физике
    4) Прочитайте все 27 страниц форума, здесь около 90% всех ответов

    PS. Всем удачи в сборке ,начинайте с макетки и все получится, код рабочий
     
    ИгорьК нравится это.
  2. ИгорьК

    ИгорьК Победитель модулей

    Спасибо!
    Самое фиговое что можно услышать - "я сделал все как написано а у меня ничего не работает - у вас код неправильный".
    Начинаешь разбираться и видишь: сделано все наоборот, в код внесены странные изменения до степени "это уже и не мой код" :)

    Это мой первый проект со всеми глупостями в коде и ошибками в решениях. Видимо, этой зимой буду переделывать.
    Слабые места:
    - датчики, которые долго работают и выходят из строя, если,
    - вручную не выключать лестницу на время, когда никого дома нет, а также
    - наводки на линии датчиков, когда провод слишком длинный. В частности, верхняя ступенька у меня не подсвечивается, потому что периодически срабатывает датчик, находящийся рядом с ней.
    Вот эти проблемы буду устранять. Плюс, включу её в общую систему управления домом.
    Сказанное здесь не значит, что лестница не работает или работает неустойчиво. Однако в данный момент предложил бы убирать линии связи с датчиками в экранированный провод, например микрофонный. Он недорогой и тонкий.
     
    Последнее редактирование: 5 ноя 2016
  3. Drobin

    Drobin Нуб

    Добрый день, господа-товарищи!
    Очень хочется организовать себе дома автоматическую подсветку лестниц (у меня их две). Но степень моей криворукости такова, что сам я вряд ли смогу что-то дельное сделать. Может где-то есть уже готовые решения? чтоб просто купил, подключил и радуешься новой игрушке?
     
  4. Tomasina

    Tomasina Иномирянин

  5. rkit

    rkit Гуру

    Безо всякой автоматики. Даже полный идиот справится.
     

    Вложения:

  6. Aivaredze

    Aivaredze Нерд

    Игорю благодарность..
    Подчерпнул саму идею сдесь
    Последние страницы форума скучноваты но без этого никак..
    Для тех кто сам собирает: вот мой проект
    Идея в принципе не чем не отличается от изначалной
    единственное - ушел от датчика освещенности соеденив с домашним контроллером
    сдесь описание:
    проект открытый для творчества:)
    https://www.openhardware.io/view/366/Automatic-stairs-lighting-arduino-shield
     
  7. Shadow2091

    Shadow2091 Нуб

    Я правильно понял, что у этого контроллера нет возможности управлять яркостью ступеней (ШИМ), а датчик освещенности нужен только для режима вкл/выкл подсветки всей лестницы? А так же то, что контроллер будет висеть в delay пока подсветка включается, соответственно - на повторные срабатывания датчика или прохождения человека мимо второго не сработает?
     
  8. Aivaredze

    Aivaredze Нерд

    у контроллера есть, а у тестового скеча нет. чтобы был шим замение библиотеку
    ShiftRegister74HC595 на ShiftPWM
    вот ссылка :
    https://github.com/elcojacobs/ShiftPWM
    датчик освещенности нужен только для режима вкл/выкл подсветки всей лестницы,
    но я его у себя не ставил,режим вкл/выкл управляет домашний контроллер по сцене закат/рассвет.
    можно скеч написать и без дилэй, но считать сколько людей зашло и вышло,по собственному опыту,считаю беcсмысленно...
     
  9. ИгорьК

    ИгорьК Победитель модулей

    1. Эта железка плавно включает и выключает ступеньки до заданной яркости.
    2. Эта железка висит в делае и не реагирует на прохождения населения по двум причинам:
    2.1 - не скажу
    2.2 - я так и не придумал подходящий алгоритм определения наличия пешеходов на летнице двумя датчиками.
     
  10. ИгорьК

    ИгорьК Победитель модулей

    ... а, вы тут о своем...
    Платить бабки будете за предоставленное рекламное поле?
     
  11. Aivaredze

    Aivaredze Нерд

    да не Игорь,я свой.
    собрал себе сам,заказал себе у китайцев платку,их пришло 10 штук, осталось 8, тк одну
    спалил,5штук раздарил,три целый год на полке провалялись..щас на ебэе.осталась одна.
     
  12. Aivaredze

    Aivaredze Нерд

    все файлы предоставил,если есть желание повозиться,можно собрать самому.
     
    ИгорьК нравится это.
  13. Здравствуйте, у меня есть такой скетч
    #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);
    }

    но при закачке в ардуино он у меня выбивает ошибку, ошибка компиляции скетча, если кто может помочь разобраться буду очень благодарен
     
  14. ИгорьК

    ИгорьК Победитель модулей

    Скетч Вы скопировали с сайта Лукьянова. Он автор ему и вопросы.
    На мой взгляд, не правильно копипастить код в одном месте вставлять в другое без форматирования и указания источника.

    Указанный код не компилировался и ранее. Именно это подвигло меня написать свой и создать эту тему.
     
  15. Вы верно подметили, идея проекта хорошая, респект вам, но у вас заточена под мегу, а можно обойтись и нано или мини.
     
  16. ИгорьК

    ИгорьК Победитель модулей

    Можно. А зачем? Вы все ещё старый черно-белый телевизор смотрите? Им тоже можно обойтись. Но цветной удобнее.

    https://ru.aliexpress.com/item/MEGA...lgo_pvid=0c90f8b4-a5ef-44bc-8269-e7795b3b1708
     
  17. Нет, телевизор у меня цветной, просто все компоненты уже преобретены, хотелось бы их использовать, вот и я поднял эту тему
     
  18. ИгорьК

    ИгорьК Победитель модулей

    В теме Лукьянова до сих пор (сколько лет) этот код не исправлен. Думаю, Вы зря надеетесь что кто-то возьмется его править.
     
  19. Да новерно я поспешил с покупкой
     
  20. Aivaredze

    Aivaredze Нерд

    все будет офигенно...непоспешили.
    любая ардуинка +шифт регистор74HC595 = огромное количество шим ступеней.
    скеч ниже.

    #define SHIFTPWM_NOSPI // Uncomment this part to NOT use the SPI port and change the pin numbers. This is 2.5x slower Do not change!!!
    const int ShiftPWM_dataPin = 6;
    const int ShiftPWM_clockPin = 7;
    const int ShiftPWM_latchPin = 8;
    #include <ShiftPWM.h>
    const bool ShiftPWM_invertOutputs = false;
    const bool ShiftPWM_balanceLoad = false;
    #define sensorLight_PIN A0
    #define sensorBottom_PIN A1
    #define sensorUpper_PIN A2
    unsigned char maxBrightness = 100; // Here you set the number of brightness levels. Adjust(0-255)!!
    unsigned char pwmFrequency = 75; // These values affect the load of ShiftPWM
    unsigned int numRegisters = 3; // Number of shift registers Do not change!!!
    unsigned int numOutputs = numRegisters * 8;
    unsigned int numRGBLeds = numRegisters * 8 / 3;
    unsigned int fadingMode = 0; // start with all LED's off.
    boolean sensorUpperActive;
    boolean sensorBottomActive;
    byte numberOfstairs=24; // Setup Number of Your stairs. Adjust up to 24 !!!!
    int pause=100; // Setup delay ON/OFF Adjust!!!
    byte faidoutSpeed=5; // How fast to fadeout Adjust!!!
    byte faidinSpeed=5; // How fast to fadein Adjust!!!
    int val;

    void setup() {


    ShiftPWM.SetAmountOfRegisters(numRegisters);
    ShiftPWM.Start(pwmFrequency, maxBrightness);
    pinMode(sensorBottom_PIN, INPUT);
    pinMode(sensorUpper_PIN, INPUT);
    pinMode(sensorLight_PIN, INPUT);
    Serial.begin(9600);
    }



    void loop() {

    val = analogRead(5); //Checking light level
    if (val <= 10) { // Adjust photocell cencivity. (val<10 dark.....val>800 bright..) !!!!!!!!

    BottomTriggerFire(); //Checking bottom sensor
    UpperTrigerFire(); //Checking upper sensor
    switchONOFFfromdown(); //Stairs on/off from down to up
    switchONOFFfromUp(); //Stairs on/off from up to down
    }
    }

    void BottomTriggerFire() {

    if (analogRead (sensorBottom_PIN) >= 550 ) { //Depands of the sensor tipe, if 0 when triggered ,than change the comparation to opposide value.
    sensorBottomActive = true;
    }
    }

    void UpperTrigerFire() {

    if (analogRead(sensorUpper_PIN) >= 550) {
    sensorUpperActive = true;
    }
    }


    void switchONOFFfromdown() {
    if (sensorBottomActive==true && sensorUpperActive==false){


    for(int i=0; i<numberOfstairs; i++){
    for(int a=0; a<maxBrightness; a++){
    ShiftPWM.SetOne(i,a);
    delay(faidoutSpeed);
    }
    }

    delay(pause);

    for(int i=0; i<numberOfstairs; i++){
    for(int a=maxBrightness;a>=0;a--){
    ShiftPWM.SetOne(i,a);
    if(a==0){
    ShiftPWM.SetOne(i,0);
    }
    delay(faidinSpeed);
    }
    }
    sensorBottomActive = false ;
    }
    }

    void switchONOFFfromUp () {
    if ( sensorUpperActive==true && sensorBottomActive==false) {


    for(int i=numberOfstairs; i>=0; i--){
    Serial.print(i);
    for(int a=0; a<maxBrightness; a++){
    ShiftPWM.SetOne(i,a);
    delay(faidoutSpeed);
    }
    }

    delay(pause);


    for(int i=numberOfstairs; i>=0; i--){
    //Serial.print(i);
    for(int a=maxBrightness;a>=0;a--){
    ShiftPWM.SetOne(i,a);
    if(a==0){
    ShiftPWM.SetOne(i,0);
    }
    delay(faidinSpeed);
    }
    }
    sensorUpperActive= false ;
    }
    }