Сообщество - Лига роботов
Добавить пост

Лига роботов

46 постов 512 подписчиков
17

Хроники сборки.Железная дорога

Хроники сборки.Железная дорога Конструктор, Паровоз, Поезд, LEGO, Своими руками, Инструкция, Механизм, Программирование, Робототехника, Конструирование, Проектирование, Длиннопост


Игрушечная железная дорога!

Покажите мне ребенка, который может равнодушно пройти мимо витрины с железной дорогой в магазине игрушек! Да, что ребенок, железная дорога завораживает и многих взрослых! И вот уже детская игрушка становится серьезным взрослым увлечением.

А теперь давайте добавим к любви к «паровозам» еще и нашу любовь к конструктору!

И тут получается просто огненная смесь: железная дорога из конструктора! О да!..

Комментарии здесь излишни, да и никаких слов не хватит передать все эмоции.

Помню, как в детстве мог часами разглядывать каталоги с наборами поездов, станций… Но, к сожалению, тогда родителям была не по карману покупка набора любимого конструктора из серии железной дороги.

Мечта детства осуществилась уже ближе к тридцати годам, когда однажды на Новый год «дед Мороз» мне подарил игрушечную железную дорогу из любимого конструктора! Восторг был неописуемый! Радовался, как ребенок! Думаю, многие меня поймут.

И вот, спустя еще несколько лет, новая задача – собрать железную дорогу ПОЛНОСТЬЮ из конструктора, не только локомотив с вагонами, но и сами рельсы!

Сразу же зачесались руки – жуть как интересно! И заскрипели извилины – а как всё это сделать?!

В наборах, что продаются в магазинах, рельсы идут готовыми секциями (в сборе со шпалами), а колесные пары сделаны четко под эти самые рельсы.

Собрать свой «паровоз» с такими исходными данными – не самая сложная задача для опытного фаната конструктора. А вот собрать «свои» рельсы и колёса к ним…– тут придется попотеть.

С чего же начать? Нужно за что-то «зацепиться» и дальше развивать эту идею. Начнем с того, что попроще – рельсы. Рельсы? Монорельс? Подвесные пути?

Монорельс – хорошее решение для экономии материала на строительстве путей. Но состав получится неустойчивый. Подвесные пути? На опорах «разоримся». Всё-таки рельсы!Стандартные!

Прямой путь – всё просто: собираем рельсы, строим, в общем-то, любую подвижную платформу – и всё. Главное, чтобы было сцепление колёс с рельсами. Просто. Но когда просто – тогда не интересно!


Поезд не ездит по прямой, он должен проходить виражи!

Начнем с прямых участков пути.

На рельсы пойдут самые длинные детали – балки на 15. Потребуются все. И их сразу можно начать откладывать в сторону (соединять будем в самом конце).

Ширина между рельсами?

3 студа – явно мало, 9 – это перебор. Я сторонник минимализма, так что берем 5 студ.

Рельсы нужно соединять и на что-то крепить. Думаю, с этой задачей прекрасно справятся рамочки и уголки 3х5.

Собираем первый «тестовый» участок – на нем будем строить и испытывать сам поезд.

Хроники сборки.Железная дорога Конструктор, Паровоз, Поезд, LEGO, Своими руками, Инструкция, Механизм, Программирование, Робототехника, Конструирование, Проектирование, Длиннопост

Колёса.

Пластиковые детали на пластиковых рельсах – не самая лучшая идея. Сцепление минимальное – колеса будут проскальзывать. Резиновые покрышки на большие шкивы? Да! Получим необходимое сцепление и размер подходящий.

А сколько брать? Решаю делать 8-ми колесный локомотив: две вагонные тележки по две колёсные пары на каждой (а чего «велосипед» изобретать?!). Колёсная формула – 8х8. Почему? Для обеспечения сцепления ведущих колес с рельсами.

Соединяем колёса в колёсные пары. Соединяем балками в тележки. Добавляем шестеренок, осей – механизм полного привода готов.

Колёса поедут по рельсам, в этом сомнений нет. С установкой мотора тоже справлюсь.

Основные проблемы возникнут при прохождении виражей.

Первое – локомотив должен войти в вираж, т.е., повернуть. В реальной жизни для этой цели на колёсах делают гребень. Он служит для направления движения и предохранения от схода колесной пары. Наверное, сделать такое из конструктора - можно, но нужно будет очень сильно заморочиться. А надо ли?

Второе – локомотив должен «вписаться» в этот самый вираж!

Немного теории: из школьного курса геометрии нам известно, что через любые две точки можно провести окружность. Колёсные пары – это «точки», вираж пути – «окружность».

