Инфракрасный дальномер

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

  1. asmo

    asmo Нуб

    Подскажите,как мне перевести получаемые измерения в сантиметры.Использую заказанную в вашем магазине модель дальномера - http://amperka.ru/collection/Sensory/product/Infrakrasnyy-dalnomer , заранее благодарю
     
  2. nailxx

    nailxx Официальный Нерд Администратор

    Зависимость расстояния от сигнала приведена в даташите на сенсор. Для аппроксимации кривой можно использовать формулу, приведённую в статье на robotshop:

    D = (A + B×X) / (1 + C×X + D×X^2), где:

    D — расстояние в сантиметрах
    X — сигнал в вольтах (от 0 до 5)
    A = 0.008271
    B = 939.6
    C = -3.398
    D = 17.339
     
  3. Makhonin

    Makhonin Гик

    У
    У меня ничего так не вышло.

    Код (Text):
    #define SENSOR_PIN A5
       
        void setup()
        {
            Serial.begin(9600);
        }
       
        void loop()
        {
            delay(1000);
            int val = analogRead(SENSOR_PIN)*0.0039100684;
            int D = (0.008271+939.6*val)/(1+(-3.398*val)+17.339*val*val);
            Serial.println(D);
        }
     
     
    Сенсор пишет 19 постоянно.
     
  4. aysheka

    aysheka Нерд

    Вот работающий код из проекта.

    Код (Text):
    #define SENSOR_PIN A0
     
    void setup()
    {
        Serial.begin(9600);
    }
     
    void loop()
    {
        delay(1000);
        int value = analogRead(SENSOR_PIN);
        Serial.println(value);
        Serial.println("Distance:");
     
        float distance = getDistance(value);
        Serial.println(distance);
     
    }
     
    float getDistance(int value)
    {
      float vcc = 0.004882812 * value;
      Serial.print("VCC = ");
      Serial.println(vcc);
     
      float a = 0.008271;
      float b = 939.6;
      float c = -3.398;
      float d = 17.339;
     
      float distance =  (a + b*vcc)/(1+c*vcc+d*vcc*vcc);
      return distance;
    }
    UPD: учти, что у сенсора есть мертвая зона < ~15 см, смотри график наряжения в зависимости от расстояния http://sharp-world.com/products/device/lineup/data/pdf/datasheet/gp2y0a02_e.pdf
     
    nailxx нравится это.
  5. Витя

    Витя Гик

    Вы используете целые числа (int), поэтому ничего не получается.
     
    nailxx нравится это.