Если темновато и кто-то подошел, плавно включить свет .

Тема в разделе "Arduino & Shields", создана пользователем RE_, 25 окт 2017.

  1. RE_

    RE_ Нуб

    Дано:
    1. Arduino UNO или NANO Китайская - 1шт или другая, куда скетч влезет.
    2. GY-30 Датчик освещенности - 1шт (А4 и А5 // выходы SDA и SCL (Add - в земле))
    3. HC-SR04 Датчик измерения расстояния - 1шт (8,9// выходы для Trig и Echo)
    4. Светодиодик, работающий, 1шт (как то жив на 5 вольтах)

    Логика (хотелось бы): Если светло, более 500lx думает датчик GY-30, то просто ждем. Если темно в помещении, наже 500lx думает датчик GY-30, то пусть HC-SR04 измеряет расстояние до объекта и если до объекта менее 90 см, то надо потихоньку-потихоньку включить светодиодик. А когда становится больше то так же плавно выключить.
    Если резко стало светло более 500lx думает датчик GY-30, вырубить светодиод и не измерять расстояние пока опять не потемнеет.

    Помогите разобраться и написать код. Вот что я осилил, но все идет не так как то.

    Код (C++):

    #include <Wire.h>
    #include <BH1750FVI.h>
    #include <Ultrasonic.h>
    BH1750FVI myBH1750;
    Ultrasonic ultrasonic(8,9); // выходы для Trig и Echo

    #define LED_PIN 3
    void setup()
    {
    Serial.begin(9600);
    pinMode(LED_PIN, OUTPUT);
    }
    void loop()

    {
    delay(1000);
    if (myBH1750.readLightLevel() >500 )
    {
    Serial.print(ultrasonic.distanceRead(CM)); // выводим расстояние в сантиметрах
    Serial.println("cm"); // выводим надпись "cm"

    if (ultrasonic.distanceRead(CM) <30)
    {

    Serial.print("Ярко: ");
    Serial.print(myBH1750.readLightLevel());
    Serial.println();
    for(int i=255;i>=0;i--)
    {

    analogWrite(LED_PIN, i);
    analogWrite(LED_PIN, LOW);
    //delay(5); // ставим задержку для эффекта
    }

    }
    else {
    Serial.print("Тускло: ");
    Serial.print(myBH1750.readLightLevel());
    Serial.println();
    for(int i=0;i<=255;i++)
    {

    analogWrite(LED_PIN, i);
    analogWrite(LED_PIN, HIGH);

    }

    }
    }

    }
     
     
    Последнее редактирование: 25 окт 2017
  2. ORLENOK

    ORLENOK Гик

    Нужно чтобы срабатывало, когда меньше 500, а сами пишите проверку, что больше.
    Собственно и остальные условия у вас написаны наоборот
    а этим кодом вы проверяете, что меньше 30 см и гасите светодиод, как бы постепенно, но ещё зачем то дописали analogWrite(LED_PIN, LOW);
     
  3. RE_

    RE_ Нуб

    Спасибо, это я заметил, просто уже так наэкспериментировался, что начал путить... Я поправил.
    Код (C++):
    #include <Wire.h>
    #include <BH1750FVI.h>
    #include <Ultrasonic.h>
    BH1750FVI myBH1750;
    Ultrasonic ultrasonic(8,9); // выходы для Trig и Echo

    #define LED_PIN 3
    void setup()
    {
      Serial.begin(9600);
      pinMode(LED_PIN, OUTPUT);
      }
    void loop()
     
      {
        delay(1000);
      if (myBH1750.readLightLevel() <500 )
      {
        Serial.print(ultrasonic.distanceRead(CM)); // выводим расстояние в сантиметрах
        Serial.println("cm"); // выводим надпись "cm"
         
        if (ultrasonic.distanceRead(CM) <30)    
          {
       
                       Serial.print("Ярко: ");
                       Serial.print(myBH1750.readLightLevel());
                       Serial.println();
                      for(int i=255;i>=0;i--)
                   {
                     
                       analogWrite(LED_PIN, i);
                       delay(5); // ставим задержку для эффекта
                   }
     
        }
        else {
                       Serial.print("Тускло: ");
                       Serial.print(myBH1750.readLightLevel());
                       Serial.println();
                        for(int i=0;i<=255;i++)
                {
                     
                       analogWrite(LED_PIN, i);
                       delay(5);
                }

        }
          }
    }
    но всерано работает неправильно. когда темно, то светит как маяк, если осветить когда включен светодиод то не гаснет сам тухнет не до конца, а так, пульсирует как бы.
    Насчет последнего, пытался зафиксировать как то состояние.
     
  4. ORLENOK

    ORLENOK Гик

    В этом коде вы гасите светодиод. Если добавить условие выше, то вы его гасите, когда расстояние меньше 30см.
    Вообщем, циклы местами поменять нужно. Только циклы
     
  5. ostrov

    ostrov Гуру

    Заголовок звучит как начало триллера.