roboforum.ru

Технический форум по робототехнике.
Текущее время: 30 ноя 2024, 14:51

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 75 ]  На страницу 1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: ИК-дальномер Sharp GP2Y0A02 (20-120см)
СообщениеДобавлено: 15 авг 2009, 05:17 
Не в сети
Аватара пользователя

Зарегистрирован: 17 июн 2007, 23:44
Сообщения: 565
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич
Купил совсем не давно Sharp :) . Решил заняться программной частью. Поискал по форуму и в wiki. Нашёл пару кодов и на их основе написал под этот Sharp прогу. Хотя даже не написал, а дополнил. А конкретно, результаты можно посмотреть на LCD дисплее, + коментарии практически к каждому действию. И подбирал константы потому что практически к каждому шарпу судя по тому, что написано в wiki надо подбирать свои константы. Мдааа... Часа 3 я на это убил :crazy: :crazy: :crazy: Всё получилось хотя от погрешности в ~1 и ~2 см избавится не смог. Но это не страшно. Определяет от 20 см до 30 точно. Дальше ошибается на 1 см.
Код, если кому надо будет:
Код:
'-------------------------------------------------------------------------------
$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 = -1
Const B = -100

Dim Range As Word , Range1 As Word , Vout As Word , Vout1 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"                    'выводим надпись
Wait 2                    'задержка 2 секунды
'-------------------------------------------------------------------------------

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

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

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


Вложения:
CIMG2085.JPG
CIMG2085.JPG [ 85.07 КиБ | Просмотров: 6972 ]
CIMG2086.JPG
CIMG2086.JPG [ 110.83 КиБ | Просмотров: 7027 ]
CIMG2087.JPG
CIMG2087.JPG [ 107.78 КиБ | Просмотров: 7002 ]

_________________
https://vk.com/ledscale - платы, vk.com/ledscale3dprintig - 3Д печать\моделирование, vk.com/ledrenovation- ремонт светодиодных источников света
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ИК-дальномер Sharp GP2Y0A02 (20-120см)
СообщениеДобавлено: 15 авг 2009, 08:03 
Не в сети
Аватара пользователя

Зарегистрирован: 23 окт 2007, 22:03
Сообщения: 3037
Откуда: Москва
прог. языки: С
ФИО: Евгений Яковец
1-2 сантиметра это отлично! :good:
При расстоянии в 100 см это около 1-2 процента, достаточно точно!

_________________
- Этот человек - не человек! это робот!
- Как? уже делают?!
- Делают!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ИК-дальномер Sharp GP2Y0A02 (20-120см)
СообщениеДобавлено: 15 авг 2009, 08:58 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
2space: Если погрешность стабильная - её можно устранить, значит просто формулу надо править.

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ИК-дальномер Sharp GP2Y0A02 (20-120см)
СообщениеДобавлено: 15 авг 2009, 11:47 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ИК-дальномер Sharp GP2Y0A02 (20-120см)
СообщениеДобавлено: 15 авг 2009, 13:36 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Вроде формула пересчета другая у них.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ИК-дальномер Sharp GP2Y0A02 (20-120см)
СообщениеДобавлено: 15 авг 2009, 14:10 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ИК-дальномер Sharp GP2Y0A02 (20-120см)
СообщениеДобавлено: 15 авг 2009, 16:07 
Не в сети
Мастер Самоделкин
Аватара пользователя

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

_________________
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ИК-дальномер Sharp GP2Y0A02 (20-120см)
СообщениеДобавлено: 16 авг 2009, 12:23 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ИК-дальномер Sharp GP2Y0A02 (20-120см)
СообщениеДобавлено: 16 авг 2009, 18:17 
Не в сети
Мастер Самоделкин
Аватара пользователя

Зарегистрирован: 11 окт 2004, 19:20
Сообщения: 3678
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич
Вчера наладил работу АЦП на 800 кГц (правда до 8 бит резать приходится - младшие разряды колбасит). Заодно и шаговик прикрутил. Он у меня на месте твоей сервы - у него (да еще и с редуктором) угловое разрешение хорошее получается. Вот седня буду прогу писать чтоб на компе "видеть" панораму...
Правда в отличие от сервы еще надо геркон подключить для калибровки нуля...

_________________
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ИК-дальномер Sharp GP2Y0A02 (20-120см)
СообщениеДобавлено: 16 авг 2009, 18:27 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ИК-дальномер Sharp GP2Y0A02 (20-120см)
СообщениеДобавлено: 16 авг 2009, 20:05 
Не в сети
Мастер Самоделкин
Аватара пользователя

