Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
Робот Mecanum - проект, который я хотел создать с тех пор, как увидел его в ужасном блоге мехатроники Dejan: howtomechatronics.com
Деян действительно хорошо поработал, охватывая все аспекты, от оборудования, 3D-печати, электроники, кода и приложения для Android (изобретатель приложения MIT).
Это отличный проект, обновляющий все навыки мейкера.
Мне нужно было внести некоторые изменения в проекты
Я не хотел использовать сделанную на заказ печатную плату, которую он использовал, но старый экран GRBL, который у меня был дома.
Я хотел использовать BlueTooth
Так:
Запасы
Arduino Uno + GRBL Shield
Шаговые двигатели
Модуль HC-06 BlueTooth
Липо аккумулятор 12 В
Шаг 1. Аппаратное обеспечение
Распечатал колеса и собрал их, как здесь:
Подключил 4 шаговых двигателя к шасси (в моем случае неиспользуемый ящик перевернут)
Проложил кабели к верхней части робота.
Шаг 2: Электроника
Я использовал свой модуль HC-06 BT, Самым сложным было настроить экран GRBL для работы с 4 шаговыми двигателями, поскольку для этого нет хорошего руководства, Необходимо установить перемычки, как показано на прилагаемом рисунке, чтобы сделать вывод «Инструмент» щита также для управления шаговым двигателем. также нужно поставить перемычку "Включить"
проводка 4 степперов и все.
Я также подавал питание от батарей на 12 В - двух стейков - один для Arduino и один для GRBl Shield.
Шаг 3: код Arduino
/ * === Arduino Mecanum Wheels Robot === Управление смартфоном через Bluetooth от Dejan, www. HowToMechatronics.com Библиотеки: RF24, www. HowToMechatronics.com AccelStepper от Mike McCauley: www. HowToMechatronics.com
* / / * 2019-11-12 Gilad Meller (https://www.keerbot.com - модифицируйте код для работы с GRBL arduino motor Shield Шаговые двигатели в щите отображаются как (шаг / направление): 2/5 3 / 6 4/7 12/13 с использованием драйвера A4988 12 В
В коде Dejan используется SoftwareSerial, а мой будет использовать стандартные выводы RX, TX (0, 1) Arduino Uno. Примечание: не забудьте заменить выводы RX TX при загрузке скетча в Arduino, иначе загрузка не удастся.
*/ #включают
// Определяем шаговые двигатели и выводы, которые будут использовать AccelStepper LeftBackWheel (1, 2, 5); // (Тип: драйвер, STEP, DIR) - Stepper1 AccelStepper LeftFrontWheel (1, 3, 6); // Stepper2 AccelStepper RightBackWheel (1, 4, 7); // Stepper3 AccelStepper RightFrontWheel (1, 12, 13); // Stepper4
int incomingByte = 0, c; // для входящих последовательных данных int wheelSpeed = 100;
void setup () {Serial.begin (9600); // открывает последовательный порт, устанавливает скорость передачи данных 9600 бит / с // Устанавливает начальные начальные значения для шаговых двигателей LeftFrontWheel.setMaxSpeed (600); LeftBackWheel.setMaxSpeed (600); RightFrontWheel.setMaxSpeed (600); RightBackWheel.setMaxSpeed (600);
}
void loop () {if (Serial.available ()> 0) {// читаем входящий байт: incomingByte = Serial.read ();
c = incomingByte; переключатель (c) {case 71: Serial.println («Я получил поворот вправо W»); rotateRight (); перерыв; case 65: Serial.println ("Я получил" Повернуть влево Q "); повернуть налево(); перерыв; случай 1: Serial.println («Я получил BK / LFT»); moveRightBackward (); перерыв; случай 2: Serial.println («Я получил BK»); двигаться назад(); перерыв; case 3: Serial.println («Я получил BK / RT»); moveRightBackward (); перерыв; case 4: Serial.println («Я получил LEFT»); moveSidewaysLeft ();
перерыв; случай 5: Serial.println («Я получил СТОП»); прекратить движение(); перерыв; case 6: Serial.println («Я получил RT»); moveSidewaysRight (); перерыв; case 7: Serial.println («Я получил FWD / LFT»); moveLeftForward (); перерыв; case 8: Serial.println («Я получил FWD»); двигаться вперед(); перерыв; case 9: Serial.println («Я получил FWD / RT»); moveRightForward (); перерыв; по умолчанию: Serial.print («Не команда»); Serial.println (incomingByte, DEC); перерыв; } } //двигаться назад(); moveRobot ();
}
void moveRobot () {LeftBackWheel.runSpeed (); LeftFrontWheel.runSpeed (); RightFrontWheel.runSpeed (); RightBackWheel.runSpeed (); }
void moveForward () {LeftFrontWheel.setSpeed (wheelSpeed); LeftBackWheel.setSpeed (wheelSpeed); RightFrontWheel.setSpeed (wheelSpeed); RightBackWheel.setSpeed (wheelSpeed); } void moveBackward () {LeftFrontWheel.setSpeed (-wheelSpeed); LeftBackWheel.setSpeed (-wheelSpeed); RightFrontWheel.setSpeed (-wheelSpeed); RightBackWheel.setSpeed (-wheelSpeed); } void moveSidewaysRight () {LeftFrontWheel.setSpeed (wheelSpeed); LeftBackWheel.setSpeed (-wheelSpeed); RightFrontWheel.setSpeed (-wheelSpeed); RightBackWheel.setSpeed (wheelSpeed); } void moveSidewaysLeft () {LeftFrontWheel.setSpeed (-wheelSpeed); LeftBackWheel.setSpeed (wheelSpeed); RightFrontWheel.setSpeed (wheelSpeed); RightBackWheel.setSpeed (-wheelSpeed); } void rotateLeft () {LeftFrontWheel.setSpeed (-wheelSpeed); LeftBackWheel.setSpeed (-wheelSpeed); RightFrontWheel.setSpeed (wheelSpeed); RightBackWheel.setSpeed (wheelSpeed); } void rotateRight () {LeftFrontWheel.setSpeed (wheelSpeed); LeftBackWheel.setSpeed (wheelSpeed); RightFrontWheel.setSpeed (-wheelSpeed); RightBackWheel.setSpeed (-wheelSpeed); } void moveRightForward () {LeftFrontWheel.setSpeed (wheelSpeed); LeftBackWheel.setSpeed (0); RightFrontWheel.setSpeed (0); RightBackWheel.setSpeed (wheelSpeed); } void moveRightBackward () {LeftFrontWheel.setSpeed (0); LeftBackWheel.setSpeed (-wheelSpeed); RightFrontWheel.setSpeed (-wheelSpeed); RightBackWheel.setSpeed (0); } void moveLeftForward () {LeftFrontWheel.setSpeed (0); LeftBackWheel.setSpeed (wheelSpeed); RightFrontWheel.setSpeed (wheelSpeed); RightBackWheel.setSpeed (0); } void moveLeftBackward () {LeftFrontWheel.setSpeed (-wheelSpeed); LeftBackWheel.setSpeed (0); RightFrontWheel.setSpeed (0); RightBackWheel.setSpeed (-wheelSpeed); } void stopMoving () {LeftFrontWheel.setSpeed (0); LeftBackWheel.setSpeed (0); RightFrontWheel.setSpeed (0); RightBackWheel.setSpeed (0); }
Шаг 4: Appinventor
Новое приложение appinventor с другой и более простой функциональностью (без записей)
Пожалуйста, отправьте сообщение, и я отправлю его вам - загрузка не удалась.
Заботиться.