Chuyển tới nội dung
Home » Servo Motor Mg996R Arduino | Arduino Servo Motor Control

Servo Motor Mg996R Arduino | Arduino Servo Motor Control

Servo Motor with Arduino | MG996 | SdevElectronics

Chi tiết sản phẩm

Động Cơ RC Servo MG996R (nâng cấp MG995) có momen xoắn lớn, đây là bản nâng cấp từ Động cơ RC servo MG995 về tốc độ, lực kéo và độ chính xác. Lực kéo ở 6V: 11kg. Phù hợp với máy bay cánh quạt loại 50 – 90 methanol và máy bay cánh cố định xăng 26cc-50cc. So với MG946R, MG996R nhanh hơn, nhưng hơi nhỏ hơn.

Video review sản phẩm

Thông số kỹ thuật của Động Cơ RC Servo MG996R

  • Servo MG996R (nâng cấp MG995) có momen xoắn lớn
  • Lực kéo ở 6V: 11kg
  • Đây là bản nâng cấp từ servo MG995 về tốc độ, lực kéo và độ chính xác
  • Phù hợp với máy bay cánh quạt loại 50 -90 methanol và máy bay cánh cố định xăng 26cc-50cc
  • So với MG946R, MG996R nhanh hơn, nhưng hơi nhỏ hơn.
  • Tên sản phẩm: MG996R
  • Trọng lượng sản phẩm: 55g
  • Kích thước sản phẩm: 40.7 * 19.7 * 42.9mm
  • Lực kéo: 9.4kg / cm (4.8V), 11kg / cm (6V)
  • Tốc độ xoay: 0.17 giây / 60 độ (4.8 v) 0.14 giây / 60 độ (6 v)
  • Điện áp làm việc: 4.8-7.2V
  • Nhiệt độ hoạt động: 0 ℃ -55 ℃
  • Dòng điện không tải: ~0.15A
  • Vật liệu bánh răng: Kim loại
  • Các mô hình thích hợp: Máy bay cánh cố định 50 – 90 methanol và máy bay cánh động cơ xăng 26cc-50cc

Hình ảnh Động Cơ RC Servo MG996R

Phản hồi khách hàng

Nshopvn.com · 07/03/2019 10:47 AM

Động Cơ RC Servo MG996R giá chỉ 90.000₫

In this tutorial we will learn how servo motors work and how to control servo motors with Arduino. Servo motors are very popular and widely used in many Arduino projects because they are easy to use and provide great position control.

Servos are great choice for robotics projects, automation, RC models and so on. I have already used them in many of my Arduino projects and you can check out some of them here:

  • DIY Arduino Robot Arm with Smartphone Control
  • Arduino Ant Hexapod Robot
  • DIY Arduino based RC Hovercraft
  • SCARA Robot | How To Build Your Own Arduino Based Robot
  • DIY Mars Perseverance Rover Replica – Arduino based Project

You can watch the following video or read the written tutorial below. It includes several examples how to use a servo motor with Arduino, wiring diagram and codes. In additional, it has a guide how to control multiple servo motors with Arduino using the PCA9685 PWM driver.

Dimensions and 3D Model

I made 3D models of the two most popular servo motors, the SG90 Micro Servo and the MG996R servo motor. You can download load them from the links below.

SG90 Micro Servo

3D Model: Download from Thangs.

Dimensions:

MG996R Servo Motor

MG996R Servo Motor 3D Model: Download from Thangs.

Dimensions:

Servo Motor with Arduino | MG996 | SdevElectronics
Servo Motor with Arduino | MG996 | SdevElectronics

Frequently Asked Questions (FAQs)

Using a servo motor with Arduino is quite easy. The servo motor has just 3 wires, two of which are GND and 5V for powering, and the third wire is the control line which goes to the Arduino board.

We can run servo motors directly from Arduino, but we might have power problems. If the servo motor draws more than 500mA of current, the Arduino board might lose it’s power and reset. It’s better to always use a separate power source for the servo motors.

Using the Arduino Servo library we can control up to 12 servo motors with most Arduino boards, and up to 48 servo motors with the Arduino Mega board. Of course, we need to use a dedicated power source for the servo motors.

Động cơ RC Servo MG996 là loại thường được sử dụng nhiều nhất trong các thiết kế Robot hoặc dẫn hướng xe. Động cơ RC Servo MG996 có lực kéo mạnh, các khớp và bánh răng được làm hoàn toàn bằng kim loại nên có độ bền cao, động cơ được tích hợp sẵn driver điều khiển động cơ bên trong theo cơ chế phát xung – quay góc nên rất dễ sử dụng.

