Проект "Kapanda"
|
|
pashteet | Дата: Суббота, 17.10.2009, 12:45 | Сообщение # 1 |
Зарегистрирован 21.09.2009
Группа: Новички
Сообщений: 225
Город: Волжский
Статус: Offline
| Всем привет! Представляю вам свою гусеничную платформу Kapanda Цель - познание некоторых возможностей МК; освоение базовых элементов написания кода; научится работать с UART, протоколом RC5; наглядно изучить принцип работы дальномера, а также других датчиков; научится работать с LCD дисплеем. За основу был взят модуль, разработанный FireFly, в виду его легкой повторяемости и достаточной универсальности Так же в работе использованны (и планируются к использованию): Дальномер - Шарп Датчики цвета поверхности - ОпенРоботикс LCD дисплей 16*2 Механика: Гусеницы, редуктор - Тамия Сервоприводы - HXT Код написан на компиляторе Bascom-AVR, за онснову были взяты некоторые исходники, выложенные на этом форуме (вчасности выложенные Space) Добавлено (17.10.2009, 12:41) --------------------------------------------- Видео: Сори за качество, снимал мобильником Мда, видео было неочень хорошего качества, а теперь вообще не айс Попозже попробую сделать другое П.С. на видео аккамулятор в руках, т.к. батарейки сели, а заменить неуспел Добавлено (17.10.2009, 12:45) --------------------------------------------- Проект будет находится постоянно в работе и по мере изменения будут добавлятся новые фотки Первое с чем столкнулся - проблемы с питанием. Т.к. питал всю схему от 6 батареек типа АА, то при увеличении ШИМа на двигатели серву начинало колбасить Попедить эту проблему удалось только разделив питание: теперь логика питается от 4-х Батареек типа АА напрямую (минуя стабилизатор), а силовая часть - от 3-х батареек
Сообщение отредактировал pashteet - Суббота, 17.10.2009, 12:56 |
|
| |
pashteet | Дата: Суббота, 17.10.2009, 12:53 | Сообщение # 2 |
Зарегистрирован 21.09.2009
Группа: Новички
Сообщений: 225
Город: Волжский
Статус: Offline
| Сейчас идет стадия установки датчиков цвета поверхности и отработка кода отъезда от ограничительной линии, результаты так же будут выложенны в виде видео
Сообщение отредактировал pashteet - Суббота, 17.10.2009, 12:58 |
|
| |
S-T-A-L-K-E-R | Дата: Суббота, 17.10.2009, 13:17 | Сообщение # 3 |
Язык программированя: Мурманская область
Зарегистрирован 11.06.2009
Группа: Модераторы
Сообщений: 367
Город: Никель
Статус: Offline
| Хорошая платформа. Драйвер с робозоне ?
http://rassionrobots.ucoz.ru/ -"Робототехника"
|
|
| |
pashteet | Дата: Суббота, 17.10.2009, 13:20 | Сообщение # 4 |
Зарегистрирован 21.09.2009
Группа: Новички
Сообщений: 225
Город: Волжский
Статус: Offline
| Да http://robozone.su/2009....-s.html
|
|
| |
Space | Дата: Суббота, 17.10.2009, 13:35 | Сообщение # 5 |
Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
| А выложи свой код посмотреть А так молодца!
|
|
| |
pashteet | Дата: Суббота, 17.10.2009, 15:06 | Сообщение # 6 |
Зарегистрирован 21.09.2009
Группа: Новички
Сообщений: 225
Город: Волжский
Статус: Offline
| Спасибо Пока код выглядит от так: Code '******************** Проект Капанда ****************************************** '******************** Гусеничный робот ***************************************** '******************* С АТмега32 на борту *************************************** '************* частота системного кварца 8 МГц ********************************* '************ возможность расширения функционала ******************************* '*********** Котроллер собран на платформе MRC-40 ****************************** '*** Благодарности: ************************************************************ '**** Setar, SkayStorm, FireFly, Spase, DeaD *********************************** '*******************************************************************************
$regfile = "m32def.dat" 'используем мк ATmega32 $crystal = 8000000 'частота кварцевого резонатора 8MHz
'****************************Настройка таймеров и сервоприводов*****************
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down ' таймер для ШИМ двигателей Config Servos = 1 , Servo1 = Portc.2 , Reload = 12 ' Указываем кол-во серв, присваеваем имя Servo1 порту PC2, указываем длину импульса.
'*************************** Порт A ********************************************
' Поключили дальномер, порт A7, настройки АДС ниже
'*************************** Порт В ********************************************
'Библиотека 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 знакомест в каждой ' Свободные порты: PortB.3 Config Pinb.0 = Output : Led1 Alias Portb.0 'ногу сконфигурировали как выход и обозвали Led1 Config Pinb.2 = Output : Led2 Alias Portb.2 'ногу сконфигурировали как выход и обозвали Led2
'*************************** Порт C ********************************************
Config Pinc.2 = Output ' Подключили серву1 к порту С2, настройки сервы выше
'*************************** Порт D ********************************************
Config Pind.6 = Output : Dr1 Alias Portd.6 'ногу сконфигурировали как выход и обозвали Dr1 Config Pind.7 = Output : Dr2 Alias Portd.7 'ногу сконфигурировали как выход и обозвали Dr2 Config Pind.5 = Output 'ногу ШИМа 1-ого движка сконфигурировали как выход Config Pind.4 = Output 'ногу ШИМа 2-ого движка сконфигурировали как выход
'*****************************Настройка ADC*************************************
Config Adc = Single , Prescaler = Auto , Reference = Internal
'*******************************************************************************
Enable Interrupts ' разрешаем прерывания
'************************Переменные и константы*********************************
Dim Speed As Integer , Sharp As Integer Dim I As Integer Dim Vout As Word
'*****************************Основной цикл************************************* Speed = 255 1: Do
Gosub Вперёд ' Если сигнала от ик-датчика(Sharp) не поступает, значит двигаемся всё время прямо
'******************Вращение сервопривода и датчика Sharp************************
For I = 45 To 90 Step 1 ' Вращаем сервой справа на лево Gosub Sharp_right ' считаем что шарп смотрит вправо Servo(1) = I Waitms 12 ' ждем 12 мс Next
For I = 90 To 135 Step 1 ' Вращаем сервой справа на лево Servo(1) = I Gosub Sharp_left ' считаем что шарп смотрит влево Waitms 12 ' ждем 12 мс Next
For I = 135 To 90 Step -1 ' Вращаем сервой слева на право Gosub Sharp_left ' считаем что шарп смотрит вправо Servo(1) = I Waitms 12 ' ждем 12 мс Next
For I = 90 To 45 Step -1 ' Вращаем сервой слева на право Gosub Sharp_right ' считаем что шарп смотрит влево Servo(1) = I Waitms 12 ' ждем 12 мс Next
Loop
'******************************************************************************* ' Включение комбинации моторов для движения в заданном направлении '*******************************************************************************
Стоп: ' стоим на месте Dr1 = 0 : Dr2 = 0 : Pwm1a = 0 : Pwm1b = 0 Return
Вперёд: ' едим вперёд на заданной скорости Dr1 = 0 : Dr2 = 0 : Pwm1a = Speed : Pwm1b = Speed Return
Назад: ' едим назад на заданной скорости
Dr1 = 1 : Dr2 = 1 : Pwm1a = Speed : Pwm1b = Speed Return
Разворот_вправо: ' делаем Разворот_вправо на заданной скорости
Dr1 = 0 : Dr2 = 1 : Pwm1a = Speed : Pwm1b = Speed Return
Разворот_влево: ' делаем Разворот_влево на заданной скорости
Dr1 = 1 : Dr2 = 0 : Pwm1a = Speed : Pwm1b = Speed Return
'***********************************Sharp***************************************
Sharp_right:
Start Adc : Vout = Getadc(7) 'Sharp connected for example to PA=0(ADC0) Stop Adc If Vout > 240 Then : Sharp = 1 : Else : Sharp = 0 : End If If Sharp = 1 Then : Led1 = 1 Gosub Разворот_влево : Waitms 500 : Led1 = 0 : Gosub Вперёд : End If
Return
Sharp_left:
Start Adc : Vout = Getadc(7) 'Sharp connected for example to PA=0(ADC0) Stop Adc If Vout > 240 Then : Sharp = 1 : Else : Sharp = 0 : End If If Sharp = 1 Then : Led2 = 1 Gosub Разворот_вправо : Waitms 500 : Led2 = 0 : Gosub Вперёд : End If
Return
End
'******************************************************************************* Но я думаю, что он вскоре обрастет немного Добавлено (17.10.2009, 15:06) --------------------------------------------- таакс, закончил тестирование датчиков цвета поверхности, как обещал - видео: Алгоритм еще надо будет подточить, но и сейчас уже неплохо справляется. Алгоритм работает примерно так: При движении вперед сканирует два передних датчика, как только появился сигнал - идет программа отъезда. Движение назад организовано в цикле, там же идет проверка задних датчиков, это позволяет успешно обрабатывать углы, т.к. отъезд длится заданное время
Сообщение отредактировал pashteet - Суббота, 17.10.2009, 15:10 |
|
| |
pashteet | Дата: Суббота, 17.10.2009, 15:07 | Сообщение # 7 |
Зарегистрирован 21.09.2009
Группа: Новички
Сообщений: 225
Город: Волжский
Статус: Offline
| Видно, как снизу "торчат" датчики OpenRobotics
Сообщение отредактировал pashteet - Суббота, 17.10.2009, 15:08 |
|
| |
юрии | Дата: Суббота, 17.10.2009, 15:10 | Сообщение # 8 |
Язык программированя: Васик
Зарегистрирован 05.03.2009
Группа: Новички
Сообщений: 572
Город: Югорск
Статус: Offline
| видно))
|
|
| |
pashteet | Дата: Суббота, 17.10.2009, 15:15 | Сообщение # 9 |
Зарегистрирован 21.09.2009
Группа: Новички
Сообщений: 225
Город: Волжский
Статус: Offline
| Вследующей программе скрещивание верчения башкой и опроса датчиков
|
|
| |
Space | Дата: Суббота, 17.10.2009, 16:00 | Сообщение # 10 |
Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
| Ну понятно ты всё в один код запихнул. Хотя, если делать как у меня, то отладка проще, а так в принцепе всё равно не плохо. с обработокой датчика можешь так попробовать: Code Проверка_дальномера_справа: Do Start Adc : АЦП = Getadc(0) If АЦП >= 650 Then Gosub Разворот_влево End If Loop Until АЦП < 650 Gosub Вперёд Return
Проверка_дальномера_слева: Do Start Adc : АЦП = Getadc(0) If АЦП >= 650 Then Gosub Разворот_вправо End If Loop Until АЦП < 650
Gosub Вперёд
Return Тогда в разворотах будет не обязательно ставить задержку. У тя он будет разворачиваться до тех пор пока препятствие не исчезнет из поля видимости датчика.
|
|
| |
pashteet | Дата: Суббота, 17.10.2009, 17:02 | Сообщение # 11 |
Зарегистрирован 21.09.2009
Группа: Новички
Сообщений: 225
Город: Волжский
Статус: Offline
| Вот! То что я искал! Тока немог нужный оператор вспомнить, спасибо!
|
|
| |
danger | Дата: Суббота, 17.10.2009, 18:07 | Сообщение # 12 |
Язык программированя: пока нет
Зарегистрирован 17.07.2009
Группа: Новички
Сообщений: 168
Город: Чебоксары
Статус: Offline
| молодца +5 Добавлено (17.10.2009, 18:07) --------------------------------------------- платформу замучелся наверное делать))
http://vkontakte.ru/club13643816 тыркни по ссылке
|
|
| |
pashteet | Дата: Суббота, 17.10.2009, 19:25 | Сообщение # 13 |
Зарегистрирован 21.09.2009
Группа: Новички
Сообщений: 225
Город: Волжский
Статус: Offline
| да, с платформой был косяк - я дрель в гараже забыл и пришлось вручную сверлом отверстия ковырять в дереве еще куда нешло, а вот в аллюминьке вообще ад Добавлено (17.10.2009, 19:25) --------------------------------------------- Закончил "скрещение кодов", вот результат: http://photofile.ru/users/pashteet/video/v1180026189a/view/ На ютуб чет несмог выложить, извиняйте
Сообщение отредактировал pashteet - Суббота, 17.10.2009, 19:28 |
|
| |
антоха_ликвидатор | Дата: Суббота, 17.10.2009, 19:33 | Сообщение # 14 |
Зарегистрирован 30.07.2009
Группа: Новички
Сообщений: 86
Город: Пыть-Ях
Статус: Offline
| прикольный робот, круть.
я чемпион побе-побегу вокруг стола от мужа с топором.
|
|
| |
pashteet | Дата: Суббота, 17.10.2009, 19:57 | Сообщение # 15 |
Зарегистрирован 21.09.2009
Группа: Новички
Сообщений: 225
Город: Волжский
Статус: Offline
| Реализовал еще одну прикольную идейку: Теперь если робота включить в руках (т.е. в воздухе) то он не будет опрашивать датчики поверхности, дабы исключить их ложное срабатывание (это сделано для того, что бы робота можно было пускать по полу) Если же перед включением его поставить на стол, то датчики будут опрашиваться (таким образом он не упадет с края стола) В обоих случаях, если взять робота в руки - то он остановится (для того, чтобы его было удобно выключать)
|
|
| |
|