Les 85: Inleiding tot Servo Motors | Arduino Stap-vir-Stap Kursus
Hierdie projekgids stel jou bekend aan die wêreld van deurlopende rotasie-servomotors, ook bekend as 360-grade-servo's. Anders as standaard servo's wat na 'n spesifieke hoek beweeg (soos 0 tot 180 grade), draai hierdie motors deurlopend in enige rigting. Dit maak hulle ideaal vir die bou van klein robotte, tenkspore, of enige projek wat eenvoudige, bekostigbare aandryfmotors vereis. Hierdie gids sal jou wys hoe om een met 'n Arduino en 'n paar drukknoppies te beheer, wat jou praktiese beheer oor sy rigting en spoed gee.
Hier is 'n paar praktiese toepassings vir 'n 360-grade-servo:
- Die bou van 'n klein tweewiel-robotmotor.
- Die skep van 'n pan-en-tilt-kameramontage wat eindeloos draai.
- Die aandryf van 'n klein vervoerband of windas.
- Die maak van 'n eenvoudige radar- of sensorskandeerplatform.

Hardeware en Komponente
Vir hierdie projek sal jy die volgende komponente benodig:
- Arduino-bord (bv. Uno)
- Deurlopende rotasie-servomotor (bv. FS90R of soortgelyk)
- Drie drukknoppies
- Springdrade
- Broodbord (opsioneel, vir makliker bedrading)
Bedradingsgids
Die bedrading vir hierdie projek is eenvoudig. Die servomotor het drie drade: tipies bruin (grond), rooi (krag), en oranje of geel (sein). Die drukknoppies is in 'n eenvoudige konfigurasie bedraad.
Hier is 'n uiteensetting van die verbindings:
- Servomotor:
- Bruin draad (Grond) verbind aan die Arduino se GND-pen.
- Rooi draad (Krag) verbind aan die Arduino se 5V-pen.
- Oranje/Geel draad (Sein) verbind aan Arduino-pen 9.
- Drukknoppies:
- Een kant van elke knoppie is aan die Arduino se GND-pen verbind.
- Die ander kant van die "Teen-kloksgewys"-knoppie verbind aan pen 2.
- Die ander kant van die "Stop"-knoppie verbind aan pen 3.
- Die ander kant van die "Kloksgewys"-knoppie verbind aan pen 4.
In die video beklemtoon die skepper dat die servo se seindraad aan 'n PWM-geskikte pen op die Arduino verbind moet word, wat dikwels met 'n tilde (~)-simbool gemerk word. Pen 9 is een van hierdie penne. Die drukknoppies gebruik die Arduino se interne optrekweerstande, wat die bedrading vereenvoudig deur die behoefte aan eksterne weerstande uit te skakel (in video by 07:02).
Kodeverduideliking
Die kode is ontwerp om die toestand van drie drukknoppies te lees en die ooreenstemmende opdrag na die servomotor te stuur. Kom ons breek die gebruikerskonfigureerbare dele af.
Konfigureer Penne en Opdragte
Boonop in die kode sal jy die definisies vir die penne en die servo-beheerwaardes vind. Dit is waar jy die gedrag van jou projek kan aanpas.
const int servoPin = 9; // PWM-pen vir die servo-sein
const int stopPin = 3; // Pen vir die stop-knoppie
const int cwPin = 4; // Pen vir die kloksgewys-knoppie
const int ccwPin = 2; // Pen vir die teen-kloksgewys-knoppie
Hierdie konstantes definieer watter Arduino-penne aan die knoppies en die servo verbind is. As jy verskillende penne vir jou knoppies gebruik, sal jy die nommers hier verander. Die servoPin moet 'n PWM-geskikte pen wees.
const int csServoCommand[3] = {106, 52, 0}; // {TK, STOP, K}
const String csServoCommandText[3] = {"Teen-kloksgewys", "Gestop", "Kloksgewys"};
Dit is die belangrikste deel om te verstaan en in te stel. Die csServoCommand-skikking hou die waardes wat na die servo gestuur word. Vir 'n deurlopende servo verteenwoordig hierdie waardes nie 'n hoek nie, maar 'n spoed en rigting.
- 106 is die waarde vir volspoed Teen-kloksgewys-rotasie.
- 52 is die waarde vir 'n volle stop.
- 0 is die waarde vir volspoed Kloksgewys-rotasie.
Hierdie waardes is nie universeel nie. As gevolg van vervaardigingsverskille mag die "stop"-waarde (52) aangepas moet word. As jou servo stadig dryf wanneer jy die stop-knoppie druk, sal jy hierdie waarde fyn moet instel. Die video demonstreer hierdie proses en wys hoe die verandering van die waarde na 54 of 51 die motor se gedrag kan beïnvloed (in video by 13:45).
Jy kan ook die waardes vir rotasie aanpas om die motor se spoed te verander. Byvoorbeeld, die teen-kloksgewys-waarde na 70 stel, sal dit stadiger laat draai as by 106 (in video by 12:23).
Die csServoCommandText-skikking hou die teksstringe wat na die Serial Monitor gedruk word om die huidige opdragtoestand te wys.
Pasgemaakte Funksie: servoCommand()
Die kode gebruik 'n pasgemaakte funksie om die opdraglogika te hanteer. Hierdie funksie neem 'n nommer (0, 1, of 2) as 'n argument, werk die statusteks op, en stuur die ooreenstemmende opdrag na die servo.
void servoCommand(int n) {
statusText = csServoCommandText[n];
myservo.write(csServoCommand[n]);
Serial.println(csServoCommandText[n]);
Serial.println(csServoCommand[n]);
}
Hierdie funksie word vanaf die hooflus geroep wanneer 'n knoppie gedruk word. Dit sentraliseer die logika vir die opdatering van die vertoning en die beheer van die servo, wat die kode skoner en makliker maak om te wysig.
Lewende Projek en Demonstrasie
In die video demonstreer die skepper die projek in aksie. Die druk van die "Kloksgewys"-knoppie stuur die waarde 0 na die servo, wat dit in een rigting laat draai. Die druk van die "Teen-kloksgewys"-knoppie stuur die waarde 106, wat dit die ander kant toe laat draai. Die "Stop"-knoppie stuur 52, wat die motor moet laat stilstaan.
Die Serial Monitor word gebruik om die huidige toestand en die presiese waarde wat na die servo gestuur word, te vertoon. Dit is van onskatbare waarde vir ontfouting en vir die vind van die perfekte "stop"-waarde vir jou spesifieke motor. Soos in die video genoem, mag die stop-opdrag nie perfek wees nie as gevolg van die interne stroombane van die servo, en jy mag 'n stadige drywing of vibrasie sien. Dit is 'n algemene eienskap van goedkoper deurlopende servos en kan verminder word deur die stop-waarde in die kode aan te pas (in video by 01:15).
Hoofstukke
- [00:05] Inleiding tot die 360-grade servomotor
- [02:02] Komponente en hardeware-oorsig
- [02:40] Gedetailleerde bedradingsdiagram en verbindings
- [05:07] Kodeverduideliking: konstantes, skikkings en opstelling
- [09:56] Kodeverduideliking: die servoCommand-funksie
- [10:54] Lewendige demonstrasie en Serial Monitor-uitset
- [12:23] Aanpassing van servo-spoed en stop-waardes
/*
*
* 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
Goedere wat jy dalk nodig het
-
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
Hulpbronne en verwysings
Lêers📁
Ander lêers
-
SG90 Servo motor datasheet
robojax-servo-SG90_datasheet.pdf0.12 MB