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

Тема в разделе "Arduino & Shields", создана пользователем Andrei brest, 6 сен 2016.

  1. Andrei brest

    Andrei brest Нерд

    Привет в сем !
    вот надумал сделать подсветку столешницы в кухне
    взял китайский датчик (HC-SR04) и полевой транзистор
    ну и ко нечто ардуино уно
    замысел такой что когда подходишь к мойке светодиоды включаются
    как только мы отошли светодиоды светиться еще 20 секунд и гаснут
    проблема не могу разобраться с ШИМ хочу чтобы включение происходило плавно

    Код (C++):
    // Подсветка столешницы версия 1.0
    // Начата 18.08.2016
    // Автор Андрей
    //******************************************************************************************************
    int ledPin =13; // подключаем -12в блока питания
    int trigPin = 8; // тригер
    int echoPin = 7; // эхо
    int dist1 = 20; // дистанция срабатывания
    int ledstate = LOW;
    long zaderhka = 20000;  // время работы 20 сек
    unsigned long nahaloMillis = 0;  // начало отсчета времени

    void setup() {

      Serial.begin (9600);  // выводим на экран
      pinMode(trigPin, OUTPUT);
      pinMode(echoPin, INPUT);
    pinMode(13, OUTPUT);
    }

    void loop() {

    long duration;  
    int   cm;
      digitalWrite(trigPin, LOW);
      delayMicroseconds(2);
      digitalWrite(trigPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin, LOW);
      duration = pulseIn(echoPin, HIGH);
      cm = duration / 82;


    unsigned long prohloMillis; //
    if (ledstate==HIGH)   // если светодиод светится
    {
    prohloMillis=millis();
    if(prohloMillis-nahaloMillis>=zaderhka)  //если больше задоного выключаем
    {
        ledstate = LOW;
        nahaloMillis = 0;
        digitalWrite(ledPin,ledstate);
      }
    }
    if( cm<dist1 ){
    nahaloMillis = prohloMillis; // запоминаем время
      ledstate = HIGH;
     
    digitalWrite(13,ledstate);
     
          }
      delay(150);
     
    Serial.print(cm);
      Serial.print(".");
       Serial.println(" cm");
      delay(150);
     
     

    }
     
     
  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    в примерах есть скетч Fade.
     
  3. Andrei brest

    Andrei brest Нерд

    я видел этот пример! я не могу понять как внедрить его в мой проект
    как его использовать
    можите показать как переделать этот Fade чтобы светодиод достиг максимальной яркости и светился так например 30 сек а потом плавно погас
    2. у меня
    Код (C++):
    if( cm<dist1 ){
    nahaloMillis = prohloMillis; // запоминаем время
      ledstate = HIGH;
    digitalWrite(13,ledstate);
    эта функция включается если дист меньше 20 см
    работает и выключается спустя 20 сек
    КАК переделать в ШИМ
    Я прошу наглядный пример.
     
  4. Vad33

    Vad33 Капитан-оригинал

    А что, 13 вывод у ардуино уже с ШИМ ?
     
  5. Andrei brest

    Andrei brest Нерд

    нет я забыл на 9 перейти
    использовал в ходе отлатки
     
  6. Поручик

    Поручик Нерд

    ок. вы его включаете, потом циклом длящимся n-шагов, от n будет зависеть плавность, включаете подсветку.
    потом уже работаете не на ШИМ а просто так

    Код (C++):
    if( cm<dist1 ){
    nahaloMillis = prohloMillis; // запоминаем время
    for (int i = 0; i<102; i++){
    analogWrite(pinLed,i*10);
    }
    ledstate=HIGH;
    digitalWrite(pinLed,ledstate);
     
  7. Andrei brest

    Andrei brest Нерд

    спасибо
    я вставил ваш код но ШИМ не увидел
     
  8. Поручик

    Поручик Нерд

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

    и да. моя ошибка, там диапазон работы не [0..1024] а [0..255].