Получение расстояния от ИК-сенсора
- Войдите на сайт для отправки комментариев
Втр, 10/02/2015 - 22:30
Доброе время суток! Я пока что новичок в ардуино, поэтому прошу сильно не пинать.
В общем, вот моя проблема: для одного проекта был куплен известный ИК-дальномер Sharp http://amperka.ru/product/infrared-range-meter-30 . Да вот только не могу я от него получить нормальное значение. Мне б хотя бы перевести в вольты, используя таблицу из даташита http://www.sharp-world.com/products/device/lineup/data/pdf/datasheet/gp2y0a41sk_e.pdf . Вот мой недокод:
#define SENSOR_PIN A5
void setup()
{
Serial.begin(9600);
}
void loop()
{
delay(1000);
int val = analogRead(SENSOR_PIN);
int l = map(val, 0, 1023, 5, 0); // Вот тут проблемка. Не уверен, что сделал правильно, дабы перевести в вольты
Serial.println(l);
}
Был бы очень признателен, если бы Вы помогли мне с кодом. Желательно, чтобы выдавалось сразу значение в см, если это возможно. Заранее спасибо!
результат будет в милливольтах которые по своей таблице переводить в расстояние
результат будет в милливольтах которые по своей таблице переводить в расстояние
Спасибо! А нельзя ли сделать чтобы было сразу в см или в мм? Было бы очень хорошо!
Еси прописать
, то монитор выдаёт 2233 при 10 сантиметрах, но в даташите при 10 см должно быть 1,23 Вольт. Почему? Если прописать
, то будет тоже не 1,23
Потому что такое значение val считывается функцией analogRead(). А map() только масштабирует диапазон значений 0...1023 в диапазон 0...5000
Тестером проверить что при этих 10см реально на датчике сложно?
float volts = analogRead(sensor)*0.0048828125; // value from sensor * (5/1024)
int distance = 13*pow(volts, -1); // worked out from datasheet graph
Отсюда: http://tinkcore.com/sharp-ir-gp2y0a41-skf/
Жуть. Использовать функцию применяемую с дробными степенями для возведения в -1 степень вместо простого деления? Явно кто-то прикалывался.