Конвертирование получаемых данных с дальномера Sharp GP2Y0A21 (10-80cm) в сантиметры

Fibber
Fibber аватар
Offline
Зарегистрирован: 29.12.2011

// Arduino Mega 1280
// Sharp GP2Y0A21 10-80cm
// Конвертирование получаемых данных с дальномера в сантиметры
// автор Fibber a.fedukin@gmail.com

int irPin = A15;
int currentDist = 0;
int distMetr = 0;

void setup()
{
  pinMode (irPin, INPUT);
  Serial.begin(9600);
}

void loop()
{
  currentDist = analogRead(irPin);           //данные с датчика
  int i = constrain(currentDist, 40, 650);   //ограничиваем диапазон выдаваемых значений
  int z = (6787/(i-3))-4;                    //невероятная формула (Интернет)
  int distMetr = constrain(z, 10, 80);       //задаем ограничения по реальному диапазону
                                             //во избежании ошибочных данных
  
  Serial.println(distMetr);                  //вывод на экран для наглядности

  
 delay(500);
}
  
polk
Offline
Зарегистрирован: 13.03.2011

Спасибо. Формула действительно неочевидная. А насколько точны и стабильны возвращаемые результаты на практике?

Fibber
Fibber аватар
Offline
Зарегистрирован: 29.12.2011

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

Эти параметры подходят для вышеуказанного ИРдатчика идеально, погрешность +/-2-3см.

?При выводе на экран окончательного результата о расстоянии, иногда бывают скачки (шумы?). .. .

не очень нравится такая ситуация. .. .что делать? откуда беруться?

Может ли Мне кто-то рассказать(личный опыт)  о поведении данных с датчика: в закрытом помещении vs улица,

солнечный день vs пасмурно vs ночь, туман  и т.д.

Необходимо ли коррекция? с помощью фотоэлемента, термистора, датчика влажности. .. .

 

Diemon
Offline
Зарегистрирован: 18.11.2011

 Когдато читал об этих датчиках. Для них есть библиотека: robot-develop.org/archives/1043, ну и про сами датчики roboforum.ru/wiki/%D0%98%D0%9A-%D0%B4%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC%D0%B5%D1%80%D1%8B_SHARP

Результат с датчиков нелинеен, но формула в библиотеке линеаризует значения

Fibber
Fibber аватар
Offline
Зарегистрирован: 29.12.2011

// Попробывал библиотеку:

 

#include <Sharp.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

const int distPin = A15;

int distSensor = 0;

LiquidCrystal_I2C lcd(0x27,16,2); 
static VSharp distSens(distPin,GP2Y0A21YK0F);  //у Меня написано на датчике SHARP 2Y0A21 F 08

void setup()
{
  lcd.init();                      // initialize the lcd 
  pinMode (distPin, INPUT);
  
  lcd.backlight();
}

void loop()
{
    lcd.setCursor(2, 0);            
    distSensor=distSens.GetDistanceIR();
    lcd.print(distSensor);    // Print a message to the LCD.
    delay (150);
    lcd.clear();              // clear the screen
}

// Выводит на экран что типо 15 - когда больше 80см и 12 - примерно 10см

//В чем проблема?