Skip to content
Home » Dc Servo Motor Arduino | Bài Viết Liên Quan

Dc Servo Motor Arduino | Bài Viết Liên Quan

Arduino Brushed DC Servo Motor Position Control Using Joystick

Trình điều khiển PWM/ Servo bằng Arduino và PCA9685

Bên cạnh đó, còn có một cách khác để có thể điều khiển servo bằng Arduino, đó là sử dụng trình điều khiển động cơ servo PCA9685. Đây là chương trình điều khiển servo và servo bao gồm 16 kênh 12 bit, có thể giao tiếp với Arduino bằng bus I2C. Động cơ này có một chiếc đồng hồ tích hợp giúp cho bạn có thể chạy được tới 16 động cơ cùng lúc, hoặc hoạt động độc lập đối với Arduino.

Chúng ta có thể cùng 1 lúc 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. Chính vì vậy, về mặt lý thuyết, chúng ta sẽ có thể điều khiển được cùng lúc tới 992 động cơ chỉ với hai chân con I2C từ board Arduino. 6 chân chọn vị trí được sử dụng để đặt cho địa chỉ I2C khác nhau đối với mỗi chương trình điều khiển bổ sung. Cuối cùng, chúng ta chỉ cần kết nối các miếng hàn của sơ đồ theo bảng này là được.

Các linh kiện mà bạn cần chuẩn bị để tiến hành điều khiển đó là động cơ Servo MG996R, trình điều khiển Servo PCA9685 PWM, mạch điều khiển board Arduino, nguồn cung cấp điện có điện áp 5V- 6A DC,… Bây giờ hãy tìm hiểu code Arduino. Để điều khiển được trình điều khiển servo motor hiệu quả, chúng ta sẽ sử dụng thư viện PCA9685, bạn có thể tải xuống từ trang GitHub.

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ì?

Arduino Brushed DC Servo Motor Position Control Using Joystick
Arduino Brushed DC Servo Motor Position Control Using Joystick

Cách điều khiển ac servo motor dùng code arduino

Bây giờ chúng ta hãy sử dụng code Arduino để tiến hành điều khiển động cơ servo. Code cũng rất đơn giản, chúng ta chỉ cần xác định chân mà động cơ servo đang được kết nối. Cần xác định chân đó chính là đầu ra và trong phần vòng lặp để tạo ra các xung với chu kỳ cùng với những tần số cụ thể như ở trên.

Sau khi thử nghiệm, chúng ta có thể đưa ra các giá trị nhận được trong 1 khoảng thời gian mà các xung hoạt động cùng với động cơ servo. Các xung có thời lượng 0,6ms sẽ tương ứng với vị trí trong khoảng 0 độ – 1,45ms – 90 độ và từ 2,3ms – 180 độ.

Tiến hành kết nối một thiết bị đo vạn năng để có thể nối tiếp với servo nhằm kiểm tra dòng điện. Mức dòng điện tối đa mà các bạn sẽ nhận được có thể lên đến 0,63A. Điều này hoàn toàn đúng, bởi vì đây không phải là bản gốc của động cơ TowerPro MG996R, mà chính là bản sao rẻ hơn, rõ ràng đem lại hiệu suất kém hơn.

Tuy nhiên, chúng ta hãy tham khảo một cách làm thuận tiện hơn để có thể điều khiển các servo motor bằng Arduino tốt nhất, đó là sử dụng thư viện Arduino Arduino. Chúng ta chỉ cần cài đặt thư viện, sau đó xác định đối tượng của servo và sử dụng hàm Attach để xác định chân mà servo motor được kết nối.

Đồng thời, xác định giá trị tối thiểu và giá trị tối đa của thời lượng xung. Sau đó, bằng cách áp dụng hàm write, các bạn chỉ cần đặt vị trí của servo trong khoảng từ 0 – 180 độ. Với thư viện Arduino, chúng ta có thể điều khiển cùng lúc từ 12 – 48 servo bằng cách sử dụng hệ thống board Arduino Mega.

Sử dụng code Arduino để tiến hành điều khiển động cơ servo

Lịch Sử và Phát Triển của Động Cơ Servo

Động cơ servo có nguồn gốc từ các hệ thống điều khiển tự động trong ngành hàng không vào đầu thế kỷ 20. Chúng được sử dụng để điều khiển bánh lái và cánh tà trên máy bay. Sau đó, servo được ứng dụng rộng rãi trong công nghiệp để điều khiển chính xác vị trí, tốc độ và gia tốc của các cơ cấu.

Công nghệ servo đã phát triển mạnh mẽ kể từ những năm 1950 với sự ra đời của mạch điện tử điều khiển và cảm biến phản hồi. Điều này cho phép chúng hoạt động hiệu quả và chính xác hơn. Ngày nay, động cơ servo sử dụng công nghệ số và trí tuệ nhân tạo (AI) để tự động hóa quá trình điều chỉnh cho phù hợp với tải trọng và điều kiện hoạt động.

diy servo arduino dc motor  position control
diy servo arduino dc motor position control

Điều khiển động cơ servo bằng PWM Arduino

2.1 nguyên nhân lựa lựa chọn Arduino tinh chỉnh và điều khiển servo RC

+ Như đã trình bày ở trên, bộ động cơ servo buộc phải xung tinh chỉnh PWM để vận động một cách chủ yếu xác. Bao gồm nhiều phương pháp để tạo xung điều khiển và tinh chỉnh PWM, trong những số đó dùng vi tinh chỉnh sẽ có rất nhiều ưu điểm rộng để điều khiển và tinh chỉnh servo hiệu quả. Cùng Arduino là một sự chọn lựa hoàn hảo. Với mã mối cung cấp mở, chi tiêu rẻ, những hàm tác dụng dễ sử dụng.

+ phần mềm lập trình Arduino IDE hỗ trợ thư viện điều khiển và tinh chỉnh Servo, có thể sử dụng những hàm tinh chỉnh servo dễ dàng dàng.

+ Trên từng board mạch Arduino có một số trong những chân tinh chỉnh và điều khiển PWM. Trên board Arduino UNO tất cả 4 chân PWM gồm tần số 490 Hz cùng 2 chân PWM tất cả tần số 980 Hz.

+ chú ý khi thực hiện thư viện Servo cần sử dụng một số bộ timer phía bên trong Arduino, cụ thể là timer 1. Điều này gây trở ngại cho những thư viện không giống cần sử dụng bộ timer tương tự

2.2 lựa chọn nguồn cấp cho cho mạch

+ Động cơ SG90 sẽ hoạt động tốt cùng với nguồn cung cấp với nguồn 5V cấp cho từ Arduino vày moment yếu, chiếc điện nhỏ.

