Воскресенье, 23.06.2024, 20:07
| RSS
[SEARCH_TITLE]
[SEARCH_FORM]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 4 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Архив - только для чтения
"Robbe"
SpaceДата: Воскресенье, 20.09.2009, 19:24 | Сообщение # 1








Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline

В самом низу сообщения, исходники в архиве Robbe Version 1.1.....

И так этот проект был задуман уже давно. Но начал я его с тех пор как стал воять отдельные модули+приобрёл шарп (робо-контроллер, блок стабилизированного напряжения, драйвер двигателей(микросхема, реле)и это не всё. Есть ещё готовые модули, а не котрые пока только в моих фантазиях ))) ). Если порыскать на форуме, то можно найти не сколько тем, которые имеют прямое отношение к моему проекту. Например: Драйвер двигателей на реле, Будующий корпус, ИК-дальномер Sharp GP2Y0A02 (20-120см)
Основные модули готовы, да и время на выходных появилось свободное. Вот и занялся на конец то. О целях проекта...

  • 1. Сделать корпус из ПВХ
  • 2. Научить объезжать препятствия благодаря Шарпу
  • 3. Контроль разряда акб
  • 4. Забобахать ОС для Robbe.
  • 5. Научить работать с флешкой(использовать в качестве хранения памяти).
  • 6. Возможно сделать 4 колёсную платформу в дальнейшем, но врятле.
  • 7. Добавить звуковых датчиков(микрофоны, динамики)
  • 8. Добавить контактные бамперы. Ведь если откажут основные датчики, то бамперы это единственное с помощью чего робот не будет потерянным.
  • 9. Написать программу для управления Robbe с компьютера по Bluetooth.
  • 10. Написать удобную терминальную программу(с помощью delphi) для управления робби как по Bluetooth так и по Uart. Причём сделать всякие дополнительные табл. с выводом разных данных. Например Акб, температура среды, экран для обработки видео с робби и т.д.

Что из этого уже начал. А начал я со второго пункта. Так как ПВХ пока не купил. Ну собственно результаты есть. Хотя не совсем устраивают. Над программой надо работать ещё. Бывают глюки с задержками. Например повороты дольше чем надо длятся.

Для любопытных wink :
Основа:

Code
'*******************************************************************************
' Автор: Кирилл Игоревич (Space)
' Сайт: www.robptsspace.ucoz.ru
' Дата начала:  20.09.2009 г.
' CPU:  ATmega16
' Тактовая частота:  16000000  Hz
' Компилятор: BASCOM-AVR 1.11.9.0
' Версия программы для Robbe 1.0
'*******************************************************************************
' Программируемые Fuse:
' SUT0
' BOOTSZ0, BOOTSZ1
' CKORT
' SPIEN
'-------------------------------------------------------------------------------

$regfile = "m16def.dat"                    'используем мк ATmega16
$crystal = 16000000                    'частота кварцевого резонатора 16mHz

$include "config ports.bas"

$lib "lcd4.lbx"                    'используем 4-х битное подключение дисплея с помощью альтернативной библиотеки

Cursor Off
Cls
'---------------------------------Переменные------------------------------------
Dim Minimum As Byte , Maximum As Byte , Center As Byte , Speed As Byte : Speed = 200
Dim X As Integer , I As Integer

Minimum = 80 : Maximum = 160 : Center = Maximum - Minimum   'подсчитываем разворот в градусах для сервопривода

Const Wait1 = 500 : Const Top = 30 : Const Top1 = 75
'-------------------------------------------------------------------------------

1:
Do

Gosub Вперёд

For I = 30 To Top Step 10
X = Center + I
Servo(1) = X
Waitms Wait1
Gosub Sharp_left
Next

For I = 30 To Top Step 10
Servo(1) = Center
Waitms Wait1
Gosub Sharp_center
Next

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

For I = 30 To Top Step 10
Servo(1) = Center
Waitms Wait1
Gosub Sharp_center
Next

Loop

$include "gosub.bas"

Метки на которые осущевствляются переходы:

