Giới thiệu tổng quan về động cơ servo
Có nhiều loại động cơ servo và tính năng chính của chúng là khả năng điều khiển chính xác vị trí của trục. Động cơ servo là một hệ thống vòng kín sử dụng phản hồi vị trí để điều khiển chuyển động và vị trí cuối cùng của nó.
Hệ thống vòng kín
Trong công nghiệp động cơ servo là loại cảm biến phản hồi vị trí, thường là một bộ code hóa có độ chính xác cao, trong khi trong các động cơ RC hoặc nhỏ hơn, cảm biến vị trí thường là một chiết áp đơn giản. Vị trí thực tế được tìm thấy bởi các thiết bị này được đưa trở lại bộ phát hiện lỗi nơi nó được so sánh với vị trí đích. Sau đó, theo lỗi, bộ điều khiển sửa vị trí thực tế của động cơ để khớp với vị trí đích.
Hệ thống vòng kín Servo
Trong hướng dẫn này, chúng tôi sẽ xem xét chi tiết về các động cơ servo thường gặp. Chúng tôi sẽ giải thích cách các servo này hoạt động và cách điểu khiển chúng bằng Arduino.
Động cơ thường dùng là bộ truyền động kích thước nhỏ được sử dụng để điều khiển xe ô tô, thuyền, máy bay, v.v. Chúng cũng được sử dụng bởi các sinh viên kỹ thuật để chế tạo robot, tạo ra cánh tay robot, robot lấy cảm hứng sinh học, robot hình người, v.v.
Ứng dụng động cơ Servo Robot cánh tay Hexapod Robot hình người
⇒ Robot vẽ Axidraw Việt Machine sử dụng động cơ servo: Xem tại đây
Cách thức hoạt động của Servo RC / cổ điển
Bên trong một servo cổ diển có bốn thành phần chính, động cơ DC, hộp số, biến trở và mạch điều khiển. Động cơ DC có tốc độ cao và mô-men xoắn thấp nhưng hộp số giảm tốc độ xuống khoảng 60 vòng / phút, đồng thời tăng mô-men xoắn.
Cách thức hoạt động của Servo bên trong các thành phần Mạch điều khiển chiết áp động cơ DC
Chiết áp được gắn trên bánh răng cuối cùng hoặc trục đầu ra, do đó động cơ cũng quay chiết áp, tạo ra một điện áp liên quan đến góc tuyệt đối của trục đầu ra. Trong mạch điều khiển, điện áp chiết áp này được so sánh với điện áp đến từ đường tín hiệu. Nếu cần, bộ điều khiển kích hoạt mạch cầu H tích hợp cho phép động cơ quay theo hai hướng cho đến khi hai tín hiệu đạt mức chênh lệch bằng không.
Một động cơ servo được điều khiển bằng cách gửi một loạt các xung qua đường tín hiệu. Tần số của tín hiệu điều khiển phải là 50Hz hoặc một chu kỳ xung là 20ms. Độ rộng của xung xác định vị trí góc của servo và các loại servo này thường có thể xoay 180 độ (chúng có giới hạn vật lý khi di chuyển).
Tín hiệu điều khiển động cơ RC Servo
Nói chung các xung có tại 1ms tương ứng với vị trí 0 độ, 1,5ms đến 90 độ và 2ms đến 180 độ. Mặc dù thời gian tối thiểu và tối đa của các xung đôi khi có thể thay đổi theo các loại khác nhau và chúng có thể là 0,5ms cho 0 độ và 2,5ms cho vị trí 180 độ.
Điều khiển động cơ Arduino Servo
Chúng ta hãy kiểm tra những thông tin trên và làm một ví dụ thực tế về điều khiển một servo cổ điển bằng Arduino. Tôi sẽ sử dụng MG996R, một động cơ servo mô-men xoắn cao có bánh răng kim loại với mô-men xoắn 10 kg-cm. Mô-men xoắn cao có dòng ổn định của servo là 2.5A. Dòng điện chạy từ 500mA đến 900mA và điện áp hoạt động từ 4,8 đến 7,2V.
Điều khiển động cơ Arduino Servo MG996R
Xếp hạng hiện tại cho thấy rằng chúng tôi không thể kết nối trực tiếp servo này với Arduino, nên chúng tôi phải sử dụng nguồn điện riêng cho nó. Đây là sơ đồ mạch cho ví dụ này.
Sơ đồ mạch điều khiển Arduino
Chúng ta chỉ cần kết nối chân điều khiển của servo với bất kỳ chân kỹ thuật số nào của board Arduino, kết nối Ground và dây dương với nguồn điện 5V bên ngoài, đồng thời kết nối ground của Arduino với chân GND của servo.
Code điều khiển động cơ Servo từ Arduino
Bây giờ chúng ta hãy xem code Arduino để điều khiển động cơ servo. Code rất đơn giản. Chúng ta chỉ cần xác định chân mà servo được kết nối, xác định chân đó là đầu ra và trong phần vòng lặp tạo ra các xung với chu kỳ và tần số cụ thể như chúng ta đã giải thích ở trên.
#define servoPin 9 void setup() { pinMode(servoPin, OUTPUT); } void loop() { // A pulse each 20ms digitalWrite(servoPin, HIGH); delayMicroseconds(1450); // Duration of the pusle in microseconds digitalWrite(servoPin, LOW); delayMicroseconds(18550); // 20ms – duration of the pusle // Pulses duration: 600 – 0deg; 1450 – 90deg; 2300 – 180deg }
Sau một số thử nghiệm, tôi đã đưa ra các giá trị sau trong khoảng thời gian các xung hoạt động với servo. Các xung có thời lượng 0,6ms tương ứng với vị trí 0 độ, 1,45ms đến 90 độ và 2,3ms đến 180 độ.
Tôi đã kết nối một thiết bị đo vạn năng nối tiếp với servo để kiểm tra dòng điện. Mức dòng điện tối đa mà tôi nhận thấy là lên tới 0,63A. Vâng, bởi vì đây không phải là bản gốc TowerPro MG996R, mà là bản sao rẻ hơn, rõ ràng có hiệu suất kém hơn.
Động cơ Servo MG996R
Tuy nhiên, chúng ta hãy xem một cách thuận tiện hơn để điều khiển các servo bằng Arduino. Đó là sử dụng thư viện Arduino Arduino.
#include
Servo myservo; // create servo object to control a servo void setup() { myservo.attach(9,600,2300); // (pin, min, max) } void loop() { myservo.write(0); // tell servo to go to a particular angle delay(1000); myservo.write(90); delay(500); myservo.write(135); delay(500); myservo.write(180); delay(1500); }
Ở đây chúng ta chỉ cần nạp thư viện, xác định đối tượng servo và sử dụng hàm attach() xác định chân mà servo được kết nối cũng như xác định giá trị tối thiểu và tối đa của thời lượng xung. Sau đó, bằng cách sử dụng hàm write (), chúng ta chỉ cần đặt vị trí của servo từ 0 đến 180 độ. Với thư viện này, chúng ta có thể điều khiển tới 12 servo cùng lúc hoặc 48 servo bằng cách sử dụng board Arduino Mega.
Trình điều khiển PWM / Servo Arduino và PCA9685
Ngoài ra còn có một cách khác để điều khiển servo bằng Arduino và đó là sử dụng trình điều khiển servo PCA9685. Đây là trình điều khiển servo và servo 16 kênh 12 bit, giao tiếp với Arduino bằng bus I2C. Nó có một đồng hồ tích hợp để có thể chạy 16 động cơ cùng lúc, hoặc độc lập với Arduino.
Trình điều khiển Servo Arduino và PCA9685
Chúng ta có thể xâu chuỗi lên tới 62 trình điều khiển này trên cùng một bus I2C. Vì vậy, về mặt lý thuyết, chúng ta có thể điều khiển tới 992 động cơ chỉ bằng hai chân I2C từ board Arduino. 6 chân chọn địa chỉ được sử dụng để đặt địa chỉ I2C khác nhau cho mỗi trình điều khiển bổ sung. Chúng ta chỉ cần kết nối các miếng hàn theo bảng này.
Địa chỉ PCA9685 Chọn Chân Board I2CAddress
Đây là sơ đồ mạch và chúng ta có thể nhận thấy rằng chúng ta cần một nguồn cung cấp điện riêng cho các servo.
Sơ đồ mạch Arduino và PCA9685
Các linh kiện cần thiết
- Động cơ Servo MG996R
- Trình điều khiển Servo PCA9685 PWM
- Board Arduino
- Nguồn cung cấp điện 5V- 6A DC
=> Nơi bán linh kiện điện tử chất lượng: Xem tại đây
Bây giờ hãy xem code Arduino. Để điều khiển trình điều khiển servo này, chúng ta sẽ sử dụng thư viện PCA9685 có thể tải xuống từ GitHub .
Code Arduino PCA9685
#include
#include “PCA9685.h” PCA9685 driver; // PCA9685 outputs = 12-bit = 4096 steps // 2.5% of 20ms = 0.5ms ; 12.5% of 20ms = 2.5ms // 2.5% of 4096 = 102 steps; 12.5% of 4096 = 512 steps PCA9685_ServoEvaluator pwmServo(102, 470); // (-90deg, +90deg) // Second Servo // PCA9685_ServoEvaluator pwmServo2(102, 310, 505); // (0deg, 90deg, 180deg) void setup() { Wire.begin(); // Wire must be started first Wire.setClock(400000); // Supported baud rates are 100kHz, 400kHz, and 1000kHz driver.resetDevices(); // Software resets all PCA9685 devices on Wire line driver.init(B000000); // Address pins A5-A0 set to B000000 driver.setPWMFrequency(50); // Set frequency to 50Hz } void loop() { driver.setChannelPWM(0, pwmServo.pwmForAngle(-90)); delay(1000); driver.setChannelPWM(0, pwmServo.pwmForAngle(0)); delay(1000); driver.setChannelPWM(0, pwmServo.pwmForAngle(90)); delay(1000); }
Trước tiên chúng ta cần bao gồm các thư viện và xác định đối tượng PCA9685. Sau đó, sử dụng đối tượng Servo_Evaluator xác định chu kỳ xung hoặc đầu ra PWM của trình điều khiển. Lưu ý rằng các đầu ra là 12 bit, độ phân giải 4096 bước. Vì vậy, thời gian xung tối thiểu là 0,5ms hoặc 0 độ sẽ tương ứng với 102 bước và thời lượng xung tối đa là 2,5ms hoặc 180 độ ở vị trí 512 bước. Nhưng như đã giải thích trước đó, các giá trị này sẽ được điều chỉnh theo động cơ servo của bạn. Trong trường hợp của tôi, giá trị từ 102 đến 470 tương ứng với vị trí 0 đến 180 độ.
Trong phần thiết lập, chúng ta cần xác định tốc độ xung I2C, đặt địa chỉ trình điều khiển và đặt tần số thành 50Hz.
Trong phần vòng lặp, sử dụng các hàm setChannelPWM () và pwmForAngle (), chúng ta chỉ cần đặt servo theo góc mong muốn.
Tôi đã kết nối một servo thứ hai với trình điều khiển và như tôi dự đoán, nó không ở vị trí giống như ban đầu, và đó là vì các động cơ mà tôi đang sử dụng là bản sao rẻ tiền và chúng không đáng tin cậy. Tuy nhiên, đây không phải là vấn đề lớn vì sử dụng phiên bản Servo_Evaluator, chúng ta có thể đặt các cài đặt đầu ra khác nhau cho mỗi servo. Chúng ta cũng có thể điều chỉnh vị trí 90 độ trong trường hợp nó không bắt đầu ở giữa. Theo cách đó, tất cả các servo sẽ hoạt động như nhau và vị trí góc chính xác.
Điều khiển nhiều servo với trình điều khiển PCA9685
Chúng ta sẽ tới một ví dụ nữa điều khiển nhiều servo với nhiều trình điều khiển PCA9685.
Điều khiển 22 động cơ Servo với Arduino và PCA9685
Với mục đích đó, chúng ta cần kết nối các trình điều khiển với nhau và kết nối địa chỉ phù hợp chọn miếng hàn. Đây là sơ đồ mạch:
Bây giờ chúng ta hãy xem code Arduino
#include
#include “PCA9685.h” PCA9685 driver; // PCA9685 outputs = 12-bit = 4096 steps // 2.5% of 20ms = 0.5ms ; 12.5% of 20ms = 2.5ms // 2.5% of 4096 = 102 steps; 12.5% of 4096 = 512 steps PCA9685_ServoEvaluator pwmServo(102, 470); // (-90deg, +90deg) // Second Servo PCA9685_ServoEvaluator pwmServo2(102, 310, 505); // (0deg, 90deg, 180deg) void setup() { Wire.begin(); // Wire must be started first Wire.setClock(400000); // Supported baud rates are 100kHz, 400kHz, and 1000kHz driver.resetDevices(); // Software resets all PCA9685 devices on Wire line driver.init(B000000); // Address pins A5-A0 set to B000000 driver.setPWMFrequency(50); // Set frequency to 50Hz } void loop() { driver.setChannelPWM(0, pwmServo.pwmForAngle(-90)); delay(1000); driver.setChannelPWM(0, pwmServo.pwmForAngle(0)); delay(1000); driver.setChannelPWM(0, pwmServo.pwmForAngle(90)); delay(1000); }
Vì vậy, chúng ta nên tạo đối tượng PCA9685 riêng cho từng trình điều khiển, xác định địa chỉ cho từng trình điều khiển cũng như đặt tần số thành 50Hz. Bây giờ chỉ cần sử dụng các hàm setChannelPWM () và pwmForAngle (), chúng ta có thể đặt bất kỳ servo nào ở bất kỳ trình điều khiển nào để định vị bất kỳ góc nào chúng ta muốn.
Dịch từ: https://howtomechatronics.com/how-it-works/how-servo-motors-work-how-to-control-servos-using-arduino/
Circuit
Servo motors have three wires: power, ground, and signal. The power wire is typically red, and should be connected to positive pole (+) of your power source. The ground wire is typically black or brown and should be connected to the negative pole (-) of your power source.
The signal pin is typically yellow or orange and should be connected to PWM pin on the board. In these examples, it is pin number 9.
Knob Circuit
For the Knob example, wire the potentiometer so that its two outer pins are connected to power (+5V) and ground, and its middle pin is connected to
on the board. Then, connect the servo motor as shown in the circuit below.
A0
Sweep Circuit
For the Sweep example, connect the servo motor as shown in the circuit below.
Programming the board
To program the board, you will need to have installed the offline editor, or use the online editor. There’s no need to install any external libraries.
Before we begin, let’s take a look at some of the core functions in the program:
-
– includes the Servo library.
#include
-
– create a servo object.
Servo myservo
-
– attach the servo to a pin.
myservo.attach(9)
-
– write a value to the servo (0-180).
myservo.write(pos)
The code can be found by navigating to File > Examples > Servo > Sweep, or can be copied directly from below. Upload the program to the board.
1#include
23Servo myservo; // create servo object to control a servo4// twelve servo objects can be created on most boards56int pos = 0; // variable to store the servo position78void setup() {9 myservo.attach(9); // attaches the servo on pin 9 to the servo object10}1112void loop() {13 for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees14 // in steps of 1 degree15 myservo.write(pos); // tell servo to go to position in variable ‘pos’16 delay(15); // waits 15ms for the servo to reach the position17 }18 for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees19 myservo.write(pos); // tell servo to go to position in variable ‘pos’20 delay(15); // waits 15ms for the servo to reach the position21 }22}
Conclusion
Congratulations! That was just a few easy steps to get started with standard servo motors. Now that you have this working, you can start exploring a lot of different cool projects that uses servo motors, and perhaps start making your very own robot!
Feel free to explore the Servo further.
Suggested changes
The content on docs.arduino.cc is facilitated through a public GitHub repository. You can read more on how to contribute in the contribution policy.
License
The Arduino documentation is licensed under the Creative Commons Attribution-Share Alike 4.0 license.
Using the SG90 Servo Motor With an Arduino
- Nick Koumaris
- http://educ8s.tv
- [email protected]
- 104.098 Views
- easy
- Tested
Hi guys, today, I will show you how to use a servo motor with an Arduino. This tutorial is ideal for beginners because it is easy and it gives them the foundation to build interesting projects like robots for which servos are commonly used.
Servo motors are high torque motors which are commonly used in robotics and several other applications due to the fact that it’s easy to control their rotation. Servo motors have a geared output shaft which can be electrically controlled to turn one (1) degree at a time. For the sake of control, unlike normal DC motors, servo motors usually have an additional pin asides the two power pins (Vcc and GND) which is the signal pin. The signal pin is used to control the servo motor, turning its shaft to any desired angle.
For this tutorial, we will be using the popular SG90 servo motor and our goal will be to rotate the servo motor from one end to the other.
Servo’s have high current requirement so when using more than one servo motor with the Arduino, it is important to connect their power connections to an external power supply as the Arduino may not be able to source the current needed for the servo. Since we will be using just one servo in this tutorial its fine to power it with an Arduino.
Required Components
The following components are required to build this project:
- SG90 Servo
- Cheap Arduino Uno
- Wires
- Breadboard
Each of these components can be bought via the link attached to them.
Schematics
The schematics for this project is quite simple as we will be connecting just the servo motor to the Arduino.
Servo motors generally have three pins/wires, this includes the VCC, GND, and the Signal pin. The Signal pin is the one used to feed the control signal from the microcontroller to the servo, to get the servo rotate to a particular angle.
Connect the Servo to the Arduino as shown in the schematics below.
For emphasis, the connection is further described below.
SG90 Servo – Arduino
VCC(Red wire) – 5V SIG(yellow/orange) – D8 GND(Black/Brown) – GND
The signal pin was connected to the digital pin 8 of the Arduino because it is a PWM pin. Servo directions are sent from the microcontroller to the servo motor as PWM pulses.
With the connection all done, we can now proceed to write the code for the project.
Code
The code for this project is quite easy thanks to the very comprehensive and concise servo.h library developed by the Arduino team to facilitate the use of servo motors in Arduino projects. The library makes it easy to turn the servo at different angles using a single command. The library comes pre-installed in the Arduino IDE removing the need for us to download and install.
We start the code for the project by including the libraries that we will use which in this case is the servo.h library.
#include
Next, we create an object of the library, to be used as a reference for controlling our servo motor throughout the code.
Servo servo;
With this done, we proceed to the void setup() function. we start the function by attaching the servo object created to pin D8 of the microcontroller, after which we center the servo, turning it to zero degrees.
void setup() { servo.attach(8); servo.write(angle); }
With that done, we are ready to move the servo in any direction we desire, and we will be doing this under the void loop function. Thanks, to the servo.h library all we need to do, to rotate the servo to an angle we desire, is to pass the desired angle as an argument into the servo.write() function. To demonstrate this, a for-loop was used to turn the servos at several angles in one direction and another loop was used to turn the servo back to where it started.
void loop() { // scan from 0 to 180 degrees for(angle = 10; angle < 180; angle++) { servo.write(angle); delay(15); } // now scan back from 180 to 0 degrees for(angle = 180; angle > 10; angle–) { servo.write(angle); delay(15); } }
The complete code for the project is available below and can be downloaded from the download section at the end of the tutorial.
#include
Servo servo; int angle = 10; void setup() { servo.attach(8); servo.write(angle); } void loop() { // scan from 0 to 180 degrees for(angle = 10; angle < 180; angle++) { servo.write(angle); delay(15); } // now scan back from 180 to 0 degrees for(angle = 180; angle > 10; angle–) { servo.write(angle); delay(15); } }
Demo
Copy the code above and upload to your Arduino and servo motor setup, after a few time, you should see the servo motor start turning as shown in the gif below.
That’s it for this tutorial guys, the code above can be expanded in several ways for use in different projects involving servo motors, what cool thing will you be building with the servo motor? feel free to share via the comment section.
The video tutorial for this project can be watched on youtube.
In your article on page https://www.electronics-lab.com/project/using-sg90-servo-motor-arduino/ is listed at “REQUIRED COMPONENTS”: Distance Sensor.But this sensor is not connected and how it works.
Hi, thanks for the share, just wanted to remind that Pin 8 is not a PWM pin.
I’dont understand that part. In every site I look (but this) they say you need pwm pin. But It works even if you use pin 2 or 8 for example, and they are not pwm.
Động cơ servo SG90 180 độ
SG90 servo motor 180 degrees
Mã sản phẩm: RK7A
Sản phẩm hiện đang còn hàng.
Xem chi nhánh còn hàng
Động cơ servo SG90. Điện áp hoạt động: 4.8-5VDC. Lực kéo: 1.6 Kg.cm. Trọng lượng: 9g.
- Cộng thêm 3 điểm tích lũy
-
TP.HCM: Miễn phí vận chuyển đơn hàng từ 300k
Tỉnh thành khác: Miễn phí vận chuyển đơn hàng từ 500k
Xem thêm các khuyến mãi vận chuyển khác.
Introduction: Arduino Servo Motors
Servo motors are great devices that can turn to a specified position.
Usually, they have a servo arm that can turn 180 degrees. Using the Arduino, we can tell a servo to go to a specified position and it will go there. As simple as that!
Servo motors were first used in the Remote Control (RC) world, usually to control the steering of RC cars or the flaps on a RC plane. With time, they found their uses in robotics, automation, and of course, the Arduino world.
Here we will see how to connect a servo motor and then how to turn it to different positions.
The first motor I ever connected to an Arduino, seven years ago, was a Servo motor. Nostalgic moment over, back to work!
We will need the following things:
- An Arduino board connected to a computer via USB
- A servo motor
- Jumper wires
There are few big names in the servo motor world. Hitec and Futaba are the leading RC servo manufacturers. Good places to buy them are Servocity, Sparkfun, and Hobbyking.
This instructable and many more can be found in my Arduino Development Cookbook available here. 😀
Testing it out
After we have successfully uploaded the code to the board, the standard servo should now start moving from 0 – 180, and then start moving from 180 – 0. This is due to the two for loops in the program, which gradually increases the
variable, which is written to the servo.
pos
Congratulations! That was just a few easy steps to get started with standard servo motors. Now that you have this working, you can start exploring a lot of different cool projects that uses servo motors, and perhaps start making your very own robot!
Step 1: How to Connect Them
A servo motor has everything built in: a motor, a feedback circuit, and most important, a motor driver. It just needs one power line, one ground, and one control pin.
Following are the steps to connect a servo motor to the Arduino:
- The servo motor has a female connector with three pins. The darkest or even black one is usually the ground. Connect this to the Arduino GND.
- Connect the power cable that in all standards should be red to 5V on the Arduino.
- Connect the remaining line on the servo connector to a digital pin on the Arduino.
Check the image for a view of the servo connected to the Arduino.
Servo Motor Basics with Arduino
Learn how to connect and control servo motors with your Arduino board.
The Servo Library is a great library for controlling servo motors. In this article, you will find two easy examples that can be used by any Arduino board.
The first example controls the position of an RC (hobby) servo motor with your Arduino and a potentiometer. The second example sweeps the shaft of an RC servo motor back and forth across 180 degrees.
You can also visit the Servo GitHub repository to learn more about this library.
Step 4: More Things About Servos
Controlling servos is easy, and here are a few more tricks we can use:
Controlling the exact pulse time
Arduino has a built-in function servo.write(degrees) that simplifies the control of servos. However, not all servos respect the same timings for all positions. Usually, 1 millisecond means 0 degrees, 1.5 milliseconds mean 90 degrees, and, of course, 2 milliseconds mean 180 degrees. Some servos have smaller or larger ranges.
For better control, we can use the servo.writeMicroseconds(us) function, which takes the exact number of microseconds as a parameter. Remember, 1 millisecond equals 1,000 microseconds.
More servos
In order to use more than one servo, we need to declare multiple servo objects, attach different pins to each one, and address each servo individually. First, we need to declare the servo objects—as many as we need:
// Create servo objects Servo Servo1, Servo2, Servo3;
Then we need to attach each object to one servo motor. Remember, every servo motor uses an individual pin:
Servo1.attach(servoPin1); Servo2.attach(servoPin2); Servo3.attach(servoPin3);
In the end, we just have to address each servo object individually:
Servo1.write(0); // Set Servo 1 to 0 degrees Servo2.write(90); // Set Servo 2 to 90 degrees
Connection-wise, the grounds from the servos go to GND on the Arduino, the servo power to 5V or VIN (depending on the power input), and in the end, each signal line has to be connected to a different digital pin. Contrary to popular belief, servos don’t need to be controlled by PWM pins—any digital pin will work.
Continuous rotation servos
There is a special breed of servos labelled as continuous rotation servos. While a normal servo goes to a specific position depending on the input signal, a continuous rotation servo either rotates clockwise or counter-clockwise at a speed proportional to the signal. For example, the Servo1.write(0) function will make the servomotor spin counter-clockwise at full speed. The Servo1.write(90) function will stop the motor and Servo1.write(180) will turn the motor clockwise at full speed.
There are multiple uses for such servos; however, they are really slow. If you are building a microwave and need a motor to turn the food, this is your choice. But be careful, microwaves are dangerous!
Sơ đồ đấu nối
Arduino Uno | Động cơ Servo SG90 |
5V | Dây màu đỏ |
GND | Dây màu đen |
D9 | Dây màu vàng |
Các linh kiện cần thiết cho dự án
TÊN LINH KIỆN | SỐ LƯỢNG | NƠI BÁN |
Arduino Uno R3 | Shopee | Cytron | |
Động cơ Servo SG90 | Shopee | Cytron | |
Dây cắm | 10-20 | Shopee | Cytron |
Breadboard | Shopee | Cytron |
Bài viết liên quan
- Bài 9: Cảm biến ánh sáng (Quang trở) cách chia điện áp trong môi trường Arduino
- Bài 8: Cảm biến góc nghiêng sử dụng ngắt (INTERRUPT) trong môi trường Arduino
- Bài 7: Cảnh báo nhiệt độ (LM35) bằng còi báo sử dụng Arduino Uno
- Bài 6: Tạo âm thanh (Còi) bằng Arduino
- Bài 5: Thay đổi màu sắc Led RGB sử dụng Arduino
- Bài 4: PWM | Thay đổi ánh sáng của LED trên Arduino
- Bài 3: Sử dụng Arduino làm hệ thống đèn giao thông
- Bài 2: Chớp tắt LED trên Arduino Uno (Phần 2)
- Bài 1: Chớp tắt LED trên Arduino Uno
Động cơ Servo hoạt động | điều khiển Servo bằng Arduino
LỰA CHỌN ĐỘNG CƠ BƯỚC
Lựa chọn động cơ bước, động cơ servo, động cơ hybrid và một số số phụ kiện đi kèm: Driver điều khiển, phanh từ hay hộp giảm tốc cho động cơ bước ⇒ XEM CÁC LOẠI ĐỘNG CƠ
♦ Xem thêm: Kiến thức về động cơ bước và cách điều khiển
Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách thức hoạt động của động cơ servo và cách điều khiển động cơ servo bằng trình điều khiển PWM Arduino và PCA9685. Bạn có thể xem video sau hoặc đọc hướng dẫn dưới đây.
Chi tiết sản phẩm
Động cơ servo SG90 có kích thước nhỏ, là loại được sử dụng nhiều nhất để làm các mô hình nhỏ hoặc các cơ cấu kéo không cần đến lực nặng.
Động cơ servo SG90 180 độ có tốc độ phản ứng nhanh, các bánh răng được làm bằng nhựa nên cần lưu ý khi nâng tải nặng vì có thể làm hư bánh răng, động cơ RC Servo 9G có tích hợp sẵn Driver điều khiển động cơ bên trong nên có thể dễ dàng điều khiển góc quay bằng phương pháp điều độ rộng xung PWM.
THÔNG SỐ KỸ THUẬT
- Điện áp hoạt động: 4.8-5VDC
- Tốc độ: 0.12 sec/ 60 deg (4.8VDC)
- Lực kéo: 1.6 Kg.cm
- Kích thước: 21x12x22mm
- Trọng lượng: 9g.
Phương pháp điều khiển PWM:
- Độ rộng xung 0.5ms ~ 2.5ms tương ứng 0-180 độ
- Tần số 50Hz, chu kỳ 20ms
Sơ đồ dây:
- Đỏ: Dương nguồn
- Nâu: Âm nguồn
- Cam: Tín hiệu
Kích thước Động cơ servo SG90 180 độ
Kết nối với arduino:
Hình ảnh sản phẩm
Code test with arduino:
unsigned int Gia_tri_moi; void setup() { TCCR1A = 0; TCCR1B = 0; // RESET lại 2 thanh ghi DDRB |= (1 << PB1); // Đầu ra PB1 là OUTPUT ( pin 9) TCCR1A |= (1 << WGM11); TCCR1B |= (1 << WGM12) | (1 << WGM13); // chọn Fast PWM, chế độ chọn TOP_value tự do ICR1 TCCR1A |= (1 << COM1A1); // So sánh thường( none-inverting) TCCR1B |= (1 << CS11); // P_clock=16mhz/8=2mhz // mỗi P_clock bằng 1/2mhz= 0.5 us OCR1A = 1060; Gia_tri_moi = OCR1A; // Value=1060 , tương đương xung có độ rộng 1060*0.5us=530us (0.53ms) // Value=4820, tương đương xung có độ rộng 4820*0.5us=2410us (2,41ms) ICR1 = 40000; // xung răng cưa tràn sau 40000 P_clock, tương đương (20ms) } void set(unsigned int x) { if (Gia_tri_moi != x) { OCR1A = x; Gia_tri_moi = OCR1A; } else { return; // thoát ngay } // x : 1060 – 4820 //Độ rộng: 0.53ms – 2.41 ms } void loop() { set(1060); // 0 độ delay(1000); set(4820); // 180 độ delay(1000); }
Nshopvn.com · 07/03/2019 10:46 AM
Động cơ servo SG90 180 độ giá chỉ 34.000₫
Examples
Knob
Controlling a servo position using a potentiometer (variable resistor).
1#include
23Servo myservo; // create servo object to control a servo45int potpin = 0; // analog pin used to connect the potentiometer6int val; // variable to read the value from the analog pin78void setup() {9 myservo.attach(9); // attaches the servo on pin 9 to the servo object10}1112void loop() {13 val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)14 val = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)15 myservo.write(val); // sets the servo position according to the scaled value16 delay(15); // waits for the servo to get there17}
Sweep
Sweeps the shaft of a RC servo motor back and forth across 180 degrees.
1#include
23Servo myservo; // create servo object to control a servo4// twelve servo objects can be created on most boards56int pos = 0; // variable to store the servo position78void setup() {9 myservo.attach(9); // attaches the servo on pin 9 to the servo object10}1112void loop() {13 for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees14 // in steps of 1 degree15 myservo.write(pos); // tell servo to go to position in variable ‘pos’16 delay(15); // waits 15ms for the servo to reach the position17 }18 for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees19 myservo.write(pos); // tell servo to go to position in variable ‘pos’20 delay(15); // waits 15ms for the servo to reach the position21 }22}
Suggested changes
The content on docs.arduino.cc is facilitated through a public GitHub repository. You can read more on how to contribute in the contribution policy.
License
The Arduino documentation is licensed under the Creative Commons Attribution-Share Alike 4.0 license.
Bài 10: Điều khiển động cơ RC Servo sử dụng Arduino
Tiếp tục trong chuỗi bài viết Khóa học lập trình Arduino Miễn Phí dành cho người nhập môn.
Trong bài viết hôm nay mình sẽ hướng dẫn các bạn làm thế nào để điều khiển góc của một động cơ Servo.
Để có thể hiểu một cách tốt nhất về động cơ RC Servo là gì? Cấu tạo và nguyên lý hoạt động ra làm sao. Các bạn xem bài viết bên dưới nhé.
Xem thêm: Động cơ RC Servo là gì?
Step 5: Check Out More
More topics regarding motors such as brushless, transistor drivers ormotor speed control can be found in my Arduino Development Cookbook available here. 😀
Basic servo control
In this tutorial, we will learn how to control a standard servo motor, to go back and forth across 180 degrees, using a `for loop()`. This is done with the help of the Servo library, which is pre-installed library in the Arduino IDE (both offline and online versions).
In this tutorial, we will learn how to control a standard servo motor, to go back and forth across 180 degrees, using a
. This is done with the help of the Servo library, which is pre-installed library in the Arduino IDE (both offline and online versions).
for loop()
Note: This tutorial uses an Arduino UNO, but you can use any official Arduino board.
Code:
#include
Servo myservo; int pos = 0; void setup() { myservo.attach(9); } void loop() { for(pos = 0; pos < 180; pos += 1){ myservo.write(pos); delay(15); } for(pos = 180; pos>=1; pos-=1) { myservo.write(pos); delay(15); } }
Gải thích code
#include
#include
Cho phép chương trình của bạn tải một thư viện đã được viết sẵn. Tức là bạn có thể truy xuất được những tài nguyên trong thư viện này từ chương trình của mình.
Servo myservo;
Khởi tạo đối tượng Servo và đặt tên là myservo.
Hàm attach()
Nếu các bạn theo dõi từ những bài trước và đã quen thuộc với hàm
pinMode()
thì hàm
attach()
ở đây cũng tương tự, dùng để khai báo chân kết nối.
Cú pháp
myservo.attach(pin);
Trong bài viết này mình dùng Pin D9 để điều khiển động cơ Servo. Các bạn có thể thay thế các chân Digital/Analog khác có trên Board mạch.
myservo.write(pos);
Dùng để ghi các dữ liệu ra và ở đây là xuất tọa độ ra cho servo.
Step 3: How It Works
Servos are clever devices. Using just one input pin, they receive the position from the Arduino and they go there. Internally, they have a motor driver and a feedback circuit that makes sure that the servo arm reaches the desired position. But what kind of signal do they receive on the input pin?
It is a square wave similar to PWM. Each cycle in the signal lasts for 20 milliseconds and for most of the time, the value is LOW. At the beginning of each cycle, the signal is HIGH for a time between 1 and 2 milliseconds. At 1 millisecond it represents 0 degrees and at 2 milliseconds it represents 180 degrees. In between, it represents the value from 0–180. This is a very good and reliable method. The graphic makes it a little easier to understand.
Remember that using the Servo library automatically disables PWM functionality on PWM pins 9 and 10 on the Arduino UNO and similar boards.
Code breakdown
The code simply declares the servo object and then initializes the servo by using the servo.attach() function. We shouldn’t forget to include the servo library. In the loop(), we set the servo to 0 degrees, wait, then set it to 90, and later to 180 degrees.
Powering Servo Motors
Servo motors have different power requirements depending on their size and the workload they are experiencing. A common servo motor such as the Feetech Mini Servo Motor requires between 4.8 – 6 V at 5 – 6 mA when idle. It doesn’t take very much energy to stand still.
But as soon as the motor starts moving, it starts using more energy, and it gets that energy by pulling more current from the power source.
If it experiences heavier loads such as added weight or an object blocking its movement , it naturally needs to use even more energy to move the obstacle, and as a result the current consumption increases. The current consumption of the motor linked above can reach up to 800 mA.
This high current-draw is generally not safe to draw from an Arduino board. To avoid damaging our board we need to power the servo motor through an external power supply. Choosing the correct power supply depends on the servo motor you are using, so always check the specifications. Pay especially close attention to the:
- operating voltage range
- idle current – consumption when not moving
- running current – consumption when moving freely
- stall current – consumption under max load or when blocked
To power a 4.8 – 6 V servo you could use a 5 V 1 A AC Adapter, cut the cable, and connect the wires to the servo using e.g. a breadboard.
Note that USB wall chargers are limited to 500 mA (USB 2.0) or 900 mA (USB 3.0).
If your project needs to move around freely without being attached to a power outlet you can also choose batteries to power the servo. If you need 5 V exactly you can use two 18650 Li-Ion batteries together with a step-down converter.
A step-down converter is needed because 18650 Li-Ion batteries will give you around 7.4 V. The max current depends on the specific battery but most of them are designed to output above 1A which is enough to power our small servo.
If you are using bigger or more servos make sure to check your power requirements accordingly.
Capacitors are recommended for powering servo motors. They help stabilize the power supply, minimize voltage drops, and reduce electrical noise. The specific capacitor values may vary based on the servo motor’s requirements, but including them is good practice for better performance and reliability.
When using a Feetech Mini Servo Motor we recommend using a 100 µF capacitor.
Because some capacitors are polarised (meaning that they have a direction), you may need to be careful with how you connect them to your circuit. Make sure to connect them correctly by checking for markings such as a white stripe, a ‘+’ symbol, or a longer lead. If your capacitor has these, match the indicators of the capacitor with your circuit (pay attention to the + and – signs), and be careful not to exceed the voltage limits. This precaution helps prevent issues like leaks or damage that could harm your circuit.
You can read more about capacitors here.
Standard servo motors
Standard servo motors are actuators that allow for precise control of position (angle). A typical characteristic is that the angle of the motor is 0 – 180 degrees. With other words, it can make one half of a rotation.
A standard servo motor, just as other motors, are essentially just a DC motor, but with some extra features:
- Control circuit for controlling the motor, e.g. setting the angle.
- Gears that transform speed into torque, which makes it capable of doing “heavy lifting” at a slower speed, as opposed to a regular DC motor that just spins very fast!
- Potentiometer that keeps track of its angle. This makes it possible for the servo to “know where it is”.
Take a look at the image below to see how a Servo looks like inside:
The different wires
Almost all servos come with a set of 3 wires. These are PWR, GND and Signal. For a very simple circuit, all that is needed is to connect each of these two pins on the Arduino:
- PWR (RED) – connects to 5V on the Arduino.
- GND (BLACK) – connects to GND on the Arduino.
- Signal (WHITE) – connects to a digital pin on the Arduino (typically 9).
Note: The color combination varies from servo to servo, but typically the red and black remains.
Note: Depending on what Arduino you are using, the signal pin may vary.
Step 2: Code
The following code will turn a servo motor to 0 degrees, wait 1 second, then turn it to 90, wait one more second, turn it to 180, and then go back.
// Include the Servo library#include
// Declare the Servo pin int servoPin = 3; // Create a servo object Servo Servo1; void setup() { // We need to attach the servo to the used pin number Servo1.attach(servoPin); } void loop(){ // Make servo go to 0 degrees Servo1.write(0); delay(1000); // Make servo go to 90 degrees Servo1.write(90); delay(1000); // Make servo go to 180 degrees Servo1.write(180); delay(1000); }
If the servo motor is connected on another digital pin, simply change the value of servoPin to the value of the digital pin that has been used.
Attachments
Keywords searched by users: mini servo motor arduino
Categories: Tìm thấy 19 Mini Servo Motor Arduino
See more here: kientrucannam.vn
See more: https://kientrucannam.vn/vn/