Điều khiển bộ động cơ servo G90 bởi arduino

+ tuy nhiên đối với một số Servo tất cả moment to như MG9995 hoặc khi gồm gắn thêm mua thì mẫu điện hoàn toàn có thể lớn hơn cái cấp tối đa của Arduino. Giống như một số loại động cơ khác, khi chuyển động có thể sinh ra nhiễu trên phố dây cấp cho nguồn. Khi nhiễu trên đường dây cấp cho nguồn mang lại vi điều khiển và tinh chỉnh và một số trong những thiết bị khác đang dẫn mang đến sai số.

Vì vậy nên cấp nguồn xung quanh cho bộ động cơ servo, liên kết GND cùng chân bộc lộ với Arduino. Có thể sử dụng tụ 100uF hoặc lớn hơn nối tuy vậy song cùng với nguồn cấp cho gần động cơ để giảm nhiễu.

điều khiển bộ động cơ servo MG9995 bởi pwm

2.3 Lập trình điều khiển servo RC bởi PWM

a. Điều khiển servo xoay từ 0 mang đến 180 độ với ngược lại

+ liên kết mạch ko thể đơn giản và dễ dàng hơn, trong lấy ví dụ như này sử dụng chân 9 là chân tín hiệu điều khiển và tinh chỉnh servo. Chân 9 là 1 trong 6 chân có công dụng phát xung PWM, những chân vạc xung sẽ có được ký hiệu là dấu “~”.

Điều khiển động cơ servo RC bằng pwm

+ Hãy coi code lấy ví dụ như trong mục File/ Examples/ Servo/ Sweep

Trong lấy ví dụ như này tinh chỉnh và điều khiển động cơ servo xoay một 180 độ sau đó dừng 2s và quay lại vị trí ban đầu 0 độ. Từng bước quay là một trong độ, thời hạn chờ để hộp động cơ đạt cho vị trí điều khiển là 15mS. Do thời hạn chờ vô cùng bé, bắt buộc ta nhận thấy động cơ xoay liên tục.

***************************************************

/* Sweep – Điều khiển động cơ servo bởi arduino

by BARRAGAN

*/

#include // Khai báo thư viện servo

Servo myservo;// Tạo đối tượng người tiêu dùng tên myservo

int pos = 0;//Tạo đổi thay nhận quý hiếm góc quay

void setup()

myservo.attach(9,500,2500); // Chân 9, chu kỳ Min, Max

void loop()

//Điều khiển servo cù một góc 180 độ

