Pagkontrol ng Servo Motor: Buong Gabay
Pangunahing Natutunan:
Nakatukoy ang Pagkontrol ng Servo Motor: Ang pagkontrol ng servo motor ay nagbibigay ng malinaw na manipulasyon sa posisyon, bilis, at pagtaas ng motor sa pamamagitan ng mga electronic signals.
Mechanismo ng Feedback: Ang sistema ng feedback, kadalasang potentiometer o encoder, ay nagse-set na ang output ng motor ay tumpak na tumutugon sa control input.
PWM Signal: Ang pulse-width modulation (PWM) ay mahalaga para sa pagtatakda ng posisyon ng servo sa pamamagitan ng pagbabago ng haba ng electrical pulses.
Arduino at Servo Motors: Ang paggamit ng Arduino board ay isang sikat at epektibong paraan para i-program at kontrolin ang mga servo motors na may minimal na hardware setup.
Mga Application ng Servo Motors: Mahalaga ang mga servo motors para sa mga project na nangangailangan ng tumpak na positional control, tulad ng robotics at automated systems.
Ang servo motor ay isang motor na disenyo para sa mataas na presisyon at katotohanan sa pag-ikot. Ito ay iba mula sa typical DC motor dahil sa kanyang kakayahan na hawakan ang tiyak na posisyon kaysa sa patuloy na pag-ikot. Ang feature na ito ay nagbibigay ng ideal na servo motors para sa robotics, automation, at hobby projects.
Ang artikulong ito ay nagpapaliwanag kung paano gumagana ang pagkontrol ng servo motor, ang iba't ibang uri ng servo motors, at iba't ibang paraan at device ng pagkontrol. Nagbibigay din ito ng mga halimbawa ng application at project ng servo motor.
Ano ang Servo Motor?
Ang servo motor ay nakatukoy bilang isang actuator na nagbibigay ng tumpak na kontrol sa posisyon (angle), bilis, at pagtaas. Ang tipikal na servo motor ay binubuo ng tatlong pangunahing bahagi: isang DC motor, isang control circuit, at isang feedback device.
Ang DC motor ay nagbibigay ng lakas sa servo at konektado sa mga gear na nagsisimulang bawasan ang bilis at taas ng torque sa output shaft.

Ang output shaft ay ang bahagi ng servo na umiikot at kumukilos ang load.
Ang control circuit ay responsable sa pagtanggap at pagproseso ng mga input signal mula sa external controller. Ang mga signal na ito ay nag-uutos sa servo kung anong posisyon, bilis, o direksyon ang dapat ilipat. Ang control circuit din ang nagpapadala ng lakas sa DC motor upang i-drive ito.
Ang feedback device ay karaniwang potentiometer o encoder na sumusukat sa kasalukuyang posisyon ng output shaft.

Ang feedback device ay nagbibigay ng data ng posisyon pabalik sa control circuit, na pagkatapos ay aayos ang lakas ng DC motor upang tugunan ang aktwal na posisyon sa inilaan na posisyon mula sa input signal.
Ang feedback loop sa pagitan ng control circuit at feedback device ay nag-aasure na ang servo ay makakapag-movement nang tumpak at mapapanatili ang anumang posisyon sa loob ng range of motion nito.
Paano Kontrolin ang Servo Motor?
Ang mga servo motors ay nakokontrol sa pamamagitan ng pagpadala ng PWM (pulse-width modulation) signal sa signal line ng servo. Ang PWM ay isang tekniko na nag-switch ng signal on at off nang mabilis upang lumikha ng mga pulse na may iba't ibang haba. Ang haba ng mga pulse ay nagdetermina ng posisyon ng output shaft.
Halimbawa, kapag ipinadala mo ang PWM signal na may pulse width ng 1.5 milliseconds (ms), ang servo ay ililipat sa neutral position (90 degrees).

