roboforum.ru

Технический форум по робототехнике.
Текущее время: 02 дек 2024, 15:40

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




Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Как одновременно крутить серву и читать данные дальномера Sh
СообщениеДобавлено: 18 авг 2009, 13:59 
Не в сети
Аватара пользователя

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

space в теме про шарп писал(а):
Ребят, а как опрос датчика сделать при условие, что работает серва. То есть когда обнаружен предмет загорается светодиод и серва должна остановится в том месте где был предмет, на секунду например, потом выполнить какое то действие в связи с обнаружение предмета и по новой.
Код:
'-------------------------------------------------------------------------------
$regfile = "m16def.Dat"                                     ' мк ATmega16
$crystal = 16000000                                         ' частота кварца 16мГц
'-------------------------------------------------------------------------------

Config Servos = 1 , Servo1 = Portd.7 , Reload = 12          ' Указываем кол-во серв, присваеваем имя Servo1 порту PD2, указываем длину импульса.
Config Portd.7 = Output                                     ' конфигурируем вывод 2 порта D на ВЫХОД
Config Portc.2 = Output : Led Alias Portc.2
Led = 0
Dim Minimum As Byte
Dim Maximum As Byte
Dim X As Integer
Dim Center As Byte
' берём серву, которая вращается на 180 градусов, если будете брать другую, то придётся изменить длину импульса и мак. и мин. градусы.
Minimum = 85                                                ' минимальный разворот сервопривода в градусах
Maximum = 170                                               ' максимальный разворот сервопривода в градусах
Const Wait1 = 300                                           ' задержка в мс.
Center = Maximum - Minimum                                  ' считаем под каким углом будет центр у сервопривод
' в моём случае это 90 (180-90=90) градусов.

Const Top = 51                                              ' постоянная для изменения положения вала сервопривода.
Const Top1 = 56
Const Top2 = 30

Enable Interrupts

'--------------------------------Настройка ADC----------------------------------
Config Adc = Single , Prescaler = Auto , Reference = Internal
'-------------------------------------------------------------------------------
'Начало цикла основной программы
Do

X = Center - Top2
Servo(1) = X
Waitms Wait1
If Sharp_d12 = Sharp_d12 Then : Led = 1 : Waitms 300 : End If

X = Center + Top2
Servo(1) = X
Waitms Wait1


Loop

Sharp:
Declare Function Sharp_d12(byval Adc_chanel As Byte) As Byte
Const M = 20000
Const K = -1
Const B = -40
Function Sharp_d12(byval Adc_chanel As Byte) As Byte
Local Range As Word , Vout As Word , Vout1 As Word
   Start Adc : Vout = Getadc(adc_chanel)                    'Sharp connected for example to PA=0(ADC0)
   Stop Adc
   If Vout < 500 Then                                       ' if les 160 its out of range
     Sharp_d12 = 0
   Else
   Vout1 = Vout + B                                         ' (Vout+B)
   Range = M / Vout1                                        ' M/(Vout+B)
   Sharp_d12 = Range - K                                    ' Range = M/(Vout+B)-K
   If Sharp_d12 = Sharp_d12 Then : Led = 1 : Waitms 300 : End If
   End If
End Function
Return



а на счёт одновременной работы сервы и датчика ни кто не подскажет можно так сделать или имеет смысл серву закрепить на отдельном мк, а датчики на основном?


Последний раз редактировалось Digit 18 авг 2009, 14:33, всего редактировалось 1 раз.
разделил темы


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

Зарегистрирован: 27 ноя 2004, 00:42
Сообщения: 3339
Откуда: совсем Москва
ФИО: Григорий
А в чем вообще проблема, рулить датчиком и сервой с одного МК? Там же не требовательные к ресурсам задачи.

_________________
злой полицейский


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

Зарегистрирован: 05 фев 2008, 15:33
Сообщения: 2687
Откуда: St. Petersburg - Moscow
Skype: SkyStorm77
ФИО: Костюк Константин Вячеславович
можно сделать на одном МК.
Тебе же уже показали на Си как это делается ... то же сделай на Бейсике.

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


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

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

было б знаний по больше сделал бы и глупых вопрос не задовал, а так уж извеняете из доступных материалов на русском ток Справочник по Bascom-8051 и Bascom AVR(его только скачал сегодня буду изучать мож чекго полезного и найду)


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

Зарегистрирован: 05 фев 2008, 15:33
Сообщения: 2687
Откуда: St. Petersburg - Moscow
Skype: SkyStorm77
ФИО: Костюк Константин Вячеславович
Твой код поворота X, это положение в которое надо прийти, и ты его сразу вычислил и указал
Код:
X = Center - Top2
Servo(1) = X

Нужно это X увеличивать в цикле, на вскидку вот так:
Код:
For i=1 to Top2
X = Center - i
Servo(1) = X
Next


Это есле я правильно понял что X, Center и Top2 это градусы.

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


Последний раз редактировалось SkyStorm 18 авг 2009, 14:27, всего редактировалось 1 раз.

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

