Даний проект головним чином призначений для початківців радіоаматорів і дозволяє використовувати мікроконтролер arduino, засіб створення коду matlab і механічні компоненти, а також невелика кількість електронних елементів. Робот має механічну руку з 2 ступенями свободи і маніпулятором ручкою. У проекті використовується додаток інверсної кінематики і ефективний засіб виявлення контурів зображення.
Крок 1: Використовувані компоненти, інструменти та програмне забезпечення
1. Механічні компоненти
2. Електронні компоненти
- Модуль Arduino uno
- Друкована плата або макетна плата
- Джерело живлення (адаптер напругою 5В і струмом 2А)
- USB кабель
5. Програмне забезпечення
- Середовище розробки Arduino IDE
- Matlab (спільно з Arduino IO)
Всі вищевказані компоненти легко знайти в місцевому магазині радиокомпонентов.
Для проекту потрібно використовувати сервомотори з обертовим моментом 7кг / см. У разі використання макетної плати нам не буде потрібно паяльник і припой.
Крок 2: Механічна конструкція
На малюнку вище показана приблизна конструкція даного робота і етапи її складання. Це схоже на гру з конструктором, коли вам було 5-6 років. Тепер більш детально розглянемо покрокову інструкцію збірки робота.
- Просвердлите два отвори в кожній плоскою шайбі так, щоб відстань між цими отворами було однаковим для всіх шайб, як показано на малюнку вище.
- Тепер ми повинні виготовити жорстку опору для одного кінця. Просвердлите чотири отвори на відповідній відстані для гвинтів сервомотора і прикріпіть сервомотор до квадратної стійці. Ми використовуємо цю конструкцію для створення жорсткої опори, необхідної в процесі настройки.
- Підключіть дві алюмінієві пластини з конструктора до двох будь-яким шайб, як показано на малюнку так, щоб відстань між двома шайбами становило близько 20 см.
- Тепер прикріпіть одну шайбу до сервомотора з жорсткою опорою, і другу до іншого сервомоторами. Далі перед остаточним закріпленням шайб Вирівняйте сервомотори на кут повороту 90 градусів так, щоб сервомотор з жорсткою опорою розташовувався паралельно до пластин і вільний кінець сервомотора знаходився перпендикулярно до нього.
- Тепер візьміть найдовші пластини (довжиною 15 см) з конструктора і прикріпіть їх до нижнього кінця вільного кінця сервомотора паралельно йому.
- Потім прикріпіть коліщатка до нижньої частини механічної руки з ручкою, яку ми створили на 5 кроці, для створення надійного рівноваги і опори.
- Останній сервомотор необхідно прикріпити до кінцевої точки кроку 5 за допомогою клею feviquick або пістолета для склеювання, щоб створити жорстку конструкцію.
- Разом з пластиною відповідної довжини і прищіпкою прикріпіть ручку до сервомоторами так, щоб відстань від вільного кінця плоскою шайби і кінчика ручки становила близько 20 см.
При конструюванні робота необхідно зважати на вищезгадане відстань величиною 20 см і правильність проведення калібрування. Частина, що залишилася конструкції залежить від доступності інших компонентів і вашого бажання. Наприклад, замість алюмінієвих пластин з конструктора можна використовувати лінійки для створення механічної руки і т.д.
Крок 3: Електронні компоненти
На фото вище показана схема підключення використовуваних компонентів, які можна підключити як Шилд для arduino або використовувати для їх з'єднання макетну плату.
Крок 4: Програмний код
Це найбільш цікава і важлива частина даного проекту.
Для початку нам потрібно зображення, в якому потрібно визначити контури за допомогою ефективного засобу виявлення контурів зображення. Далі ми будемо малювати це зображення. Малювання зображення складається з двох етапів.
Етап 1: З початку ми знаходимо піксель, позначений як логічна одиниця, оскільки тепер наше зображення складається з логічних нулів і одиниць, і далі перевіряємо навколишні його локальні пікселі, чи є який-небудь з них також логічною одиницею. Потім ручка досягає цей піксель і попередня логічна одиниця видаляється. Функція повторюється рекурсивно і створює плавні лінії.
Етап 2: На другому етапі використовується інверсна кінематика для досягнення необхідного конкретного пікселя. Нам потрібно знати координати пікселя і обчислити відповідні кути для осей обертання; формули розрахунку показані на малюнку вище.
Вищевказане пояснення не використовується для виконання програмного коду, а служить для загального розуміння.
Тепер потрібно настройка Matlab і arduino для виконання програмного коду.
Спочатку встановіть пакет arduino IO package для matlab (всі інструкції вказані разом з пакетом програм).
Далі замініть файл arduino.m на долучення до цього ж ім'ям.
Завантажити й зберегти finaldraw.m і draw.m в директорії matlab.
Завантажте файл adioes.ino, який був завантажений раніше, в модуль arduino.
Подивіться, який з портів вашого arduino підключений, далі перейдіть до файлу finaldraw.m і змініть COM3 на ваш порт.
Як приклад було завантажено зображення Емми Уотсон, тому ви можете його використовувати в процесі тестування. Також ви можете змінити параметри функції виявлення контурів зображення відповідно до своїх вимог.
Тепер підключіть arduino до вашого ПК, включите джерело живлення і введіть finaldraw в командному рядку matlab. Насолоджуйтесь процесом малювання зображення.
Якщо у вас виникли будь-які проблеми, тоді ознайомитеся з кроком 5.
Крок 5: Опис програмного коду
Нижче описується алгоритм малювання зображення.
Принцип роботи алгоритму наступний: спочатку починається перевірка пікселів відконвертовано зображення і коли перебуває одиниця (1), яка позначається як білий піксель на зображенні вище, то кінчик ручки досягає цієї точки (процес досягнення цієї точки писаний раніше) і опускається вниз, далі перевіряються сусідні 8 пікселів, і якщо виявляється одиниця, то ручка досягає цієї точки без підняття кінчика вгору і видаляє попередній піксель, щоб уникнути повторень. Цей процес триває, поки в оточенні вже не виявляється логічна одиниця (це рекурсивна функція), тому ручка малює плавну лінію і видаляє її «логічну складову» одночасно. Далі відбувається отрисовка інших відгалужень ліній, які з'являються з намальованою лінії, оскільки йде перевірка кожного сусіднього пікселя. Даний алгоритм створює повне зображення.