Tìm kiếm mã

Điều khiển Servo bằng chiết áp và LCD1602 sử dụng Arduino

Điều khiển Servo bằng chiết áp và LCD1602 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 chiết áp và hiển thị giá trị chiết áp cũng như góc servo trên màn hình LCD1602. Dự án này là một cách tuyệt vời để kết hợp nhiều linh kiện và hiểu cách chúng có thể hoạt động cùng nhau để tạo ra một hệ thống tương tác. Đến cuối hướng dẫn này, bạn sẽ có một thiết lập hoạt động cho phép bạn điều chỉnh góc của servo bằng núm xoay trong khi đồng thời hiển thị các giá trị trên màn hình LCD.

Trước khi đi sâu vào việc đấu dây và viết mã, việc hiểu các linh kiện chúng ta sẽ sử dụng là rất hữu ích. Chiết áp hoạt động như một điện trở biến đổi có thể điều chỉnh điện áp đầu ra dựa trên vị trí của nó, mà chúng ta sẽ dùng để xác định góc của servo. LCD1602 sẽ hiển thị giá trị chiết áp hiện tại và góc tương ứng của servo. Bạn có thể tham khảo video (trong video tại 00:00) để có hướng dẫn trực quan về toàn bộ quá trình.

Giải Thích Phần Cứng

Các linh kiện chính chúng ta sẽ sử dụng trong dự án này là:

  • Bo mạch Arduino: Đây sẽ là bộ điều khiển cho toàn bộ hệ thống, xử lý đầu vào từ chiết áp và điều khiển vị trí của servo dựa trên các đầu vào đó.
  • Chiết áp: Một chiết áp 10k ohm sẽ được sử dụng để cung cấp đầu vào tương tự cho Arduino. Nó có ba chân: một chân kết nối với 5V, một chân với đất, và chân giữa kết nối với một chân tương tự (A0) trên Arduino.
  • Động cơ Servo: Servo này sẽ được điều khiển bằng cách gửi cho nó một góc dựa trên vị trí của chiết áp. Dây tín hiệu kết nối với một chân kỹ thuật số trên Arduino (chân 9).
  • Màn hình LCD1602: Màn hình này sẽ hiển thị giá trị chiết áp và góc của servo. Nó kết nối với một số chân kỹ thuật số trên Arduino để điều khiển.

Chiết áp hoạt động bằng cách thay đổi điện trở và do đó thay đổi điện áp tại chân giữa của nó, mà Arduino đọc như một đầu vào tương tự. Động cơ servo được điều khiển bằng cách gửi cho nó một tín hiệu điều chế độ rộng xung (PWM) cụ thể tương ứng với góc mong muốn. LCD1602 sử dụng một thư viện cho phép chúng ta dễ dàng điều khiển màn hình và xuất thông tin về chiết áp và servo.

Chi Tiết Từ Bảng Dữ Liệu

Nhà sản xuấtnhiều hãng
Số bộ phậnLM016L
Điện áp Logic/IO5 V
Điện áp cung cấp4.5 – 5.5 V
Dòng điện đầu ra (mỗi kênh)lên đến 2 mA
Dòng điện đỉnh (mỗi kênh)20 mA
Hướng dẫn tần số PWM50 Hz
Ngưỡng logic đầu vào0.3 x Vcc (thấp), 0.7 x Vcc (cao)
Sụt áp / RDS(on) / bão hòa0.2 V tối đa
Giới hạn nhiệt độ85 °C
Kiểu đóng góiDIP 16 chân
Ghi chú / biến thểMàn hình ký tự 16x2

  • Kết nối chân giữa của chiết áp với chân tương tự A0.
  • Đảm bảo servo được cấp nguồn 5V và kết nối với chân kỹ thuật số 9.
  • Sử dụng thư viện thích hợp cho LCD và đảm bảo nó được bao gồm trong Arduino IDE của bạn.
  • Cẩn thận với việc đấu dây để tránh đoản mạch, đặc biệt là với các kết nối servo.
  • Kiểm tra rằng LCD được khởi tạo chính xác trong mã để tránh các sự cố hiển thị.
Arduino wiring for LCD1602 12wires servo and pot
Arduino wiring for LCD1602 12wires servo and pot

Hướng Dẫn Đấu Dây

Để đấu dây các linh kiện lại với nhau, hãy bắt đầu bằng việc kết nối chiết áp. Kết nối một chân ngoài của chiết áp với chân 5V trên Arduino, và chân ngoài còn lại với đất. Chân giữa đi đến chân tương tự A0.

Tiếp theo, đối với động cơ servo, kết nối dây màu nâu hoặc đen với đất, dây màu đỏ với chân 5V, và dây màu vàng hoặc cam với chân kỹ thuật số 9 trên Arduino. Đối với LCD1602, kết nối chân VDD với 5V, RW với đất, và V0 với chân giữa của chiết áp để điều chỉnh độ tương phản. Kết nối RS với chân 12, EN với chân 11, D4 với chân 5, D5 với chân 4, D6 với chân 3, và D7 với chân 2.

