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

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

  1. ИгорьК

    ИгорьК Гуру

    Гуд. Но для подсветки лестницы это не актуально. Там достаточно указать единственное число больше/меньше.
     
  2. kometa

    kometa Нуб

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

    ИгорьК Гуру

    Здесь нужно точнее знать что за датчик света у Вас и как он подключен.
    Можно программным путем вопрос решить, а можно поменять соединение датчика.
     
  4. kometa

    kometa Нуб

    Спасибо за быстрый ответ!
    датчик в файле, подключен: out - A0, vcc +5v, gnd -5v
     

    Вложения:

    • LDR-1.JPG
      LDR-1.JPG
      Размер файла:
      104,3 КБ
      Просмотров:
      983
  5. ИгорьК

    ИгорьК Гуру

    Я полагаю, что если Вы поменяете у него местами VCC и GND то все заработает как надо. Надеюсь, с обратной стороны у него нет больше никаких деталей?
     
  6. kometa

    kometa Нуб

    Менял, не помогло. На обратной стороне сопротивление 15 кОм, плата многослойная не могу понять куда подпаян.
     
  7. ИгорьК

    ИгорьК Гуру

    Значит поправьте код так.
    Вначале: unsignedint sensorRef = 100; или по своему усмотрению - небольшое число.
    В функции boolean NightIn() исправьте соответствующие строки
    на эти:
    Код (Text):
     for(i = 0; i < 50; i++)
        {
            sensorValue = analogRead(sensorPin);            // Чтение показаний датчика;
            if (sensorValue < sensorRef) a++;              // Увеличиваем а, если темнее референсного значения;
            if (sensorValue < (sensorRef + 25)) b++;        // Увеличиваем b, если темнее чем референсное значение минус допуск на гистерезис;
        }
    Здесь меняем лишь два раза ">" на "<" и прибавляем, а не вычитаем 25.
     
    Последнее редактирование: 5 авг 2014
  8. kometa

    kometa Нуб

    не получается:(, раньше хотя бы реагировал на датчик. Монитор выхода показывает в темноте 13-14, при освещении фонариком 950-955
     
  9. ИгорьК

    ИгорьК Гуру

    Подскажите, какой из скетчей у Вас загружен?
    Но, честно говоря, не понимаю: замена местами плюса и земли на вашем датчике должна изменить ситуацию в нужную сторону.
    Датчик представляет собой делитель напряжения, в котором один из резисторов меняет сопротивление. Подключишь его к + - аналог подтягивается к плюсу, подключишь к земле - аналог стягивается к земле, как в Вашем случае. Вы точно меняли местами плюс и землю при подключении датчика?
     
    Последнее редактирование: 5 авг 2014
  10. kometa

    kometa Нуб

    Сначала был загружен этот: Lesenka2_Test3_sr04.zip, потом пробовал: Lesenka2_Test34_sr04.zip, на этих двух не работал никак.
    Пробовал местами менять + и - , потом выпаял фоторезистор из датчика и подключил его только с одним резистором на 10 кОм, тоже менял + и -, ни как не работал.
    Далее залил скетч из Вашего поста #45, и все заработало! Большое спасибо! Но у этого скетча после правки датчика света появилось следующее (до правки этого не заметил): допустим срабатывает верхний датчик, загорается все по порядку как и положено, а когда срабатывает нижний датчик загорается вторая сверху ступенька и горит, потом загорается в полный накал первая снизу и дальше по порядку (вторая сверху продолжает гореть).
    Может это просто руки кривые, сегодня еще покопаюсь.
    Скетч Lesenka2_Test3_sr04.zip понравился больше, из-за того что при входе второго человека лесенка начинает загораться снова. В нем применена другая команда обработки датчика света?
    P.S. Еще было бы неплохо если при выключении ступенек первая оставалась бы подсвечиваться.
     
    Последнее редактирование: 5 авг 2014
  11. ИгорьК

    ИгорьК Гуру

    Поскольку у меня другие датчики, серия этих скетчей писалась без тестирования на макете. Возможно там что-то забывал или ошибался, проверить на своей лестнице их не могу. Тем не менее, по отзывам в ветке скетчи работают нормально.
    На этих скетчах алгоритм обработки датчиков другой, нежели вначале. В первой версии пока лестница светится, датчики не опрашиваются. Лестница выключается через установленное время - начинается опрос.
    В последних версиях датчики работают и во время свечения лестницы. Если датчик сработал в это время, к задержке выключения добавляются еще секунды и так длится до тех пор, пока все не успокоится.
    Это более удобный режим при активном движении по лестнице. Но, как обычно, есть это самое "но".

    На моей лестнице провода к верхнему датчику идут в одном коробе с проводами подсветки. И это соседство дает наводку на верхний датчик. Если опрашивать его во время свечения ступенек - он 100% срабатывает. То есть лестница не выключается никогда. Более того, если подсвечивать верхнюю ступеньку в темноте - время от времени происходит то же самое.
    Поэтому я и отключил подсветку верхней ступеньки (и забывал, видимо, включать в этих скетчах) и вообще вторая версия так и осталась тестовой.
    Возможно мне надо бросить экранированный провод на верхний датчик, и тогда все наладится. Но руки никак не доходят: работает и работает...
     
  12. иван666

    иван666 Нуб

    Спасибо, вам Игорь! Тоже давно занимаюсь этой темой, но из вашей статьи узнал некоторые новые моменты, упрощающие работу!
     
  13. AlexReach

    AlexReach Нуб

    ИгорьК можете помочь пожалуйста с кодом прописать HC-SR04 я пытался но не получается,
    Lesenka2_Test3_sr04 работает отлично большое вам спасибо
     

    Вложения:

  14. ИгорьК

    ИгорьК Гуру

    Этот код как раз для такого датчика. Там же в дефайнах прямо написано в 12 -15 строке.
    Что же Вы там еще пытались переделать и пытались ли?
     
  15. AlexReach

    AlexReach Нуб

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

    ИгорьК Гуру

    Alex, у меня сейчас нет ни датчиков этих, ни даже макетки - пробуйте сами разбираться. В чем проблема то? Почему именно конец кода Вы считаете? И что имеете в виду?
     
  17. AlexReach

    AlexReach Нуб

    этот код ваш оригинальный
    Код (Text):
        case FIVE_CM:                      
        for (i=0; i<16; i++) {                        // Зажигаем ступеньки все сразу;
            analogWrite(OutPins[0][i],fullSwitchedSteps);
        }
        delay(800);                                    // Убрали ботинок с 5 см.
        pinNow = 30;                              
       
        do {                                        // Проверяем расстояние на ультрасониках;
            if (pinNow == 32) {                        // ТО верхнем, то нижнем;
                pinNow = 30;
            }
            else { pinNow = 32; }
            delay(100);                                // Немного ждем, чтобы не перегружать ультрасоники;                      
            pinMode(pinNow, OUTPUT);                // Типичный алгоритм проверки ультрасоника, см. документацию;
            digitalWrite(pinNow, LOW);
            delayMicroseconds(2);
            digitalWrite(pinNow, HIGH);
            delayMicroseconds(15);
            digitalWrite(pinNow, LOW);
            delayMicroseconds(20);
            pinMode(pinNow, INPUT);
            duration = pulseIn(pinNow, HIGH);
            distance = duration / 29 / 2;
    а здесь я попытался вставить для sr04
    Код (Text):
        case FIVE_CM:                      
        for (i=0; i<16; i++) {                        // Зажигаем ступеньки все сразу;
            analogWrite(OutPins[0][i],fullSwitchedSteps);
        }
        delay(800);                                    // Убрали ботинок с 5 см.
        trig = 30;                              
       
        do {                                        // Проверяем расстояние на ультрасониках;
            if (distanceFlag == 0)    {                // При каждом входе в проверку выбираем верхний или нижний датчик;
                trig = trigPin00;
                ping = PING_BOTTOM_PIN;
            }
            else {
                trig = trigPin01;
                ping = PING_TOP_PIN;
                    }
            delay(100);                                // Немного ждем, чтобы не перегружать ультрасоники;                      
            pinMode(trig, OUTPUT);                // Типичный алгоритм проверки ультрасоника, см. документацию;
              digitalWrite(trig, LOW);
              delayMicroseconds(2);
              digitalWrite(trig, HIGH);
              delayMicroseconds(10);
              digitalWrite(trig, LOW);
              duration = pulseIn(ping,HIGH);
              distance = duration/29/2;
     
  18. ИгорьК

    ИгорьК Гуру

    Для вашего датчика:
    Код (C):
    delay(5);                                // Без этого - не работает, видимо не успевает;

              digitalWrite(trig, LOW);
              delayMicroseconds(2);
              digitalWrite(trig, HIGH);
              delayMicroseconds(10);
              digitalWrite(trig, LOW);
              duration = pulseIn(ping,HIGH);
              distance = duration/29/2;

            distanceFlag = !distanceFlag;            // Сменили флаг для того, чтобы в следующий раз проверить другой ультрасоник;
    А pinMode(ОБОИХ ТРИГЕРОВ OUTPUT); надо устанавливать в сетапе.
     
  19. Brosnan

    Brosnan Нуб

    Добрый день ИгорьК, я собрал по вашему типу ардуино. Датчики hc-sr04, но вот датчик освещенности у меня не такой как у вас. Они не будут с вашим скетчем работать? [​IMG] вотhttp://www.google.ru/imgres?imgurl=...act=rc&uact=3&dur=2120&page=1&start=0&ndsp=44
    а чипы два uln2803apc. будет ли работать у меня что то?(
     
  20. ИгорьК

    ИгорьК Гуру

    Чип будет работать, поскольку "The ULN2803A has a 2.7-kΩ series base resistor for each Darlington pair for operation directly with TTL or 5-V CMOS devices." То есть, если судить по документации на Чип и Дип, они предназначены для работы с 5-вольтовой логикой.
    Что касается датчика освещенности, то и его ВОЗМОЖНО можно приспособить. Но:
    - судя по картинке, он цифровой, так что код надо будет править;
    - судя по тому, что у него 4 ноги, возможно он работает по шине I2C или еще какой-то, тогда код надо будет править огого как;
    - судя по тому что он автотоварах - он может быть двенадцативольтовым. Тогда тоже можно решить вопрос, но это еще и паять придется.
    Рекомендую приобрести простейший, аналоговый.