В этом пошаговом руководстве рассматривается создание дистанционно управляемого робота на основе двухколёсного шасси и манипулятора. Управляется робот по Bluetooth из мобильного Android-приложения.
Используемые компоненты:
Arduino UNO и Genuino UNO × 1
Манипулятор с двумя степенями свободы (захват и основание) × 1
Модуль Bluetooth HC-05 × 1
Шилд драйвера моторов на L293D × 1
Шасси 2WD Smart Robot × 1
NiMH аккумулятор 5В 1500мАч (4 АА аккумулятора последовательно) × 1
Комплект соединительных проводов Папа-Папа для макетной платы × 1
Программы и онлайн-сервисы:
Arduino IDE
App Inventor
Из этого пошагового руководства вы узнаете, как создать робота с манипулятором и управлением с Android устройства. Приложение создано с помощью App Inventor. Каждая часть проекта будет рассмотрена отдельно:
Надеюсь, что это руководство раскрывает все аспекты, необходимые для создания подобного робота.
Прежде всего, мы должны знать, как робот будет принимать команды. Для передачи данных используется модуль Bluetooth, который подключается к Android устройству (смартфон, планшет), на котором запущено приложение, созданное в App Inventor. На данный момент нам нужно знать, что мы отправляем команды роботу с нашего мобильного приложения по Bluetooth.
Комплект шасси очень прост в сборке, но это занимает некоторое время. Наборов шасси много, следуйте инструкциям по сборке, прилагаемым к вашему набору шасси.
Собранное шасси, используемое мной, выглядит так:
MotorShield для Arduino позволяет управлять мотор-редукторами, установленными на нашем шасси. Если вы подключите такие мотор-редукторы на прямую к плате Arduino, она выйдет из строя. Это связано с тем, что каждому такому мотору требуется не менее 80 мА, а максимальный ток, который может обеспечить каждый порт или вывод Arduino, составляет 30мА. Суммарный ток всего микроконтроллера, не более 150ма. Поэтому не пытайтесь подключить такие или более мощные моторы напрямую к плате Arduino.
Шилд моторов помогает вам управлять направлением движения шасси, например, двигаться вперед, назад, повернуть или остановиться.
Драйвер моторов L293D позволяет управлять двумя коллекторными моторами. На плате таких драйвера два, т.е. суммарно можно управлять до 4 коллекторными моторами. Драйвер позволяет задавать направление вращения для каждого мотора, а также использовать ШИМ для регулировки скорости вращения.
Шилд разработан для установки в некоторые платы Arduino, например, Uno или Mega. Для удобства подключения, и чтобы иметь возможность использовать контакты Arduino, к выводам сверху припаять PLS штекер.
Сам шилд моторов устанавливается на Arduino следующим образом:
Если используется другая плата, например, NANO, подключить к ней шилд моторов можно с помощью соединительных проводов.
Это модуль UART-моста, который позволяет без проводов управлять роботом.
Вместо модуля HC-05 можно использовать другой подобный. Модули HC-05 бывают немного разные, но это не существенно. У используемого модуля выведено 6 контактов, для работы используется только средние четыре контакта (RX, TX, GND, +5V):
Подключение:
5В на модуле Bluetooth к 5v на Arduino
GND на модуле Bluetooth к GND на Arduino
Rx на модуле Bluetooth к Tx на Arduino
Tx на модуле Bluetooth к Rx на Arduino
Обратите внимание, что Rx подключается к Tx, а не Tx к Tx и Rx к Rx. Вывод Rx (receiver, приёмник) служит только для приёма данных, а Tx (transmitter, передатчик) только для передачи. По аналогии, это как динамик и микрофон - динамик излучает звуки, а микрофон их регистрирует и «соединять» микрофон с микрофоном или динамик с динамиком не имеет смысла.
У сервоприводов 3 провода: красный (плюс питания), коричневый (земля), желтый или оранжевый (управляющий).
Не запитывайте сервоприводы от платы Arduino или она выйдет из строя, т.к. не рассчитана на такие большие токи - каждый сервопривод может потреблять два и более ампера, на что схема питания Arduino совершенно не рассчитана.
Для питания используйте внешний источник питания. В данном случае используется аккумулятор, а для тестов можно подключить к внешнему блоку питания или сразу. Земля (GND) источника питания (аккумулятора или внешнего блока питания) и Arduino должны быть соединены.
Красный провод к плюсу питания внешнего источника питания. Коричневый провод и к земле внешнего источника питания и к земле Arduino. Оранжевые провода к любым цифровым выводам на Arduino.
Я подключил сервоприводы к выводам d9 и d10:
gripperServo.attach(9);
elbowServo.attach(10);
Если вы подключите к другим выводам, не забудьте в этих двух строчка поменять числа, в соответствии с тем, куда вы подключили сервоприводы.
В зависимости от набора, провода к моторам уже могут быть припаяны или как в моём случае, их нужно было припаять самостоятельно.
У коллекторных моторов нет полярности, т.е. нет положительного и отрицательного выводов. В зависимости от того, на какие выводы будет подано + и -, от этого будет зависеть направление вращения мотора.
После того, как провода припаяны к моторам, подключаем их к мотор-шилду.
Моторы можно подключить к выводам «Мотор 1» и «Мотор 2» или «Мотор 3» и «Мотор 4». В данном случае моторы подключены к выводам «Мотор 1» и «Мотор 2», если подключите к 3 и 4, не забудьте внести изменения в коде.
Аккумулятор подключается к специальному разъёму на плате шилда. Что бы было легко отключать питание, аккумулятор можно подключать через разъём или на проводе «+питания» припаять выключатель.
Сервоприводы можно подключить на прямую к шилду моторов, для этого на нём есть два разъёма.
В случаях, когда напряжение аккумулятора проседает из-за сильно мощных сервоприводов или для сервоприводов хочется использовать аккумулятор с большим напряжением, можно использовать второй аккумулятор. При использовании двух аккумуляторов, сигнальные провода от сервоприводов подключаются к выводам шилда, а +питания и земля к аккумулятору. Также обязательно соединить землю аккумулятора с землёй Arduino или сервошилда (на разъёме к которому подключаются моторы, средний вывод — это земля).
Схема подключения модуля bluetooth к плате Arduino:
Модуль подключается к аппаратному последовательному интерфейсу Arduino, по которому загружается скетч. Чтобы модуль не мешал программированию, перед загрузкой скетча отключите ему питание (провод +5В), а после загрузки скетча снова подключите.
Это демонстрационный проект, возможно вам захочется на его основе сделать что-то своё и при программировании нужно будет часто загружать скетч. В таком случае постоянно отключать питание будет не очень удобно и модуль блютуза можно подключить к другим выводам Arduino – загрузка скетча будет производиться по аппаратному UART, а для блютуза использовать программную реализацию. Программный UART реализован в библиотеке SoftwareSerial.
#include<AFMotor.h> #include<Servo.h> AF_DCMotor motorR(1); AF_DCMotor motorL(2); Servo elbowServo; Servo gripperServo; int command; void setup() { gripperServo.attach(9); elbowServo.attach(10); Serial.begin(9600); motorR.setSpeed(255); motorL.setSpeed(255); } void loop() { command = Serial.read(); /* ARM Code */ if (command >= 1 && command <= 180) //elbow servo move according to the thumb position on the mob app between 0 -- 180 . { elbowServo.write(command); } else if (command == 205) //Gripper Move To Angle 0 { gripperServo.write(0); } else if (command == 206) //Gripper movw to angle 90 { gripperServo.write(90); } else if (command == 207) //gripper move to angle 180 { gripperServo.write(180); } /* CAR CODE */ else if (command == 200) { motorR.run(FORWARD); motorL.run(FORWARD); } else if (command == 201) { motorR.run(FORWARD); motorL.run(BACKWARD); } else if (command == 202) { motorR.run(RELEASE); motorL.run(RELEASE); } else if (command == 203) { motorR.run(BACKWARD); motorL.run(FORWARD); } else if (command == 204) { motorR.run(BACKWARD); motorL.run(BACKWARD); } else if (command == 0) { motorR.run(RELEASE); motorL.run(RELEASE); } }
Для работы скетча нужны две библиотеки, AFMotor и Servo. Если они не подключены, подключить их можно в диспетчере библиотек. AFMotor в менеджере библиотек называется «Adafruit Motor Shield library», для используемого шилда подходит первая версия библиотеки.