Этот учебник является частью: Сервомоторы
Здесь перечислены все видеоролики, связанные с сервомоторами. Ссылки на другие видео находятся ниже этой статьи.
Управление положением сервопривода с помощью жестов рук для Arduino
В этом уроке мы научимся управлять сервомотором с помощью жестов рук. Двигая рукой влево или вправо, вы можете заставить сервомотор реагировать соответствующим образом. Этот проект использует датчик жестов APDS-9960 для обнаружения движений рук и их преобразования в позиции сервомотора. Для подробного визуального объяснения обязательно посмотрите видео (в видео на 00:30).

Основные компоненты, которые мы будем использовать, включают сервомотор и датчик жестов APDS-9960. Сервомотор будет вращаться под определенными углами в зависимости от обнаруженных жестов, в то время как датчик APDS-9960 будет интерпретировать движения рук. Эта конфигурация позволяет интуитивно управлять сервомотором без физического контакта.
Объяснение аппаратного обеспечения
Сервомотор — это небольшое устройство, которое может вращаться на определенные углы, что делает его идеальным для приложений, требующих точного позиционирования. Обычно у него три провода: питание (красный), земля (черный) и сигнал (оранжевый). Сигнальный провод получает команды на перемещение сервомотора в заданный угол.
APDS-9960 — это универсальный датчик, который может обнаруживать жесты, окружающий свет и цвет. Он общается с Arduino через I2C и требует несколько контактов для питания и передачи данных. Датчик может обнаруживать движения, такие как вверх, вниз, влево и вправо, которые мы будем использовать для управления сервоприводом.
Технические характеристики
| Производитель | Бродком |
|---|---|
| Номер детали | APDS-9960 |
| Логическое/входное напряжение | 2.4 - 3.6 В |
| Напряжение питания | 2.4 - 3.6 В |
| Выходной ток (на канал) | 20 мА макс |
| Руководство по частоте ШИМ | Не применимо |
| Входные логические пороги | 0.3 В (низкое), 0.7 В (высокое) |
| Падение напряжения / RДС(включено)/ насыщение | Не применимо |
| Термические пределы | -40 до 85 °C |
| Пакет | 6,0 x 3,0 мм |
| Заметки / варианты | Датчик жестов, датчик RGB света |
- Убедитесь, что сервопривод питается от достаточного напряжения (обычно 5В).
- Подключите APDS-9960 к Arduino с использованием I2C-связи.
- Обратите внимание на вывод прерывания для сенсора жестов.
- Используйте подтягивающие резисторы, если это необходимо для стабильного обнаружения сигнала.
- Убедитесь, что вы откалибровали сенсор в различных условиях освещения для большей точности.

Чтобы подключить компоненты, начните с сервомотора. Подключите красный провод к 5V пину Arduino, черный провод к земле (GND), а оранжевый сигнальный провод к пину.9Это позволит Arduino управлять положением сервопривода.
Далее подключите датчик жестов APDS-9960. ПодключитеV_Nподключите к 3.3V Arduino, иGNDприжмите к земле. ЭтотINTпин должен быть подключен к пину2на Arduino, в то время какSDAиSCLштифты идут к штифтамA4иA5, соответственно. Эта конфигурация позволяет датчику эффективно взаимодействовать с Arduino.
Примеры кода и пошаговое руководство
В функции настройки мы инициализируем сервопривод и сенсор жестов. Строкаmyservo.attach(9);привязывает сервопривод к пину 9, который мы ранее подключили. Это позволяет сервоприводу получать команды от Arduino.