Có rất nhiều chủng loại Động cơ RC Servo MG996 được bán trên thị trường với nhiều mức giá khác nhau, loại chất lượng tốt, phù hợp để làm Robot có các đặc điểm như sau:

  1. Loại chất lượng tốt luôn có hộp số được làm hoàn toàn bằng kim loại, có đầy đủ bộ phụ kiện như hình: (tròn, sao, chữ thập, 4 cánh, loại chất lượng không tốt có rất ít phụ kiện).
  2. Loại chất lượng tốt luôn có độ gì nặng khi bạn thử nghiệm bằng cách quay trục, thử nghiệm bằng cách gắn 1 trong các phụ kiện là các khớp nhựa vào động cơ, không cấp điện và quay bằng tay, loại chất lượng tốt có độ gì nặng, loại không tốt quay rất nhẹ nên cũng rất yếu.
  3. Loại chất lượng tốt có dây dẫn cứng hơn loại chất lượng kém do sử dụng dây dẫn nhiều lõi hơn.

Nếu Quý Khách có nhu cầu về lực kéo, độ bền và độ chính xác cao hơn nữa xin hãy sử dụng Động Cơ Digital RC Servo TowerPro MG996R Chính Hãng (Genuine).

Thông số kỹ thuật:

  • Chủng loại: Analog RC Servo.
  • Điện áp hoạt động: 4.8~6.6VDC
  • Lực kéo:

    • 3.5 kg-cm (180.5 ozin) at 4.8V-1.5A
    • 5.5 kg-cm (208.3 ozin) at 6V-1.5A
  • Tốc độ quay:

    • 0.17sec / 60 degrees (4.8V no load)
    • 0.13sec / 60 degrees (6.0V no load)
  • Kích thước: 40mm x 20mm x 43mm
  • Trọng lượng: 55g

Lưu ý: Không dùng dây bus Signal cấp nguồn cho Servo vì đường kính lõi dây rất nhỏ không tải dòng lớn được, có thể mua thêm Cáp nối dài Servo nếu cần.

Arduino example code.

Quý Khách lưu ý: hiện trên thị trường có nhiều loại động cơ MG996 chất lượng kém giá rẻ với hộp số bằng nhựa (trục chính màu đen), loại được bán tại Hshop.vn có hộp số bằng kim loại (trục chính màu vàng – Đồng) với chất lượng tốt và lực kéo khỏe hơn rất nhiều!

Thông tin sản phẩm được Hshop.vn tự xây dựng, nếu sử dụng xin vui lòng ghi rõ nguồn, xin cảm ơn!

I have a problem with a servo motor mg996R. I want to turn it to 90 degrees, stay one second and after this turn back to initial position, but it doesn’t make a perfect rotation. I can do a rotation of 90 degrees(not perfect), but I can’t turn it back.

Can you show us the Code?

The “degrees” of a servo rotation depend on the make and model of the actual servo, and may need some tweaking.

Better to use Servo.writeMicroseconds

This make a rotation of 90 degrees:servo.write(0);delay(500);servo.write(180);delay(1000);

I tried with this, but I can’t make a perfect rotation. I tried with random number until I make this rotation.servo.writeMicroseconds(1000);delay(500);servo.writeMicroseconds(1500);delay(800);servo.writeMicroseconds(2000);delay(600);

Do you have a protractor?

You could try an iterative approach to calibration

For a simple test:

#include

Servo MG996R;

const int middle = 90;

