- •«Томский государственный университет систем управления и радиоэлектроники» (тусур)
- •Комплекс лабораторных работ на базе модели руки inmoove
- •Содержание
- •1 Введение
- •4 Описание манипулятора верхней конечности InMoove
- •4.1 Модель предплечья
- •4.2 Модель запястья
- •5.2.1 Пластик акрилонитрилбутадиенстирол (абс)
- •5.2.2 Пластик полилактид (пла)
- •6.2 Выбор конструкции 3d – принтера
- •8 Сервоприводы для реализации движения пальцев рук
- •8.1 Сервопривод RobotBase
- •8.2 Сервопривод TowerPro sg-5010
- •9.2 Биометрическая антропоморфная рука
- •8.1.4 Теоретическая часть
- •8.1.4.1 Общие сведения
- •8.1.4.2 Принципиальная схема Arduino Uno
- •8.1.4.6 Связь
- •8.1.4.7 Программирование
- •8.1.4.8 Автоматическая (программная) перезагрузка
- •8.1.4.9 Токовая защита разъема usb
- •8.1.4.10 Физические характеристики
- •8.1.5 Среда разработки Arduino
- •8.1.5.1 Кнопки панели инструментов
- •8.1.5.2 Блокнот (Sketchbook)
- •8.1.5.3 Закладки, Файлы и Компиляция
- •8.1.5.4 Загрузка скетча в Arduino
- •8.1.5.5 Библиотеки
- •8.1.5.6 Мониторинг последовательной шины (Serial Monitor)
- •8.1.5.7 Настройки
- •8.1.6 Основы программирования Arduino
- •8.1.6.1 Синтаксис
- •8.1.6.2 Типы данных
- •8.1.6.3 Операторы
- •8.1.6.4 Функции
- •8.1.7.4 Загрузка примера “Blink” (мигание) на плату
- •8.1.7.5 Пояснения к коду примера “Blink”
- •8.2 Лабораторная работа № 2 Знакомство с Arduino leonardo
- •8.2.4 Теоретическая часть
- •8.2.4.1 Характеристики платы
- •8.2.4.2 Память
- •8.2.4.3 Входы и Выходы
- •8.2.4.4 Связь
- •8.2.4.5 Программирование
- •8.2.4.6 Автоматическая (программная) перезагрузка
- •8.2.4.7 Токовая защита разъема usb
- •8.2.4.8 Физические характеристики
- •8.2.5 Методические указания по выполнению работы
- •8.3 Лабораторная работа №3 Подключение сервомоторов к плате Arduino Uno. Реализация движения посредствам сервомоторов.
- •8.3.4.1 Сервоприводы, используемые для реализации движения пальцев рук
- •8.3.4.2 Подключение сервомоторов
- •7.3.4 Методические указания по выполнению лабораторной работы
- •7.3.4.1 Подсоедините сервомоторы к плате Arduino.
- •6 Заключение
- •Список используемых источников
- •Приложение а (Обязательное) Описание составных частей манипулятора верхней конечности InMoove распечатанных на 3d принтере
- •Приложение б
- •4.2 Характеристики
- •4.3 Принципиальная схема Arduino Uno
- •4.4 Питание
- •4.5 Память
- •4.6 Входы и Выходы
- •4.7 Связь
- •4.8 Программирование
- •4.9 Автоматическая (программная) перезагрузка
- •4.10 Токовая защита разъема usb
- •4.11 Физические характеристики
- •5 Среда разработки Arduino
- •5.1 Кнопки панели инструментов
- •5.2 Блокнот (Sketchbook)
- •5.3 Закладки, Файлы и Компиляция
- •5.4 Загрузка скетча в Arduino
- •5.5 Библиотеки
- •5.6 Мониторинг последовательной шины (Serial Monitor)
- •5.7 Настройки
- •6 Основы программирования Arduino
- •6.1 Синтаксис
- •6.2 Типы данных
- •6.3 Операторы
- •6.4 Функции
- •7.4 Загрузка примера “Blink” (мигание) на плату
- •7.5 Пояснения к коду примера “Blink”
- •7.6 Изменение частоты мигания светодиода
- •Лабораторная работа № 2
- •4.2 Память
- •4.3 Входы и Выходы
- •4.4 Связь
- •4.5 Программирование
- •4.6 Автоматическая (программная) перезагрузка
- •4.7 Токовая защита разъема usb
- •4.8 Физические характеристики
- •5 Методические указания по выполнению работы
- •Лабораторная работа №3 Подключение сервомоторов к плате Arduino Uno
- •Теоретическая часть
- •4.1 Сервоприводы, используемые для реализации движения пальцев рук
- •4.2 Подключение сервомоторов
- •Методические указания по выполнению лабораторной работы
8.3.4.2 Подключение сервомоторов
На рисунке 8.3.4.2 изображены схема включения сервомотора.
Рисунок 8.3.4.2 - схема включения сервомотора
На рисунке 8.3.4.3 показана схема подключения сервомотора к плате Arduino
Рисунок 8.3.4.3 - схема подключения сервомотора к плате Arduino
8.3.4.3 Программирование Arduino - библиотека Servo
Servo library – библиотека для работы с сервомоторами.
Сервомотор (Сервомашинка) – это мотор-редуктор, с обратной связью, благодаря которой можно повернуть выходной вал на строго определённый угол. Стандартные рулевые машинки, вертятся от 0 до 180 градусов (также есть сервоприводы постоянного вращения).
В Arduino IDE 0017 библиотека Servo поддерживает до 12 сервомоторов (до 48 на Mega), а в IDE 0016 и ранее работает только на 9 и 10 пинах.
Функции, которые предоставляет библиотека Servo:
а) Функции uint8_t attach(int pin); uint8_t attach(int pin, int min, int max); Синтаксис: servo.attach(pin); servo.attach(pin, min, max);
Параметры:
(servo – объект класса Servo).
pin – номер порта, к которому подключен сервомотор.
min (опционально) – ширина импульса, в микросекундах устанавливающая положение вала сервы в 0 градусов (по-умолчанию 544).
max (опционально) — ширина импульса, в микросекундах устанавливающая положение вала сервы в 180 градусов (по-умолчанию 2400).
Пример: #include <Servo.h> Servo myservo; void setup() { myservo.attach(9); } void loop() {}
б) Функция void write(int value);
Описание:
Устанавливается угол поворота сервомотора в градусах. В случае сервомотора постоянного вращения: 0 – вращение на полной скорости в одну сторону, 180 – вращение на полной скорости в другую сторону, 90 – нет вращения. Синтаксис:
servo.write(angle);
Параметры: angle – значение угла для поворота: от 0 до 180 Пример: #include <Servo.h> Servo myservo; void setup() { myservo.attach(9); myservo.write(90); // поворот сервопривода на 90 градусов } void loop() {}
в) Функция void writeMicroseconds(int value);
Описание:
Задаёт значение в микросекундах для длительности управляющего импульса. На стандартных сервомоторах это приведёт к повороту вала на определённый угол ( 1000 — положение полностью против часовой стрелки, 2000 — положение полностью по часовой стрелке, и 1500 — в середине).
Примечание:
Значения могут быть разными на сервомоторах разных производителей. Например, от 700 до 2300. Это можно определить экспериментально – увеличивая значения, пока серва продолжает поворачиваться. Обратите внимание, что попытки управления сервой вне её конечных точек (при этом появляется рычащий звук) приводит к увеличению потребления тока и такого следует избегать.
Синтаксис:
servo.writeMicroseconds(uS); Параметры:
uS – значение ширины импульса в микросекундах (int)
Пример:
#include <Servo.h> Servo myservo; void setup() { myservo.attach(9); myservo.writeMicroseconds(1500); // в среднее положение } void loop() {}
г) Функция int read();
Описание:
Считывает «текущий» угол поворота сервомашинки (значение, переданное в последнем вызове write()).
Синтаксис:
servo.read();
Возвращаемое значение:
Возвращает значение типа int — угол от 0 до 180 градусов. Примечание:
Аналогично есть функция readMicroseconds();
д) Функция bool attached();
Описание: Определяем – есть ли привязка к сервомоторам через pin. Синтаксис:
servo.attached();
Возвращаемое значение:
Возвращает true если есть привязка к pin-у и false – в противном случае.
е) Функция void detach();
Описание:
Отключение пина от библиотеки Servo. Если все переменные Servo отключены – пины 9 и 10 можно использовать для PWM-вывода через analogWrite().
Синтаксис:
servo.detach();
Возвращаемое значение: нет.
Рассмотрим пример работы библиотеки на примере Sweep, который поворачивает сервомотор от 0 до 180 градусов и обратно.
File – Examples — Servo — Sweep // Sweep #include <Servo.h> Servo myservo; // создаём объект для контроля сервомотора int pos = 0; // переменная для хранения позиции сервомотора void setup() { myservo.attach(9); // сервомотор подключен к 9-му пину } void loop() { for(pos = 0; pos < 180; pos += 1) // от 0 до 180 градусов { // с шагом в 1 градус myservo.write(pos); // delay(15); // ждём 15ms пока сервомотор займёт новое положение } for(pos = 180; pos>=1; pos-=1) // от 180 до 0 градусов { myservo.write(pos); delay(15); } }
Так же существуют и другие библиотеки:
SoftwareServo — удобна одинаковым названием функций с системной библиотекой Servo
— она не ограничивает количество серв 8-ю, но требует для работы вызова метода SoftwareServo::refresh().
Пример:
#include <SoftwareServo.h> SoftwareServo myservo; // объект сервомотор int potpin = 0; // пин для подключения потенциометра int val; // переменная для хранения значения с
аналогового входа
void setup() { myservo.attach(2); // сервомотор подключен ко 2-му пину } void loop() { val = analogRead(potpin); //считываем значение с потенциометра (величина от 0 до 1023) val = map(val, 0, 1023, 0, 179); // переводим в значение от 0 до 180) myservo.write(val); // устанавливаем угол сервомотора delay(15); // ждём поворота SoftwareServo::refresh(); }