Tìm kiếm mã

Điều khiển Servo bằng nút nhấn sử dụng Arduino

Điều khiển Servo bằng nút nhấn sử dụng Arduino

Trong hướng dẫn này, chúng ta sẽ học cách điều khiển động cơ servo bằng hai nút nhấn, một nút để di chuyển servo sang trái và một nút khác để di chuyển sang phải. Khi bạn nhấn nút bên phải, servo sẽ di chuyển 10 độ sang phải, và khi bạn nhấn nút bên trái, nó sẽ di chuyển cùng một lượng sang trái. Nếu bạn giữ nút, servo sẽ tiếp tục di chuyển theo hướng đó cho đến khi bạn nhả ra.

Dự án này là một cách tuyệt vời để hiểu cách kết nối các nút nhấn với động cơ servo bằng Arduino. Chúng ta sẽ đề cập đến các linh kiện phần cứng cần thiết, hướng dẫn đấu dây và mã code cần thiết để làm cho tất cả hoạt động. Để hiểu rõ hơn, bạn có thể tham khảo video đi kèm với hướng dẫn này (trong video tại 01:00).

Giải thích phần cứng

Đối với dự án này, bạn sẽ cần một bo mạch Arduino, một động cơ servo và hai nút nhấn. Động cơ servo chịu trách nhiệm cho chuyển động, trong khi các nút nhấn đóng vai trò là đầu vào để điều khiển hướng chuyển động đó. Arduino xử lý các đầu vào này và gửi tín hiệu thích hợp đến servo.

Động cơ servo hoạt động dựa trên tín hiệu điều chế độ rộng xung (PWM). Bằng cách gửi các độ rộng xung khác nhau, bạn có thể điều khiển góc của servo. Các nút nhấn sẽ được kết nối với các chân đầu vào kỹ thuật số trên Arduino, và chúng ta sẽ sử dụng điện trở kéo lên nội bộ để đơn giản hóa việc đấu dây.

Chi tiết bảng dữ liệu

Nhà sản xuấtNhiều hãng
Số bộ phậnSG90
Điện áp Logic/IO5 V
Điện áp cấp nguồn4.8–6 V
Dòng điện đầu ra (mỗi kênh)Tối đa 1.5 A
Dòng điện đỉnh (mỗi kênh)Tối đa 2.5 A
Hướng dẫn tần số PWM50 Hz
Ngưỡng logic đầu vào0.3VCC đến 0.7VCC
Sụt áp / RDS(on) / bão hòa0.4 V
Giới hạn nhiệt85 °C
Kiểu đóng góiNhựa
Ghi chú / biến thểXoay tiêu chuẩn 180°

  • Đảm bảo servo được định mức cho điện áp cấp nguồn của bạn.
  • Sử dụng tản nhiệt phù hợp nếu hoạt động ở dòng điện cao.
  • Kết nối các nút với đất theo cấu hình kéo lên.
  • Chống nhiễu phím (debounce) nếu gặp hành vi bất thường.
  • Theo dõi đầu ra nối tiếp để gỡ lỗi.

Hướng dẫn đấu dây

Arduino wriing for Sevo motor with 2 push buttons
Arduino wriing for Sevo motor with 2 push buttons

Để đấu dây các linh kiện, hãy bắt đầu bằng việc kết nối động cơ servo. Kết nối dây màu đỏ của servo với chân 5V trên Arduino, dây màu đen với chân GND, và dây tín hiệu màu vàng hoặc trắng với chân 9 trên Arduino. Chân này sẽ điều khiển vị trí của servo.

Tiếp theo, đấu dây các nút nhấn. Kết nối một đầu của nút bên phải với chân 2 và đầu kia với đất. Đối với nút bên trái, kết nối một đầu với chân 12 và đầu kia cũng với đất. Thiết lập này cho phép các điện trở kéo lên nội bộ giữ các chân ở mức cao khi các nút không được nhấn.

Ví dụ mã code & hướng dẫn chi tiết

Hãy bắt đầu với mã code để điều khiển servo bằng một nút nhấn. Mã code khởi tạo đối tượng servo và đặt một góc ban đầu. Đây là một đoạn trích ngắn:

int angle = 90;    // góc ban đầu cho servo
int angleStep = 10; // kích thước bước cho chuyển động

Trong đoạn mã này, angle đại diện cho vị trí hiện tại của servo, trong khi angleStep xác định mức độ servo di chuyển với mỗi lần nhấn nút. Mã code này rất quan trọng để theo dõi vị trí của servo.

Tiếp theo, chúng ta có hàm setup nơi chúng ta gắn servo và cấu hình các chân đầu vào:

void setup() {
  Serial.begin(9600);          // thiết lập serial
  myservo.attach(9);  // gắn servo vào chân 9
  pinMode(2, INPUT_PULLUP); // cấu hình chân nút nhấn
}

Trong setup, chúng ta khởi tạo màn hình nối tiếp và gắn servo vào chân 9. Nút trên chân 2 được đặt làm đầu vào với điện trở kéo lên, giúp đơn giản hóa việc đấu dây và tránh cần điện trở ngoài.

Cuối cùng, chúng ta xem xét hàm loop xử lý việc nhấn nút:

