123
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 6 из 6«123456
Модератор форума: nightmare, Huntswarrior, Aleks_Crow, {{TNT}} 
Форум » Проекты по робототехнике » Частные проекты » Робот на ардуино (*icon-0*)
Робот на ардуино
Администраторы
3318 сообщений
Мужчина
Цитата Подскажите, к каким пинам подключаются три сервы, дальномер, оптопары??? ()
undefined

- ну вообще-то начинают с того, что у вас есть уже и к чему вы там хотите все это подключать. Телепаты тут есть, но мы временно их не оплачиваем ))


Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
31
Отправлено 29.06.2014 - 19:3277
Начальная группа
3 сообщений
Мужчина
---------------------------------------------
Добрый вечер, подскажите, к каким пинам (Arduino uno) подключаются три сервы, дальномер, оптопары???


Профиль Личное сообщение Дом. страница icq Skype
0
Администраторы
3318 сообщений
Мужчина
Цитата к каким пинам (Arduino uno) подключаются три сервы, дальномер, оптопары???

()
undefined

- Так. Ну под севы есть порты помеченные как PWD, или со знаком тильда ~ что ли. Зависит от сервы - цифровая или аналоговая. Они же разные но принцип тот же. Дальномеры тоже разные бывают, как цифровые, которые показывают есть препятствие или нету, или расстояние которые показывают до препятствия. Оптопары туда же ) Проще говоря можно вешать на любой порт, главное понимать как его задействовать для работы девайса.


Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
31
Отправлено 30.06.2014 - 08:3879
Начальная группа
3 сообщений
Мужчина
Спасибо что ответили, но я спрашивал за первый код на первой страницы, именно там мне не понятно куда,что подключается???


Профиль Личное сообщение Дом. страница icq Skype
0
Отправлено 16.07.2014 - 19:2780
Участник
79 сообщений
Мужчина
vpashko7872, Смотри, первый код, это программа обнаружения препятсвий и их объезд.Задействована одна серва и дальномер. На драйвере моторов, который я покупал, есть отдельно выведенные разъемы для серв. К каким они пинам подключены, не помню, надо читать в описании этого драйвера. Для начала нужно с книжкой разобрать команды в программе, тогда все станет понятно.
Код
int i;  
  for (i=0;i<5;i++){ // Повторить 5 раз для фильтрации шума  
  gp2=(gp2+analogRead(0));  
  }  
  gp2=gp2/5;  
  gp3=(2914/(gp2+5))+1;

Serial.println(gp3);
Сдесь видим, что дальномер подключен к analogRead(0), то есть к аналоговому пину 0.
Как то ттак


Профиль Личное сообщение Дом. страница icq Skype
14
Отправлено 03.10.2014 - 15:2781
Начальная группа
1 сообщений
Мужчина
Евгений74, можешь пожалуйста скинуть схему подключения?


Профиль Личное сообщение Дом. страница icq Skype
0
Отправлено 10.05.2016 - 13:0882
Начальная группа
4 сообщений
Мужчина
Захотел вместе с сыном реализовать такого робота. Заказал вместо L-Motor Shield (нет в наличии) из Китая - стандартный L293D. Хватит ли там выходов для подключения всех серво приводов? Подскажите, что нужно изменить в программе (коде) с 5 страницы для использования данного шильда. Пока разбираюсь что и куда подключать.
Получается так?
Digital 3 и 7 - Мотор А
Digital 11 и 8- Мотор Б
Analog 0 -----ИК радар
LED pin 12 и 13 - MP3 плеер
с сервами пока не разобрался, поскольку совсем новичек в программировании...


Профиль Личное сообщение Дом. страница icq Skype
0
Отправлено 30.05.2016 - 18:0083
Начальная группа
4 сообщений
Мужчина
Пока запчасти идут из Китая, накидал проект в Протеусе. Соединение двигателей и серво делал согласно схемы L-Motor Shield как у автора. Но чет не работает нормально.Правая лапа глючит, двигатели живут своей жизнью... Ну и на датчики поверхности не реагирует совсем.
Непонятно...

Добавлено (30.05.2016, 18:00)
---------------------------------------------
Никак не могу понять, какие датчики поверхности используются в проекте? Вот с такими не получается ничего... Может код поправить надо? Но я в этом не силён...



