Уже в продаже: первая в своем роде книга «BEAM-робототехника. От азов до создания практических устрйств». Книга для кружков робототехники и самостоятельного обучения на дому. Книга доступна по цене 699 руб Подробнее о книге
Хорошо. Будем считать что с мигалками и передвижениями робота мы разобрались. Может уже успели сделать функцию при которой робот едет прямо, утыкается носом в препятствие, включает реверс, поворачивает, и дальше едет и так далее... ? Да, уже сделали ? Ну вы молодцы тогда
Давайте подойдем ближе и рассмотрим работу наших светосенсоров - линии и оборотов колеса. Кстати... Я вот у себя обороты пока считать не буду, так как я поставил свой редуктор без цветовой маркеровки черный-белый-черный... Так вот. Давайте разберем как работет наш фототранзистор фронтовой, что под платой внизу.
РАБОТА С ФОТОДАТЧИКАМИ - ФОТОТРАНЗИСТОР, ДАТЧИК ЛИНИИ
Начнем стого, что каким образом работает фотодатчик ? Думаю вы догадываетесь исходя из его названия, он что-то там должен фото...графировать ? ) Нет, принимать "световые пучки", и реагировать на них. Бывают разные типы фотодатчиков - ФОТОрезисторы, ФОТОтранзисторы, ФОТОдиоды, еще какие-либо экзотические, даже та самая солнечная батарея - тоже ФОТО
Эти датчики считывают и передают информацию в аналоговом формате - то есть напряжение, по которому мы будем судить есть линия или ее нет. Обычно для более точного определения используют всяческие преобразования. Существуют преобразователи ЦАП и АЦП - цифровой и аналоговый. Один из напряжения делает цифры 10010111...011, другой из цифр напряжение 1V...3V..5V...0.83V ~
Фототранзисторы Т9 и Т10 будут нам передавать значения вместе с функцией LineData(unsigned int *data)
Из мануала следует, что:
Quote
unsigned int data[2]; . . LineData(data);
data[] содержит в себе "контенер" с информацией с левого датчика и с правого датчика.
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 редуктор. Из-за инерции редуктор не останавливается и докручивается из последних сил... Может у вас будет работать и лучше, но не факт. =]
Для своего случая я сделал "релейный регулятор". Работает просто - моторы(левый и правый) крутятся до тех пор, пока датчики(левый и правый) находятся на белой стороне. Как только датчик наезжает на линию - соответствующий мотор останавливается. Да и скорость я установил меньше, чтобы из-за инерции небыло лишнего пробега.
Вот код моей программы
Code
////////////////////////////////////////// #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 - увидеть как он реагирует на срабатывание тактильных и сенсорных датчиков и прочего... Попытаемся поуправлять им прямо с компьютера используя обратную связь с роботом.
ОБРАТНАЯ СВЯЗЬ. 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. Запишем нашу строку в функцию:
Quote
SerWrite("Hello! SERVODROID.RU\n",20);]
5. Символ \n в с троке обозначает перенос строки на следующую строку. Это для удобности отображения информации? Как будет выглядеть информация:
Вы уже скачали какую-нибудь программку для мониторинга портов ? Если нет - сейчас самое время ! Скачайте 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" ...в общем -нечитаемые кракозябры. Для решения этой проблемы проверьте настройки портов и расстояние от ПК до МК.
Открыт набор на БЕСПЛАТНОЕ ОБУЧЕНИЕ в кружке BEAM-робототехника на 2022 - 2023 год!
Для учащихся г. Санкт-Петербург: Уважаемые учащиеся и родители! Мы сообщаем Вам о начале открытой регистрации в кружок "BEAM-робототехника (радиоэлектронные системы управления)" Центра робототехники Президентского физико-математического лицея №239 на новый 2022-2023 учебный год!
Записаться в нашу группу может совершенно любой учащийся города Санкт-Петербург в возрасте от 10 - 18 лет. Обучение в кружке полностью бесплатное. В рамках обучения в кружке ребята получат необходимые теоретические и практические знания по электротехнике, схемотехнике, созданию электронных схем и своих собственных печатных плат для роботов. Научатся работать с ручными инструментами, 3D-принтерами для изготовления деталей робота, лазерным станком для изготовления корпусов робота. Количество свободных мест - ограниченное, успейте подать Вашу заявку первыми! Перешлите этот пост своим друзьям и знакомым, кого может заинтересовать BEAM-робототехника
***
Давайте поближе разберемся, что же мы изучаем на кружке BEAM-робототехники. И так, приступим:
1. Вы начинающий робототехник Смотрите видео BEAM-робототехника
Вы новенький в робототехнике. Вам интересно это современное направление, вы очень хотите научиться создавать крутых роботов самостоятельно, но вы пока не знаете как именно это делать? Не беда! Мы с удовольствием обучаем начинающих робототехнике всем необходимым навыкам настоящего робототехника, с которыми в последствии вы с легкостью будете собирать крутых роботов , участвовать в соревнованиях , выставках или просто делать крутые поделки для себя. Для этого мы открыли специальное направление: Радиоэлектроника (#BEAM-роботы). В ходе обучения в этом кружке вы научитесь понимать и разбираться в электронике - знать что такое резистор, транзистор, светодиод, мотор и как это работает. Закон #Ома - куда же без него :) Вы изучите схемотехнику - будете разбираться и уметь читать схемы - без этого робота не сделать. Вы научитесь делать свои собственные платы роботов (куда паяют детальки по крутому - без проводков!) Вы поработаете с механикой - нужно знать как и каким образом использовать моторчики, редукторы и различные хитрости их применения. Конечно же научитесь правильно и профессионально паять - это очень важно, иначе ваши роботы постоянно будут разваливаться. Также в рамках этого кружка вы сможете собрать несколько роботов для участия в соревнованиях, и выставках, так как мы считаем, что ваш творческий потенциал очень важен для робототехники в целом.
***
В этом году мы соберем с вами шагающих роботов, будем участвовать в соревнованиях "шагающих роботов", роботов для "следование по линии", роботов для участия в "сумо", а также в творческих выставках.
*** 2. Как подать заявку в кружок?
Прошлый год показал, что желающих заниматься аналоговой робототехникой, создавать beam'ов и участвоват ьс ними в соревнованиях - достаточно много. Поэтому на новый учебный год мы решили увеличить количество мест, создав две группы.
Первая группа по BEAM-робототехнике #261РЭ Радиоэлектроника (BEAM-роботы). Эта группа рассчитана на ребят, кто только начинает изучать робототехнику и кому необходимо получить базовые знания по электротехнике, схемотехнике, и самим бим-роботам. Для того, чтобы записаться в группу 261РЭ , вам нужно пройти по этой ссылке https://robofinist.ru/educationcenter/main/groups/id/1?groupId=796 (кликай) и заполнить анкету (чтобы подать заявку - сперва зарегистрируйтесь на сайте Робофинист как "ученик". Обязательно сохраните логины и пароли - потом они вам очень понадобятся!).
Вторая группа по BEAM-робототехнике #371РЭ Радиоэлектроника (BEAM-роботы). Эта группа рассчитана для учащихся, кто уже сталкивался с направлением BEAM или сам изучал электротехнику и схемотехнику, кто уже принимал участие в соревнованиях с этими роботами. В рамках этой группы мы будет улучшать ваши теоретические и практические навыки, создавать сложных роботов и большую часть занятий посвящать интересным проектам и соревнованиям. Для того, чтобы записаться в группу 371РЭ , вам нужно пройти по этой ссылке https://robofinist.ru/educationcenter/main/groups/id/1?groupId=797 (кликай) и заполнить анкету (чтобы подать заявку - сперва зарегистрируйтесь на сайте Робофинист как "ученик". Обязательно сохраните логины и пароли - потом они вам очень понадобятся!).
Преподаватель данного направления: Мельников Сергей Алексеевич, педагог дополнительного образования Президентского физико-математического лицея №239, руководитель образовательного проекта SERVODROID - Центр робототехники для начинающих. Группа № 261РЭ и 371РЭ. Будьте внимательны, при заполнении анкеты.
*** Краткий план годового обучения:
1. Повторение теоретических знаний по электротехнике, схемотехнике, радиоэлектронике. Закрепление знаний на практике на основе создания самых простых конструкций роботов.
2. Создание роботов для участия в соревнованиях и выставках. Творческие проекты. Много много соревнований
3. Закрепление знаний для дальнейшего перехода с аналоговой робототехники (от BEAM-роботов) к цифровой робототехнике (роботам на Arduino). На последних занятиях вы соберете BEAM-ARDUINO подобного робота ;)