"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. Причём сделать всякие дополнительные табл. с выводом разных данных. Например Акб, температура среды, экран для обработки видео с робби и т.д.
Что из этого уже начал. А начал я со второго пункта. Так как ПВХ пока не купил. Ну собственно результаты есть. Хотя не совсем устраивают. Над программой надо работать ещё. Бывают глюки с задержками. Например повороты дольше чем надо длятся. Для любопытных : Основа: 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 И видео:
|
|
| |
Space | Дата: Вторник, 22.09.2009, 11:50 | Сообщение # 16 |
Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
| Так с объездом препятствий всё ясно. Теперь надо сделать делитель напряжения на резисторах и подключать его на ацп мк. Чтобы контролировать разряд акб.
|
|
| |
Space | Дата: Вторник, 22.09.2009, 12:49 | Сообщение # 17 |
Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
| Готова. Ток не знаю пока на скок это правильно.
|
|
| |
Doniak | Дата: Вторник, 22.09.2009, 17:19 | Сообщение # 18 |
Язык программированя: CodeVisionAVR Си
Зарегистрирован 19.03.2008
Группа: Модераторы
Сообщений: 584
Город: Кривой Рог (Днепропетровск)
Статус: Offline
| Я немного не понял зачем тебе делитель если там 5В ?
|
|
| |
Space | Дата: Вторник, 22.09.2009, 17:28 | Сообщение # 19 |
Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
| Я там ошибся надо на прямую к акб. Поэтому так будет: R1 только не 1кОм, а 1,5кОмДобавлено (22.09.2009, 17:28) --------------------------------------------- Вот тока не работает. точней работает, но когда подключаю к ацп, то оно сразу подскакивает до 1023 и не меняется. Пробовал менять напряжение с помощью стабилизированного источника питание от 12 до 6 вольт.
|
|
| |
Bass85 | Дата: Вторник, 22.09.2009, 17:59 | Сообщение # 20 |
Зарегистрирован 12.02.2009
Группа: Опытные
Сообщений: 422
Статус: Offline
| А говорил что с электроникой все нормально. Ты делитель сделал в два раза 12/2=6 а это больше 5 вольт которые ты скорее всего подал на AREF Вот оно и пишет максимум 1023. Вот http://www-k.ext.ti.com/srvs....%29,new Да и на свинцовом заряженном больше 12. так что дели на три смело а там программно подправишь. У тебя вышел коэффициент 0,6 поэтому на АЦП подается аж 7,2В.
|
|
| |
Space | Дата: Вторник, 22.09.2009, 18:30 | Сообщение # 21 |
Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
| Это я говорил в плане электродеталей. А с электроникой с чем связан ещё не был, да пробелы бывают. Да уже сказали на робофоруме. Что из-за этого произошло переполнение АЦП. Поставил 75ом и 910 и всё заработало. Потом заменю на подстроечный. А то сказали что: Quote (SERGEY_M) слишком резисторы (номиналы) маленькие, неоправданно большое потребление тока... нужно увеличить хотябы в 10 раз номиналы :) ![](http://robotsspace.ucoz.ru/_fr/4/s0841690.jpg) Добавлено (22.09.2009, 18:30) --------------------------------------------- Ацп при: 12 вольтах = 355 9 вольтах = 244 7,5 вольтах = 205 6 вольтах = 184
|
|
| |
Bass85 | Дата: Вторник, 22.09.2009, 18:41 | Сообщение # 22 |
Зарегистрирован 12.02.2009
Группа: Опытные
Сообщений: 422
Статус: Offline
| Правильно сказали
|
|
| |
Space | Дата: Вторник, 22.09.2009, 18:42 | Сообщение # 23 |
Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
| Прога такая: Code $regfile = "m16def.dat" $crystal = 16000000 $lib "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 = 20 * 4
Cls Cursor Off
Config Adc = Single , Prescaler = Auto , Reference = Internal Dim Adc_temp As Word , Akb As Single
Do
Start Adc Adc_temp = Getadc(0) Stop Adc Akb = Adc_temp Locate 1 , 1 Lcd "Robbe" Locate 2 , 1 Lcd "Adc_temp=" ; Adc_temp Locate 3 , 1 Lcd "akb=" ; Akb
Waitms 100
Loop
|
|
| |
danger | Дата: Воскресенье, 27.09.2009, 08:32 | Сообщение # 24 |
Язык программированя: пока нет
Зарегистрирован 17.07.2009
Группа: Новички
Сообщений: 168
Город: Чебоксары
Статус: Offline
| очень похож на этого http://www.youtube.com/watch?v=aoPQXkzq420&feature=fvw
http://vkontakte.ru/club13643816 тыркни по ссылке
|
|
| |
Space | Дата: Воскресенье, 27.09.2009, 11:38 | Сообщение # 25 |
Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
| единственное чем похож это движениями сервопривода
|
|
| |
danger | Дата: Воскресенье, 27.09.2009, 14:43 | Сообщение # 26 |
Язык программированя: пока нет
Зарегистрирован 17.07.2009
Группа: Новички
Сообщений: 168
Город: Чебоксары
Статус: Offline
| я хотел ето сказать
http://vkontakte.ru/club13643816 тыркни по ссылке
|
|
| |
Space | Дата: Воскресенье, 27.09.2009, 15:24 | Сообщение # 27 |
Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
| Заменил питание наконец-то Маленький, лёгкий на 6,8в литьевый аккумулятор ![](http://robotsspace.ucoz.ru/_fr/4/s3813361.jpg)
|
|
| |
danger | Дата: Воскресенье, 27.09.2009, 15:47 | Сообщение # 28 |
Язык программированя: пока нет
Зарегистрирован 17.07.2009
Группа: Новички
Сообщений: 168
Город: Чебоксары
Статус: Offline
| не тяжолый . мдя у тя Space, во всех роботах эти серво моторы стоят они вить ваще бешено дорогие по пятсот стоят
http://vkontakte.ru/club13643816 тыркни по ссылке
|
|
| |
юрии | Дата: Воскресенье, 27.09.2009, 15:55 | Сообщение # 29 |
Язык программированя: Васик
Зарегистрирован 05.03.2009
Группа: Новички
Сообщений: 572
Город: Югорск
Статус: Offline
| а что ты danger, хотел хоби! это того стоит)) я тоже купил 2 сервы сломал)) жду рем комплект Добавлено (27.09.2009, 15:55) --------------------------------------------- и мне даж не грустно)) то что сломал ) это же пустяки
|
|
| |
Space | Дата: Воскресенье, 27.09.2009, 15:59 | Сообщение # 30 |
Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
| Quote (danger) не тяжолый . мдя у тя Space, во всех роботах эти серво моторы стоят они вить ваще бешено дорогие по пятсот стоят бред. у меня по 300 сервы стоят и лишь одна за 620 и то из-за что в ней металлические шестерёнки. Я себе купил 4 по 300 и пользуюсь ими. Новых я не покупал уже больше года
|
|
| |