roboforum.ru

Технический форум по робототехнике.

 

Гусинечная платформа "Roberto-1"

Наше хобби — конструировать и программировать.
Демонстрация готовых роботов и устройств построенных своими руками.

Гусинечная платформа "Roberto-1"

Сообщение Krish » 12 май 2011, 16:18

Вот мой робот:)
Он первый, поэтому я на нём только учусь работать, язык программирования пока не доучил, поэтому реализовать полностью проект свой ещё не смог, но начало мне понравилось...
Значит робот на гусеничной платформе.
Мозг-atmega16 - 16MHz
ДД-L293D
Сервопривод - SG5010
SHARP - GP2Y0A21YK0F
Есть TSOP1736 для RC5 (подключал, игрался, только у меня пульт сломался я его выкинул)
Датчик оптопары - фд/сд.
Версия1:
SAM_0196.JPG

Версия2:
SAM_0205.JPG

SAM_0206.JPG

SAM_0207.JPG

SAM_0210.JPG

SAM_0211.JPG

SAM_0212.JPG


На первом видео горят светодиоды, они программно связаны с ШАРПом:
'*******************************************************************************

Код: Выделить всёРазвернуть
$regfile = "m16def.dat"                                     ' используем описание МК АТмега48
$crystal = 16000000                                         'частота кварцевого резонатора 16mHz

'*****************************Настройка ADC*************************************

Config Adc = Single , Prescaler = Auto , Reference = Avcc   ' для мега48 Reference = AVcc (напряжение питания) / Internal (1.1В) / AREF (внешнее опорное питание)

'****************************Описание портов************************************

Config Pinc.7 = Output : Led1 Alias Portc.7
Config Pinc.2 = Output : Led2 Alias Portc.2
Config Pind.2 = Output : Led3 Alias Portd.2

'************************Описание переменных************************************

Dim I As Integer
Dim Vout As Word

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

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

Start Adc                                                   ' запустили АЦП

Do

Vout = Getadc(7)                                            ' произвели замер напряжения на 4 канале АЦП (PORTC.4)

If Vout < 50 Then : Set Led1
Elseif Vout < 100 Then : Set Led2
Elseif Vout < 150 Then : Set Led3
  End If

Waitms 50

Reset Led1
Reset Led2
Reset Led3

Loop

End




Потом скину получше видео, мне надо пульт купить для RC5 ))

У меня вопрос с Sharp, вот строчка в программе, я с ней замучался:
Vout = Getadc(7) ' произвели замер напряжения на 4 канале АЦП (PORTC.7)
Эта строчка программы означает, что Шарп подключен к порту C7, да?
А как поменять чтоб был порт, например, А, это получается Vout = Getada(7), так?
дело в том что, если посмотреть по общей программе, которую я скинул к порту C7 подключен Led1, я подключал Шарп к порту A7, и он работал!
Последний раз редактировалось SkyStorm 12 май 2011, 17:05, всего редактировалось 1 раз.
Причина: поправил ссылки на видео
Krish
 
Сообщения: 155
Зарегистрирован: 29 дек 2010, 14:08
Откуда: Ростов-на-Дону
Skype: levanchik322
прог. языки: С++

Re: Гусинечная платформа "Roberto-1"

Сообщение Krish » 13 май 2011, 19:27

Подключил программу)
Конечно видео на очень хорошего кач-ва, мало света + комната маленькая из-за этого роботу было трудно сориентировать, да приходилось его питать с USB порта, т.к. я батарейки посадил.
Что лучше для робота, аккумуляторы или батарейки?
Программа такая:
Код: Выделить всёРазвернуть
'*******************************************************************************

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

'****************************Настройка таймеров и сервоприводов*****************

Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down       ' таймер для ШИМ двигателей
Config Servos = 1 , Servo1 = Portc.7 , Reload = 12          ' Указываем кол-во серв, присваеваем имя Servo1 порту PC7, указываем длину импульса.

'*************************** Порт A ********************************************