Code

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 < 700 Then : Sharp_a02 = 0 : Else : Sharp_a02 = 1 : End If
If Sharp_a02 = 1 Then : Gosub Разворот_влево : Waitms 400 : End If
If Sharp_a02 = 1 Then : Gosub 1 : 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 < 700 Then : Sharp_a0 = 0 : Else : Sharp_a0 = 1 : End If
                  If Sharp_a0 = 1 Then : Gosub Разворот_вправо : Waitms 400 : End If
                  If Sharp_a0 = 1 Then : Gosub 1 : End If
End Function
Return

Sharp_center:
Declare Function Sharp(byval 0 As Byte) As Byte
Function Sharp(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 < 700 Then : Sharp = 0 : Else : Sharp = 1 : End If
                  If Sharp = 1 Then : Gosub Стоп : Waitms 1000 : Gosub Разворот_вправо : Waitms 700 : End If
                  If Sharp = 1 Then : Gosub 1 : End If
End Function
Return

'' -----------------------------------------------------------------------------
'' Включение комбинации моторов для движения в заданном направлении
'' -----------------------------------------------------------------------------
Стоп:                    ' стоим на месте
M1f = 0 : M1b = 0 : Pwm1a = 0
M2f = 0 : M2b = 0 : Pwm1b = 0
Return

Вперёд:                    ' едим вперёд на заданной скорости
M1f = 1 : M1b = 0 : Pwm1a = Speed
M2f = 1 : M2b = 0 : Pwm1b = Speed
Return

Вперёд_вправо:                    ' поварачиваем вправо на заданной скорости
M1f = 1 : M1b = 0 : Pwm1a = Speed
M2f = 0 : M2b = 0 : Pwm1b = 0
Return

Вперёд_влево:                    ' поворачиваем влево на заданной скорости
M1f = 0 : M1b = 0 : Pwm1a = 0
M2f = 1 : M2b = 0 : Pwm1b = Speed
Return

Назад:                    ' едим назад на заданной скорости
M1f = 0 : M1b = 1 : Pwm1a = Speed
M2f = 0 : M2b = 1 : Pwm1b = Speed
Return

Назад_вправо:                    ' поворачиваем назад-вправо на заданной скорости
M1f = 0 : M1b = 1 : Pwm1a = Speed
M2f = 1 : M2b = 0 : Pwm1b = 0
Return

Назад_влево:                    ' поворачиваем назад-влево на заданной скорости
M1f = 0 : M1b = 0 : Pwm1a = 0
M2f = 0 : M2b = 1 : Pwm1b = Speed
Return

Разворот_вправо:                    ' делаем Разворот_вправо на заданной скорости
M1f = 1 : M1b = 0 : Pwm1a = Speed
M2f = 0 : M2b = 1 : Pwm1b = Speed
Return

Разворот_влево:                    ' делаем Разворот_влево на заданной скорости
M1f = 0 : M1b = 1 : Pwm1a = Speed
M2f = 1 : M2b = 0 : Pwm1b = Speed
Return

И видео:

Прикрепления: 7909925.jpg (205.5 Kb) · 1730524.jpg (229.9 Kb) · Robbe_Version_1.rar (25.9 Kb)
 
SpaceДата: Воскресенье, 31.01.2010, 00:53 | Сообщение # 46








Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
Для интересующихся код всей программы. Всё работает. Объезд препятствий с помощью 3 дальномеров.
P.S Будет время напишу пару статеек на тему дальномеров kolobok_idea
Прикрепления: Robbe.rar (11.7 Kb)
 
SpaceДата: Четверг, 04.02.2010, 23:11 | Сообщение # 47








Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
Вот теперь он работает отлично. Единственное изменение надо ещё внести в программу при отъезде от препятствия спереди, а то в углах бывает начинает плутать туда сюда, а так в целом всё очень даже не плохо. Терь буду разбираться с USB-UART.
Несколько фото и видео, на 1-ой фотке зарядка для аккума и программатор которыми я пользуюсь smile3 :


Прикрепления: 1263545.jpg (249.8 Kb) · 7565286.jpg (245.3 Kb) · 5746742.jpg (242.3 Kb)
 
DoniakДата: Четверг, 04.02.2010, 23:41 | Сообщение # 48








Язык программированя: CodeVisionAVR Си
Зарегистрирован 19.03.2008
Группа: Модераторы
Сообщений: 584
Город: Кривой Рог (Днепропетровск)
Статус: Offline
Нечо так хорошенький роботик получился :)
Но жужжание раздражает жуть .
Quote (Space)
Терь буду разбираться с USB-UART

