This tutorial is part of: Серво мотори
Сите видеа поврзани со серво мотори што се поврзани со нив се наведени овде. Линкови до други видеа се под оваа статија.
Како да се користи континуиран 360° серво со Arduino
Во ова упатство, ќе научиме како да контролираме континуиран 360° серво користејќи Arduino. За разлика од стандардните сервоси, континуираните сервоси можат да ротираат неограничено во било кој правец, што овозможува разноврсни апликации. Сепак, контролирането на нивната позиција бара разбирање на командите испратени до нив и малку експериментирање за да се најдат правилните вредности за запирање.
Ќе развиваме програма која ни овозможува да испраќаме команди преку Серискиот Монитор за да го ротираме сервото лево, десно или да го запреме. Кодот ќе вклучува потребната логика за интерпретација на ASCII вредностите на командите што ги внесуваме. За појаснување на процесот на кодирање, бидете сигурни да го проверите видеото на (во видеото на 12:30).
Објаснување на хардверот
За да се реализира овој проект, ќе ви биде потребен континуиран 360° серво, Arduino плоча и напојување способно да обезбеди доволно струја (најмалку 500mA). Серво-то прима контролни сигнали од Arduino, кој користи модулација на ширината на пулсот (PWM) за да одреди насоката и брзината на ротација.
Сервомоторот сам по себе има три жици: напојување, земја и контрола. Жицата за напојување се поврзува со напојувањето, жицата за земја се поврзува и со напојувањето и со земјата на Ардуино, а жицата за контрола се поврзува со одреден пин на Ардуино за пренос на сигнал.
Технички лист детали
| Производител | Општo |
|---|---|
| Број на делови | Континуирана 360° Серво |
| Логика/IO напон | 5 V |
| Напон на напојување | 4.8-6 V |
| Излезна струја (по канал) | 500 мА |
| Пиков тековен (по канал) | 1 А макс |
| Упатство за PWM фреквенција | 50 Hz |
| Влезни логички прагови | Високо: >2.5 V, Ниско: <0.8 V |
| Напонска пад / RDS(on)/ заситеност | - |
| Термални ограничувања | - |
| Пакет | Стандардно куќиште за сервомотор |
| Забелешки / варијанти | Достапно во различни големини |
- Осигурајте заедничка основа помеѓу Arduino и напојувањето.
- Користете надворешен напојувач за сервото за да избегнете преоптоварување на Ардуиното.
- Експериментирајте со вредности за запирање за да најдете најдобра перформанса за вашиот серво.
- Следете ја температурата на серво механизмот за време на работа за да се спречи прегревање.
- Користете PWM сигнал за контрола на брзината и насоката на серво.
Инструкции за поврзување
За да го поврзете вашиот континуиран 360° серво на Arduino, започнете со поврзување на жицата за напојување на серво на надворешен напојувач кој обезбедува 5V. Жицата за земја на серво треба да биде поврзана на пинот за земја (GND) на Arduino, осигурувајќи дека напојувачот и Arduino споделуваат заедничка земја. Контролната жица на серво ќе оди на пин 9 на Arduino, каде што ќе биде испратен PWM сигналот.
Двојно проверете дали вашите врски се безбедни, бидејќи лабавите врски можат да доведат до непредвидливо однесување на серво. Ако вашето серво е од типот што може да се напојува директно од Arduino, можете да ја поврзете напојувачката жица на 5V пинот на Arduino, но осигурајте се дека вкупниот тек не ја надминува количината што Arduino може да ја обезбеди.
Примери на код и водич
Следниот извлек покажува како да се постави серво и да се читаат команди од Серискиот Монитор:
#include
Servo myservo; // create servo object to control a servo
int incomingByte = 0; // for incoming serial data
void setup() {
Serial.begin(9600);
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
Во овој коден фрагмент, вклучуваме библиотека Servo и создававме објект на серво нареченmyservo. Ние исто така ја поставивме серијската комуникација на 9600 бодови и го приклучивме сервото на пин 9.
Следно, имаме главна петља каде што читаме влезни серијски податоци и управуваме со сервото врз основа на командите:
void loop() {
if (Serial.available() > 0) {
incomingByte = Serial.read();
if (incomingByte == 108) { // 'L' command
myservo.write(0); // rotate clockwise
} else if (incomingByte == 114) { // 'R' command
myservo.write(180); // rotate counterclockwise
} else if (incomingByte == 60) { // stop command
myservo.write(60); // stop servo
}
}
}
Овој код проверува дали има достапни податоци во серијалниот буфер. Во зависност од ASCII вредноста на влезот (на пр.,108за 'L' да се ротира во насока на стрелките.114за 'R' да се ротира во спротивна насока), испраќа соодветна команда до серво.
За комплетен код и дополнителни детали, ве молиме да се обратите на целосната програма вградена под членот.
Демонстрација / Што да очекувате
Кога ќе го поставите кодот и ќе го отворите Серискиот Монитор, можете да внесете 'L' за да го ротирате серво-то налево, 'R' за да го ротирате надесно, или други вредности за да експериментирате со запирањето на серво-то. Очекувајте да најдете различни вредности за запирање, бидејќи однесувањето на серво-то може да варира во зависност од неговиот квалитет и дизајн (во видеото на 18:45).
Бидете внимателни како серво-то реагира на командите; ако не запре како што се очекува, пробајте различни вредности додека не ја најдете оптималната команда за запирање. Ова може да бара некои експерименти, особено за да се избегне прегревање на серво-то.
Глави
- Вовед (0:00)
- Објаснување на хардвер (1:30)
- Инструкции за поврзување (3:45)
- Кодна шетња (5:15)
- Демонстрација (18:00)
Ресурси
- Документација за библиотеката на Arduino Servo
- Континуирани сервомотори производителски податоци
This tutorial is part of: Серво мотори
- 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 користејќи потенциометар
- Контролирање на позицијата на серво со рачни гестови за Arduino
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- Arduino Code and Video for PCA9685 16-Channel 12-Bit Servo Controller V1
- Build an Arduino Servo Toggle Switch with a Push Button
/*
*
* Demonstration of Controlling Continuous Servo (360 servo)
* This code allows you to control a 360-degree servo by a command from the Serial Monitor.
* this 350 servo motor is a just for fun. it can't be used for real application where you need exact positioning. get stepper motor or expensive servo motor.
*
* Modified by Ahmad Shamshiri for Robojax.com
* on Sunday, July 1, 2018, at 11:09 AM in Ajax, Ontario, Canada
* Watch a video instruction of this project: https://youtu.be/b_xvu6wWafA
* Get this code from Robojax.com
*
Original code by BARRAGAN <http://barraganstudio.com>
This example code is in the public domain.
Modified 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Sweep
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int pos = 0; // variable to store the servo position
int incomingByte = 0; // for incoming serial data
void setup() {
Serial.begin(9600);
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
// send data only when you receive data:
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();
// say what you got:
Serial.print("received: ");
Serial.print (incomingByte);
if(incomingByte == 108){
Serial.println(" sent 0 Rotating CW ");
myservo.write(0);
}else if(incomingByte == 114){
Serial.println(" sent 180 Rotating CCW ");
myservo.write(180);
}else if(incomingByte == 60){
Serial.println(" sent Stopped ");
myservo.write(60);
}else{
Serial.println(" moving Randomly");
myservo.write(incomingByte);
}
}
}
Resources & references
No resources yet.
Files📁
No files available.