Платформа на двух колесных парах без особых проблем проходит через виражи. Но у нашего локомотива – 4 колесные пары! Т.е., 4 «точки». И все они находятся на одной ПРЯМОЙ. Следовательно, ни о какой дуге виража не может быть и речи!

Оставляю вопрос открытым…

Параллельно размышляю о самом вираже: его еще тоже нужно построить. Экспериментирую. Подбираю варианты. После нескольких «прототипов» нашелся неплохой вариант.

Собираю секции рельсов: балки на 15 на расстоянии в 3 студа между друг другом. Скрепляю секции: левые рельсы соединяю «в стык» друг с другом, правый – соединяю через один дополнительный студ. На выходе имею угол между секциями примерно в 15 градусов.

Хроники сборки.Железная дорога Конструктор, Паровоз, Поезд, LEGO, Своими руками, Инструкция, Механизм, Программирование, Робототехника, Конструирование, Проектирование, Длиннопост

Возвращаюсь к локомотиву.

Гребень реальных колес нужно чем-то заменить.

Снизу на колесных тележках закрепляю вертикальные оси, уходящие на один студ ниже уровня колёс. При движении локомотива оси будут упираться во внутренние поверхности рельс, тем самым выполняя функции колесного гребня: направлять локомотив и препятствовать его сходу с рельс.

Хроники сборки.Железная дорога Конструктор, Паровоз, Поезд, LEGO, Своими руками, Инструкция, Механизм, Программирование, Робототехника, Конструирование, Проектирование, Длиннопост

На тележках устанавливаю малые поворотные столы, которые будут крепиться к раме локомотива. Теперь каждая тележка может вращаться вокруг своей оси, а вместе они могут вписываться в дугу виража.

Локомотив получается внушительных размеров + вагон. Для надежности решаю установить сразу два мотора, работающих синхронно. Моторы устанавливаю в корпусе локомотива, через поворотные столы делаю привод на все восемь колёс. Всё еще переживаю, хватит ли мощности тащить груженый состав по рельсам: делаю две «понижайки» 8/16 и 12/20.

Контроллер R:ED устанавливаю спереди.

Подключаю, программирую, загружаю, включаю, проверяю. Пробный пуск: локомотив уверенно движется по моим рельсам и проходит вираж.

Отлично!

Хроники сборки.Железная дорога Конструктор, Паровоз, Поезд, LEGO, Своими руками, Инструкция, Механизм, Программирование, Робототехника, Конструирование, Проектирование, Длиннопост

Для полноценного состава нужны вагоны! А куда же без них?!

Хотелось бы, конечно, сделать несколько штук, но поезд получается через чур длинный (рельсов не хватит). Соберу один.

Тут всё просто: колесные тележки собираю по образу уже готовых, только без привода от мотора. Направляющие немного другого вида, но с теми же функциями (заменил оси на Т-образные балки). Поворотные столы. Сам вагон – платформа из рамочек. Готово!

Скучно…

Нужно же обязательно что-то перевозить!

Даю волю фантазии, а на идею подтолкнуло нынешнее жаркое лето: пусть поезд перевозит прохладительные напитки! А почему нет?!

Под это дело есть пара подходящих стаканов. По-летнему яркие, подходящих размеров. Беру!

Пробую сделать ограждения для стаканов, чтобы не падали при движении. Не выходит: размеры не подходят под стандартные детали.

Пробую сделать «зажимы». Две «клешни» под два стакана. В механизме установил «червяка», чтобы избежать самопроизвольного раскрытия. Ну, и чтобы стаканы держались надежнее, устанавливаю резиновые «уплотнители».

Хроники сборки.Железная дорога Конструктор, Паровоз, Поезд, LEGO, Своими руками, Инструкция, Механизм, Программирование, Робототехника, Конструирование, Проектирование, Длиннопост

Осталось только испытать.

Собираем рельсы. Устанавливаем поезд. Берем стаканы, наливаем ледяную минералку! Ставим на платформу.

Поехали!

Хроники сборки.Железная дорога Конструктор, Паровоз, Поезд, LEGO, Своими руками, Инструкция, Механизм, Программирование, Робототехника, Конструирование, Проектирование, Длиннопост
Показать полностью 7
3867

Крипота в МФЦ

1126

Трансформер в городе

Оптимус прайм на ул.Вайнера. Дети еще не перестали удивляться.

Трансформер в городе Трансформеры, Оптимус Прайм, Екатеринбург, Вайнера
Показать полностью 1
15099

Как работает мой код

6

Как подключить много сервоприводов?