void setup() {MG996R.attach(10); //Arduino Pin 10}

void loop() {for(int pos = 0; pos <= middle; pos++){MG996R.write(pos);delay(10);}delay(1000);for(int pos = middle; pos >= 0; pos–){MG996R.write(pos);delay(10);}}

I tried. It makes a 180 rotation(not perfect), but turn to 180, make a short pause and go to 180. It doesn’t turn back.

That’s weird.If you can, try an other servo or add an extra 5V voltage source to increase the current.

Please post the COMPLETE working code that you are using and describe EXACTLY what it does. You started saying you want to move 90 degrees then back but most of your code snippets go to 180. Which is it?

You’re not trying to power that powerful servo from the Arduino 5V pin are you? Or through a breadboard? Either of those can cause problems.

Steve

I power the servo from Arduino 5V pin. In my project I have an arduino UNO, a servo motor mg996R(360 degrees) and an ultrasonic sensor.I want to turn it to 90 degrees, stay one second and after this turn back to initial position. This code make a 90 rotation and turn back, but not perfectly. For first 3-4 rotations it’s ok, after it there is an angle deviation.


#include

const int TRIG_PIN = 6; const int ECHO_PIN = 7; const int SERVO_PIN = 9; const int DISTANCE_THRESHOLD = 10; Servo servo; float duration; float distance; int pos = 0; const int middle = 90; float calculateDistance(){ digitalWrite(TRIG_PIN, LOW); delayMicroseconds(5); digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); duration = pulseIn(ECHO_PIN, HIGH); distance= 0.017 * duration; return distance; } void setup() { // put your setup code here, to run once: Serial.begin(9600); pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); //pinMode(SERVO_PIN, OUTPUT); servo.attach(SERVO_PIN); // servo.write(90); } void loop() { // put your main code here, to run repeatedly: distance = calculateDistance(); if(distance < DISTANCE_THRESHOLD){ servo.attach(SERVO_PIN); servo.writeMicroseconds(1000); delay(500); servo.writeMicroseconds(1500); delay(800); servo.writeMicroseconds(3500); delay(450); } else servo.detach(); Serial.print("distance: "); Serial.print(distance); Serial.println(" cm"); }

Why the detach?

Please remember to use code tags when posting code.


float calculateDistance(){

Why bother returning a global variable?

If I don’t use detach() the servo rotate continuous without stopping.

There’s your problem then. You need a proper servo for the task, not a continuously rotating one.

You can never get accurate positional control with a continuous rotation/360 degree servo. The feed back mechanism that enables control of position has been removed to allow it to keep rotating. The write() command just changes the direction and speed of rotation. 0 full speed one way, 90 stop, 180 full speed the other way.

Get a normal MG996R (NOT a 360) and it will do what you want.

Steve

Ok, I got it. Thanks a lot!

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.

MG 996R Servo Motor

The MG 996R is a popular servo motor within the Arduino Community. In contrast to the likewise popular SG90 servo, the MG 996R is able to rotate much higher weights. For example, you can see the MG 996R very frequently in 3D-printed robotic arm applications.

Technical specification

Name Value
Dimensions ca. 40.7 x 19.7 x 42.9 mm
Weight ca. 55g
Operating voltage 4.8 V – 6.6 V
Operating current ca. 600 – 1500mA
Stall torque 9.4 kg/cm (4.8V); 11 kg/cm (6V)
Operating speed 0.19 s/60º (4.8 V), 0.15 s/60º (6 V)
Angle 0-180°
Arduino | Chi tiết cách sử dụng động cơ Servo
Arduino | Chi tiết cách sử dụng động cơ Servo

Troubleshooting

Servo motor jitters and resets my Arduino board

This is a common problem with these hobby servo motors, the SG90 Micro Servo and the MG996R. The reason for this is that, as mentioned earlier, they can draw quite significant amount of current when they are at load. This can cause the Arduino board to reset, especially if you are powering the servo directly from the Arduino 5V pin.

In order to solve this issue you can use a capacitor across the GND and the 5V pin. It will act as a decouple capacitor which will provide additional current to the system at start up when the DC motor starts.

Servo motor won’t move entire range from 0 to 180 degrees

This is another common problem with these hobby servos. As we explained earlier, a pulse width of 1ms (0.5ms) corresponds to 0 degrees position, and 2ms (2.5ms) to 180 degrees. However, these values can vary from servo to servo and between different manufacturers.

In order to solve this problem, we need to adjust the pulse width we are sending to the servo motor with the Arduino. Luckily, using the Arduino Servo library we can easily adjust the pulse widths values in the attach() function.

The attach() function can take two additional parameters, and that’s the minimum and maximum pulse width in microseconds. The default values are 544 microseconds (0.544milliseconds) for minimum (0 degrees) angle, and 2400 microseconds (2.4ms). So by adjusting these values we can fine tune the moment range of the servo.


myservo.attach(9,600,2300); // (pin, min, max)

Code language: Arduino (arduino)

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/

Động cơ Servo MG996R

  • Động cơ Servo MG996R có thể xoay được một góc bất kỳ từ 0 – 180 độ hoặc 0 – 360 độ/. Sản phẩm có kích thước nhỏ gọn và có độ bền, lực kéo khỏe hơn rất nhiều so với động cơ Servo MG90S thông thường.

  • Sản phẩm phù hợp để ứng dụng vào các ứng dụng sáng tạo như làm cánh tay robot chuyển động, làm robot nhện, cơ cấu quay góc,… tùy vào sở thích của người dùng.

YIDI How to use test 180 degree servo motor SG90 MG90S MG945 MG946R MG995 MG996R
YIDI How to use test 180 degree servo motor SG90 MG90S MG945 MG946R MG995 MG996R

Arduino Code

Quick Steps

  • Connect Arduino to PC via USB cable
  • Open Arduino IDE, select the right board and port
  • Copy the above code and open with Arduino IDE
  • Click Upload button on Arduino IDE to upload code to Arduino
  • See the result: Servo motor rotates slowly from 0 to 180° and then back rotates slowly from 180 back to 0°

Code Explanation

Read the line-by-line explanation in comment lines of code!

Servo Motor Control Arduino Code

Now let’s take a look at the Arduino code for controlling the servo motor. The code is very simple. We just need to define the pin to which the servo is connect, define that pin as an output, and in the loop section generate pulses with the specific duration and frequency as we explained earlier.


/* Servo Motor Control - 50Hz Pulse Train Generator by Dejan, https://howtomechatronics.com */ 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 }

Code language: Arduino (arduino)

After some testing I came up with the following values for the duration of the pulses that work with my servo. Pulses with 0.6ms duration corresponded to 0 degrees position, 1.45ms to 90 degrees and 2.3ms to 180 degrees.

I connected a multimeter in series with the servo to check the current draw. The maximum current draw that I noticed was up to 0.63A at stall. Well that’s because this isn’t the original TowerPro MG996R servo, but a cheaper replica, which obviously has worse performance.

Nevertheless, let’s take a look at a more convenient way of controlling servos using Arduino. That’s using the Arduino servo library.


/* Servo Motor Control using the Arduino Servo Library by Dejan, https://howtomechatronics.com */ 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); }