' Поключили дальномер, порт A0, настройки АДС ниже

'*************************** Порт В ********************************************

Config Pind.2 = Output : Led1 Alias Portd.2                 'ногу сконфигурировали как выход и обозвали Led1
Config Pind.3 = Output : Led2 Alias Portd.3                 'ногу сконфигурировали как выход и обозвали Led2

'*************************** Порт C ********************************************

Config Pinc.7 = Output                                      ' Подключили серву1 к порту С7, настройки сервы выше

'*************************** Порт D ********************************************

Config Pinc.6 = Output : Dr1 Alias Portc.6                  'ногу сконфигурировали как выход и обозвали Dr1
Config Pinc.5 = Output : Dr2 Alias Portc.5                  'ногу сконфигурировали как выход и обозвали Dr2
Config Pinc.4 = Output                                      'ногу ШИМа 1-ого  движка сконфигурировали как выход
Config Pinc.3 = 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(0)                                '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(0)                                '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

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

Робот практически готов, нужно только подправить в некоторых местах код и всё.
Если увидели в коде ошибку скажите пожалуйста, это очень поможет.
Видео вот:
http://www.youtube.com/watch?v=QzUOKmU4jw4
p.s. видео я не умею ставить.
Krish
 
Сообщения: 155
Зарегистрирован: 29 дек 2010, 14:08
Откуда: Ростов-на-Дону
Skype: levanchik322
прог. языки: С++

Re: Гусинечная платформа "Roberto-1"

Сообщение kot_snork » 13 май 2011, 19:29

$regfile = "m16def.dat" ' используем описание МК АТмега48
$crystal = 16000000 'частота кварцевого резонатора 16mHz
Мне сносят мозг эти строчки m16def.dat - ATmega 16
m48def.dat - МК АТмега48
и какой у тебя контроллер стоит?
у АТмега48 на порту С, только АЦП находиться
у ATmega 16 - порт А, это АЦП

Добавлено спустя 1 минуту 59 секунд:
Krish писал(а):Подключил программу)
да приходилось его питать с USB порта, т.к. я батарейки посадил.
Что лучше для робота, аккумуляторы или батарейки?

как бы сам ответил выше, батарейки посадил и их в мусорку, а аккумуляторы только и успевай подзаряжать=) :)
Аватара пользователя
kot_snork
 
Сообщения: 22
Зарегистрирован: 04 фев 2011, 21:19
Откуда: Волжский
ФИО: Пресняков Константин

Re: Гусинечная платформа "Roberto-1"

Сообщение Krish » 13 май 2011, 19:30

kot_snork писал(а):$regfile = "m16def.dat" ' используем описание МК АТмега48
$crystal = 16000000 'частота кварцевого резонатора 16mHz
Мне сносят мозг эти строчки m16def.dat - ATmega 16
m48def.dat - МК АТмега48
и какой у тебя контроллер стоит?
у АТмега48 на порту С, только АЦП находиться
у ATmega 16 - порт А, это АЦП


Я просто данную программу откуда то брал) забыл просто подкорректировать)
мозг atmega16A, если быть точнее
Krish
 
Сообщения: 155
Зарегистрирован: 29 дек 2010, 14:08
Откуда: Ростов-на-Дону
Skype: levanchik322
прог. языки: С++

Re: Гусинечная платформа "Roberto-1"

Сообщение EasyTech » 22 май 2011, 18:58

Нашёл ошибку в коде)) неверно указ вход АЦП и ШИМ в данном ДД не используется)))

Добавлено спустя 12 минут 24 секунды:
Блин, помогите пожалуйста, ШАРП как не живой программу на него написал:
Код: Выделить всёРазвернуть
'***********************************Sharp***************************************

Sharp_right:

Start Adc : Vout = Getadc(1)                                '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(1)                                '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

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

Он вообше не реагирует на ШАРП, он что сгорел?
У меня Sharp 2y0a21, подключаю его: s,-,+. Верно же, по даташиту так смотрел...
EasyTech
 
Сообщения: 239
Зарегистрирован: 15 май 2011, 19:19
Откуда: Ростов-на-Дону
Skype: levanchik322
прог. языки: WinAVR C, C#, HTML+СSS.
ФИО: Лёва

Re: Гусинечная платформа "Roberto-1"

Сообщение SkyStorm » 23 май 2011, 00:11

А куда шарп подключен?
Никто кроме нас!!!
4Robots.ru - Все для роботов!
Аватара пользователя
SkyStorm
 
Сообщения: 2596
Зарегистрирован: 05 фев 2008, 15:33
Откуда: St. Petersburg - Moscow
Skype: SkyStorm77
ФИО: Костюк Константин Вячеславович

Re: Гусинечная платформа "Roberto-1"

Сообщение Zorg R2-D2 » 23 май 2011, 03:37

У меня вопрос с Sharp, вот строчка в программе, я с ней замучался:
Vout = Getadc(7) ' произвели замер напряжения на 4 канале АЦП (PORTC.7)
Эта строчка программы означает, что Шарп подключен к порту C7, да?
А как поменять чтоб был порт, например, А, это получается Vout = Getada(7), так?
дело в том что, если посмотреть по общей программе, которую я скинул к порту C7 подключен Led1, я подключал Шарп к порту A7, и он работал!


Согласно даташиту на мегу16 (http://www.atmel.com/dyn/resources/prod_documents/doc2466.pdf), у неё ацп находится на порту А (см. Figure 1). GetADC(7) - это значит, что необходимо взять значение с PA7. Буква "С" в имени функции - не название порта, а сокращение от ADC - Analog-to-digital converter, тобишь аналого-цифровой преобразователь.
Так что подключение шарпа к PA7 - верное решение. :)
Изображение
Аватара пользователя
Zorg R2-D2
 
Сообщения: 68
Зарегистрирован: 24 окт 2007, 14:34
Откуда: Москва
Skype: kirik444
прог. языки: Pascal, C++, C#

Re: Гусинечная платформа "Roberto-1"

Сообщение EasyTech » 23 май 2011, 13:20

