Lekcija 85: Uvod u servo motore | Arduino korak po korak kurs
Ovaj projektni vodič uvodi vas u svijet servo motora s kontinuiranom rotacijom, poznatih i kao 360-stepeni servo motori. Za razliku od standardnih servo motora koji se pomjeraju na određeni ugao (poput 0 do 180 stepeni), ovi motori se kontinuirano okreću u oba smjera. To ih čini idealnim za izgradnju malih robota, gusjenica ili bilo kojeg projekta koji zahtijeva jednostavne, pristupačne pogonske motore. Ovaj vodič će vam pokazati kako upravljati jednim pomoću Arduina i nekoliko tipkala, dajući vam praktičnu kontrolu nad njegovim smjerom i brzinom.
Evo nekoliko praktičnih primjena za 360-stepeni servo motor:
- Izgradnja malog robota na dva točka.
- Kreiranje pan-tilt nosača kamere koji se rotira beskonačno.
- Pokretanje male pokretne trake ili vitla.
- Izrada jednostavne platforme za skeniranje radara ili senzora.

Hardver i komponente
Za ovaj projekt trebat će vam sljedeće komponente:
- Arduino ploča (npr. Uno)
- Servo motor s kontinuiranom rotacijom (npr. FS90R ili sličan)
- Tri tipkala
- Konektorski kablovi (jumper wires)
- Breadboard (opcionalno, za lakše povezivanje)
Vodič za povezivanje
Povezivanje za ovaj projekt je jednostavno. Servo motor ima tri žice: obično smeđu (uzemljenje), crvenu (napajanje) i narandžastu ili žutu (signal). Tipkala su povezana u jednostavnoj konfiguraciji.
Evo pregleda veza:
- Servo motor:
- Smeđa žica (uzemljenje) povezuje se na GND pin Arduina.
- Crvena žica (napajanje) povezuje se na 5V pin Arduina.
- Narandžasta/žuta žica (signal) povezuje se na pin 9 Arduina.
- Tipkala:
- Jedna strana svakog tipkala povezana je na GND pin Arduina.
- Druga strana tipkala "Suprotno od kazaljke na satu" povezuje se na pin 2.
- Druga strana tipkala "Stop" povezuje se na pin 3.
- Druga strana tipkala "U smjeru kazaljke na satu" povezuje se na pin 4.
U videu, kreator naglašava da signalna žica servo motora mora biti povezana na PWM pin na Arduinu, koji je često označen tilde (~) simbolom. Pin 9 je jedan od tih pinova. Tipkala koriste interne pull-up otpornike Arduina, što pojednostavljuje povezivanje eliminiranjem potrebe za vanjskim otpornicima (u videu na 07:02).
Objašnjenje koda
Kod je dizajniran da čita stanje tri tipkala i šalje odgovarajuću komandu servo motoru. Hajde da raščlanimo dijelove koje korisnik može konfigurirati.
Konfiguriranje pinova i komandi
Na vrhu koda pronaći ćete definicije za pinove i vrijednosti kontrole servo motora. Ovdje možete prilagoditi ponašanje vašeg projekta.
const int servoPin = 9; // PWM pin za signal servo motora
const int stopPin = 3; // Pin za tipkalo stop
const int cwPin = 4; // Pin za tipkalo u smjeru kazaljke na satu
const int ccwPin = 2; // Pin za tipkalo suprotno od kazaljke na satu
Ove konstante definiraju koji Arduino pinovi su povezani na tipkala i servo motor. Ako koristite različite pinove za svoja tipkala, promijenili biste brojeve ovdje. servoPin mora biti PWM pin.
const int csServoCommand[3] = {106, 52, 0}; // {CCW, STOP, CW}
const String csServoCommandText[3] = {"Suprotno od kazaljke na satu", "Zaustavljeno", "U smjeru kazaljke na satu"};
Ovo je najvažniji dio za razumijevanje i podešavanje. Niz csServoCommand sadrži vrijednosti koje se šalju servo motoru. Za kontinuirani servo motor, ove vrijednosti ne predstavljaju ugao već brzinu i smjer.
- 106 je vrijednost za punu brzinu rotacije suprotno od kazaljke na satu.
- 52 je vrijednost za potpuno zaustavljanje.
- 0 je vrijednost za punu brzinu rotacije u smjeru kazaljke na satu.
Ove vrijednosti nisu univerzalne. Zbog razlika u proizvodnji, vrijednost "stop" (52) možda će trebati prilagodbu. Ako vaš servo motor polako "pluta" kada pritisnete tipkalo stop, morat ćete fino podesiti ovu vrijednost. Video demonstrira ovaj proces, pokazujući kako promjena vrijednosti na 54 ili 51 može utjecati na ponašanje motora (u videu na 13:45).
Također možete prilagoditi vrijednosti za rotaciju kako biste promijenili brzinu motora. Na primjer, postavljanje vrijednosti za suprotno od kazaljke na satu na 70 učinit će da se rotira sporije nego na 106 (u videu na 12:23).
Niz csServoCommandText sadrži tekstualne nizove koji se ispisuju na Serial Monitor kako bi se prikazalo trenutno stanje komande.
Prilagođena funkcija: servoCommand()
Kod koristi prilagođenu funkciju za upravljanje logikom komandi. Ova funkcija uzima broj (0, 1 ili 2) kao argument, ažurira tekst statusa i šalje odgovarajuću komandu servo motoru.
void servoCommand(int n) {
statusText = csServoCommandText[n];
myservo.write(csServoCommand[n]);
Serial.println(csServoCommandText[n]);
Serial.println(csServoCommand[n]);
}
Ova funkcija se poziva iz glavne petlje kada se pritisne tipkalo. Ona centralizira logiku za ažuriranje prikaza i upravljanje servo motorom, čineći kod čišćim i lakšim za modificiranje.
Živi projekt i demonstracija
U videu, kreator demonstrira projekt u akciji. Pritiskanje tipkala "U smjeru kazaljke na satu" šalje vrijednost 0 servo motoru, uzrokujući njegovu rotaciju u jednom smjeru. Pritiskanje tipkala "Suprotno od kazaljke na satu" šalje vrijednost 106, čineći da se okreće u drugom smjeru. Tipkalo "Stop" šalje 52, što bi trebalo zaustaviti motor.
Serijski monitor se koristi za prikaz trenutnog stanja i tačne vrijednosti koja se šalje servomotoru. Ovo je neprocjenjivo za otklanjanje grešaka i za pronalaženje savršene "stop" vrijednosti za vaš specifični motor. Kao što je navedeno u videu, naredba za zaustavljanje možda neće biti savršena zbog unutrašnjeg kola servomotora, te možete primijetiti sporo pomicanje ili vibracije. Ovo je uobičajena karakteristika jeftinijih kontinuiranih servomotora i može se smanjiti podešavanjem stop vrijednosti u kodu (u videu na 01:15).
Poglavlja
- [00:05] Uvod u 360-stepeni servomotor
- [02:02] Pregled komponenti i hardvera
- [02:40] Detaljan dijagram povezivanja i veze
- [05:07] Objašnjenje koda: konstante, nizovi i podešavanje
- [09:56] Objašnjenje koda: funkcija servoCommand
- [10:54] Demonstracija uživo i izlaz serijskog monitora
- [12:23] Podešavanje brzine servomotora i stop vrijednosti
/*
*
* 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);
}
}
}
/*
*
* Demonstration of Controlling Continuous Servo (360 servo)
360 Servo -2
* 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 servoPin = 9;// this pin must be of those with PWM ~
int pos = 0; // variable to store the servo position
int incomingByte = 0; // for incoming serial data
int CWBS, CCWBS, SBS;
void setup() {
Serial.begin(9600);
pinMode(2,INPUT_PULLUP);// set pin for push button STOP
pinMode(3,INPUT_PULLUP);// set pin for push button CCW
pinMode(4,INPUT_PULLUP);// set pin for push button CW
myservo.attach(servoPin); // attaches the servo on pin 9 to the servo object
}
void loop() {
CCWBS = digitalRead(2);// read status of button CCW
SBS = digitalRead(3);// read status of button STOP
CWBS = digitalRead(4);// read status of button CW
if(CCWBS == LOW){
Serial.println(" sent 0 Rotaing CW ");
myservo.write(0);
}else if(CWBS == LOW){
Serial.println(" sent 180 Rotaing CCW ");
myservo.write(180);
}else if(SBS == LOW){
Serial.println(" sent Stopped ");
myservo.write(60);
}else{
Serial.println(" moving Random");
myservo.write(48);
}
}// loop
Stvari koje bi vam mogle zatrebati
-
Amazon360 Degree Servo motor on Amazonlink.amazon
-
Amazon
-
eBay360 Degree Servo motor on eBayebay.us
-
AliExpress360 Degree Servo motor on AliExpresss.click.aliexpress.com
-
AliExpress360 Degree Servo motor on AliExpress-2s.click.aliexpress.com
Resursi i reference
Datoteke📁
Ostale datoteke
-
SG90 Servo motor datasheet
robojax-servo-SG90_datasheet.pdf0.12 MB