while(digitalRead(2) == LOW) {
  angle = angle + angleStep; // tăng góc
  myservo.write(angle); // di chuyển servo
}

Vòng lặp này liên tục kiểm tra xem nút có được nhấn hay không. Khi nó được nhấn, góc tăng lên theo bước đã xác định và servo di chuyển tương ứng. Điều quan trọng là đảm bảo góc nằm trong giới hạn (0 đến 180 độ) để tránh làm hỏng servo.

Trình diễn / Điều gì sẽ xảy ra

Khi bạn nhấn nút bên phải, servo sẽ di chuyển sang phải theo các bước tăng 10 độ cho đến khi đạt tối đa 180 độ. Tương tự, nhấn nút bên trái sẽ di chuyển nó sang trái. Nếu bạn giữ một nút, servo sẽ tiếp tục di chuyển theo hướng đó cho đến khi bạn nhả nút (trong video tại 01:00).

Các lỗi thường gặp bao gồm các vấn đề về đấu dây, chẳng hạn như kết nối sai hoặc đầu vào trôi nổi. Luôn đảm bảo các kết nối của bạn chắc chắn và bạn đang sử dụng đúng các chân như được chỉ định trong mã code.

Hình ảnh

Control a servo with a single push button using Arduino
Control Servo with single push button with Arduino
SG90_servo_motor-1
SG90_servo_motor-1
SG90_servo_motor-0
SG90_servo_motor-0
Arduino wriing for Sevo motor with 2 push buttons
Arduino wriing for Sevo motor with 2 push buttons
98-Control a servo with a single push button using Arduino
Ngôn ngữ: C++
/*
 Controlling a servo with a push button with Arduino
 When a push button is pressed, the servo starts moving to the right or left until
 it reaches 180 and then returns to 0 degrees.

 May 22, 2018 at 01:00 
 Written by Ahmad S. for Robojax.com in Ajax, Ontario, Canada
 Watch a video for this code at https://youtu.be/7woqNH_qby4
 This code is taken from http://robojax.com/learn/arduino
*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int angle =90;    // initial angle for servo
int angleStep =10;

void setup() {
  // Servo button demo by Robojax.com
  Serial.begin(9600);          //  setup serial
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  pinMode(2,INPUT_PULLUP);
   Serial.println("Robojax Servo Button ");
}

void loop() {
  while(digitalRead(2) == LOW){
  // change the angle for the next time through the loop:
  angle = angle + angleStep;

    // reverse the direction of the movement at the ends of the angle:
    if (angle <= 0 || angle >= 180) {
      angleStep = -angleStep;
    }
    myservo.write(angle); // move the servo to the desired angle
      Serial.print("Moved to: ");
      Serial.print(angle);   // print the angle
      Serial.println(" degrees");    
  delay(100); // waits for the servo to get there
  }// while

  
}
99-Control a servo with two push buttons using Arduino
Ngôn ngữ: C++
/*
 Controlling a servo with two push buttons with Arduino
 When the left push button is pressed, the servo starts moving to the left until it reaches 180 (or zero) degrees.
 When the right push button is pressed, the servo starts moving to the right until it reaches 180 (or zero) degrees.
 At any instance, if the button is released, the servo stops.

 May 22, 2018, at 01:00 
 Written by Ahmad S. for Robojax.com in Ajax, Ontario, Canada
 Watch a video for this code at https://youtu.be/7woqNH_qby4
 This code is taken from http://robojax.com/learn/arduino
*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int angle =90;    // initial angle  for servo
int angleStep =5;

#define LEFT 12   // pin 12 is connected to left button
#define RIGHT  2  // pin 2 is connected to right button

void setup() {
  // Servo button demo by Robojax.com
  Serial.begin(9600);          //  setup serial
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  pinMode(LEFT,INPUT_PULLUP); // assign pin 12 as input for Left button
  pinMode(RIGHT,INPUT_PULLUP);// assign pin 2 as input for right button
  myservo.write(angle);// send servo to the middle at 90 degrees
 Serial.println("Robojax Servo Button ");
}

void loop() {
  // Servo button demo by Robojax.com
  while(digitalRead(RIGHT) == LOW){

    if (angle > 0 && angle <= 180) {
      angle = angle - angleStep;
       if(angle < 0){
        angle = 0;
       }else{
      myservo.write(angle); // move the servo to desired angle
      Serial.print("Moved to: ");
      Serial.print(angle);   // print the angle
      Serial.println(" degree");
       }
    }
    
  delay(100); // waits for the servo to get there
  }// while
 // Servo button demo by Robojax.com

  while(digitalRead(LEFT) == LOW){

    // Servo button demo by Robojax.com
    if (angle >= 0 && angle <= 180) {
      angle = angle + angleStep;
      if(angle >180){
        angle =180;
       }else{
      myservo.write(angle); // move the servo to desired angle
      Serial.print("Moved to: ");
      Serial.print(angle);   // print the angle
      Serial.println(" degree");
       }
    }
    
  delay(100); // waits for the servo to get there
  }// 

  
}

Nghĩ bạn có thể cần

Tài nguyên & tài liệu tham khảo

Chưa có tài nguyên nào.

Tập tin📁

Không có tệp nào khả dụng.