Хочу подключить 5 сервоприводов к Ардуино. Хочу запитать их отдельно от акума (4,8 V 3000mAh). Нужно ли для них отдельно шилд брать или можно подключить напрямую? И как можно избавиться от дергания во время работы серво? Если подключить один серво то он работает плавно, а если подключить несколько то они дергаются во время работы, не знаю в чем проблема...

928

Первые 50 дней 100-дневного челленджа «не боюсь неудач» по созданию бегающего робота с нуля

Отсюда - https://redd.it/isneta

41

Мой первый проект на ардуино

Сразу скажу что все подсмотрено из интернетов. Это мой первый опыт. Делал из того что было под руками. Хочу услышать в коментариях советы или ваше мнение по поводу проекта. Когда начался карантин я решил сделать какой нибудь интересный проект. Выбор пал на руку манипулятор. Решено было поставить руку на движущуюся платформу и управлять все с помощью пульта. Далее расскажу про само создание:


1) Рука

Нашел в интернетах схему  каркаса которая мне наиболее понравилась, распечатал детали 1 к 1 и вырезал их. Далее я их наклеил на картон и вырезал уже готовые детали.

Мой первый проект на ардуино Arduino, Робототехника, Робот, Видео, Длиннопост

Для большей прочности я пропитал детали супер клеем и еще подкрасил для красоты.  Для руки я использовал самые дешевые сервоприводы (SG90). В качестве соединений я просто использовал кусочки гвоздей склеенных супер клеем. В итоге получилось такая конструкция.

Мой первый проект на ардуино Arduino, Робототехника, Робот, Видео, Длиннопост

2) Пульт

Для пульта я использовал ардуино нано, радиомодуль NRF24L01, 3 джойстика и выключатель. Питается пульт от кроны и я еще в конце добавил диод. Корпус я сделал пвх пластика. Выпилил 2 части и склеил их горячими соплями. Соединил все навесным монтажом. Схему приводить не буду, тут вроде и нечего смотреть. Кому интересно то скину в комментариях.

Мой первый проект на ардуино Arduino, Робототехника, Робот, Видео, Длиннопост
Мой первый проект на ардуино Arduino, Робототехника, Робот, Видео, Длиннопост

3) Движущуюся платформа

Платформу я вырезал также из пвх пластика. На нее поставил 2 мотор редуктора и драйвер который ими управляет (L298N), такой же радиомодуль NRF24L01 и ардуино уно ( в схеме нано но у меня в наличии лишней не было). В эту же схему подключается 4 серво из которых состоит рука манипулятор. Хотел сделать что то на подобии гусеничной платформы но не закончил. Схему набросал в протеусе.

Мой первый проект на ардуино Arduino, Робототехника, Робот, Видео, Длиннопост
Мой первый проект на ардуино Arduino, Робототехника, Робот, Видео, Длиннопост

Программы тоже простенькие. Передатчик считывает значение  с 3 джойстиков и  непрерывно передает массив из 6 элементов (это x и y  каждого джойстика) по радиоканалу в приёмник. 2 джойстика управляют серво и 1 джойстик моторами. Значение одного джойстика я перевел из 1024 в 510 через функцию map ( для управления скоростью моторов). Приёмник непрерывно получает  массив и с помощью операторов  If оперирует ими. Я много пробовал программ и путем проб и ошибок выбрал наиболее как по мне работающие части кода и соединил их.

Вот программа передатчика:

#include <SPI.h> // библиотека для работы с шиной SPI

#include "nRF24L01.h" // библиотека радиомодуля

#include "RF24.h" // ещё библиотека радиомодуля

RF24 radio(9, 10);

byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера каналов

int transmit_data[6];

int xPin = A0; //1 джойстик

int yPin = A1; //1 джойстик

int x1Pin = A2;//2 джойстик

int y1Pin = A3; //2 джойстик

int x2Pin = A4;//3 джойстик

int y2Pin = A5; //3 джойстик

int D2 = 2; //светодиод

void setup() {

radio.begin(); //активировать модуль

radio.setAutoAck(0); //режим подтверждения приёма, 1 вкл 0 выкл

radio.setRetries(0, 0); //время между попыткой достучаться, число попыток

radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал

radio.setPayloadSize(32); //размер пакета, в байтах

radio.openWritingPipe(address[0]); //мы нулевой канал, открываем канал для передачи данных

radio.setChannel(0x60); //выбираем канал

radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика

radio.setDataRate (RF24_1MBPS); //скорость обмена. Скорость должна быть одинакова на приёмнике и передатчике

radio.powerUp(); //начать работу

radio.stopListening(); //не слушаем радиоэфир, мы передатчик

pinMode(xPin, INPUT);

pinMode(yPin, INPUT);

pinMode(x1Pin, INPUT);

pinMode(y1Pin, INPUT);

pinMode(x2Pin, INPUT);

pinMode(y2Pin, INPUT);

pinMode(D2, OUTPUT);

}