Зарегистрирован: 11 окт 2004, 19:20
Сообщения: 3678
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич
Для этого ШИМ на серве надо менять не резко, а постепенно. Тоесть если у тебя регистр OCR=a а тебе надо b, то делай цикл, в котором будет надбавляться OCR по единичке с задержкой скажем 100 мсек, пока не достигнет b.

_________________
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ИК-дальномер Sharp GP2Y0A02 (20-120см)
СообщениеДобавлено: 16 авг 2009, 21:06 
Не в сети
Аватара пользователя

Зарегистрирован: 17 июн 2007, 23:44
Сообщения: 565
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич
использую справочник по программированию Bascom-8051. Так вот там есть код кратенький как управлять сервой. Вот он, но это уже дописанный вариант мной, в справочнике ток описано это Config Servos = 1 , Servo1 = Portd.7 , Reload = 12, но к сожалению не описано как управлять скоростью.
Код:
$regfile = "m16def.dat"                                     ' используем ATmega16
$crystal = 16000000                                         ' частота установленного кварца 16 mHz

Config Servos = 1 , Servo1 = Portd.7 , Reload = 12          ' Указываем кол-во серв, присваеваем имя Servo1 порту PD7, указываем длину импульса.
Config Portd.7 = Output                                     ' конфигурируем вывод 2 порта D на ВЫХОД


' объявляем переменные
Dim Minimum As Byte
Dim Maximum As Byte
Dim X As Integer
Dim Center As Byte

Minimum = 85                                                ' минимальный разворот сервопривода в градусах
Maximum = 170                                               ' максимальный разворот сервопривода в градусах
Const Wait1 = 1000                                          ' задержка в мс.
Center = Maximum - Minimum                                  ' считаем под каким углом будет центр у сервопривод

Const Top = 52                                              ' постоянная для изменения положения вала сервопривода.
Const Top1 = 57

Enable Interrupts                                           'разрешаем прерывания

Do                                                          ' начало цикла программы

Servo(1) = Center                                           'выставляем серву на центр
Waitms Wait1

X = Center - Top                                            'поварачиваем влево сторону
Servo(1) = X
Waitms Wait1

X = Center + Top1                                           'поварачиваем вправо сторону
Servo(1) = X
Waitms Wait1

Servo(1) = Center                                           'выставляем серву на центр
Waitms Wait1

Loop
End


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ИК-дальномер Sharp GP2Y0A02 (20-120см)
СообщениеДобавлено: 16 авг 2009, 22:47 
Не в сети
Мастер Самоделкин
Аватара пользователя

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

Код:

if(Servo(1)<Center+Top){Servo(1)=Servo(1)+1;delay_ms(100);}



И повторять эту строчку пока оно не повернется куда надо.

Код:
dest=0; //Угол назначения

while(abs(Servo(1)-dest)!=0)
  {
  if(Servo(1)<dest){Servo(1)=Servo(1)+1;delay_ms(100);}
  if(Servo(1)>dest){Servo(1)=Servo(1)-1;delay_ms(100);}
  }


А вообще строчки
if(Servo(1)<dest){Servo(1)=Servo(1)+1;}
if(Servo(1)>dest){Servo(1)=Servo(1)-1;}
можно засунуть в таймер с периодом 100 мСек - тогда просто меняй переменную dest - серва сама будет ехать куда надо с ограничением скорости. А если +1 и -1 заменить на +2 и -2 - скорость будет быстрее. Или если таймер ускорить например...

_________________
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ИК-дальномер Sharp GP2Y0A02 (20-120см)
СообщениеДобавлено: 17 авг 2009, 00:09 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ИК-дальномер Sharp GP2Y0A02 (20-120см)
СообщениеДобавлено: 17 авг 2009, 09:45 
Не в сети
Аватара пользователя

Зарегистрирован: 05 фев 2008, 15:33
Сообщения: 2687
Откуда: St. Petersburg - Moscow
Skype: SkyStorm77
ФИО: Костюк Константин Вячеславович
Маладец!!! Давно собирался это сделать но все руки не доходили.
Сделай серию измерений м шагом 5 см и выложи пожалуста суда в след. виде
Реальное растояние; Расчитанное растояние; Значение ADC
Я беру на себя обязательство оформить это в Вике по типу странички [[GP2D12]].
И еще я не понял какие у тебя проблеммы с функцией Sharp_d12???

_________________
Никто кроме нас!!!
4Robots.ru - Все для роботов!


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 75 ]  На страницу 1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 4 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO