Конечно, машины с дистанционным управлением — это весело, а самообслуживаемые роботизированные машины — еще веселее. В этом уроке мы создадим четырехколесного робота, который сможет передвигаться и избегать препятствий. Я купил этот полный комплект 4WD в магазине AliExpress , но вы можете легко купить большинство этих компонентов в магазине электроники и собрать их самостоятельно.
Я рекомендую прочитать все инструкции перед началом работы, так как это прояснит некоторые вещи, которые могут сбить с толку в первый раз. Кроме того, это может выглядеть как очень длинный, продвинутый проект из-за длины инструкций, но на самом деле это довольно просто. Не нужно пугаться — это проект начального уровня, с которым вы можете получить некоторые удовлетворительные результаты, а затем опираться на них, когда узнаете больше. Не нравится этот стиль робота? Вот еще несколько роботов Arduino роботов вы могли бы легко построить вместо этого.
Вот что мы имеем после того, как вынули все из упаковки:
Для начала мы прикрепим моторы и мост H (плату, которая подает питание на моторы) к нижней части шасси. Во-первых, прикрепите четыре металлических кронштейна (они прямоугольные, высверленные металлические блоки) к каждому двигателю, используя два длинных болта и две гайки.
Вам нужно убедиться, что они прикреплены правильно, поэтому посмотрите на изображение ниже, чтобы убедиться, что сторона блока с двумя просверленными отверстиями будет обращена вниз. Обратите внимание, что провода на каждом двигателе направлены к центру шасси.
Теперь каждый двигатель можно прикрепить к шасси с помощью двух коротких болтов в нижней части каждого металлического кронштейна. Вот вид нижней части шасси, чтобы вы могли видеть, где болты должны быть:
Следующим шагом является закрепление H-моста (это красная плата в моем комплекте) к шасси. Вы можете подождать, пока все провода не присоединятся к H-мосту, прежде чем делать это, но это зависит от вас (я обнаружил, что это проще). Краткое замечание: в моем наборе отсутствовало несколько крепежных элементов, поэтому я использовал изоленту для закрепления моста. Тем не менее, вы можете увидеть здесь, где болты и гайки пошли бы:
Теперь, когда H-мост подключен, вы можете начать подключение источника питания. Поскольку держатель батареи на шесть АА поставляется с адаптером постоянного тока, вам необходимо либо отрезать конец (что я и сделал), либо проложить перемычки к самим батареям.
Независимо от того, как вы решите это сделать, вы проведете положительный провод к порту с меткой «VMS», а отрицательный провод к порту с меткой «GND» на мосту. Закрутите крепежи и убедитесь, что они надежно закреплены. Затем подключите провода двигателя. С обеих сторон есть набор из двух портов; один помечен как «МОТОРА», а другой — «МОТОРБ». Оба красных провода с каждой стороны войдут в самый центральный зеленый порт, а оба черных провода — во внешний. Эта картина должна сделать это более ясным:
Я обнаружил, что мне пришлось снять часть корпуса с проводов двигателя, чтобы заставить это работать. Теперь, когда все двигатели и источник питания подключены, наденьте колеса на валы привода двигателя и прикрепите четыре медных вала в местах, показанных на рисунке ниже (для каждого медного вала требуется один небольшой болт). Этот робот начинает обретать форму!
Теперь отложите эту часть корпуса и возьмите другую, которая будет располагаться сверху. Следующим шагом является прикрепление Arduino — опять же, мне пришлось использовать изоленту, но вы должны быть в состоянии лучше защитить свои с помощью некоторых болтов и гаек.
Для следующего шага требуются микро сервопривод, черная крестовина, сервопривод (который состоит из трех черных пластиковых деталей) и несколько маленьких винтов. Используйте один из больших острых винтов в комплекте, чтобы прикрепить черную крестовину к микро сервоприводу:
Затем переверните сервопривод вверх дном в черное пластиковое кольцо держателя. Убедитесь, что провода, выходящие из сервопривода, направлены в ту же сторону, что и более длинная часть держателя (опять же, см. Изображение ниже), и используйте четыре крошечных винта, чтобы закрепить поперечину (в держателе есть четыре отверстия, которые совместить с отверстиями на перекладине).
Вот как это выглядит после прикрепления:
Наконец, возьмите две другие части держателя сервопривода и защелкните их на сервоприводе (в боковых частях есть углубления, которые соответствуют пластиковому выступу на сервоприводе).
Теперь, когда сервопривод готов, его можно установить на шасси.
Вот куда идут болты:
Пришло время взглянуть на нашего робота. Прикрепите ультразвуковой датчик к сервоприводу с помощью двух стяжек.
Если вы работаете с тем же набором, что и я, вы получите сенсорный экран Arduino. Мы не будем использовать его в этой сборке, но вы можете поместить его поверх UNO сейчас, если хотите (как показано на рисунке ниже). Просто совместите контакты в нижней части экрана с портами ввода / вывода на Arduino и нажмите вниз, чтобы соединить их. В данный момент он вам не нужен, но щиты могут пригодиться .
Независимо от того, подключаете ли вы сенсорный экран или нет, теперь вам потребуется четыре провода для подключения ультразвукового датчика к Arduino. Датчик имеет четыре контакта: VCC, GND, TRIG и ECHO. Подключите VCC к выводу 5 В на Arduino, GND к GND, а TRIG и ECHO к контактам 12 и 13 ввода / вывода.
Теперь возьмите нижнюю часть шасси и подключите шесть перемычек к контактам ввода / вывода моста H (они обозначены как ENA, IN1, IN2, IN3, IN4 и ENB). Обратите внимание, какие цветные провода подключены к каким портам, как вам нужно знать позже.
Теперь пришло время начать собирать эту штуку вместе. Возьмитесь за верхнюю часть корпуса и установите его на верхнюю часть медных валов, соединенных с нижней частью, и протяните провода, прикрепленные к мосту H, через отверстие в центре корпуса. Подключите шесть проводов к портам ввода / вывода следующим образом:
- ENA к порту ввода / вывода 11
- ENB к порту ввода / вывода 10
- А1 к порту ввода / вывода 5
- А2 к порту ввода / вывода 6
- От B1 до порта ввода / вывода 4
- B2 к порту ввода / вывода 3
Теперь используйте четыре коротких винта, чтобы прикрепить верхнюю часть корпуса к медным валам. Установите держатель батареи с шестью батареями АА в верхней части корпуса (закрутите его, если можете), прикрепите держатель ячейки 9 В к Arduino, и этот бот готов к работе!
Ну, почти готов к рок. У него еще недостаточно личности.
Вот и мы. Теперь, чтобы дать ему мозги. Давайте сделаем немного программирования.
Первое, что мы сделаем, это тест, чтобы убедиться, что мост и моторы подключены правильно. Вот быстрый набросок , который скажет боту двигаться вперед на полсекунды, двигаться назад на полсекунды, а затем повернуть налево и направо:
// Motor A pins (enableA = enable motor, pinA1 = forward, pinA2 = backward) | |
int enableA = 11; | |
int pinA1 = 6; | |
int pinA2 = 5; | |
//Motor B pins (enabledB = enable motor, pinB2 = forward, pinB2 = backward) | |
int enableB = 10; | |
int pinB1 = 4; | |
int pinB2 = 3; | |
//This lets you run the loop a single time for testing | |
boolean run = true; | |
void setup() { | |
pinMode(enableA, OUTPUT); | |
pinMode(pinA1, OUTPUT); | |
pinMode(pinA2, OUTPUT); | |
pinMode(enableB, OUTPUT); | |
pinMode(pinB1, OUTPUT); | |
pinMode(pinB2, OUTPUT); | |
} | |
void loop() { | |
if (run) { | |
delay(2000); | |
enableMotors(); | |
//Go forward | |
forward(200); | |
//Go backward | |
backward(200); | |
//Turn left | |
turnLeft(400); | |
coast(200); | |
//Turn right | |
turnRight(400); | |
coast(200); | |
//This stops the loop | |
run = false; | |
} | |
} | |
//Define high-level H-bridge commands | |
void enableMotors() | |
{ | |
motorAOn(); | |
motorBOn(); | |
} | |
void disableMotors() | |
{ | |
motorAOff(); | |
motorBOff(); | |
} | |
void forward(int time) | |
{ | |
motorAForward(); | |
motorBForward(); | |
delay(time); | |
} | |
void backward(int time) | |
{ | |
motorABackward(); | |
motorBBackward(); | |
delay(time); | |
} | |
void turnLeft(int time) | |
{ | |
motorABackward(); | |
motorBForward(); | |
delay(time); | |
} | |
void turnRight(int time) | |
{ | |
motorAForward(); | |
motorBBackward(); | |
delay(time); | |
} | |
void coast(int time) | |
{ | |
motorACoast(); | |
motorBCoast(); | |
delay(time); | |
} | |
void brake(int time) | |
{ | |
motorABrake(); | |
motorBBrake(); | |
delay(time); | |
} | |
//Define low-level H-bridge commands | |
//enable motors | |
void motorAOn() | |
{ | |
digitalWrite(enableA, HIGH); | |
} | |
void motorBOn() | |
{ | |
digitalWrite(enableB, HIGH); | |
} | |
//disable motors | |
void motorAOff() | |
{ | |
digitalWrite(enableB, LOW); | |
} | |
void motorBOff() | |
{ | |
digitalWrite(enableA, LOW); | |
} | |
//motor A controls | |
void motorAForward() | |
{ | |
digitalWrite(pinA1, HIGH); | |
digitalWrite(pinA2, LOW); | |
} | |
void motorABackward() | |
{ | |
digitalWrite(pinA1, LOW); | |
digitalWrite(pinA2, HIGH); | |
} | |
//motor B controls | |
void motorBForward() | |
{ | |
digitalWrite(pinB1, HIGH); | |
digitalWrite(pinB2, LOW); | |
} | |
void motorBBackward() | |
{ | |
digitalWrite(pinB1, LOW); | |
digitalWrite(pinB2, HIGH); | |
} | |
//coasting and braking | |
void motorACoast() | |
{ | |
digitalWrite(pinA1, LOW); | |
digitalWrite(pinA2, LOW); | |
} | |
void motorABrake() | |
{ | |
digitalWrite(pinA1, HIGH); | |
digitalWrite(pinA2, HIGH); | |
} | |
void motorBCoast() | |
{ | |
digitalWrite(pinB1, LOW); | |
digitalWrite(pinB2, LOW); | |
} | |
void motorBBrake() | |
{ | |
digitalWrite(pinB1, HIGH); | |
digitalWrite(pinB2, HIGH); | |
} |
Это большой код для простого теста, но определение всех этих функций облегчает настройку позже. (Большое спасибо Billwaa за его сообщение в блоге об использовании H-моста для определения этих функций.) Если что-то пошло не так, проверьте все ваши соединения и убедитесь, что провода подключены к правильным контактам. Если все заработало, пришло время перейти к тестированию датчика. Чтобы использовать ультразвуковой датчик, вам нужно загрузить библиотеку NewPing , а затем использовать Sketch> Включить библиотеку> Добавить библиотеку .ZIP…, чтобы загрузить библиотеку.
Убедитесь, что вы видите оператор включения в верхней части эскиза; если вы этого не сделаете, нажмите Sketch> Включить библиотеку> NewPing . Сделав это, загрузите следующий эскиз:
#include <NewPing.h> | |
//Tell the Arduino where the sensor is hooked up | |
NewPing sonar(12, 13); | |
long inches; | |
void setup() { | |
//Activate the serial monitor so you can see the output of the sensor | |
Serial.begin(9600); | |
} | |
void loop() { | |
delay(50); | |
//Ping the sensor to determine distance in inches | |
inches = sonar.ping_in(); | |
//Print the distance in inches to the serial monitor | |
Serial.print(inches); | |
Serial.print(" in."); | |
Serial.print("\n"); | |
} |
Загрузите эскиз и откройте последовательный монитор, используя Инструменты> Последовательный монитор . Вы должны увидеть быстро обновляемую последовательность чисел. Держите руку перед датчиком и посмотрите, изменится ли это число. Двигайте рукой внутрь и наружу, и вы должны измерить, как далеко ваша рука находится от датчика.
Если все работало правильно, пришло время собрать все воедино и запустить! Вот код для робота сейчас. Как вы, вероятно, можете сказать, это в основном два тестовых эскиза вместе с добавленным оператором if для управления поведением робота. Мы дали ему очень простое поведение, позволяющее избегать препятствий: если он обнаружит что-то на расстоянии менее четырех дюймов, он будет выполнять резервное копирование, поворачивать налево и снова начнет движение. Вот видео бота в действии.
Подари роботу жизнь
После того, как вы правильно настроили это поведение, вы можете добавить более сложное поведение; сделать, чтобы робот чередовался с поворотом влево и вправо, или выбирал случайным образом; подать звуковой сигнал, если он приблизится к чему-либо; просто поверните вместо того, чтобы отступить; вы действительно ограничены только вашим воображением. Вы можете использовать что угодно в своем стартовом наборе Arduino. входит в ваш стартовый набор чтобы добавить больше функциональности. Вы также заметите, что мы еще ничего не кодировали для сервопривода: вы можете фактически заставить «глаза» вашего робота двигаться вперед и назад. возможно, используя их для поиска пути, вместо того, чтобы просто отступать, когда он находит препятствие прямо перед собой.
Дайте нам знать, если вы решите создать этого робота или другого, и расскажите, как вы решили настроить его поведение или внешний вид. Если у вас есть какие-либо вопросы об этом роботе, отправьте их в комментариях ниже, и я посмотрю, смогу ли я помочь!