Помогите с дальномером HC-SR04

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Максим_LaLochka, 5 сен 2015.

  1. Вооообщем купил я дальномер, все работает но через день начались проблемы, дальномер показывает
    дистанцию и вдруг показывает ноль, я не знаю что делать жду 3 минуты потом все нормально. Оказываеться дело в том что дальномер постоянно показывает ноль когда значение стоит определенно и не изменяёться или когда значение слишком большое допусти 600. Помогите не знаю что делать[​IMG][/URL][/IMG]
     

    Вложения:

  2. Unixon

    Unixon Оракул Модератор

    Запоминайте последнее ненулевое значение.
     
  3. У меня автономная машина, мне надо чтоб всегда работал и показывал значения
     
  4. Unixon

    Unixon Оракул Модератор

    У вас выбора нет. Если датчик сбоит, все равно что-то делать нужно. Учитывая условия возврата нулевого значения, запоминать последнее корректное значение вполне себе решение.

    Можете дальномер поменять на более умный или зрячий.
    Дублирующий сенсор рядом поставить - другой ультразвуковой, ИК, лазерный дальномер, ...
    Расстояние измерять всеми тремя коллегиально.
     
  5. Tomasina

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

    Попробуй с этой библиотекой: https://code.google.com/p/arduino-new-ping/
    А вообще большая часть партии этих сенсоров с ebay/ali/dx за последние полгода-год в результате оптимизации схемы китайцами имеет аппаратную проблему - они иногда виснут и оживают только при прикасании пальцем к корпусу или сбросе питания.
     
  6. Спасибо большое, а с амперки не будет такой проблемы?
     
  7. user999

    user999 Гик

    Добрый день! Что бы не создавать новую тему, напишу здесь.
    Подключил дальномер SR04. Показывает расстояние только до 40-43 см. (должен до 450) Попробовал разные поверхности, попробовал разные скетчи, пробовал уно и мегу. Одно и то же.

    Что может быть?

    Последний скетч такой:
    Код (C++):
    const int trigPin = 9;
    const int echoPin = 8;

    void setup()  {
      pinMode(trigPin, OUTPUT); // триггер - выходной пин
      pinMode(echoPin, INPUT); // эхо - входной
      Serial.begin(9600); // инициализация послед. порта
    }

    void loop()  {
      long distance = getDistance(); // получаем дистанцию с датчика
      Serial.println(distance); // выводим в последовательный порт
      delay(100);
    }

    // Определение дистанции до объекта в см
    long getDistance() {
      long distacne_cm = getEchoTiming() * 1.7 * 0.01;
      return distacne_cm;
    }

    // Определение времени задержки
    long getEchoTiming() {
      digitalWrite(trigPin, LOW);
      delayMicroseconds(2);
      digitalWrite(trigPin, HIGH); // генерируем импульс запуска
      delayMicroseconds(10);
      digitalWrite(trigPin, LOW);
      // определение на пине echoPin длительности уровня HIGH, мксек:
      long duration = pulseIn(echoPin, HIGH);
      return duration;
    }
     
  8. Onkel

    Onkel Гуру

    совет верный, но добавлю - фильтрация по медианному фильтру хорошо помогает.
     
  9. user999

    user999 Гик

    Не совсем понял. У меня нет нулевых показаний, просто если препятствие передвигать далее 40-43 см. то показания так и остаются 43
     
  10. Onkel

    Onkel Гуру

    Ага, я отвечал не на ваш вопрос.
    А по вашему вопросу- хорошо бы посмотреть, обновлюятся ли показания или застревают на 43, не обновляясь. Импульсы echo видите?
     
  11. user999

    user999 Гик

    Обновляются. Работает точно, по линейке проверял. Но как только препятствие в виде коробки или иного предмета отодвигаешь более чем на 45 см. показания обновляются, но скачат в пределах 40-43 см. Пробовал с разными поверхностями, думал отражает коряво, но нет. С разными ардуино тоже пробовал
     
  12. Onkel

    Onkel Гуру

    остается с разными датчиками попробовать. Хорошо бы посмотреть сигнал echo на осциллографе, если нет осциллографа- есть программы осциллографа для звуковых карт. Сигнал на карту через делитель подаете и смотрите.