Управляемая жестами роботизированная рука на Arduino Nano

Роботизированные руки – это одно из самых потрясающих изобретений современности, они могут выполнять движения, аналогичные движениям руки человека. В настоящее время они широко используются в промышленности и выполняют там множество разнообразных механических работ: сварка, покраска, сверление, перемещение чего либо и т.д. Совсем недавно созданы роботизированные руки, которые могут выполнять сложные хирургические операции с высокой точностью.

Внешний вид управляемой жестами роботизированная рука на основе платы Arduino

Ранее на нашем сайте мы уже рассматривали проект простейшей роботизированной руки, сделанной из картона, и проект уже более совершенной роботизированной руки, напечатанной на 3D принтере. В этой же статье мы рассмотрим создание управляемой жестами роботизированной руки на основе платы Arduino Nano, гироскопа MPU6050 и датчика изгиба. Остов руки будет напечатан на 3D принтере.

Позиция рассматриваемой в этом проекте роботизированной руки будет управляться с помощью перчатки, на которой будут закреплены гироскоп MPU6050 и гибкий датчик. С помощью гибкого датчика будет управляться захват (gripper) роботизированной руки, а гироскоп MPU6050 будет управлять местоположением руки по осям X и Y. Если у вас нет 3D принтера, то простейший макет этой руки вы можете изготовить из картона как в проекте простейшей роботизированной руки.

Датчик MPU6050

Внешний вид датчика MPU6050

Датчик MPU6050 построен по технологии микроэлектромеханических систем (MEMS - Micro-Mechanical Systems) и имеет в своем составе 3-осевой акселерометр, 3-осевой гироскоп и датчик температуры. Он может измерять такие параметры как ускорение, скорость, направление (ориентация), смещение и т.д. Ранее на нашем сайте мы уже рассматривали его подключение к плате Arduino, а также рассматривали создание на его основе самобалансирующегося робота и измерителя уровня (уклономера).

Основные особенности датчика MPU6050:

  • связь по протоколу I2C с конфигурируемым (настраиваемым) адресом I2C;
  • питающее напряжение: 3-5V;
  • встроенный 16 битный АЦП (аналого-цифровой преобразователь);
  • возможность подключения по протоколу I2C к другим устройствам, например, магнитометру;
  • встроенный датчик температуры.

Назначение контактов (распиновка) датчика MPU6050 показано на следующем рисунке.

Назначение контактов (распиновка) датчика MPU6050

Распиновка MPU6050:
Vcc – контакт для подачи питающего напряжения постоянного тока;
GND – земля модуля;
SDA – это контакт используется для передачи данных между модулем mpu6050 и микроконтроллером;
SCL – вход синхронизации;
XDA – линия передачи данных (опциональная) по протоколу I2C для конфигурирования и считывания данных с внешних датчиков (не используется в нашем проекте);
XCL – вход синхронизации протокола I2C для конфигурирования и считывания данных с внешних датчиков (не используется в нашем проекте);
ADO – I2C Slave Address LSB (не используется в нашем проекте);
INT – контакт прерывания для индикации готовности данных.

Гибкий датчик (датчик изгиба, Flex Sensor)

Внешний вид датчика изгиба

Гибкий датчик, по сути, представляет собой резистор с изменяющимся сопротивлением – его сопротивление изменяется когда его сгибают. Обычно гибкие датчики изготавливаются двух типоразмеров: 2.2 и 4.5 дюйма. Зависимость сопротивления датчика от степени его изгиба показана на следующем рисунке.

Зависимость сопротивления датчика от степени его изгиба

В нашем проекте роботизированной руки датчик изгиба будет использоваться для управления ее захватом – сгибая и разгибая перчатку, мы будем сжимать и разжимать захват роботизированной руки.

Также на нашем сайте вы можете посмотреть все проекты, в которых был использован датчик изгиба.

Изготовление остова роботизированной руки

Используемый нами остов (макет) роботизированной руки разработан пользователем EEZYbotARM и доступен к скачиванию на Thingiverse. Детализированная инструкция по сборке данной руки и печати ее компонентов на 3D принтере также доступна по приведенной ссылке.

Внешний вид собранной нами по этой инструкции роботизированной руки с установленными 4 сервомоторами показан на следующем рисунке.

Внешний вид роботизированной руки с установленными 4 сервомоторами

Необходимые компоненты

  1. Плата Arduino Nano (купить на AliExpress).
  2. Гибкий датчик (Flex Sensor) (купить на AliExpress).
  3. Гироскоп MPU6050 (купить на AliExpress).
  4. Сервомотор SG90 (купить на AliExpress) или MG-995 (купить на AliExpress) – 4 шт.
  5. Резистор 10 кОм (купить на AliExpress).
  6. Перчатка на руку.
  7. Макетная плата.
  8. Соединительные провода.

Схема проекта

