roboforum.ru

Технический форум по робототехнике.

ИК-дальномер Sharp GP2Y0A02 (20-120см)

Re: ИК-дальномер Sharp GP2Y0A02 (20-120см)

Сообщение -= Александр =- » 17 авг 2009, 13:10

Кстати я слышал что можно этот дальномер через линзу ставить - для изменения диапазона измерения. Но попробовать не с чем... Может у кого есть очки? А то у меня только линзы всякие - но они уж больно могучие...
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич

Re: ИК-дальномер Sharp GP2Y0A02 (20-120см)

Сообщение space » 17 авг 2009, 13:30

SkyStorm писал(а):Маладец!!! Давно собирался это сделать но все руки не доходили.
Сделай серию измерений м шагом 5 см и выложи пожалуста суда в след. виде
Реальное растояние; Расчитанное растояние; Значение ADC
Я беру на себя обязательство оформить это в Вике по типу странички [[GP2D12]].
И еще я не понял какие у тебя проблеммы с функцией Sharp_d12???

не компилируется. указывая на строчку где есть название Sharp_d12
Реальное растояние; Расчитанное растояние; Значение ADCэто вот эти три значение вывести на дисплей:
Код: Выделить всёРазвернуть
Vout = Vout1 + B -АДЦ
Range1 = M / Vout-по идее реальное расстояние
Range = Range1 - K -и рассчитанное

разъясни на счёт серии изменений, а то мне ни со всем понятно
Аватара пользователя
space
 
Сообщения: 565
Зарегистрирован: 17 июн 2007, 23:44
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич

Re: ИК-дальномер Sharp GP2Y0A02 (20-120см)

Сообщение SkyStorm » 17 авг 2009, 13:40

1. Sharp_d12 - Это функция. В хелпе смотри "Declare Function".
В начале программы ее нужно задекларировать
Код: Выделить всёРазвернуть
Declare Function Sharp_d12(byval Adc_chanel As Byte) As Byte

В конце вставить код функции, а в теле вызывать.

2. Береш растояние 15см делаеш измерение, потом 20см, потом 25, и так с шагом 5см до 120см.
Реальное растояние; Расчитанное растояние; Значение ADC
Никто кроме нас!!!
4Robots.ru - Все для роботов!
Аватара пользователя
SkyStorm
 
Сообщения: 2687
Зарегистрирован: 05 фев 2008, 15:33
Откуда: St. Petersburg - Moscow
Skype: SkyStorm77
ФИО: Костюк Константин Вячеславович

Re: ИК-дальномер Sharp GP2Y0A02 (20-120см)

Сообщение space » 17 авг 2009, 13:50

Короче вот так:
Изображение
Ток не обещаю, что будет это быстро, но сделаю

А с функцией так:
Код: Выделить всёРазвернуть
$regfile = "m16def.dat"                                     
$crystal = 16000000                                         


Declare Function Sharp_d12(byval Adc_chanel As Byte) As Byte
Const M = 10000
Const K = 0
Const B = -40
Local Range As Word , Vout As Word , Vout1 As Word
   Start Adc : Vout = Getadc(adc_chanel)                   
   Stop Adc
   If Vout < 160 Then                                       
     Sharp_d12 = 0
   Else
   Vout1 = Vout + B                                                                                 ' M/(Vout+B)
   Sharp_d12 = Range - K                                   
   End If
End Function

Исправил как ты сказал, теперь ошибка в переменных и на строчке с АДЦ
Аватара пользователя
space
 
Сообщения: 565
Зарегистрирован: 17 июн 2007, 23:44
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич

Re: ИК-дальномер Sharp GP2Y0A02 (20-120см)

Сообщение SkyStorm » 17 авг 2009, 14:01

Код: Выделить всёРазвернуть
'Начало программы
'Обьявление функции
Declare Function Sharp_d12(byval Adc_chanel As Byte) As Byte
'Тело программы
'Вызов Sharp_d12

'Тело функции
Function Sharp_d12(byval Adc_chanel As Byte) As Byte
...
End Function


В примерах же все расписано, тебе что Хелп посмотреть западло???
Никто кроме нас!!!
4Robots.ru - Все для роботов!
Аватара пользователя
SkyStorm
 