for (pos = 0; pos

myservo.write(pos); //ra lệnh servo tảo một góc “pos”

delay(15); // hóng 15ms để động cơ đạt mang lại vị trí pos

delay(500); //Khi quay cho vị trí góc 180 độ ngừng 2s

//Điều khiển servo quay về vị trí 0 độ

for (pos = 180; pos >= 0; pos -= 1) //Biến pos sẽ chạy từ 180 về 0

myservo.write(pos);

delay(15);

delay(500); //Khi quay mang lại vị trí góc 0 độ ngừng 2s

***************************************************

+ lưu lại ý: công tác định nghĩa một đối tượng tên myservo để đại diện cho bộ động cơ servo đề xuất điều khiển, nếu tinh chỉnh và điều khiển nhiều servo thì mỗi cồn cơ bắt buộc định nghĩa một đối tượng người tiêu dùng riêng.Xem thêm: Cách Làm Bánh Tay Yến Giòn Rụm, Ngọt Ngào Hương Vị Miền Tây, Cách Làm Bánh Tai Yến Bột Gạo Cực Ngon Tại Nhà

Video xem thêm mô phỏng điều khiển và tinh chỉnh servo bằng pwm trên ứng dụng Proteus

Video thực tế điều khiển động cơ servo bằng arduino

b. Điều khiển bộ động cơ servo chuyển phiên theo trở thành trở

+ Ở ví dụ này ta sẽ cần sử dụng Arduino đọc giá trị vươn lên là trở tinh chỉnh và điều khiển góc xoay của động cơ servo bởi PWM. Động cơ sẽ quay theo trở nên trở.

MSD_AM là module điều khiển động cơ DC Servo, được thiết kế chuyên biệt hỗ trợ tương thích với Arduino. Mỗi một driver MSD_AH sẽ được đánh một địa chỉ cố định nhờ đó người sử dụng có thể dễ dàng điều khiển cùng lúc nhiều động cơ khác nhau với một board chủ Arduino thông qua mạng UART.

Với sự hỗ trợ hết sức mạnh mẽ của nhân ARM Coretex-M3, công nghệ Mosfet tiên tiến, đặc biệt sự kết hợp các thuật toán kinh điển về điều khiển vòng kín. Chúng tôi cho ra đời sản phẩm điều khiển động cơ DC Servo với độ chính xác cao. Sản phẩm tích hợp nhiều thuật toán điều khiển vòng kín và khối công suất trên cùng một board mạch. Giúp board mạch hết sức nhỏ gọn và giảm chi phí đáng kể cho người sử dụng.

Với một driver bạn có thể sử dụng để điều khiển vận tốc hoặc vị trí và vận tốc.

Đặc biệt driver được kèm theo một phần mềm, tích hợp công cụ tự động giò tìm thông số của hệ thống từ đó đưa ra các chuẩn đoán về các hệ số điều khiển của động cơ. Phần mềm còn hỗ trợ người dùng quan sát, kiểm thử đắp ứng của hệ thống một cách trực quan và trực tiếp.

Tính Năng

Tương thích với Arduino Uno, Arduino Mega.

Phương pháp điều khiển Master (Arduino) to many slave (MSD_AM)

10-30VDC, 0-10A, 0-200W

Điều khiển vị trí, vận tốc, gia tốc

Encoder x4, tích hợp bộ lọc nhiễu encoder

Hỗ trợ chuẩn giao tiếp USB.

Phương thức giao tiếp: UART, USB

Tích hợp các bộ điều khiển vòng kín: PID, PI, State feedback

Tích hợp công cụ tự động giò tìm thông số PID cho động cơ

Tích hợp nhiều chế độ bảo vệ: dòng điện, trễ pha…

Hỗ trợ chỉnh sửa chức năng cho driver theo yêu cầu với khách hàng đặc biệt.

Ứng Dụng:

Tìm hiểu sâu hơn về phương pháp điều khiển vòng kín.

Ứng dụng trong giảng dạy, nghiên cứu.

Robot, CNC.

Nghiên cứu và chế tạo ra các máy móc tự động với độ chính xác cao.

Bạn có từng mơ ước tạo ra những cỗ máy có thể chuyển động theo ý muốn? Hay đơn giản là muốn điều khiển chính xác các thiết bị trong nhà một cách thông minh? Giấc mơ ấy hoàn toàn có thể thành hiện thực với động cơ servo – chìa khóa mở ra cánh cửa tự động hóa đầy tiềm năng.

Động cơ servo là một loại động cơ điện đặc biệt có khả năng điều khiển góc quay chính xác. Nhờ vào bộ điều khiển, nguồn điện, dây kết nối và phần mềm lập trình, bạn có thể dễ dàng ra lệnh cho động cơ servo thực hiện các chuyển động mong muốn.

Bài viết này sẽ là hướng dẫn chi tiết dành cho bạn, từ những khái niệm cơ bản về động cơ servo cho đến cách thức kết nối, lập trình và điều khiển chúng. Bằng cách tự tay tạo ra những dự án tự động hóa đơn giản, bạn sẽ bước vào thế giới đầy thú vị của công nghệ và khoa học.

Hãy sẵn sàng khám phá hướng dẫn điều khiển động cơ servo và thắp sáng niềm đam mê sáng tạo của bạn!

Kết luận:

Qua bài viết này, chúng ta đã khám phá và hiểu sâu hơn về động cơ servo motor – một công nghệ then chốt trong ngành tự động hóa và robot học. Từ lịch sử và phát triển, so sánh các loại động cơ, đến ứng dụng thực tế trong công nghiệp, chúng ta thấy rằng động cơ servo không chỉ là yếu tố quan trọng trong các thiết bị tự động hóa mà còn đóng vai trò chủ chốt trong nhiều dự án sáng tạo và tương lai của công nghệ.

Các hướng dẫn về cách lựa chọn và bảo trì, cũng như cách khắc phục các vấn đề thường gặp, cung cấp những kiến thức cơ bản nhưng quan trọng cho bất kỳ ai đang làm việc với động cơ servo. Với sự phát triển không ngừng của công nghệ, chúng ta có thể mong đợi thấy những cải tiến vượt trội hơn nữa trong động cơ servo, giúp chúng trở nên thông minh, linh hoạt và hiệu quả hơn.

Hy vọng rằng thông qua bài viết này, bạn không chỉ tìm thấy thông tin hữu ích mà còn được truyền cảm hứng để khám phá và sử dụng công nghệ này một cách sáng tạo và hiệu quả nhất.

Nội Dung Có Thể Bạn Quan Tâm:

  • Hộp Số Động Cơ Servo
  • Động Cơ Servo Cấu Tạo, Nguyên Lý Hoạt Động, Ứng Dụng, Động Cơ Servo Có Ưu Điểm Gì
  • Động Cơ Điện 3 Pha: Cấu Tạo, Nguyên Lý Hoạt Động Và Ứng Dụng
  • Động Cơ Điện 1 Pha: Cấu Tạo, Nguyên Lý Hoạt Động Và Ứng Dụng
  • Động Cơ Điện: Những Loại Mô Tơ Quan Trọng Nhất Trong Đời Sống, Tính Năng Và Ý Nghĩa Kỹ Thuật.
  • Giá Động Cơ Điện 3 Pha Đức Nhật Đài Loan, Các Hãng, Các Công Suất
  • Thông Số Kỹ Thuật Motor Điện, Cách Đọc Tem, Kiểm Tra Hiệu Suất Motor, Tiêu Chuẩn Tiết Kiệm Điện
  • Khái Niệm Motor Điện. Các Phương Pháp Đấu Điện Khởi Động Motor 3 Pha
Positional vs Continuous Rotation Servo Motors
Positional vs Continuous Rotation Servo Motors

Cài đặt thư viện AFMotor

Để giao tiếp với Motor Shield L293D các bạn cần phải cài đặt thư viện AFMotor.h. Điều này giúp cho việc điều khiển động cơ DC, động cơ bước và Servo trở nên dễ dàng hơn.

Khởi động phần mềm Arduino IDE vào Sketch > Include Library > Manage Libraries…

Nhập “motor shield” vào ô tìm kiếm, chọn phiên bản mới nhất và tiến hành cài đặt

Ứng Dụng Thực Tế của Động Cơ Servo

Động cơ servo được sử dụng rộng rãi trong công nghiệp tự động hóa. Chúng điều khiển chính xác vị trí và chuyển động của robot công nghiệp, máy CNC, máy đóng gói, và nhiều thiết bị khác.

Trong sản xuất ô tô, servo điều khiển vị trí của các cánh tay robot hàn và lắp ráp. Trong in 3D, chúng di chuyển đầu in với độ chính xác cực cao. Động cơ servo góp phần quan trọng trong việc nâng cao năng suất và chất lượng sản phẩm.

how to make high torque servo motor .
how to make high torque servo motor .

Chương trình tinh chỉnh Servo motor

Điều khiển góc quay của Servo motor tự 0-180° cùng ngược lạiĐể lập trình tinh chỉnh Servo motor, họ sử dụng thư viện . Tủ sách này đã được tích vừa lòng sẵn vào Arduino IDE cần không đề xuất cài đặt. Yêu cầu khai báo một đối tượng Servo để thay mặt cho Servo motor liên kết với Arduino. Dùng hàm write() nhằm gán góc quay mang lại Servo motor. Góc tảo của Servo motor có giá bán trị trong tầm từ 0 – 180.#include //Khai báo thư viện điều khiển và tinh chỉnh Servo

Servo myservo;//Khai báo đối tượng người tiêu dùng Servoint servo

Pin = 9;//Chân kết nối Servo với Arduinovoid setup() myservo.attach(servo

Pin);//Khai báo chân kết nối Servo với Arduinovoid loop() for(int pos = 0; pos =1; pos-=1) myservo.write(pos);//Gán góc quay đến Servo delay(15); Kết quả

Điều khiển góc cù của Servo motor bởi biến trởXem lại bí quyết lập trình sử dụng biến trở trong bài bác Lập trình điều khiển và tinh chỉnh DC motor với board mạch Arduino. Khi cực hiếm điện áp lấy ra từ biến đổi trở biến hóa thì góc cù của Servo motor nỗ lực đổi.

#include //Khai báo thư viện điều khiển và tinh chỉnh Servo

Servo myservo;//Khai báo đối tượng người sử dụng Servoint servo

Pin = 9;//Chân kết nối Servo với Arduinoint rv = A0;//Chân kết nối biến trở với Arduinovoid setup() myservo.attach(servo

Pin);//Khai báo chân liên kết Servo với Arduinovoid loop() int value = analog

