Cветодиод и ультразвуковой датчик

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Azat93, 4 мар 2021.

  1. Azat93

    Azat93 Нуб

    Здравствйте, нужна помощь,. Задумка такова,
    Схема состоит из светодиода и ультразвукового датчика. Чем ближе
    препятствие к датчику, тем меньше горит светодиод.

    Вот схема, [​IMG]

    Вот код программы,
    Код (C++):
    #define Trig 9 //обозначаем порты, к которым подключили датчик
    #define Echo 8
    #define diod 11 //пин диода
    void setup()
    {
    pinMode(Trig, OUTPUT); //назначаем пин на выход
    pinMode(Echo, INPUT); //назначаем пин на вход
    Serial.begin(9600);
     
    //пин диода
    pinMode(diod, OUTPUT); //назначаем пин на выход
     
    }
    void loop()
    {
    digitalWrite(Trig, HIGH); //посылаем ультразвук
    delayMicroseconds(10); //ждем 10мс
    digitalWrite(Trig, LOW); //отключаем ультразвук
    unsigned int impulse=pulseIn(Echo, HIGH); //с помощью специальной функции
    //принимаем сигнал ультразвука
    unsigned int distance=impulse/58; //и по формуле вычисляем дистанцию
    Serial.println(distance); //выводим дистанцию до объекта
      if (distance <= 255) {
         analogWrite(diod, distance);
      }else {
        analogWrite(diod, 255);
      }
       
      delay(1000); //пауза в 1 секунду
    }
    Получается проблема в том, когда препятствие ближе к датчику, то светодиод просто горит, т.е. должен гореть меньше, но получается все наоборот.
     
  2. Рокки1945

    Рокки1945 Гуру

    а в сериал какие значения выводятся - при приближении?
     
  3. parovoZZ

    parovoZZ Гуру

    меньше - это мера длины или количества. Применительно к светодиоду это что значит?
     
  4. parovoZZ

    parovoZZ Гуру

  5. Azat93

    Azat93 Нуб

    Яркость светодиода уменьшается
     
  6. Azat93

    Azat93 Нуб

    [​IMG]
     
  7. Рокки1945

    Рокки1945 Гуру

    а максимальное значение переменной дистанция какое?
     
  8. Azat93

    Azat93 Нуб

    Если по коду, то до 255
     
  9. Рокки1945

    Рокки1945 Гуру

    попробуй вот с этой
    Код (C++):
    #include <Ultrasonic.h>    // подключаем библиотеку Ultrasonic
    Ultrasonic ultrasonic(8,9); // назначаем выходы для Trig и Echo
    void setup() {
      Serial.begin(9600);        // подключаем монитор порта
      pinMode (11, OUTPUT); // подключаем к пину светодиод
      pinMode (12, OUTPUT); // подключаем к пину светодиод
    }

    void loop () {
      int dist = ultrasonic.Ranging(CM);
      Serial.print(dist);     // выводим расстояние в сантиметрах
      Serial.println(" cm");

      // переключаем цвета светодиода
      if (dist < 50) {digitalWrite(12,0); digitalWrite(11,1);}
      if (dist < 50) {digitalWrite(12,1); digitalWrite(11,0);}

      delay(100);
    }
     
  10. Azat93

    Azat93 Нуб

    Сейчас попробую)
     
  11. Рокки1945

    Рокки1945 Гуру

    только сделайте под свой код с этой библиотекой
     
  12. Azat93

    Azat93 Нуб

    в tinkercad нету такой библиотеки
     
  13. Рокки1945

    Рокки1945 Гуру

    а просто шим уменьшай-прибавляй - попробуй отладить этот участок
    именно с этого пина и через эту цепочку резистор-диод - посмотри через 100 млс
     
  14. akl

    akl Гуру

    цифры то эти соответствуют дистанции до препятствия?

    кстати если пытаешься разглядеть разницу в яркости светодиода между analogWrite(diod, 40); и analogWrite(diod, 24); то может ничего не получиться, т.к. у глаза чувтсвительность логарифмическая.
     
    issaom нравится это.
  15. Рокки1945

    Рокки1945 Гуру

    А вот это ещё раз можно поподробней - тобишь светодиод при удалении затухает?
     
  16. Airbus

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

    А так?
    Код (Text):
    #define Trig 9 //обозначаем порты, к которым подключили датчик
    #define Echo 8
    #define diod 11 //пин диода
    void setup()
    {
    pinMode(Trig, OUTPUT); //назначаем пин на выход
    pinMode(Echo, INPUT); //назначаем пин на вход
    Serial.begin(9600);
    //пин диода
    pinMode(diod, OUTPUT); //назначаем пин на выход
    }
    void loop()
    {
    digitalWrite(Trig, HIGH); //посылаем ультразвук
    delayMicroseconds(10); //ждем 10мс
    digitalWrite(Trig, LOW); //отключаем ультразвук
    unsigned int impulse=pulseIn(Echo, HIGH); //с помощью специальной функции
    //принимаем сигнал ультразвука
    unsigned int distance=impulse/58; //и по формуле вычисляем дистанцию
    Serial.println(distance); //выводим дистанцию до объекта
      if (distance <= 255) {
         analogWrite(diod, (255-distance));
        }
     
      delay(1000); //пауза в 1 секунду
    }
     
    Рокки1945 и Azat93 нравится это.
  17. Azat93

    Azat93 Нуб

    Заработало, спасибо за помощь
     
  18. Рокки1945

    Рокки1945 Гуру

    я не хрен. не понял - коэффициент заполнения шим обратно пропорционален расстоянию - как так?
     
  19. parovoZZ

    parovoZZ Гуру

    От схемотехники зависит.
     
  20. Рокки1945

    Рокки1945 Гуру

    По коду у воздушного баса - analogWrite(diod, (255-distance)) если вычисленная дистанция менее 255 - допустим 100;
    получаем 155 значение ШИМ - а ежели дистанция = 10 - значение ШИМ 245...
    Я же его спросил
    Воздушный ещё елсе убрал - но смысл то ...