Каталог
|
ВПЕРЕД - НА МАРС (Собираем робоплатформу)2016-06-16 Все статьи →А. Чечин Робоплатформа – это простой электромеханический конструктор, который позволяет научиться программированию и начать создавать своих самоходных роботов. Причем возможности платформы ничем не ограничены. Робот может быть любым, от боевого до научного, предназначенного для изучения других планет, например, Марса.
Для сборки будущего марсохода возьмем двухпалубную платформу. Мне она показалась более удобной, ведь оборудование можно размещать на верхней палубе, а аккумуляторы – на нижней.
Казалось бы, что может быть проще. Бери и собирай, тем более что производители положили в комплект большое количество всяких винтиков, стоечек и даже отвертку. Но на проверку оказалось, что просто собрать платформу мало, нужно ее еще и настроить. Начнем сборку. На нижнюю палубу закрепим двигатели и поддерживающий шарик, такое себе неуправляемое "колесо". Закрепим четыре латунные стойки и привинтим к ним вторую палубу. Платформа готова.
Теперь начинаем ставить бортовой компьютер и систему управления. Бортовой компьютер - плату Arduino, можно закрепить на четырех небольших стойках, но лучше воспользоваться промежуточной основой от прозрачного корпуса для Arduino, что позволит избежать возможных повреждений платы или проблем с большими головками винтов, которые упираются в детали монтажа на плате Arduino. При использовании основы от корпуса, винты легко проходят в прямоугольные отверстия основы и вкручиваются в стойки.
В финале установим на Arduino плату управления двигателями – стандартный моторшилд на L293D. Для питания марсохода использем комплектный отсек для четырех батарей формата АА.
Протягиваем провода от моторов к шилду и подключаем их к соответствующим винтовым клеммникам. В моем случае это М3 и М4. Подключаем питание. Не забываем за перемычку на шилде. Когда перемычка замкнута, тогда питание Arduino и моторов идет от внешнего источника, подключенного клеммам питания шилда. Когда перемычка разомкнута – питание у Arduino и моторов раздельное. На фото перемычка разомкнута, в этом положении Arduino можно подключать к USB для записи скетча.
Сборочные процедуры закончены. Устраиваем праздничную выкатку платформы из сборочного цеха. Приглашаем прессу, делаем фуршет, все дела … Первый этап закончен. Пишем программное обеспечение. Для начала скачиваем и устанавливаем библиотеку AFMotor. Пишем простой текст, для первого прогона платформы "по прямой": #include <AFMotor.h> //Подключаем библиотеку // Подключаем моторы к M3, M4 AF_DCMotor motor3(3); AF_DCMotor motor4(4); //начальная максимальная скорость вращения (0..255) int speed_Left=255; int speed_Right=255; void setup() { // Задаем начальную скорость вращения моторов motor3.setSpeed(speed_Left); motor4.setSpeed(speed_Right); } void loop() { // Едем вперед motor3.run(FORWARD); motor4.run(FORWARD); } Выезжаем на полигон и запускаем платформу. К сожалению, скорее всего, платформа идеально прямо не поедет. Она будет немного (или много) забирать вправо или влево. Лично мой экземпляр едет налево.
Конечно, можно с этим смириться и начать разработку основной программы и уже там компенсировать отклонение, а можно, на начальном этапе отрегулировать ход разностью скоростей вращения двигателей и внести необходимую поправку. Для этого подключим к Arduino потенциометр и перепишем программу управления следующим образом: при среднем положении движка потенциометра оба мотора будут крутиться с одинаковой скоростью; при отклонении движка влево от середины - левый мотор будет уменьшать обороты; при отклонении движка вправо - правый мотор будет уменьшать обороты. Для начальной выставки движка потенциометра в среднее положение, будем использовать светодиод, яркость которого зависит от положения движка. В середине - светодиод гаснет. Светодиод с токоограничивающим резистором подключаем к разъему для servo1 (соединен с 10-м цифровым pin Arduino). Потенциометр подключаем к аналоговому порту A0.
Запуская платформу и перемещая движок, добьемся прямолинейности хода, а полученные числа посмотрим "на стенде" через COM-порт. Результаты используем в основной управляющей программе. Дорабатываем схему.
Изменяем программу. #include <AFMotor.h> //Подключаем библиотеку
// Подключаем моторы к M3, M4 AF_DCMotor motor3(3); AF_DCMotor motor4(4); //Задаем начальную скорость вращения int speed_Left=255; int speed_Right=255; //Для чтения скорости с резистора int analogIn=0; int val;
void setup() { Serial.begin(9600); //Конфигурируем 10-й pin pinMode(10, OUTPUT); digitalWrite(10, LOW); // Задаем начальную скорость вращения моторов (0..255) motor3.setSpeed(speed_Left); motor4.setSpeed(speed_Right); //motor3.run(RELEASE); //motor4.run(RELEASE); }
void loop() { // Едем вперед motor3.run(FORWARD); motor4.run(FORWARD); //Читаем положение движка потенциометра val=map(analogRead(analogIn), 0, 1023, 0, 512); val=255-val; //формируем значение скорости if (val > 0) speed_Left=255-val; else speed_Right=255-abs(val); //Светодиод для контроля нуля - не горит когда моторы крутятся одинаково (val=0) analogWrite(10, abs(val)); //печатаем в COM для контроля Serial.print("val= "); Serial.print(val); Serial.print(" L= "); Serial.print(speed_Left); Serial.print(" R= "); Serial.println(speed_Right); //учитываем возможные случайные флуктуации в аналоговом порту if (speed_Left < 0) speed_Left=0; if (speed_Right < 0) speed_Right=0; //задаемся новой скороcтью моторов motor3.setSpeed(speed_Left); motor4.setSpeed(speed_Right); } Запускаем, регулируем и добиваемся прямолинейности движения. После, подключаем платформу к компьютеру и читаем значение переменной val, это и есть искомая поправка к оборотам одного из двигателей.
Теперь можно исправить текст первого скетча, уменьшив обороты правого мотора на 24 единицы. int speed_Right=231; Поздравляю. Платформа едет прямо, готова и настроена. Вперед – на Марс.
Благодарим Вас за обращение! Ваш отзыв появится после модерации администратором.
Пока нет отзывов на эту статью.
|