void loop() {

digitalWrite(D2, HIGH);

transmit_data[0] = map(analogRead(xPin), 0, 1035, 0, 510); // изменяем значение из 1024 в 510 для управления движения (ШИМ)

transmit_data[1] = map(analogRead(yPin), 0, 1023, 0, 510);

transmit_data[2] = analogRead (x1Pin);

transmit_data[3] = analogRead (y1Pin);

transmit_data[4] = analogRead (x2Pin);

transmit_data[5] = analogRead (y2Pin);

radio.write(&transmit_data, sizeof(transmit_data)); //отправляем получившийся массив

}

А вот приемника:


#include <SPI.h>

#include "nRF24L01.h"

#include "RF24.h"

#include <Servo.h>

Servo servo1, servo2, servo3, servo4;

RF24 radio(9,10);

byte address[][6] = {"1Node","2Node","3Node","4Node","5Node","6Node"}; //возможные номера каналов

int recieved_data[6];

int ENA = 5;

int in1 = 7;

int in2 = 4;

int ENB = 6;

int degree1 = 0; // DEL SERVO 1 DEGREES

int degree2 = 0; // DEL SERVO 2 DEGREES

int degree3 = 0; // DEL SERVO 1 DEGREES

int degree4 = 0; // DEL SERVO 2 DEGREES

void setup(){

pinMode(ENA, OUTPUT);

pinMode(ENB, OUTPUT);

pinMode(in1, OUTPUT);

pinMode(in2, OUTPUT);

servo1.attach (8);

servo2.attach (3);

servo3.attach (2);

servo4.attach (A5);

radio.begin(); //активировать модуль

radio.setAutoAck(0); //режим подтверждения приёма, 1 вкл 0 выкл

radio.setRetries(0,15); //(время между попыткой достучаться, число попыток)

radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал

radio.setPayloadSize(32); //размер пакета, в байтах

radio.openReadingPipe(1,address[0]); //хотим слушать нулевой канал

radio.setChannel(0x60); //выбираем канал

radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика.

radio.setDataRate (RF24_1MBPS); //скорость обмена

radio.powerUp(); //начать работу

radio.startListening(); //начинаем слушать эфир, мы приёмный модуль

}

