Mafunzo haya ni sehemu ya: Mota za Servo
Video zote zinazohusiana na mota za servo zinazohusiana, zimeorodheshwa hapa. Viungo vya video zingine viko chini ya makala haya.
Kudhibiti Servo kwa Vitufe vya Kushinikiza Kwa Kutumia Arduino
Katika mafunzo haya, tutajifunza jinsi ya kudhibiti motor ya servo kwa kutumia vifungo viwili vya kushinikiza, moja kwa kusogeza servo kushoto na kingine kwa kuisogeza kulia. Ukibonyeza kitufe cha kulia, servo itasogea kwa digrii 10 kulia, na ukibonyeza kitufe cha kushoto, itasogea kwa kiasi sawa kushoto. Ukishikilia kitufe chini, servo itaendelea kusogea katika mwelekeo huo hadi ukiache.

Mradi huu ni njia nzuri ya kuelewa jinsi ya kuunganisha vifungo na motor ya servo kwa kutumia Arduino. Tutashughulikia vipengele muhimu vya vifaa, maagizo ya wiring, na msimbo unaohitajika kufanya yote yafanye kazi. Kwa ufahamu wazi zaidi, unaweza kurejelea video inayoambatana na mafunzo haya (katika video saa 01:00).
Vifaa Vimeelezwa
Kwa mradi huu, utahitaji bodi ya Arduino, motor ya servo, na vifungo viwili vya kushinikiza. Motor ya servo inawajibika kwa harakati, wakati vifungo vya kushinikiza hufanya kama pembejeo za kudhibiti mwelekeo wa harakati hiyo. Arduino huchakata pembejeo hizi na kutuma ishara zinazofaa kwa servo.
Motor ya servo hufanya kazi kwa misingi ya ishara za pulse-width modulation (PWM). Kwa kutuma upana tofauti wa pulse, unaweza kudhibiti pembe ya servo. Vifungo vya kushinikiza vitaunganishwa kwenye pini za pembejeo za dijiti kwenye Arduino, na tutatumia resistors za ndani za kuvuta-juu kurahisisha wiring.
Maelezo ya Datasheet
| Mtengenezaji | Mbalimbali |
|---|---|
| Nambari ya sehemu | SG90 |
| Voltage ya Logic/IO | 5 V |
| Voltage ya usambazaji | 4.8–6 V |
| Mkondo wa pato (kwa kila channel) | 1.5 A max |
| Mkondo wa kilele (kwa kila channel) | 2.5 A max |
| Mwongozo wa mzunguko wa PWM | 50 Hz |
| Viwango vya kizingiti cha pembejeo | 0.3VCC hadi 0.7VCC |
| Kushuka kwa voltage / RDS(on) / kueneza | 0.4 V |
| Mipaka ya joto | 85 °C |
| Kifurushi | Plastiki |
| Vidokezo / lahaja | Mzunguko wa kawaida wa 180° |
- Hakikisha servo imekadiriwa kwa voltage yako ya usambazaji.
- Tumia uondoaji wa joto unaofaa ikiwa unafanya kazi kwa mikondo ya juu.
- Unganisha vifungo kwenye ardhi na usanidi wa kuvuta-juu.
- Ondoa debounce kwenye vifungo vyako ikiwa unapata tabia isiyo ya kawaida.
- Fuatilia pato la serial kwa utatuzi.
Maagizo ya Wiring

