- MPU6050 Датчик гіроскопічного та акселерометра
- Датчик гнучкості
- Підготовка 3D-друкованої роботизованої ARM:
- Необхідні компоненти:
- Кругова діаграма:
- Прикріплення MPU6050 та гнучкого датчика до рукавичок
- Програмування Arduino Nano для роботизованої руки
- Робота роботизованої роботизованої руки за допомогою Arduino
Роботозброя є одним із захоплюючих інженерних творінь, і завжди захоплююче спостерігати, як ці речі нахиляються і рухаються, щоб виконувати складні речі так само, як це робила б людська рука. Ці роботизовані зброї можна часто зустріти в галузях промисловості на складальній лінії, виконуючи інтенсивні механічні роботи, такі як зварювання, свердління, фарбування тощо. Нещодавно вдосконалені роботизовані зброї з високою точністю також розробляються для виконання складних хірургічних операцій. Раніше ми 3D надрукували робототехнічну кронштейн і створили робот-маніпулятор "Вибери і помісти сам" за допомогою мікроконтролера ARM7. Ми знову використовуватимемо ту саму 3D-друковану Робототехнічну руку, щоб зробити робот-ARM, керований жестами рук, використовуючи Arduino Nano, гіроскоп MPU6050 та гнучкий датчик.
Це робототехнічне робоче положення, що друкується в 3D, контролюється за допомогою рукавички, яка прикріплена до гіроскопа MPU6050 та гнучкого датчика. Датчик Flex використовується для керування сервоприводом захвата Robotic Arm, а MPU6050 - для переміщення роботизованого пристрою по осях X та Y. Якщо у вас немає принтера, ви також можете створити руку з простого картону, як ми створили для нашого проекту Arduino Robotic Arm. Для натхнення ви також можете звернутися до роботи із записом і відтворенням роботизованої руки, яку ми створили раніше за допомогою Arduino.
Перш ніж вдаватися в подробиці, спочатку давайте дізнаємося про датчик MPU6050 та датчик гнучкості.
MPU6050 Датчик гіроскопічного та акселерометра
MPU6050 заснований на технології мікромеханічних систем (MEMS). Цей датчик має 3-осьовий акселерометр, 3-осьовий гіроскоп та вбудований датчик температури. Він може бути використаний для вимірювання таких параметрів, як прискорення, швидкість, орієнтація, зміщення тощо. Ми вже з'єднували MPU6050 з Arduino та Raspberry pi, а також побудували кілька проектів, використовуючи його, наприклад: Самобалансуючий робот, Arduino Digital Protractor та Arduino Inclinometer.
Особливості датчика MPU6050:
- Зв'язок: протокол I2C з настроюваною адресою I2C
- Вхідне джерело живлення: 3-5В
- Вбудований 16-розрядний АЦП забезпечує високу точність
- Вбудований DMP забезпечує високу обчислювальну потужність
- Може використовуватися для взаємодії з іншими пристроями I2C, такими як магнітометр
- Вбудований датчик температури
Деталі виходу MPU6050:
PIN-код | Використання |
Vcc | Забезпечує живлення модуля, може становити від + 3В до + 5В. Зазвичай використовується + 5 В. |
Земля | Підключено до заземлення системи |
Серійний годинник (SCL) | Використовується для забезпечення тактового імпульсу для зв'язку I2C |
Серійні дані (SDA) | Використовується для передачі даних через I2C-зв'язок |
Допоміжні послідовні дані (XDA) | Може використовуватися для взаємодії інших модулів I2C з MPU6050 |
Допоміжний послідовний годинник (XCL) | Може використовуватися для взаємодії інших модулів I2C з MPU6050 |
AD0 | Якщо в одному MCU використовується більше одного MPU6050, то цей штифт можна використовувати для варіювання адреси |
Переривання (INT) | PIN-код переривання вказує, що дані доступні для читання MCU |
Датчик гнучкості
Датчики гнучкості - це не що інше, як змінний резистор. Опір гнучкого датчика змінюється при згинанні датчика. Зазвичай вони доступні у двох розмірах 2,2 дюйма та 4,5 дюйма.
Чому ми використовуємо гнучкі датчики в нашому проекті?
У цій робототехнічній руці, керованій жестом, використовується гнучкий датчик для управління захопленням роботизованої руки. Коли гнучкий датчик на ручній рукавиці зігнутий, сервомотор, прикріплений до захоплювача, обертається, і захоплювач відкривається.
Датчики Flex можуть бути корисними у багатьох додатках, і ми створили декілька проектів із використанням датчика Flex, таких як ігровий контролер, генератор тонів тощо.
Підготовка 3D-друкованої роботизованої ARM:
3D-друкована Робототехнічна Рука, використана в цьому посібнику, була виконана згідно з дизайном, наданим EEZYbotARM, який доступний у Thingiverse. Повна процедура виготовлення 3D-друкованої роботизованої руки та деталей складання з відеозаписом представлена у посиланні Thingiverse, про яке йдеться вище.
Вгорі - зображення моєї 3D-друкованої роботизованої руки після складання з 4 сервомоторами.
Необхідні компоненти:
- Arduino Nano
- Датчик гнучкості
- 10k резистор
- MPU6050
- Рукавички
- Підключення проводів
- Макет
Кругова діаграма:
На наступному зображенні показано схеми з'єднань роботизованої руки, керованої Arduino .
Схема з'єднання між MPU6050 та Arduino Nano:
MPU6050 |
Arduino Nano |
VCC |
+ 5В |
GND |
GND |
SDA |
A4 |
SCL |
A5 |
Схема з'єднання між серводвигунами та Arduino Nano:
Arduino Nano |
СЕРВОДВИГУН |
Блок живлення |
D2 |
Серво 1 помаранчевий (ШІМ-штифт) |
- |
D3 |
Серво 2 Апельсин (ШІМ-штифт) |
- |
D4 |
Серво 3 апельсин (ШІМ-штифт) |
- |
D5 |
Серво 4 Помаранчевий (ШІМ-штифт) |
- |
GND |
Сервопривід 1,2,3,4 Коричневий (GND Pin) |
GND |
- |
Сервопривід 1,2,3,4 Червоний (+ 5 В контакт) |
+ 5В |
Гнучкий датчик містить два штифта. Він не містить поляризованих клем. Отже, штифт один P1 підключений до аналогового виводу A0 Arduino Nano з підтягуючим резистором 10k, а штифт два P2 заземлений на Arduino.
Прикріплення MPU6050 та гнучкого датчика до рукавичок
Ми закріпили MPU6050 і Flex Sensor на рукавичку. Тут дротове підключення використовується для підключення рукавички та роботизованого важеля, але його можна зробити бездротовим, використовуючи радіочастотне з'єднання або з'єднання Bluetooth.
Після кожного підключення остаточне налаштування роботизованої руки, керованої жестами, виглядає як на зображенні нижче:
Програмування Arduino Nano для роботизованої руки
Як зазвичай, повний код разом із робочим відео наведено в кінці цього посібника. Тут пояснюється кілька важливих рядків коду.
1. По-перше, включіть необхідні бібліотечні файли. Бібліотека Wire.h використовується для зв'язку I2C між Arduino Nano та MPU6050 та servo.h для управління серводвигуном.
#включати
2. Далі оголошуються об'єкти для сервокласу класу. Оскільки ми використовуємо чотири сервомотори, створюються чотири об’єкти, такі як servo_1, servo_2, servo_3, servo_4.
Серво серво_1; Серво серво_2; Серво серво_3; Серво серво_4;
3. Далі оголошується адреса I2C MPU6050 та змінні, які будуть використовуватися.
const int MPU_addr = 0x68; // MPU6050 I2C Адреса int16_t ось_Х, вісь_У, вісь_З; int minVal = 265; int maxVal = 402; подвійний х; подвійний у; двічі г;
4. Далі в налаштуваннях порожнечі для послідовного зв'язку встановлюється швидкість передачі даних 9600.
Serial.begin (9600);
І встановлено зв'язок I2C між Arduino Nano та MPU6050:
Wire.begin (); // Ініціалізація дроту зв'язку I2C.beginTransmission (MPU_addr); // Початок спілкування з MPU6050 Wire.write (0x6B); // Пише для реєстрації 6B Wire.write (0); // Записує 0 у реєстр 6B для скидання Wire.endTransmission (true); // Завершує передачу I2C
Також для підключення сервомотора визначені чотири ШІМ-штирі.
servo_1.attach (2); // Вперед / назад_Мотор servo_2.attach (3); // Вгору / Вниз_Мотор servo_3.attach (4); // Gripper_Motor servo_4.attach (5); // Лівий / Правий_Мотор
5. Далі у функції void loop знову встановіть з'єднання I2C між MPU6050 та Arduino Nano, а потім починайте зчитувати дані X, Y, Z-Axis з реєстру MPU6050 та зберігайте їх у відповідних змінних.
Wire.beginTransmission (MPU_addr); Wire.write (0x3B); // Починаємо з реєстратора 0x3B Wire.endTransmission (false); Wire.requestFrom (MPU_addr, 14, true); // Читання 14 реєстрів axis_X = Wire.read () << 8-Wire.read (); ось_Y = Wire.read () << 8-Wire.read (); axis_Z = Wire.read () << 8-Wire.read ();
Після цього відобразіть мінімальне та максимальне значення даних осі від датчика MPU6050 у діапазоні від -90 до 90.
int xAng = карта (вісь_Х, мінімальне значення, максимальне значення, -90,90); int yAng = карта (вісь_Y, minVal, maxVal, -90,90); int zAng = карта (вісь_Z, minVal, maxVal, -90,90);
Потім використовуйте наступну формулу для обчислення значень x, y, z в перерахунку від 0 до 360.
x = RAD_TO_DEG * (atan2 (-yAng, -zAng) + PI); y = RAD_TO_DEG * (atan2 (-xAng, -zAng) + PI); z = RAD_TO_DEG * (atan2 (-yAng, -xAng) + PI);
Потім прочитайте аналогові вихідні дані датчика гнучкості на штифті A0 Arduino Nano і відповідно до цифрового значення датчика гнучкості встановіть кут сервоприводу захоплення. Отже, якщо дані датчика гнучкості перевищують 750, кут нахилу сервомотора захвату становить 0 градусів, а якщо менше 750, це 180 градусів.
int захват; int flex_sensorip = analogRead (A0); якщо (flex_sensorip> 750) { захоплювач = 0; } ще { захоплювач = 180; } servo_3.write (захоплювач);
Потім рух MPU6050 по осі X від 0 до 60 відображається в межах від 0 до 90 градусів для руху сервомотора вперед / назад, роботизованого важеля.
якщо (x> = 0 && x <= 60) { int mov1 = map (x, 0,60,0,90); Serial.print ("Рух у F / R ="); Serial.print (mov1); Serial.println ((char) 176); servo_1.write (mov1); }
І рух MPU6050 по осі X від 250 до 360 відображається в межах від 0 до 90 градусів для роботизованого важеля руху сервомотора вгору / вниз.
інакше if (x> = 300 && x <= 360) { int mov2 = map (x, 360 250,0,90); Serial.print ("Рух вгору / вниз ="); Serial.print (mov2); Serial.println ((char) 176); servo_2.write (mov2); }
Рух MPU6050 по осі Y від 0 до 60 відображається в межах від 90 до 180 градусів для лівого руху сервомотора в руці роботи.
if (y> = 0 && y <= 60) { int mov3 = map (y, 0,60,90,180); Serial.print ("Рух вліво ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
Рух MPU6050 по осі Y від 300 до 360 відображається в межах від 0 до 90 градусів для Правого руху робочого важеля сервомотора.
інакше якщо (y> = 300 && y <= 360) { int mov3 = map (y, 360 300,90,0); Serial.print ("Рух праворуч ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
Робота роботизованої роботизованої руки за допомогою Arduino
Нарешті, завантажте код на Arduino Nano і надіньте ручну рукавичку, встановлену з датчиком MPU6050 & Flex.
1. Тепер посуньте руку вниз, щоб перемістити роботизовану руку вперед, і рухайтеся вгору, щоб перемістити робот-руку вгору.
2. Потім нахиліть руку вліво або вправо, щоб повернути робототехнічну руку вліво або вправо.
3. Зігніть гнучкий кабель, прикріплений пальцем ручної рукавички, щоб відкрити захоплювач, а потім відпустіть його, щоб закрити.
Повна робота продемонстрована у відео, поданому нижче.