Ovaj tutorijal je dio: Servo motori
Svi videozapisi vezani za servo motore navedeni su ovdje. Linkovi do drugih videozapisa nalaze se ispod ovog članka.
Kako koristiti kontinuirani 360° servo s Arduinom
U ovom tutorijalu, naučićemo kako kontrolisati kontinuirani 360° servo koristeći Arduino. Za razliku od standardnih serva, kontinuirani servosi mogu se rotirati neograničeno u bilo kojem pravcu, što omogućava svestrane primene. Međutim, kontrolisanje njihove pozicije zahteva razumevanje komandi koje im se šalju i malo eksperimentisanja kako bi se pronašle prave vrednosti za zaustavljanje.
Razvijat ćemo program koji nam omogućava slanje komandi putem Serijskog monitora za okretanje serva lijevo, desno ili zaustavljanje. Kod će uključivati potrebnu logiku za tumačenje ASCII vrijednosti komandi koje unosimo. Za pojašnjenje procesa kodiranja, obavezno pogledajte video (u videu u 12:30).
Objašnjeni hardver
Za implementaciju ovog projekta biće vam potreban kontinuirani 360° servo, Arduino ploča i napajanje koje može obezbijediti dovoljnu struju (najmanje 500mA). Servo prima kontrolne signale od Arduina, koji koristi modulaciju širine impulsa (PWM) da odredi pravac i brzinu rotacije.
Servo motor ima tri žice: napajanje, uzemljenje i kontrola. Žica za napajanje se povezuje sa napajanjem, žica za uzemljenje se povezuje i sa napajanjem i sa uzemljenjem Arduina, a žica za kontrolu se povezuje na određeni pin na Arduinu za prenos signala.
Tehnički podaci
| Proizvođač | Generički |
|---|---|
| Broj dijela | Kontinuirani 360° Servo |
| Logika/IO napon | 5 V |
| Napon napajanja | 4.8-6 V |
| Izlazna struja (po kanalu) | 500 mA |
| Vrhunski trenutni (po kanalu) | 1 A max |
| Upute za PWM frekvenciju | 50 Hz |
| Ulazne logičke granice | Visoko: >2.5 V, Nisko: <0.8 V |
| Napon / RDS(on)/ zasićenje | - |
| Termalne granice | - |
| Pakovanje | Standardno kućište servomotora |
| Napomene / varijante | Dostupno u raznim veličinama |
- Osigurajte zajedničku masu između Arduina i napajanja.
- Koristite vanjski izvor napajanja za servo kako biste izbjegli preopterećenje Arduina.
- Eksperimentirajte s vrijednostima zaustavljanja kako biste pronašli najbolju izvedbu za vaš servo.
- Pratite temperaturu serva tokom rada kako biste sprečili pregrevanje.
- Koristite PWM signal za kontrolu brzine i pravca servomotora.
Uputstva za povezivanje
Da biste povezali svoj kontinuirani 360° servo sa Arduinom, počnite povezivanjem naponskog kabla serva na vanjski izvor napajanja koji pruža 5V. Zemaljski kabel serva treba biti povezan na zemaljsku (GND) pin na Arduinu, osiguravajući da izvor napajanja i Arduino dijele zajedničku zemlju. Kontrolni kabel serva ide na pin 9 na Arduinu, što je mjesto s kojeg će biti poslan PWM signal.
Dvostruko provjerite da su vaše veze sigurne, jer labave veze mogu dovesti do nepredvidivog ponašanja servomotora. Ako je vaš servomotor tip koji se može napajati direktno iz Arduina, možete povezati naponski vod do 5V pina na Arduinu, ali osigurajte da ukupna struja ne prelazi ono što Arduino može isporučiti.
Primjeri koda i vodič
Sljedeći izvod pokazuje kako postaviti servo i čitati komande iz Serijskog monitora:
#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
}
U ovom kodu uključujemo Servo biblioteku i kreiramo servo objekat nazvanmyservoTakođer smo postavili serijsku komunikaciju na 9600 baud i priključili servo na pin 9.
Sljedeće, imamo glavnu petlju gdje čitamo dolazne serijske podatke i kontroliramo servo na osnovu komandi:
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
}
}
}
Ovaj kod provjerava da li postoji bilo kakav podatak dostupan u serijskom baferu. Ovisno o ASCII vrijednosti ulaza (npr.,108za 'L' da se rotira u smjeru kazaljke na satu,114za 'R' da se rotira u suprotnom smeru), šalje odgovarajuću komandu servou.
Za potpuni kod i dodatne detalje, molimo vas da se obratite punom programu učitanom ispod članka.
Demonstracija / Šta očekivati
Kada otpremite kod i otvorite Serijski Monitor, možete unijeti 'L' za okretanje serva lijevo, 'R' za okretanje desno, ili druge vrijednosti za eksperimentisanje sa zaustavljanjem serva. Očekujte da pronađete razne vrijednosti zaustavljanja, jer se ponašanje serva može razlikovati u zavisnosti od njegove kvalitete i dizajna (u videu u 18:45).
Budite oprezni kako servo reaguje na komande; ako se ne zaustavi kako se očekuje, isprobajte različite vrednosti dok ne pronađete optimalnu komandu za zaustavljanje. Ovo može zahtevati malo eksperimentisanja, posebno da biste izbegli pregrevanje serva.
Poglavlja
- Uvod (0:00)
- Objašnjenje hardvera (1:30)
- Uputstva za povezivanje (3:45)
- Kodna šetnja (5:15)
- Demonstracija (18:00)
Resursi
- Dokumentacija Arduino Servo biblioteke
- Tehnički listovi proizvođača kontinuiranih servoa
Ovaj tutorijal je dio: Servo motori
- Kontrola serva pomoću push dugmadi koristeći 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)
- Kontrola serva pomoću potenciometra koristeći Arduino
- Kontrola serva pomoću potenciometra i LCD1602 ekrana koristeći Arduino
- Kontrola servo motora pomoću infracrvenog daljinskog upravljača s Arduinom
- Kontrola servo motora Arduino pomoću potenciometra
- Kontrola pozicije serva pomoću rukovnih gesti za Arduino
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- Arduino kod i video za PCA9685 16-kanalni 12-bitni servo kontroler V1
- Napravi Arduino servo prekidač sa push button tasterom
/*
*
* 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.
📚⬇️ Download and resource page https://robojax.com/RJT762
*
* 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);
}
}
}
Resursi i reference
Još nema resursa.
Datoteke📁
Nema dostupnih datoteka.