Зарегистрирован: 17 июн 2007, 23:44
Сообщения: 565
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич
Вчера когда сам пробовал, то сделал так:
Код:
Do
X = Center - Top2
Servo(1) = X
Waitms Wait1
Gosub Sharp
Led = 0

X = Center + Top2
Servo(1) = X
Waitms Wait1
Gosub Sharp
Led = 0

Loop
Sharp:
Declare Function Sharp_d12(byval Adc_chanel As Byte) As Byte
Const M = 20000
Const K = -1
Const B = -40
Function Sharp_d12(byval Adc_chanel As Byte) As Byte
Local Range As Word , Vout As Word , Vout1 As Word
   Start Adc : Vout = Getadc(adc_chanel)                    'Sharp connected for example to PA=0(ADC0)
   Stop Adc
   If Vout < 500 Then                                       ' if les 160 its out of range
     Sharp_d12 = 0
   Else
   Vout1 = Vout + B                                         ' (Vout+B)
   Range = M / Vout1                                        ' M/(Vout+B)
   Sharp_d12 = Range - K                                    ' Range = M/(Vout+B)-K
   If Sharp_d12 = Sharp_d12 Then : Led = 1 : Waitms 300 : End If
   End If
End Function
Return

То есть в функцию запихнул условие, а от каждого поворота сервы переход на метку, а потом возврат. Ток получилась так, что когда он обнаруживает препятствие с одной стороны, то он почему то показывает что и с другой стороны оно тоже есть.

Добавлено спустя 1 минуту 42 секунды:
SkyStorm писал(а):
Твой код поворота X, это положение в которое надо прийти, и ты его сразу вычислил и указал
Код:
X = Center - Top2
Servo(1) = X


ну да
SkyStorm писал(а):
Нужно это X увеличивать в цикле, на вскидку вот так:
Код:
For i=1 to Top2
X = Center - i
Servo(1) = X
Next

а вот здесь не понял для чего его увеличивать


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как одновременно крутить серву и читать данные дальномера Sh
СообщениеДобавлено: 18 авг 2009, 14:37 
Не в сети
Аватара пользователя

Зарегистрирован: 05 фев 2008, 15:33
Сообщения: 2687
Откуда: St. Petersburg - Moscow
Skype: SkyStorm77
ФИО: Костюк Константин Вячеславович
Цитата:
а вот здесь не понял для чего его увеличивать

Ты пошагово двигаешся в одну сторону, на каждом шаге можеш делать каки либо вызовы функций или процедур
Шаг можно указать конкретный. Например каждые 5 градусов(если это градусы) делать измерения растояния.
Код:
For i=1 To Top2 Step 5
X = Center - i
Servo(1) = X
Waitms Wait1
Gosub Sharp
Next

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как одновременно крутить серву и читать данные дальномера Sh
СообщениеДобавлено: 18 авг 2009, 14:42 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как одновременно крутить серву и читать данные дальномера Sh
СообщениеДобавлено: 19 авг 2009, 15:39 
Не в сети
Аватара пользователя

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

Код на BAscom AVR в архиве, если кому будет интересно взглянуть на целый код, а части вот:
Robbe:
Код:
For I = 25 To Top Step 7
X = Center + I
Servo(1) = X
Waitms Wait1
Gosub Sharp_left
Next

For I = 25 To Top Step 7
X = Center - I
Servo(1) = X
Waitms Wait1
Gosub Sharp_right
Next


Gosub:
Код:
Sharp_right:
Declare Function Sharp_a02(byval 0 As Byte) As Byte
Function Sharp_a02(byval 0 As Byte) As Byte
Local Vout As Word
   Start Adc : Vout = Getadc(0)                             'Sharp connected for example to PA=0(ADC0)
   Stop Adc
   If Vout < 600 Then : Sharp_a02 = 0 : Else : Sharp_a02 = 1 : End If
   If Sharp_a02 = 1 Then : Led = 1 : Waitms 1000 : Led = 0 : End If
End Function
Return

Sharp_left:
Declare Function Sharp_a0(byval 0 As Byte) As Byte
Function Sharp_a0(byval 0 As Byte) As Byte
Local Vout As Word
   Start Adc : Vout = Getadc(0)                             'Sharp connected for example to PA=0(ADC0)
   Stop Adc
   If Vout < 600 Then : Sharp_a0 = 0 : Else : Sharp_a0 = 1 : End If
   If Sharp_a0 = 1 Then : Led = 1 : Waitms 1000 : Led = 0 : End If
End Function
Return


Вложения:
WinRAR.rar [16.85 КиБ]
Скачиваний: 8
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как одновременно крутить серву и читать данные дальномера Sh
СообщениеДобавлено: 19 авг 2009, 16:53 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 04 окт 2004, 12:58
Сообщения: 10989
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко
а на 6сек там что он увидел ? или сбой ??


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как одновременно крутить серву и читать данные дальномера Sh
СообщениеДобавлено: 19 авг 2009, 16:57 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

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


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

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


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

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