Read(rv);//Đọc quý giá điện áp từ thay đổi trở int pos = map(value,0,1023,0,180);//chuyển thang đo của value từ 0-1023 lịch sự 0-180 myservo.write(pos);//Gán góc quay mang lại ServoKết quả

Bài viết lúc này xin trình làng với các bạn bài viết điều khiển servo RC bởi pwm. Ở các nội dung bài viết trước bọn họ đã khám phá về cách điều khiển và tinh chỉnh động cơ DC và AC Servo. Lúc này chúng ta thuộc nhau tò mò cách tinh chỉnh một loại động cơ thông dụng nửa là RC Servo bởi pwm.

Điều khiển động cơ RC servo bằng pwm

Content Summary

1 1. Tìm hiểu về bộ động cơ servo2 2. Điều khiển hộp động cơ servo bằng PWM Arduino2.3 2.3 Lập trình điều khiển servo RC bởi PWM

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.

Arduino tutorial 7- How to control Servo motor with Arduino (code explained) | using servo library
Arduino tutorial 7- How to control Servo motor with Arduino (code explained) | using servo library

Code 1: Điều khiển động cơ DC với L293D Arduino

Sơ đồ đấu nối dây động cơ vàng DC

Trong ví dụ này, mình sẽ sử dụng một động cơ DC hay thường gọi là động cơ vàng có điện áp hoạt động từ 3-12V là một động cơ được sử dụng trong hầu hết các đề tài như xe điều khiển từ xa, robot tránh vật cản…Và sử dụng nguồn 9V bên ngoài để cấp cho động cơ thông qua domino EXT_PWR.

Các bạn có thể đấu nối động cơ DC vào các domino M1, M2, M3 hoặc M4. Ở đây mình sẽ nối vào domino M4.

Code

#include

