Este tutorial faz parte de: Servomotores
Todos os vídeos relacionados a servomotores que abordam o tema estão listados aqui. Os links para outros vídeos encontram-se abaixo deste artigo.
Controlando a Posição do Servo com Gestos de Mão para Arduino
Neste tutorial, aprenderemos como controlar um motor servo usando gestos das mãos. Ao mover sua mão para a esquerda ou para a direita, você pode fazer o motor servo responder de acordo. Este projeto utiliza o sensor de gestos APDS-9960 para detectar movimentos das mãos e traduzi-los em posições do servo. Para uma explicação visual detalhada, não deixe de conferir o vídeo (no vídeo em 00:30).

Os componentes principais que usaremos incluem um motor servo e o sensor de gestos APDS-9960. O motor servo irá girar para ângulos específicos com base nos gestos detectados, enquanto o sensor APDS-9960 interpretará os movimentos das mãos. Essa configuração permite uma maneira intuitiva de controlar o servo sem toque físico.
Hardware Explicado
O motor servo é um pequeno dispositivo que pode girar em ângulos específicos, tornando-o ideal para aplicações que requerem posicionamento preciso. Ele geralmente possui três fios: alimentação (vermelho), terra (preto) e sinal (laranja). O fio de sinal recebe comandos para mover o servo para um ângulo especificado.
O APDS-9960 é um sensor versátil que pode detectar gestos, luz ambiente e cor. Ele se comunica com o Arduino via I2C e requer alguns pinos para alimentação e transferência de dados. O sensor pode detectar movimentos como para cima, para baixo, para a esquerda e para a direita, que usaremos para controlar o servo.
Detalhes da Ficha Técnica
| Fabricante | Broadcom |
|---|---|
| Número da peça | APDS-9960 |
| Tensão de lógica/IO | 2,4 - 3,6 V |
| Tensão de alimentação | 2,4 - 3,6 V |
| Corrente de saída (por canal) | 20 mA máximo |
| Orientação sobre a frequência PWM | Não aplicável |
| Limiares de lógica de entrada | 0,3 V (baixo), 0,7 V (alto) |
| Queda de tensão / RDS(on)/ saturação | Não aplicável |
| Limites térmicos | -40 a 85 °C |
| Pacote | 6,0 x 3,0 mm |
| Notas / variantes | Detecção de gestos, detecção de luz RGB |
- Certifique-se de que o servo está alimentado com uma voltagem adequada (tipicamente 5V).
- Conecte o APDS-9960 ao Arduino usando comunicação I2C.
- Preste atenção ao pino de interrupção do sensor de gestos.
- Use resistores de pull-up se necessário para uma detecção de sinal estável.
- Certifique-se de calibrar o sensor em diferentes condições de iluminação para melhor precisão.

Para conectar os componentes, comece com o motor servo. Conecte o fio vermelho ao pino de 5V do Arduino, o fio preto ao terra (GND) e o fio de sinal laranja ao pino.9. Isso permitirá que o Arduino controle a posição do servo.
Em seguida, conecte o sensor de gestos APDS-9960. Conecte oV_Npino para o 3,3V do Arduino, e oGNDpino ao chão. OINTo pino deve ser conectado ao pino2no Arduino, enquanto oSDAeSCLpinos vão para pinosA4eA5, respectivamente. Esta configuração permite que o sensor se comunique efetivamente com o Arduino.
Exemplos de Código e Passo a Passo
Na função de configuração, inicializamos o servo e o sensor de gestos. A linhamyservo.attach(9);vincula o servo ao pino 9, que conectamos anteriormente. Isso permite que o servo receba comandos do 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);
}Em seguida, definimos como o sistema lida com gestos na função de loop. O métodohandleGesture();verifica gestos disponíveis e executa ações correspondentes. Por exemplo, se o gesto detectado for à esquerda, o servo se moverá para 180 graus.
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;
}
}
}Finalmente, o loop verifica continuamente os gestos e atualiza a posição do servo com base no gesto detectado. Certifique-se de testar a configuração em várias condições de iluminação para obter um reconhecimento de gestos preciso.
Demonstração / O que Esperar
Uma vez que tudo esteja conectado e o código esteja carregado, você deve ser capaz de controlar o servo movendo sua mão para a esquerda ou para a direita. O servo irá girar para 180 graus para um gesto à esquerda e retornar a 0 graus para um gesto à direita. Se os gestos não forem detectados, verifique a posição do sensor e as condições de luz ao redor (no vídeo às 05:30).
Capítulos
- Introdução - 00:00
- Visão Geral do Hardware - 01:30
- Instruções de Fiação - 03:00
- Explicação do Código - 04:30
- Demonstração - 06:00
Este tutorial é parte de: Servomotores
- Controlando um servo com botões de pressão usando o 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)
- Controlando um servo com um potenciômetro usando o Arduino
- Controlando um servo com um potenciômetro e um LCD1602 usando Arduino
- Controlando Motores Servo Usando um Controle Remoto Infravermelho com Arduino
- Controle de Motor Servo Arduino Usando um Potenciômetro
- 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
- Código Arduino e vídeo para o controlador de servos PCA9685 de 16 canais e 12 bits V1
- Build an Arduino Servo Toggle Switch with a Push Button
++
/*
* Modificado para RoboJax por A.B.S. em 09 de maio de 2017 em Ajax, Ontário, Canadá. www.RoboJax.com
*
* Fonte Original:
* Sensor RGB e de Gestos APDS-9960
* Shawn Hymel @ SparkFun Electronics
* 30 de maio de 2014
* https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor
*
* Distribuído como está; nenhuma garantia é dada.
*/
#include <Wire.h>
// adicionado por RoboJax
#include <Servo.h>
#include <SparkFun_APDS9960.h>
Servo myservo; // criar objeto servo para controlar um servo // adicionado por RoboJax
// Pinos
#define APDS9960_INT 2 // Precisa ser um pino de interrupção
// Constantes
// Variáveis Globais
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;
void setup() {
myservo.attach(9); // anexa o servo no pino 9 ao objeto servo
// Configure o pino de interrupção como entrada
pinMode(APDS9960_INT, INPUT);
// Inicialize a porta Serial
Serial.begin(9600);
Serial.println();
Serial.println(F("--------------------------------"));
Serial.println(F("SparkFun APDS-9960 - GestureTest"));
Serial.println(F("--------------------------------"));
// Inicializar a rotina de serviço de interrupção
attachInterrupt(0, interruptRoutine, FALLING);
// Inicializar APDS-9960 (configurar I2C e valores iniciais)
if ( apds.init() ) {
Serial.println(F("APDS-9960 initialization complete"));
} else {
Serial.println(F("Something went wrong during APDS-9960 init!"));
}
// Inicie o motor do sensor de gestos 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); // adicionado por RoboJax
break;
case DIR_RIGHT:
Serial.println("RIGHT");
myservo.write(0); // adicionado por RoboJax
break;
case DIR_NEAR:
Serial.println("NEAR");
break;
case DIR_FAR:
Serial.println("FAR");
break;
default:
Serial.println("NONE");
}
}
}
Recursos e referências
Ainda não há recursos.
Arquivos📁
Nenhum arquivo disponível.