Trước khi giải quyết yêu cầu của khách hàng, tuy nhiên, bạn sẽ cần một số thông tin cơ bản cung cấp cho bạn những cơ sở cần thiết để tạo ra các dự án cuối cùng.Để bắt đầu mọi thứ, chúng
Trang 1Chương 3:
ROBOT KỸ THUẬT VỚI YÊU CẦU :
Kiểm soát chuyển động
Vâng, bạn cuối cùng đã có thể làm cho nó trở thành những thứ tốt hơn Trong chương này, chúng ta sẽ thảo luận về điều khiển động cơ, một phần rất quan trọng của thiết kế robot sẽ được dùng trong cuốn sách này Điều khiển động cơ cho phép chúng ta cung cấp cho cuộc sống robot, nhưng chúng tôi sẽ không chỉ đơn giản được nhấn nhím để điều khiển ra robot Thay vào đó, theo yêu cầu của một khách hàng giả định, chúng tôi sẽ kiểm soát tốc độ động cơ và định hướng qua truyền thông nối tiếp
Chúng ta có thể thực hiện điều này bằng cách sử dụng một H-bridge và một biến tần hex Các H-bridge sẽ được sử dụng để điều khiển hai động cơ và biến tần hex sẽ được sử dụng để chuyển đổi một tín hiệu từ 0 sang 1 (từ 1 sang 0) Công ty muốn từng tham số được tách để đi đến những chân cụ thể Một yêu cầu nữa công
ty đó là các mẫu thử nghiệm cuối cùng cần phải được cấu hình trên một nhưng không phải cho đến khi các phần cứng và phần mềm đã được thử nghiệm
Để tận dụng tối đa trong dự án này, bạn sẽ cần một sự hiểu biết cơ bản của tiến trình kỹ thuật và ngôn ngữ lập trình Arduino như đã nói trong hai chương đầu tiên Nếu bạn chưa đọc bài viết nào, xin vui lòng làm điều đó trước khi tiếp tục Trước khi giải quyết yêu cầu của khách hàng, tuy nhiên, bạn sẽ cần một số thông tin cơ bản cung cấp cho bạn những cơ sở cần thiết để tạo ra các dự án cuối cùng.Để bắt đầu mọi thứ, chúng ta sẽ thảo luận về H-bridge và mục đích sử dụng khác nhau của
nó tiếp theo là một đánh giá về phần cứng cần dùng trong chương này Sau đó
Trang 2chúng ta sẽ tạo ra 4 dự án nhỏ mà sẽ dạy bạn làm thế nào để bật và tắt một động cơ với một nút bấm Tiếp theo, bạn sẽ tìm hiểu làm thế nào để sử dụng một chiết áp để kiểm soát tốc độ trên một động cơ Sau đó, bạn sẽ học cách điều khiển nhiều động
cơ với H-bridge và làm thế nào để kiểm soát cả tốc độ và hướng với một chiết áp
và một nút bấm Trang bị kiến thức mới học của bạn, bạn sẽ tạo ra một robot có sử dụng H-bridge để điều khiển chuyển động của nó
Hình 3-1 Một vài H-bridges (từ trái sang phải: bề mặt gắn kết H-bridge, thông
qua hố H-bridge, và động cơ từ lá chắn SparkFun)
Trang 3Các motor Sparkfun lá chắn có hai cổng motor, cổng A và cổng B; các cổng tương ứng với bốn chân trên lá chắn động cơ từ Sparkfun Chúng là chân digital 3:
PWMA, cái mà kiểm soát tốc độ của motor A, chân digital 12: DIRA, cái mà điều khiển hướng của motor A, chân digital 11: PWMB, cái mà kiểm soát tốc độ của motor A, và chân digital 13: DIRB , cái mà điều khiển hướng của motor B Chúng
ta sẽ dùng một H-bridge để điều khiển tốc độ và hướng của động cơ Các lá chắn động cơ từ Sparkfun có được xây tích hợp trong L298P H-bridge, có thể xử lý lên đến 18V và sử dụng các chân digital 3, 11, 12, và 13 để điều khiển tốc độ và
hướng Bạn cũng có thể sử dụng một H-bridge độc lập như L293D, thiết bị có một điện áp đầu vào lên tới 37V Trong chương này, chúng ta sẽ sử dụng trình điều khiển motor để điều khiển động cơ với một chiết áp và một nút bấm, kiểm soát tốc
độ và hướng điều khiển những thứ khác
Tập hợp các phần cứng cho Chương này
Chúng ta sẽ sử dụng Dagu 2WD Beginner Robot Chassis V2 từ Robotshop.com Sau đó trong chương này, các yêu cầu tài liệu trình bày sẽ có một chuẩn cho khung này Phần này của phần cứng sẽ được sử dụng để giữ mạch, chẳng hạn như
Arduino và lá chắn motor Bạn có thể tìm thấy khung này ở
www.robotshop.com/dagu-2wd-beginner-robot-chassis-v2-2.html
Tôi đã chọn khung này cho thiết kế hai bánh xe của nó và không gian rộng rãi trên
đó nó có mẫu thử nghiệm Nếu bạn đã có một khung hoặc bạn muốn mua một cái khác, chỉ cần đảm bảo nó là một khung xe hai bánh, như chúng ta sẽ dùng hệ thống hai bánh suốt phần còn lại của cuốn sách này
Trang 4Hình 3-2 Trong chương này, chúng ta sẽ sử dụng Dagu 2WD Beginner Robot
Chassis V2.
Sự hiểu biết các vấn đề cơ bản của điều khiển động cơ
Trong phần này, chúng ta sẽ thảo luận về các vấn đề cơ bản của điều khiển động cơ trong bốn dự án riêng biệt: bật một động cơ với một nút bấm, kiểm soát tốc độ của một động cơ với chiết áp, kiểm soát nhiều động cơ với Arduino, và cuối cùng, kiểm soát tốc độ và hướng Những điều này sẽ tạo nên nền tảng chúng ta dùng để xây dựng dự án chúng ta khi chúng ta có các tài liệu yêu cầu cho một robot sau chương này
Dự án 3-1: Bật một động cơ với một Switch
Dự án này sẽ chủ yếu tập trung vào các chân digital và sẽ sử dụng một H-bridge vì vậy chúng ta có thể sử dụng điện áp cao hơn để chạy các động cơ với Arduino Dự
án 3-1 sẽ cho phép chúng tôi bật một động cơ trên chuyển động theo một chiều kim đồng hồ
Trang 5• đầu nối pin 9V
• Hai khối thiết bị đầu cuối từ Sparkfun
• Dây phụ
Hình 3-3 Phần cứng cho dự án này
Trang 6Cấu hình phần cứng
Đầu tiên, hàn các header cái vào lá chắn motor và nối lá chắn động cơ đến header cái trên Arduino Duemilanove Tiếp theo, cắm đầu cuối trên một lá chắn motor cho động cơ 6V bằng cách hàn một khối đầu cuối để lá chắn motor và động cơ của bạn kết nối với khối đầu cuối (Hình 3-4 cho thấy cấu hình này) Cuối cùng, kết nối bật / tắt chuyển đổi từ chân nối đất đến digital 10 trên Arduino, như Hình 3-5 cho thấy Hình 3-6 và 3-7 minh họa cho cấu hình phần cứng cho dự án này
Trang 7
Hình 3-6 Động cơ được kết nối với cổng motor A trên lá chắn motor, và chuyển
đổi được kết nối với chân digital 10 và nối đất trên Arduino.
Hình 3-7 Các sơ đồ cho dự án này
Trang 8Bây giờ bạn đã kết nối các nút nhấn và động cơ, bạn cần phải kết nối Arduino của bạn để máy tính của bạn để cho phần mềm có thể được upload vào Arduino Chúng tôi sẽ viết chương trình cho dự án này trong phần tiếp theo.
Viết phần mềm
Các phần mềm cho dự án này sẽ tương tự như các dự án LED nhấp nháy mà chúng
ta tạo ra trong Chương 1 Nó sẽ có một đầu vào digital, một đầu ra digital, và một câu lệnh có điều kiện kiểm soát đầu ra Listing 3-1 cung cấp mã cho dự án này
Listing 3-1 Turning on a Motor
const int buttonPin = 10; // Sets buttonPin to digital pin 10
const int motorPin = 3; // Sets motorPin to digital pin 3
int buttonVal = 0; // Will pass button value here
void setup()
{
pinMode(buttonPin, INPUT); // Makes buttonPin an input
pinMode(motorPin, OUTPUT); // Makes motorPin an output
digitalWrite(buttonPin, HIGH); // Activates the pull up resistor
// If we did not have this, the switch
// would not work correctly
}
void loop()
{
Trang 9buttonVal = digitalRead(buttonPin); // Whatever is at buttonPin is
sử dụng một điện trở bên ngoài thay thế, nhưng cách này dễ dàng hơn) Cuối cùng, khi chúng ta có bên trong cấu trúc vòng lặpchúng ta gán giá trị buttonPin đến
buttonVal Sau đó, chúng ta dùng một câu lệnh if có điều kiện (buttonVal == 1) Nếu là giá trị thực hiện bằng 1, viết HIGH đến motorPin, và cho bất kỳ giá trị khác, viết LOW trên motorPin
Trang 10Bây giờ, chúng ta có thể chuyển sang một dự án khác sẽ giúp bổ sung kiến thức của bạn về điều khiển động cơ Phần tiếp theo sẽ thảo luận về kiểm soát tốc độ của một động cơ với chiết áp.
Dự án 3-2: Kiểm soát tốc độ của một động cơ với một chiết áp
Sử dụng một chiết áp là một kỹ năng cơ bản của điều khiển động cơ, và nó sẽ giúp bạn hiểu làm thế nào để điều khiển tốc độ trong các dự án cuối cùng của chương này Dự án ví dụ này cũng sẽ giải thích một chức năngchúng ta không đi qua được nêu ra - các chức năng bản đồ Chúng ta kiểm soát tốc độ của động cơ bằng cách
sử dụng các đầu vào analog trên Arduino và nhân rộng các giá trị của một chiết áp (0-1024) đến được sử dụng với điều chế độ rộng xung (PWM) chân lá chắn motor
sử dụng để kiểm soát tốc độ của động cơ Phần tiếp theo sẽ thảo luận về phần cứng chúng ta cần
Trang 11• Dây phụ (nếu cần thiết)
Hình 3-8 Các phần cứng cho dự án này
Cấu hình phần cứng
Trước tiên, bạn sẽ muốn kết nối đến lá chắn động cơ đến phía trên cùng của
Arduino Tiếp theo, chúng ta cần phải cắm chiết áp để Arduino Dây giữa chiết áp
sẽ kết nối với chân analog 0, và các dây đầu tiên và cuối cùng sẽ được kết nối với pin + 5V và nối đất tương ứng Sau khi bạn có chiết áp kết nối, kết nối động cơ đến cổng A trên Motor Shield Cuối cùng, kết nối cáp USB từ máy tính tới các Arduino Xem Hình 3-9 và 3-10 để đảm bảo bạn có tất cả mọi thứ kết nối đúng Nếu vậy, bạn đã sẵn sàng chuyển sang việc tạo ra phần mềm cho dự án này
Trang 12
Hình 3-9 Motor được kết nối với cổng motor A trên lá chắn động cơ, và chiết áp được kết nối với chân analog 0, nguồn (+ 5V) pin, và nối đất trên Arduino.
Hình 3-10 Sơ đồ cho dự án này
Trang 13Viết phần mềm
Chúng ta sẽ dùng các chân analog và chân PWM digital cho dự án này, vì vậy chúng ta sẽ sử dụng hàm analogRead() và analogWrite() để cho phép truyền thông
từ cổng đến động cơ Listing 3-2 cung cấp mã cho dự án này
Listing 3-2 Contolling the Speed of the Motor
const int potPin = A0; // A0 refers to analog pin 0 const
Trang 14Mã này bắt đầu với các tờ khai potPin = A0, motorPin = 3, potVal = 0, và
mappedPotVal = 0 Tiếp theo, chúng ta chuyển sang cơ cấu thiết lập, trong đó potPin được thiết lập là một đầu vào, và motorPin được thiết lập là một đầu ra Sau
đó, trong cấu trúc vòng lặp, potVal được thiết lập để bằng với potPin chân analog Cuối cùng, chúng ta mở rộng số liệu chiết áp bằng cách sử dụng hàm map ():
Dự án 3-3: Kiểm soát nhiều Motor với Arduino
Trong phần này, chúng ta sẽ thảo luận về việc áp dụng điều khiển hai động cơ với Arduino và lá chắn motor Điều này sẽ giúp chúng ta hiểu Arduino giao tiếp như thế nào với nhiều motor sử dụng công tắc (hoặc nút) Chúng ta sẽ dùng nhiều motor trong dự án cuối cùng của chương này; sự khác biệt duy nhất là chúng ta sẽ
sử dụng các nút để điều khiển motor trong dự án này
Trang 15đa các chân PWM (chúng tôi sẽ không sử dụng các chân PWM trong phần này, tất
Trang 16cả các bạn cần phải biết là các động cơ được kết nối với cổng A và B trên lá chắn motor ) Hình 3-12, 3-13, 3-14 và minh họa các thiết lập phần cứng.
Hình 3-12 Các nút nhấn được kết nối với chân số 9 và 10; sau đó, chúng kết nối với đất trên Arduino.
Hình 3-13 Các motor được kết nối với cổng motor A và B, và công tắc được kết nối với chân số 9 và 10 và đất.
Trang 17Hình 3-14 Sơ đồ của dự án này
Viết phần mềm
Chương trình này sẽ phải làm việc với hai nút chúng ta kết nối ở các phần trước; chúng ta sẽ sử dụng digitalRead () hàm digitalWrite () và giao tiếp với Arduino Một nút sẽ bật động cơ ở cổng A trên lá chắn motor, và các nút khác sẽ bật động cơ
ở cổng B của lá chắn đó Bảng liệt kê 3-3 cung cấp code của dự án này
Listing 3-3 Controlling Multiple Motors
const int button1Pin = 10; // Sets buttonPin to digital pin 10
const int motor1Pin1 = 3; // Sets motorPin to digital pin 3
const int button2Pin = 9; // Sets buttonPin to digital pin 9
Trang 18const int motor2Pin = 11; // Sets motorPin to digital pin 11
int buttonVal1 = 0; // Will pass button value here
int buttonVal2 = 0; // Will pass button value here
void setup()
{
pinMode(button1Pin, INPUT); // Makes buttonPin an input
pinMode(motor1Pin, OUTPUT); // Makes motorPin an output
pinMode(button2Pin, INPUT); // Makes buttonPin an input
pinMode(motor2Pin, OUTPUT); // Makes motorPin an output
digitalWrite(button1Pin, HIGH); // Activates the pull-up resistor
// If we did not have this, the switch would not work // correctly
digitalWrite(button2Pin, HIGH); // Activates the pull-up resistor
// If we did not have this, the switch would not work
Trang 20Mã này khởi tạo tất cả các chân và các buttonVal1, buttonVal 2 về 0 Trong cấu trúc thiết lập, chúng ta thiết lập mỗi chân như một đầu vào nếu nó là một nút và một đầu ra nếu nó là một motor Sau khi chúng ta thiết lập các chân, chúng ta cần phải kích hoạt cả hai kéo lên điện trở cho các nút trên Arduino:
digitalWrite (buttonPin1, HIGH);
digitalWrite (buttonPin1, HIGH);
Tiếp theo, chúng ta bước vào một cấu trúc vòng lặp mà chúng ta thiết lập
buttonVal1 với giá trị trên buttonPin1 và các buttonVal2 với giá trị trên buttonPin2 Sau đó chúng ta tạo ra hai câu lệnh có điều kiện sẽ gửi một giá trị mức cao cho motorPin1 nếu buttonVal1 có giá trị bằng 1 Cuối cùng, trong câu lệnh if kia, chúng
ta nói rằng nếu buttonVal2 bằng một, motorPin2 sẽ bật Đó là nó; Dự án này sẽ cho phép chúng ta điều khiển nhiều motor với sự hỗ trợ của H-bridge
Lúc này chúng ta đã hoàn thành dự án này, chúng ta có thể tạo ra một dự án khác
mà sẽ giúp bạn hiểu làm thế nào để kiểm soát cả tốc độ và hướng của một động cơ
Dự án 3-4: Điều khiển tốc độ và hướng
Trong số các những lý do một cầu H là rất hữu ích là nó cho phép chúng ta chuyển hướng của động cơ và điều khiển tốc độ của động cơ Dự án này sẽ cho bạn thấy làm thế nào để kiểm soát tốc độ và hướng của động cơ với một chiết áp và một nút nhấn
Tập hợp các phần cứng
Hình 3-11 cho thấy các phần cứng được sử dụng của dự án này, trừ pin 9V, đầu nối 9V, và bảng solderless:
Trang 21• Arduino Duemilanove (hoặc UNO)
• đầu nối pin 9V
• Dây phụ (nếu cần thiết)
Hình 3-15 Các phần cứng của dự án này
Cấu hình phần cứng
Điều đầu tiên bạn cần làm là kết nối các lá chắn động cơ cho các Arduino Thứ hai, bạn sẽ cần phải kết nối các chiết áp để chân analog 0, chân + 5V, và nối đất, giống như chúng ta đã làm trong dự án thứ hai của chương này Tiếp theo, bạn sẽ cần phải kết nối các công tắc on / off từ digital pin 10 với đất như bạn đã làm trong dự
Trang 22án 3-1; công tắc này phải là một đơn cực-single-ném (SPST) công tắc Cuối cùng, kết nối USB từ máy tính tới các Arduino Hình 3-16, 3-17, 3-18 và hiển thị các cấu hình của dự án này.
Hình 3-16 Công tắc được kết nối với pin digital 10 và nối đất trên Arduino.
Hình 3-17 Motor kết nối với cổng motor A, và chiết áp được kết nối với pin
analog 0, pin + 5V, và đất Ngoài ra, công tắc được kết nối với pin digital 10 và đất.
Trang 23Hình 3-18 Sơ đồ của dự án này
Viết phần mềm
Trong dự án này, chúng ta cần phải sử dụng cả hai chân analog và digital Các pin analog sẽ được sử dụng để kiểm soát tốc độ của động cơ, và pin digital để điều khiển hướng của động cơ (thông qua H-bridge và biến tần hex) Các biến tần hex đảo ngược tín hiệu của một trong những chân, cái mà sẽ chuyển đổi sự phân cực của motor Ví dụ, nếu các H-bridge được gửi một giá trị là 1, biến tần hex đọc theo một 0 và gửi đó để pin đầu vào khác trên H-bridge gây ra động cơ cho quay theo một chiều kim đồng hồ (để biết thêm thông tin về điều này tiến trình, vui lòng xem http://en.wikipedia.org/wiki/H_bridge) Listing 3-4 cung cấp code của dự án này
Listing 3-4 Controlling Speed and Direction
const int switchPin = 10;
Trang 24const int potPin = A0;
const int motorPin = 3;
int switchVal = 0; int potVal = 0;
Trang 25Đầu tiên, mã này khởi tạo switchPin, potPin, motorPin, switchVal, potVal, và
mappedPotVal Sau đó, trong cơ cấu thiết lập, chúng ta cài đặt switchPin và potPin đầu vào và motorPin cho một đầu ra Tiếp theo, chúng tôi kích hoạt trở kéo lên với digitalWrite () hàm Sau đó, trong cấu trúc vòng lặp, chúng ta cài đặt switchVal bằng việc đọc trên switchPin và đặt giá trị của potVal để đọc trên potPin Tiếp theo, chúng ta thiết lập mappedPotVal bằng với giá trị có kích cỡ 0 đến 255 bằng cách sử dụng map() hàm; sau đó mappedPotPin được gửi tới motorPin Cuối cùng, chúng
ta điều khiển động cơ với một có điều kiện nếu câu lệnh Nếu switchVal bằng 1, motor sẽ chuyển sang chiều kim đồng hồ; nếu không, động cơ sẽ quay ngược chiều kim đồng
Dự án 3-5: Điều khiển Motors với Các lệnh nối tiếp
Bây giờ bạn hiểu những điều cơ bản của điều khiển động cơ, chúng ta có thể tham quan công ty thí dụ của chúng tôi để xem nếu có bất kỳ dự án cho chúng tôi để hoàn thành yêu cầu sử dụng các Arduino để điều khiển động cơ Nó không! Vì vậy, bước đầu tiên của chúng tôi đang thu thập những yêu cầu và tạo ra các tài liệu theo yêu cầu
Tập hợp yêu cầu