Прикрепление
6615487.zip(81Kb)
Профиль Личное сообщение Дом. страница icq Skype
0
Отправлено 31.05.2016 - 19:1984
Участник
79 сообщений
Мужчина
Добрый день. Редко захожу сюда. датчик поверхности делал из обычного светодиода и фототранзистора. Ваш в принципе тоже самое. Нужно только его подстроить, или подредактировать критичные значения в коде. Яуже давно не брался запрограмирование, поэтому на все вопросы ответить не смогу. Мой совет вам, взять книжку по программированию ардуино, и с ее помощью попробовать разобраться с датчиками, запустить моторы, научить робота ездить вперед, назад, по квадрату, подключить дальномер. Дальше будет разобраться проще. За основу возьмете мой код, но напишите его уже под свое оборудование.


Профиль Личное сообщение Дом. страница icq Skype
14
Отправлено 31.05.2016 - 22:0785
Начальная группа
4 сообщений
Мужчина
Спасибо Евгений74 что ответили. Я за программирование вообще никогда не брался. Во времена моей молодости компьютеры были величиной с большой книжный шкаф. Решил сыну робота собрать в колледж (радиотехнический).
Попробовал подключить всё (кроме двигателей, т.к. ещё не пришли) Сервы зашевелились, данные с ИК радара считывает, но на датчики поверхности не реагирует. Подключал через Sensor Shield v4.0 поскольку L-Motor Shield нет в наличии.
Подскажите что нужно поправить в управлении моторами при использовании стандартного L293D Motor Shield или L298N Motor Drive Controller Board Module
По подключению вроде вот так:
Analog 0 - ИК радар
LED pin 12 и 13 - MP3 плеер
Analog 1 - 1-й ИК датчик
Analog 2 - 2-й ИК датчик
Digital 10 - серва головы
Digital 5 - серва 1-й лапки
Digital 9 - серва 2-й лапки


Профиль Личное сообщение Дом. страница icq Skype
0
Отправлено 15.08.2016 - 23:4186
Начальная группа
4 сообщений
Мужчина
Приветствую всех. Попытался повторить робота-уборщика представленного здесь. Сразу скажу не хочет РОБОТяга работать как у автора. Естественно это моя первая попытка разобраться в программировании Ардуино и пару месяцев изучения темы не смогли внести ясность в понимании того что я делаю не так. Питание силовой части организовал отдельно от Ардуинки.
Немного изменил компоненты робота:
1. Вместо LMotorShield подключил движки к драйверу на L298N
2. Вместо ИК дальномера SHARP GP2D120 использовал SHARP GP2Y0A41SK аналогичный по техническим характеристикам (дальность от 4 до 30 сантиметров).
3. Подключал всё к Ардуино UNO для удобства через Arduino Sensor Shield v 5.0

Вот данные подключения:
Analog 0 - ИК радар Sharp
Analog 1 - 1-й ИК датчик поверхности
Analog 2 - 2-й ИК датчик поверхности
Digital 2 и 7 - мотор А вращение
Digital 3 - ШИМ мотора А
Digital 2 и 7 - мотор В вращение
Digital 3 - ШИМ мотора В
Digital 6 - серва головы
Digital 10 - серва левой лапки
Digital 9 - серва правой лапки

Теперь о грустном, о проблемах с которыми я столкнулся: Если отключить двигатели и двигать робота руками, то всё работает отлично. Он вертит головой, как увидит препятствие перестаёт "оглядываться", далее поворачиваешь его к нему и продвигаешь вперёд. Далее он отворачивает голову, захватывает лапами предмет и после дальнейшего его продвижения вперёд отпускает предмет у края стола.
Но если подключаешь двигатели, то робот начинает жить своей жизнью. После того как он увидит препятствие, он замирает (останавливается) вместо того, чтобы повернуться к предмету и подъехать к нему. Двигатели конечно продолжают работать, но как-то в полсилы и ему не хватает мощи для поворота.
Чаще всего просто не замечает никаких предметов, а проносится мимо до края стола (грешу на дальность ИК дальномера Sharp (от 4 до 30 сантиметров)), срабатывают датчики поверхности, он резко рвёт немного назад разворачивается. При повторном подъезде к краю он уже не останавливается а падает в пропасть....

Добавлено (15.08.2016, 23:41)
---------------------------------------------
Вот скетч от автора, немного неумело переделанный мной под мою распиновку:

#include <Servo.h>

Servo rightHand;
Servo leftHand;
Servo head;

