() translation by (you can also view the original English article)
Trong bài này, tôi sẽ hướng dẫn cho bạn cách kết nối một số động cơ với Raspberry Pi của bạn. Bằng cách làm như vậy sẽ cho phép Raspberry Pi của bạn tương tác trong thế giới thực, giúp có thể tạo ra một con robot, bật cái quạt vào một ngày nắng nóng hoặc thậm chí thả một bữa ăn cho con mèo hoặc con chó của bạn trong khi bạn đi vắng.
Mục tiêu
Những gì chúng ta dự định làm là kết nối một cách an toàn một hoặc hai động cơ với Raspberry Pi với càng ít các thành phần càng tốt. Một khi các thiết bị điện tử được kết hợp với nhau trên bảng mạch khung, tôi sẽ chỉ cho bạn cách điều khiển chúng một cách dễ dàng bằng cách sử dụng Python để trước tiên làm cho động cơ quay, và sau đó thêm một số điều khiển để thay đổi hướng quay của động cơ để chúng ta có thể quay ngược trở lại.
Hướng dẫn này sẽ đòi hỏi sự tỉ mỉ để loại bỏ bất kỳ sai sót nào và một chút can đảm, đặc biệt nếu bạn là người mới sử dụng các chân kết nối GPIO. Tôi muốn nhấn mạnh rằng tôi không chịu trách nhiệm cho bất kỳ thiệt hại nào gây ra cho Raspberry Pi và/hoặc các thành phần nào của bạn.
QUAN TRỌNG: Đừng kết nối động cơ trực tiếp, bất kể nhỏ đến mức nào vào Raspberry Pi, nó sẽ làm hỏng Raspberry Pi của bạn.
Bộ xử lý chính chỉ có thể cung cấp đủ năng lượng để chiếu sáng một bóng đèn LED, khoảng 20mA. Một động cơ sẽ cần ít nhất 400mA dòng điện để bắt đầu quay.
Yêu cầu
Để làm cho động cơ quay, bạn cần:
- Một Raspberry Pi với thẻ SD được cài đặt sẵn Raspbian
- Một bảng mạch khung để kết nối mọi thứ trên đó
- Một con chip điều khiển động cơ L293 hoặc SN755410 (tôi sẽ dùng L293D để chỉ về cả hai trong hướng dẫn này)
- Cáp Jumper để kết nối tất cả mọi thứ (Đầu đực với đầu đực và đầu cái với đầu đực)
- Một hoặc hai động cơ DC 6v
- 4 viên pin AA và giá đỡ
Các chân GPIO
Nếu bạn chưa từng xem kỹ Raspberry Pi của bạn trước đây, thì bây giờ có thể là lúc tốt nhất để nhìn rõ chúng. Có 26 chân được nhóm thành hai hàng, mỗi hàng 13 chân, và chúng được gọi là General Purpose Input Output header hoặc ngắn gọn là GPIO. Đây là một sự kết hợp của bốn chân nguồn, năm chân tiếp đất (GND) và 17 chân dữ liệu.

Một số chân dữ liệu này có thêm các chức năng như i2c bus, SPI bus và các kết nối UART, tất cả đều có thể kết nối với các phần cứng khác để cho phép Raspberry Pi giao tiếp với các phần cứng như Arduino, Analogue to Digital Convertor (ADC) Hoặc các bo mạch bổ sung như PiGlow hoặc PiFace.
Mẹo: Khi làm việc với các chân GPIO, hãy luôn luôn đảm bảo Pi đã ngắt nguồn điện, vì bất kỳ tai nạn nào do kết nối (hoặc tương tự) 2 chân với nhau có thể gây ra hư hỏng cho Raspberry Pi.
Lắp ráp Bản mạch
Thêm Nguồn và Tiếp đất
Điều quan trọng là làm điều này khi nguồn của Raspberry Pi đã bị tắt hoặc bị ngắt vì bạn muốn tránh làm chập mạch do sơ suất.
Điều đầu tiên bạn cần làm là kết nối dây nguồn và dây tiếp đất. Như với hầu hết các dự án điện tử, tất cả mọi thứ kết nối với nhau sẽ yêu cầu một tiếp đất chung. Điều này được thể hiện bằng dây màu đen.



