This tutorial is part of: Servo Motors
All videos related to servo motors that are related, listed here. Links to other videos are below this article.
Arduino үшін қол қимылдарымен сервоприводтың орнын басқару
Бұл оқулықта біз қол қимылдарын пайдаланып, сервомоторды қалай басқаруды үйренеміз. Қолыңызды солға немесе оңға қозғау арқылы сервомотордың сәйкесінше жауап беруін қамтамасыз ете аласыз. Бұл жоба қол қозғалыстарын анықтау және оларды сервопозицияларға аудару үшін APDS-9960 қимыл сенсорын пайдаланады. Толық визуалды түсініктеме үшін (00:30-дағы видеода) видеоны қарауды ұмытпаңыз.

Біз пайдаланатын негізгі компоненттерге сервомотор мен APDS-9960 жест сенсоры кіреді. Сервомотор анықталған жесттерге негізделген нақты бұрыштарға айналады, ал APDS-9960 сенсоры қол қозғалыстарын түсіндіреді. Бұл конфигурация физикалық байланыссыз сервомоторды интуитивті түрде басқаруға мүмкіндік береді.
Аппараттық құралдар түсіндірілді
Серво мотор - бұл нақты бұрыштарға айналуға қабілетті шағын құрылғы, оны дәл позициялауды талап ететін қолданбалар үшін тамаша етеді. Әдетте, оның үш сымы болады: қуат (қызыл), жер (қара) және сигнал (сары). Сигнал сымы сервоны белгіленген бұрышқа жылжыту үшін командаларды алады.
APDS-9960 - бұл қимылдарды, қоршаған жарықты және түсті анықтай алатын әмбебап сенсор. Ол Arduino-мен I2C арқылы байланысады және қуат пен деректерді беру үшін бірнеше пинді қажет етеді. Сенсор жоғары, төмен, солға және оңға сияқты қозғалыстарды анықтай алады, оларды сервоны басқару үшін пайдаланамыз.
Техникалық сипаттама мәліметтері
| Өндіруші | Broadcom |
|---|---|
| Бөлшек нөмірі | APDS-9960 |
| Логика/Кернеу вх. | 2.4 - 3.6 В |
| Жабдықтау кернеуі | 2.4 - 3.6 В |
| Шығыс токы (арна бойынша) | 20 мА макс |
| PWM жиілігі бойынша нұсқаулық | Қолданылмайды |
| Кіріс логика шектер | 0.3 В (төмен), 0.7 В (жоғары) |
| Кернеу түсуі / RDS(қосулы)/ қанығу | Қолданылмайды |
| Жылу шектеулері | -40-тан 85 °C-қа дейін |
| Пакет | 6.0 x 3.0 мм |
| Ескертпелер / нұсқалар | Иллюзияны сезу, RGB жарықты сезу |
- Сервоның жеткілікті кернеумен (әдетте 5В) қуатталғанына көз жеткізіңіз.
- APDS-9960-ды Arduino-ға I2C байланысы арқылы қосыңыз.
- Илгерткіш сенсоры үшін үзіліс пиніне назар аударыңыз.
- Қажет болса, тұрақты сигналды анықтау үшін тарту резисторларын пайдаланыңыз.
- Сенсорды әртүрлі жарық жағдайларында калибрлеуді қамтамасыз етіңіз, бұл дәлдікті арттырады.

Компоненттерді қосу үшін, серво мотордан бастаңыз. Қызыл сымды Arduino-ның 5V пиніне, қара сымды жерге (GND) және қызғылт сары сигнал сымын пинге қосыңыз.9Бұл Ардуиноға сервомотордың орнын басқаруға мүмкіндік береді.
Келесі, APDS-9960 жест сенсорын сыммен қосыңыз. ҚосыңызV_NArduino-ның 3.3V-ына пин, жәнеGNDжерге бекітіңіз. БұлINTпин қосылуы тиіс пинге2Arduino-да, ал...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
This tutorial is part of: Servo Motors
- 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
- Controlling Servo Motors Using an Infrared Remote with 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 Code and Video for PCA9685 16-Channel 12-Bit Servo Controller V1
- Build an Arduino Servo Toggle Switch with a Push Button
++
/****************************************************************
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");
}
}
}
Ресурстар мен сілтемелер
Әлі ресурстар жоқ.
Файлдар📁
Файлдар жоқ.