AF_DCMotor motor(4); void setup() { //Set initial speed of the motor & stop motor.setSpeed(200); motor.run(RELEASE); } void loop() { uint8_t i; // Turn on motor motor.run(FORWARD); // Accelerate from zero to maximum speed for (i=0; i<255; i++) { motor.setSpeed(i); delay(10); } // Decelerate from maximum speed to zero for (i=255; i!=0; i–) { motor.setSpeed(i); delay(10); } // Now change motor direction motor.run(BACKWARD); // Accelerate from zero to maximum speed for (i=0; i<255; i++) { motor.setSpeed(i); delay(10); } // Decelerate from maximum speed to zero for (i=255; i!=0; i–) { motor.setSpeed(i); delay(10); } // Now turn off motor motor.run(RELEASE); delay(1000); }

Giải thích Code

#include

Khai báo thư viện AFMotor để có thể sử dụng các lớp và hàm điều khiển động cơ DC.

AF_DCMotor motor(4);

Tạo một đối tượng motor từ lớp AF_DCMotor, được kết nối với chân số 4 trên Motor Shield L293D.

void setup() { //Set initial speed of the motor & stop motor.setSpeed(200); motor.run(RELEASE); }

Trong hàm setup(), tốc độ ban đầu của động cơ được đặt là 200 và động cơ được dừng lại (RELEASE).

void loop() { uint8_t i; // Turn on motor motor.run(FORWARD); // Accelerate from zero to maximum speed for (i=0; i<255; i++) { motor.setSpeed(i); delay(10); } // Decelerate from maximum speed to zero for (i=255; i!=0; i–) { motor.setSpeed(i); delay(10); } // Now change motor direction motor.run(BACKWARD); // Accelerate from zero to maximum speed for (i=0; i<255; i++) { motor.setSpeed(i); delay(10); } // Decelerate from maximum speed to zero for (i=255; i!=0; i–) { motor.setSpeed(i); delay(10); } // Now turn off motor motor.run(RELEASE); delay(1000); }

Trong hàm loop(), động cơ được bật lên và thực hiện các bước tăng tốc từ 0 đến tốc độ tối đa, sau đó giảm tốc từ tốc độ tối đa về 0. Sau đó, đảo ngược hướng quay của động cơ và thực hiện các bước tăng tốc và giảm tốc tương tự. Cuối cùng, động cơ được tắt (RELEASE) và delay trong 1 giây trước khi bắt đầu lại quá trình từ đầu.

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/

Điều khiển động cơ DC, Stepper Motor và Servo bằng Motor Shield L293D & Arduino

Nếu bạn đang muốn chế tạo Robot dò Line Arduino, tránh vật cản thì Motor Shield L293D là một giải pháp không thể tuyệt vời hơn. Shield có khả năng điều khiển đến bốn động cơ DC và tích hợp thêm 2 động cơ Servo.

Thông qua bài viết các bạn sẽ tìm hiểu tổng quan về L293D Arduino và cách điều khiển các loại động cơ DC, động cơ bước và Servo.

Servo motor and DC motor controlled by Joystick module. Get started with Joysticks control.
Servo motor and DC motor controlled by Joystick module. Get started with Joysticks control.

Khái niệm động cơ motor DC servo

Hiện nay, có nhiều loại động cơ servo với những tính năng chính là điều khiển chính xác được vị trí của trục. Việc điều khiển động cơ servo giúp cho một hệ thống vòng kín có thể sử dụng phản hồi vị trí để điều khiển được chuyển động và vị trí cuối cùng của nó.

Điều khiển động cơ servo giúp cho hệ thống vòng kín phản hồi vị trí

Trong sản xuất công nghiệp, động cơ servo motor chính là loại cảm biến giúp phản hồi vị trí, thông thường là một bộ code hóa đem lại độ chính xác cao, trong khi trong đó các động cơ RC hoặc động cơ nhỏ hơn, cảm biến vị trí thường dùng là một chiết áp đơn giản.

Vị trí thực tế được các thiết bị này tìm thấy sẽ được đưa trở lại bộ phát hiện lỗi ở nơi này, nó sẽ được so sánh cùng với vị trí đích. Sau đó, tùy theo lỗi mà bộ điều khiển sửa đổi vị trí thực tế của động cơ để cho khớp với vị trí đích.

Động cơ thường được sử dụng là bộ truyền động có kích thước nhỏ được sử dụng để điều khiển những phương tiện như xe ô tô, thuyền, máy bay,… Chúng cũng được các sinh viên ngành kỹ thuật dùng để chế tạo robot, tạo ra bộ phận cánh tay robot, chế tạo ra robot lấy cảm hứng sinh học hay robot có hình người,…

Sơ đồ mạch điều khiển động cơ servo

Trước tiên, chúng ta hãy nói về con servo, có thể thấy rằng đa phần để tiết kiệm chi phí sản xuất, người ta hay sử dụng những con servo motor đã qua sử dụng. Và để chọn lựa được một dòng động cơ servo cũ có thể hoạt động ổn định và độ chuẩn cao không phải điều dễ dàng, chúng ta nên test thật kỹ nó.

Chỉ cần đấu dây điện của con servo với bộ điều khiển có tính năng hiển thị các thông số chi tiết, sau đó bấm để hiệu chỉnh cho đến khi trên màn hình hiển thị luôn dòng chữ servo. Sau đó, bạn hãy lấy cây tua vít nhấn vào các nút có hình tam giác hướng lên hoặc hướng xuống cho đến khi thấy con servo hoạt động là được.

Quy trình điều khiển động cơ dc servo diễn ra như thế nào? Điều quan trọng nhất trong khi tiến hành sử dụng thiết bị điều khiển servo motor chính là các bạn phải hiểu rõ về vấn đề lập trình con PLC, chú ý sao cho nó có thể đọc được tín hiệu phát xung ra từ con servo.

  • Phần này cũng tương tự như việc calip bộ điều khiển đem đấu nối vào con cảm biến nhiệt độ vậy. Nếu không nắm rõ được quy trình vận hành của bộ điều khiển nhiệt độ thì các bạn sẽ không bao giờ cài đặt được công tắc đóng – ngắt khi dòng nhiệt độ của động cơ tăng lên hay giảm xuống.

Quy trình điều khiển động cơ servo motor

  • Phần này rất khó, do đó bạn có thể xem các video thể hiện rõ phần lập trình này để cho dễ hiểu hơn. Quy trình đấu dây điều khiển động cơ DC servo motor được tiến hành như sau:
  1. Bạn cần chuẩn bị một con mạch cầu bao gồm có 2 dây output ra ở bộ điều khiển (Thông thường, hệ thống mạch cầu thông dụng của động cơ sẽ có 2 kênh, và trong trường hợp này, các bạn chỉ cần sử dụng 1 kênh trên mạch cầu để điều khiển là đủ).
  2. Tiếp theo, bạn cần chuẩn bị thêm 1 con DC servo motor được tích hợp gồm có 6 dây. Trong đó, 2 dây sẽ tạo nguồn điện để đi nuôi động cơ vận hành, còn 2 dây nguồn đi nuôi cho động cơ encoder, đồng thời kết hợp 2 dây output về con encoder và một giắc nguồn + 1 dây điện.
  • Tiến hành đấu nối cấp nguồn cho động cơ servo như sau:
  1. Lấy 2 dây cấp nguồn điện từ phía động cơ servo motor để đấu vào 2 chân từ kênh của con mạch cầu. Tiếp đến, các bạn hãy cấp nguồn cho con mạch cầu bằng cái giắc nguồn mà ở đó chân dương của giắc cắm vào chân + mạch cầu, còn dây điện âm của giắc sẽ kết hợp 1 đầu dây điện và đem đấu chung.
  2. Sau đó, các bạn tiến hành cấp nguồn cho con encoder bằng cách: Dùng 2 chân âm và dương của động cơ encoder để cắm lần lượt, nối trực tiếp vào chân DND và chân 5V của hệ thống boar mạch arduino. Trên thực tế, nếu chú ý kỹ một chút, các bạn sẽ thấy 2 chân GND và chân 5V được đặt nằm sát nhau tại boar mạch của arduino.
  3. Còn 2 chân tín hiệu trả về còn lại của con encoder, chúng ta sẽ đấu nối với chân cực 2 của các boar mạch arduino. Đối với chân còn lại của con encoder, bạn đem đấu vào bất kỳ chân nào của con arduino, có thể là chân 4 – 6 – 8 đều được.
  4. Tiến hành đấu nối chung dây mát, nhưng trong trường hợp này, chúng ta sẽ lấy mát mạch cầu để đấu nối chung mát với arduino là được.
  5. Sau đó, bạn hãy lấy 2 dây tín hiệu điều khiển từ mạch cầu để đem đấu vào 2 chân output của tín hiệu analog nằm trong boar mạch arduino, đó chính là chân 7 và chân 8. Tất nhiên, con arduino cũng có rất nhiều chân output tín hiệu analog, chính vì lẽ đó, các bạn có thể đấu nối vào các chân analog khác cũng không sao.
  6. Cuối cùng, các bạn sử dụng dây nguồn 12V để cấp vào các giắc cắm là xong.

Sơ đồ mạch điều khiển động cơ servo

[Arduino] Điều khiển động cơ DC servo (động cơ encoder)  (phần 1) - Học Cơ Điện Tử
[Arduino] Điều khiển động cơ DC servo (động cơ encoder) (phần 1) – Học Cơ Điện Tử

Hướng Dẫn Lựa Chọn và Bảo Trì Động Cơ Servo

Khi chọn mua servo, cần xem xét các thông số như công suất, tốc độ, mô-men xoắn và độ chính xác phù hợp với ứng dụng. Ngoài ra cũng cân nhắc độ bền, độ tin cậy, tiêu thụ điện năng và khả năng tương thích.

Để bảo trì tốt, cần kiểm tra định kỳ cáp điện, mức độ bôi trơn và nhiệt độ hoạt động. Thay thế kịp thời các linh kiện hao mòn như gối đỡ, bạc đạn. Làm sạch bụi bẩn và các vật lạ có thể gây hư hỏng.

Code 3: Điều khiển động cơ Servo với L293D Arduino

Sơ đồ đấu nối dây động cơ SG90

Trên Motor Shield L293D các bạn có thể sử dụng Ser1 (10) và SERVO_2 (9) để điều khiển động cơ Servo.

Trong ví dụ này mình sẽ sử dụng nguồn 5V của Arduino, nên các bạn không cần phải rút Jumper EXT_PWR ra nhé.

Đọc ngay: Động cơ RC Servo là gì?

Code

Đây là một đoạn code khá đơn giản, dùng để điều khiển Servo SG90. Trong đoạn code này, Servo được điều khiển từ 0 độ đến 180 độ và sau đó điều khiển ngược lại từ 180 độ về 0 độ.

#include

Servo myservo; // create servo object to control a servo int pos = 0; // variable to store the servo position void setup() { // attaches the servo on pin 10 to the servo object myservo.attach(10); } void loop() { // sweeps from 0 degrees to 180 degrees for(pos = 0; pos <= 180; pos += 1) { myservo.write(pos); delay(15); } // sweeps from 180 degrees to 0 degrees for(pos = 180; pos>=0; pos-=1) { myservo.write(pos); delay(15); } }

How a DC servo motor works ? | detailed 3d Animation....
How a DC servo motor works ? | detailed 3d Animation….

Xây cất mạch điều khiển và tinh chỉnh Servo motor cùng với board Arduino

Mạch điều khiển Servo motor với Arduino gồm 1 board Arduino, 1 Servo motor, rất có thể thêm 1 biến trở để điều khiển và tinh chỉnh góc con quay của Servo motor.Để Servo motor hoạt động, nên cấp nguồn mang lại Servo motor. Một chân của motor phải liên kết với một chân của Arduino có khả năng xuất xung PWM (~3, ~ 5, ~ 6, ~ 9, ~ 10, ~ 11) để chịu đựng sự tinh chỉnh và điều khiển của Arduino.

Có thể dùng thêm biến đổi trở để tinh chỉnh góc con quay của Servo motor.

Nội dung

  • 1. Khái niệm động cơ motor DC servo
  • 2. Nguyên tắc điều khiển động cơ servo
  • 3. Sơ đồ mạch điều khiển động cơ servo
  • 4. Cách điều khiển ac servo motor dùng code arduino
  • 5. Trình điều khiển PWM/ Servo bằng Arduino và PCA9685
  • 6. Lịch Sử và Phát Triển của Động Cơ Servo
  • 7. So Sánh Các Loại Động Cơ Servo
  • 8. Ứng Dụng Thực Tế của Động Cơ Servo
  • 9. Hướng Dẫn Lựa Chọn và Bảo Trì Động Cơ Servo
  • 10. Xu Hướng và Tương Lai của Động Cơ Servo
  • 11. Phân Tích Kỹ Thuật và So Sánh với Các Loại Động Cơ Khác
  • Kết luận:
Arduino Servo DC Motor with Potentiometer
Arduino Servo DC Motor with Potentiometer

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

Nguyên tắc điều khiển động cơ servo

Chúng ta hãy tiến hành 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 động cơ servo motor cổ điển bằng Arduino. Tốt nhất bạn nên sử dụng MG996R – đây là một động cơ servo có mô men xoắn cao và cả bánh răng kim loại, cùng với mô men xoắn là 10 kg-cm. Mô men xoắn cao của động cơ có dòng ổn định đo được là 2.5A. Dòng điện khi đó sẽ chạy từ 500mA – 900mA và điện áp của động cơ sẽ hoạt động từ 4,8 – 7,2V.

Xếp hạng hiện tại thể hiện rằng các bạn không thể kết nối trực tiếp được servo motor này với Arduino. Cho nên chúng ta phải sử dụng nguồn điện riêng biệt dành cho nó.

Chúng ta chỉ cần kết nối phần chân điều khiển của servo motor với bất kỳ chân kỹ thuật số nào của board Arduino, đồng thời kết nối Ground và dây dương với nguồn điện 5V từ bên ngoài và kết nối ground của Arduino vào vị trí chân GND của động cơ servo.

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

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
Motor Shield L293D Shopee | Cytron
Động cơ bước NEMA 17 Shopee | Cytron
Động cơ bước 28BYJ-48 Shopee | Cytron
Động cơ Servo SG90 Shopee | Cytron
Động cơ vàng Shopee | Cytron
Dây cắm 10-20 Shopee | Cytron

Code 2: Điều khiển động cơ bước với L293D Arduino

Sơ đồ đấu nối dây động cơ bước 28BYJ-48

Động cơ bước 28BYJ-48 hoạt động ở điện áp 5V và số bước trên mỗi vòng quay là 48. Mình sẽ cấp nguồn 5V bằng cách đầu vào domino EXT_PWR.

Các bạn lưu ý rút Jumper PWR ra nhé.

Để điều khiển động cơ bước 28BYJ-48 các bạn có thể sử dụng các cặp M1-M2 hoặc M3-M4. Trong ví dụ này mình sẽ dùng M3-M4 để điều khiển.

Đọc ngay: Hướng dẫn làm cánh tay Robot 4 bậc sử dụng Arduino + Code

Sơ đồ đấu nối dây động cơ bước NEMA 17

Động cơ bước NEMA 17 hoạt động ở điện áp 12V và số bước trên mỗi vòng quay là 200. Mình sẽ cấp nguồn ngoài 12V để điều khiển động cơ thông qua domino EXT_PWR.

Như những trường hợp trên, các bạn lưu ý rút Jumper PWR ra nhé.

Motor Shield L293D có 4 cuộn dây (M1, M2,M3, M4) các bạn có thể dùng bất kỳ 1 trong 4 cuộn này để điều khiển động cơ bước NEMA 17. Trong ví dụ này mình sẽ dùng M3-M4.

Code

Ở đoạn Code ví dụ này mình sẽ dùng để điều khiển cho cả hai động cơ bước 28BYJ-48 và động cơ bước NEMA 17. Nhưng các bạn cần thay đổi tham số

stepsPerRevolution

để phù hợp với từng thông số kỹ thuật của động cơ. Ví dụ:

stepsPerRevolution

= 200 cho NEMA 17 và

stepsPerRevolution

= 48 cho 28BYJ-48.

#include

// Number of steps per output rotation // Change this as per your motor’s specification const int stepsPerRevolution = 48; // connect motor to port #2 (M3 and M4) AF_Stepper motor(stepsPerRevolution, 2); void setup() { Serial.begin(9600); Serial.println(“Stepper test!”); motor.setSpeed(10); // 10 rpm } void loop() { Serial.println(“Single coil steps”); motor.step(100, FORWARD, SINGLE); motor.step(100, BACKWARD, SINGLE); Serial.println(“Double coil steps”); motor.step(100, FORWARD, DOUBLE); motor.step(100, BACKWARD, DOUBLE); Serial.println(“Interleave coil steps”); motor.step(100, FORWARD, INTERLEAVE); motor.step(100, BACKWARD, INTERLEAVE); Serial.println(“Micrsostep steps”); motor.step(100, FORWARD, MICROSTEP); motor.step(100, BACKWARD, MICROSTEP); }

Giải thích Code

const int stepsPerRevolution = 48;

Định nghĩa số bước cho mỗi vòng quay của động cơ bước. Giá trị này cần được điều chỉnh phù hợp với thông số kỹ thuật của động cơ bước bạn đang sử dụng.

AF_Stepper motor(stepsPerRevolution, 2);

Tạo một đối tượng motor từ lớp AF_Stepper, được kết nối với chân số 2 trên Motor Shield L293D.

motor.setSpeed(10); // 10 rpm

Trong hàm setup(), tốc độ ban đầu của động cơ bước được đặt là 10 vòng/phút (rpm).

void loop() { Serial.println(“Single coil steps”); motor.step(100, FORWARD, SINGLE); motor.step(100, BACKWARD, SINGLE); Serial.println(“Double coil steps”); motor.step(100, FORWARD, DOUBLE); motor.step(100, BACKWARD, DOUBLE); Serial.println(“Interleave coil steps”); motor.step(100, FORWARD, INTERLEAVE); motor.step(100, BACKWARD, INTERLEAVE); Serial.println(“Micrsostep steps”); motor.step(100, FORWARD, MICROSTEP); motor.step(100, BACKWARD, MICROSTEP); }

Trong hàm loop(), động cơ bước thực hiện các bước điều khiển sử dụng hàm

motor.step()

. Mỗi lần gọi hàm này, động cơ di chuyển 100 bước theo hướng FORWARD hoặc BACKWARD, và sử dụng các chế độ điều khiển SINGLE, DOUBLE, INTERLEAVE và MICROSTEP.

Trong vòng lặp, thông tin về các bước điều khiển được hiển thị thông qua Serial Monitor bằng lệnh

Serial.println()

.

Making a DC Motor Spin | Arduino Uno Tutorial
Making a DC Motor Spin | Arduino Uno Tutorial

Tổng quan về phần cứng Motor Shield L293D

Driver Chipset

Driver Chipset L293D là một IC (Integrated Circuit) điều khiển động cơ DC được sử dụng trong Motor Shield. Nó cung cấp khả năng điều khiển và kiểm soát các động cơ DC thông qua mạch cầu H. Chipset này bao gồm các transistor và diode được kết hợp thành một cấu trúc hình chữ H để điều khiển dòng điện qua động cơ theo các hướng khác nhau.

Motor Shield L293D tích hợp hai chip L293D, cho phép điều khiển đồng thời hai động cơ DC. Các chân kết nối trên Motor Shield cho phép điều khiển hướng chuyển động và tốc độ của các động cơ thông qua các tín hiệu điều khiển từ Arduino.

IC 74HC595 là một IC dịch đa giai đoạn (shift register) 8-bit. Nó cho phép mở rộng số lượng chân I/O của Arduino.

Bằng cách kết hợp IC 74HC595 với Motor Shield L293D, bạn có thể sử dụng nó để điều khiển các linh kiện ngoại vi khác như đèn LED, động cơ servo,…

Nguồn động cơ

Motor Shield L293D có giải điện áp khá rộng từ 4.5 – 25VDC. Module có 2 chế độ là cấp nguồn trực tiếp cho động cơ, hai là sử dụng nguồn của Arduino.

Trong trường hợp bạn muốn sử dụng nguồn trực tiếp của Arduino thì để nguyên Jumper (PWR) trên mạch. Trong trường hợp bạn muốn sử dụng nguồn riêng để cấp cho động cơ thì tháo Jumper này ra (lúc này Motor Shield L293D sẽ tách biệt nguồn với Arduino) và cấp nguồn vào domino EXT_PWR.

Điều khiển động cơ DC

Như bạn cũng đã thấy các đầu ra để nối với động cơ DC trên Motor Shield L293D được ký hiệu bằng các nhãn M1, M2, M3 và M4. Có thể sử dụng tổng cộng bốn động cơ DC hoạt động ở điện áp 4,5 – 25V.

Mỗi động cơ DC trên Shield Motor cho phép dòng điện lên đến 600mA (đỉnh 1.2A). Tuy nhiên, dòng điện cung cấp cho động cơ còn phụ thuộc vào công suất của nguồn điện động cơ.

Điều khiển động cơ bước Stepper Motor

Các bạn cũng có thể sử dụng đầu ra của Motor Shield L293D để điều khiển động cơ bước. M1-M2 sẽ được dùng để đấu nối cho một động cơ và một động cơ tiếp theo sẽ nối với M3-M4.

Trong trường hợp bạn sử dụng động cơ bước có 5 dây, thì hãy đấu dây vào GND trên L293D arduino.

Điều khiển động cơ Servo

Các động cơ Servo được cấp nguồn 5V trực tiếp từ Arduino, đây được xem là một giải pháp tệ của người phát triển Shield này vì làm như vậy có thể khiến IC ổn áp trên bo mạch của Arduino bị nóng và cũng có thể gây ra hiện tượng nhiễu. Việc sử dụng thêm một tụ điện 100uF trên các chân nguồn này, giúp hạn chế một chút hiện tượng này.

Vì vậy, nếu bạn muốn sử dụng Servo trên board mạch này, thì mình khuyên nên sử dụng các Servo nhỏ như SG90.

Tính năng mở rộng

Trên L293D arduino còn bổ sung thêm một số tính năng sau:

Bao gồm một điện trở băng (Pull Down – điện trở kéo xuống) giúp cho động cơ tắt khi bật nguồn.

Đèn LED trên board mạch dùng để báo động cơ đang hoạt động bình thường. Đèn LED không sáng đồng nghĩa là động cơ không hoạt động.

Nút RESET dùng để khởi động lại chương trình trên Arduino.

Sáu chân Analog (A0 đến A5), và các chân 5V, GND được đặt ở bên góc, các bạn có thể sử dụng để đấu nối với các cảm biến.

Đấu nối chân điều khiển động cơ với Arduino

Các chân điều khiển động cơ DC và động cơ bước, được sử dụng các chân D3, D4, D5, D6, D7, D8, D11 và D12.

D9 và D10 được sử dụng để điều khiển động cơ servo. D10 được kết nối với Servo 1, trong khi D9 được kết nối với Servo 2.

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.

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

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.

So Sánh Các Loại Động Cơ Servo

Có ba loại động cơ servo chính:

– Servo AC sử dụng nguồn điện xoay chiều. Chúng cung cấp mô-men xoắn cao ở tốc độ thấp.- Servo DC sử dụng nguồn điện một chiều. Chúng nhỏ gọn và đơn giản hơn.- Servo tuyến tính (linear servo) tạo chuyển động tuyến tính thay vì xoay.

So với các loại động cơ khác, servo cho độ chính xác cao hơn nhờ vào hệ thống điều khiển phản hồi nội tại. Tuy nhiên, chúng có giá thành ban đầu cao hơn.

Closed loop stepper motors -- very impressive
Closed loop stepper motors — very impressive

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.

Phân Tích Kỹ Thuật và So Sánh với Các Loại Động Cơ Khác

So với động cơ DC thông thường, servo cho độ chính xác cao hơn nhờ vào hệ thống điều khiển phản hồi nội tại. Tuy nhiên, chi phí ban đầu của servo cao hơn.

Động cơ bước có độ chính xác tương đương servo nhưng chỉ hoạt động tốt ở tốc độ thấp. Ưu điểm của chúng là giá thành rẻ, cấu tạo đơn giản.

So với các loại động cơ khác, servo kết hợp tốt cả hai yếu tố: độ chính xác cao và khả năng điều khiển linh hoạt ở nhiều tốc độ khác nhau.

Arduino Tutorial: Using a Servo SG90 with Arduino
Arduino Tutorial: Using a Servo SG90 with Arduino

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

Xu Hướng và Tương Lai của Động Cơ Servo

Xu hướng phát triển mới của động cơ servo là tích hợp cảm biến, bộ điều khiển và giao tiếp không dây trong cùng một hệ thống (servo thông minh). Chúng cho phép giám sát và điều chỉnh hoạt động linh hoạt hơn.

Nhiều chuyên gia dự đoán servo sẽ đóng vai trò then chốt trong công nghiệp 4.0. Khả năng tự động hóa, tự cảm biến và tự điều chỉnh của chúng sẽ là trụ cột của hệ thống sản xuất thông minh trong tương lai.

How to Make ANY servo rotate 360° - EASY and FAST
How to Make ANY servo rotate 360° – EASY and FAST

Mày mò về bộ động cơ servo

1.1 Động cơ RC servo là gì

Khác với các loại bộ động cơ DC, AC servo vào công nghiệp áp dụng encoder để ý kiến vị trí. Động cơ servo là loại động cơ một chiều dễ dàng và đơn giản có cảm biến phản hồi vị trí là 1 trong biến trở. Vị trí thực tế được so sánh với địa chỉ mục tiêu, bộ điều khiển sẽ nhờ vào sai số này để thay đổi vị tri thực tiễn đúng với yêu thương cầu.

Động cơ RC servo được áp dụng trong xác định bánh lái của thuyền, camera, cảm biến và sử dụng thông dụng trong tinh chỉnh góc quay những khớp của robot.

Điều khiển động cơ DC servo

Điều khiển động cơ AC servo hãng LS

Điều khiển hộp động cơ AC servo Dorna thương hiệu Tecorp

1.2 cấu tạo động cơ RC servo

Động cơ servo bao hàm 4 bộ phận: hộp động cơ một chiều, vỏ hộp số, biến đổi trở với mạch điều khiển.

Cấu tạo động cơ rc servo

+ Động cơ DC có tốc độ cao với moment phải chăng nên cần hộp số để giảm vận tốc và tăng moment giúp điều khiển xuất sắc vị trí. Tốc độ sau khi qua hộp tụt giảm khoảng 60 vòng/phút.

+ biến trở được nối với hộp số hoặc trục của rượu cồn cơ, nên những khi động cơ tảo thì biến đổi trở cũng mặt khác quay theo. Trở nên trở quay đang ứng với bộ động cơ quay theo một góc hoàn hảo so với vị trí ban đầu. Mạch điều khiển đọc điện áp từ biến trở và đối chiếu với điện áp của biểu lộ điều khiển. Ở một vài động cơ rc servo bao gồm tích đúng theo thêm mạch ước H để kiểm soát và điều chỉnh động cơ tảo theo chiều trái lại khi động cơ quay qua vị trí ước ao muốn. Cho tới khi không nên số giữa hai biểu lộ điện áp này bởi 0.

1.3 nguyên lý điều khiển hộp động cơ servo bởi pwm

+ Động cơ RC servo được điều khiển bằng cách cấp một chuỗi xung PWM. Tần số của xung điều khiển nên là 50 Hz, góc xoay của cồn cơ nhờ vào vào độ rộng của xung điều khiển. Một số loại động cơ này có giới hạn về góc quay, góc quay tối đa là 180 độ.

+ mang lại ví dụ độ rộng xung 1 mS ứng cùng với góc quay hộp động cơ là 0 độ, phạm vi 1,5 mS ứng cùng với góc cù là 90 độ với 2mS ứng với góc xoay 180 độ. Góc quay rất có thể khác nhau so với các các loại động cơ của các nhãn hiệu khác nhau.

Góc con quay của hễ cơ dựa vào xung điều khiển

1.4 kết nối động cơ Rc servo

Động cơ servo thông thường sẽ có được 3 chân VCC, biểu thị và chân GND. Màu sắc dây những chân của động cơ servo sẽ biến hóa tùy theo nhà sản xuất. Mặc dù ta thấy số đông các chân của động cơ sẽ cơ chế theo màu sắc như sau.

+ GND – Màu đen hoặc nâu, chân MASS cho động cơ và mạch điều khiển.

+ tín hiệu – màu trắng hoặc vàng, chân ngỏ vào của tín hiệu điều khiển

+ VCC – Chân cấp cho nguồn cho hộp động cơ và mạch điều khiển, hay là 5V.

Keywords searched by users: dc servo motor arduino

How To Control Servo Motors With Arduino - Complete Guide
How To Control Servo Motors With Arduino – Complete Guide
Using Servo Motors With Arduino - Youtube
Using Servo Motors With Arduino – Youtube
Servo Motor Interfacing And Control Using Arduino - Geeksforgeeks
Servo Motor Interfacing And Control Using Arduino – Geeksforgeeks
Arduino Servo With Dc Motor And Potentiometer : R/Arduino
Arduino Servo With Dc Motor And Potentiometer : R/Arduino
Ckd Project - Arduino Dc Servo Controller - Youtube
Ckd Project – Arduino Dc Servo Controller – Youtube
Arduino] Điều Khiển Động Cơ Dc Servo (Động Cơ Encoder) (Phần 1) - Học Cơ  Điện Tử - Youtube
Arduino] Điều Khiển Động Cơ Dc Servo (Động Cơ Encoder) (Phần 1) – Học Cơ Điện Tử – Youtube
How To Turn Any Dc Motor Into A Servo Motor - How To Mechatronics
How To Turn Any Dc Motor Into A Servo Motor – How To Mechatronics
How To Control Servo Motor With Arduino Uno? – Quartzcomponents
How To Control Servo Motor With Arduino Uno? – Quartzcomponents
Arduino Servo Motors : 5 Steps (With Pictures) - Instructables
Arduino Servo Motors : 5 Steps (With Pictures) – Instructables
Arduino Servo Motor Basics And Control — Maker Portal
Arduino Servo Motor Basics And Control — Maker Portal
Control A Servo And A Dc Motor With One Joystick - Arduino Tutorial #11 -  Youtube
Control A Servo And A Dc Motor With One Joystick – Arduino Tutorial #11 – Youtube
Using Servo Motors With The Arduino | Dronebot Workshop
Using Servo Motors With The Arduino | Dronebot Workshop
Arduino Servo Motor - Electronicshub
Arduino Servo Motor – Electronicshub

See more here: kientrucannam.vn

Leave a Reply

Your email address will not be published. Required fields are marked *