Tình hình phát triển và nghiên cứu tới hiện nay
Ngày nay, sự phát triển của khoa học kỹ thuật tiên tiến đang làm thay đổi thế giới theo hướng văn minh và hiện đại hơn Những sản phẩm vi mạch tiên tiến được ra đời với tốc độ vượt trội, và chúng được ứng dụng vào Robot, giúp con người hoàn thành các công việc từ đơn giản đến phức tạp trong cuộc sống.
Nhu cầu công nghiệp và đời sống hiện đại đang thúc đẩy cuộc cách mạng công nghệ 4.0, với dự đoán rằng sau sự bùng nổ của internet, lĩnh vực robot sẽ tiếp tục phát triển mạnh mẽ Robot dò đường, một khái niệm quen thuộc với sinh viên và kỹ sư ngành kỹ thuật, đang được ứng dụng rộng rãi trong nhiều lĩnh vực và ngành nghề trong cuộc sống.
Robot vận chuyển hàng hóa:
Hình 1.1 Xe vận chuyển hàng hóa
Robot vận chuyển hàng hóa, hay còn gọi là xe tự hành AGV (Autonomous Guided Vehicles), được sử dụng rộng rãi trong các khu công nghiệp lớn để tự động phân phối và vận chuyển hàng hóa Những chiếc robot này kết hợp các cảm biến quang điện để định hướng đường đi và cảm biến siêu âm để tránh va chạm, đảm bảo an toàn cho hàng hóa và nhân viên kỹ thuật trong nhà máy.
Công nghệ ô tô tự lái:
Trước đây, ý tưởng về ô tô tự lái có vẻ viển vông, nhưng hiện nay nhiều mẫu xe đã được thử nghiệm và phát triển để thực hiện điều này Tại Việt Nam, các dòng xe như Mercedes và BMW mới đã được nhập khẩu và có khả năng tự động tìm vị trí đậu xe Mặc dù chưa có xe hoàn toàn tự động di chuyển trên đường, nhưng trong tương lai gần, ô tô không người lái chắc chắn sẽ trở thành hiện thực.
Công nghệ Robot lau nhà:
Robot lau nhà đã trở nên quen thuộc với nhiều người, sử dụng công nghệ cảm biến siêu âm để tránh va chạm thay vì đường line hay cảm biến quang điện Tuy nhiên, một trong những hạn chế lớn nhất của các robot và xe tự hành hiện nay là khả năng thiếu linh hoạt và khả năng thích ứng với các vị trí làm việc khác nhau Để cải thiện tính linh hoạt cho robot tự hành, việc phát triển các phương pháp tránh vật cản là rất cần thiết Hầu hết các robot và xe tự hành hiện đại đều áp dụng các phương pháp xác định đường đi, giúp chúng có khả năng điều hướng và tránh chướng ngại vật hiệu quả hơn.
Mô hình sản phẩm hướng tới
Robot đang ngày càng được ứng dụng rộng rãi trong công nghiệp và đời sống Nhóm chúng em quyết định nghiên cứu về một loại robot có khả năng di chuyển theo đường line cố định và tránh vật cản đơn giản, nhằm áp dụng kiến thức đã học vào thực tiễn Đây sẽ là bước đệm để phát triển những thiết bị tiên tiến hơn trong tương lai.
Lập trình Robot dò đường trong mê cung:
Hình 1.4 Robot dò đường trong mê cung
Robot này có cấu trúc tương tự như Robot đơn giản, nhưng với thuật toán phức tạp hơn, cho phép ghi nhớ và phân tích đường đi Bạn có thể lập trình cho Robot mặc định rẽ trái hoặc phải tại mỗi ngã ba, ngã tư Robot sẽ tiếp tục di chuyển theo đoạn đường đã chọn Nếu gặp đường cụt, Robot sẽ quay lại và tiếp tục theo thuật toán đã được cài đặt, chỉ rẽ trái hoặc phải Hãy thử nghiệm và bạn sẽ nhận được kết quả như mong muốn.
Lập trình robot do dường làm nhiệm vụ thám hiểm:
Robot đơn giản được trang bị cảm biến, camera và trí tuệ nhân tạo (AI) giúp đơn giản hóa quá trình tìm kiếm Thiết bị này hỗ trợ các nhà nghiên cứu địa chất trong việc ghi hình mục tiêu và xác định lộ trình để tạo bản đồ 3D, từ đó giảm thiểu các rủi ro tiềm ẩn trong các cuộc thám hiểm.
Qua tìm hiểu và học hỏi chúng em dự kiến sản phẩm sẽ có các chức năng sau:
− Đi theo vạch đen chỉ sẵn.
Yêu cầu phi chức năng:
Hệ thống chạy ổn định, độ chính xác cao.
Có thể mở rộng thêm nhiều tính năng.
Dễ bảo trì, sửa chữa.
Các thiết bị phần cứng, phầm mềm được sử dụng
Arduino Uno R3
1.3.1.1 Giới thiệu tổng quan về Arduino Uno R3
Bảng Arduino có nhiều phiên bản khác nhau như Arduino Mega và Arduino LilyPad, phục vụ cho nhiều mục đích sử dụng khác nhau Trong số đó, Arduino Uno R3 nổi bật là phiên bản phổ biến nhất nhờ vào chi phí hợp lý và tính linh hoạt cao.
Arduino Uno R3 có tính mở về phần cứng, dẫn đến sự xuất hiện của nhiều biến thể phù hợp với nhu cầu của các đối tượng khác nhau.
Để tận dụng tối đa sức mạnh của bo mạch Arduino, cần nắm rõ thông số kỹ thuật của từng loại và hiểu các khác biệt giữa các phiên bản, từ đó đưa ra giải pháp xử lý phù hợp.
1.3.1.2 Một vài thông số của Arduino Uno R3
Bảng 1.1 Thông số kỹ thuật của Arduino Uno R3
Vi điều khiển ATmega 328 họ 8bit Điện áp hoạt động 5V DC (chỉ được cấp qua cổng USB)
Tần số hoạt động 16MHz
Dòng tiêu thụ Khoảng 30mA Điện áp vào khuyên dùng
7 – 12 V DC Điện áp vào giới hạn 6 – 20 V DC
Số chân Digital 14 (6 chân hardware PWM)
Số chân Analog 6 (độ phân giải 10bit)
Dòng tối đa trên mỗi chân
Dòng ra tối đa (5V) 500 mA
Dòng ra tối đa (3.3V) 50 mA
Bộ nhớ flash 32 KB (ATmega 328) với 0.5 KB dùng bởi bootloader
Arduino UNO sử dụng ba vi điều khiển 8bit AVR: ATmega8, ATmega168 và ATmega328 Bộ vi điều khiển này có khả năng thực hiện các tác vụ đơn giản như điều khiển đèn LED nhấp nháy, xử lý tín hiệu cho xe điều khiển từ xa, và tạo ra trạm đo nhiệt độ - độ ẩm hiển thị trên màn hình LCD, cùng nhiều ứng dụng khác.
Arduino UNO có thể nhận nguồn 5V qua cổng USB hoặc từ nguồn ngoài với điện áp khuyên dùng từ 7-12V DC, giới hạn từ 6-20V Sử dụng pin vuông 9V là lựa chọn hợp lý khi không có nguồn từ cổng USB Lưu ý, nếu cấp nguồn vượt quá giới hạn này, bạn có thể làm hỏng Arduino UNO.
GND (Ground) là cực âm của nguồn điện cung cấp cho Arduino UNO Khi sử dụng các thiết bị với nguồn điện riêng biệt, các chân GND này cần được kết nối với nhau để đảm bảo hoạt động ổn định.
+ 5V: cấp điện áp 5V đầu ra Dòng tối đa cho phép ở chân này là 500mA.
+ 3.3V: cấp điện áp 3.3V đầu ra Dòng tối đa cho phép ở chân này là 50mA.
+ Vin (Voltage Input: để cấp nguồn ngoài cho Arduino UNO, bạn nối cực dương của nguồn với chân này và cực âm của nguồn với chân GND.
Chân IOREF trên Arduino UNO cho phép đo điện áp hoạt động của vi điều khiển, luôn duy trì ở mức 5V Tuy nhiên, không nên sử dụng chân này để lấy nguồn 5V, vì chức năng chính của nó không phải là cấp nguồn.
+ RESET : việc nhấn nút Reset trên board để reset vi điều khiển tương đương với việc chân RESET được nối với GND qua 1 điện trở 10KΩ.
Arduino UNO không có bảo vệ cắm ngược nguồn, vì vậy cần kiểm tra kỹ các cực âm và dương trước khi cấp nguồn để tránh hư hỏng Nên sử dụng nguồn từ cổng USB nếu có thể Các chân 3.3V và 5V chỉ dùng để cấp nguồn cho thiết bị khác, không phải là nguồn vào, và việc cấp sai có thể làm hỏng board Cấp nguồn ngoài qua cổng USB dưới 6V hoặc trên 13V vào chân RESET có thể gây hư hỏng Cường độ dòng điện vượt quá 200mA ở tất cả các chân Digital và Analog sẽ làm hỏng vi điều khiển ATmega328, và việc cấp điện áp trên 5.5V vào các chân này cũng có thể gây hư hỏng Ngoài ra, cường độ dòng điện qua bất kỳ chân Digital hoặc Analog nào vượt quá 40mA cần phải được hạn chế bằng điện trở để bảo vệ vi điều khiển.
Vi điều khiển Atmega328 tiêu chuẩn cung cấp cho người dùng:
Vi điều khiển với 32KB bộ nhớ Flash cho phép lưu trữ các đoạn lệnh lập trình Mặc dù một phần nhỏ trong số này, thường là vài KB, được dành cho bootloader, nhưng bạn có thể yên tâm rằng thường thì bạn không cần sử dụng quá 20KB bộ nhớ này cho các ứng dụng của mình.
SRAM (Bộ nhớ truy cập ngẫu nhiên tĩnh) có dung lượng 2KB, nơi lưu trữ giá trị các biến mà bạn khai báo trong lập trình Số lượng biến càng nhiều thì càng cần nhiều bộ nhớ RAM Tuy nhiên, bộ nhớ RAM thường không phải là điều mà bạn cần lo lắng Lưu ý rằng dữ liệu trên SRAM sẽ bị mất khi mất điện.
EEPROM (Bộ nhớ chỉ đọc có thể lập trình và xóa điện tử) với dung lượng 1KB hoạt động như một ổ cứng mini, cho phép người dùng đọc và ghi dữ liệu mà không lo mất mát khi mất điện, khác với dữ liệu trên SRAM.
Hình 1.8 Các cổng vào ra
Arduino UNO có 14 chân digital cho phép đọc và xuất tín hiệu với hai mức điện áp 0V và 5V Mỗi chân có dòng vào/ra tối đa là 40mA, và được trang bị các điện trở pull-up từ tích hợp trong vi điều khiển ATmega328, mặc dù các điện trở này không được kết nối mặc định.
Arduino Uno có một số chân digital với các chức năng đặc biệt Chân 0 (RX) và 1 (TX) dùng để gửi và nhận dữ liệu TTL Serial, cho phép giao tiếp với các thiết bị khác; tuy nhiên, nếu không cần giao tiếp Serial, bạn không nên sử dụng chúng Các chân PWM (~) 3, 5, 6, 9, 10, và 11 cho phép xuất xung PWM với độ phân giải 8bit, giúp điều chỉnh điện áp từ 0V đến 5V thông qua hàm analogWrite() Bên cạnh đó, chân giao tiếp SPI gồm 10 (SS), 11 (MOSI), 12 (MISO), và 13 (SCK) cũng hỗ trợ truyền phát dữ liệu với các thiết bị khác Cuối cùng, LED 13, có màu cam và được nối với chân số 13, sẽ nhấp nháy khi nhấn nút Reset, đồng thời sáng khi chân này được sử dụng.
Arduino UNO trang bị 6 chân analog (A0 → A5) với độ phân giải tín hiệu 10 bit, cho phép đọc giá trị điện áp từ 0V đến 5V Chân AREF trên board cho phép cung cấp điện áp tham chiếu, ví dụ nếu cấp 2.5V, các chân analog có thể đo điện áp trong khoảng 0V đến 2.5V với độ phân giải 10 bit Đặc biệt, Arduino UNO còn có 2 chân A4 (SDA) và A5 (SCL) hỗ trợ giao tiếp I2C/TWI với các thiết bị khác.
Arduino Motor Shield L293D
Hình 1.9 Module điều khiển động cơ
Arduino Motor Shield là một board mở rộng cho các board Arduino, cho phép điều khiển động cơ DC, động cơ bước và động cơ servo một cách dễ dàng Thiết kế gọn gàng và đẹp mắt của Arduino Motor Shield hoàn toàn tương thích với các board như Arduino Uno R3, Arduino Leonardo và Arduino Mega2560, giúp người dùng nhanh chóng sử dụng và điều khiển các loại động cơ.
Arduino Motor Shield sử dụng 2 IC cầu H hoàn chỉnh với các chế độ bảo vệ và 1 IC logic 74HC595 để điều khiển các động cơ.
Arduino Motor Shield hỗ trợ điều khiển đa dạng các loại motor như step motor, servo motor và motor DC, với khả năng hoạt động ở mức điện áp lên đến 36V và dòng tối đa 600mA cho mỗi kênh điều khiển.
- Điện áp đầu vào: 4.5V đến 36V.
- Tương thích với các board Arduino Uno R3, Arduino Leonardo R3 và Arduino Mega 2560.
- Có thể điều khiển động cơ DC (4 động cơ), động cơ servo (2 động cơ) và động cơ bước (2 động cơ) 2 cổng điều khiển servo motor được đánh dấu:
Servo_1 và Servo_2 trên linh kiện Các cổng điều khiển động cơ DC được đánh dấu lần lượt là M1, M2, M, M4, chân giữa là chân GND.
Cổng điều khiển động cơ servo 5V với timer độ phân giải cao là lựa chọn lý tưởng cho các ứng dụng điều khiển chính xác bằng Arduino.
Bài viết đề cập đến việc sử dụng 2 IC Driver, cho phép điều khiển 4 động cơ DC thông qua 4 cầu H Mỗi cầu H có dòng ra tối đa 0.6A, trong khi dòng chịu đựng cực đại đạt 1.2A cho mỗi kênh điều khiển.
- Các cổng M dùng điều khiển động cơ DC được điều khiển bằng tín hiệu PWM.
The driver supports the control of two stepper motors, featuring two ports for servo motors that can also be utilized for stepper motors With the shield, stepper motors can operate in all modes: full step, half step, and micro-step The stepper motors compatible with the driver can be either unipolar or bipolar types.
- Có sẵn nút RESET để khởi động lại board Arduino.
Cảm biến vật cản hồng ngoại
1.3.3.1 Giới thiệu cảm biến hồng ngoại
Cảm biến hồng ngoại (IR Sensor) là thiết bị điện tử dùng để đo và phát hiện bức xạ hồng ngoại trong môi trường Bức xạ này được phát hiện lần đầu bởi nhà thiên văn học William Herschel vào năm 1800 khi ông đo nhiệt độ của các màu ánh sáng khác nhau Ông nhận thấy rằng nhiệt độ vượt ra ngoài ánh sáng đỏ là cao nhất IR Sensor không thể nhìn thấy bằng mắt thường do bước sóng của nó dài hơn ánh sáng khả kiến, nhưng vẫn nằm trong cùng một phổ điện từ Tất cả các vật thể có nhiệt độ trên năm độ Kelvin đều phát ra bức xạ hồng ngoại.
Cảm biến hồng ngoại được chia thành hai loại: chủ động và thụ động Cảm biến hồng ngoại chủ động bao gồm diode phát sáng (LED) và máy thu, hoạt động bằng cách phát ra bức xạ hồng ngoại Khi một vật thể tiến gần, ánh sáng hồng ngoại từ LED sẽ phản xạ và được máy thu phát hiện Loại cảm biến này thường được sử dụng trong các hệ thống phát hiện chướng ngại vật, chẳng hạn như trong robot.
Hình 1.10 Cảm biến hồng ngoại
Cảm biến hồng ngoại hoạt động bằng cách sử dụng một cảm biến ánh sáng đặc biệt để phát hiện bước sóng ánh sáng trong phổ hồng ngoại (IR) Khi sử dụng đèn LED phát ra ánh sáng cùng bước sóng mà cảm biến đang tìm kiếm, bạn có thể quan sát cường độ ánh sáng nhận được.
Hình 1.11 Nguyên lý hoạt động của cảm biến hồng ngoại
Khi một vật thể tiếp cận cảm biến, ánh sáng từ đèn LED phản chiếu từ vật thể vào cảm biến ánh sáng, tạo ra sự gia tăng cường độ đáng kể Sự thay đổi này có thể được phát hiện thông qua việc sử dụng một ngưỡng nhất định.
Bộ so sánh sử dụng LM393, làm việc ổn định
Điện áp làm việc: 3.3V – 5V DC.
Khi bật nguồn, đèn báo nguồn màu đỏ sáng.
Lỗ vít 3 mm, dễ dàng cố định, lắp đặt
Các mô-đun đã được so sánh điện áp ngưỡng qua chiết áp Khi sử dụng ở chế độ thông thường, hãy tránh tự ý điều chỉnh chiết áp để đảm bảo hiệu suất hoạt động.
Hình 1.12 Sơ đồ cảm biến hồng ngoại
VCC: điện áp chuyển đổi từ 3.3V đến 5V (có thể được kết nối trực tiếp đến vi điều khiển 5V và 3.3V)
OUT: đầu ra kỹ thuật số (0 và 1)
Động cơ một chiều
Động cơ điện một chiều hoạt động bằng dòng điện một chiều và thường được ứng dụng trong các lĩnh vực cần mô men khởi động cao hoặc yêu cầu tăng tốc êm ở nhiều mức tốc độ khác nhau Động cơ này bao gồm ba thành phần chính.
Cực từ là yếu tố quan trọng trong động cơ một chiều, nơi mà sự tương tác giữa hai từ trường tạo ra chuyển động quay Động cơ này có các cực từ cố định, trong khi phần ứng quay giữa chúng Một động cơ một chiều cơ bản thường có hai cực từ: cực bắc và cực nam, với các đường sức từ chạy từ cực bắc đến cực nam Đối với những động cơ phức tạp hơn, có thể sử dụng nhiều nam châm điện được cấp điện từ bên ngoài để tạo ra cấu trúc từ trường cần thiết.
Khi dòng điện đi qua phần ứng hình trụ, nó trở thành một nam châm điện và được kết nối với trụ để kéo tải Trong động cơ một chiều nhỏ, phần ứng quay trong từ trường do các cực tạo ra, dẫn đến việc hoán đổi vị trí giữa cực bắc và cực nam tương ứng với góc quay của phần ứng Khi sự hoán đổi hoàn tất, dòng điện sẽ đảo chiều, làm cho các cực bắc và nam của phần ứng thay đổi.
Cổ góp là bộ phận quan trọng trong động cơ một chiều, giúp đảo chiều dòng điện trong phần ứng và hỗ trợ truyền điện giữa phần ứng và nguồn điện Một trong những ưu điểm nổi bật của động cơ điện một chiều là khả năng điều khiển tốc độ mà không ảnh hưởng đến chất lượng điện cung cấp.
Có thể điều khiển động cơ loại này bằng các điều chỉnh:
Điện áp phần ứng: Tăng điện áp phần ứng sẽ làm tăng tốc độ.
Giảm dòng kích thích sẽ làm tăng tốc độ của động cơ điện một chiều, loại động cơ này thường được sử dụng cho các thiết bị có tốc độ chậm và công suất thấp đến trung bình Tuy nhiên, khi đạt công suất lớn, động cơ một chiều có thể gặp trục trặc với các cổ góp cơ Ngoài ra, động cơ này cũng chỉ nên sử dụng trong những khu vực sạch và không độc hại để tránh nguy cơ đánh lửa từ chổi than.
Cảm biến siêu âm HC- SR04
Hình 1 14 Cảm biến siêu âm HC-SR04
Cảm biến HC-SR04 hoạt động dựa trên sóng siêu âm, cho phép đo khoảng cách từ 2 đến 300 cm Độ chính xác của cảm biến này chủ yếu phụ thuộc vào cách lập trình.
Các chân của cảm biến:
Bảng 1.3 Các chân của Cảm biến siêu âm
Trig Chân điều khiển phát
Echo Chân nhận tín hiệu phản hồi
Cảm biến siêu âm SR04 hoạt động dựa trên nguyên lý phản xạ sóng siêu âm, bao gồm hai module: một module phát sóng và một module thu sóng phản xạ Khi cảm biến phát ra sóng siêu âm với tần số 40kHz, nếu có chướng ngại vật, sóng sẽ phản xạ trở lại và được module thu nhận Bằng cách đo thời gian từ khi sóng được phát ra đến khi nhận được, chúng ta có thể xác định khoảng cách từ cảm biến đến chướng ngại vật.
Khoảng cách = (thời gian * vận tốc âm thanh (340 m/s) / 2
Hình 1.15 Nguyên lý hoạt động của cảm biến siêu âm
Thông số kỹ thuật của cảm biến siêu âm HC-SR04:
Một số linh kiện khác
1.3.6.1 Khung xe rô bốt 4 bánh:
Hình 1.16 Khung xe robot 4 bánh
Khung xe được trang bị 4 động cơ giảm tốc DC, cho phép chuyển hướng linh hoạt nhờ vào khả năng xử lý tốc độ của động cơ Với kích thước lớn, khung xe dễ dàng mở rộng và thuận tiện cho việc lắp đặt các module cũng như mạch điện hỗ trợ.
Xe robot 4 bánh mang lại nhiều ứng dụng vượt trội so với xe robot 3 bánh, nhờ khả năng điều chỉnh hướng đi linh hoạt và dễ dàng Với khả năng xoay xe dựa trên việc điều khiển tốc độ của từng bánh, loại xe này rất phù hợp cho các ứng dụng robot tự hành, giúp tránh vật cản hiệu quả Hơn nữa, xe có thể được lắp ghép với cánh tay robot để thực hiện các nhiệm vụ điều khiển phức tạp hơn.
- 4 động cơ hộp giảm tốc, điện áp cung cấp cho động cơ 6-9V
- 4 bánh xe robot bằng nhựa, lốp chất liệu cao su
- 1 bộ ốc vít và ke để gắn động cơ vào khung xe
- 1 bộ cọc đồng để ghép 2 tấm đế mica
- Điện áp sử dụng: 3~6VDC.
- Dòng điện tiêu thụ: 110-200mA
Dùng để làm vỏ xe.
Tấm Formex (Fomex) là vật liệu cao cấp được sản xuất từ nhựa PVC qua công nghệ hiện đại, kết hợp với bọt để tạo thành hình dạng đặc trưng Vật liệu này không chỉ mang lại những ưu điểm vượt trội của gỗ mà còn sở hữu những đặc điểm ấn tượng nhờ sự kết hợp của nguyên liệu mới.
1.3.6.3 Dây Breadbroad: a Male to male (Đực - đực): phổ biến
Hình 1.18 Dây đực – đực b Female to Female (Cái - cái) Dùng để nối dài hoặc nối giữa các module với nhau
Hình 1.19 Dây cái- cái c Male to female (Đực - cái): thường dùng
Hình 1.20 Dây đực cái d Đế pin
Phân Tích và Thiết Kế Hệ Thống
Phân tích hệ thống
2.1.1 Xây dựng biểu đồ use case tổng quát
Hình 2.23 Sơ đồ UseCase Tổng quát
2.1.2 Đặc tả ca sử dụng
Bảng 2.1 Ca sử dụng tiến lên
Description Xe dò đường tiến lên phía trước
Khi có thông tin truyền từ cảm biến hồng ngoại, hai cảm biến của xe dò đường sẽ nằm trên vạch kẻ đen Trong quy trình cơ bản, cả hai cảm biến hồng ngoại đều nhận được tín hiệu từ vạch kẻ đen.
2) Arduino nhận tín hiệu từ cảm biến và xuất tín hiệu tiến lên cho Module
3) Module L293D điều khiển các động tiến lên
4) Động cơ hai bên khởi động tiến lên và xe tiến lên Exception flow 1) Hai cảm biến xe nhận được hai tín hiệu từ hai đường kẻ đen và trắng khác nhau
2) Arduino nhận tín hiệu và xuất tín hiệu cho Module L293D
3) Module L293D điều khiển hai động cơ DC để xe sang trái hoặc sang phải
Bảng 2.2 Ca sử dụng rẽ trái
Description Xe dò đường rẽ sang bên trái
Khi có tín hiệu từ cảm biến hồng ngoại, cảm biến bên phải cần phải nằm trên đường trắng, trong khi cảm biến giữa và cảm biến bên trái hoặc chỉ cảm biến bên trái phải được đặt trên đường kẻ đen.
Cảm biến bên phải nhận tín hiệu từ đường trắng, trong khi cảm biến giữa và cảm biến bên trái có thể chỉ cần cảm biến bên trái để thu tín hiệu từ đường kẻ đen.
2) Arduino nhận tín hiệu và xuất tín hiệu rẽ trái cho Arduino Motor Shield L293D
3) Arduino Motor Shield L293D điều khiển động cơ DC rẽ trái
4) Động cơ bánh xe khởi động rẽ trái và xe chạy sang trái
Bảng 2.3 Ca sử dụng rẽ phải
Description Xe dò đường rẽ sang bên phải
Khi có thông tin truyền từ cảm biến hồng ngoại, cảm biến bên trái cần nằm trên đường kẻ trắng, trong khi cảm biến giữa và cảm biến bên phải phải nằm trên đường kẻ đen.
Basic flow 1) Cảm biến bên trái thu được tín hiệu truyền về từ đường trắng, cảm biến bên phải thu được tín hiệu truyền về từ đường kẻ đen
2) Arduino nhận tín hiệu và xuất tín hiệu rẽ phải cho Arduino Motor Shield L293D
3) Arduino Motor Shield L293D điều khiển động cơ DC rẽ phải
4) Động cơ hai bên bánh xe khởi động rẽ phải và xe chạy sang phải
Bảng 2.4 Ca sử dụng tránh vật cản
Use case Tránh vật cản
Description Xe dò đường lùi lại và xoay trái đi thẳng
1 đoạn sau đó xoay phải đi một đoạn tương tự rồi xoay trái và đi thẳng
Cảm biến siêu âm HC-SR04 được kích hoạt khi nhận được thông tin truyền, cho phép phát hiện vật cản ở khoảng cách 25cm phía trước xe.
Basic flow 1) Cảm biến siêu âm HC-SR04 thu được tín hiệu phát hiện có vật cản phía trước.
2) Arduino nhận tín hiệu và xuất tín hiệu rẽ trái cho Arduino Motor Shield L293D
3) Arduino Motor Shield L293D điều khiển động cơ DC đi lùi
4) Động cơ bánh xe khởi động lùi và xe chạy chạy lùi
5) Arduino Motor Shield L293D điều khiển động cơ DC rẽ phải
6) Động cơ bánh xe khởi động rẽ phải và xe rẽ phải
7) Arduino Motor Shield L293D điều khiển động cơ DC đi thẳng
8) Động cơ bánh xe khởi động xe đi thẳng và xe đi thẳng.
9) Arduino Motor Shield L293D điều khiển động cơ DC rẽ trái
10) Động cơ bánh xe khởi động xe rẽ trái và xe rẽ trái
11) Xe đi đến vạch line ban đầu và tiếp tục đi theo đường
Exception flow Nếu không gặp lại được line ban đầu thì xe dừng lại
Hình 2.24 Biểu đồ trình tự tiến lên
Biểu đồ tuần tự tiến lên mô tả quá trình nhận tín hiệu từ vạch kẻ đường đến hai cảm biến Khi cảm biến phát hiện tín hiệu từ đường kẻ đen, nó sẽ thông báo cho Arduino Uno Sau đó, Arduino Uno sẽ truyền tín hiệu đến Module L293D để điều khiển motor tiến lên.
Hình 2.25 Biểu đồ trình tự rẽ phải
Biểu đồ tuần tự rẽ phải mô tả quá trình nhận tín hiệu từ vạch kẻ đường đến hai cảm biến Khi cảm biến bên trái nhận tín hiệu từ đường kẻ trắng và cảm biến bên phải nhận tín hiệu từ đường kẻ đen, thông tin sẽ được gửi đến Arduino Uno Từ đó, Arduino Uno sẽ truyền tín hiệu đến Module L293D để điều khiển motor rẽ phải.
Hình 2.26 Biểu đồ trình tự rẽ trái
Biểu đồ tuần tự rẽ trái mô tả quá trình nhận tín hiệu từ vạch kẻ đường đến hai cảm biến Khi cảm biến bên trái nhận tín hiệu từ đường kẻ đen và cảm biến bên phải nhận tín hiệu từ đường kẻ trắng, tín hiệu sẽ được gửi đến Arduino Uno Từ đó, Arduino Uno truyền tín hiệu đến Module L293D để điều khiển motor thực hiện việc rẽ trái.
Hình 2.27 Biểu đồ trình tự tránh vật cản
Biểu đồ tuần tự xe tránh vật cản mô tả quá trình hoạt động khi xe phát hiện vật cản ở phía trước Khi nhận tín hiệu từ cảm biến, Arduino sẽ điều khiển Module L293D để xe lùi lại, sau đó rẽ phải và di chuyển một đoạn Tiếp theo, xe sẽ rẽ trái và tiếp tục đi thẳng cho đến khi gặp lại đường line, sau đó sẽ tiếp tục di chuyển theo đường line.
Thiết kế hệ thống
2.2.1 Sơ đồ khối và nguyên lý hoạt động
Bảng 2.5 Sơ đồ khối tổng quát
Arduino R3 có khả năng xử lý tín hiệu từ module Bluetooth hoặc cảm biến hồng ngoại, từ đó phát tín hiệu điều khiển cho module điều khiển động cơ, giúp điều khiển hoạt động của động cơ theo chương trình đã lập trình.
Cảm biến hồng ngoại: cảm biến nhận tín hiệu phản xạ từ bề mặt sáng tối gửi tín hiệu về cho vi điều khiển.
Cảm biến siêu âm HC-SR04: cảm biến nhận tín hiệu phản xạ từ vật chắn phía trước về cho vi điều khiển.
Arduino Motor Shield L293D : nhận tín hiệu từ vi điều khiển để điều khiển động cơ hoạt động chính xác.
Khối nguồn: Cung cấp nguồn cho mạch hoạt động.
Khi cấp nguồn cho mạch xe tự khởi động chế độ dò đường, Arduino nhận tín hiệu từ cảm biến hồng ngoại để điều khiển module động cơ, giúp xe di chuyển theo đoạn đường màu đen đã được xác định Cảm biến hồng ngoại phát ra bước sóng và phản xạ từ bề mặt sáng, cho phép phát hiện vạch màu đen Robot sẽ di chuyển chính xác nhờ vào việc nhận diện đoạn đường nào là màu đen và đoạn nào không Khi robot tiến lên, cả hai cảm biến trái và phải sẽ chờ, và nếu một trong hai cảm biến phát hiện vạch màu đen, Arduino sẽ điều chỉnh hướng di chuyển của xe thông qua driver để rẽ trái hoặc phải phù hợp.
Khi phát hiện vật cản cách xe 25cm, cảm biến siêu âm sẽ gửi tín hiệu đến Arduino, khiến xe lùi lại và xoay trái theo đường tam giác để tránh vật cản Sau đó, xe sử dụng cảm biến hồng ngoại để xác định lại vạch kẻ ban đầu.
2.2.2.1 Sơ đồ thuật toán chính
Hình 2.28 Sơ đồ chương trình chính
2.2.2.2 Sơ đồ thuật toán tự động
Hình 2.29 Sơ đồ thuật toán tự động
Sơ đồ nối dây
2.3.1 Sơ đồ kết nối động cơ với Shield L293D
Kết nối động cơ với Shield L293D bao gồm các chân kết nối như sau: động cơ trái (trước) được gán là M1, động cơ trái (sau) là M2, động cơ phải (sau) là M3, và động cơ phải (trước) là M4.
2.3.2 Sơ đồ kết nối mạch với cảm biến siêu âm
Hình 2.31 Kết nối mạch với cảm biến siêu âm Bảng 2.7 Chân kết nối cảm biến siêu âm Động cơ L293D
Cảm biến siêu âm HC-SR04
2.3.4 Sơ đồ mạch kết nối với cảm biến hồng ngoại
Hình 2.32 Kết nối mạch với cảm biến hồng ngoại
Bảng 2.8 Chân kết nối cảm biến hồng ngoại Động cơ L293D
Cảm biến hồng ngoại HW-201
2.3.5 Sơ đồ tổng quát của hệ thống
Hình 2.9 Sơ đồ tổng quát của hệ thống
Mạch thực tế
Hình 2.33 Cảm biến do line
Hình 2.34 Cảm biến siêu âm
3.1 Kịch bản thực nghiệm Đặt xe trên đường line cố định màu đèn, rồi bật công tắc cho xe xem xe có chạy như thiết kế hay không Nếu có thì đặt thêm vật cản để xe tránh như thế nào.
Hình 3.35 Xe sau khi lắp xong
- Xe chạy nhanh khi trên đường line thẳng, chạy chậm trên đường line rẽ phải, trái.
- Xe tránh được vật cản nhưng trong trường hợp vật cản quá to thì xe chạy lỗi.
- Chạy ổn định khi nguồn mạnh.
- Xe chạy được tầm 10p thì bắt gặp hiện tượng ngừng chạy, chạy ngập ngừng.
Kết Luận a) Về cơ bản mạch đã hoạt động và đi theo đường kẻ vẽ sẵn. b) Nhưng vẫn tồn tại một số vấn đề như sau:
Cảm biến hồng ngoại có những hạn chế nhất định, đặc biệt là mức độ hồi tiếp hồng ngoại phụ thuộc vào độ sáng của môi trường Trong những điều kiện ánh sáng không ổn định hoặc khi môi trường tối, hiệu suất hoạt động của xe có thể bị ảnh hưởng, dẫn đến sự không ổn định trong quá trình vận hành.
+ Khi di chuyển ở những đường kẻ phức tạp hơn thì xe hoạt động trở nên không chính xác.
+ Nguồn cấp còn hạn chế. c) Ưu điểm:
Xe được thiết kế với sự đơn giản và chi phí thấp, giúp mọi người dễ dàng tiếp cận và nghiên cứu Nó hoạt động theo lộ trình đã định sẵn, giúp tránh được các vật cản và đạt được mục tiêu đề ra.
+ Khi xe dò ở đường kẻ phức tạp hơn thì hoạt động còn nhiều sai sót.
+ Phần code tránh vật cản là code hoạt động một cách thủ công chứ chưa thật sự tự động.
Dù chỉ là một ứng dụng nhỏ, nhưng nó là nền tảng cho việc phát triển các dự án lớn và tiên tiến hơn như Robot đi trong mê cung, Robot vận chuyển hàng hóa, và Robot thám hiểm Dự án xe dò đường tránh vật cản có thể được nâng cấp cho nhiều ứng dụng hiện đại hơn, bao gồm Robot dò đường bằng PIC, Robot dò đường micro 51, và Robot dò đường siêu âm.
[1] R Man, "Chế robot dò line tránh vật cản sử dụng arduino V2," [Online] Available: https://www.youtube.com/watch?v=Js5XzLoxL3Q.
Cách sử dụng module điều khiển động cơ L293DN là một giải pháp hiệu quả để điều khiển động cơ DC Module này hoạt động trên nguyên lý cầu H, cho phép điều chỉnh chiều quay của động cơ một cách dễ dàng Để bắt đầu, bạn cần kết nối module với nguồn điện và các chân điều khiển từ vi điều khiển Việc sử dụng L293DN giúp bảo vệ vi điều khiển khỏi dòng điện cao, đồng thời cung cấp khả năng điều khiển mượt mà cho động cơ.
[3] P HUY, "Mô-đun cảm biến hồng ngoại (IR) với Arduino," [Online] Available: https://thuongtin.net/mo-dun-cam-bien-hong-ngoai-ir-voi-arduino/.
[4] minhsgc, "Robot tránh vật cản," [Online] Available: http://arduino.vn/result/1306- robot-tranh-vat-can.
[5] jckuri, "line-follower-robot," [Online] Available: https://github.com/jckuri/line- follower-robot.
AF_DCMotor motor1(1, MOTOR12_1KHZ);
AF_DCMotor motor2(2, MOTOR12_1KHZ);
AF_DCMotor motor3(3, MOTOR34_1KHZ);
AF_DCMotor motor4(4, MOTOR34_1KHZ); int distance; int speedSet = 0; boolean goesForwardse;
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE); void setup() { pinMode(left, INPUT); pinMode(right, INPUT); pinMode(center, INPUT);
{ distance = readPing(); if (distance < 25) { moveBackward(); delay(200); turnRight(); delay(500); moveForward(); delay(200); turnLeft(); delay(500); turnLeft(); delay(500); moveForward();
} if (digitalRead(left) == 0 && digitalRead(right) == 0 && digitalRead(center) == 1) {
The robot is programmed to move forward with all four motors activated Each motor, including motor1, motor2, motor3, and motor4, is set to operate at a speed of 150, which falls within the speed range of 0 to 255 This configuration ensures coordinated movement and effective navigation for the robot.
} // Robot so sánh tín hiệu 2 cảm biến else if (digitalRead(left) == 1 && digitalRead(right) == 0 && digitalRead(center) == 0) {
// rẽ trái motor1.run(FORWARD); motor1.setSpeed(150); motor2.run(FORWARD); motor2.setSpeed(150); motor3.run(BACKWARD); motor3.setSpeed(150); motor4.run(BACKWARD); motor4.setSpeed(150);
} else if (digitalRead(left) == 1 && digitalRead(right) == 0 && digitalRead(center) == 1) {
// rẽ trái motor1.run(FORWARD); motor1.setSpeed(150); motor2.run(FORWARD); motor2.setSpeed(150); motor3.run(BACKWARD); motor3.setSpeed(150); motor4.run(BACKWARD); motor4.setSpeed(150);
} // Robot so sánh tín hiệu cảm biến else if (digitalRead(left) == 0 && digitalRead(right) == 1 && digitalRead(center) == 0) {
// rẽ phải motor1.run(BACKWARD); motor1.setSpeed(150); motor2.run(BACKWARD); motor2.setSpeed(150); motor3.run(FORWARD); motor3.setSpeed(150); motor4.run(FORWARD); motor4.setSpeed(150);
} else if (digitalRead(left) == 0 && digitalRead(right) == 1 && digitalRead(center) == 1) {
// rẽ phải motor1.run(BACKWARD); motor1.setSpeed(150); motor2.run(BACKWARD); motor2.setSpeed(150); motor3.run(FORWARD); motor3.setSpeed(150); motor4.run(FORWARD); motor4.setSpeed(150);
} // khi 3 cảm biến không có tín hiệu trả về else if (digitalRead(left) == 1 && digitalRead(right) == 1 && digitalRead(center) == 1) { moveStopped();
To execute a right turn, the function `turnRight()` activates motor1 and motor2 to move forward while motor3 and motor4 run backward for 500 milliseconds After this delay, all motors are set to run forward, ensuring a smooth transition to the right.
To execute a left turn, the function initiates movement by activating motor1 and motor2 in reverse while motor3 and motor4 move forward After a brief delay of 500 milliseconds, all motors are then set to move forward to complete the turn.
The function `moveForward()` initiates forward movement by first checking if the robot is not already moving forward If it isn't, it sets the `goesForward` flag to true and activates all four motors to run in the forward direction To gradually increase speed and prevent excessive battery drain, a loop increments the speed from zero to the maximum speed in steps of two, with a slight delay between each adjustment to ensure smooth acceleration.
} } } void moveStopped() { motor1.run(RELEASE); motor1.setSpeed(0); motor2.run(RELEASE); motor2.setSpeed(0); motor3.run(RELEASE); motor3.setSpeed(0); motor4.run(RELEASE); motor4.setSpeed(0);