Kapag ipinadala mo ang PWM signal na may pulse width ng 1 ms, ang servo ay ililipat sa minimum position (0 degrees). Kapag ipinadala mo ang PWM signal na may pulse width ng 2 ms, ang servo ay ililipat sa maximum position (180 degrees).
Ang PWM signal ay may frequency ng 50 Hz, na nangangahulugan na ito ay umuulit tuwing 20 ms. Ang pulse width ay maaaring magbago mula 1 ms hanggang 2 ms sa loob ng period na ito.
Maraming paraan upang bumuo at ipadala ang PWM signals sa servo motors. Ang ilan sa mga pinakakaraniwang paraan ay:
Gamit ang Arduino board o ibang microcontroller
Gamit ang potentiometer o ibang analog sensor
Gamit ang joystick o ibang digital input device
Gamit ang dedicated servo controller o driver
Sa mga sumusunod na seksyon, susuriin natin bawat isa ng mga paraan na ito sa mas detalyado at makita ang ilang mga halimbawa kung paano sila gumagana.
Pagkontrol ng Servo Motor gamit ang Arduino
Ang Arduino ay isa sa mga pinakasikat na platform para sa pagkontrol ng mga servo motor. Ang mga Arduino boards ay may built-in na PWM outputs na maaaring gamitin para magpadala ng mga signal sa servos. Ang Arduino din ay may Servo library na nagpapadali ng paglikha ng code para sa pagkontrol ng servo.
Para kontrolin ang servo motor gamit ang Arduino, kailangan mo ng:
Isang Arduino board (tulad ng Arduino UNO)
Isang standard servo motor (tulad ng SG90)
Jumper wires
Isang breadboard (optional)
Ang pulang wire mula sa servo ay konektado sa 5V sa Arduino board. Ang itim na wire mula sa servo ay konektado sa GND sa Arduino board. Ang puting wire mula sa servo ay konektado sa pin 9 sa Arduino board.
Para programin ang Arduino board, kailangan mong gamitin ang Arduino IDE (online o offline). Maaari kang gumamit ng isang halimbawa mula sa Servo library o isulat ang sarili mong code.
Ang sumusunod na code ay nagpapakita kung paano sweepin ang servo motor back and forth across 180 degrees gamit ang for loop:
#include <Servo.h> // Include Servo library
Servo myservo; // Create Servo object
int pos = 0; // Variable for position
void setup() {
myservo.attach(9); // Attach Servo object to pin 9
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // Loop from 0 to 180 degrees
myservo.write(pos); // Write position to Servo object
delay(15); // Wait 15 ms
}
for (pos = 180; pos >= 0; pos -= 1) { // Loop from 180 to 0 degrees
myservo.write(pos); // Write position to Servo object
delay(15); // Wait 15 ms
}
}
Ang code na ito ay gumagamit ng dalawang loop upang icrement at decrement ang position variable mula 0 hanggang 180 degrees at vice versa. Ito ay pagkatapos ay isusulat ang value na ito sa Servo object gamit ang myservo.write(pos). Ito din ay nagdagdag ng delay ng 15 ms sa bawat step upang baguhin ang movement.
I-upload ang code na ito sa iyong Arduino board gamit ang Upload button ng IDE, at panoodin kung paano ang iyong servo motor ay sumweeps back and forth smoothly.
Pagkontrol ng Servo Motor gamit ang Potentiometer
Ang potentiometer ay isang analog sensor na maaaring mag-vary ng resistance depende kung gaano ka lalayo ang pag-ikot ng knob nito. Maaari kang gumamit ng potentiometer bilang isang input device para sa pagkontrol ng servo motor.
Para kontrolin ang servo motor gamit ang potentiometer, kailangan mo ng:
Isang Arduino board (tulad ng Arduino UNO)
Isang standard servo motor (tulad ng SG90)
Isang potentiometer (10k Ohms)
Jumper wires
Isang breadboard
Ang wiring diagram para sa pagkonekta ng potentiometer at servo motor sa Arduino board ay ipinapakita sa ibaba:
Ang pulang wire mula sa potentiometer ay konektado sa 5V sa Arduino board. Ang itim na wire mula sa potentiometer ay konektado sa GND sa Arduino board. Ang berdeng wire mula sa potentiometer ay konektado sa pin A0 sa Arduino board.
Ang pulang wire mula sa servo ay konektado sa 5V sa isa pang row sa breadboard. Ang itim na wire mula sa servo ay konektado sa GND sa isa pang row sa breadboard. Ang puting wire mula sa servo ay konektado sa pin D9 sa isa pang row sa breadboard.
Para programin ang iyong Arduino board, kailangan mong gamitin ang parehong code ng nakaraang halimbawa ngunit baguhin ang ilang lines:
#include <Servo.h> // Include Servo library
Servo myservo; // Create Servo object
int potpin = A0; // Pin connected to potentiometer
int val = 0; // Variable for reading potentiometer value
void setup() {
myservo.attach(9); // Attach Servo object pin D9
}
void loop() {
val = analogRead(potpin); // Read value from potentiometer (0 -1023)
val = map(val,0,1023,0,180); // Map value range (0 -180)
myservo.write(val); // Write mapped value Servo object
delay(15); // Wait 15 ms
}
Ang code na ito ay gumagamit ng analogRead(potpin) function para basahin ang value mula sa potentiometer na konektado sa pin A0. Ito pagkatapos ay gumagamit ng map(val,0,1023,0,180) function upang map ang value range mula 0 -1023 degrees. Ito pagkatapos ay isusulat ang mapped value sa Servo object gamit ang myservo.write(val) function. Ito din ay nagdagdag ng delay, ang parehong previous example.
Maaari kang i-upload ang code na ito sa iyong Arduino board gamit ang Upload button ng IDE. Dapat mong makita ang iyong servo motor na gumagalaw ayon sa posisyon ng knob ng potentiometer.
Pagkontrol ng Servo Motor gamit ang Joystick
Ang joystick ay isang digital input device na maaaring detectin ang direksyon at magnitude ng galaw sa dalawang axis. Maaari kang gumamit ng joystick upang kontrolin ang servo motor sa pamamagitan ng pag-map ng x-axis ng joystick sa angle ng servo.
Para kontrolin ang servo motor gamit ang joystick, kailangan mo ng sumusunod:
Isang Arduino board (tulad ng Arduino UNO)
Isang standard servo motor (tulad ng SG90)
Isang joystick module (tulad ng KY-023)
Jumper wires
Isang breadboard
Ang wiring diagram para sa pagkonekta ng joystick module at servo motor sa Arduino board ay ipinapakita sa ibaba:
!https://www.makerguides.com/wp-content/uploads/2019/01/Servo-motor-control-with-Arduino-and-joystick-wiring-diagram.png
Ang pulang wire mula sa joystick module ay konektado sa 5V sa Arduino board. Ang itim na wire mula sa joystick module ay konektado sa GND sa Arduino board. Ang berdeng wire mula sa joystick module ay konektado sa pin A0 sa Arduino board.
Ang pulang wire mula sa servo ay konektado sa 5V sa isa pang row sa breadboard. Ang itim na wire mula sa servo ay konektado sa GND sa isa pang row sa breadboard. Ang puting wire mula sa servo ay konektado sa pin D9 sa isa pang row sa breadboard.
Para programin ang iyong Arduino board, kailangan mong gamitin ang parehong code ng nakaraang halimbawa ngunit baguhin ang ilang lines:
#include <Servo.h> // Include Servo library
Servo myservo; // Create Servo object
int joyX = A0; // Pin connected to joystick x-axis
int val = 0; // Variable for reading joystick value
void setup() {
myservo.attach(9); // Attach Servo object to pin 9
}
void loop() {
val = analogRead(joyX); // Read value from joystick x-axis (0 - 1023)
val = map(val, 0, 1023, 0, 180); // Map value range (0 - 180)
myservo.write(val); // Write mapped value to Servo object
delay(15); // Wait 15 ms
}