void loop() {

byte pipeNo;

while( radio.available(&pipeNo)){ // слушаем эфир со всех каналов

radio.read( &recieved_data, sizeof(recieved_data) ); //читаем присланный массив

if (recieved_data[1] > 255){

analogWrite(ENA, recieved_data[1] - 255);

analogWrite(ENB, recieved_data[1] - 255);

digitalWrite(in1, HIGH);

digitalWrite(in2, LOW);

//digitalWrite(in3, HIGH);

//digitalWrite(in4, LOW);

} else if (recieved_data[1] < 255)

{ analogWrite(ENA, 255-recieved_data[1]);

analogWrite(ENB, 255-recieved_data[1]);

digitalWrite(in1, LOW);

digitalWrite(in2, HIGH);

}

else if (recieved_data[0] > 255){

analogWrite(ENB, recieved_data[0] - 255);

digitalWrite(in2, HIGH);

digitalWrite(in1, LOW);

}

else if (recieved_data[0] < 255){

analogWrite(ENA, 255 - recieved_data[0]);

digitalWrite(in2, LOW);

digitalWrite(in1, HIGH);

}

else if (recieved_data[0]==255 && recieved_data[1]==255){

digitalWrite(in2, LOW);

digitalWrite(in1, LOW);

delay(10);

}

// INCREASE MOTOR1 DEGREES

/////////////////////////////////////////////////////////////////////////////////////////////////////////////

if ( (recieved_data[2] > 550 ) && (recieved_data[2] <= 1023) ) // INCREASE DEGREES WHEN THE X-AXIS READING IS HIGHER THAN 550

{

degree1 = degree1 + 1;

}

// DECREASE MOTOR1 DEGREES

if ( (recieved_data[2] >= 0 ) && (recieved_data[2] < 480 )) // DECREASE DEGREES WHEN THE X-AXIS READING IS LOWER THAN 480

{

degree1 = degree1 - 1;

}

else // KEEP THE DEGREE VALUE STABLE MEANWHILE YOU ARE NOT USING THE JOYSTICK

{

degree1 = degree1;

}

// INCREASE MOTOR 2 DEGREES

if ( (recieved_data[3] > 550 ) && (recieved_data[3] <= 1023) ) // INCREASE THE DEGREES WHEN THE X-AXIS READING IS HIGHER THAN 550

{

degree2 = degree2 + 1;

}

// DECREASE MOTOR 2 DEGREES

if ( (recieved_data[3] >= 0 ) && (recieved_data[3] < 480) ) // DECREASE THE DEGREES WHEN THE X-AXIS READING IS LOWER THAN 480

{

degree2 = degree2 - 1;

}

else // KEEP THE DEGREE VALUE STABLE MEANWHILE YOU ARE NOT USING THE JOYSTICK

{

degree2 = degree2;

}

/////////////////////////////////////////////////////////////////////////////

if ( (recieved_data[4] > 550 ) && (recieved_data[4] <= 1023) ) // INCREASE DEGREES WHEN THE X-AXIS READING IS HIGHER THAN 550

{

degree3 = degree3 + 1;

}

// DECREASE MOTOR1 DEGREES

if ( (recieved_data[4] >= 0 ) && (recieved_data[4] < 480 )) // DECREASE DEGREES WHEN THE X-AXIS READING IS LOWER THAN 480

{

degree3 = degree3 - 1;

}

else // KEEP THE DEGREE VALUE STABLE MEANWHILE YOU ARE NOT USING THE JOYSTICK

{

degree3 = degree3;

}

// INCREASE MOTOR 2 DEGREES

if ( (recieved_data[5] > 550 ) && (recieved_data[5] <= 1023) ) // INCREASE THE DEGREES WHEN THE X-AXIS READING IS HIGHER THAN 550

{

degree4 = degree4 + 1;

}

// DECREASE MOTOR 2 DEGREES

if ( (recieved_data[5] >= 0 ) && (recieved_data[5] < 480) ) // DECREASE THE DEGREES WHEN THE X-AXIS READING IS LOWER THAN 480

{

degree4 = degree4 - 1;

}

else // KEEP THE DEGREE VALUE STABLE MEANWHILE YOU ARE NOT USING THE JOYSTICK

{

degree4 = degree4;

}

/////////////////////////////////////////////////////////////////////////////

servo1.write (degree1); // SEND THE DEGREES TO SERVO 1

servo2.write (degree2); // SEND THE DEGREES TO SERVO 2

servo3.write (degree3); // SEND THE DEGREES TO SERVO 1

servo4.write (degree4); // SEND THE DEGREES TO SERVO 2

delay (15);

}

}


Для экономии места я убрал все отступления. Заранее извиняюсь за код если кому будет глаза резать.

Теперь о проблемах с которыми я столкнулся:

Значение на джойстиках было никак не 0 - 1024. На каждом джойстике было разное. По этому с помощью функции map значение переводились не совсем корректно и достаточно плавного изменения скорости я не добился. Так же я не решил проблему с питанием. Запитал устройство от блока питания на 12 v через драйвер двигателя, с 12 вольт подключил так же Ардуино. Далее  с клеммы 5 v отдельно подключил  4 серво. Так же у меня не хватало пинов чтобы управлять серво. Насколько я понял что серво ими лучше управлять через пины в которых есть шим но большинство пинов было занято радиомодулем и драйвером. При таком подключении все работало и потом узнал что аналоговые пины тоже можно использовать как цифровые. Серво в итоге пульсировали хотя контакты я припаял напрямую к плате. Если подскажете в чем проблема то буду очень благодарен. Ну и в конце демонстрация того что получилось.

Показать полностью 6 1
4042

Техноамериканцы.

Техноамериканцы. Ученые, Новая Зеландия, Робототехника, Расизм, Бред
Показать полностью 1
1606

Эти черствые и бессердечные люди

Чуть не заплакал, читая эту новость:

Созданный Центром имени М. В. Хруничева робот остался безымянным из-за того, что глава Роскосмоса Дмитрий Рогозин, к которому машина должна была обратиться с соответствующей просьбой, просто прошел мимо, передает корреспондент ТАСС с места события.
"Дмитрий Олегович, здравствуйте. Давайте поговорим", - сказал робот.
Но Рогозин прошел мимо.
Планировалось, что робот попросит главу Роскосмоса придумать ему имя.
Ранее сообщалось, что центр представил на этом форуме базовую роботизированную платформу собственной разработки для работы в опасных для человека условиях.

(с) twower

134

Робот, который сам находит где Вальдо!

Мои подписки
Подписывайтесь на интересные вам теги, сообщества,
пользователей — и читайте свои любимые темы в этой ленте.
Чтобы добавить подписку, нужно авторизоваться.
Отличная работа, все прочитано!