void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
// Set interrupt pin as input
pinMode(APDS9960_INT, INPUT);
// Initialize Serial port
Serial.begin(9600);
}Далее мы определяем, как система обрабатывает жесты в функции цикла. МетодhandleGesture();проверяет доступные жесты и выполняет соответствующие действия. Например, если обнаруженный жест - это влево, сервопривод переместится на 180 градусов.
void handleGesture() {
if ( apds.isGestureAvailable() ) {
switch ( apds.readGesture() ) {
case DIR_LEFT:
myservo.write(180); // added by RoboJax
break;
case DIR_RIGHT:
myservo.write(0); // added by RoboJax
break;
}
}
}Наконец, цикл постоянно проверяет жесты и обновляет положение сервопривода в зависимости от обнаруженного жеста. Убедитесь, что вы протестировали установку в различных условиях освещения, чтобы получить точное распознавание жестов.
Демонстрация / Что ожидать
Как только все будет подключено и код загружен, вы сможете управлять сервоприводом, двигая рукой влево или вправо. Сервопривод повернется на 180 градусов для жеста влево и вернется в 0 градусов для жеста вправо. Если жесты не распознаются, проверьте положение датчика и условия освещения вокруг (в видео на 05:30).
Главы
- Введение - 00:00
- Обзор оборудования - 01:30
- Инструкции по проводке - 03:00
- Объяснение кода - 04:30
- Демонстрация - 06:00
Этот учебник является частью: Сервомоторы
- Controlling a Servo with Push Buttons Using Arduino
- Control a Servo Motor with a Push Button: Move Servo and Return SPB-1
- Control a Servo Motor with a Push Button: Move Servo in One Direction SPB-2
- Controlling a Servo Motor with a Push Button: Move Servo While Button Is Pressed (SPB-3)
- Controlling a Servo with a Potentiometer Using Arduino
- Controlling a Servo with Potentiometer and LCD1602 using Arduino
- Управление сервомоторами с помощью инфракрасного пульта на Arduino
- Управление сервомотором Arduino с помощью потенциометра
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- How to Use Continuous 360° Servo with Arduino
- Код Arduino и видео для сервоконтроллера PCA9685 на 16 каналов с разрешением 12 бит V1
- Build an Arduino Servo Toggle Switch with a Push Button
++
/*
* Изменено для RoboJax А.Б.С. 9 мая 2017 года в Айджа, Онтарио, Канада. www.RoboJax.com
*
* Исходный источник:
* Датчик RGB и жестов APDS-9960
* Шон Химел @ SparkFun Electronics
* 30 мая 2014 года
* https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor
*
* Распространяется в том виде, в каком есть; гарантии не предоставляется.
*/
#include <Wire.h>
// добавлено RoboJax
#include <Servo.h>
#include <SparkFun_APDS9960.h>
Servo myservo; // создать объект сервопривода для управления сервоприводом // добавлено RoboJax
// Штифты
#define APDS9960_INT 2 // Должен быть вывод прерывания.
// Константы
// Глобальные переменные
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;
void setup() {
myservo.attach(9); // присоединяет сервопривод к объекту сервопривода на контакте 9
// Установите пин прерывания как вход.
pinMode(APDS9960_INT, INPUT);
// Инициализировать последовательный порт
Serial.begin(9600);
Serial.println();
Serial.println(F("--------------------------------"));
Serial.println(F("SparkFun APDS-9960 - GestureTest"));
Serial.println(F("--------------------------------"));
// Инициализируйте обработчик прерываний
attachInterrupt(0, interruptRoutine, FALLING);
// Инициализировать APDS-9960 (настроить I2C и начальные значения)
if ( apds.init() ) {
Serial.println(F("APDS-9960 initialization complete"));
} else {
Serial.println(F("Something went wrong during APDS-9960 init!"));
}
// Запустите двигатель сенсора жестов APDS-9960.
if ( apds.enableGestureSensor(true) ) {
Serial.println(F("Gesture sensor is now running"));
} else {
Serial.println(F("Something went wrong during gesture sensor init!"));
}
}
void loop() {
if( isr_flag == 1 ) {
detachInterrupt(0);
handleGesture();
isr_flag = 0;
attachInterrupt(0, interruptRoutine, FALLING);
}
}
void interruptRoutine() {
isr_flag = 1;
}
void handleGesture() {
if ( apds.isGestureAvailable() ) {
switch ( apds.readGesture() ) {
case DIR_UP:
Serial.println("UP");
break;
case DIR_DOWN:
Serial.println("DOWN");
break;
case DIR_LEFT:
Serial.println("LEFT");
myservo.write(180); // добавлено RoboJax
break;
case DIR_RIGHT:
Serial.println("RIGHT");
myservo.write(0); // добавлено RoboJax
break;
case DIR_NEAR:
Serial.println("NEAR");
break;
case DIR_FAR:
Serial.println("FAR");
break;
default:
Serial.println("NONE");
}
}
}
Ресурсы и ссылки
Ресурсов пока нет.
Файлы📁
Нет доступных файлов.