Датчик VL6180 (Troyka-модуль) не стабильная работа

Тема в разделе "Arduino & Shields", создана пользователем Александр1985, 16 янв 2018.

  1. Добрый день.
    Подключил
    Датчик приближения и освещённости VL6180 (Troyka-модуль)
    все по схеме.
    Использую даже Ваш скетч.
    Расстояние постоянно скачет на 2-3 мм при неподвижном обьекте!
    Освещенность нормальная использую простые плоские не прозрачные тела.
     

    Вложения:

    • distance.png
      distance.png
      Размер файла:
      82,5 КБ
      Просмотров:
      759
  2. Толик Иванов

    Толик Иванов Administrator Администратор

    Добрый день!

    Проверю на своем датчике и сообщу.
     
  3. SergeiL

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

    А по-моему, в норме все. Нужно же усреднять.
    По спеке так и должно быть. См. раздел 4. Только шум - два миллиметра.
     
  4. Ок, если шум подскажите как подавить. Мне эти миллиметры важны - брал этот датчик именно как самый точный из Ардуиновских, да и 39 - 45 мм великоват как-то шум...
     
  5. SergeiL

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

    Простейший вариант - Среднее арифметическое!

    Для проверки можно как то так, с delay():
    Код (C++):
    #define ACC_COUNT 20    // Создадим костанту количества измерений, потом ее можно будет менять

    void setup() {
      // put your setup code here, to run once:
      ;
    }

    void loop()
    {
      uint16_t  val = 0;                  // переменная для вывода
                         
      static uint32_t   val_acc = 0 ;      // статические переменные для  среднего и значения и счетчика
      static uint16_t   counter = 0;

      val_acc += <здесь прочитать значение расстояния>;     // прочитаем и добавим новое значение
      counter++;                             // увеличим счетчик считывания для средего арифметического

      if (counter == ACC_COUNT)              // если считали нужное кол-во
      {
        val = (uint16_t) (val_acc / ACC_COUNT);             // получим среднее

        if ( (val_acc % ACC_COUNT) >= (ACC_COUNT/2) )   // если остаток от деления больше половины делителя
        {
          val++;                    // увеличим результат на единицу
        }

        val_acc=0;                    // обнулим переменные для  среднего и значения и счетчика
        counter=0;

        Serial.print("Distance = ");          // выведем значение "val" в порт.
        Serial.println(val);
      }
      else
        delay(50);
    }
    Должно работать, но я не проверял, не компилировал и не запускал, описки могут присутствовать. :)
     
    Последнее редактирование: 16 янв 2018
    Толик Иванов и arkadyf нравится это.
  6. Толик Иванов

    Толик Иванов Administrator Администратор

    Проверил на своем датчике и тоже получил похожий разброс. Среднее арифметическое по нескольким показателям , самый простой вариант фильтра подобных шумов.
     
  7. DIYMan

    DIYMan Guest

    Нормальные показатели, учитывая то, что сам датчик шумит в пределах 2мм. Усредняйте блоками семплов по 10 штук, например.
     
  8. b707

    b707 Гуру

    Если важны миллиметры, нужно брать датчик с точностью, как минимум, на порядок выше - десятые доли. А с датчика с шумом в 2мм вы надежного результата никаким усреднением не получите.
     
    sdfg, arkadyf и DIYMan нравится это.
  9. DIYMan

    DIYMan Guest

    Надёжного - нет, усреднённый - да. Может, ТС достаточно усреднённых показаний, кто знает? ;)
     
  10. ARDUIN-щик

    ARDUIN-щик Гик

    Никто, похоже что и сам ТС :)
     
  11. Нет, усредненный не устроит. К сожалению, данный факт выяснился уже после приобретения. В рекламном ролике про шумы ничего не сказано..
     
  12. SergeiL

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

    А почему не устроит? Это же шумоподавитель, как спрашивали.
    Вы бы описали, где его хотите использовать, может и подсказали бы что лучше.
     
  13. Не понял в чем там шумоподавление состоит...
    Задача: считать пластиковые стаканчики в пачке. - рассчитывал считать по кромке стаканчика.
    У стандартного 200-грамового это кромка 1.5 - 2мм,
     
    sdfg нравится это.
  14. Программа НЕ работает, к сожалению.. Вы подскажите идею пжлст.
    Может считывать с датчика напрямую сигнал как-то можно. Я использую библиотеку производителся - что внутри ее твориться не вижу
     
  15. sdfg

    sdfg Гик

    У этого датчика максимальная точность 2 мм - если вам нужна больше нужно искать другой датчик или другой вариант решения этой задачи.
     
  16. sdfg

    sdfg Гик

     
  17. Толик Иванов

    Толик Иванов Administrator Администратор

    Если по какой-то причине вас не устраивает усредненные значения и датчик в целом, вы можете его вернуть в исправном состоянии в течении 2-х недель с момента приобретения.
     
  18. Причина одна - не соответствие реальной работы заявленным Вами, как продавцом параметрам "миллиметровая точность в диапазоне от 0 до 100 мм." Но я собственно не ищу виноватых, мне бы задачу решить... Программно повысить точность возможно, хотя бы в самых малых диапазонах расстояний?
     
  19. DIYMan

    DIYMan Guest

    Нет, ибо есть аппаратные ограничения. Точность вы не повысите, усреднённые значения - это не повышение точности. Точность у датчика - плюс/минус 2 мм.
     
  20. Толик Иванов

    Толик Иванов Administrator Администратор

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