Code language: Arduino (arduino)

Here we just need to include the library, define the servo object, and using the attach() function define the pin to which the servo is connected as well as define the minimum and maximum values of the pulses durations. Then using the write() function we simply set the position of the servo from 0 to 180 degrees.

Valve with servo MG996R
Valve with servo MG996R

Mua sản phẩm

2. Thông số kỹ thuật

  • Thông số kỹ thuật của động cơ Servo MG996R

    • Lực kéo ở điện áp 6V ~ 11kg

    • Có momen xoắn lớn

    • Điện áp hoạt động: 4,8 ~ 7.2V

    • Bánh răng: Kim loại

    • Trọng lượng: Khoảng 55g

  • Sơ đồ dây nối:

    • Màu đỏ: Dương nguồn

    • Màu nâu: Âm nguồn

    • Màu cam: Truyền tín hiệu

About Servo Motor

The MG996R servo motor is a high-torque servo motor capable of lifting up to 15kg in weight. The motor can rotate its handle from 0° to 180°, providing precise control of angular position. For basic information about servo motors, please refer to the Arduino – Servo Motor tutorial.

Pinout

The MG996R servo motor used in this example includes three pins:

  • VCC pin: (typically red) needs to be connected to VCC (4.8V – 7.2V)
  • GND pin: (typically black or brown) needs to be connected to GND (0V)
  • Signal pin: (typically yellow or orange) receives the PWM control signal from an Arduino’s pin.
Using Servo Motors with Arduino
Using Servo Motors with Arduino

Arduino and PCA9685 PWM/ Servo Driver

There’s also another way of controlling servos with Arduino, and that’s using the PCA9685 servo driver. This is a 16-Channel 12-bit PWM and servo driver which communicates with Arduino using the I2C bus. It has a built in clock so it can drive 16 servos free running, or independently of Arduino.

What’s even cooler we can daisy-chain up to 62 of these drivers on a single I2C bus. So theoretically we can control up to 992 servos using only the two I2C pins from the Arduino board. The 6 address select pins are used for setting different I2C addressed for each additional driver. We just need to connect the solder pads according to this table.

Here’s the circuit schematic and we can once again notice that we need a separate power supply for the servos.

You can get the components needed for this example from the links below:

  • MG996R Servo Motor …………………………. Amazon / Banggood / AliExpress
  • PCA9685 PWM Servo Driver ………………. Amazon / Banggood / AliExpress
  • Arduino Board ……………………………………. Amazon / Banggood / AliExpress
  • 5V 6A DC Power Supply …………………..….. Amazon / Banggood / AliExpress

Disclosure: These are affiliate links. As an Amazon Associate I earn from qualifying purchases.

Now let’s take a look at the Arduino code. For controlling this servo driver we will use the PCA9685 library which can be downloaded from GitHub.

