- Датчик гироскопа и акселерометра MPU6050
- Гибкий датчик
- Подготовка 3D-печатного робота ARM:
- Необходимые компоненты:
- Принципиальная электрическая схема:
- Установка MPU6050 и датчика Flex на перчатки
- Программирование Arduino Nano для манипулятора-робота
- Работа роботизированной руки, управляемой жестами, с использованием Arduino
Роботизированные манипуляторы - одно из увлекательных инженерных творений, и всегда интересно наблюдать, как эти штуки наклоняются и поворачиваются, чтобы выполнять сложные задачи, как это сделала бы человеческая рука. Эти роботизированные манипуляторы обычно используются на сборочных конвейерах, выполняющих интенсивные механические работы, такие как сварка, сверление, окраска и т. Д., А также разрабатываются новейшие высокоточные роботизированные манипуляторы для выполнения сложных хирургических операций. Ранее мы напечатали на 3D-принтере роботизированный манипулятор и построили роботизированный манипулятор для самостоятельной сборки с использованием микроконтроллера ARM7. Мы снова будем использовать ту же роботизированную руку, напечатанную на 3D-принтере, чтобы создать роботизированную руку, управляемую жестами руки, с использованием Arduino Nano, гироскопа MPU6050 и гибкого датчика.
Положение этой роботизированной руки, напечатанной на 3D-принтере, контролируется с помощью перчаток, к которой прикреплены гироскоп MPU6050 и датчик изгиба. Датчик Flex используется для управления сервоприводом захвата робота-манипулятора, а MPU6050 используется для движения робота по осям X и Y. Если у вас нет принтера, вы также можете построить руку из простого картона, как мы сделали для нашего проекта Arduino Robotic Arm. Для вдохновения вы также можете обратиться к роботизированной руке для записи и воспроизведения, которую мы создали ранее с использованием Arduino.
Прежде чем вдаваться в подробности, сначала давайте узнаем о датчике MPU6050 и гибком датчике.
Датчик гироскопа и акселерометра MPU6050
MPU6050 основан на технологии микромеханических систем (MEMS). Этот датчик имеет 3-осевой акселерометр, 3-осевой гироскоп и встроенный датчик температуры. Его можно использовать для измерения таких параметров, как ускорение, скорость, ориентация, смещение и т. Д. Мы ранее связали MPU6050 с Arduino и Raspberry pi, а также построили несколько проектов с его использованием, таких как самобалансирующийся робот, цифровой транспортир Arduino и инклинометр Arduino.
Особенности датчика MPU6050:
- Связь: протокол I2C с настраиваемым адресом I2C
- Входной источник питания: 3-5 В
- Встроенный 16-битный АЦП обеспечивает высокую точность
- Встроенный DMP обеспечивает высокую вычислительную мощность
- Может использоваться для взаимодействия с другими устройствами I2C, такими как магнитометр
- Встроенный датчик температуры
Распиновка детали MPU6050:
Штырь | Применение |
Vcc | Обеспечивает питание модуля, может быть от + 3В до + 5В. Обычно используется + 5В |
Земля | Подключен к земле системы |
Последовательные часы (SCL) | Используется для обеспечения тактового импульса для связи I2C |
Последовательные данные (SDA) | Используется для передачи данных через соединение I2C |
Вспомогательные последовательные данные (XDA) | Может использоваться для сопряжения других модулей I2C с MPU6050 |
Вспомогательные последовательные часы (XCL) | Может использоваться для сопряжения других модулей I2C с MPU6050 |
AD0 | Если в одном MCU используется более одного MPU6050, то этот вывод можно использовать для изменения адреса. |
Прерывание (INT) | Вывод прерывания, чтобы указать, что данные доступны для чтения MCU |
Гибкий датчик
Flex Sensors - это не что иное, как переменный резистор. Сопротивление датчика изгиба изменяется, когда датчик изгибается. Они, как правило, доступны в двух размерах 2,2 дюйма и 4,5 дюйма.
Почему мы используем гибкие датчики в нашем проекте?
В этой роботизированной руке, управляемой жестами, датчик изгиба используется для управления захватом роботизированной руки. Когда датчик изгиба на ручной перчатке сгибается, серводвигатель, прикрепленный к захвату, вращается, и захват открывается.
Датчики Flex могут быть полезны во многих приложениях, и мы создали несколько проектов с использованием датчиков Flex, таких как игровой контроллер, генератор тона и т. Д.
Подготовка 3D-печатного робота ARM:
Роботизированная рука, напечатанная на 3D-принтере, использованная в этом уроке, была сделана в соответствии с дизайном, предоставленным EEZYbotARM, который доступен в Thingiverse. Полная процедура изготовления роботизированной руки, напечатанной на 3D-принтере, и детали сборки с видео представлены по ссылке на Thingiverse, которая указана выше.
Выше изображение моей 3D-печатной роботизированной руки после сборки с 4 сервомоторами.
Необходимые компоненты:
- Ардуино Нано
- Гибкий датчик
- Резистор 10 кОм
- MPU6050
- Перчатки
- Подключение проводов
- Макетная плата
Принципиальная электрическая схема:
На следующем изображении показаны соединения схемы для роботизированной руки на базе Arduino, управляемой жестами.
Цепное соединение между MPU6050 и Arduino Nano:
MPU6050 |
Ардуино Нано |
VCC |
+ 5В |
GND |
GND |
ПДД |
A4 |
SCL |
A5 |
Цепное соединение между серводвигателями и Arduino Nano:
Ардуино Нано |
СЕРВОДВИГАТЕЛЬ |
Зарядное устройство |
D2 |
Серво 1 оранжевый (вывод ШИМ) |
- |
D3 |
Серво 2 Апельсин (Вывод ШИМ) |
- |
D4 |
Серво 3 Апельсин (Вывод ШИМ) |
- |
D5 |
Серво 4 Апельсин (Вывод ШИМ) |
- |
GND |
Сервопривод 1,2,3,4 Коричневый (вывод GND) |
GND |
- |
Серво 1,2,3,4 Красный (Вывод +5 В) |
+ 5В |
Гибкий датчик содержит два штифта. Он не содержит поляризованных клемм. Итак, первый вывод P1 подключен к аналоговому выводу A0 Arduino Nano с подтягивающим резистором 10 кОм, а второй вывод P2 заземлен на Arduino.
Установка MPU6050 и датчика Flex на перчатки
Мы установили MPU6050 и датчик Flex на перчатку. Здесь проводное соединение используется для соединения перчатки и манипулятора, но его можно сделать беспроводным, используя радиочастотное соединение или соединение Bluetooth.
После каждого подключения окончательная настройка роботизированной руки, управляемой жестами, выглядит, как на изображении ниже:
Программирование Arduino Nano для манипулятора-робота
Как обычно, полный код вместе с рабочим видео дается в конце этого руководства. Здесь объясняются несколько важных строк кода.
1. Сначала включите необходимые файлы библиотеки. Библиотека Wire.h используется для связи I2C между Arduino Nano и MPU6050 и servo.h для управления серводвигателем.
#включают
2. Затем объявляются объекты для сервопривода класса. Поскольку мы используем четыре серводвигателя, создаются четыре объекта, такие как servo_1, servo_2, servo_3, servo_4.
Серво серво_1; Серво servo_2; Серво servo_3; Серво servo_4;
3. Затем объявляется I2C-адрес MPU6050 и используемые переменные.
const int MPU_addr = 0x68; // Адрес I2C MPU6050 int16_t axis_X, axis_Y, axis_Z; int minVal = 265; int maxVal = 402; двойной x; двойной y; дважды г;
4. Затем в настройках void устанавливается скорость передачи 9600 бод для последовательной связи.
Serial.begin (9600);
Между Arduino Nano и MPU6050 установлена связь I2C:
Wire.begin (); // Инициализация связи I2C Wire.beginTransmission (MPU_addr); // Запускаем связь с MPU6050 Wire.write (0x6B); // Записывает в регистр 6B Wire.write (0); // Записывает 0 в регистр 6B для сброса Wire.endTransmission (true); // Завершает передачу I2C
Кроме того, для подключения серводвигателя определены четыре контакта PWM.
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 из регистра MPU6050 и сохранять их в соответствующих переменных.
Wire.beginTransmission (MPU_addr); Wire.write (0x3B); // Начать с regsiter 0x3B Wire.endTransmission (false); Wire.requestFrom (MPU_addr, 14, истина); // Считываем 14 регистров axis_X = Wire.read () << 8-Wire.read (); axis_Y = Wire.read () << 8-Wire.read (); axis_Z = Wire.read () << 8-Wire.read ();
После этого сопоставьте минимальное и максимальное значение данных оси с датчика MPU6050 в диапазоне от -90 до 90.
int xAng = карта (axis_X, minVal, maxVal, -90,90); int yAng = карта (axis_Y, minVal, maxVal, -90,90); int zAng = карта (axis_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 gripper; int flex_sensorip = аналоговое чтение (A0); если (flex_sensorip> 750) { gripper = 0; } else { gripper = 180; } servo_3.write (захват);
Затем движение MPU6050 по оси X от 0 до 60 отображается в единицах от 0 до 90 градусов для прямого / обратного движения серводвигателя роботизированной руки.
если (x> = 0 && x <= 60) { int mov1 = map (x, 0,60,0,90); Serial.print («Движение вперед / назад =»); Serial.print (mov1); Serial.println ((char) 176); servo_1.write (mov1); }
А движение MPU6050 по оси X от 250 до 360 отображается в единицах от 0 до 90 градусов для движения робота-манипулятора ВВЕРХ / ВНИЗ серводвигателя.
иначе, если (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 градусов для левого движения серводвигателя роботизированной руки.
если (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. Согните гибкий кабель, прикрепленный пальцем перчатки, чтобы открыть захват, а затем отпустите его, чтобы закрыть.
Полная работа демонстрируется на видео ниже.