вопрос по подключению датчиков
- Войдите на сайт для отправки комментариев
Пт, 24/02/2012 - 19:59
Всем доброго вечера! Подскажите, пожалуйста, в чем причина: подключаю к Arduino Mega через IO Shild датчики SHARP GP2Y0A02YK0F (датчик расстояния) и ИК детектор SEN0018. Оба они выдают какие-то странные данные при запуске программы. Цифры, совершенно не зависящие друг от друга, не имеющие периодичности или цикличности. Правда, дальномер выдает через каждые 2 цифры 0. Это закодированные сигналы? Или неисправные датчики? И Что делать? их 4 штуки таких!
Всем доброго вечера! Подскажите, пожалуйста, в чем причина: подключаю к Arduino Mega через IO Shild датчики SHARP GP2Y0A02YK0F (датчик расстояния) и ИК детектор SEN0018. Оба они выдают какие-то странные данные при запуске программы. Цифры, совершенно не зависящие друг от друга, не имеющие периодичности или цикличности. Правда, дальномер выдает через каждые 2 цифры 0. Это закодированные сигналы? Или неисправные датчики? И Что делать? их 4 штуки таких!
Как подключен SHARP GP2Y0A02YK0F? Какой код пользуете?
ИК детектор SEN0018 - выдает HIGH когда что то движется.
SHARP GP2Y0A02YK0F подключен через аналоговый вход. напрямую к шилду. код из библиотеки среды разработки Arduino. Номера входов не путаю! Перепроверила на 100 раз.
Код:
#include <Servo.h>
//Define Pins
int servoPin = 9;
int distPin = 0;
//Create Servo Object
Servo jeremysServo;
void setup()
{
//Attaches the Servo to our object
jeremysServo.attach(servoPin);
}
void loop()
{
//Read the Distance Sensor and adjust values
int dist = analogRead(distPin);
int pos = map(dist, 0, 1023, 0, 180);
//Turn the servo
jeremysServo.write(pos);
}
ИК детектор выдает 0 и 1, но данных, которые он выдает при работе нет никакого порядка! То есть не выдает строго1 когда что-то видит и 0 - когда не видит
ИК детектор выдает 1 и еще какое то время после того как то что двигалось, уже не двигается..:) Напишите какой код используете для ИК детекторa. SHARP попробуйте с этим кодом:
спасибо, сейчас попробую потестить
выдает нечто странное...
76cm
42cm
0-1cm
91cm
42cm
0-1cm
113cm
43cm
0-1cm
65cm
42cm
0-1cm
76cm
43cm
0-1cm
90cm
41cm
0-1cm
109cm
43cm
0-1cm
64cm
43cm
0-1cm
74cm
42cm
0-1cm
88cm
42cm
0-1cm
107cm
43cm
по идее - то же..
Эх , время идет а ничего не меняется.
Почти уверен что нет подтяжек. Отсюда и бредовые показания .
И если датчик движения цифровой (хрен его знает как сним общаться) , то Шарп точно аналоговый , показания с него можно считывать вольтметром.
нашла еще вариант кода:
int _measure()
{
int val=0, tmp;
for (byte i = 0 ; i < 5 ; ++i) {
val += analogRead(sensorPin);
delay(24);
}
return val/1024.0;
}
void loop() {
float val =_measure();
}
выдает:
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
хорошо, попробую к земле притянуть, так и быть. и вольтметром пометять напряжение. завтра отпишусь. сомневаюсь вообще, что датчик исправен...
Сомневаюсь что оба датчика неисправны.
Ваш IO Shild не имеет подтяжек.
Какой работы вы отнего требуете при таком раскладе.
При подключении кнопок и датчиков всегда ставьте подтяжки.
дальномер один. я вопрос изначально неверно постаавила, прошу прощения. у меня 1 дальномер и 3 ИК. ИК вроде как я сейчас посмотреела работают нормально. просто я забыла про задерхжку в 2 секунды и место не совсем правильное выбирала. жаль, до вольтметра тока завтра доберусь.
>>жаль, до вольтметра тока завтра доберусь.<<
Доберитесь , хотябы , до резистора 4.7 - 20КОм и паяльника.
Показания с шарпа можно читать просто функцией analogRead.
Все примеры программ и библиотеки это преобразование в сантиметры , ну и кое какая фильтрация помех.
когда показания 0-1 значит объект дальше чем видеть SHARP..
Как понимаю в наши ряды присоединилась девушка?:)
Или это гастарбайтер который еще писать правильно не научился?:)
))я не гастарбайтер!!)
но тогда почему числа парами?
0-1cm - и если объект дальше, чем видит sharp, как тогда вообще он его определяет?..
107cm
43cm
это что значит?
Подтяжка установлена ?
Что показывает чтение аналогового порта ?
>>Как понимаю в наши ряды присоединилась девушка?<<
Скорее проездом.
Тех.задание выполнит и забудет это как страшный сон.
Хотя ...
>>и если объект дальше, чем видит sharp, как тогда вообще он его определяет<<
Он его и не определяет.
Просто дальномер должен же как то показывать что в зоне детекции нет отраженного сигнала.
>>Подтяжка установлена ?
Что показывает чтение аналогового порта ? <<
у меня нет ни паяльника ни резистора сейчас) во втором часу ночи я навряд ли их достану где-то( придется на завтра отложить.
может я слишком самоуверенная, но меня терзают смутные догадки, что подтяжка тут ни при чем. мне кажется, дальномер-неадекваша только из-за кода. попробоввала сейчас еще кое-что поменять - показаниия стали плавно нарастать/убывать)
>>Тех.задание выполнит и забудет это как страшный сон.<<
отличный сон. просыпаться не-хо-чу.
>>Просто дальномер должен же как то показывать что в зоне детекции нет отраженного сигнала.<<
тогда почему он падает в цикл с этим отсутствием отраженногго сигнала - ровно через 2 считанных показаниия?
>>у меня нет ни паяльника ни резистора сейчас) во втором часу ночи я навряд ли их достану где-то( придется на завтра отложить. <<
Есть выход.
Включить внутреннюю подтяжку. Хотя у меня они доверия не вызывают.
>>но меня терзают смутные сомнения, что подтяжка тут ни при чем<<
Так всех терзают такие сомнения. Валят все на программу , на железо , на китайцев и т.д .
Я стабильно , раз в месяц , обясняю новичкам что такое подтяжка и зачем она нужна.
>>отличный сон. просыпаться не-хо-чу<<
Это сарказм ?
>>Это сарказм ?<<
не сарказм.
>>Включить внутреннюю подтяжку.<<
что это такое? и с чем его едят..
>>что это такое? и с чем его едят..<<
arduino.ru/Tutorial/DigitalPins
Там есть про встроеные подтягивающие резисторы.
сделала. не меняется результат
>>а если серво вместо светодиода? не вытянет?<<
Непонял.
Зачем ?
Вытянет что ?
подтяжки включаются на портах ввода . На портах вывода они безсмыслены.
Покажите получившуюся программу.
даа-да да всё уже разобралась) вопрос был глуп как и его составительница)
void setup()
{
Serial.begin(9600);
pinMode(8,INPUT);
digitalWrite(8,HIGH);
}
void loop()
{
int volts = analogRead(8); // считываем значение сенсора
Serial.println(volts); // выдаём в порт
delay(100); // ждём
}
именно этот SHARP очень глючная вещь... Он показывает из 10 раз 7-8 правильно... А сколько лет нашей новой участницей?
Здесь на форуме традиция такая - о себе писать, фото выкладывать..:)
>>Здесь на форуме традиция такая - о себе писать, фото выкладывать..:)<<
где традиция? куда писать?.. если сюда напишу - забанят еще!
>>именно этот SHARP очень глючная вещь...<<
а какой тогда не глючный?
>>менно этот SHARP очень глючная вещь<<
Может по тому что разные поверхности имеют разные отражающие свойства ?
Даже одни и теже под разными углами имеют разны коэффициент отражения.
>>Может по тому что разные поверхности имеют разные отражающие свойства ?<<
и это влияет на показания? так отчего всё-таки он чудит?
Да кто ж его знает.
Попробуйте завтра поставить реальный резистор к земле.
Экспериментируйте , для начала , с белым листом бумаги.
хорошо. и вольтметром показания попробую посчитывать...спасибо за Ваши советы!
А каое освещение в помещении ?
Энергосберегайки могут давать завсветку.
По крайней мере TSOPы засвечиваются ими.
пробовала при самом разном освещении...и естественное, и искусственное, и раритет на вольфрамовой пружинке (случайно вышло - в настольной лампе старинной такая осталась, а глаза устали от верхнего света) показания были одинаково-неадекватными.
>>Здесь на форуме традиция такая - о себе писать, фото выкладывать..:)<<
где традиция? куда писать?.. если сюда напишу - забанят еще!
>>именно этот SHARP очень глючная вещь...<<
а какой тогда не глючный?
Традиция на этом форуме! Модератор форума очень приветствует девушек с фотками и рассказом о себе! Не забанят, гарантирую! Ну конечно я даю консультации для начала по e-mail`у.. - romanmastino@gmail.com :)
Что касается самого датчика - не глючный за 85-120$.
Если объект черный, или очень темный - не увидете его.
Изо этого я дополнительно использую PING..
>>Что касается самого датчика - не глючный за 85-120$. <<
можно ссылку? желательно московский сайт
P.S. вот эти датчики очень стабильные: http://www.ebay.com/itm/Arduino-Infrared-Reflectance-Sensor-Sensor-Shiel...
Так вроде это не дальномер а датчик препятствия.
Так вроде это не дальномер а датчик препятствия.
Ну да.. расстояние можно регулировать с помощью потенциометра... от 10 до 100-150 cm. но за то работает как швейцарские часы :)
А не проще ли самому такой собрать ?
Когда то я пытался сделать дальномер на основе TSOPа .
Фишка была в том что ИК светодиод постепенно повышает интенсивность свечения
(циклично увеличивает/уменьшает зону детекции) .
МК опрашивает TSOP , если препятствие зафиксировано то соотносит показания TSOPа с яркостью светодиода в момент обнаружения.
Таким образом определялось расстояние.
Но все это справедливо лишь для сферического куба в вакууме.
Реальные обекты (черные/белые) давали , чуть ли не диаметрально - противоположные , показания.
А не проще ли самому такой собрать ?
nestandart - цена от 7 до 10 $...
А пересылка ? А ждать ?
Цена TSOPа , в любом радиомагазине, 30 -50 р.
Цена четырех светодиодов такая же.
Может лучше УЗ дальномер ?
ждать две недели.. но за то все выглядеть красиво и работает правильно. A не монстр на соплях.. :)
Может лучше УЗ дальномер ?
Играл и с УЗ и с ИР.
УЗ - не "видит" мягких вещей.
ИР - не "видит" темных вещей.
Я на свой робот и то и другое поставил чтобы видел все.:)
А какой код для шарповского дальномера использовали? или не он был?
тот же самый, который писал в вирху
Зашел почитать, оказалось "зашел отписаться". Датчик действительно глючный, без препятствий показывает 18см (иногда прыгает на 13см 21см разово) при поднесении препятствия начинает показывать настоящие цыфры, но не больше 40 см. Подтяжки ничего не дают (показания меняются, глючность нет).