Arduino and PCA9685 Code


/* Servo Motor Control using Arduino and PCA9685 Driver by Dejan, https://howtomechatronics.com Library: https://github.com/NachtRaveVL/PCA9685-Arduino */ 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); }

Code language: Arduino (arduino)

So first we need to include the libraries and define the PCA9685 object. Then using the Servo_Evaluator instance define the pulses duration or the PWM output of the driver. Note that the outputs are 12-bit, or that’s a resolution of 4096 steps. So the minimum pulse duration of 0.5ms or 0 degrees position would correspond to 102 steps, and the maximum pulse duration of 2.5ms or 180 degrees position to 512 steps. But as explained earlier these values should be adjusted according your servo motor. I had value from 102 to 470 which corresponded to 0 to 180 degrees position.

In the setup section we need to define the I2C clock rate, set the driver address and set the frequency to 50Hz.

In the loop section, using the setChannelPWM() and pwmForAngle() functions we simply set the servo to the desired angle.

I connected a second servo to the driver, and as I expected, it wasn’t positioning the same as the first one, and that’s because the servos that I’m using are cheap copies and they are not so reliable. However, this isn’t a big problem because using the Servo_Evaluator instance we can set different output settings for each servo. We can also adjust the 90 degrees position in case it’s not precisely in the middle. In that way all servos will work the same and position at the exact angle.

Controlling a lot of servos with Arduino and the PCA9685 drivers

We will take a look at one more example and that’s controlling a lot of servos with multiple chained PCA9685 drivers.

For that purpose we need to connect the drivers to each other and connect the appropriate address select solder pads. Here’s the circuit schematic:

Let’s take a look at the Arduino code now.


/* Servo Motor Control using Arduino and PCA9685 Driver by Dejan, https://howtomechatronics.com Library: https://github.com/NachtRaveVL/PCA9685-Arduino */ 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); }

Code language: Arduino (arduino)

So we should create separate PCA9685 object for each driver, define the addresses for each driver as well as set the frequency to 50Hz. Now simply using the setChannelPWM() and pwmForAngle() functions we can set any servo at any driver to position any angle we want.

Popular RC / Hobby Servos for Arduino Projects

There are many different models and manufacturers of RC or hobby. The main consideration when choosing a servo motor is its torque, operating voltage, current draw and size.

Here are the two most popular servo models among makers, the SG90 Micro Servo and the MG996R.

SG90 Micro Servo technical specifications:

Stall Torque 1.2kg·cm @4.8V, 1.6kg·cm @6V,
Operating Voltage 3.5 – 6V
No Load Current 100mA
Stall Current 650mA
Max Speed 60 degrees in 0.12s
Weight 9g

MG996R Servo technical specifications:

Stall Torque 11kg.cm @4.8v, 13kg.cm @6V
Operating Voltage 4.8 – 7.2V
No Load Current 220mA @4.8V, 250mA @6V
Stall Current 650mA
Max Speed 60 degrees in 0.20s
Weight 55g
Fix Servo Motor 180 Deg Only Turn 90 Deg MG995 Arduino Nodemcu ESP8266
Fix Servo Motor 180 Deg Only Turn 90 Deg MG995 Arduino Nodemcu ESP8266

Example application

The example application is kept very simple. The motor rotates to four different positions with a delay of one second in between. If the motor has completed the last position, the sequence starts again.

Wiring

The motor has three wires: Brown (GND), Red (+5V) and Orange (PWM signal). Unfortunately, the motor can’t be directly powered from the Arduino. The motor will likely draw to much current from the Arduino. As a consequence, the Arduino might get damaged. In order to overcome this problem, I wired the motor to an external power supply.

In particular, I took a 5V USB power supply (power bank) to power the motor. For the wiring, I made use of a USB terminal adapter. The “-” signal from the USB terminal adapter is wired to the brown input of the servo motor. Accordingly, the “+” signal is wired to the servo’s red input. In order to guarantee the same signal level, the terminal adapter’s “-” signal is wired to one of the Arduino’s GND pins. Luckily, it is easily possible to connect two male jumper wires to a single terminal block of the adapter.

Next, Arduino’s pin #3 is wired to the orange input of the servo motor.

MG 996R wire color Description Connected to
Brown GND USB Power Bank “-” and Arduino GND
Red +5V (Powering the motor directly from the Arduino, might damage the Arduino) USB Power Bank “+”
Orange PWM signal Arduino Pin #3

Example source code

I made use of the servo library to control the MG 996R motor. In the setup function, pin number 3 is made known to the servo object.