управляющую программу будиш сам писать?
 
SpaceДата: Пятница, 05.02.2010, 00:32 | Сообщение # 49








Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
Quote (Doniak)
управляющую программу будиш сам писать?

ага. для начало при подключение usb он должен будет остановить работу программы и напечатать сообщение в терминале. После сделаю нескеолько команд для теста всей его системы. Например покрутить моторами несколько секунд. или проверить работу шарпов и т.д.

Добавлено (05.02.2010, 00:29)
---------------------------------------------

Quote (Doniak)
Нечо так хорошенький роботик получился :)

главное маленький и укомплектованный ges_up ppl_cylon

Добавлено (05.02.2010, 00:32)
---------------------------------------------

Quote (Doniak)
Но жужжание раздражает жуть .

кстати эт всё ютуб портит не знаю почему. с этой камеры когда записываю звук нормальный, как перенашу видео в ютуб так он его карявит.
 
DoniakДата: Пятница, 05.02.2010, 17:34 | Сообщение # 50








Язык программированя: CodeVisionAVR Си
Зарегистрирован 19.03.2008
Группа: Модераторы
Сообщений: 584
Город: Кривой Рог (Днепропетровск)
Статус: Offline
Quote (Space)
главное маленький и укомплектованный ges_up ppl_cylon

можно былоб еще меньше сделать. Микросхемы в СМД корпусах ставить, компактнее разводить плату, акум поставить другим боком, плату на плату установить, убрать радиатор...
 
Bass85Дата: Суббота, 06.02.2010, 00:25 | Сообщение # 51








Зарегистрирован 12.02.2009
Группа: Опытные
Сообщений: 422
Статус: Offline
Понравилось что без не какого дерганья поворачивает от препятствий. Да и действительно зачем радиатор, да еще и немаленький, там что стабилизатор стоит?
 
S-T-A-L-K-E-RДата: Суббота, 06.02.2010, 09:42 | Сообщение # 52








Язык программированя: Мурманская область
Зарегистрирован 11.06.2009
Группа: Модераторы
Сообщений: 367
Город: Никель
Статус: Offline
Хорош бот. Молодец. wink
 
SpaceДата: Вторник, 23.02.2010, 16:57 | Сообщение # 53








Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
Quote (Bass85)
Понравилось что без не какого дерганья поворачивает от препятствий. Да и действительно зачем радиатор, да еще и немаленький, там что стабилизатор стоит?

там два стабилизатора, один для драйвера, другой дляконтроллера. когда свинцовый аккум подключал стабилизаторы всё время грелись. щас стоит литьевый всё нормально поэтому после сниму его.

Добавлено (09.02.2010, 00:07)
---------------------------------------------
Ну вот понеслась душа в рай smile3
Набросок проги для терминала. Часть с моторами уже проверил работает отлично senile