Tiếp đất trên Raspberry Pi là chân vật lý 6. Đối chiếu với hình một, điều này được thực hiện bằng cách bắt đầu ở phía trên bên trái với chân 3V3, tính từ trái sang phải, do đó 5V là chân 2, GPIO 2 (gắn nhãn 2) là chân 3 và vân vân.
Đọc số chân trên các con chip IC dễ dàng được thực hiện bằng cách xác định vạch chữ V hoặc dấu chấm ở bên trái, sau đó bắt đầu từ dưới cùng bên trái cho chúng ta chân 1.



Thêm Dây Dữ liệu
Bây giờ thêm ba dây nối từ chân GPIO đến L293D.
- GPIO 25–Chân 22 > L293D–Chân 1
- GPIO 24–Chân 18 > L293D–Chân 2
- GPIO 23–Chân 16 > L293D–Chân 7



Thêm động cơ:
- Motor–dây 1 > L293D–chân 3
- Motor–dây 2 > L293D–chân 6



Điều cực kỳ quan trọng là bạn phải kiểm tra lại từng kết nối trước khi lắp pin. Chỉ khi nào bạn cảm thấy rằng tất cả mọi thứ đều ổn, hãy kết nối dây pin với khe cắm nguồn của bảng mạch khung.
Thêm một Động cơ Thứ hai (Tùy chọn)
Một trong những tính năng tuyệt vời của L293D là nó có thể xử lý hai động cơ độc lập và mỗi động cơ có thể chạy ở tốc độ hoặc hướng khác nhau. Sử dụng IC này giúp có thể tạo ra một robot hai bánh có khả năng xoay, tiến và lùi một cách dễ dàng.
Thêm một động cơ thứ hai chỉ cần thêm ba dây và một động cơ khác.
- GPIO 11–Chân 23 > L293D–Chân 9
- GPIO 9–Chân 21 > L293D–Chân 10
- GPIO 10–Chân 19 > L293D–Chân 15