In the loop function, the motor is rotated to four different positions by the write method.

/* MIT License Copyright 2021 Michael Schoeffler (https://www.mschoeffler.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* * Example source code of an Arduino tutorial on how to control an MG 996R servo motor. */ #include

Servo servo; // servo object representing the MG 996R servo void setup() { servo.attach(3); // servo is wired to Arduino on digital pin 3 } void loop() { servo.write(0); // move MG996R’s shaft to angle 0° delay(1000); // wait for one second servo.write(45); // move MG996R’s shaft to angle 45° delay(1000); // wait for one second servo.write(90); // move MG996R’s shaft to angle 90° delay(1000); // wait for one second servo.write(135); // move MG996R’s shaft to angle 135° delay(1000); // wait for one second servo.write(180); // move MG996R’s shaft to angle 180° delay(1000); // wait for one second }

If everything has been correctly executed, the motor should start moving.

Arduino – MG996R

In this tutorial, we are going to learn how to use the MG996R high-torque servo motor with Arduino.

How Servo Motors Work?

There are four main components inside of a hobby servo, a DC motor, a gearbox, a potentiometer and a control circuit. The DC motor is high speed and low torque but the gearbox reduces the speed to around 60 RPM and at the same time increases the torque.

The potentiometer is attached on the final gear or the output shaft, so as the motor rotates the potentiometer rotates as well, thus producing a voltage that is related to the absolute angle of the output shaft. In the control circuit, this potentiometer voltage is compared to the voltage coming from the signal line. If needed, the controller activates an integrated H-Bridge which enables the motor to rotate in either direction until the two signals reach a difference of zero.

A servo motor is controlled by sending a series of pulses through the signal line. The frequency of the control signal should be 50Hz or a pulse should occur every 20ms. The width of pulse determines angular position of the servo and these type of servos can usually rotate 180 degrees (they have a physical limits of travel).

Generally pulses with 1ms duration correspond to 0 degrees position, 1.5ms duration to 90 degrees and 2ms to 180 degrees. Though the minimum and maximum duration of the pulses can sometimes vary with different brands and they can be 0.5ms for 0 degrees and 2.5ms for 180 degrees position.

Read More: Stepper Motors and Arduino – The Ultimate Guide

How to control High Torque Servo motor from Arduino - Beginners  Robotics
How to control High Torque Servo motor from Arduino – Beginners Robotics

Conclusion

So, we have covered almost everything we need to know about using servo motors with Arduino. Of course, there are some many manufacturers and models of these type of hobby or RC servo motors, and each of them has its own unique features that might differ from what we explained above.

The possibilities for creating awesome robotics, automation and RC projects using motors are endless, however choosing the right model for your application is very important.

I hope you enjoyed this tutorial and learned something new. Feel free to ask any question in the comments section below, as well as make sure you can my Arduino Projects Collection.

Controlling Multiple Servo Motors with Arduino

The Arduino servo library supports controlling of up to 12 servos at the same time with most the Arduino boards, and 48 servos using the Arduino Mega board. On top of that, controlling multiple servo motors with Arduino is as easy as controlling just a single one.

Here’s an example code for controlling multiple servos:


