Уже в продаже: первая в своем роде книга «BEAM-робототехника. От азов до создания практических устрйств». Книга для кружков робототехники и самостоятельного обучения на дому. Книга доступна по цене 699 руб Подробнее о книге
- вот так выглядит принципиальная схема проекта - Такой он получился реализованный в железе за исключением одного датчика и модуля блютуз
// // Motor end datchik test //
int val_1 ; // переменная для хранения значения с 1 датчика int val_2 ; // переменная для хранения значения 2 void setup() { Serial.begin(9600); pinMode(8, OUTPUT); // Инициализируем цифровой вход/выход pinMode(9, OUTPUT); // в режим выход pinMode(10, OUTPUT); // для двигателя 1
pinMode(11, OUTPUT); // Инициализируем цифровой вход/выход pinMode(12, OUTPUT); // в режим выход pinMode(13, OUTPUT); // для двигателя 2
pinMode(16, INPUT); // Инициализируем цифровой вход/выход pinMode(15, INPUT); // в режим вход датчиков
void loop() { val_2 = digitalRead(16); // считываем значение с входа датчиков val_3 = digitalRead(15); if ( val_1 == HIGH && val_2 == LOW) // если нажат датчик 1 то платфор-ма едет вперед { //движение вперед digitalWrite(8, LOW); digitalWrite(9, HIGH); digitalWrite(10, HIGH); digitalWrite(11, HIGH); digitalWrite(12, HIGH); digitalWrite(13, LOW);} if ( val_2 == HIGH && val_1 == LOW) // если нажат датчик 2 то платфор-ма едет назад {//движение назад digitalWrite(8, HIGH); digitalWrite(9, LOW); digitalWrite(10, HIGH); digitalWrite(11, HIGH); digitalWrite(12, LOW); digitalWrite(13, HIGH);} else //если датчики не нажаты то платформа стоит на месте {//Стоп digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); digitalWrite(12, LOW); digitalWrite(13, LOW); } }
вот так выглядит рабочей скетч в котором описаны передние датчики. проверив работоспособность ИК дальномера, не могу добавить его в тело цикла, что бы он например останавливался на заданом расстоянии от препятствия
void loop() { // 5V/1024 = 0.0048828125 float volts = analogRead(IRpin)*0.0048828125; // считываем значение сенсора и переводим в напряжение float distance = 65*pow(volts, -1.10); // worked out from graph 65 = theretical distance / (1/Volts)S - luckylarry.co.uk Serial.println(distance); // выдаём в порт delay(100); // ждём }
С помощью данного скетча производил проверку датчика SHARP - GP2Y0A02
Добавлено (23.06.2013, 18:34) --------------------------------------------- Все приведенные скетчи использовались для тестирования, с помощью первого скетча была организована программа управления
проверив работоспособность ИК дальномера, не могу добавить его в тело цикла
Диапазон измерения расстояния от 20 до 150 см ?
Статью думаю вы прочли на крафтдуино. Не получается совместить два кода в один ? А если так:
Код
// // Motor end datchik test //
int IRpin = 0; // свободный аналоговый пин для подключения выхода Vo сенсора int val_1 ; // переменная для хранения значения с 1 датчика int val_2 ; // переменная для хранения значения 2 void setup() { Serial.begin(9600); pinMode(8, OUTPUT); // Инициализируем цифровой вход/выход pinMode(9, OUTPUT); // в режим выход pinMode(10, OUTPUT); // для двигателя 1
pinMode(11, OUTPUT); // Инициализируем цифровой вход/выход pinMode(12, OUTPUT); // в режим выход pinMode(13, OUTPUT); // для двигателя 2
pinMode(16, INPUT); // Инициализируем цифровой вход/выход pinMode(15, INPUT); // в режим вход датчиков
void loop() {
float volts = analogRead(IRpin)*0.0048828125; // считываем значение сенсора и переводим в напряжение float distance = 65*pow(volts, -1.10); //Зная теперь расстояние, занесенное в переменную distance, можем оперировать //с условиями поведения робота в зависимости от дистанции.
val_2 = digitalRead(16); // считываем значение с входа датчиков val_3 = digitalRead(15);
if (distance >= "расстояние указать") { ...Вставить код при котором робот должен работать при отсутствии препятствия }
if (distance <= "расстояние указать) { ...Вставить код при котором робот должен работать при наличии препятствия }
}
Вырезанный код который надо куда-то вставить из условий
Код
if ( val_1 == HIGH && val_2 == LOW) // если нажат датчик 1 то платфор-ма едет вперед { //движение вперед digitalWrite(8, LOW); digitalWrite(9, HIGH); digitalWrite(10, HIGH); digitalWrite(11, HIGH); digitalWrite(12, HIGH); digitalWrite(13, LOW);} if ( val_2 == HIGH && val_1 == LOW) // если нажат датчик 2 то платфор-ма едет назад {//движение назад digitalWrite(8, HIGH); digitalWrite(9, LOW); digitalWrite(10, HIGH); digitalWrite(11, HIGH); digitalWrite(12, LOW); digitalWrite(13, HIGH);} else //если датчики не нажаты то платформа стоит на месте {//Стоп digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); digitalWrite(12, LOW); digitalWrite(13, LOW); } }
Если не понятно как работает дальномер и какие показания ему скармливать, точнее что ожидать от него, можно просто напросто взять сигнал пустить на аналоговый порт, и вывести значение порта в serialRead(Пин на который подключен дальномер); и наглядно увидим сколько он показывает при максимальной дистанции, и при минимальной. После найдем середину, ну а там не сложно прикинуть расстояние. Так еще проще.
int IRpin = 0; // свободный аналоговый пин для подключения выхода Vo сенсора int val_1 ; // переменная для хранения значения с 1 датчика int val_2 ; // переменная для хранения значения 2 void setup() { Serial.begin(9600); pinMode(8, OUTPUT); // Инициализируем цифровой вход/выход pinMode(9, OUTPUT); // в режим выход pinMode(10, OUTPUT); // для двигателя 1
pinMode(11, OUTPUT); // Инициализируем цифровой вход/выход pinMode(12, OUTPUT); // в режим выход pinMode(13, OUTPUT); // для двигателя 2
pinMode(16, INPUT); // Инициализируем цифровой вход/выход pinMode(15, INPUT); // в режим вход датчиков
delay(5000); }
void loop() { float volts = analogRead(IRpin)*0.0048828125; // считываем значение сенсора и переводим в напряжение float distance = 65*pow(volts, -1.10); //Зная теперь расстояние, занесенное в переменную distance, можем оперировать //с условиями поведения робота в зависимости от дистанции. Serial.println(distance); delay(500); val_1 = digitalRead(16); // считываем значение с входа датчиков val_2 = digitalRead(15);
if (distance <= 50) { Serial.println(distance); delay(1000); //движение назад digitalWrite(8, HIGH); digitalWrite(9, LOW); digitalWrite(10, HIGH); digitalWrite(11, HIGH); digitalWrite(12, LOW); digitalWrite(13, HIGH);} if (distance >= 50) { Serial.println(distance); delay(1000); //движение назад digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); digitalWrite(12, LOW); digitalWrite(13, LOW);}} Используя данный скетч был выявлен еще один недостаток платформы 4WD Mr.basic это её инерционность
Код работает ? Инерционность можно гасить программно, для этого нам нужно мотор стопорить. Точно не скажу как это скажется на электронике, но чтобы остановиться резко, а у вас там редуктор тем более, он сразу шестерни не затормозит, на мгновение запускаем мотор в реверс. Или ставим по 1 и 1 на входы L293D(если не ошибаюс это стоп, надо смотреть таблицу истинности)
С инерционностью можно побороться. На небольшое маленькое время реверсировать моторы. Так на сумо лечил его инерцию) а то летит на большой скорости, видит край ринга, и улетает по инерции) Или есть вариант плавно тормозить, используя цикл for.
Добавлено (23.06.2013, 21:16) --------------------------------------------- 1 и 1 на выходах L293D это не стоп. Полного стопа у нее нет как токового) просто 1 и 1 на выходах не будет подавать на моторы ничего.
Так же натыкался на плавный пуск через l293 то что постепенно наращивается входное напряжение, следовательно можно наверно и заставить работать двигатель на пониженном напряжении, но учесть что нагрузка должна стать меньше
Кстати, чтобы не давать роботу заезжать в слепую зону, ведь если препятствие ближе 20 см, то он его не заметит и будет пытать проехать по нему, если оно попало мимо контактов, нужно сделать усы из проволоки, как пример:э
Только усы сделать чтоб они рядом начинали и расходились, и если препятствие будет ниже датчика, или ближе, промельнув мимо дальномера, обязательно заденит тактильный ус.
А вот еще один скетч с использованием всего что нацеплено, и подбором оптимального расстояния // Motor end datchik //
int IRpin = 0; // свободный аналоговый пин для подключения выхода Vo сенсора int val_1 ; // переменная для хранения значения с 1 датчика int val_2 ; // переменная для хранения значения 2 void setup() { Serial.begin(9600); pinMode(8, OUTPUT); // Инициализируем цифровой вход/выход pinMode(9, OUTPUT); // в режим выход pinMode(10, OUTPUT); // для двигателя 1
pinMode(11, OUTPUT); // Инициализируем цифровой вход/выход pinMode(12, OUTPUT); // в режим выход pinMode(13, OUTPUT); // для двигателя 2
pinMode(16, INPUT); // Инициализируем цифровой вход/выход pinMode(15, INPUT); // в режим вход датчиков
delay(5000); }
void loop() { float volts = analogRead(IRpin)*0.0048828125; // считываем значение сенсора и переводим в напряжение float distance = 65*pow(volts, -1.10); //Зная теперь расстояние, занесенное в переменную distance, можем оперировать //с условиями поведения робота в зависимости от дистанции. Serial.println(distance); delay(500); val_1 = digitalRead(16); // считываем значение с входа датчиков val_2 = digitalRead(15);
Добавлено (23.06.2013, 22:40) --------------------------------------------- На счет усов знаю, просто не задавался на счет их реализации, а изготовить их можно в виде бампера
Открыт набор на БЕСПЛАТНОЕ ОБУЧЕНИЕ в кружке 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 подобного робота ;)