Bạn cũng nên bao gồm một điện trở 220 ohm mắc nối tiếp với đèn LED nếu bạn sử dụng một cái, kết nối nó với nguồn 5V. Ngoài ra, một tụ điện 470 µF có thể được kết nối qua nguồn và đất của servo để lọc nhiễu trong quá trình hoạt động.

Ví Dụ Mã & Giải Thích Chi Tiết

Mã bắt đầu bằng việc bao gồm các thư viện cần thiết và khởi tạo các chân cho LCD và servo. Đoạn trích sau đây cho thấy việc thiết lập LCD và servo:

void setup() {
  lcd.begin(16, 2);
  myservo.attach(9);  // gắn servo vào chân 9 cho đối tượng servo
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Robojax Servo Knob");
  delay(2000);
}

Đoạn mã này khởi tạo LCD cho 16 cột và 2 hàng, gắn servo vào chân 9, và hiển thị thông điệp chào mừng trên LCD. Hàm lcd.clear() đảm bảo rằng mọi thông điệp trước đó được xóa bỏ.

Tiếp theo, vòng lặp liên tục đọc giá trị của chiết áp và cập nhật vị trí của servo cũng như màn hình LCD:

void loop() {
  val = analogRead(potpin);            // đọc giá trị của biến trở
  angle = map(val, 0, 1023, 0, 180);     // chia tỷ lệ để sử dụng với servo
  myservo.write(angle);                  // đặt vị trí servo theo giá trị đã chia tỷ lệ
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Giá trị biến trở:");
  lcd.setCursor(11, 0);
  lcd.print(val);
  lcd.setCursor(0, 1);
  lcd.print("Góc         :");
  lcd.setCursor(11, 1);
  lcd.print(angle);
  delay(500);
}

Vòng lặp này đọc giá trị biến trở, chuyển đổi nó thành góc tương ứng cho servo, và cập nhật màn hình LCD với cả giá trị biến trở và góc servo. Lệnh delay(500) ở cuối vòng lặp ngăn màn hình cập nhật quá nhanh.

Trình diễn / Điều mong đợi

Khi bạn cấp nguồn cho hệ thống, màn hình LCD sẽ hiển thị "Robojax Servo Knob" trong 2 giây, sau đó là giá trị biến trở và góc servo. Khi bạn xoay biến trở, góc servo sẽ thay đổi tương ứng, và giá trị biến trở mới sẽ được phản ánh trên màn hình LCD. Nếu bạn gặp bất kỳ hành vi bất thường nào, chẳng hạn như servo di chuyển sai hướng, hãy kiểm tra cách nối dây của biến trở và các kết nối servo (trong video tại 10:00).

Hình ảnh

SG90_servo_motor-1
SG90_servo_motor-1
SG90_servo_motor-0
SG90_servo_motor-0
Arduino wiring for LCD1602 12wires servo and pot
Arduino wiring for LCD1602 12wires servo and pot
97-This is the Arduino code for controlling a servo with a potentiometer and an LCD1602.
Ngôn ngữ: C++
/*
 Controlling a servo position using a potentiometer (variable resistor)
 by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>

 modified on 8 November 2013
 by Scott Fitzgerald
 http://www.arduino.cc/en/Tutorial/Knob

*/


// May 20, 2018 20:08
// Written by Ahmad S. for Robojax.com at Ajax, Ontario, Canada
// Watch the video for this code at https://youtu.be/DN1LPMSZtNA
// This code is taken from http://robojax.com/learn/arduino


#include <LiquidCrystal.h>

// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);


// start of servo settings *******
#include <Servo.h>
Servo myservo;  // create servo object to control a servo
int potpin = A0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin
int angle;    // the angle servo is sent to
// END of servo settings *******

void setup() {
  // Robojax Servo knob with LCD1602 Test 
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
   myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  // Robojax Servo knob with LCD1602 Test  
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Robojax Servo Knob");
    delay(2000);
}

void loop() {
  // Robojax Servo knob with LCD1602 Test 
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
  angle = map(val, 0, 1023, 0, 180);     // scale it to use it with the servo (value between 0 and 180)
  myservo.write(angle);                  // sets the servo position according to the scaled value
  
    
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Pot. Value:");
  // set the cursor to column 0, line 1
    lcd.setCursor(11, 0);
    lcd.print(val);
  // (note: line 1 is the second row, since counting begins with 0):
    lcd.setCursor(0, 1);
  // print the number of seconds since reset:
    lcd.print("Angle     :");
    lcd.setCursor(11, 1);
    lcd.print(angle);


  delay(500);
  // Robojax Servo knob with LCD1602 Test  
}

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

Tập tin📁

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