Теперь в нашем онлайн-магазине доступна уникальная книга «BEAM-робототехника. От азов до создания практических устройств», идеально подходящая как для кружков робототехники, так и для самообучения дома. Вы можете приобрести её по привлекательной цене в 699 рублей. Дополнительная информация о книге доступна на нашем сайте. Также в ассортименте нашего онлайн-магазина представлены готовые наборы для сборки роботов, с помощью которых ваш ребенок сможет легко собрать своего первого робота, следуя нашим подробным инструкциям. Перейти в магазин
Решил сделать робота на Arduino. Так как на всех сайтах предлагающих даныый контроллер был обещан быстрый старт и доступность даже новичку я выбрал именно его. Для изучения начала основ программирования Ардуина использовал книгу Улли Соммера, проект робота IE-POPBOT (есть на Русском языке на сайте Терраэлектроника), статьи с сайта http://robocraft.ru , ну и конечно http://www.google.ru Итак, для будущего робота я приобрел следующие детали: 1. Arduino Uno. 2. Драйвер моторов L-Motor Shield. Как я понял делает Калининград. (http://robocraft.ru/shop/index.php?route=product/product&product_id=172). Здесь же выложена для него библиотека. Достаточно не высокая стоимость и хороший функционал. 3. Колеса с мотор редуктором в комплекте (http://www.aliexpress.com/fm-store/806307/211015222-505652927/2pcs-lot-High-quality-tyre-Reduction-motor-fasteners--TT-motor-intelligent-car-wheels.html). 4. Серво моторы SG-50. Выписывал то же с Китая. Минимум 4 шт. (http://www.aliexpress.com/fm-store/206278/211153634-478942769/free-shipping-4pcs-5g-High-Torque-Micro-coreless-motor-Servo-SG50.html). 5. ИК дальномер SHARP GP2D120. Покупал в магазине, но он довольно распространен и его легко можно найти в Интернет магазинах России, так же как и колеса и сервы. Платформу сделал из оргстекла, его легко можно приобрести в рекламной мастерской. Соединительные кронштейны сделаны из оцинковки (обрезки от водоотливов). Легко режутся ножницами по металлу и можно загнуть под любой угол. В качестве источника питания использовал 6 аккумуляторов ААА, и два блока под них один на 4, другой на 2 штуки. В качестве передней опоры использовал мебельную колесную опору за 15 руб. Вот что получилось:
Робот, при подъезду к препятсвию на расстояние 10 см. остонавливается, измеряет расстояние до препятствия с право, с лево, и выбирает приоритетное направление. Всего четыре варианта действий.
Вот на него код (вполне вероятно, что корявый, но он работает)
Code
#include <Servo.h> #include <LMotorShield.h>
LMotorShield lms; int gp2; int gp3; int gp4; int gp5; int gp24; int gp25;
void setup() { { Serial.begin(9600); lms.begin(LMS_SERVOS); } pinMode(3,OUTPUT); // Motor A скорость pinMode(7,OUTPUT); // Motor A направление pinMode(11,OUTPUT); // Motor B скорость pinMode(8,OUTPUT); // Motor B направление pinMode(2,OUTPUT); // Motor A2 pinMode(4,OUTPUT); // Motor B1 } void Forward() { // Подпрограмма движения робота вперед digitalWrite(3,HIGH); digitalWrite(7,LOW); digitalWrite(11,HIGH); digitalWrite(8,LOW); } void Backward(){ // Подпрограмма движения робота назад digitalWrite(3,HIGH); digitalWrite(7,HIGH); digitalWrite(11,HIGH); digitalWrite(8,HIGH); } void motorStop(){ // Подпрограмма остановки мотора
digitalWrite(2,LOW); digitalWrite(4,LOW); } void Spin_Left(){ // Вращение в лево digitalWrite(11,HIGH); digitalWrite(8,LOW); digitalWrite(3,HIGH); digitalWrite(7,HIGH); } void Spin_Right(){ // Вращение в право digitalWrite(3,HIGH); digitalWrite(7,LOW); digitalWrite(11,HIGH); digitalWrite(8,HIGH); } void loop() { int i; for (i=0;i<5;i++){ // Повторить 5 раз для фильтрации шума gp2=(gp2+analogRead(0)); } gp2=gp2/5; gp3=(2914/(gp2+5))+1; Serial.println(gp3);
if (gp3<10){ motorStop();
lms.servoWrite(1,90); delay(500);
lms.servoWrite(1,10); delay(500); for (i=0;i<5;i++){ // Повторить 5 раз для фильтрации шума gp24=(gp24+analogRead(0)); } gp24=gp24/5; gp4=(2914/(gp24+5))+2; Serial.println(gp4);
lms.servoWrite(1,175); delay(500); int i; for (i=0;i<5;i++){ // Повторить 5 раз для фильтрации шума gp25=(gp25+analogRead(0)); } gp25=gp25/5; gp5=(2914/(gp25+5))+2; Serial.println(gp5);
lms.servoWrite(1,90); delay(500);
if (gp4<12&&gp5<12){ motorRun(); Backward(); delay(1000); Spin_Left(); delay(1118); } else { if (gp4<12){ motorRun(); Forward(); delay(300); Spin_Left(); delay(569); } if (gp5<12){ motorRun(); Forward(); delay(300); Spin_Right(); delay(569); } if (gp4>12&&gp5>12){ motorRun(); Spin_Left(); delay(569); }}} else { motorRun(); Forward(); // Двигаться вперед }}
Простите, а зачем дальномеру две степени свободы? ну ладно если бы помимо рыскания был бы тангаж - это оправданно, но зачем крен?
- мб таким образом автор замеряет по вертикали и по горизонтали на предмет препятствия ? Как бы у дальномера вроде луч расходится конусообразно ... или как там, наоборот сходится...
Aleks_Crow, Первоночально был такой сценарий: робот подъезжает к ладожке ребенка, останавливается, крутит головой, как бы рассматривая его, потом смотрит в право, в лево и уезжает. В ыложенной программе эта серва не задействованна. Так что все намного проще. nightmare, спасибо за подсказку, наверное так и сделаю. S-T-A-L-K-E-R(А), Ссылка на ютуб есть в сообщении после слов Вот что получилось.. Не могу понять как делать дальше. Спасибо за редактирование. :)
Робот является базой для экспериментов, и начального изучения программирования. Осталось еще две сервы, можно прикрепить их спереди, и сделать две лапки. Переделать код и заставить его находить предмет (например солонку на столе), подъезжать к нему и захватывать двумя лапками. Как то так.
Евгений, одобряю твой проект, ставлю +1 в репу я как раз подобное собираю (так же на ордуино), почти все есть, вот только детальки с Китая приедут, и начну собирать подобие твоего робота! теперь знаю к кому обратиться если затруднюсь
моя группа Вконтакте посвещённая робототехнике http://vkontakte.ru/BeamRobots
Общайтесь с друзьями в нашем Online-чате по робототехнике
Мы рады, что в России открывается все больше кружков по робототехнике и мы стараемся прикладывать к этому свои усилия начиная с 2008 года :) Мы будем очень рады видеть в чате живое общение, обмен опытом между учащимися в робототехнике и просто увлеченными в этом направлении людей. Мы всегда онлайн, приходите, спрашивайте, помогайте другим - давайте сделаем Мир чуточку лучше!
Чтобы не потерять чат и быть всегда с нами на связи - откройте окно чата в новом окне браузера и добавьте его в заколадки. Открыть в новом окне