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

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

  1. Здравствуйте, у меня есть такой скетч
    #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);
    }

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

    ИгорьК Гуру

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

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

    ИгорьК Гуру

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

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

    ИгорьК Гуру

    В теме Лукьянова до сих пор (сколько лет) этот код не исправлен. Думаю, Вы зря надеетесь что кто-то возьмется его править.
     
  7. Да новерно я поспешил с покупкой
     
  8. 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 ;
    }
    }
     
  9. ZAZ-965

    ZAZ-965 Гуру

    Поправил библиотеки для сборки в IDE 1.8.2 (ZIP архивы во вложении, распаковать в папку libraries ).
    Скетч собрался, пробуйте (остались предупреждения в библиотеке lightuino3, с ними тоже можно будет разобраться )
    Код (C++):
    #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);
    }
     

    Вложения:

    krauzor нравится это.
  10. Shadow2091

    Shadow2091 Нуб

    Получил плату, дошла нормально. Ардуинки Нано пока нет, только Уно, так что проверить пока не могу (с переопределением ног не разбирался). За скетч с софтварным ШИМ спасибо, принцип понял. Но, судя по коду, если одновременно сработают и верхний и нижний сенсор, то МК перестанет реагировать на сенсоры вообще.
     
  11. Aivaredze

    Aivaredze Нерд

    добрый,давайте в личку перейдем,а то опять пивас кое-кто требовать начнет.. :)
     
  12. ИгорьК

    ИгорьК Гуру

    Вишь какая тема хорошая... и аффтара пнуть можно и рекламной площадкой воспользоваться и денежку зажать - самому срубить :)
     
  13. Aivaredze

    Aivaredze Нерд

    ну вот , началось....
    не дремлет сторожила... :)
     
  14. krauzor

    krauzor Нуб

    Можно TRIG_PIN и ECHO_PIN заменить на один.
    Я HC-SR04 подключил как тут (стр 4, рис 2):
    http://smartstair.ru/upload/smartstair24_hm_1705.pdf
    Там надо один резюк 620 Ом потавить между Trig и Echo и получиться одна линия.
    А кто подскажем зачем его надо ставить?
     
  15. Ivanenkoav

    Ivanenkoav Нуб

    Вопрос к автору. Почему у меня после заливки скетча для ПИР инвертировались сигналы. То есть 255 диод выключен, 0 диод горит на полную мощность. Может мега китайская кривая? Перепроверил подключение раз 10. Почти все в скетче заменил окромя выключения после подсветки. Не пойму где надо поменять с 0 на 255...
    У меня ULN2803APG. При подключении начинают гореть и мерцать все диоды, как будто пробой где-то. Может тоже китайская фигня. Неделю копаюсь, не могу сделать. Руки опускаются. Готов сам код уже написать и на мосфетах сделать.
    Не первый мой проект...
    Не подскажете куда копать???
     
  16. Ivanenkoav

    Ivanenkoav Нуб

    Почти разобрался. Изменил скетч, на светодиодах заработало. Для ULN необходима общая земся и для платы и для диодов с лентами. Подключил ленты, скетч менять не надо (котия скетча ИгоряК), только вноси свои корректировки и установливай на лестницу, не надо голову ломать с программой. ИгорьК СПАСИБО!!!
    П.С. с инверсией сигнала так и не разобрался... Почему при 255 выключен диод (только на диодах, на ленте все окей), а при 0 горит...
     
  17. Slaiterx

    Slaiterx Гик

    uln2003 инвертирует сигнал поэтому и в скетче наоборот
     
  18. Всем добрый день. Я ещё молодой ардуинщик, целых 2 месяца сроку , но уже опыт повторений есть. К сожалению пока писать и полноценно понимать написанные скетчи не получается. Отсюда у меня просьба к автору или к тому, кто обладает временем и готов помочь. Есть желание сделать красивую подсветку на лестнице, я скачал скетч (lesenka.zip) из первого поста автора топика, но у меня используются датчики движения такие , а там написано под другие датчики. Поменять проводку уже нет возможности, могли бы вы мне подкорректировать этот скетч под мои датчики движения ? Заранее спасибо откликнувшимся.
    И ещё, я не до конца понял максимальное кол-во подключаемых ступенек из расчета самой ардуино... в скетче вроде используется 15 ступенек, А если нужно 18 или 20 ? Там же выходов море ??? С этим пока пытаюсь разобраться и понять... Пока использовал в повторениях НАНО версию.
    Спасибо откликнувшимся.
     
  19. ИгорьК

    ИгорьК Гуру

    Прогуляйся, купи: https://amperkot.ru/msk/catalog/ultrazvukovoy_dalnomer_hcsr04__datchik_rasstoyaniya-23813227.html

    Под него здесь есть скетч.

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

    Если яркостью не управлять - можно много. Но скетч надо зело править.
     
  20. ИгорьК

    ИгорьК Гуру

    См. Выше.