int IN1 = 7; // Input1 подключен к выводу 7 мотор А вращение
int IN2 = 2; // Input2 подключен к выводу 2 мотор А вращение
int IN3 = 8; // Input3 подключен к выводу 8 мотор B вращение
int IN4 = 4; // Input4 подключен к выводу 4 мотор B вращение
int ENB = 3; // ШИМ вторго мотора (левого)
int ENA = 11; // ШИМ первого мотора (правого)
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);

}

rightHand.attach(9); // подключение правой лапки
leftHand.attach(10); // подключение левой лапки
head.attach(6); // подключение сервы головы


pinMode(ledPin,OUTPUT);
pinMode(ledPin1,OUTPUT);
pinMode (ENA, OUTPUT); // мотор А скорость
pinMode (IN1, OUTPUT); // мотор А вращение
pinMode (IN2, OUTPUT); // мотор А вращение
pinMode (ENB, OUTPUT); // мотор В скорость
pinMode (IN3, OUTPUT); // мотор В вращение
pinMode (IN4, OUTPUT); // мотор В вращение
}
void Forward() { // Подпрограмма движения робота вперед
digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);

analogWrite(ENA,170); // подаем на вывод ENА и ENВ управляюший ШИМ сигнал
analogWrite(ENB,170);
}
void Backward(){ // Подпрограмма движения робота назад
digitalWrite (IN1, LOW); // вращаем мотор в обратную сторону
digitalWrite (IN2, HIGH);
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);

analogWrite(ENA,170); // подаем на вывод ENА и ENВ управляюший ШИМ сигнал
analogWrite(ENB,170);
}
void motorStop(){ // Подпрограмма остановки мотора

analogWrite(ENA,0); // подаем на вывод ENА и ENВ управляюший ШИМ сигнал равный нулю
analogWrite(ENB,0);
}
void motorRun(){ // Подпрограмма запуска мотора
analogWrite(ENA,170); // подаем на вывод ENА и ENВ управляюший ШИМ сигнал
analogWrite(ENB,170);
}
void Spin_Left(){ // Поворот влево
digitalWrite (IN1, LOW);
digitalWrite (IN2, HIGH);
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
}
void Spin_Right(){ // Поворот вправо
digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);
}


void loop()
{
rightHand.write(15); // раскрываем правую лапку
delay(100);
leftHand.write(160); // раскрываем левую лапку
delay(100);
head.write(90); // голова смотрит вперёд
delay(200);
j=0;
for (j = 0; j < 18; j++){ // для j от 0 до 18
head.write(j*10); // вращение сервы по 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>900){ // Если значение больше 900 (датчик сработал), то отходим назад и разворачиваемся
motorRun();
Backward();
delay(500);
Spin_Left();
delay(600);
motorStop();
}

if (p[j]<160){ // если значение с дальномера меньше 150, (примерно 25 см.), то шаг вперед
motorRun();
Forward();
delay (50);
motorStop();}
else { // Иначе

head.write(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);
}
head.write(175); // убираем голову в сторону, чтобы она не мешала захвату предмета и транспортировке
delay(100);
motorRun();
Forward(); // движение до объекта
delay (70); // время движения
motorStop();

rightHand.write(80); // захват первой лапой
delay(500);
leftHand.write(80); // захват второй лапой
delay(100);

gp2=(analogRead(2)); // считываем значение датчиков плоскости
gp1=(analogRead(1));
g=min(gp1,gp2); // выбираем минимальное значение из двух
while(g<100) // движение после захвата до конца плоскости.
{
gp2=(analogRead(2)); // считываем значение датчиков плоскости
gp1=(analogRead(1));
Serial.println(gp2);
g=min(gp1,gp2); // выбираем минимальное значение из двух
motorRun();
Forward();
delay(5);
motorStop();}

rightHand.write(15); // раскрываем правую лапку
delay(100);
leftHand.write(160); // раскрываем левую лапку
delay(100);

motorRun();
Backward();
delay(100);
Spin_Right();
delay(600);
}
}
}



Прикрепление
2527187.jpg(83Kb)
Профиль Личное сообщение Дом. страница icq Skype
0
Администраторы
3318 сообщений
Мужчина
ganzubas, лучше в ВК нам пишите, ибо наш форум умер олет так 5 назад inverted suspect
https://vk.com/servodroid_ru


Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
31
Форум » Проекты по робототехнике » Частные проекты » Робот на ардуино (*icon-0*)
Страница 6 из 6«123456
Поиск: