***
Все это умещается на плате которую вам предстоит спаять и установить на нее детали. Все детали, кстати, выполнены в DIP корпусе и с ним подобным, что облегчает жизнь начинающему робототехнику. Паять не сложно будет. Детали расположены очень кучно и при пайке соблюдайте аккуратность и внимательно устанавливайте на свои места детали. Иначе перепаивать а это очень тяжко для таких плат, так как у меня обычно детали припаиваются намертво =).
Мозговым центром бота является микроконтроллер фирмы Atmel - ATmega8L, где L - означает что микросхема из рода мало потребляющих и мало-требующих для работы. Обычно запускаются от 3-5 Вольт. Этот МК управляет 6 тактильными датчиками (датчиками касания), установленными в передней части бота, 4 оптопарами которые установлены рядом с редуктором для подсчета количества оборотов колеса. А также датчиком линии состоящим из 2х фототранзисторов и одним светодиодом между ними.
Редуктор на этом роботе, мягко говоря - никудышнейший ! Я просто не могу Вам сказать все что о нем думаю! Редуктор нельзя использовать для участия в конкурсах или настоящих соревнований по робототехнике. Он очень м-е-едленный, очень слабенький, руками слегка притормаживаешь и он дохнет от напряги, пищит. Сразу говорю - редуктор меняйте !Моторами управляет Н-мост на транзисторах C32740 и, кажется микросхемой CD4081BD.
Напряжение робот просит в количестве 4 батареек типоразмера ААА по 1.5 (1.2) Вольт каждая.
2.ВИДЕОТЕСТЫ РОБОТА ASURO
На видео показано прохождение роботом трассы.
3.ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ
Технические характеристики набора приведены в таблице.1.
Табл.1.
Принципиальная электрическая схема робота ASURO показана на фото.3.
Будем считать что робот у вас допаян и собран. Батарейки новые и при включении он запускает тестовую прошивку которая проверяет все агрегаты типа моторов, датчиков, сенсоров.
4.ПРОГРАММИРОВАНИЕ.
5.НАСТРАИВАЕМ ПРОГРАММУ.
6.ПИШЕМ ПРОГРАММУ.
7.ЧТО ЭТО ЗНАЧИТ ?
Первая строка говорит о том, что в ходе компилирования не обнаружено каких либо ошибок синтаксиса и прочего. Вторая строка просто так. Третья строка говорит что ошибок (точек выхода\сбоя\ошибки) не найдено. Четвертая строка показывает затраченное время на компиляцию.
1.Открыв файл программы test.c и запустите на компиляцию. Вы увидите что ошибок 0.
2.Теперь открытый файл test.c на любой из строчек удалите ";"
И так. Теперь мы знаем как установить, настроить, скомпилировать и проверить нашу программу. Возникает закономерный вопрос - что нужно сделать чтобы робот начал выполнять нашу программу (инструкцию) сам ?
Для этого нужно нашу программу запихать в его мозги, - микроконтроллер. Причем в память его не энергозависимую. А то если запишем в энергозависимую, то при его выключении все потеряется. Для тех кого заинтересовало какие есть типы памяти - ищите в гугле
Помните мы было дело создавали папку FirstTry ? Вот сейчас идем в эту папку и находим там файлик test.hex. Это тот самый файл который умеет читать МК. Если хотите, можете его открыть в блокноте и узнаете что он из себя представляет =)
После картины "шамана с бубном", трясущего роботом над программатором, ну, по крайней мере - я тряс ) Вы кое как, возможно и не с первого раза, но все же прошили МК на 100%. Теперь можно выключить питание робота, так как он будет висеть так далее, ждать новые команды от программатора.
Включите робота. Через 5 секунд ожидания робот начнет выполнять программу. Что он начнет делать ? Ответ прост - ничего ! =) Мы не указывали каких либо действий - просто программа типа START-END.
#define NAME replacement_text
12.DEFINE ПРОСТОЙ НАГЛЯДНЫЙ ПРАКТИЧЕСКИЙ ПРИМЕР
#include "asuro.h”
#define STARTINGVALUE 33
int main(void)
else
{
Если условие не совпадает, т.е. оно не правда (false), выполняется эта строка ;
}
Какими бывают условия:
== что-то равно чему-то
!= что-то не равно чему-тоl
< что-то меньше чего-то
> что-то больше чего-то
<= что-то меньше или равно чему-то
>= что-то больше или равно чему-то
Пример: (A > B), (A <= и так далее... Давайте разберем более наглядный пример с использованием все тех же светодиодов:
#include "asuro.h”
int main(void)
while (1)
else
}
Скомпилируйте и залейте этот код в микроконтроллер. Готово ? Тогда включите робота. Что начало происходить ? Нет, выключать и включать по десять раз, думая что что-то не так, не стоит. В идеале у вас должен загореться зеленый светодиод, и больше никаких действий не будет совершаться, пока...
Вот тут то и начинает работать наше условие "ПОКА".
Что такое функция PollSwitch() ? Объясняю. Эта функция отвечает за опрос наших контактных датчиков, которых у нас аж 6 штук. Каждый датчик обзывается как К1, К2, ... ,К6.
В нашей программе мы делаем условие: ЕСЛИ хоть 1 датчик касания нажат, ТО включаем зеленый светодиод, ЕСЛИ нет, то включаем красный светодиод. Теперь снова включите робота и тут же нажмите и держите любой датчик касания. Светодиод поменяет свой цвет. Ура ! Работает !
![]() фото.1 | ![]() фото.2 |
1.ОПИСАНИЕ К РОБОТУ ASURO
Есть такой робототехнический набор "ASURO robot KIT" - такой набор для сборки робота. Поставляется в виде набора для сборки и пайки своими руками. Размеры робота сравнительно не большие, сколько точно не скажу ищите в описании. Мне лень хотел сказать замерять, но вот как на зло я знаю где лежит линейка и без особых телодвижений до нее можно дотянуться... Так и быть - 10.5 х 12.5 (см).
Все это умещается на плате которую вам предстоит спаять и установить на нее детали. Все детали, кстати, выполнены в DIP корпусе и с ним подобным, что облегчает жизнь начинающему робототехнику. Паять не сложно будет. Детали расположены очень кучно и при пайке соблюдайте аккуратность и внимательно устанавливайте на свои места детали. Иначе перепаивать а это очень тяжко для таких плат, так как у меня обычно детали припаиваются намертво =).
Мозговым центром бота является микроконтроллер фирмы Atmel - ATmega8L, где L - означает что микросхема из рода мало потребляющих и мало-требующих для работы. Обычно запускаются от 3-5 Вольт. Этот МК управляет 6 тактильными датчиками (датчиками касания), установленными в передней части бота, 4 оптопарами которые установлены рядом с редуктором для подсчета количества оборотов колеса. А также датчиком линии состоящим из 2х фототранзисторов и одним светодиодом между ними.
Редуктор на этом роботе, мягко говоря - никудышнейший ! Я просто не могу Вам сказать все что о нем думаю! Редуктор нельзя использовать для участия в конкурсах или настоящих соревнований по робототехнике. Он очень м-е-едленный, очень слабенький, руками слегка притормаживаешь и он дохнет от напряги, пищит. Сразу говорю - редуктор меняйте !Моторами управляет Н-мост на транзисторах C32740 и, кажется микросхемой CD4081BD.
Напряжение робот просит в количестве 4 батареек типоразмера ААА по 1.5 (1.2) Вольт каждая.
2.ВИДЕОТЕСТЫ РОБОТА ASURO
На видео показано прохождение роботом трассы.
Технические характеристики набора приведены в таблице.1.
Табл.1.
| МИКРОКОНТРОЛЛЕР | ПРОГРАММИРОВАНИЕ | СЕНСОРЫ | ИСТОЧНИК ПИТАНИЯ | РАЗМЕРЫ |
| AVR ATMega8 Память: 8 kB флэш, из них около килобайта занято Bootloader_ом 1 kB RAM 1 kB EEPROM | Робот поставляется с прошитой во флэш программой AVR-Bootloader, после подачи питания загрузчик пытается принять с компьютера данные, а если IR сигнал не обнаружен, через две секунды робот начинает исполнять текущую программу. | Два фототранзистора позволяют отслеживать линию на полу шесть контактных датчиков (микропереключатели) Две фотоячейки считают обороты колёс. | 4 шт. гальванических элемента типоразмера 4AAA | Длина × Ширина × Высота 117×122×45мм |
фото.3 нажимайте для увеличения
Будем считать что робот у вас допаян и собран. Батарейки новые и при включении он запускает тестовую прошивку которая проверяет все агрегаты типа моторов, датчиков, сенсоров.
4.ПРОГРАММИРОВАНИЕ.
Начните с установки пакета программ которые идут на диске с роботом. Список необходимых к установке программ:
- WinAVR или AVRStudio4. Компиляторы С\С++ с помощью которых мы будем составлять и
компилировать инструкцию поведения робота - .hex файл, который скушает
микроконтроллер. В нашем случае будет использоваться первый вариант -
WinAVR - Flash - загрузчик нашего .hex кода.
- Adobe Reader по идее есть у каждого, но если хотите можете его скачать тоже для чтения мануала на английском.
Запускаем WINAVR - Programmers Notepad. Нажимаем вкладку Tools -> Options -> Tools(именно tools a не project tools). Откроется окошко подписанное как "Sheme". В этом окне выбираем нашу схему - C\C++. Выбрав схему нажимаем Add. Сейчас нужно будет добавить батник (.bat) который содержит в себе всего одну строку команду или "make all" или "clean all" В открывшемся окне "Свойства: New Tool" набираем имя(name): make asuro. В поле команда указываем файл test-all.bat, который находится на диске в разделе \ASURO_src\FirstTry\Test-all.bat.
ВНИМАНИЕ! Скопируйте папку FistTry c диска на свой компьютер на диск С прямо в корень.
То есть путь к папке должен быть следующим C:\FirstTry\. Это связанно с тем что компилятор не сможет перезаписать файлы находящиеся на диске что идет в комплекте и когда вы бы попытались запустить команду make asuro(позже узнаете как), то компилятор бы не ругаясь скомпилировал все, но на самом деле файлы не изменятся совершенно. И да, компилятор не умеет работать с русскими путями. Например если у вас файл находится по такому пути C:\FirstTry\Вася Пупкин\ . Будьте внимательными.
И так, вы указали путь к файлу test-all.bat. Идем дальше. В поле Folder указываем путь к папке в котором находится этот файл test-all.bat. Т.е. получается так: C:\FirstTry\. Указали. Теперь закроем окно нажав кнопку "ОК". Теперь у нас появился список:[WinAVR] Make All ... make.exe ... all Снова нажимаем Add. В поле Name пишем clean asuro. В поле Command указываем файл Test-clean.bat. Файл находится там же где и Test-all.bat. В поле Folder указываем папку где находится файл. Нажимаем "ОК".
Все на этом пока наши настройки закончены !
В скопированной папке FistTry которая у вас находится по адресу C:\FistTry\ найдите файлик test.c - это файл программы на языке Си. Можете открыть его блокнотом и вы увидите в нем следующий код:
#include "asuro.h"
int main(void)
{
Init();
while(1);
return 0;
}
Откройте окно программы WinAVR - Notepad programmer. Нажмите File -> Open. Найдите папку FirstTry и в ней файл test.c. Выберите его и нажмите Открыть. Откроется точно тот же код что указан выше, правда теперь он немного подсвечен.
Разберем наш код.
1. #include "asuro.h" - библиотека с настроенными заранее функциями для
корректной работы робота и его микроконтроллера ATmega8.
корректной работы робота и его микроконтроллера ATmega8.
2. Int main(void) - начало нашей программы(функции)
3. Int(); - инициализация. В некоторых случаях не требуется, но укажем все равно.
4. While(1) - бесконечный цикл, проверяющий соответствие true\false (правда\ложь)
5. Return(0) - возвращение в начало функции
Важный момент - " ; " точка с запятой (!) должна присутствовать в конце каждой строки кода, исключения различные условия.
После того как мы разобрали строки попробуем его скомпилировать. Для этого нажимаем вкладку меню Tools -> make asuro. Нажав на make asuro мы запустим команду make all которая находится в файлике Test-all.bat. Как только мы запустили компиляцию в низу в окне Output начали мелькать строки состояния, ошибок, путей и прочих информационных данных, часть из которых нам пока что не нужна, но кое что всегда должно быть во внимании.
В самом низу этих строк будет надпись:
Errors: none
--------
--------
------- end ---------
---------
>
>
Process Exit Code:
0
> Tame Taken: 00:01
> Tame Taken: 00:01
7.ЧТО ЭТО ЗНАЧИТ ?
Первая строка говорит о том, что в ходе компилирования не обнаружено каких либо ошибок синтаксиса и прочего. Вторая строка просто так. Третья строка говорит что ошибок (точек выхода\сбоя\ошибки) не найдено. Четвертая строка показывает затраченное время на компиляцию.
ВНИМАНИЕ!
Перед каждой компиляцией обязательно сохранитесь! Иначе, когда вы вносите изменения в коде, в самой программе WinAVR NP, в тесте вашей программы, при запуске на компиляцию он вам не покажет ошибки. И вы, радостные, побежите заливать прошивку в МК и потом будете ломать голову почему ничего не изменилось )
Для проверки увидит ли он ошибку сделайте тест:
Перед каждой компиляцией обязательно сохранитесь! Иначе, когда вы вносите изменения в коде, в самой программе WinAVR NP, в тесте вашей программы, при запуске на компиляцию он вам не покажет ошибки. И вы, радостные, побежите заливать прошивку в МК и потом будете ломать голову почему ничего не изменилось )
Для проверки увидит ли он ошибку сделайте тест:
1.Открыв файл программы test.c и запустите на компиляцию. Вы увидите что ошибок 0.
2.Теперь открытый файл test.c на любой из строчек удалите ";"
После чего также запустите на компиляцию. Что в итоге ? Ошибок, опять же, он не выдал. Видимо компиляция происходит не из окна с текстом программы а именно от файла test.c где-то из папки...
Для этого нужно нашу программу запихать в его мозги, - микроконтроллер. Причем в память его не энергозависимую. А то если запишем в энергозависимую, то при его выключении все потеряется. Для тех кого заинтересовало какие есть типы памяти - ищите в гугле
Помните мы было дело создавали папку FirstTry ? Вот сейчас идем в эту папку и находим там файлик test.hex. Это тот самый файл который умеет читать МК. Если хотите, можете его открыть в блокноте и узнаете что он из себя представляет =)
8.ПРОШИВАЕМ МИКРОКОНТРОЛЛЕР.
Запускаем программу Flash, которую вы должны были скачать с диска с роботом. Если еще этого не сделали -самое время. Запустили. Откроется маленькое окошко в котором Вам предстоит выбрать:
а) COM-порт
COM-порт - это мост, который связывает программку Flash и наш программатор, который вы подключили в USB-порт. На самом деле COM - тот же самый USB, только называется по другому. Как узнать какой COM порт нам нужен ? Когда вы подключите программатор в USB, если у вас стоит Windows 7, то в большинстве случаев драйвера на него найдутся сами, и
установятся автоматически. Но бывают случаи, в большинстве, приходится все делать вручную.
б) Обзор ...
- Тут мы находим файл с расширением .HEX. В нашей папке выбираем файл test.hex
в) Programm ...
Нажимая эту кнопку программатор начинает запрашивать у МК состояние - готов ли МК к прошивке или нет. Включен он или нет ? Будьте готовы включить робота сразу после нажатия на эту кнопку, так как если робот будет выключен - программа будет писать TameOut - время ожидания вышло.
9.УСТАНАВЛИВАЕМ ДРАЙВЕР ДЛЯ ПРОГРАММАТОРА.
1. Мой компьютер -> Свойства -> Управление. В открывшемся окне нажимаем "Диспетчер устройств". В диспетчере находим "Неизвестное устройство". Если с вашей системой ранее было все ОК, то неизвестных устройств должно быть всего 1 - наш программатор.
2. Нажимаем правой кнопкой по этому неизвестному -> Обновить драйвер -> Выполнить поиск драйверов на этом компьютере ->Выбрать драйвер из списка уже установленных -> В списке (принтеры, мониторы, клавиатуры и прочей фигне) тыкаете на первое попавшееся устройство, например "Принтеры" -> В открывшемся окошке жмем "Установить с диска" -> Заходим в папку, точнее на диск что идет в комплекте с роботом. На диске идем в папку "USB-driver", тыкаем по первому попавшемуся INF файлу. Жмет открыть, ОК. Появится строка типа "USB Serial converter". Нажимаете на эту строку, -> Далее -> Да.
3. Установка драйвера завершена. Можете проверить наличие нашего программатора. Заходим в Диспетчер устройств, находим вкладку "Порты(COM и USB)". Там будет либо название программатора, либо название как у меня: USB Serial port (COM1). Так вот, к чему я все подвожу. Вот эта надпись в скобках - (COM1) - и есть тот порт, который вам нужно указать в программе Flash. У кого-то может быть другой порт, например COM21. Так что смотрите каждый персонально.
2. Нажимаем правой кнопкой по этому неизвестному -> Обновить драйвер -> Выполнить поиск драйверов на этом компьютере ->Выбрать драйвер из списка уже установленных -> В списке (принтеры, мониторы, клавиатуры и прочей фигне) тыкаете на первое попавшееся устройство, например "Принтеры" -> В открывшемся окошке жмем "Установить с диска" -> Заходим в папку, точнее на диск что идет в комплекте с роботом. На диске идем в папку "USB-driver", тыкаем по первому попавшемуся INF файлу. Жмет открыть, ОК. Появится строка типа "USB Serial converter". Нажимаете на эту строку, -> Далее -> Да.
3. Установка драйвера завершена. Можете проверить наличие нашего программатора. Заходим в Диспетчер устройств, находим вкладку "Порты(COM и USB)". Там будет либо название программатора, либо название как у меня: USB Serial port (COM1). Так вот, к чему я все подвожу. Вот эта надпись в скобках - (COM1) - и есть тот порт, который вам нужно указать в программе Flash. У кого-то может быть другой порт, например COM21. Так что смотрите каждый персонально.
10.ПРИСТУПАЕМ К ПРОШИВКЕ МИКРОКОНТРОЛЛЕРА.
Будем считать что у вас настроен программатор, робот с заряженными батарейками, прошивка готова в виде файла test.hex.
Выполните следующую последовательность действий:
1. В программе Flash нажимаем Programm.
2. Берем тут же робота и включаем его.
3. Глаз робота - TSOP - ИК датчик, с помощью которого он видит данные от программатора. Черный такой, с 3 ножками. Его направьте на ваш программатор чтобы между роботом и программатором не было предметов. Расстояние должно быть около 20 см, больше не рекомендую.
Выполните следующую последовательность действий:
1. В программе Flash нажимаем Programm.
2. Берем тут же робота и включаем его.
3. Глаз робота - TSOP - ИК датчик, с помощью которого он видит данные от программатора. Черный такой, с 3 ножками. Его направьте на ваш программатор чтобы между роботом и программатором не было предметов. Расстояние должно быть около 20 см, больше не рекомендую.
ВНИМАНИЕ! Не стоит пытаться прошить робота рядом с лампой дневного света, или рядом с монитором с электронно лучевой трубкой. Мало ли, но от них идут всяческие помехи. Если помехи есть, то в окне программы Flash будут появляться красные буквы "t "- timeout. Если они появились, ну, по трясите роботом перед программатором, должно помочь )
Если все идет хорошо, то там будет писаться flashed, flashed, tttflashed, tcccflashed. Главное что flashed - записано, сохранено.
Если все идет хорошо, то там будет писаться flashed, flashed, tttflashed, tcccflashed. Главное что flashed - записано, сохранено.
После картины "шамана с бубном", трясущего роботом над программатором, ну, по крайней мере - я тряс ) Вы кое как, возможно и не с первого раза, но все же прошили МК на 100%. Теперь можно выключить питание робота, так как он будет висеть так далее, ждать новые команды от программатора.
Включите робота. Через 5 секунд ожидания робот начнет выполнять программу. Что он начнет делать ? Ответ прост - ничего ! =) Мы не указывали каких либо действий - просто программа типа START-END.
11.ПРОГРАММА "МИГАНИЕ СВЕТОДИОДОМ".
На нашем роботе 20 объектов, которыми мы можем в полной мере управлять. Начнем с самого простого - светодиоды. У нас их 7 штук, 3 из которых ИК(инфракрасного диапазона), остальные обычные.
Разберем как они идентифицируются. Так как у нас есть asuro.h - в нем содержаться все дефайны, функции, с которыми мы работаем в основной программе.
Дефайны(defain) - заменяет одно на другое. Например "Вася Пупкин Пупкович" "Вася". Вместо того, чтобы нам в программе писать полное Вася Пупкин Пупкович... мы напишем просто Вася. Нам проще, а программе всё равно, так как мы заранее указали что Вася содержит в себе полное ФИО.
Также в нашем случае, производитель заранее попарился и напридумывал различных функций, упрощающих жизнь программисту.
Также в нашем случае, производитель заранее попарился и напридумывал различных функций, упрощающих жизнь программисту.
В место того чтобы писать и настраивать порты на Запись\Чтение - Ввод\Вывод, мы просто напишем LED и наш светодиод включится. Возникает вопрос, LED'ов то у нас дофига, как именно тот что нужен нам включить ? Ответ скрывается в мануале... Но я его тут процитирую:
Начнем с индикатора питания. Он у нас сдвоенный, имеет два цвета - красный, зеленый, желтый(если горят и тот и тот). Команда для включения красного цвета:
Начнем с индикатора питания. Он у нас сдвоенный, имеет два цвета - красный, зеленый, желтый(если горят и тот и тот). Команда для включения красного цвета:
StatusLED(RED);
- как видно, тут указан статус светодиода: RED или GREEN
#include "asuro.h”
int main(void)
{
Init();
StatusLED(RED);
while(1);
return 0;
}
Компилируем. Tools -> Make asuro -> Проверяем на ошибки. Если ошибок нет... Надеюсь вы не забыли что нужно было сохраниться перед компиляцией ? Быстренько сохраняем и нажимаем компилировать снова... Если ошибок нет, то запускаем программу Flash, выбираем все тот же COM-порт и тот же test.hex файл. Нажимаем Programm ... Включаем робота и шаманим с роботом над программатором.
Прошивка на месте. Перезапускам робота. Сначала как всегда ожидание в 5 секунд, и после чего загорается красным цветом светодиод. Готово - как говорят программисты - It's Work !
Прошивка на месте. Перезапускам робота. Сначала как всегда ожидание в 5 секунд, и после чего загорается красным цветом светодиод. Готово - как говорят программисты - It's Work !
Собственно вот сейчас мы запустим нашу мигалку в работу. Будем использовать вечный цикл, чтобы программа постоянно крутилась по кругу.
Напишем программу:
#include "asuro.h"
int main(void)
{
Init();
while(1)
{
unsingned int i;
StatusLED(GREEN);
for (i = 0; i < 842; i ++)
Sleep(0xFF);
StatusLED(RED);
for (i = 0; i < 842; i ++)
Sleep(0xFF);
}
}
Разберем код: Используем 2 вида цвета - зеленый и красный. Делаем задержку в виде счетчика FOR, в котором мы объявим переменную i равную 0, и значение, до которого эта переменная будет увеличиваться, - до 842. Команда i ++ означает, что к i будет прибавляться цифра 1. Т.е. мат. действие можно записать разными способами: i+=1; i++; i=i+1; Как только i будет равно 842, счетчик запустит команду Sleep(). Эта команда активирует паузу. Как рассчитать паузу ? Ответ в этой формуле: (0.003s/1)/72kHz=216 Это при условии если нам нужна задержка в 3 миллисекунды.
Итог: мигание светодиода то зеленый то красный.
Для тех кто хочет зажечь другие светодиоды, вот другие команды:
1. FrontLED(ON); - светодиод который предназначен для поиска линии
2. BackLED(OFF,ON); - два светодиода расположенные рядом с моторами
Инфракрасные светодиоды включаются чуть по другому, но об этом позже. Кстати по поводу дефайнов, ниже пример того как их правильно указывать:
Для тех кто хочет зажечь другие светодиоды, вот другие команды:
1. FrontLED(ON); - светодиод который предназначен для поиска линии
2. BackLED(OFF,ON); - два светодиода расположенные рядом с моторами
Инфракрасные светодиоды включаются чуть по другому, но об этом позже. Кстати по поводу дефайнов, ниже пример того как их правильно указывать:
#define NAME replacement_text
12.DEFINE ПРОСТОЙ НАГЛЯДНЫЙ ПРАКТИЧЕСКИЙ ПРИМЕР
#include "asuro.h”
#define STARTINGVALUE 33
int main(void)
{
int i;
i= STARTINGVALUE;
// теперь переменная i равна 33
return 0;
}
Разберем пример: мы задали переменную i типа int (int - Integer - Целое число). До начала программы, в "хедере" (шапке, в самом верху), мы задаем замену - число 33 мы заменяем на целое слово STARTINGVALUE. По умолчанию переменная i = 0. Но в программе мы нашу переменную приравниваем (=\==) к слову STARTINGVALUE, которое в свою очередь просто заменяется цифрой 33. В будущем такой заменой можно заменить целую кучу строк кода !
13.РАБОТА С УСЛОВИЯМИ IF ELSE
Эти команды всегда используются для создания различного рода событий, которые происходят и выполняются в зависимости от ситуации. Как движение автомобилей на перекрестке с участием светофора - ЕСЛИ (IF) горит красный (StatusLED(RED), то { выполняется одно действие }, если нет, т.е. что-нибудь еще (ELSE), то { выполняется другое действие }.
Как это выглядит в программе:
if ( Ваше условие)
{
Если условие совпадает, т.е. оно правда (true), выполняется эта строка ;
}
int i;
i= STARTINGVALUE;
// теперь переменная i равна 33
return 0;
}
Разберем пример: мы задали переменную i типа int (int - Integer - Целое число). До начала программы, в "хедере" (шапке, в самом верху), мы задаем замену - число 33 мы заменяем на целое слово STARTINGVALUE. По умолчанию переменная i = 0. Но в программе мы нашу переменную приравниваем (=\==) к слову STARTINGVALUE, которое в свою очередь просто заменяется цифрой 33. В будущем такой заменой можно заменить целую кучу строк кода !
13.РАБОТА С УСЛОВИЯМИ IF ELSE
Эти команды всегда используются для создания различного рода событий, которые происходят и выполняются в зависимости от ситуации. Как движение автомобилей на перекрестке с участием светофора - ЕСЛИ (IF) горит красный (StatusLED(RED), то { выполняется одно действие }, если нет, т.е. что-нибудь еще (ELSE), то { выполняется другое действие }.
Как это выглядит в программе:
if ( Ваше условие)
{
Если условие совпадает, т.е. оно правда (true), выполняется эта строка ;
}
else
{
Если условие не совпадает, т.е. оно не правда (false), выполняется эта строка ;
}
Какими бывают условия:
== что-то равно чему-то
!= что-то не равно чему-тоl
< что-то меньше чего-то
> что-то больше чего-то
<= что-то меньше или равно чему-то
>= что-то больше или равно чему-то
Пример: (A > B), (A <= и так далее... Давайте разберем более наглядный пример с использованием все тех же светодиодов:
#include "asuro.h”
int main(void)
{
while (1)
{
if (PollSwitch()>0)
if (PollSwitch()>0)
{
StatusLED(RED);
}
else
{
StatusLED(GREEN);
}
}
}
Скомпилируйте и залейте этот код в микроконтроллер. Готово ? Тогда включите робота. Что начало происходить ? Нет, выключать и включать по десять раз, думая что что-то не так, не стоит. В идеале у вас должен загореться зеленый светодиод, и больше никаких действий не будет совершаться, пока...
Вот тут то и начинает работать наше условие "ПОКА".
Что такое функция PollSwitch() ? Объясняю. Эта функция отвечает за опрос наших контактных датчиков, которых у нас аж 6 штук. Каждый датчик обзывается как К1, К2, ... ,К6.
В нашей программе мы делаем условие: ЕСЛИ хоть 1 датчик касания нажат, ТО включаем зеленый светодиод, ЕСЛИ нет, то включаем красный светодиод. Теперь снова включите робота и тут же нажмите и держите любой датчик касания. Светодиод поменяет свой цвет. Ура ! Работает !
14.УПРАВЛЕНИЕ МОТОРАМИ
Давайте разберем как же нам заставить робота не только реагировать на прикосновения, но и как-то уже передвигаться - ездить в зад и в перед, поворачивать, танковый разворот... и так далее.
За управление моторами отвечают две команды:
1. MotorDir(параметр_1, параметр_2);
"МоторДирекшен"(MotorDirection или MotorDir) отвечает за направление вращения двигателей. Для контроля направления используется "параметр_1,2". Чтобы мотор крутился вперед, нужно задать параметр FWD (Forward - прямо), если нужно назад - параметр RWD (Backward\Revers - назад). Если вы хотите остановить мотор, нужно указать параметр BREAK.
Например:
MotorDir(FWD,FWD); -Задать движение обоих моторов впередMotorDir(RWD,RWD); -Задать движение обоих моторов назадMotorDir(FWD,RWD); -Один мотор крутим вперед, второй крутим назад. "Танковый разворот"MotorDir(FWD,BREAK); -Один мотор крутим вперед, второй останавливаем.
2. MotorSpeed(параметр_1, параметр_2);
"МоторСпиид"(MotorSpeed) отвечает за скорость вращения наших моторов. Скорость вращения контролируется специальной вещью - ШИМ(Широтно-Импульсная-Модуляция). Вкратце это пучок импульсов которые с определенной частотой включают мотор. Обычно мы как включаем мотор ? подали постоянное напряжение и мотор раскрутился. А в ШИМе мы подаем импульсами наше "постоянное напряжение" и мотор начинает вращаться. Чем чаще эти импульсы приходят, тем быстрее крутится мотор.
Можете провести эксперимент: возьмите мотор с проводками уже припаянными, возьмите батарейку, и один проводок подключите к батарейке, а второй возьмите в другую руку. Взяли ? Будем считать что вы один провод мотора подключили на +, а вторым будем касаться -. И так. Подключите наш проводок что в руке на минус. Мотор начнет крутиться постоянно с максимальной скоростью. А теперь давайте симмитируем наш ШИМ: начинайте многократно касаться нашим проводом на - батарейки. Что наблюдаем ? Пока вы касаетесь мотор - крутится, как только провод не касается мотор останавливается. Чем чаще и быстрее вы начинаете касаться батарейки - тем быстрее крутится мотор. Это и есть наш ШИМ, в общих чертах.
Параметр_1 и Параметр_2 задаются числом в диапазоне от 0 - 255. Почему 255 ? Это рассчитывается по формулам, зависит от частоты и прочих параметров нашего робота. Если 0 - это значит мотор стоит, 255 - мотор крутится на максимальных оборотах. Если хотите медленно - пробуйте уже сами задавать число в этом диапазоне. По идее, но не факт, минимальное значение при котором мотор еще будет подавать признак работы - 60. Это будет либо писк либо ооооочень медленное вращение, либо жалостный писк.
Например:
MotorSpeed(255,255); -Моторы на полную мощность
Ну как вы должно быть уже поняли - одно без другого работать не будет. По этому вот вам цельный код, который вы должны залить в ваш МК:
#include "asuro.h"
int main(void)
{
Init();
MotorDir(FWD,FWD);
MotorSpeed(255,255);
while(1);
return 0;
}
Прошиваем и проверяем. Сразу после включения ваши моторы должны закрутится вперед. поэкспериментируйте с диапазоном чисел и направлением.
Хорошо. Будем считать что с мигалками и передвижениями робота мы разобрались. Может уже успели сделать функцию при которой робот едет прямо, утыкается носом в препятствие, включает реверс, поворачивает, и дальше едет и так далее... ? Да, уже сделали ? Ну вы молодцы тогда
Давайте подойдем ближе и рассмотрим работу наших светосенсоров - линии и оборотов колеса. Кстати... Я вот у себя обороты пока считать не буду, так как я поставил свой редуктор без цветовой маркировки черный-белый-черный... Так вот. Давайте разберем как работет наш фототранзистор фронтовой, что под платой внизу.
15.РАБОТА С ФОТОДАТЧИКАМИ - ФОТОТРАНЗИСТОР, ДАТЧИК ЛИНИИ
Начнем стого, что каким образом работает фотодатчик ? Думаю вы догадываетесь исходя из его названия, он что-то там должен фото...графировать ? ) Нет, принимать "световые пучки", и реагировать на них. Бывают разные типы фотодатчиков - ФОТОрезисторы, ФОТОтранзисторы, ФОТОдиоды, еще какие-либо экзотические, даже та самая солнечная батарея - тоже ФОТО
Эти датчики считывают и передают информацию в аналоговом формате - то есть напряжение, по которому мы будем судить есть линия или ее нет. Обычно для более точного определения используют всяческие преобразования. Существуют преобразователи ЦАП и АЦП - цифровой и аналоговый. Один из напряжения делает цифры 10010111...011, другой из цифр напряжение 1V...3V..5V...0.83V ~
Фототранзисторы Т9 и Т10 будут нам передавать значения вместе с функцией LineData(unsigned int *data)
Из мануала следует, что:
unsigned int data[2];
.
.
LineData(data);
data[] содержит в себе "контейнер" с информацией с левого датчика и с правого датчика.
Напишем программу:
#include "asuro.h”
int main(void)
{
unsigned int data[2];
Init();
FrontLED(ON);
MotorDir(FWD,FWD);
while(1)
{
LineData(data);
if (data[0]>data[1])
{
MotorSpeed(200,150);
}
else
{
MotorSpeed(150,200);
}
}
return 0;
}
И разберем ее работу: инициализируем нашу программу. Вводим переменные контейнеров в которых хранятся данные от датчика левого и правого - data[0] и data[1]
Далее в нашем условии мы делаем проверку которая гласит: "Если на левом датчике большая засветка(больший коэффициент), то поворачиваем в одну сторону, пока на правом датчике не будет коэффициент больше. Кстати, это весьма неудачный вариант при использовании с таким редуктором который поставил я - Tamiya редуктор. Из-за инерции редуктор не останавливается и докручивается из последних сил... Может у вас будет работать и лучше, но не факт. =]
Для своего случая я сделал "релейный регулятор". Работает просто - моторы(левый и правый) крутятся до тех пор, пока датчики(левый и правый) находятся на белой стороне. Как только датчик наезжает на линию - соответствующий мотор останавливается. Да и скорость я установил меньше, чтобы из-за инерции не было лишнего пробега.
Вот код моей программы
#include "asuro.h"
int main(void)
{
unsigned int data[2];
Init();
FrontLED(ON);
while(1)
{
LineData(data);
if (data[0]>data[1])
{
MotorDir(RWD,RWD);
MotorSpeed(200,0);
}
else
{
MotorDir(RWD,RWD);
MotorSpeed(0,200);
}
}
Включаем нашего ASURO и лицезреем как он начинает сам ориентироваться на линии используя наши инструкции =] Кстати на заметку, с этой программой робот на ура проходит трассу нашего соревнования на которое вы еще, на момент написания этой статьи, можете успеть http://www.servodroid.ru/index....88
И так... Мы уже умеем работать с ШИМом и управлять двигателями (сервами тоже можно кстати, если очень захотеть). Включать и считывать информацию на датчиках, и индикаторах. Давайте теперь попытаемся увидеть то, что видит и чувствует наш ASURO - увидеть как он реагирует на срабатывание тактильных и сенсорных датчиков и прочего... Попытаемся поуправлять им прямо с компьютера используя обратную связь с роботом.
16.ОБРАТНАЯ СВЯЗЬ. SERIAL READ\WRITE. ПОЛУЧАЕМ ДАННЫЕ С РОБОТА.
Для начала нам нужно знать как осуществляется передача данных, например текстовой строки "Hello World, it's work!". Каждая буква - символ. Каждый знак в слове -символ. Всегда нужно считать общее количество символов которое будет передаваться, и указывать это количество при передаче строки, иначе часть слова, строки, пропадет.
За запись отвечает команда SerWrite() в которой мы можем передавать информацию с датчиков, команды подтверждения и прочие данные телеметрии. Для считывания данных потребуется какая-нибудь сторонняя программа которая будет мониторить данные проходящие через COM-port. Например Advansed Serial Port Monitor, или написать свою программку. В софтине этой нужно выставить все настройки как у программатора, и выставить его порт, на котором он сидит.
Для того, чтобы записать наше послание и передать его куда-либо, мы сделаем следующее действие:
1. Возьмем функцию SerWrite()
2. Придумаем слова, например "Hello! SERVODROID.RU"
3. Подсчитаем количество символов, которые мы будем передавать: H-1, e-2, l-3, ... , U-20. Итого: 20 символов.
4. Запишем нашу строку в функцию:
SerWrite("Hello! SERVODROID.RU\n",20);
5. Символ \n в строке обозначает перенос строки на следующую строку. Это для удобности отображения информации? Как будет выглядеть информация:
>Hello! SERVODROID.RU
>Hello! SERVODROID.RU
>Hello! SERVODROID.RU
...
>Hello! SERVODROID.RU
Напишем простую программу для проверки:
#include "asuro.h"
void main(void)
{
Init();
StatusLED(RED);
while(1)
{
SerWrite("Hello! SERVODROID.RU",20);
}
}
Залейте получившийся .hex файл в микроконтроллер. Вы уже скачали какую-нибудь программку для мониторинга портов ? Если нет - сейчас самое время ! Скачайте Advansed serial port monitor (демо-триал версия) http://www.aggsoft.ru/serial-port-monitor/
Запустите сканер\порт монитор. Если там предлагает вам выбрать действие, например про что "читать данные с порта" - выберите это действие. Если вы хотите что-либо другое - вам решать. В настройках выберите COM-port, например у меня программатор висит на COM1. Выставите битрейд-2400, стоповые биты 1, четность - нет. В принципе этого должно хватить =]
У меня для мониторинга есть собственная программа, которую я писал для робота "ИРПС", скачать программу можно стукнув мне на ящик melnik1412 [DOG] yandex.ru или тут посредством личных сообщений. Лично я тестировал в ней работу программы, что написана выше.
Запускаем сканер. Включаем робота. Подождав 2 секунды, пока робот подумает, пытаются ли ему скормить прошивку, загорится красный светодиод и начнется передача данных с робота на ПК. Эти данные будут показываться у вас в программе сканера портов. Плюс можно визуально наблюдать передачу данных по мигающим светодиодам на программаторе.
На заметку: передача данных по инфракрасному каналу весьма кривая, и могут происходить "наводки"и вместо слов "Hello! SERVODROID.RU" вы увидите: "*&yifs983f hiuhfsidu" ...в общем - не читаемые кракозябры. Для решения этой проблемы проверьте настройки портов и расстояние от ПК до МК.
Если у ВАС возникли вопросы пишите на ФОРУМЕ или в Online чат по робототехнике мы их обсудим!
автор Сергей Мельников
© SERVODROID.RU Внимание! Полное либо частичное копирование материала без разрешения администрации запрещено!
© SERVODROID.RU Внимание! Полное либо частичное копирование материала без разрешения администрации запрещено!
| Всего комментариев: 7 | |
|
| |




