Автобот — ардуїновий Хижак. Частина 2: Роборука, або як я воював з сервоприводами

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

Ідея проста: поки лівий джойстик керує рухом, правий керує маніпулятором. Красиво на папері. На практиці досить заплутана пригода.

Що є в господарстві

Розклав на столі все що знайшов:

  • AS3103PG — двоосьовий цифровий серво з U-подібним кронштейном. Виглядає серйозно, коштує серйозно, поводиться... нестандартно
  • MG995 × 3 — клони популярного серводвигуна, 13кг/см, метал всередині
  • Купа кронштейнів
  • Металева клешня з серво вже всередині

Чотири серво, чотири вільних піна на Pico (GP2-GP5), чотири вільних канали на пульті. Математика сходиться. Починаємо.

Перший сюрприз: AS3103PG виявився мотором

Підключаю AS3103PG, пишу простий тест:

#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 так і запустився

Рішення — вказати правильні імпульси вручну:

// Замість просто attach(пін)
servo.attach(пін, 500, 2500);

Але і це не одразу. Спочатку пробував різні значення:

attach(2, 600, 2400) → серво рухається але мало

attach(2, 300, 2700) → крутиться безперервно як мотор!

attach(2, 500, 2500) → працює на всіх!

300 мкс — занадто малий імпульс, серво його не розуміє і сходить з розуму. Кажу собі запам’ятай мінімум 500 мкс, інакше серво вирішить що воно безперервне 😄. Перевіряв знов таки методом втика чи може просто перебором, ну якось так.

Ще один лайфхак при калібровці: завжди починай з write(0), а не write(90). Тоді бачиш реальний діапазон від початку.

Реальні межі кожного серво

Після годин тестування Serial Monitor:

СервоПінМінМаксФункція
MG995 № 1GP2160°стріла
AS3103PG № 2GP3160°нахил
MG995 № 3GP4160°рукоять
MG995 № 4GP5160°клешня

Клешня особлива: = розкрита, 160° = закрита. Логічно.

Код: додаємо руку до машинки

// Серво піни
#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

Варіанти вирішення:

  1. Пружина — найдешевше, компенсує вагу механічно, (спробував резинку від рибальскої снасті, такий собі костиль)
  2. Сильніше серво — DS3218 (20кг/см) або JX PDI-6221MG
  3. Паралелограм — як у справжніх роборуках, вага розподіляється рівномірно
  4. Черв’ячна передача — тримає позицію без струму

Поки використовую резинку. Хотів би сказати, що це «Дешево і сердито», аале поки просто дешево 😄

Є питання або теж воювали з MG995? Пишіть в коментарях, разом розберемось!

FPV або як я підключив «очі»

Машинка їздить. Рука хапає. Але навіщо це все тре було, якщо ти будеш ходити за ним? І як він буде полювати, оператор розлякає усіх Чужих. Рішення очевидне додати камеру. В одній з коробок знайшовся цілий FPV комплект який чекав свого часу.

Що знайшлось в ящику

  • JINJIEAN B19 — мініатюрна аналогова камера
  • TS5828L 40CH 5.8GHz 600mW — відеопередавач
  • EWRF 5.8G OTG Receiver — приймач для телефону

Це класичний аналоговий FPV комплект з дронів. Простий як двері: камера знімає, передавач передає по 5.8GHz, приймач на телефоні показує. Ніякого WiFi, ніякого Bluetooth, ніякого затримки.

Перший сюрприз: живлення

Дивлюсь на камеру — написано 5-20V. Відмінно, від павербанку 5V живитиму.

Дивлюсь на передавач TS5828L — написано 7-24V.

Ось тобі і павербанк 😄 До речі павербанк використовую власної збірки, розробив корпус в блендер, роздрукував і зібрав, вже три роки виручають під час блекаутів.

600mW передавач — це серйозна штука, не іграшка. Йому потрібне нормальне живлення. На щастя завалявся саморобний безперебійник на 12V ідеально для обох пристроїв. До речі використовував зарядний модуль DC 12V Charging Step Up Booster Module для 18650 Lithium Battery UPS

Безперебійник 12V
├── Камера JINJIEAN B19 (5-20V ✅)
└── Передавач TS5828L (7-24V ✅)

Один блок живлення на обох — зручно.

Другий сюрприз: роз’єм

Камера має JST PH 2.0 3-pin роз’єм. Такого в мене немає. Варіанти:

  1. Купити JST конектор (~$1 на Алі, чекати 3 тижні)
  2. Акуратно розібрати роз’єм голкою
  3. Просто відрізати і підпаяти дроти напряму

Обрав третій варіант. Різати — значить різати 😄

Червоний → +12V
Чорний → GND
Жовтий → Video → жовтий дріт TS5828L

OSD: бонус якого не очікував

На камері є окремий роз’єм OSD з кнопкою. OSD (On-Screen Display) — це накладання інформації прямо на відео

Кнопкою можна прямо під час польоту (або їзди) перемикати канали, налаштовувати потужність і навіть виводити напругу батареї. Дуже зручно щоб знати коли заряджати.

Підключення приймача на телефон

EWRF OTG Receiver підключається до телефону через OTG кабель. Встановлюєш додаток з Play Store і все. Що правда поки ту рекламу передивишся, ох... прийдеться мабуть і свій додаток написати.

Додаток автоматично сканує всі 40 каналів і знаходить сигнал. Налаштовувати нічого не треба — просто підключи і дивись.

Де розмістити камеру

Варіантів багато:

  • Спереду машинки — класика, бачиш куди їдеш
  • На стрілі — бачиш що хапаєш
  • На клешні — максимально близько до об’єкту

