Хто читав першу частину — той знає що машинка вже їздить. FlySky більше не пилиться на полиці, iBUS читається, танкове керування працює. Але оскільки ми збираємо справжнього хижака, то в нього як мінімум повинна бути клешня, тож зупинятись на просто машинці за рано треба рука (клешня).

Ідея проста: поки лівий джойстик керує рухом, правий керує маніпулятором. Красиво на папері. На практиці досить заплутана пригода.
Що є в господарстві
Розклав на столі все що знайшов:
- AS3103PG — двоосьовий цифровий серво з U-подібним кронштейном. Виглядає серйозно, коштує серйозно, поводиться… нестандартно
- MG995 × 3 — клони популярного серводвигуна, 13кг/см, метал всередині
- Купа кронштейнів
- Металева клешня з серво вже всередині
Чотири серво, чотири вільних піна на Pico (GP2-GP5), чотири вільних канали на пульті. Математика сходиться. Починаємо.
Перший сюрприз: AS3103PG виявився мотором
Підключаю AS3103PG, пишу простий тест:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
#include <Servo.h> Servo test; void setup() { test.attach(3, 500, 2500); test.write(0); delay(2000); test.write(90); delay(2000); test.write(180); } |
Серво радісно крутиться… і не зупиняється. Пишу write(90) — стоїть. Пишу write(0) — крутиться в один бік. Пишу write(180) — в інший.
Це 360° серво безперервного обертання. Не позиційне. Тримати кут воно не вміє взагалі — це по суті мотор з регулюванням швидкості. Щось нашаманив, зібрав, але виявилось що серво в цьому вузлі занадто слабкий.

Добре, перепризначаємо. AS3103PG іде на… поки нікуди. Відкладаємо.
Мораль: читай даташит тав прораховуй до покупки, а не після 😄, та я себе прощаю оскільки купував ту роборуку і сервоприводи років десять тому, що я міг тоді про таке знати.
Калібровка: у кожного серво свій характер
Стандартна бібліотека Servo.h дає імпульси 544-2400 мкс. MG995 клони цього не розуміють і видають лише ~90° замість 180°. До речі AS3103PG так і запустився
Рішення — вказати правильні імпульси вручну:
|
1 2 3 |
// Замість просто attach(пін) servo.attach(пін, 500, 2500); |
Але і це не одразу. Спочатку пробував різні значення:
|
1 2 3 4 |
attach(2, 600, 2400) → серво рухається але мало attach(2, 300, 2700) → крутиться безперервно як мотор! attach(2, 500, 2500) → працює на всіх! |
300 мкс — занадто малий імпульс, серво його не розуміє і сходить з розуму. Кажу собі запам’ятай мінімум 500 мкс, інакше серво вирішить що воно безперервне 😄. Перевіряв знов таки методом втика чи може просто перебором, ну якось так.
Ще один лайфхак при калібровці: завжди починай з write(0), а не write(90). Тоді бачиш реальний діапазон від початку.
Реальні межі кожного серво
Після годин тестування Serial Monitor:
| Серво | Пін | Мін | Макс | Функція |
|---|---|---|---|---|
| MG995 №1 | GP2 | 0° | 160° | стріла |
| AS3103PG №2 | GP3 | 0° | 160° | нахил |
| MG995 №3 | GP4 | 0° | 160° | рукоять |
| MG995 №4 | GP5 | 0° | 160° | клешня |
Клешня особлива: 0° = розкрита, 160° = закрита. Логічно.
Код: додаємо руку до машинки
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// Серво піни #define SERVO_STRILA 2 // стріла — CH3 правий ↑↓ #define SERVO_RUKOYAT 3 // нахил — CH1 правий ←→ #define SERVO_KOVSH 4 // рукоять — CH5 VrA #define SERVO_KLESHNYA 5 // клешня — CH6 VrB // В setup() — транспортне положення при старті strilaServo.attach(SERVO_STRILA, 500, 2500); // ... інші attach ... delay(100); strilaServo.write(0); // всі в нуль rukoyatServo.write(0); kovshServo.write(0); kleshnyaServo.write(0); // В loop() — керування int strila = map(channels[2], 1000, 2000, 0, 160); int rukoyat = map(channels[0], 1000, 2000, 0, 160); int kovsh = map(channels[4], 1000, 2000, 0, 160); int kleshnya = map(channels[5], 1000, 2000, 0, 160); |
Ліво/право джойстиком — нахил. Вперед/назад — стріла. Крутилки — рукоять і клешня. Все логічно і зручно.
Проблема яку не вирішив код
Стріла (MG995 №1) падає під власною вагою.
MG995 має 13кг/см моменту — теоретично більш ніж достатньо. Але є нюанс: кут кріплення серво невигідний, важіль короткий, і серво працює у слабкій частині діапазону. Теж саме з AS3103PG №2
Варіанти вирішення:
- Пружина — найдешевше, компенсує вагу механічно, (спробував резинку від рибальскої снасті, такий собі костиль)
- Сильніше серво — DS3218 (20кг/см) або JX PDI-6221MG
- Паралелограм — як у справжніх роборуках, вага розподіляється рівномірно
- Черв’ячна передача — тримає позицію без струму
Поки використовую резинку. Хотів би сказати, що це “Дешево і сердито”, аале поки просто дешево 😄

Що далі
Рука рухається, клешня хапає, машинка їздить. Але керувати наосліп — то половина задоволення. У наступній частині підключаємо FPV камеру і дивимось на світ очима Автобота.
Є питання або теж воювали з MG995? Пишіть в коментарях, разом розберемось!