Mở nguồn
Điều quan trọng là kiểm tra và kiểm tra lại bất kỳ dây điện nào trước khi gắn bất kỳ nguồn nào vào dự án của bạn vì một số dây có thể hơi bị xáo trộn nên bạn có thể dễ dàng quên kết nối và chuyển 5V vào 3.3V của Raspberry Pi.
Hãy luôn kiểm tra và kiểm tra lại dây điện!
Nếu bạn vẫn chưa thiết lập thẻ SD cho Pi trước tiên, thì bạn cần phải tìm hiểu cách làm bằng cách đọc hướng dẫn Cách Flash một thẻ SD cho Raspberry Pi.
Với một thẻ SD Raspian mới được tạo ra sẵn sàng, hãy kết nối Raspberry Pi như bình thường và khởi động.
Thêm pin, đảm bảo rằng bạn cắm đúng khe (các dải dài dọc theo phía trên và dưới cùng, nếu có), vì bạn chỉ muốn dây đen kết nối với tiếp đất, và dây màu đỏ với cực dương hoặc nguồn của con chip.
Công việc tiếp theo là nói với Raspberry Pi rằng một động cơ, hoặc hai, đã được kết nối. Để làm điều này tôi sử dụng một ngôn ngữ được gọi là Python. Nó được cài đặt trên Raspbian, đó là một phần bổ sung. Nếu bạn đang sử dụng một Hệ điều hành khác như Arch hoặc PiDora, thì hãy kiểm tra lại xem RPi.GPIO có tồn tại hay không.
Chạy thử
Để động cơ có thể làm việc hãy nhấp đúp vào LXTerminal trên desktop của bạn để mở Terminal. Đây là nơi bạn sẽ viết code Python sử dụng một chương trình gọi là Nano. Nano là một trình soạn thảo văn bản, tương tự như Notepad hoặc TextEdit nhưng dành cho dòng lệnh, tôi sẽ dạy cho bạn một số lệnh khi chúng ta tiếp tục nếu bạn chưa quen với nó.
Để bật động cơ trong hai giây hãy sử dụng code sau:
1 |
import RPi.GPIO as GPIO |
2 |
from time import sleep |
3 |
|
4 |
GPIO.setmode(GPIO.BOARD) |
5 |
|
6 |
Motor1A = 16 |
7 |
Motor1B = 18 |
8 |
Motor1E = 22 |
9 |
|
10 |
GPIO.setup(Motor1A,GPIO.OUT) |
11 |
GPIO.setup(Motor1B,GPIO.OUT) |
12 |
GPIO.setup(Motor1E,GPIO.OUT) |
13 |
|
14 |
print "Turning motor on" |
15 |
GPIO.output(Motor1A,GPIO.HIGH) |
16 |
GPIO.output(Motor1B,GPIO.LOW) |
17 |
GPIO.output(Motor1E,GPIO.HIGH) |
18 |
|
19 |
sleep(2) |
20 |
|
21 |
print "Stopping motor" |
22 |
GPIO.output(Motor1E,GPIO.LOW) |
23 |
|
24 |
GPIO.cleanup() |
Hai dòng đầu tiên nói với Python những thứ cần trong chương trình.
Dòng đầu tiên sẽ cần truy cập vào một mô-đun gọi là RPi.GPIO. Mô-đun này xử lý tất cả các công việc khó khăn liên quan đến bật và tắt chân GPIO trên Raspberry Pi.
Dòng thứ hai chuyển sang trạng thái sleep từ mô-đun time để có thể pause (tạm dừng) script cho nó thời gian để thực hiện một hành động nhất định, trong trường hợp này để động cơ bật trong vài giây.
Hàm setmode nói cho RPi.GPIO sử dụng số trên bo mạch Raspberry Pi. Các con số 16, 18 và 22 chúng ta sẽ sử dụng để nói với Python rằng chúng là những chân gắn liền với các động cơ.
Khi sử dụng L293D, bạn có thể cho nó một hướng, bằng cách xoay một bên để quay theo một hướng, được gọi là chân A và ngược lại là chân B. Để bật động cơ sử dụng một chân gọi là Enable, có nhãn E trong script kiểm tra—Đây là chân 22. Tôi sẽ khái quát chi tiết hơn sau này.
Cuối cùng, nói với Raspberry Pi những điều này tất cả là đầu ra được thực hiện với GPIO.OUT.
Với script đã xong, Raspberry Pi đã sẵn sàng để quay các động cơ. Nó sẽ bật một số chân, chờ hai giây rồi tắt chúng lại, được chỉ ra trong phần còn lại của script.
Lưu và thoát bằng cách nhấn CTRL-X, ở phía cuối là một thông điệp yêu cầu bạn xác nhận các thay đổi. Nhấn Y và Enter để xác nhận. Bây giờ bạn đã trở lại dấu nhắc dòng lệnh để chạy script và sẽ thấy động cơ quay.
sudo python motor.py
Nếu động cơ không quay, hãy kiểm tra lại dây điện hoặc chân nối. Gỡ lỗi và tìm ra lý do tại sao một điều gì đó không hoạt động có thể gây bực mình, nhưng là một bước hữu ích trong việc học một cái gì đó mới!
Bây giờ Lùi
Thật tuyệt vời khi có động cơ quay, nhưng còn tốt hơn khi quay nó ngược lại, do đó tôi sẽ chỉ cho bạn cách làm điều đó.
Không cần phải làm gì với dây nối cả, điều này hoàn toàn là Python. Điều này đạt được bằng cách tạo ra một script mới, gọi nó là motorback.py. Để tạo script trong Nano, nhập lệnh:
nano motorback.py
Nhập code sau:
1 |
import RPi.GPIO as GPIO |
2 |
from time import sleep |
3 |
|
4 |
GPIO.setmode(GPIO.BOARD) |
5 |
|
6 |
Motor1A = 16 |
7 |
Motor1B = 18 |
8 |
Motor1E = 22 |
9 |
|
10 |
GPIO.setup(Motor1A,GPIO.OUT) |
11 |
GPIO.setup(Motor1B,GPIO.OUT) |
12 |
GPIO.setup(Motor1E,GPIO.OUT) |
13 |
|
14 |
print "Going forwards" |
15 |
GPIO.output(Motor1A,GPIO.HIGH) |
16 |
GPIO.output(Motor1B,GPIO.LOW) |
17 |
GPIO.output(Motor1E,GPIO.HIGH) |
18 |
|
19 |
sleep(2) |
20 |
|
21 |
print "Going backwards" |
22 |
GPIO.output(Motor1A,GPIO.LOW) |
23 |
GPIO.output(Motor1B,GPIO.HIGH) |
24 |
GPIO.output(Motor1E,GPIO.HIGH) |
25 |
|
26 |
sleep(2) |
27 |
|
28 |
print "Now stop" |
29 |
GPIO.output(Motor1E,GPIO.LOW) |
30 |
|
31 |
GPIO.cleanup() |
Nhấn CTRL-X sau đó Y, tiếp theo là Enter để lưu lại.
Script này rất giống với cái trước đó, nhưng nếu bạn chú ý, chúng ta đã làm cho Motor1A low (thấp) và Motor1B high (cao).
high và low là các tên trong lập trình cho bật và tắt.
Để dừng động cơ bạn sẽ tắt, low, Motor1E.
Enable là công tắc để bật và tắt động cơ, bất kể A và B đang làm gì.
Nếu bạn thấy điều này hơi rối, hãy nhìn vào Bảng Giá trị để xem điều gì đang xảy ra.



