Овој туторијал е дел од: Серво мотори
Сите видеа поврзани со серво мотори што се поврзани со нив се наведени овде. Линкови до други видеа се под оваа статија.
Контролирање на позицијата на серво со рачни гестови за Arduino
Во оваа туторијал, ќе научиме како да контролираме серво мотор со помош на рачни гестови. Со поместување на раката лево или десно, можете да направите серво моторот да реагира соодветно. Овој проект користи сензор за гестови APDS-9960 за да открие движења на раката и да ги преведе во позиции на серво. За детално визуелно објаснување, бидете сигурни да го проверите видеото на (во видеото на 00:30).

Основните компоненти што ќе ги користиме вклучуваат серво мотор и сензор за жестови APDS-9960. Серво моторот ќе се ротира на специфични агли врз основа на детектираните жестови, додека сензорот APDS-9960 ќе ги интерпретира движењата на раката. Оваа конфигурација овозможува интуитивен начин за контрола на серво моторот без физички допир.
Објаснување на хардверот
Сервомоторот е мал уред кој може да се ротира на специфични агли, што го прави идеален за апликации кои бараат прецизно позиционирање. Обично има три жици: напојување (црвена), земја (црна) и сигнал (портокалова). Жицата за сигнал прима команди за поместување на сервомоторот на одреден агол.
APDS-9960 е разновиден сензор кој може да открива жестови, амбиентално светло и боја. Тој комуницира со Arduino преку I2C и бара неколку пинови за напојување и пренос на податоци. Сензорот може да открива движења како нагоре, надолу, лево и десно, кои ќе ги користиме за контрола на сервото.
Технички лист детали
| Производител | Бродком |
|---|---|
| Број на делови | APDS-9960 |
| Логика/IO напон | 2.4 - 3.6 V |
| Напон на напојување | 2.4 - 3.6 V |
| Излезна струја (по канал) | 20 mA макс |
| Упатство за PWM фреквенција | Не е применливо. |
| Влезни логички прагови | 0.3 V (ниско), 0.7 V (високо) |
| Напонска разлика / RDS(on)/ заситеност | Не е применливо. |
| Термални ограничувања | -40 до 85 °C |
| Пакет | 6.0 x 3.0 мм |
| Забелешки / варијанти | Сензор за гестови, сензор за RGB светлина |
- Осигурајте дека сервото е напојувано со соодветно напон (обично 5V).
- Поврзете го APDS-9960 со Arduino користејќи I2C комуникација.
- Внимавајте на прекинската пин за сензорот за гестови.
- Користете отпорници за повлекување ако е потребно за стабилно откривање на сигналот.
- Обезбедете да го калибрирате сензорот во различни услови на осветлување за подобра точност.

За да ги поврзете компонентите, започнете со серво моторот. Поврзете ја црвената жица на 5V пинот на Arduino, црната жица на земјата (GND), а портокаловата сигнална жица на пинот.9. Ова ќе му овозможи на Ардуиното да ја контролира позицијата на серво.
Следно, поврзете го сензорот за жестови APDS-9960. Поврзете гоV_Nпин до Arduino-овите 3.3V, и GNDпин до земја. ТheINTпинот треба да биде поврзан со пинот2на Arduino, додека SDAиSCLпиновите одат на пиновитеA4иA5, соодветно. Оваа конфигурација му овозможува на сензорот да комуницира ефективно со Arduino.
Примери на код и водичка
Во функцијата за поставување, го иницираме серво и сензорот за гестови. Линијатаmyservo.attach(9);го поврзува серво на пин 9, кој претходно го поврзавме. Ова му овозможува на серво да прима команди од Ардуино.

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
Овој туторијал е дел од: Серво мотори
- Контролирање на серво со копчиња за притискање користејќи 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)
- Контролирање на серво со потенциометар користејќи Arduino
- Контролирање на серво со потенциометар и LCD1602 користејќи Arduino
- Контролирање на серво мотори со помош на инфрацрвен далечински управувач со Arduino
- Контрола на сервомотор со Arduino користејќи потенциометар
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- Како да се користи континуиран 360° серво со Arduino
- Ардуино код и видео за PCA9685 16-канален 12-битен серво контролер V1
- Направете Arduino Servo прекинувач со копче
++
/****************************************************************
Modified for RoboJax by A.B.S. on May 09, 2017
in Ajax, Ontario, Canada. www.RoboJax.com
Original Source:
APDS-9960 RGB and Gesture Sensor
Shawn Hymel @ SparkFun Electronics
May 30, 2014
https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor
Distributed as-is; no warranty is given.
****************************************************************/
#include <Wire.h>
// added by RoboJax
#include <Servo.h>
#include <SparkFun_APDS9960.h>
Servo myservo; // create servo object to control a servo // added by RoboJax
// Pins
#define APDS9960_INT 2 // Needs to be an interrupt pin
// Constants
// Global Variables
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;
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);
Serial.println();
Serial.println(F("--------------------------------"));
Serial.println(F("SparkFun APDS-9960 - GestureTest"));
Serial.println(F("--------------------------------"));
// Initialize interrupt service routine
attachInterrupt(0, interruptRoutine, FALLING);
// Initialize APDS-9960 (configure I2C and initial values)
if ( apds.init() ) {
Serial.println(F("APDS-9960 initialization complete"));
} else {
Serial.println(F("Something went wrong during APDS-9960 init!"));
}
// Start running the APDS-9960 gesture sensor engine
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); // added by RoboJax
break;
case DIR_RIGHT:
Serial.println("RIGHT");
myservo.write(0); // added by RoboJax
break;
case DIR_NEAR:
Serial.println("NEAR");
break;
case DIR_FAR:
Serial.println("FAR");
break;
default:
Serial.println("NONE");
}
}
}
Ресурси и референци
Сè уште нема ресурси.
Датотеки📁
Нема достапни датотеки.