По программме к РА1, светодиоды реагируют на изменения расстояния, а робот нет, он прёт на стенку и всё! не знаю что и делать, вроде Шарп подключаю верно. Вото программа, посмотрите пожалуйста. Я её писал в попыхах, сам найти ошибку не могу(
Код: Выделить всёРазвернуть
'*******************************************************************************

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

'****************************Настройка таймеров и сервоприводов*****************

Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down       ' таймер для ШИМ двигателей
Config Servos = 1 , Servo1 = Portc.7 , Reload = 12          ' Указываем кол-во серв, присваеваем имя Servo1 порту PC7, указываем длину импульса.

'*************************** Порт A ********************************************

' Поключили дальномер, порт A1, настройки АДС ниже

'*************************** Порт В ********************************************

Config Pind.2 = Output : Led1 Alias Portd.2                 'ногу сконфигурировали как выход и обозвали Led1
Config Pind.3 = Output : Led2 Alias Portd.3                 'ногу сконфигурировали как выход и обозвали Led2

'*************************** Порт C ********************************************

Config Pinc.7 = Output                                      ' Подключили серву1 к порту С7, настройки сервы выше

'*************************** Порт D ********************************************

Config Pinc.6 = Output : Dr1 Alias Portc.6                  'ногу сконфигурировали как выход и обозвали Dr1
Config Pinc.5 = Output : Dr2 Alias Portc.5                  'ногу сконфигурировали как выход и обозвали Dr2
Config Pinc.4 = Output : Dr3 Alias PORTC.4                                     'ногу ШИМа 1-ого  движка сконфигурировали как выход
Config Pinc.3 = Output : Dr4 Alias Portc.3                  'ногу ШИМа 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 45 Step 1                                     ' Вращаем сервой справа на лево
    Servo(1) = I
    Gosub Sharp_left                                        ' считаем что шарп смотрит влево
    Waitms 12                                               ' ждем 12 мс
Next

For I = 45 To 0 Step -1                                     ' Вращаем сервой слева на право
    Gosub Sharp_left                                        ' считаем что шарп смотрит вправо
    Servo(1) = I
    Waitms 12                                               ' ждем 12 мс
Next

For I = 0 To 45 Step -1                                     ' Вращаем сервой слева на право
    Gosub Sharp_right                                       ' считаем что шарп смотрит влево
    Servo(1) = I
    Waitms 12                                               ' ждем 12 мс
Next

Loop

'*******************************************************************************
'      Включение комбинации моторов для движения в заданном направлении
'*******************************************************************************


Вперёд:

Dr1 = 1 : Dr3 = 1
Dr2 = 0 : Dr4 = 0
Return

Назад:
Dr1 = 0 : Dr3 = 0
Dr2 = 1 : Dr4 = 1
Return

Разворот_вправо:
Dr1 = 1 : Dr3 = 0
Dr2 = 0 : Dr4 = 1
Return

Разворот_влево:
Dr1 = 0 : Dr3 = 1
Dr2 = 1 : Dr4 = 0
Return

'***********************************Sharp***************************************

Sharp_right:

Start Adc : Vout = Getadc(1)                                '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(1)                                '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

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

Особенно проверьте момент, с поворатами и движениями моторов!
EasyTech
 
Сообщения: 239
Зарегистрирован: 15 май 2011, 19:19
Откуда: Ростов-на-Дону
Skype: levanchik322
прог. языки: WinAVR C, C#, HTML+СSS.
ФИО: Лёва

Re: Гусинечная платформа "Roberto-1"

Сообщение SkyStorm » 23 май 2011, 13:41

Драйвер двигателей у тебя куда подключен на МК?
6 контактов?

Добавлено спустя 30 секунд:
Вообще схема у тебя есть???
Никто кроме нас!!!
4Robots.ru - Все для роботов!
Аватара пользователя
SkyStorm
 
Сообщения: 2596
Зарегистрирован: 05 фев 2008, 15:33
Откуда: St. Petersburg - Moscow
Skype: SkyStorm77
ФИО: Костюк Константин Вячеславович

Re: Гусинечная платформа "Roberto-1"

Сообщение EasyTech » 23 май 2011, 16:57

SkyStorm писал(а):Драйвер двигателей у тебя куда подключен на МК?
6 контактов?

Добавлено спустя 30 секунд:
Вообще схема у тебя есть???

Драйвер ДД - даташит l293d, подключен через 4 провода:

s0738712.jpg
s0738712.jpg (4.25 КиБ) Просмотров: 2346


Схема робота обычная, схожа с MRC40

Добавлено спустя 1 минуту 7 секунд:
in3 - pc6
in4 - pc5
in1 - pc4
in2 - pc3
EasyTech
 
Сообщения: 239
Зарегистрирован: 15 май 2011, 19:19
Откуда: Ростов-на-Дону
Skype: levanchik322
прог. языки: WinAVR C, C#, HTML+СSS.
ФИО: Лёва

Re: Гусинечная платформа "Roberto-1"

Сообщение SkyStorm » 23 май 2011, 21:32

это не схема а порнография
но по ней шарп на PA.7 а это точно не getadc(1)
Никто кроме нас!!!
4Robots.ru - Все для роботов!
Аватара пользователя
SkyStorm
 
Сообщения: 2596
Зарегистрирован: 05 фев 2008, 15:33
Откуда: St. Petersburg - Moscow
Skype: SkyStorm77
ФИО: Костюк Константин Вячеславович

Re: Гусинечная платформа "Roberto-1"

Сообщение EasyTech » 24 май 2011, 15:59

Это старое подключение Шарпа сечас он был подключён к PA1
Схема робота - MRC40. только без UART и LCD.
http://robozone.su/2008/06/01/universal ... rc-40.html

Я не знаю, мож ШАРП сгорел?
МК что то плохо работает, надо походу купить контроллер, на нём поигаться Шарпиком и ДД, чтоб не париться из за схем. А потом уже переносить на старую...
EasyTech
 
Сообщения: 239
Зарегистрирован: 15 май 2011, 19:19
Откуда: Ростов-на-Дону
Skype: levanchik322
прог. языки: WinAVR C, C#, HTML+СSS.
ФИО: Лёва

Re: Гусинечная платформа "Roberto-1"

Сообщение EasyTech » 25 май 2011, 19:59

ВСё код сделал)) Шарп работает, даже лучше чем я думал, только нужно сделать плавное вращение моторов, и убрать некоторые помехи.
Вот моя программа, которая сейчас стоит:
Код: Выделить всёРазвернуть
$regfile = "m16def.dat"
$crystal = 16000000