Обрав біля клешні — найцікавіше бачити що саме ти хапаєш. Камера маленька, кріпиться легко. Примотав зеленою ізолентою, тимчасово

Підсумок двох частин

За кілька вихідних з нуля:

✅ iBUS протокол — один дріт, шість каналів
✅ TB6612FNG — чотири мотори, танкове керування
✅ Чотири серво — маніпулятор з клешнею
✅ FPV камера — бачимо очима Автобота

Що далі, можливо:

  • Автопілот з HC-SR04 ультразвуковим датчиком
  • Уникнення перешкод
  • Може LiPo батарея замість безперебійника 😄
  • Придбаю потужні сервоприводи і зроблю нормальну функціональну робоклешню.

Дякую всім хто читав і коментував попередні частини. Навіть тим хто писав про ефект Дунінга-Крюгера — ви мотивуєте продовжувати 😄

Код проекту і схеми підключення — в коментарях.

P.S. Ще не осів пил від коліс Хижака мого проєкту на Pi Pico RP2040 Arm Cortex-M0+, яку я програмував на Arduino платформі, з радіокерованою машинкою на приймачі FS iA6B, а я вже дивився на нову плату на столі. Хижак їздить, працює, гештальт закрито. Далі готую серію постів «Це не Raspberry Pi. І саме тому це цікаво.» , де розповім вам про новий гештальт — власну IP-камеру, не купити готову, не взяти Raspberry Pi з туторіалом, а взяти за $15 embedded плату і камеру і зробити з того справжню IP камеру з дашбордом і іншими плюшками. ;)

Сподобалась стаття? Підписуйтесь на автора, щоб отримувати сповіщення про нові публікації на пошту.

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

👍ПодобаєтьсяСподобалось5
До обраногоВ обраному2
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

цікаво було почитати. Теж складаю робота. Буде виявляти порушників умовного периметру. Такий собі R&D.

О, то я теж такий думаю, але поки хочу розібратись з PX4-Autopilot, поки на етапі конекту з QGroundControl. А яка буде зброя?

Лазером комарів на льоту збивати, десь бачив такий на ютубах проект

А мені попалось відео, де шаріками такими маленькими від дитячого пітсолета, але тре друкувати на принтері

Триангуляція мікрофонами, і підбитий комар пікірує хоботом в ковьор, при прямому попаданні миттєвий відбиток на штукатурці

Думаю, економічніше зробити стрілялку сірниками (напр. з прищепки для білизни), в стандарній пачці Гомєльдрєва 60 шт.
А безпечніше збивати ультразувком.

В дитинстві колись таке робили, але де ті прищепки деревяні, тре совєцкоє качество. Ось до речі як робити www.google.com/...​bac0,vid:djD-ej6rYc4,st:0

щось таке epicentrk.ua/...​66-9f01-6187ac7686a3.html
витягнути звідти помпу.

помпа це й буде зброя) без корпусу значно менші габарити.

водою. це водяний пістолет. В доньки такий є. Все в ньому подобається. Навіть додаткові резервуари передбачені.

робив подібний сетап. У мене була проблема — машинка весь час уходила трохи в бік.
Як виявилося, одна сторона трохи повільніше за іншу крутилася і навіть колеса стартували пізніше при тому ж значенні ШІМ, що і інша сторона мала.
Намагався вирішити то позиціонуванням моторів (развал-сходження), потім додавав множник. Тоді більш-менш поїхала прямо.

Цікавий досвід, дякую що поділились. А розібрались, чому, то якась особливіть двигунів? А драйвер використовували для моторів?

так і не розібрався, все поки під столом лежить.
Це набір платформи з двигунами, ардуіно борда з платою драйверів на 4 двигуна — по факту там 2 драйвери де кожен відповідає за свою пару двигунів.
Keyestudio 4WD Multi BT Robot Car Kit V2.0 W знайшов назву.
Це дарували старшому сину.
Я туди орандж пай підключив, вивів камеру і по послідовному порту передавав команди на ардуіно.
А орандж пай по вайфаю отримував jsonи від аплікації на компі, що конвертувала положення дстіків джойстіка в json.

Цікавий проект, теж використовую Orange Pi, навть боард колись для нього зробив
res.cloudinary.com/...​/fbxb99prpcxxmdwbbsln.jpg

Якщо мається на увазі printed circuit board, то трохи можу, колись принтлаяут і хлорне залізо юзав, а тепер в китаї копійчане виробництво. Завтра вийде чергова стаття це не «Raspberry Pi. І саме тому це цікаво», там наче трохи про себе розкажу), якщо цікаво звісно

Підвищую тебе в рангу вище охоронця АТБ. :) Ростеш
На доу писав один, що йову вайті в айті вдалось через слюсара складальника дронів.

Якщо цікавий мій шлях, як я увійшов в айті можете ознайомитись ;) може понизиш знов до охоронця:) habr.com/ru/articles/646489

& lt; Servo.h & gt;

уважніше з копіпастою коду

Виправив в статті

Starter level

родився з паяльником і множив в умі матриці трансформації координат?

What I wanted to say with this message was not about devaluing work, but about what is good for a start.

Ладно, але це не американський форум. Для чого оце піжонство?

Далі готую серію постів «Це не Raspberry Pi. І саме тому це цікаво.» , де розповім вам про новий гештальт — власну IP-камеру, не купити готову, не взяти Raspberry Pi з туторіалом, а взяти за $15 embedded плату і камеру і зробити з того справжню IP камеру з дашбордом і іншими плюшками.

useless

Підписатись на коментарі