Chỉ có hai trạng thái cho phép động cơ quay, khi Enable hoặc bật hoặc high, và A hoặc B phải high, nhưng không phải là cả hai.
Đối với hai động cơ hãy xem script sau đây. Tất cả những khác biệt là thêm một vài dòng để thiết lập động cơ thứ hai.
1 |
import RPi.GPIO as GPIO |
2 |
from time import sleep |
3 |
|
4 |
GPIO.setmode(GPIO.BOARD) |
5 |
|
6 |
Motor1A = 16 |
7 |
Motor1B = 18 |
8 |
Motor1E = 22 |
9 |
|
10 |
Motor2A = 23 |
11 |
Motor2B = 21 |
12 |
Motor2E = 19 |
13 |
|
14 |
GPIO.setup(Motor1A,GPIO.OUT) |
15 |
GPIO.setup(Motor1B,GPIO.OUT) |
16 |
GPIO.setup(Motor1E,GPIO.OUT) |
17 |
|
18 |
GPIO.setup(Motor2A,GPIO.OUT) |
19 |
GPIO.setup(Motor2B,GPIO.OUT) |
20 |
GPIO.setup(Motor2E,GPIO.OUT) |
21 |
|
22 |
print "Going forwards" |
23 |
GPIO.output(Motor1A,GPIO.HIGH) |
24 |
GPIO.output(Motor1B,GPIO.LOW) |
25 |
GPIO.output(Motor1E,GPIO.HIGH) |
26 |
|
27 |
GPIO.output(Motor2A,GPIO.HIGH) |
28 |
GPIO.output(Motor2B,GPIO.LOW) |
29 |
GPIO.output(Motor2E,GPIO.HIGH) |
30 |
|
31 |
sleep(2) |
32 |
|
33 |
print "Going backwards" |
34 |
GPIO.output(Motor1A,GPIO.LOW) |
35 |
GPIO.output(Motor1B,GPIO.HIGH) |
36 |
GPIO.output(Motor1E,GPIO.HIGH) |
37 |
|
38 |
GPIO.output(Motor2A,GPIO.LOW) |
39 |
GPIO.output(Motor2B,GPIO.HIGH) |
40 |
GPIO.output(Motor2E,GPIO.HIGH) |
41 |
|
42 |
sleep(2) |
43 |
|
44 |
print "Now stop" |
45 |
GPIO.output(Motor1E,GPIO.LOW) |
46 |
GPIO.output(Motor2E,GPIO.LOW) |
47 |
|
48 |
GPIO.cleanup() |
Phần tóm tắt
Trong bài này, tôi đã hướng dẫn cho bạn những điều cơ bản về kết nối động cơ với Raspberry Pi của bạn. Có thể có một chút khó khăn nếu bạn là người mới kết nối bất cứ thứ gì với Pi hoàn toàn mới của bạn, nhưng bạn sẽ sớm nhận ra rằng một khi bạn bắt đầu làm quen với các chân GPIO thì bạn sẽ khó mà ngừng lại.
Hướng dẫn này mở ra cánh cửa để làm bất cứ điều gì giống như robot với đèn LED nhấp nháy và các cảm biến siêu âm để cảm nhận môi trường của nó.
Tìm một khung xe để gắn tất cả mọi thứ vào đó, sử dụng một bộ sạc USB của điện thoại di động để làm cho Raspberry Pi của bạn hoàn toàn di động.