Code
'******************************Настройки****************************************
Dim ПодтверждениеРаботыТерминала As Bit , Tim As Integer , T As Integer
Dim ВнешнииПодключения As Byte , ВключениеМоторов As Byte
Tim = 500
'***************************Работа в терминале**********************************
Print : Print "***************************{144}{160}{161}{174}{226}{160} {162} {226}{165}{224}{172}{168}{173}{160}{171}{165}**********************************"
Print : Print "Hello. I am Robbe." : Waitms Tim
$timeout = 5000000                    'ждём ввода команды 5 секунд
Input , ПодтверждениеРаботыТерминала
If ПодтверждениеРаботыТерминала = 1 Then : Goto РаботаТерминала : Else : Print "Perexod k osnovnoi programme" : Goto ОсновнаяПрограмма : End If
' если ввели команду 1, значит работаем в терминале иначе переход в основную программу
Do
РаботаТерминала:
$timeout = 100000000 : Print : Input "Chto testiryem? " , ВнешнииПодключения
Print "Ok," ; ВнешнииПодключения
If ВнешнииПодключения = 1 Then : Wait 5 : Goto ОсновнаяПрограмма
Elseif ВнешнииПодключения = 2 Then : Gosub ТестируемДальномеры
Elseif ВнешнииПодключения = 3 Then : Gosub ВариантыДвижений
Else : Print : Print "Error. Nevernai komanda" : End If
Loop
'*********************Выполняемые команды в терминале***************************
ТестируемДальномеры:
Print : Print "Proverka dal'nomerov"
Return

'*******************************************************************************

'******************************* ************************************************
ВариантыДвижений:
Print : Print "Proverka motorov"
Wait 1 : Print "Perechen' komand:" : Print "0-K rabote terminala, posle vvoda komandi  enter"
Print "1-Stop v techenii" : Print "2-Vpered" : Print "3-VperedVpravo"
Print "4-VperedVlevo" : Print "5-Nazad" : Print "6-NazadVpravo"
Print "7-NazadVlevo" : Print "8-RazvorotVpravo" : Print "9-RazvorotVlevo"
Do
$timeout = 100000000
Gosub Стоп
Print : Input "Vvedi komandy napravleni and dlitel'nost' " , ВключениеМоторов , T
If ВключениеМоторов = 1 Then : Print "Stop v techenii " ; T ; " sekynd" : Gosub Стоп : Wait T
Elseif ВключениеМоторов = 2 Then : Print "Vpered v techenii " ; T ; " sekynd" : Gosub Вперёд : Wait T
Elseif ВключениеМоторов = 3 Then : Print "VperedVpravo v techenii " ; T ; " sekynd" : Gosub Вперёд_вправо : Wait T
Elseif ВключениеМоторов = 4 Then : Print "VperedVlevo v techenii " ; T ; " sekynd" : Gosub Вперёд_влево : Wait T
Elseif ВключениеМоторов = 5 Then : Print "Nazad v techenii " ; T ; " sekynd" : Gosub Назад : Wait T
Elseif ВключениеМоторов = 6 Then : Print "NazadVpravo v techenii " ; T ; " sekynd" : : Gosub Назад_вправо : Wait T
Elseif ВключениеМоторов = 7 Then : Print "NazadVlevo v techenii " ; T ; " sekynd" : Gosub Назад_влево : Wait T
Elseif ВключениеМоторов = 8 Then : Print "RazvorotVpravo v techenii " ; T ; " sekynd" : Gosub Разворот_вправо : Wait T
Elseif ВключениеМоторов = 9 Then : Print "RazvorotVlevo v techenii " ; T ; " sekynd" : Gosub Разворот_влево : Wait T
Elseif ВключениеМоторов = 0 Then : Gosub РаботаТерминала : End If
Loop
'*******************************************************************************

Добавлено (23.02.2010, 16:57)
---------------------------------------------
Эм... народ ни кто не в курсе как сделать так чтобы робот распознал, что к нему подключили usb(uart)? Это похоже на подключение тех же наушников к мобильнику при их подключение высвечивается либо надпись с сообщением о подключение наушников либо значок. Или новые устройства к компу.
P. S. мож глупый вопрос, но всё же интересует вообще как комп распознаёт подключение новых устройств?

 
DeepBlackДата: Вторник, 23.02.2010, 17:10 | Сообщение # 54