Ili kuunganisha vipengele, anza kwa kuunganisha motor ya servo. Unganisha waya nyekundu ya servo kwenye pini ya 5V kwenye Arduino, waya nyeusi kwenye pini ya GND, na waya ya ishara ya njano au nyeupe kwenye pini ya 9 kwenye Arduino. Pini hii itadhibiti nafasi ya servo.
Ifuatayo, unganisha vifungo vya kushinikiza. Unganisha terminal moja ya kitufe cha kulia kwenye pini ya 2 na terminal nyingine kwenye ardhi. Kwa kitufe cha kushoto, unganisha terminal moja kwenye pini ya 12 na terminal nyingine kwenye ardhi pia. Mpangilio huu unaruhusu resistors za ndani za kuvuta-juu kuweka pini juu wakati vifungo havijabonyezwa.
Mifano ya Msimbo na Maelezo
Wacha tuanze na msimbo wa kudhibiti servo kwa kitufe kimoja cha kushinikiza. Msimbo huanzisha kitu cha servo na kuweka pembe ya awali. Hapa kuna sehemu fupi:
int angle = 90; // pembe ya awali ya servo
int angleStep = 10; // ukubwa wa hatua kwa harakati
Katika kipande hiki, angle inawakilisha nafasi ya sasa ya servo, wakati angleStep inafafanua ni kiasi gani servo inasogea kwa kila ubonyezo wa kitufe. Msimbo huu ni muhimu kwa kufuatilia nafasi ya servo.
Ifuatayo, tuna kazi ya setup ambapo tunaunganisha servo na kusanidi pini za pembejeo:
void setup() {
Serial.begin(9600); // anzisha serial
myservo.attach(9); // unganisha servo kwenye pini ya 9
pinMode(2, INPUT_PULLUP); // sanidi pini ya kitufe
}
Katika setup, tunaanzisha monitor ya serial na kuunganisha servo kwenye pini ya 9. Kitufe kwenye pini ya 2 kimewekwa kama pembejeo na resistor ya kuvuta-juu, ambayo hurahisisha wiring na kuepuka hitaji la resistors za nje.
Hatimaye, tunaangalia kazi ya loop inayoshughulikia ubonyezo wa kitufe:
while(digitalRead(2) == LOW) {
angle = angle + angleStep; // ongeza pembe
myservo.write(angle); // songa servo
}
Loop hii huangalia kila mara ikiwa kitufe kimebonyezwa. Kikibonyezwa, pembe inaongezeka kwa hatua iliyofafanuliwa, na servo inasogea ipasavyo. Ni muhimu kuhakikisha pembe inabaki ndani ya mipaka (0 hadi 180 digrii) ili kuzuia uharibifu wa servo.
Maonyesho / Nini cha Kutarajia
Ukibonyeza kitufe cha kulia, servo inapaswa kusogea kulia kwa nyongeza za digrii 10 hadi kufikia kiwango cha juu cha digrii 180. Vile vile, kubonyeza kitufe cha kushoto kitaisogeza kushoto. Ukishikilia kitufe chini, servo itaendelea kusogea katika mwelekeo huo hadi ukiache kitufe (katika video saa 01:00).
Makosa ya kawaida ni pamoja na masuala ya wiring, kama vile miunganisho isiyo sahihi au pembejeo zinazoelea. Hakikisha miunganisho yako ni salama na unatumia pini sahihi kama ilivyobainishwa kwenye msimbo.
Mafunzo haya ni sehemu ya: Mota za Servo
- 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)
- Kudhibiti Servo kwa Potentiometer Kwa Kutumia Arduino
- Kudhibiti Servo kwa Potentiometer na LCD1602 kwa kutumia Arduino
- Kudhibiti Motors za Servo Kwa Kutumia Kidhibiti cha Infrared na Arduino
- Arduino servomotorkontroll med hjälp av en potentiometer
- Kontrollera servoposition med handgester för Arduino
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- Jinsi ya Kutumia Servo ya 360° Inayoendelea na Arduino
- Msimbo wa Arduino na Video kwa Kidhibiti cha Servo cha PCA9685 cha Idhaa 16 cha 12-Bit V1
- Tengeneza Arduino Servo Toggle Switch kwa Kitufe cha Kushinikiza
/*
Controlling a servo with a push button with Arduino
When a push button is pressed, the servo starts moving to the right or left until
it reaches 180 and then returns to 0 degrees.
May 22, 2018 at 01:00
Written by Ahmad S. for Robojax.com in Ajax, Ontario, Canada
Watch a video for this code at https://youtu.be/7woqNH_qby4
This code is taken from http://robojax.com/learn/arduino
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int angle =90; // initial angle for servo
int angleStep =10;
void setup() {
// Servo button demo by Robojax.com
Serial.begin(9600); // setup serial
myservo.attach(9); // attaches the servo on pin 9 to the servo object
pinMode(2,INPUT_PULLUP);
Serial.println("Robojax Servo Button ");
}
void loop() {
while(digitalRead(2) == LOW){
// change the angle for the next time through the loop:
angle = angle + angleStep;
// reverse the direction of the movement at the ends of the angle:
if (angle <= 0 || angle >= 180) {
angleStep = -angleStep;
}
myservo.write(angle); // move the servo to the desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degrees");
delay(100); // waits for the servo to get there
}// while
}
/*
Controlling a servo with two push buttons with Arduino
When the left push button is pressed, the servo starts moving to the left until it reaches 180 (or zero) degrees.
When the right push button is pressed, the servo starts moving to the right until it reaches 180 (or zero) degrees.
At any instance, if the button is released, the servo stops.
May 22, 2018, at 01:00
Written by Ahmad S. for Robojax.com in Ajax, Ontario, Canada
Watch a video for this code at https://youtu.be/7woqNH_qby4
This code is taken from http://robojax.com/learn/arduino
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int angle =90; // initial angle for servo
int angleStep =5;
#define LEFT 12 // pin 12 is connected to left button
#define RIGHT 2 // pin 2 is connected to right button
void setup() {
// Servo button demo by Robojax.com
Serial.begin(9600); // setup serial
myservo.attach(9); // attaches the servo on pin 9 to the servo object
pinMode(LEFT,INPUT_PULLUP); // assign pin 12 as input for Left button
pinMode(RIGHT,INPUT_PULLUP);// assign pin 2 as input for right button
myservo.write(angle);// send servo to the middle at 90 degrees
Serial.println("Robojax Servo Button ");
}
void loop() {
// Servo button demo by Robojax.com
while(digitalRead(RIGHT) == LOW){
if (angle > 0 && angle <= 180) {
angle = angle - angleStep;
if(angle < 0){
angle = 0;
}else{
myservo.write(angle); // move the servo to desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degree");
}
}
delay(100); // waits for the servo to get there
}// while
// Servo button demo by Robojax.com
while(digitalRead(LEFT) == LOW){
// Servo button demo by Robojax.com
if (angle >= 0 && angle <= 180) {
angle = angle + angleStep;
if(angle >180){
angle =180;
}else{
myservo.write(angle); // move the servo to desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degree");
}
}
delay(100); // waits for the servo to get there
}//
}
Tänker att du kanske behöver
-
AmazonServo motor on Amazonamzn.to
-
AliExpressPurchase SG90 servo motor 180 or 360 from AliExpresss.click.aliexpress.com
Resurser och referenser
Inga resurser än.
Filer📁
Inga filer tillgängliga.