Сообщения: 2687
Зарегистрирован: 05 фев 2008, 15:33
Откуда: St. Petersburg - Moscow
Skype: SkyStorm77
ФИО: Костюк Константин Вячеславович

Re: ИК-дальномер Sharp GP2Y0A02 (20-120см)

Сообщение space » 17 авг 2009, 14:04

ды нет :sorry:
Аватара пользователя
space
 
Сообщения: 565
Зарегистрирован: 17 июн 2007, 23:44
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич

Re: ИК-дальномер Sharp GP2Y0A02 (20-120см)

Сообщение SkyStorm » 17 авг 2009, 14:07

Что то я по поводу 5 см погоречился, давай с шагом 10 см. Ок?!?!? )))
Никто кроме нас!!!
4Robots.ru - Все для роботов!
Аватара пользователя
SkyStorm
 
Сообщения: 2687
Зарегистрирован: 05 фев 2008, 15:33
Откуда: St. Petersburg - Moscow
Skype: SkyStorm77
ФИО: Костюк Константин Вячеславович

Re: ИК-дальномер Sharp GP2Y0A02 (20-120см)

Сообщение space » 17 авг 2009, 14:18

хорошо. ща пока с функцией малость увлёкся :)
Аватара пользователя
space
 
Сообщения: 565
Зарегистрирован: 17 июн 2007, 23:44
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич

Re: ИК-дальномер Sharp GP2Y0A02 (20-120см)

Сообщение space » 18 авг 2009, 00:02

Код: Выделить всёРазвернуть
M=20000; B=-75; K=0
V    R     Real
971 22.32    20
774 28.61    30
601 38.02    40
477 49.75    50
410 59.70    60
358 70.67    70
307 79.74    80
284 88.51    90
255 102.77   100
246 108.18   110
232 117.83   120

вообщем что-то типо этого. Определяет не всегда точно. Зависит от цвета поверхности. Пробовал на одном и томже расстояние два разных по цвету предмета. Результат показывал разный. После 120 не стал уже делать. Там ошибается вообще по крупному. Норм только где то до 70-80 см. Пришлось ещё условие добавить. Мож ещё с функцией попробую сделать.
Код: Выделить всёРазвернуть
'-------------------------------------------------------------------------------
$regfile = "m16def.Dat"                                     ' мк ATmega16
$crystal = 16000000                                         ' частота кварца 16мГц
'-------------------------------------------------------------------------------

'-------------------------------- LCD-дисплей-----------------------------------
$lib "lcd4.lbx"                                             'используем 4-х битное подключение дисплея с помощью альтернативной библиотеки
'Библиотека lcd4.lbx использует следующее подключение:
Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.2 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7
Config Lcd = 16 * 2                                         'используем дисплей на 2 строчки по 16 знакомест в каждой
'-------------------------------------------------------------------------------

'----------------------------Константы и переменные-----------------------------
'Формула: R=M/(V+B)-K
Const M = 20000
Const K = 0
Const B = -75

Dim Range As Word , Range1 As Single , Vout As Word , Vout1 As Word , M1 As Word
'-------------------------------------------------------------------------------

'--------------------------------Настройка ADC----------------------------------
Config Adc = Single , Prescaler = Auto , Reference = Internal
'-------------------------------------------------------------------------------

'---------------------------------------------   ----------------------------------
'Далее перед вывод информации на дисплее отключаем курсор,
'если этого не сделать он будет мешаться в виде такого
' знака "_". И делаем очистку с помощью команды "Cls".
Cursor Off                                                  'отключаем отображение курсора на LCD
Cls                                                         'очитка дисплея

Locate 1 , 5                                                'позиция курсора(1-строка, 5-начало надписи с 5-ого знакоместа)
Lcd "RoboHome"                                              'выводим надпись
Locate 2 , 4                                                ' позиция курсора(2-строка, 4-начало надписи с 4-ого знакоместа)
Lcd "Sharp test"                                            'выводим надпись
Waitms 2                                                    'задержка 2 секунды
'-------------------------------------------------------------------------------

'Начало цикла основной программы