Язык программированя: C/C++
Зарегистрирован 27.07.2009
Группа: Модераторы
Сообщений: 189
Город: Зеленоград
Статус: Offline
USB распознает по наличию резистора между одной из информационных линий и линией питания. Причем, от того на первой, второй или на двух сразу стоят резистор(ы), определяется скорость работы устройства.
В устройстве можно сделать, например, разъем с 4 контактами - 2 отвечают за обмен информацией, 2 просто замкнуты между собой. Когда разъем подключен, между двумя выводами МК будет перемычка. Определить наличие перемычки элементарно. Можно на одном из выводов МК держать высокий уровень, и постоянно (по таймеру) проверять, что там высокий уровень - в при подключении к компу кинуть этот вывод через резистор на землю. При очередной проверке выяснится, что есть подключение.
Можно поизощреннее поступить: использовать 2 линии всего. Пока контроллер ожидает подключения, он раз в N промежуток времени посылает на USART какое-нибудь слово (например, PING) а программа в компе как только увидит PING сразу же должна ответить PONG. При приеме ответа МК понимает, что он подключен к компьютеру.
Вот как-то так)
 
SpaceДата: Суббота, 27.02.2010, 16:51 | Сообщение # 55








Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
ок. спасиб. буду пробовать

Добавлено (27.02.2010, 16:51)
---------------------------------------------
Сделал измерение акб в вольтах и процентах. Не идеал конечно да и вообще не уверен, что правильно, но приблизительно определить напряжение более менее по выводимым данным можно. Разница ток бывает парой в 0,5, а то и в целый вольт.

Code
Dim Volt As Single , Volt1 As Single , Volt2 As Single , Напряжение_Акб As Single
Dim Procent As Integer , Коифицент As Single
'*******************************************************************************

Do
Akb:

Start Adc : Акб = Getadc(0) : Stop Adc
Коифицент = 45 / 2
Volt = Коифицент * Акб
Volt1 = Volt * 10
Volt2 = Volt1 / 1023
Напряжение_Акб = Volt2 / 10
Procent = Volt2 + 15

If Акб > 375 Then : Gosub 1 : Else : Gosub 2 : End If
Input , Q
If Q = 1 Then : Goto РаботаТерминала : End If
Loop
1:
Print : Print "Заряд аккумулятора 100%" : Waitms 500
Return
2:
Print : Print "1-Возврат" : Print "Заряд аккумулятора состовляет " ; Procent ; "%"
Print Напряжение_Акб ; " Вольт" : Waitms 500
Return

'*******************************************************************************
 
CudiДата: Воскресенье, 27.06.2010, 09:53 | Сообщение # 56








Язык программированя: Асамблер
Зарегистрирован 17.03.2010
Группа: Новички
Сообщений: 49
Город: Ростов-н/Д
Статус: Offline
Space, красавец.
Ты мог бы дать схему готового робота. А то всё разбросано не поиму где что. и мог бы перечень деталей вывесить :)) буду очень благодарен.
 
SpaceДата: Воскресенье, 27.06.2010, 11:58 | Сообщение # 57








Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
спасиб smile3 мог бы но честно говоря я принципиальную схему не рисовал для управляющей платы, поэтому если где-то и есть, то только печатная плата. Единственное что драйвер использовал этот
Можно собрать любой контроллер, 1 или 2 лучше 2, там стабилизатор напряжения есть, и RS-232
И защшить программу, подключить всё необходимое из датчиков и серв, и всё будет так же работать wink
 
CudiДата: Четверг, 08.07.2010, 17:41 | Сообщение # 58








Язык программированя: Асамблер
Зарегистрирован 17.03.2010
Группа: Новички
Сообщений: 49
Город: Ростов-н/Д
Статус: Offline
Space, вопрос как ты вырезал отверстия для SHARP, я пробывал вырезать не получилось :(
 
SpaceДата: Пятница, 09.07.2010, 11:16 | Сообщение # 59








Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
как не странно сверлом lol
 
CudiДата: Пятница, 09.07.2010, 15:27 | Сообщение # 60








Язык программированя: Асамблер
Зарегистрирован 17.03.2010
Группа: Новички
Сообщений: 49
Город: Ростов-н/Д
Статус: Offline
Space, сверлом ? я думал концелярским ножом.
 
  • Страница 4 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Поиск: