Подсветка лестницы на адресной ленте

Тема в разделе "Arduino & Shields", создана пользователем Slaiterx, 18 апр 2018.

  1. Slaiterx

    Slaiterx Гик

    [​IMG]



    https://yadi.sk/a/JSPcwRim3UXu4a/5ad760f8bcea54a03f95a586
    Долго искал и нашол на забугорном форуме проект подсветки лестницы схемма и скетч прилагаются
    Код (C++):
    // Edit by Serge Niko June 2015

    #include <Adafruit_NeoPixel.h>

    #define PIN 6

    // Parameter 1 = number of pixels in strip
    // Parameter 2 = Arduino pin number (most are valid)
    // Parameter 3 = pixel type flags, add together as needed:
    //   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
    //   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
    //   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
    //   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)

    Adafruit_NeoPixel strip = Adafruit_NeoPixel(525, PIN, NEO_GRB + NEO_KHZ800);

    // IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
    // pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
    // and minimize distance between Arduino and first pixel.  Avoid connecting
    // on a live circuit...if you must, connect GND first.

    // Set up Variables
    unsigned long timeOut=60000; // timestamp to remember when the PIR was triggered.
    int downUp = 0;              // variable to rememer the direction of travel up or down the stairs
    int alarmPinTop = 10;        // PIR at the top of the stairs
    int alarmPinBottom =11;      // PIR at the bottom of the stairs
    int alarmValueTop = LOW;    // Variable to hold the PIR status
    int alarmValueBottom = LOW; // Variable to hold the PIR status
    int ledPin = 13;           // LED on the arduino board flashes when PIR activated
    int LDRSensor = A0;        // Light dependant resistor
    int LDRValue = 0;          // Variable to hold the LDR value
    int colourArray[350];      // An array to hold RGB values
    int change = 1;            // used in 'breathing' the LED's
    int breathe = 0;           // used in 'breathing' the LED's

    void setup() {
       strip.begin();
       strip.setBrightness(40); //adjust brightness here
       strip.show(); // Initialize all pixels to 'off'
       Serial.begin (9600);  // only requred for debugging
       pinMode(ledPin, OUTPUT);  // initilise the onboard pin 13 LED as an indicator
       pinMode(alarmPinTop, INPUT_PULLUP);     // for PIR at top of stairs initialise the input pin and use the internal restistor
       pinMode(alarmPinBottom, INPUT_PULLUP);  // for PIR at bottom of stairs initialise the input pin and use the internal restistor
       delay (2000); // it takes the sensor 2 seconds to scan the area around it before it can
       //detect infrared presence.

    }

    void loop() {

        if (timeOut+15700 < millis()) {        // idle state - 'breathe' the top and bottom LED to show program is looping
           uint32_t blue = (0, 0, breathe);
           breathe = breathe + change;
           strip.setPixelColor(0, blue);
           strip.setPixelColor(34, blue);
           strip.setPixelColor(35, blue);
           strip.setPixelColor(69, blue);
           strip.setPixelColor(70, blue);
           strip.setPixelColor(104, blue);
           strip.setPixelColor(105, blue);
           strip.setPixelColor(139, blue);
           strip.setPixelColor(140, blue);
           strip.setPixelColor(174, blue);
           strip.setPixelColor(175, blue);
           strip.setPixelColor(209, blue);
           strip.setPixelColor(210, blue);
           strip.setPixelColor(244, blue);
           strip.setPixelColor(245, blue);
           strip.setPixelColor(279, blue);
           strip.setPixelColor(280, blue);
           strip.setPixelColor(314, blue);
           strip.setPixelColor(315, blue);
           strip.setPixelColor(349, blue);
           strip.setPixelColor(350, blue);
           strip.setPixelColor(384, blue);
           strip.setPixelColor(385, blue);
           strip.setPixelColor(419, blue);
           strip.setPixelColor(420, blue);
           strip.setPixelColor(454, blue);
           strip.setPixelColor(455, blue);
           strip.setPixelColor(489, blue);
           strip.setPixelColor(490, blue);
           strip.setPixelColor(524, blue);
           strip.show();
           if (breathe == 100 || breathe == 0) change = -change;      // breathe the LED from 0 = off to 100 = fairly bright
           if (breathe == 100 || breathe == 0); delay (100);           // Pause at beginning and end of each breath
           delay(10);


      }

        alarmValueTop = digitalRead(alarmPinTop);    // Constantly poll the PIR at the top of the stairs
        //Serial.println(alarmPinTop);
        alarmValueBottom = digitalRead(alarmPinBottom);  // Constantly poll the PIR at the bottom of the stairs
        //Serial.println(alarmPinBottom);

        if (alarmValueTop == HIGH && downUp != 2)  {      // the 2nd term allows timeOut to be contantly reset if one lingers at the top of the stairs before decending but will not allow the bottom PIR to reset timeOut as you decend past it.
          timeOut=millis();  // Timestamp when the PIR is triggered.  The LED cycle wil then start.
          downUp = 1;
          //clearStrip();
          topdown();         // lights up the strip from top down
        }
        if (alarmValueBottom == HIGH && downUp != 1)  {    // the 2nd term allows timeOut to be contantly reset if one lingers at the bottom of the stairs before decending but will not allow the top PIR to reset timeOut as you decend past it.
          timeOut=millis();    // Timestamp when the PIR is triggered.  The LED cycle wil then start.
          downUp = 2;
          //clearStrip();
          bottomup();         // lights up the strip from bottom up
        }

        if (timeOut+10000 < millis() && timeOut+15000 < millis()) {    //switch off LED's in the direction of travel.
           if (downUp == 1) {
              colourWipeDown(strip.Color(0, 0, 0), 100); // Off
           }
           if (downUp == 2)  {
            colourWipeUp(strip.Color(0, 0, 0), 100);   // Off
           }
          downUp = 0;

        }
         


    }

    void topdown() {
        Serial.println ("detected top");                  // Helpful debug message
        colourWipeDown(strip.Color(255, 255, 250), 25 );  // Warm White
        //for(int i=0; i<3; i++) {                        // Helpful debug indication flashes led on Arduino board twice
          //digitalWrite(ledPin,HIGH);
          //delay(200);
          //digitalWrite(ledPin,LOW);
          //delay(200);
        //}
    }



    void bottomup() {
        Serial.println ("detected bottom");            // Helpful debug message
        colourWipeUp(strip.Color(255, 255, 250), 25);  // Warm White
        //for(int i=0; i<3; i++) {                     // Helpful debug indication flashes led on Arduino board twice
          //digitalWrite(ledPin,HIGH);
          //delay(200);
          //digitalWrite(ledPin,LOW);
          //delay(200);
        //}
      }

    // Fade light each step strip
    void colourWipeDown(uint32_t c, uint16_t wait) {

      for (uint16_t j = 0; j < 15; j++){
      int start = strip.numPixels()/15 *j;
      Serial.println(j);

            for (uint16_t i = start; i < start + 35; i++){
          strip.setPixelColor(i, c);
            }
             strip.show();
      delay(wait);
      }
    }


    void clearStrip(){
      for (int l=0; l<strip.numPixels(); l++){
        strip.setPixelColor(l, (0,0,0));
      }
     
    }
    // Fade light each step strip
    void colourWipeUp(uint32_t c, uint16_t wait) {
       for (uint16_t j = 15; j > 0; j--){
       int start = strip.numPixels()/15 *j;
       Serial.println(j);
          //start = start-1;
              for (uint16_t i = start; i > start - 35; i--){
                strip.setPixelColor(i-1, c);
             }
              strip.show();
      delay(wait);
      }

    }

     
    [​IMG]
    [​IMG]
     
    Последнее редактирование: 18 апр 2018
    Tomasina нравится это.
  2. vvr

    vvr Инженерище

    здесь эту тему тоже разщёвывали...
     
  3. ИгорьК

    ИгорьК Гуру

    На втором видео товарищ мазохистом работает. Рекомендую применение кримпера - заготавливать куски ленты с соединениями в уютном месте до монтажа.
     
  4. parovoZZ

    parovoZZ Гуру

    БРЕХНЯ. Человек с лестницы сошел - лестница горит. Чего она ждёт? Потом раз - и во тьму погрузилось всё. Где логика?
     
  5. ИгорьК

    ИгорьК Гуру

    А зачем?
     
  6. parovoZZ

    parovoZZ Гуру

    Вместо того, чтобы в МК грузить отборный функционал, вы в него грузите отборный говнокод. Данную лестницу можно сделать на пике за пару рублей.
     
  7. ИгорьК

    ИгорьК Гуру

    Товарищ! Вы не заражаетесь чем-то вредоносным?
    Можете написать - напишите! А не рассказывайте что можете.
     
    Tomasina нравится это.
  8. nyxus91

    nyxus91 Нуб

    Добрый день. Подскажите пожалуйста как будет выглядеть скетч если датчики не PIR, а ультразвуковые HC-SR04 использовать. читал читал так и не могу понять куда и что вставлять.спасибо
     
  9. parovoZZ

    parovoZZ Гуру

    Если нет цели замерять расстояние, то ничсего не меняешь - вместо пира вешаешь HC-SR04. Тока смари, чтоб активные уровни совпадали на выходах. Ну это тебе как домашнее задание, а то привыкли на блюдце да с каемочкой.
     
  10. nyxus91

    nyxus91 Нуб

    Просто вместо пира повесить датчик нечего не меняя в скейче? а уровни как посмотреть?
     
  11. parovoZZ

    parovoZZ Гуру

    уровни чего?
     
  12. nyxus91

    nyxus91 Нуб

    ну выше комментарий смотри чтобы выходные уровни совпадали на выходах..это как?
     
  13. Airbus

    Airbus Радиохулиган Модератор

    Он тебя дурит.Он не в теме.Сначала отправить импульс потом замерить его длительность.Потом разделить на 59 получив сантиметры.А потом да также как и с PIR датчиками.Включать и выключать в зависимости от дистанции.
     
  14. parovoZZ

    parovoZZ Гуру

    на выход таймера повесить и делов.
     
  15. Airbus

    Airbus Радиохулиган Модератор

    Не надо никого вешать.Есть команда pulselen.
     
  16. parovoZZ

    parovoZZ Гуру

    Зачем все эти команды, если задача решается тупо аппаратно, не отвлекая проц от текущих дел???
     
  17. nyxus91

    nyxus91 Нуб

    Да ппц я нечего не понял... что делать? в скейче надо что то менять?))
     
  18. Airbus

    Airbus Радиохулиган Модератор

    Аппаратно это на 555 чтоли?И какие еще дела могут быть кроме подсветки?Проигрывание рингтонов?
     
  19. Airbus

    Airbus Радиохулиган Модератор

    Если с УЗ дальномером то да.
     
  20. nyxus91

    nyxus91 Нуб

    Вот вопрос заключается что нужно поменять что бы работало от УЗ дальномера?
    вот нашел на уз код
    Код (C++):
    const int ledPin = 6; // Цифровой выход светодиода
    const int trigPin = 5; // Цифровой выход для подключения TRIG
    const int echoPin = 4; // Цифровой выход для подключения ECHO
    const int ledOnTime = 1000; // Время, в течение которого светодиод остается включенным, после обнаружения движения (в миллисекундах, 1000 мс = 1 с)
    const int trigDistance = 20; // Расстояние (и меньшее значение) при котором срабатывает датчик (в сантиметрах)
    int duration;
    int distance;
    void setup() {
      pinMode(ledPin, OUTPUT);
      pinMode(trigPin, OUTPUT);
      pinMode(echoPin, INPUT);
    }
    void loop() {
      digitalWrite(trigPin, LOW);
      digitalWrite(trigPin, HIGH);
      delay(1);
      digitalWrite(trigPin, LOW);
      duration = pulseIn(echoPin, HIGH);
      distance = duration * 0.034 / 2;
      if (distance <= trigDistance) {
        digitalWrite(ledPin, HIGH);
        delay(ledOnTime);
        digitalWrite(ledPin, LOW);
      }
      delay(100);
    }
    а куда и как вставить незнаю