Config Adc = Single , Prescaler = Auto , Reference = Internal

Config Pinc.6 = Output : M1f Alias Portc.6
Config Pinc.5 = Output : M1b Alias Portc.5
Config Pinc.4 = Output : M2f Alias Portc.4
Config Pinc.3 = Output : M2b Alias Portc.3

Enable Interrupts

Dim АЦП1 As Word , Выбор_разворота As Bit

Выбор_разворота = 0

Do
Start Adc : АЦП1 = Getadc(0)
If АЦП1 >= 500 Then : Gosub Отъехать_от_препятствия_спереди : Else : Gosub Вперёд : End If
Loop

Вперёд:

M1f = 1 : M2f = 1
M1b = 0 : M2b = 0
Return

Назад:
M1f = 0 : M2f = 0
M1b = 1 : M2b = 1
Return

Разворот_вправо:
M1f = 1 : M2f = 0
M1b = 0 : M2b = 1
Return

Разворот_влево:
M1f = 0 : M2f = 1
M1b = 1 : M2b = 0
Return

'**********************Отъезд от препятствия по центру**************************
Отъехать_от_препятствия_спереди:
Do
Start Adc : АЦП1 = Getadc(0) : Stop Adc
Gosub Назад
Loop Until АЦП1 <= 300

If Выбор_разворота = 0 Then : Gosub Разворот_вправо : Else : Gosub Разворот_влево : End If
Wait 1                                                      'Время разворота
If Выбор_разворота = 0 Then : Выбор_разворота = 1 : Else : Выбор_разворота = 0 : End If       'Переустанавливаем переменную
Return

2 Вопроса.
1) Почему то когда я подключаю USB питание роботу (через программатор), он работает щикарно. Когда я включаю аккумулятор роботу на 6В через КРЕН, то он не хочет работать!!! Почему?
2) Вот программа:
Код: Выделить всёРазвернуть
'*******************************************************************************

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

'****************************Настройка таймеров и сервоприводов*****************
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down       ' таймер для ШИМ двигателей
Config Servos = 1 , Servo1 = Portc.7 , Reload = 12          ' Указываем кол-во серв, присваеваем имя Servo1 порту PC7, указываем длину импульса.

'*************************** Порт A ********************************************

' Поключили дальномер, порт A1, настройки АДС ниже

'*************************** Порт В ********************************************

Config Pind.2 = Output : Led1 Alias Portd.2                 'ногу сконфигурировали как выход и обозвали Led1
Config Pind.3 = Output : Led2 Alias Portd.3                 'ногу сконфигурировали как выход и обозвали Led2

'*************************** Порт C ********************************************

Config Pinc.7 = Output                                      ' Подключили серву1 к порту С7, настройки сервы выше

'*************************** Порт D ********************************************

Config Pinc.6 = Output : Dr1 Alias Portc.6                  'ногу сконфигурировали как выход и обозвали Dr1
Config Pinc.5 = Output : Dr2 Alias Portc.5                  'ногу сконфигурировали как выход и обозвали Dr2
Config Pinc.4 = Output : Dr3 Alias Portc.4                  'ногу сконфигурировали как выход и обозвали Dr3
Config Pinc.3 = Output : Dr4 Alias Portc.3                  'ногу сконфигурировали как выход и обозвали Dr4