Схема управляемой жестами роботизированной руки на основе платы Arduino представлена на следующем рисунке.

Схема управляемой жестами роботизированной руки на основе платы Arduino

В следующей таблице представлены соединения между датчиком MPU6050 и платой Arduino Nano.

Датчик MPU6050 Плата Arduino Nano
VCC +5V
GND GND
SDA A4
SCL A5

В следующей таблице представлены соединения между сервомоторами и платой Arduino Nano.

Плата Arduino Nano Сервомоторы Адаптер питания
D2 Servo 1 Orange (PWM Pin) -
D3 Servo 2 Orange (PWM Pin) -
D4 Servo 3 Orange (PWM Pin) -
D5 Servo 4 Orange (PWM Pin) -
GND Servo 1,2,3,4 Brown (GND Pin) GND
- Servo 1,2,3,4 Red (+5V Pin) +5V

Гибкий датчик имеет 2 контакта – они не имеют полярности. Поэтому один контакт датчика подключен через подтягивающий резистор 10 кОм к контакту A0 платы Arduino, а другой – к контакту земли платы Arduino.

Сборка проекта роботизированной руки

Мы смонтировали гироскоп MPU6050 и гибкий датчик на перчатке для руки и соединили их проводами с роботизированной рукой, хотя, при желании, для этой цели можно использовать радиочастотное или Bluetooth соединение.

Окончательный вид проекта после сборки показан на следующем рисунке.

Окончательный вид роботизированной руки после сборки

Объяснение программы для Arduino

Полный код программы и видео, демонстрирующее работу проекта, приведены в конце статьи, здесь же мы кратко рассмотрим основные фрагменты кода программы.

Первым делом в программе нам необходимо подключить используемые библиотеки. Библиотека Wire.h используется для связи по протоколу I2C между платой Arduino Nano и датчиком MPU6050, а библиотека servo.h используется для работы с сервомоторами.

Далее объявим объекты для работы с нашими 4 серводвигателями - servo_1, servo_2, servo_3, servo_4.

Затем зададим адрес I2C для датчика MPU6050 и объявим необходимые переменные.

Далее в функции void setup мы инициализируем последовательную связь со скоростью 9600 бод.

Затем установим связь по протоколу I2C между Arduino Nano и датчиком MPU6050.

Далее прикрепим наши сервомоторы к соответствующим ШИМ контактам.

Затем, в функции void loop снова установим связь по протоколу I2C между Arduino Nano и датчиком MPU6050 и начнем считывать значения осей X, Y, Z с датчика MPU6050. Считанные даты будем сохранять в соответствующих переменных.

Затем конвертируем считанные значения осей в диапазон от -90 до 90.

Затем используем следующие формулы чтобы преобразовать значения осей x, y, z в диапазон от 0 до 360.

Затем считаем данные с гибкого датчика и в соответствии с ними установим угол поворота сервомотора, отвечающего за захват (gripper) нашей роботизированной руки. Соответственно, если значение с гибкого датчика будет больше 750, то угол поворота сервомотора, отвечающего за захват, будет равен 0, а если значение с гибкого датчика будет меньше 750, то угол поворота сервомотора будет равен 180 градусов.

После этого движения MPU6050 по оси X в диапазоне от 0 до 60 преобразуются в диапазон от 0 до 90 градусов – это значение используется для управления сервомотором, отвечающим за движение руки вперед/назад (Forward/Reverse).

А движения по оси X от 250 до 360 преобразуются в диапазон от 0 до 90 градусов и используются для управления сервомотором, отвечающим за движение руки вверх/вниз.

Движения MPU6050 по оси Y в диапазоне от 0 до 60 преобразуются в диапазон от 90 до 180 градусов и используются для управления сервомотором, отвечающим за движение руки влево.

Движения MPU6050 по оси Y в диапазоне от 300 до 360 преобразуются в диапазон от 0 до 90 градусов и используются для управления сервомотором, отвечающим за движение руки вправо.

Тестирование работы проекта

Тестирование работы роботизированной руки

После сборки конструкции проекта загрузите код программы в Arduino Nano и наденьте перчатку с укрепленными на ней датчиком MPU6050 и гибким датчиком на руку.

1. После этого опускайте руку вниз чтобы заставить роботизированную руку двигаться вперед, и поднимайте свою руку вверх чтобы заставить роботизированную руку двигаться назад.

2. Наклоняйте свою руку вправо или влево чтобы заставить роботизированную руку двигаться вправо или влево.

3. Сгинайте гибкий датчик, закрепленный на перчатке, чтобы открыть захват руки и распрямляйте кисть своей руки чтобы закрыть захват руки.

Более подробно все эти процессы можно посмотреть на видео, приведенном в конце статьи.

Исходный код программы (скетча)

Видео, демонстрирующее работу роботизированной руки

(Проголосуй первым!)
Загрузка...
54 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *