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.
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
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.
Động cơ Servo SG90 hoạt động như thế nào?
Quá trình hoạt động của động cơ Servo SG90 như sau:
Nhận tín hiệu điều khiển: Tín hiệu điều khiển PWM (Pulse Width Modulation) được cung cấp từ nguồn điều khiển, như Arduino. Tín hiệu này có thể được điều chỉnh trong khoảng từ 1 ms đến 2 ms và có chu kỳ là 20 ms.
Điều chỉnh vị trí: Bộ điều khiển nhận tín hiệu điều khiển và so sánh nó với vị trí hiện tại của động cơ được xác định bởi mạch phản hồi. Dựa trên sự khác biệt giữa vị trí yêu cầu và vị trí hiện tại, bộ điều khiển điều chỉnh tín hiệu điều khiển để tạo ra chuyển động quay của động cơ.
Phản hồi vị trí: Mạch phản hồi (potentiometer) gửi thông tin về vị trí hiện tại của động cơ cho bộ điều khiển. Bộ điều khiển sử dụng thông tin này để đảm bảo rằng động cơ đạt được vị trí yêu cầu và duy trì nó trong quá trình hoạt động.
Điều chỉnh liên tục: Quá trình điều chỉnh vị trí và phản hồi được thực hiện liên tục để duy trì độ chính xác và ổn định của vị trí đầu ra của động cơ.
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.
Tổng quan về động cơ Servo
Cấu tạo bên trong động cơ Servo SG90 Arduino bao gồm:
Động cơ DC: Động cơ DC chịu trách nhiệm tạo ra chuyển động quay của trục đầu ra. Điện áp được cấp vào động cơ để tạo ra xoắn (lực) xoay.
Hệ thống điều khiển: Hệ thống điều khiển bao gồm bộ điều khiển và mạch phản hồi. Bộ điều khiển nhận tín hiệu điều khiển từ nguồn điều khiển (như Arduino) và điều chỉnh tín hiệu đầu vào để kiểm soát chuyển động của động cơ. Mạch phản hồi (potentiometer) được gắn kết với trục đầu ra để cung cấp thông tin về vị trí hiện tại của động cơ.
Hệ thống giảm tốc: Động cơ Servo SG90 thường đi kèm với hệ thống giảm tốc để tăng lực xoắn và giảm tốc độ quay của động cơ. Hệ thống giảm tốc giúp đạt được độ chính xác cao hơn trong việc điều chỉnh vị trí.
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 | |
Biến trở 10K | Shopee | Cytron | |
Dây cắm | 10-20 | Shopee | Cytron |
Breadboard | Shopee | Cytron |
Code Arduino 2 – Điều khiển Servo bằng biến trở
Trong ví dụ này mình sẽ dùng một biến trở để điều khiển động cơ Servo SG90, chuẩn bị một biến trở 10K và đấu nối vào chân A0 trên mạch Arduino.
Sơ đồ đấu nối
Code
#include
int potPin = 0; int servoPin = 9; Servo servo; void setup() { servo.attach(servoPin); } void loop() { int reading = analogRead(potPin); int angle = map(reading, 0, 1023, 0, 180); servo.write(angle); }
Giải thích Code
int potPin = 0;
Khai báo biến potPin và gán giá trị là số chân kết nối với cảm biến potentiometer trên Arduino. Ở đây mình dùng chân A0.
int reading = analogRead(potPin);
Đọc giá trị từ cảm biến potentiometer thông qua chân potPin và lưu trữ giá trị đọc vào biến reading.
int angle = map(reading, 0, 1023, 0, 180);
Sử dụng hàm
map()
để chuyển đổi giá trị đọc từ cảm biến potentiometer (nằm trong khoảng 0 đến 1023) thành một giá trị góc tương ứng (nằm trong khoảng 0 đến 180). Kết quả được lưu trữ trong biến angle.
servo.write(angle);
Gửi giá trị góc angle tới động cơ Servo bằng cách sử dụng phương thức write(). Động cơ Servo sẽ quay đến góc tương ứng với giá trị góc angle.
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.
Code Servo SG90 Arduino 1 – Sweep
Mình sẽ sử dụng một ví dụ mẫu có trên Arduino IDE, chương trình Sweep sẽ thực hiện quá trình quét từ góc 0 đến 180 độ và sau đó quét lại từ 180 đến 0 độ.
#include
int servoPin = 9; Servo servo; int angle = 0; // servo position in degrees void setup() { servo.attach(servoPin); } void loop() { // scan from 0 to 180 degrees for(angle = 0; angle < 180; angle++) { servo.write(angle); delay(15); } // now scan back from 180 to 0 degrees for(angle = 180; angle > 0; angle–) { servo.write(angle); delay(15); } }
Giải thích Code
#include
Khai báo thư viện Servo vào chương trình Arduino.
int servoPin = 9;
Khai báo biến
servoPin
và gán giá trị là số chân kết nối với động cơ Servo trên Arduino.
Servo servo;
Khai báo một đối tượng servo từ lớp Servo, sẽ được sử dụng để điều khiển động cơ Servo.
int angle = 0; // servo position in degrees
Khai báo biến
angle
để lưu giữ góc quay hiện tại của động cơ Servo.
void setup() { servo.attach(servoPin); }
Hàm
setup()
được gọi một lần khi Arduino khởi động. Trong hàm này, gắn đối tượng servo với chân servoPin bằng cách sử dụng phương thức attach().
void loop() { // scan from 0 to 180 degrees for(angle = 0; angle < 180; angle++) { servo.write(angle); delay(15); } // now scan back from 180 to 0 degrees for(angle = 180; angle > 0; angle–) { servo.write(angle); delay(15); } }
Hàm
loop()
được thực thi liên tục sau khi Arduino khởi động. Trong hàm này, sẽ thực hiện quá trình quét từ góc 0 đến 180 độ và sau đó quét lại từ 180 đến 0 độ.
Các vấn đề thường gặp
Một vấn đề hay thường gặp ở động cơ Servo SG90 là khi sử dụng nguồn chung với Arduino, lúc khởi động hay bị Reset, lý do đơn giản là vì SG90 tiêu thụ điện năng khá lớn. Để giải quyết vấn đề này, các bạn cần mắc thêm một con tụ hóa (Tụ phân cực) ở đầu vào nguồn cấp. Sử dụng tụ có giá trị từ (470µF – 1000µF)
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₫
Arduino Servo Motor Basics and Control
“As an Amazon Associates Program member, clicking on links may result in Maker Portal receiving a small commission that helps support future projects.”
Servo motors can be found in robotic arms, cameras, lathes, CNC machines, printing presses, and other engineering applications where precision and repeated movement are required. Servo motors are often comprised of DC motors that use feedback mechanisms to move with great precision from one position to another. The low-cost servos that are found in maker projects use potentiometers to register voltages as positions on the rotating plane of the servo. Often, servo motors contain a series of gears that either speed up or slow down and smooth the movement of the DC motor. Lastly, servo motors use a circuit to control and send feedback information to a given controller, which in our case is an Arduino board (read more about servo motors here). In this tutorial, an Arduino board will be used to power and control a small servo motor. The basics and composition of an SG90 will be explored, and the application of several servo codes and applications will be given for another type of servo motor, the MG90S. The goal of this project is to introduce users into the workings of a servo motor, how PWM (pulse-width modulation) controls a servo motor, and how Arduino can interface with servo motors to produce desired movements to great precision.
The SG90 (datasheet here) is a 9 gram servo motor that can rotate 0 – 180 degrees (roughly) at a rate of about 0.3 seconds (0.1s/60 degrees). The SG90 is used in low-cost projects, typically with motorized vehicles and robotic arms. The SG90 is a great tool for education and prototyping – as it is inexpensive and easy-to-use. The SG90 is also compatible with the Arduino software, which will be used in this tutorial to rotate the servo in order to view how the gear reduction from the small DC motor gear to the larger and slower gear used in applications with the motor. See the next section for full Arduino wiring and code instructions.
Below is a series of photographs depicting the different components contained within a typical SG90 servo motor:
SG90 Micro Servo
Close-up of SG90 Gears
SG90 showing DC motor (left) and potentiometer (right, brass color)
SG90 from bottom showing DC motor and Circuit
A video of the gear reduction process is shown below, where the DC motor is sent through a gear reduction stage, with a stabilizing gear phase (the middle pole in the image above with the motor and potentiometer), and finally the slower rotating gear which is used for applications (the top gear). The video shows the SG90 under 5.0V powered by an Arduino board, rotating 1 degree roughly every 17 milliseconds for 90 degrees and then stopping.
In the next section, another servo motor, the MG90S, will be used to demonstrate wiring and control of the servo with an Arduino board.
The MG90S is another small servo motor that is similar to the SG90, but weighs slightly more (14g) and has metal gears instead of plastic. The MG90S is also slightly faster than the SG90, which is a further justification for why it is used here. Both the MG90S and the SG90 are wired the same and use similar code. Right out of the box, MG90S servos work with the prescribed Arduino ‘Servo’ code, which rotates the servo back and forth based on its built-in servo library. The Arduino library is a great place to start, as it really only requires a few lines of code. First, the servo needs to be wired to an Arduino board. The Arduino Uno board is used below. The MG90S technically has a working voltage input range of 4.8V – 6.0V, so any 5.0V Arduino should work, assuming it has pulse-width modulation (PWM) capabilities. Fortunately, the Arduino uses a 20ms PWM pulse in its servo library, which happens to be the period of the PWM pulse on both servos, so the programming needed to get the servos functioning is minimal.
The simple code to replicate the .gif in the previous section is given below. The process carries out the following procedure:
-
First, rotate to 0 degrees to determine the starting point of the motor
Infinite Loop:
-
Rotate to 90 degrees in about 3 seconds, wait 5 seconds
-
Rotate to 180 degrees in 3 seconds, wait 5 seconds
-
Rotate back to 90 degrees in 3 seconds, wait 5 seconds
-
Rotate back to 0 degrees in 3 seconds, wait 5 seconds
#include
Servo servo_1; // servo controller (multiple can exist) int servo_pin = 3; // PWM pin for servo control int pos = 0; // servo starting position void setup() { servo_1.attach(servo_pin); // start servo control } void loop() { for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees // in steps of 1 degree servo_1.write(pos); // tell servo to go to position in variable ‘pos’ delay(15); // delay to allow the servo to reach the desired position if (pos==90){ delay(5000); //wait 5 seconds once positioned at 90 degrees } } delay(5000); // wait 5 seconds after reaching 180 degrees for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees servo_1.write(pos); // tell servo to go to position in variable ‘pos’ delay(15); if (pos==90){ delay(5000); // wait 5 seconds once positioned at 90 degrees } } delay(5000); // wait 5 seconds after arriving back at 0 degrees }
Now that the basics of wiring and coding a servo have been introduced, more advanced topics on using and controlling servos can be explored. In this section, the focus will be on controlling a servo using the serial port. In short, an inputted angle to the serial port (in degrees) will tell the Arduino to turn the servo to the given position. This type of control could be useful for robotic arms, camera control, or any situation where the angle is known and needs to be changed according to a user’s direct input.
Some of the implementations used here have also been used in previous tutorial, where an RGB LED was controlled using the serial port on an Arduino. That tutorial can be found here where the control of Arduino pins is explored in great detail. Here, the focus is just on controlling a single Arduino pin to change the angle of the servo motor using pulse-width modulation.
#include
Servo servo_1; // servo controller (multiple can exist) int servo_pin = 3; // PWM pin for servo control int pos = 0; // servo starting position void setup() { servo_1.attach(servo_pin); // start servo control Serial.begin(9600); // start serial monitor servo_1.write(pos); // move servo to 0 degrees Serial.println(“Positioned at 0 Degrees”); Serial.println(“Input Desired Angle and Press Enter”); } void loop() { while (Serial.available()){ String in_char = Serial.readStringUntil(‘\n’); // read until the newline Serial.print(“Moving to: “); Serial.print(in_char); Serial.println(” Degrees”); servo_1.write(in_char.toInt()); // convert angle and write servo delay(in_char.toFloat()*(10.0/6.0)); // delay for maximum speed } }
Note: Ensure that the serial monitor is printing a ‘Newline’ every input (check next to 9600 baud)
The output of the code above should look something like this in the serial monitor:
Serial Monitor Output During Control of MG90S Servo
A video of the sequence above is shown below:
A joystick can also be used as a control tool for a servo. The methodology involves some geometry and understanding of how a joystick works, but it is not too complicated. A joystick rotates in a 2-D plane (most have a third dimension as well – force, but that will not be discussed here). Using Arduino again, we can record the x and y-direction movements of the joystick and translate them into angular movements.
The geometric motion of a joystick can be depicted as follows:
where the black dot in the triangle is the knob that is moved on a joystick, and the motion convention follows the arrows. The greek symbol θ represents the angle with which the joystick is operating, and will also determine where the servo motor will be positioned.
We can solve for θ using the tangent function:
An implementation of the angle has been carried out in Arduino using its ‘atan2()’ function which outputs the approximate angle between two directional components. Below is the full Arduino code that implements the inverse tangent for the joystick values. It also incorporates an offset which makes the movements of the joystick mimic the angular movements of the servo. The angle output by the inverse tangent spans the negative values, so the angle has been corrected to both rotate for negative values and mimic the rotational convention of the MG90S servo. Lastly, a jitter reduction routine is used to prevent the servo from moving too much without much joystick movement. All of this is part of the code below:
#include
#include
Servo servo_1; // servo controller (multiple can exist) int servo_pin = 3; // PWM pin for servo control int joy_pin_x = A0; // pin for x-dir joystick int joy_pin_y = A1; // pin for y-dir joystick int offset_x = 0; // subtracting the initial joystick x-location int offset_y = 0; // subtracting the initial joystick y-location int pos = 90; // servo starting position aligned with joystick int prev_deg = 0; // bound for reducing jitter int x_prev = 0; // bound for reducing jitter int y_prev = 0; // reducing jitter void setup() { servo_1.attach(servo_pin); // start servo control Serial.begin(9600); servo_1.write(pos); // move to center (joystick neutral) Serial.println(“Positioned at 90 Degrees”); offset_x = analogRead(joy_pin_x); // initial joystick x-val offset_y = analogRead(joy_pin_y); // initial joystick y-val } void loop() { int x_val = analogRead(joy_pin_x)-offset_x; // relative joystick x int y_val = analogRead(joy_pin_y)-offset_y; // relative joystick y if (abs(x_prev-x_val)<10 and abs(y_prev-y_val)<10){ // reduce jitter } else { x_prev = x_val; y_prev = y_val; float deg = 180-(int(atan2(x_val,y_val)*(180.0/PI))+90); // angle calc if (abs(deg-prev_deg)>2 and deg>0 and deg<180){ servo_1.write(deg); // move servo to joystick location delay(abs(deg-prev_deg)*(10.0/6.0)); prev_deg = deg; Serial.println(deg); // print out degree } } }
Servo motors are necessary for engineering applications both in the consumer market and industrial market. Servos can be found in aircraft, robotic arms, CNC machines, printers, cameras, and a multitude of other mechanically-functioning areas that require speed, precision, and effectiveness in control. In this tutorial, two servo motors were explored. One servo motor, the SG90, was used to demonstrate the inner components of a servo motor. The second servo, the MG90S, was used to demonstrate two particular applications of control. Using Arduino as the control point, the serial input was used as a way of inputting a desired angle and having the servo rotate to that position. Second, a joystick was used to respond to mechanical movements in two-dimensions, which were transformed into an angular response to make the servo rotate. This tutorial is the first entry in a series dedicated to motors and actuators, which will help engineers and makers explore the world of electromechanical movements.
See More in Arduino:
Hướng dẫn sử dụng động cơ Servo SG90 với Arduino
Động cơ Servo SG90 Arduino là một loại động cơ có kích thước khá nhỏ, giá thành thấp và được sử dụng rộng rãi trong lập trình Arduino. Nó được sử dụng trong một số dự án mình đã triển khai như: Robot dò line tránh vật cản, cánh tay Robot 4 bậc…
Trong bài viết hôm nay bạn sẽ học được gì? Sẽ nắm rõ hơn về cấu tạo cũng như nguyên lý hoạt động của động cơ Servo SG90. Qua đó sẽ thực hành bằng những chương trình đơn giản như quay động cơ một góc 180 độ và điều khiển góc quay thông qua một biến trở.
Để tạo động lực cho Team Arduino KIT ra nhiều bài viết chất lượng hơn, các bạn có thể ủng hộ mình bằng cách Donate qua MoMo, Ngân hàng, Paypal…Nhấn vào link bên dưới nhé.
Xem ngay: Động cơ RC Servo là gì?
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.
Độ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.
Using the SG90 Servo Motor With an Arduino
- Nick Koumaris
- http://educ8s.tv
- [email protected]
- 103.998 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.
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ì?
Keywords searched by users: micro servo 99 arduino
Categories: Phát hiện thấy 69 Micro Servo 99 Arduino
See more here: kientrucannam.vn
See more: https://kientrucannam.vn/vn/