Dự án robot theo dõi đường gắn trên đây được thiết kế để theo dõi một đường màu đen trên nền màu trắng. Nó sử dụng một cặp cảm biến (LED / LDR) và hoạt động dựa trên một thuật toán đơn giản "định vị robot ở trung tâm của đường". Thực tế, bạn không cần một vi điều khiển để thực hiện một robot đơn giản như vậy. Một bộ so sánh và mạch điều khiển động cơ có thể thực hiện công việc này một cách dễ dàng. Nhưng tôi sử dụng vi điều khiển chỉ để minh họa công nghệ. Dự án này cũng là nền tảng cho các robot theo dõi đường nâng cao hoạt động dựa trên các thuật toán phức tạp. Vi điều khiển AT89S52 từ Atmel được sử dụng ở đây.
Cảm biến:
Phần cảm biến bao gồm một cặp LED / LDR cho mỗi bên trái và bên phải. Những cặp LED / LDR này phát hiện đường màu đen trên bề mặt màu trắng mà robot được giao để di chuyển. LDR có mối quan hệ nghịch đảo giữa sự kháng của nó và ánh sáng chiếu vào nó. Khi một cặp LED / LDR cụ thể nằm trên bề mặt trắng, ánh sáng phản xạ trên LDR và kháng của nó giảm đi, ngược lại khi cặp LED / LDR nằm trên đường màu đen, kháng của nó tăng lên. Sự biến đổi này trong kháng của LDR được sử dụng để đánh giá sự định hướng của robot theo dõi đường trong mặt phẳng X-Y. Hình ảnh dưới đây miêu tả mạch cảm biến.
Circuit cảm biến: Trong mạch này, các kháng R1 và R2 giới hạn dòng đi qua các LED chiếu sáng D1 và D2. Các kháng R3, R5 và R6, R8 tạo thành mạng chia áp điện cùng với các LDR tương ứng. Đầu ra của mạch cảm biến được lấy từ các điểm được ghi nhãn A và B trong sơ đồ mạch. Bảng dưới đây hiển thị điện áp tại các nút A và B cho các hướng có thể của mô-đun cảm biến.
Mạch so sánh:
Công việc của mạch so sánh là chuyển đổi đầu ra điện áp tương tự của cảm biến thành định dạng kỹ thuật số để vi điều khiển đọc. Mạch so sánh được xây dựng dựa trên bộ khuếch đại kháng IC LM324 (IC1). LM324 là một bộ khuếch đại tức năng thông thường có thể hoạt động từ một nguồn duy nhất. Trong số bốn bộ so sánh bên trong LM324, chỉ có hai bộ được sử dụng ở đây. Một bộ cho phía trái và một bộ cho phía phải. Sơ đồ mạch của phần so sánh được hiển thị trong hình dưới đây.
Các kháng biến trở điều chỉnh R10 và R11 được sử dụng để đặt tham chiếu 1V cho các bộ so sánh bên trái và bên phải tương ứng. Đầu ra từ các cảm biến bên trái và bên phải (nút A và B) được kết nối với đầu vào không đảo trên các bộ so sánh bên trái và bên phải. Đầu ra của bộ so sánh bên trái được kết nối với P1.0 của vi điều khiển và đầu ra của bộ so sánh bên phải được kết nối với P1.1 của vi điều khiển. Cả hai bộ so sánh đều được kết nối theo chế độ không đảo, và bảng dưới đây hiển thị điện áp đầu ra của chúng đối với các kết hợp điện áp đầu vào có thể.
Vi điều khiển (AT89S52):
Nhiệm vụ của vi điều khiển ở đây là điều khiển các động cơ bên trái và bên phải dựa trên tín hiệu phản hồi từ các bộ so sánh bên trái và bên phải để robot duy trì đúng con đường (đường màu đen). Logic được thực hiện bởi vi điều khiển để giữ robot trên đúng đường được minh họa trong bảng dưới đây.
Mạch điều khiển động cơ:
Nhiệm vụ của mạch điều khiển động cơ là điều khiển động cơ dựa trên tín hiệu đầu ra từ vi điều khiển. Mạch điều khiển động cơ dựa trên IC ULN2003A. ULN2003A là một mảng darlington cao dòng (500mA), cao điện áp (50V) bao gồm bảy cặp darlington với ngõ ra chung và bộ thu sưu tập mở. Trong số bảy kênh có sẵn trong IC, chỉ có hai kênh được sử dụng ở đây. Một kênh cho bên trái và một kênh cho bên phải. Sơ đồ mạch điều khiển động cơ được hiển thị trong hình dưới đây. Hoạt động của ULN2003 rất dễ giải thích. Khi một dòng vào cụ thể (ví dụ pin 1) được kích hoạt, đầu ra tương ứng (pin 16) xuống thấp và ngược lại.
Các tụ C4 và C5 cách ly các phần còn lại của mạch khỏi nhiễu điện tạo ra bởi động cơ. Điện áp ngược mắt sau khi động cơ bị bật và các đỉnh điện áp do cọ pin gây ra chủ yếu chiếm phần lớn sự nhiễu điện trên. Các tụ này rất quan trọng và thiếu chúng, bạn có thể mong đợi những va chạm đột ngột từ phía vi điều khiển.
Sơ đồ mạch hoàn chỉnh:
S1, tụ C3 và kháng R9 tạo thành mạch đặt lại debouncing cho vi điều khiển. Các tụ C1, C2 và tinh thể 12MHz X1 liên quan đến mạch đồng hồ của vi điều khiển. R12 và R13 là các kháng kéo lên. Các phần còn lại của mạch đã được giải thích trước đó.
ORG 000H // origin
MOV P1,#00000011B // sets port 1 as input port
MOV P0,#00000000B // sets port 0 as output port
BACK: MOV P0,#00000011B // starts both motors
JB P1.0, LABEL1 // branches to LABEL1 if left sensor is ON
CLR P0.0 // stops left motor
SETB P0.1 // runs right motor
ACALL WAIT1 // calls WAIT1 subroutine
SJMP BACK // jumps back to the BACK loop
LABEL1: JB P1.1, LABEL2 // branches to LABEL2 if right sensor is ON
SETB P0.0 // runs left motor
CLR P0.1 // stops right motor
ACALL WAIT2 // calls WAIT2 subroutine
SJMP BACK // jumps back to the BACK loop
LABEL2: SJMP BACK // jumps back to the BACK loop
WAIT1:JNB P1.0,WAIT1 // waits until robot is back from rightward deviation
RET // returns from WAIT1 subroutine
WAIT2:JNB P1.1,WAIT2 // waits until robot is back from leftward deviation
RET // returns from WAIT2 subroutine
END // end statement
Chương trình bắt đầu bằng việc khởi tạo Port 1 như một cổng vào và Port 0 là một phần tử ra. Sau đó, cả hai động cơ được khởi động để robot tiến thẳng. Tiếp theo, chương trình kiểm tra xem có sự sai lệch về phía bên phải không. Nếu có sự sai lệch về phía bên phải, chương trình tắt động cơ bên trái và chạy động cơ bên phải và chờ đợi cho đến khi robot quay lại từ sự sai lệch. Khi robot quay trở lại đường, cả hai động cơ được khởi động
Hotline: 0979 466 469