'*****************************Настройка 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 45 Step 1                                     ' Вращаем сервой справа на лево
    Servo(1) = I
    Gosub Sharp_left                                        ' считаем что шарп смотрит влево
    Waitms 12                                               ' ждем 12 мс
Next

For I = 45 To 0 Step -1                                     ' Вращаем сервой слева на право
    Gosub Sharp_left                                        ' считаем что шарп смотрит вправо
    Servo(1) = I
    Waitms 12                                               ' ждем 12 мс
Next

For I = 0 To 45 Step -1                                     ' Вращаем сервой слева на право
    Gosub Sharp_right                                       ' считаем что шарп смотрит влево
    Servo(1) = I
    Waitms 12                                               ' ждем 12 мс
Next

Loop


'************************Основные программы движения****************************

Стоп:                                                       ' стоим на месте
Dr1 = 0 : Dr2 = 0 : Dr3 = 0 : Dr4 = 0 : Pwm1a = 0 : Pwm1b = 0
Return

Вперёд:                                                     ' едим вперёд
Dr1 = 0 : Dr2 = 1 : Dr3 = 1 : Dr4 = 0 : Pwm1a = 0 : Pwm1b = 0
Return

Вправо:                                                     ' поварачиваем вправо
Dr1 = 1 : Dr2 = 0 : Dr3 = 1 : Dr4 = 0 : Pwm1a = 0 : Pwm1b = Speed
Return

Влево:                                                      ' поворачиваем влево
Dr1 = 0 : Dr2 = 1 : Dr3 = 0 : Dr4 = 1 : Pwm1a = Speed : Pwm1b = 0
Return

Назад:                                                      ' едим назад
Dr1 = 1 : Dr2 = 0 : Dr3 = 0 : Dr4 = 1 : Pwm1a = Speed : Pwm1b = Speed
Return

'***********************************Sharp***************************************

Sharp_right:

Start Adc : Vout = Getadc(1)                                'Sharp connected for example to PA=1(ADC1)
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(1)                                'Sharp connected for example to PA=1(ADC1)
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

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

Почему то она не хочет компелироваться в BASCOM AVR (программа), посмотрите пожалуйста у себя, в чём ошибка? Вроде проверил всё, ошибки не должно быть!


______________

НА чердаке нашёл книжку Си и Си++ 1996 года, блин она вообще чёткая, всё хорошо описанно, надо учить))
Нашёл учителя робототехнике, он учится в ДГТУ Ростовском "Робототехника и механика", на 4 курсе, он мне помогает, у него свой кружок, правда у них там на NXT (программировать вообще легко, сёдня одного запрогил, у них программирование как в LabView). Вообще супер, он мне сёдня на лекции объяснял работу PID (программируемая интегральная диференциальная система, или как то так...) , оч интересно...
EasyTech
 
Сообщения: 239
Зарегистрирован: 15 май 2011, 19:19
Откуда: Ростов-на-Дону
Skype: levanchik322
прог. языки: WinAVR C, C#, HTML+СSS.
ФИО: Лёва

Re: Гусинечная платформа "Roberto-1"

Сообщение EasyTech » 26 май 2011, 14:47

С питание разобрался всё хорошо, но с программой нет! Помогите(
Другой вопрос, мне нужен хороший датчик линии... Что вы можете посоветовать? и чем они отличаются? Например, OR от Pololu.
И чем отличает линия датчиков из ~9 оптопар, от одной?
EasyTech
 
Сообщения: 239
Зарегистрирован: 15 май 2011, 19:19
Откуда: Ростов-на-Дону
Skype: levanchik322
прог. языки: WinAVR C, C#, HTML+СSS.
ФИО: Лёва

Re: Гусинечная платформа "Roberto-1"

Сообщение dccharacter » 26 май 2011, 15:49

Леван стал Александром и продолжил троллить. Так держать!
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4862
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

След.

Вернуться в Наши проекты

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

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

Mail.ru counter