Do
Start Adc : Vout1 = Getadc(0)                               'Запускаем ADC на PA0
Stop Adc                                                    'Останавливаем ADC
Vout = Vout1 + B
If Vout < 325 Then : M1 = M - 1500 : Else : M1 = M : End If
Range1 = M1 / Vout
Range = Range1 - K

Cls                                                         'очитка дисплея
Locate 1 , 1                                                ' позиция курсора
Lcd "Real=" ; Range ; "cm" ; " M1=" ; M1 ; ""                   'выводим результат преобразования на ЖК
Locate 2 , 1                                                ' позиция курсора
Lcd "Vout=" ; Vout1 ; " " ; "R=" ; Range1 ; ""              'выводим результат преобразования на ЖК
Waitms 100                                                  ' зедержка 0,1 секунды
Loop
End


Добавлено спустя 1 час 6 минут 9 секунд:
Вопрос про одновременное управление сервой и шарпом вынесен туда.
<Digit>
Аватара пользователя
space
 
Сообщения: 565
Зарегистрирован: 17 июн 2007, 23:44
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич

Re: ИК-дальномер Sharp GP2Y0A02 (20-120см)

Сообщение EdGull » 18 авг 2009, 07:24

space а у тебя опора какая и из чего опора на AREF?
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Re: ИК-дальномер Sharp GP2Y0A02 (20-120см)

Сообщение space » 18 авг 2009, 12:07

если про ножку на мк, то она вообще не подключена
Аватара пользователя
space
 
Сообщения: 565
Зарегистрирован: 17 июн 2007, 23:44
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич

Re: ИК-дальномер Sharp GP2Y0A02 (20-120см)

Сообщение Digit » 18 авг 2009, 12:23

Ты на внутренней опоре делаешь? В ДШ и аппноутах такая куча рекомендаций, как правильно подключать АЦП...
злой полицейский
Аватара пользователя
Digit
 
Сообщения: 3339
Зарегистрирован: 27 ноя 2004, 00:42
Откуда: совсем Москва
ФИО: Григорий

Re: ИК-дальномер Sharp GP2Y0A02 (20-120см)

Сообщение space » 18 авг 2009, 12:33

Код: Выделить всёРазвернуть
'--------------------------------Настройка ADC----------------------------------
Config Adc = Single , Prescaler = Auto , Reference = Internal
'-------------------------------------------------------------------------------

Получается тогда на INTERNAL – внутренний источник опорного напряжения на 2,56 в.
Аватара пользователя
space
 
Сообщения: 565
Зарегистрирован: 17 июн 2007, 23:44
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич

Re: ИК-дальномер Sharp GP2Y0A02 (20-120см)

Сообщение Digit » 18 авг 2009, 12:46

Вот тут и вот тут читал?
По первой ссылке, например, вот:
Выбор опорного сигнала
Это максимальное напряжение, которое будет взято за максимум при измерениях. Опорное напряжение должно быть как можно стабильней, без помех и колебаний — от этого кардинальным образом зависит точность работы АЦП. Задается он в битах REFS1..0 регистра ADMUX.
[...удалил...]
* REFS1..0 = 11 - внутренний источник опорного напряжения на 2.56 вольт. Честно говоря, качество этого источника мне сильно не понравилось. С ним показания АЦП плавают как говно в проруби. Но если невозможно обеспечить гладкую и стабильную подачу напряжения на AREF или AVCC то прокатит. Кстати, внутренний ИОН подключен к выводу AREF так что можно повесить туда кондер и попробовать его чуть чуть сгладить. Немного, но помогает.

Ну а лучше, канеш, внешнюю опору. Хоть будешь знать, от чего у тебя пляшет...
злой полицейский
Аватара пользователя
Digit
 
Сообщения: 3339
Зарегистрирован: 27 ноя 2004, 00:42
Откуда: совсем Москва
ФИО: Григорий

Re: ИК-дальномер Sharp GP2Y0A02 (20-120см)

Сообщение space » 18 авг 2009, 12:52

Не не читал, но почитаю спасибо.
Аватара пользователя
space
 
Сообщения: 565
Зарегистрирован: 17 июн 2007, 23:44
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич

Пред.След.

Вернуться в Сенсорика

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3