Теперь в нашем онлайн-магазине доступна уникальная книга «BEAM-робототехника. От азов до создания практических устройств», идеально подходящая как для кружков робототехники, так и для самообучения дома. Вы можете приобрести её по привлекательной цене в 699 рублей. Дополнительная информация о книге доступна на нашем сайте. Также в ассортименте нашего онлайн-магазина представлены готовые наборы для сборки роботов, с помощью которых ваш ребенок сможет легко собрать своего первого робота, следуя нашим подробным инструкциям. Перейти в магазин
у l293d два вывода питания: один на питание самой микрухи (5в) другое питание для моторов (их я питаю от 4 аккум. батареек), совмещать их нельзя.Добавлено (03.06.2012, 19:56)
L293D питание логической части щт Vss 4,5 - 7 В., силовой Vs - 4,5 - 36 вольт. В вашем случае при питании от 4 эллементов можно применить схему общево питания силовой и логической части. Я так делал на роботе с ИК бампером. Ездит нормально. А в своем ответе я имел ввиду, что дальномер я посадил бы на вывод ардуины 5 В, а питание сервы и логической части микрухи запитал отдельно через кренку от этого же источника :kind:[p.s.] Не знаю как правильно выразиться отдельно отвел провод + от аккума и через кренку подал питание на L293D
Elektro, Дуина сервы не потянет(у меня не получилось). Для работы нескольких серв нужно питание подавать на них отдельно. согласен с этим мнением. Но у меня было два вида серв, одна мини - она работала от встроенного стаба ардуины +5в, и две ХОРОШЕНЬКИЕ сервы (уже по крупнее) от встроенного стаба завести не получилось, потом я эти две ХОРОШЕНЬКИЕ сервы запитал от сетевого стобилизатора на 6в,
вы поймите ардуине и не нужно тянуть сервы, она лишь подает на них управляющий сигнал! если у вас мощный источник питания, то от него можно за питать ардуину и 100 сервоприводов, лиж бы источник потянул, а ардуина тут не причем. но если вы всю нагрузку вешете через пин +5 в на ардуине тогда это не справляется встроенный стабилизатор. а не дуина!
Elektro, Смотри что получается 7 серв - это манипулятор, 3 дальномера это 3 аналоговых входа, драйвер это 4 pin (у меня 6, дополнительно два я как понял используются для моторстоп, моторрун), 2 pin это блютуз, и еще 1 серва для вращения дальномера. Да если пожертвовать аналоговыми входами, то вроде все умещается. Про то, что ШИМ можно сгенерировать не знал, спасибо за совет. [p.s.] Ответил на почту
Изменения: переписал программу для поиска предметов. Впереди установил две оптопары, в качестве датчиков поверхности. Теперь робот сам может убирать со стола.
Вот видео, код выложу попозже, откомментировать надо. Может кому пригодится.
я не понимаю что он говорит переведите пожалуйста) было бы здорово если бы он мусор собирал "на себя" ,в богажник, а потом выкидывал в урну но все равно здорово!
моя группа Вконтакте посвещённая робототехнике http://vkontakte.ru/BeamRobots
izobretatel-1, Озвучку вырезал из мультфильма робот Wall-e (робот уборщик). Он просто произносит Waall-e. . Урна да было бы здорово. Это следующий шаг. Понадобятся энкодеры, возможно компас. Робот сваливает мусор в определенных координатах, где находится ведро под мусор.
Добавлено (21.06.2012, 16:17) --------------------------------------------- Вот код к работе робота, к видео выложенному выше. При написании программы кроме освоенных операторов if - else, циклов for, был применен цикл while. Что по мне, так очень удобный цикл. Код откомментирован, но возможно не идеальный. . Так как опыт программирования не большой.
Code
#include <Servo.h> #include <LMotorShield.h>
LMotorShield lms; int ledPin = 13; // Кнопка включения мп3 int ledPin1 = 12; // кнопка перемотки мп3 int i; int j; int p[18]; // массив, здесь будем записывать данные с ИК дальномера в разных его положениях int gp,gp1,gp2,g; int b; void setup() { { Serial.begin(9600); lms.begin(LMS_SERVOS); } pinMode(ledPin,OUTPUT); pinMode(ledPin1,OUTPUT); pinMode(3,OUTPUT); // Motor A скорость pinMode(7,OUTPUT); // Motor A направление pinMode(11,OUTPUT); // Motor B скорость pinMode(8,OUTPUT); // Motor B направление pinMode(2,OUTPUT); // Motor A стоп, пуск pinMode(4,OUTPUT); // Motor B стоп, пуск } void Forward() { // Подпрограмма движения робота вперед digitalWrite(3,HIGH); digitalWrite(7,LOW); analogWrite(11,240);// здесь скоростью вращения колеса регулируем прямолинейность движения 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() { lms.servoWrite(2,15); // раскрываем лапки delay(100); lms.servoWrite(4,160); // раскрываем лапки delay(100); lms.servoWrite(1,0); delay(200); j=0; for (j=0;j<18;j++){ // для j от 0 до 18 lms.servoWrite(1,j*10); // вращение сервы по 10 градусов
gp=analogRead(0); // считываем данные с ИК радара delay(50); p[j]=gp; // записываем это значение в массив Serial.println(p[j]); // выводим на экран
gp2=(analogRead(2)); // считываем значение датчиков плоскости gp1=(analogRead(1)); g=min(gp1,gp2); // выбираем минимальное значение из двух if (g<4){ // Если значение близко к 0, то отходим назад и разворачиваемся motorRun(); Backward(); delay(500); Spin_Left(); delay(600); motorStop(); }
if (p[j]<160){ // если значение с дальномера меньше 150, (примерно 25 см.), то шаг вперед motorRun(); Forward(); delay (50); motorStop();} else { // Иначе digitalWrite(ledPin1, HIGH); // нажимаем кнопку перемотка delay(100); digitalWrite(ledPin1, LOW); // отпускаем кнопку перемотка delay(100);
lms.servoWrite(1,90); // поворачиваем голову вперед delay(200);
gp=analogRead(0); // считываем данные с ИК радара Serial.println(gp); while(gp<160){ // поворачиваемся, пока не заметим предмет motorRun(); if (j>9){ // если предмет с лева, то Spin_Left();// поворот в сторону объекта } else { // иначе поворот вправо Spin_Right(); } delay (10); motorStop(); gp=analogRead(0); // считываем данные с ИК радара delay(50); }
gp=analogRead(0); // считываем данные с ИК радара delay(50); while(gp<400){ //Двигаемся вперед пока предмет не будет на расстоянии 10 см. motorRun(); Forward(); // движение до объекта delay (50); // время движения motorStop(); gp=analogRead(0); // считываем данные с ИК радара delay(50); } lms.servoWrite(1,0); // убираем голову в сторону, чтобы она не мешала захвату предмета и транспортировке delay(100); motorRun(); Forward(); // движение до объекта delay (700); // время движения motorStop();
lms.servoWrite(2,140); // захват первой лапой delay(500); lms.servoWrite(4,15); // захват второй лапой delay(100);
gp2=(analogRead(2)); gp1=(analogRead(1)); g=min(gp1,gp2); while(g>4) // движение после захвата до конца плоскости. { gp2=(analogRead(2)); gp1=(analogRead(1)); Serial.println(gp2); g=min(gp1,gp2); motorRun(); Forward(); delay(5); motorStop();}
Добавлено (23.06.2012, 09:38) --------------------------------------------- Подскажите компас для Ардуины. Бюджетный и доступный в применении вариант. Сам пока нашел вот такой http://www.goodluckbuy.com/3-axis-....le.html . Может кто сталкивался с таким?
Доброй ночи все! Если не сложно подскажите новичку какие запчасти надо прикупить что бы собрать такого??? В начале читал список но некоторые моменты не понятно а именно что за оптопара какой еще драйвер можно применит и что использовалось для воспроизведение звука??? Зарание спасибо
Общайтесь с друзьями в нашем Online-чате по робототехнике
Мы рады, что в России открывается все больше кружков по робототехнике и мы стараемся прикладывать к этому свои усилия начиная с 2008 года :) Мы будем очень рады видеть в чате живое общение, обмен опытом между учащимися в робототехнике и просто увлеченными в этом направлении людей. Мы всегда онлайн, приходите, спрашивайте, помогайте другим - давайте сделаем Мир чуточку лучше!
Чтобы не потерять чат и быть всегда с нами на связи - откройте окно чата в новом окне браузера и добавьте его в заколадки. Открыть в новом окне