/* Controlling multiple servo motors with Arduino by Dejan, https://howtomechatronics.com */ Servo servo1; Servo servo2; Servo servo3; Servo servo4; Servo servo5; void setup() { servo1.attach(8); servo2.attach(9); servo3.attach(10); servo4.attach(11); servo5.attach(12); } void loop() { // move all servos to position 0 servo1.write(0); servo2.write(0); servo3.write(0); servo4.write(0); servo5.write(0); delay(2000); // move all servos to position 90 servo1.write(90); servo2.write(90); servo3.write(90); servo4.write(90); servo5.write(90); delay(2000); // move all servos to position 180 servo1.write(180); servo2.write(180); servo3.write(180); servo4.write(180); servo5.write(180); delay(2000); }

Code language: Arduino (arduino)

So, we just have to create objects from the Servo class for each servo motor, and define to which Arduino pin is connected. Of course, we can set any servo to move to any position, at any time.

As an example you can also check my Arduino Ant Hexapod Robot project where I used an Arduino MEGA board to control 22 servo motors.

Servo MG996R, Arduino Uno
Servo MG996R, Arduino Uno

Hướng dẫn lập trình Arduino

  • Mở phần mềm Arduino IDE. Xem hướng dẫn lập trình với Arduino tại đây.

  • Copy đoạn code sau, click vào nút


    Verify

    để kiểm tra lỗi chương trình. Sau khi biên dịch không báo lỗi, bạn có thể nạp đoạn code vào board.

    • Điều khiển Servo 180 độ:

#include “YoloBit.h” #include

YoloBit yolobit; // Điều khiển servo 180, quay liên tục từ góc 0 đến 180 độ và ngược lại. Servo myservo; int pos = 0; // lưu vị trí của servo void setup() { myservo.attach(P4); // kết nối servo vào chân P4 } void loop() { for (pos=0; pos<=180; pos++) { // từ 0 đến 180 độ myservo.write(pos); delay(15); } // Đảo ngược quá trình từ 180 đến 0 độ for (pos=180; pos>=0; pos–) { myservo.write(pos); delay(15); } }

  • Điều khiển Servo 360 độ:

#include

#include “Yolobit.h” Servo myservo; Yolobit yolobit; int pos = 0; int Control_Pin = P4; void setup() { // Điều khiển servo qua chân P4 của Yolobit myservo.attach(Control_Pin ); // Servo ở trạng thái đứng yên, ở góc 90 độ myservo.write(90); } void loop() { // Servo quay về vị trí tối đa ở góc 180 độ trong 1 giây myservo.write(180); delay(1000); // Servo ở trạng thái đứng yên trong 1 giây myservo.write(90); delay(1000); // Servo quay về vị trí tối đa ở góc 0 độ trong 1 giây myservo.write(0); delay(1000); // Servo ở trạng thái đứng yên trong 1 giây myservo.write(90); delay(1000); }

A servo motor allows to precisely control a shaft to a specific rotary position. The MG 996R is one of the most popular servo motors within the maker community. This tutorial shows how to wire the MG 996R servo to an Arduino. Moreover, this tutorials includes a simple code example that let’s the motor rotate to various rotary positions.

Related products

MG 996R servo motor
Arduino Uno
Jumper Wires
USB power bank
USB terminal adapter

What is Servo Motor?

A servo motor is a closed-loop system that uses position feedback to control its motion and final position. There are many types of servo motors and their main feature is the ability to precisely control the position of their shaft.

In industrial type servo motors the position feedback sensor is usually a high precision encoder, while in the smaller RC or hobby servos the position sensor is usually a simple potentiometer. The actual position captured by these devices is fed back to the error detector where it is compared to the target position. Then according to the error the controller corrects the actual position of the motor to match with the target position.

In this tutorial we will take a detailed look at the hobby servo motors. We will explain how these servos work and how to control them using Arduino.

Hobby servos are small in size actuators used for controlling RC toys cars, boats, airplanes etc. They are also used by engineering students for prototyping in robotics, creating robotic arms, biologically inspired robots, humanoid robots and so on.

How Servo Motors Work & How To Control Servos using Arduino
How Servo Motors Work & How To Control Servos using Arduino

Kết nối

  • Bước 1: Chuẩn bị các thiết bị như sau, đối với động cơ MG996R cần có thêm pin 8.4V 18650.

Máy tính lập trình Yolo:Bit

Mạch mở rộng cho Yolo:Bit

Động cơ Servo MG996R

Pin 18650

  • Bước 2: Cắm Yolo:Bit vào mạch mở rộng

  • Bước 3: Kết nối pin 18650 vào mạch mở rộng

  • Bước 4: Kết nối servo vào chân P4 trên mạch mở rộng

Độ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.

Servo Motors, how do they work?
Servo Motors, how do they work?

Hướng dẫn lập trình với OhStem App

  • Đối với động cơ servo 180 độ:

Note

Khi sau khi xác định vị trí góc của servo, bằng câu lệnh trong khối bắt đầu. Bạn hãy nhấn nút để xem sự di chuyển của cánh servo.

  • Đối với động cơ servo 360 độ:

    • Sử dụng khối lệnh sau trong danh mục CHÂN CẮM, để điều khiển:

    • Động cơ servo 360, sẽ có các chế độ hoạt động như sau:

      • Tốc độ 0: Đứng yên

      • Tốc độ 100: Tối đa

      • Tốc độ -100 – 0: Động cơ quay ngược chiều kim đồng hồ

      • Tốc độ 0- 100: Động cơ quay cùng chiều kim đồng hồ

    • Gửi chương trình sau xuống Yolo:Bit, để kiểm tra hoạt động của servo:

Note

Chương trình được ứng dụng vào các dự án như sáng tạo bánh xe robot, ròng rọc của cáp treo…

Arduino Servo Motor Control

Let’s put the above said to test and make a practical example of controlling a hobby servo using Arduino. I will use the MG996R which is a high-torque servo featuring metal gearing with stall torque of 10 kg-cm. The high torque comes at a price and that’s the stall current of the servo which is 2.5A. The running current is from 500mA to 900mA and the operating voltage is from 4.8 to 7.2V.

The current ratings indicate that we cannot directly connect this servo to the Arduino, but we must use a separate power supply for it.

Circuit Diagram

Here’s the circuit diagram for this example.

We simply need to connect the control pin of the servo to any digital pin of the Arduino board, connect the Ground and the positive wires to the external 5V power supply, and also connect the Arduino ground to the servo ground.

In case we use a smaller hobby servo, the S90 Micro Servo, it’s possible to power it directly from the 5V Arduino pin.

The S90 Micro Servo has lower current consumption, around 100-200mA no-load running current, but around 500-700mA stall current. On the other hand, the Arduino 5V pin can output only around 500mA if powered via USB, or up to 1A in powered via the barrel connector.

Even though it’s possible to run these 9g servo motors directly to Arduino, for more stable work I would suggest to always use an external power supply for them.

You can get the components needed for this example from the links below:

  • MG996R Servo Motor …………………………. Amazon / Banggood / AliExpress
  • or S90 Micro Servo ………..…………………… Amazon / Banggood / AliExpress
  • Arduino Board ……………………………………. Amazon / Banggood / AliExpress
  • 5V 2A DC Power Supply …………………..….. Amazon / Banggood / AliExpress

Disclosure: These are affiliate links. As an Amazon Associate I earn from qualifying purchases.

16 channel servo controller with Arduino | PCA9685 16 channel PWM servo motor driver tutorial
16 channel servo controller with Arduino | PCA9685 16 channel PWM servo motor driver tutorial

Video Tutorial

We are considering to make the video tutorials. If you think the video tutorials are essential, please subscribe to our YouTube channel to give us motivation for making the videos.

Động Cơ RC Servo MG996R

MG996R RC servo motor

Mã sản phẩm: LS7T

Sản phẩm hiện đang còn hàng.

Xem chi nhánh còn hàng

  • Đây là bản nâng cấp từ servo MG995 về tốc độ, lực kéo và độ chính xác
  • Lực kéo: 9.4kg / cm (4.8V), 11kg / cm (6V)
  • So với MG946R, MG996R nhanh hơn, nhưng hơi nhỏ hơn.
  • Tốc độ xoay: 0.17 giây / 60 độ (4.8 v) 0.14 giây / 60 độ (6 v)

DỊCH VỤ & KHUYẾN MÃI LIÊN QUAN

  • Cộng thêm 9 đ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.

Hardware Required

Arduino UNO or Genuino UNO
USB 2.0 cable type A/B
MG996R Servo Motor
Jumper Wires
(Optional) 9V Power Adapter for Arduino
(Recommended) Screw Terminal Block Shield for Arduino Uno
(Optional) Transparent Acrylic Enclosure For Arduino Uno

Or you can buy the following sensor kit:

DIYables Sensor Kit 30 types, 69 units
Arduino Tutorial: Using a Servo SG90 with Arduino
Arduino Tutorial: Using a Servo SG90 with Arduino

Keywords searched by users: servo motor mg996r arduino

Arduino - Mg996R | Arduino Tutorial
Arduino – Mg996R | Arduino Tutorial
Arduino - Mg996R | Arduino Tutorial
Arduino – Mg996R | Arduino Tutorial
Động Cơ Servo Hoạt Động | Điều Khiển Servo Bằng Arduino
Động Cơ Servo Hoạt Động | Điều Khiển Servo Bằng Arduino
Kiến Thức] Động Cơ Servo Mg996R | Mecsu.Vn
Kiến Thức] Động Cơ Servo Mg996R | Mecsu.Vn
Mg996R Servo Motor 180 Degree Rotation Angle
Mg996R Servo Motor 180 Degree Rotation Angle
How To Control Servo Motors With Arduino (3 Examples)
How To Control Servo Motors With Arduino (3 Examples)
Động Cơ Rc Servo Mg996R - Nshop
Động Cơ Rc Servo Mg996R – Nshop
Arduino - Mg996R | Arduino Tutorial
Arduino – Mg996R | Arduino Tutorial
Kiến Thức] Động Cơ Servo Mg996R | Mecsu.Vn
Kiến Thức] Động Cơ Servo Mg996R | Mecsu.Vn

See more here: kientrucannam.vn

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *