Конвертирование получаемых данных с дальномера Sharp GP2Y0A21 (10-80cm) в сантиметры
- Войдите на сайт для отправки комментариев
Чт, 05/01/2012 - 18:37
// 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); }
Спасибо. Формула действительно неочевидная. А насколько точны и стабильны возвращаемые результаты на практике?
Все подобранные константы могут варьироваться для разных датчиков. .. .
Эти параметры подходят для вышеуказанного ИРдатчика идеально, погрешность +/-2-3см.
?При выводе на экран окончательного результата о расстоянии, иногда бывают скачки (шумы?). .. .
не очень нравится такая ситуация. .. .что делать? откуда беруться?
Может ли Мне кто-то рассказать(личный опыт) о поведении данных с датчика: в закрытом помещении vs улица,
солнечный день vs пасмурно vs ночь, туман и т.д.
Необходимо ли коррекция? с помощью фотоэлемента, термистора, датчика влажности. .. .
Когдато читал об этих датчиках. Для них есть библиотека: 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
Результат с датчиков нелинеен, но формула в библиотеке линеаризует значения
// Попробывал библиотеку:
#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см
//В чем проблема?