Ведроид-мобиль - робот на Arduino - Частина 2
GeekElectronics » Arduino від А до Я » Ведроїд-мобіль - робот на Arduino - Частина 2. Підключаємо Motor Shield

У попередній статті я описав процес складання мотоплатформи для майбутнього робота Arduino і поділився планами на майбутнє.
Основне завдання на сьогодні - змусити Ведроїд-мобіль рухатися та керувати сервоприводом.
Підключення Motor Shield до Arduino Mega 2560
Не будемо тягнути час і приступимо. Знімаємо верхню частину платформи та припаюємо дроти до всіх чотирьох двигунів. Дотримуйтесь полярності. У мене на всіх верхніх контактах синій провід, а на нижніх – жовтий.

Паяйте дуже акуратно, щоб не зіпсувати клеми на двигунах. В результаті має вийти щось подібне.

Відразу закріпимо сервопривід MG995 і акуратно покладемо дроти всередині мотоплатформи, щоб вони не чіплялися за колеса і нам більше не довелося знімати її верхню частину.

Потім встановлюємо корпус для елементів живлення та закріплюємо його. У мене поки що є блок на 4 елементи.
Якщо у вас є тумблер і непотрібний роз'єм, через який буде заряджатися акумулятор, то встановіть їх зараз. На жаль, у мене під рукою їх не було.
Відразу виводимо всі дроти через отвори нагору.

Тепер закріплюємо зовні на верхній частині платформи Arduino Mega 2560 і вставляємо наш Motor Drive Shield 2x L293D. Встановлюємо верхню частину платформи на місце та закріплюємо її болтами.
Тепер настав час підключити двигуни до MotorShield.
Передні двигуни я підключив до клем M3 та M4. M4 – передній правий двигун, M3 – передній лівий. Arduino при кріпленні до верхньої кришки стала навпаки, тому вийшло таке зрушення.

M2 – задній правий двигун. M1 - задній лівий, Дотримуйтесь полярності підключення електродвигунів

Підключаємо сервопривід MG995.

Провід живлення сервоприводу довелося відкусити тому, що вбудований Arduino стабілізатор напруги не видавав достатній струм для його роботи. В результаті з'явився глюк у роботі.
Проблему вирішив шляхом підключення проводу живлення сервоприводу безпосередньо до джерела живлення.
Підключаємо дроти живлення до контактів на Motor Shield. На плюсову клему також підключаємо провід від сервоприводу

Прошу вас одразу звернути увагу на перемичку. Якщо її прибрати, то харчування на контролер Arduino доведеться подавати окремо. На малюнку наведено схему, що пояснює електричні з'єднання шин живлення контролера Arduino і модуля Motor Shield.

Милуємось нашим шедевром.

На цьому з апаратною частиною на сьогодні ми закінчуємо та переходимо до написання тестового скетчу для робота.
Зайнятість портів Arduino при підключеному Motor Shield
Після підключення Motor Shield до Arduino деякі порти нам більше не доступні для роботи, оскільки їх використовує Motor Shield.

Детальніше про це розписано на сайті Arduino Shield List.
Приклад скетчу для роботи Arduino з Motor Shield реалізує керування чотирма двигунами та одним сервоприводом
Основне завдання - розібратися з керуванням чотирма двигунами та обертанням одного сервоприводу.
Відразу давайте обговоримо початковийфункціонал нашого тестового скетчу.
Пропоную реалізувати такий алгоритм:
- Рух вперед протягом 5 секунд з поворотом серви на кут 90 градусів
- Поворот праворуч протягом 2 секунд з поворотом серви на кут 180 градусів
- Рух назад на протязі 5 секунд із поворотом серви на кут 90 градусів
- Поворот ліворуч протягом 2 секунд з поворотом серви на кут 0 градусів
- Зупинка двигунів на 3 секунди з поворотом серви на кут 90 градусів
Завдання поставлене – можна приступати.
Для початку нам потрібно встановити бібліотеку AFMotor.
afmotor.rar (9,2 KiB, 2789 hits)
Завантажте архів і розпакуйте його вміст в \arduino-1.XX\libraries\
//Створюємо об'єкти для двигунів AF_DCMotor motor1(1); //канал М1 на Motor Shield - задній лівий AF_DCMotor motor2(2); //канал М2 на Motor Shield - задній правий AF_DCMotor motor3(3); //канал М3 на Motor Shield - передній лівий AF_DCMotor motor4(4); //канал М4 на Motor Shield - передній правий
// Створюємо об'єкт для сервоприводу
void setup() // Вибираємо пін до якого підключений сервопривід myservo.attach (9); // або 10, якщо встромили в крайній роз'єм // Повертаємо сервопривід у положення 0 градусів при кожному включенні myservo.write(0); // Пауза 5 секунд delay(5000); >
void loop() //Встановлюємо швидкість 100% (0-255) motor1.setSpeed(255); motor2.setSpeed(255); motor3.setSpeed(255); motor4.setSpeed(255);
// Задаємо напрямок рух // FORWARD - вперед // BACKWARD - назад // RELEASE - стоп
// Рух вперед протягом 5 секунд з поворотом серви на кут 90 градусів motor1.run (FORWARD); motor2.run(FORWARD); motor3.run(FORWARD); motor4.run(FORWARD); myservo.write(90); // Поворот серви на кут 90 градусів delay (5000);
// Поворот праворуч протягом 2 секунд із поворотом серви на кут 180 градусів
motor1.run (FORWARD); motor2.run(BACKWARD); motor3.run(FORWARD); motor4.run(BACKWARD); myservo.write(180); // Поворот серви на кут 180 градусів delay (2000);
/ / Рух назад протягом 5 секунд з поворотом серви на кут 90 градусів motor1.run (BACKWARD); motor2.run(BACKWARD); motor3.run(BACKWARD); motor4.run(BACKWARD); myservo.write(90); // Поворот серви на кут 90 градусів delay (5000);
//Поворот ліворуч протягом 2 секунд із поворотом серви на кут 0 градусів
motor1.run(BACKWARD); motor2.run(FORWARD); motor3.run(BACKWARD); motor4.run(FORWARD);
myservo.write(0); // Поворот серви на кут 0 градусів delay (2000);
// Зупинка двигунів на 3 секунди з поворотом серви на кут 90 градусів motor1.run (RELEASE); motor2.run(RELEASE); motor3.run(RELEASE); motor4.run(RELEASE); myservo.write(90); // Поворот серви на кут 90 градусів delay (3000); >