- Trong các ứng dụng dân dụng và công nghiệp, các bộ vi mạch vi điều khiển được sử dụng rộng rãi và chúng đã phát huy được tính ưu việt của nó và ngày càng được sử dụng rộng rãi hơn.. -
PHẦN MỞ ĐẦU
Ngày nay, với những ứng dụng của khoa học kỹ thuật tiên tiến, thế giới của chúng ta đã và đang ngày một thay đổi, văn minh và hiện đại hơn Sự phát triển của kỹ thuật điện tử đã tạo ra hàng loạt những thiết bị với các đặc điểm nổi bật nhƣ sự chính xác cao, tốc độ nhanh, gọn nhẹ là những yếu tố rất cần thiết góp phần cho hoạt động của con người đạt hiệu quả cao
Các bộ điều khiển sử dụng vi điều khiển tuy đơn giản nhƣng để vận hành và sử dụng đƣợc lại là một điều rất phức tạp Các bộ vi điều khiển theo thời gian cùng với sự phát triển của công nghệ bán dẫn đã tiến triển rất nhanh, từ các bộ vi điều khiển 4 bit đơn giản đến các bộ vi điều khiển 32 bit, rồi sau này là 64 bit Điện tử đang trở thành một ngành khoa học đa nhiệm vụ Điện tử đã đáp ứng đƣợc những đòi hỏi không ngừng từ các lĩnh vực công – nông – lâm – ngƣ nghiệp cho đến các nhu cầu cần thiết trong hoạt động đời sống hằng ngày
Robot có vai trò rất quan trọng trong đời sống hiện nay đặc biệt là những ứng dụng của nó trong công nghiệp, sản xuất kinh tế, quốc phòng… Vì vậy em chọn đề tài
“ Thiết kế robot dò line tránh vật cản ” để làm đồ án điều khiển tự động
Mặc dù đã rất cố gắng thiết kế và làm mạch nhƣng do thời gian ngắn và năng lực còn hạn chế nên mạch vẫn còn những sai sót Em mong thầy (cô) giáo góp ý để em sớm hoàn thành đồ án này
Em xin chân thành cảm ơn!
TỔNG QUAN ROBOT DÒ LINE
Tổng quan về ứng dụng vi điều khiển
- Với sự phát triển không ngừng của khoa học kỹ thuật, đặc biệt là sự phát triển trong ngành điện tử đã đem đến rất nhiều ứng dụng trong công nghiệp và trong sinh hoạt gia đình
- Từ khi công nghệ chế tạo loại vi mạch lập trình phát triển đã đem đến những phương thức kỹ thuật điều khiển hiện đại có nhiều ưu điểm hơn so với việc sử dụng các mạch điều khiển lắp ráp bằng các linh kiện rời như kích thước nhỏ, giá thành rẻ, độ làm việc tin cậy, công suất tiêu thụ nhỏ
- Trong các ứng dụng dân dụng và công nghiệp, các bộ vi mạch vi điều khiển đƣợc sử dụng rộng rãi và chúng đã phát huy đƣợc tính ƣu việt của nó và ngày càng đƣợc sử dụng rộng rãi hơn
- Việc sử dụng các bộ vi điều khiển để điều khiển các công việc mang tính lặp lại có chu kì là cần thiết để thay thế sự giám sát của con người, giảm được số lượng nhân công trong các dây chuyền sản xuất, thay con người thực hiện các công việc mang tính nguy hiểm, độc hại,
Giới thiệu về robot dò line
Ngày nay, khoa học kĩ thuật càng ngày càng phát triển, không chỉ phát triển ở một nhóm nước ở châu âu như trước đây mà lan rộng ra toàn cầu Một trong những bước tiến của khoa học đáng kể đến là sự xuất hiện và ra đời của robot - những bộ máy thông minh
Robot thực ra đó là những máy móc được con người chế tạo từ nhiều vật liệu khác nhau, nhƣng chủ yếu là những vật liệu dẫn điện Gọi là những máy móc thông minh vì robot có thể làm những công việc thay thế con người từ những công việc đơn giản nhất cho đến những công việc phức tạp
Có thể hiểu cấu trúc robot nhƣ sau:
Robot gồm có hai phần:
+ Phần cứng: là phần cấu tạo nên cấu trúc hoạt động của robot (có thể xem là phần ta có thể xem là mắt thường)
+ Phần mềm: là phần chương trình được lập trình viên viết và nạp vào robot nhằm điều khiển robot hoạt động độc lập (có thể xem đây là phần không thể nhìn thấy bằng mắt thường)
Nhận thức đƣợc tầm quan trọng của robot đối với đời sống ngày nay chúng em đã mạnh dạn chế tạo robot dò line - một dạng của robot
Robot dò line là loại robot có cấu tạo nhƣ một loại xe có thể tự động nhận dạng và chạy theo một đường đi có sẵn và tự tính toán đường đi để tới đích mà không cần người điều khiển nhờ chương trình được nạp sẵn do người lập trình viết nên Robot chúng em dò theo những vạch đường và ở đây là vạch đen trên nền trắng
Trong đó, những đường thẳng đen là những vạch robot dò đường đi Còn phần sân là một màu trắng đối lập với vạch đen nhằm để robot không bị nhiễu khi dò đường Sở dĩ nhƣ vậy vì cảm biến trong robot nhận dạng và phát hiện vạch đen.
Ứng dụng của robot dò đường
- Ứng dụng trong cuộc sống hằng ngày: chúng ta có thể chế tạo máy hút bụi tự động từ một robot mini gắn một máy hút bụi nhỏ ở trên, robot sẽ tự động di chuyển trong nhà đồng thời máy hút bụi cũng hoạt động sẽ làm sạch bụi bẩn dưới mặt sàn nhà
- Ứng dụng trong công nghiệp: chế tạo một robot vận chuyển hàng hóa trên tuyến đường cố định, dựa vào khả năng di chuyển theo vạch của robot ta vạch một đường đi từ xưởng sản xuất A sang xưởng sản xuất B từ đó robot co thể chở hàng hóa đi theo đường đã vật từ xưởng sản xuất A sang xưởng sản xuất B và ngược lại
- Ứng dụng trong quân sự: chế tạo những robot dò mìn, hiện nay khoa học đã phát triển hơn nhiều robot có khả năng di chuyển dựa vào việc xử lý ảnh do robot chụp lại, từ đó robot có thể tìm được đường đi và phát hiện ra mìn,vật cần tìm
THIẾT KẾ VÀ TÌM HIỂU LINH KIỆN CỦA HỆ THỐNG
Yêu cầu đề tài
Sử dụng Arduino UNO R3 thông qua bộ cảm biến dò đường để xuất tín hiệu cho Module L298 điều khiển bánh xe đi đúng vạch.
Gải pháp thiết kế
3.2.1 Sơ đồ khối Để thực hiện đƣợc thiết kế và chế tạo robot dò line em đƣa ra sơ đồ thiết kế nhƣ sau:
Hình 3.1 Sơ đồ khối robot dò đường
3.2.2 Phân tích chức năng các khối
- Khối cấp nguồn: Khối cấp nguồn 5VDC có chức năng cấp nguồn 5V cho các khối có thể hoạt động đƣợc
- Khối cảm biến: Sử dụng module cảm biến dò đường để nhận tín hiệu từ bên ngoài xong chuyển tín hiệu sang khối so sánh
- Khối so sánh: Nhận tín hiệu từ khối cảm biến, so sánh và khếch đại tín hiệu để đưa ra mức logic 0 tương ứng với trạng thái có vạch và mức logic 1 tương ứng với trạng thái không vạch rồi chuyển tín hiệu cho khối điều khiển trung tâm xử lý
- Khối điều khiển trung tâm: Sử dụng Arduino Uno R3, nhận tín hiệu từ khối so sánh rồi tính toán để xác định trạng thái robot đang di chuyển và xuất ra tín hiệu xung chuyển qua khối điều khiển động cơ
- Khối điều khiển động cơ: Sử dụng module L298 để nhận tín hiệu từ khối điều khiển trung tâm rồi xử lý tín hiệu để điều hướng xe di chuyển đúng
- Khối cấp nguồn: Khối cấp nguồn 5VDC có chức năng cấp nguồn 5V cho các khối có thể hoạt động đƣợc
- Khối cảm biến: Sử dụng module cảm biến dò đường để nhận tín hiệu từ bên ngoài xong chuyển tín hiệu sang khối điều khiển trung tâm
- Khối điều khiển trung tâm: Sử dụng Arduino Uno R3, nhận tín hiệu từ khối cảm biến rồi tính toán để xác định trạng thái robot đang di chuyển và xuất ra tín hiệu xung chuyển qua khối điều khiển động cơ
- Khối điều khiển động cơ: Sử dụng module L298 để nhận tín hiệu từ khối điều khiển trung tâm rồi xử lý tín hiệu để điều hướng xe di chuyển đúng
Hình 3.2 Sơ đồ nguyên lý
Robot theo dõi đường dây cảm nhận đường màu đen bằng cách sử dụng cảm biến hồng ngoại TCRT5000 Tín hiệu từ cảm biến đƣợc đƣa qua mạch so sánh và khếch đại tín hiệu để đƣa ra mức logic “0” ứng với trạng thái có vạch và mức logic “1” ứng với trạng thái không có vạch và gửi tín hiệu đến arduino Dựa vào tín hiệu từ khối cảm biến, khối điều khiển trung tâm sẽ tính toán để xuất ra tín hiệu điều khiển các động cơ sử dụng IC L298.
Lựa chọn linh kiện
3.3.1.1 Giới thiệu chung về Arduino
Arduino đã và đang đƣợc sử dụng rất rộng rãi trên thế giới, và ngày càng chứng tỏ được sức mạnh của chúng thông qua vô số ứng dụng độc đáo của người dùng trong cộng đồng nguồn mở (open- source) Tuy nhiên tại Việt Nam Arduino vẫn còn chƣa đƣợc biết đến nhiều
Arduino cơ bản là một nền tảng mẫu mở về điện tử (open-source electronic sprototyping platform) đƣợc tạo thành từ phần cứng lẫn phần mềm Về mặt kỹ thuật có thể coi Arduino là 1 bộ điều khiển logic có thể lập trình đƣợc Đơn giản hơn, Arduino là một thiết bị có thể tương tác với ngoại cảnh thông qua các cảm biến và hành vi được lập trình sẵn Với thiết bị này, việc lắp ráp và điều khiển các thiết bị điện tử sẽ dễ dàng hơn bao giờ hết Arduino đƣợc phát triển nhằm đơn giản hóa việc thiết kế, lắp ráp linh kiện điện tử cũng như lập trình trên vi xử lí và mọi người có thể tiếp cận dễ dàng hơn với thiết bị điện tử mà không cần nhiều về kiến thức điện tử và thời gian Sau đây là nhƣng thế mạnh của Arduino so với các nền tảng vi điều khiển khác:
Chạy trên đa nền tảng: Việc lập trình Arduino có thể thể thực hiện trên các hệ điều hành khác nhau nhƣ Windows, Mac Os, Linux trên Desktop, Android trên di động
Ngôn ngữ lập trình đơn giản dễ hiểu
Nền tảng mở: Arduino đƣợc phát triển dựa trên nguồn mở nên phần mềm chạy trên Arduino đƣợc chia sẻ dễ dàng và tích hợp vào các nền tảng khác nhau
Mở rộng phần cứng: Arduino đƣợc thiết kế và sử dụng theo dạng module nên việc mở rộng phần cứng cũng dễ dàng hơn
Đơn giản và nhanh: Rất dễ dàng lắp ráp, lập trình và sử dụng thiết bị
Dễ dàng chia sẻ: Mọi người dễ dàng chia sẻ mã nguồn với nhau mà không lo lắng về ngôn ngữ hay hệ điều hành mình đang sử dụng
Arduino có rất nhiều module, mỗi module đƣợc phát triển cho một ứng dụng Về mặt chức năng, các bo mạch Arduino đƣợc chia thành hai loại, loại bo mạch chính có chip Atmega và loại mở rộng thêm chức năng cho bo mạch chính Các bo mạch chính về cơ bản là giống nhau về chức năng, tuy nhiên về mặt cấu hình nhƣ số lƣợng I/O, dung lượng bộ nhớ, hay k ch thước có sự khác nhau Một số bo có trang bị thêm các tính năng kết nối nhƣ Ethernet và Bluetooth Các bo mở rộng chủ yếu mở rộng thêm một số tính năng cho bo mạch chính Ví dụ nhƣ tính năng kết nối Ethernet, Wireless, điều khiển động cơ
Sử dụng chip AVR Atmega328 của Atmel Mạch arduino đƣợc lắp ráp từ các linh kiện dễ tìm và hướng đến đối tượng người dùng đa dạng
Arduino UNO có thể sử dụng 3 vi điều khiển họ 8bit AVR là Atmega8, Atmega168, Atmega328 Bộ não này có thể xử lí những 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, làm một trạm đo nhiệt độ, độ ẩm và hiển thị lên màn hình LCD,… hay những ứng dụng khác
Arduino UNO có thể đƣợc cấp nguồn 5V thông qua cổng USB hoặc cấp nguồn ngoài với điện áp khuyên dùng là 7-12V DC và giới hạn là 6-20V Thường thì cấp nguồn bằng pin vuông 9V là hợp lí nhất nếu không có sẵn nguồn từ cổng USB Nếu cấp nguồn vƣợt quá ngƣỡng giới hạn trên, sẽ làm hỏng Arduino UNO
Vi điều khiển Atmega328 (họ 8bit) Điện áp hoạt động 5V – DC (chỉ đƣợc cấp qua cổng USB)
Tần số hoạt động 16 MHz
Dòng tiêu thụ 30mA Điện áp vào khuyên dùng 7-12V – DC Điện áp vào giới hạn 6-20V – DC
Số chân Digital I/O 14 (6 chân 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 (Atmega328) với bootloader
Bảng 3.1 Đặc điểm kỹ thuật Arduino UNO R3
Hình 3.4 sơ đồ chân Arduino UNO R3
GND (Ground): cực âm của nguồn điện cấp cho Arduino UNO Khi dùng các thiết bị sử dụng những nguồn điện riêng biệt thì những chân này phải đƣợc nối với nhau
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
IOREF: điện áp hoạt động của vi điều khiển trên Arduino UNO có thể đƣợc đo ở chân này Và dĩ nhiên nó luôn là 5V Mặc dù vậy không đƣợc lấy nguồn 5V từ chân này để sử dụng bởi chức năng 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Ω
Các cổng vào/ra: Arduino UNO có 14 chân digital dùng để đọc hoặc xuất tín hiệu Chúng chỉ có 2 mức điện áp là 0V và 5V với dòng vào/ra tối đa trên mỗi chân là 40mA Ở mỗi chân đều có các điện trở pull-up từ đƣợc cài đặt ngay trong vi điều khiển Atmega328 (mặc định thì các điện trở này kh ng đƣợc kết nối) Một số chân digital có các chức năng đặc biệt nhƣ sau:
2 chân Serial: 0 (RX) và 1 (TX): dùng để gửi (transmit – TX) và nhận (receive –
RX) dữ liệu TTL Serial Arduino Uno có thể giao tiếp với thiết bị khác thông qua 2 chân này Kết nối bluetooth thường thấy nói nôm na chính là kết nối Serial không dây Nếu không cần giao tiếp Serial, không nên sử dụng 2 chân này nếu không cần thiết
Chân PWM (~): 3, 5, 6, 9, 10, và 11: cho phép bạn xuất ra xung PWM với độ phân giải 8bit (giá trị từ 0 → 28-1 tương ứng với 0V → 5V) bằng hàm analogWrite() Nói một cách đơn giản, có thể điều chỉnh đƣợc điện áp ra ở chân này từ mức 0V đến 5V thay vì chỉ cố định ở mức 0V và 5V nhƣ những chân khác
Chân giao tiếp SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK) Ngoài các chức năng thông thường, 4 chân này còn dùng để truyền phát dữ liệu bằng giao thức SPI với các thiết bị khác
LED 13: trên Arduino UNO có 1 đèn led màu cam (kí hiệu chữ L) Khi bấm nút
Reset, sẽ thấy đèn này nhấp nháy để báo hiệu Nó đƣợc nối với chân số 13 Khi chân này được người dùng sử dụng, LED sẽ sáng
Arduino UNO có 6 chân analog (A0 → A5) cung cấp độ phân giải tín hiệu 10bit
(0 → 210-1) để đọc giá trị điện áp trong khoảng 0V → 5V Với chân AREF trên board, có thể để đƣa vào điện áp tham chiếu khi sử dụng các chân analog Tức là nếu cấp điện áp 2.5V vào chân này thì có thể dùng các chân analog để đo điện áp trong khoảng từ 0V → 2.5V với độ phân giải vẫn là 10bit Đặc biệt, Arduino UNO 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
Atmega328 là một chíp vi điều khiển đƣợc sản xuất bời hãng Atmel thuộc họ MegaAVR có sức mạnh hơn hẳn Atmega8 Atmega 328 là một bộ vi điều khiển 8 bít
THIẾT KẾ VÀ CHẾ TẠO ROBOT DÒ LINE TRÁNH VẬT CẢN
Thiết kế đường đi cho robot
Từ ý tưởng có sẵn sử dụng phần nềm Panit 3D để mô phỏng đường đi giúp cho việc chế tạo đường đi của robot dò đường được dễ dàng hơn
Hình 4.1 Mô phỏng đường đi trên phần mềm Paint 3D
Sơ đồ đấu nối
Hình 4.2 Sơ đồ đấu nối
Sơ đồ lắp đặt
Hình 4.3 Sơ đồ lắp đặt
Bản vẽ cơ khí
Hình 4.4 Bản vẽ cơ khí
Lưu đồ thuật toán
Hình 4.5 Lưu đồ thuật toán
Tấm Formex
Tấm formex ( hay còn gọi TẤM PVC FOAM, TẤM FORMEX, TẤM FORM, TẤM FORMAT) đƣợc thay thế vật liệu gỗ trong quá trình thi công một số ứng dụng nhƣ quảng cáo, trang trí, sản phẩm có đặc tính nhẹ có thể in ấn, in pp bồi, bế, cắt tạo hình,chạm khắc lên một cách dễ dàng đồng thời có thể uốn dẻo
Sử dụng tấm formex để làm tấm nền cho robot dò đường
Hệ thống đường line cho robot
Hình 4.7 Băng keo dùng làm đường line
Sử dụng băng keo cách nhiệt để làm đường line cho robot vì độ bám dính tốt, sự đàn hồi của băng keo tốt, kích thước phù hợp để làm đường line cho robot
Hình 4.8 Hoàn thiện đường line cho robot
Kết quả thực nghiệm trên mô hình robot
Việc thiết kế và chế tạo robot dò đường báo động khi gặp vật cản đã hoàn thiện và đi vào sử dụng Robot đã tự động nhận biết đường line để chạy với khả năng hoạt động chính xác cao
Hình 4.9 Hoàn thiện robot dò line
PHẦN KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Sau thời gian làm đề tài với sự hướng dẫn tận tình của Thầy ThS.Nguyễn Xuân Công, em đã thiết kế thành công robot dò line tránh vật cản Đồ án được thực hiện dưới sự cố gắng nỗ lực của bản thân và sự chỉ bảo tận tình của giáo viên hướng dẫn, tuy nhiên những thiếu sót và khiếm khuyết là không thể tránh khỏi Em rất mong nhận đƣợc các ý kiến đóng góp của thầy cô giáo trong hội đồng cùng toàn thể các bạn để đồ án của em đƣợc hoàn thiện hơn
Việc thiết kế robot dò đường báo động khi có vật cản đã hoàn thành và đã đi vào hoạt động, đã tự dò vạch nhƣng vẫn chƣa phát huy đƣợc hết tính năng Trong quá trình làm đồ án em có tìm hiểu điều khiển robot qua điện thoại nhƣng do điều kiện chƣa cho phép nên em chƣa thể áp dụng vào đồ án này Nếu có điều kiện em sẽ tiếp tục phát triển hệ thống hơn nữa đáp ứng nhu cầu ngày càng cao của con người Em hy vọng có thể ứng dụng robot dò đường này có thể ứng dụng ngay trong đời sống hàng ngày chứ không đơn thuần chỉ là trên mô hình
[1] Nguyễn Tấn Tiến, Trần Thanh Tùng, Kim Sang Bong (2016), Giảng dạy thiết kế hệ thống cơ điện tử qua đồ án, Hội nghị toàn quốc lần thứ 8 về Cơ Điện tử, pp 416 – 422
[2] Juing-Huei Su, et al (2010), An intelligent line-following robot project for introductory robot courses, World Transactions on Engineering and Technology Education, Vol.8, No.4, 455 – 461
[3] Vikram Balaji, M.Balaji, M.Chandrasekaran, M.K.A.Ahamed khan, Irraivan
(2015), Optimization of PID Control for High Speed Line Tracking Robots, 2015
IEEE International Symposium on Robotics and Intelligent Sensors (IRIS 2015), pp
[4] M Zafri Baharuddin, el al, Analysis of Line Sensor Configuration for the Advanced Line Follower Robot
[5] F Kaiser, S Islam, W Imran, K H Khan (2014), Line Follower Robot: Fabricationn and accuracy measurement by data acquisition, International Conference on Electrical Engineering and Information & Communication Technology (ICEEICT) 2014
[6].Mustafa Engin, D.E (2012), PATH PLANNING OF LINE FOLLOWER ROBOT, The 5th European DSP Education and Research Conference
PHỤ LỤC int stop_distance = 12;// Khoảng cách phát hiện vật cản
//Kết nối SRF 05 OR 04 const int trigPin = 11; // kết nối chân trig với chân 11 arduino const int echoPin = 12; // kết nối chân echo với chân 12 arduino
//L298 kết nối arduino const int motorA1 = 3; // kết nối chân IN1 với chân 3 arduino const int motorA2 = 4; // kết nối chân IN2 với chân 4 arduino const int motorAspeed = 5; // kết nối chân ENA với chân 5 arduino const int motorB1 = 7; // kết nối chân IN3 với chân 7 arduino const int motorB2 = 8; // kết nối chân IN4 với chân 8 arduino const int motorBspeed = 6; // kết nối chân ENB với chân 6 arduino
//kết nối của 3 cảm biến hồng ngoại (dò line ) const int L_S = 9; // cb dò line phải const int S_S = 2; // cb dò line giữa const int R_S = 10; //cb dò line trái
38 int left_sensor_state;// biến lưu cảm biến hồng ngoại line trái int s_sensor_state; // biến lưu cảm biến hồng ngoại line giữa int right_sensor_state;// biến lưu cảm biến hồng ngoại line phải long duration; // int distance; // biến khoảng cách void setup() { pinMode(L_S, INPUT); // chân cảm biến khai báo là đầu vào pinMode(R_S, INPUT); pinMode(S_S, INPUT); pinMode(motorA1, OUTPUT); pinMode(motorA2, OUTPUT); pinMode(motorB1, OUTPUT); pinMode(motorB2, OUTPUT); pinMode(motorAspeed, OUTPUT); pinMode(motorBspeed, OUTPUT); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT);
Serial.begin(9600); analogWrite(motorAspeed, 110); // tốc độ động cơ a ban đầu 120 ( 0 - 255) analogWrite(motorBspeed, 110);// tốc độ động cơ b ban đầu 120 ( 0 - 255) delay(2000);
} void loop() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = duration * 0.034 / 2;
Serial.println(distance); left_sensor_state = digitalRead(L_S); s_sensor_state = digitalRead(S_S); right_sensor_state = digitalRead(R_S); if ((digitalRead(L_S) == 0) && (digitalRead(S_S) == 1) && (digitalRead(R_S)
} if (distance < stop_distance) // nếu khoảng cách nhỏ hơn giới hạn
{ digitalWrite (motorA1, HIGH); // cho xe robot chạy lùi 1 đoạn
41 digitalWrite(motorA2, LOW); digitalWrite (motorB1, LOW); digitalWrite(motorB2, HIGH); delay(350); digitalWrite (motorA1, LOW); digitalWrite(motorA2, LOW); digitalWrite (motorB1, LOW); digitalWrite(motorB2, LOW); delay(300); digitalWrite (motorA1, HIGH); // cho xe robot xoay sang trái digitalWrite(motorA2, LOW); digitalWrite (motorB1, HIGH); digitalWrite(motorB2, LOW); delay(400); digitalWrite (motorA1, LOW); digitalWrite(motorA2, LOW); digitalWrite (motorB1, LOW); digitalWrite(motorB2, LOW); delay(200); digitalWrite (motorA1, LOW); //cho xe robot đi thẳng 1 đoạn digitalWrite(motorA2, HIGH);
42 digitalWrite (motorB1, HIGH); digitalWrite(motorB2, LOW); delay(600); digitalWrite (motorA1, LOW); digitalWrite(motorA2, LOW); digitalWrite (motorB1, LOW); digitalWrite(motorB2, LOW); delay(200); digitalWrite (motorA1, LOW); // cho xe robot xoay phải 1 đoạn digitalWrite(motorA2, HIGH); digitalWrite (motorB1, LOW); digitalWrite(motorB2, LOW); delay(550); digitalWrite (motorA1, LOW); digitalWrite(motorA2, LOW); digitalWrite (motorB1, LOW); digitalWrite(motorB2, LOW); delay(200);
/////////////////// digitalWrite (motorA1, LOW); //cho xe robot đi thẳng 1 đoạn digitalWrite(motorA2, HIGH); digitalWrite (motorB1, HIGH);
43 digitalWrite(motorB2, LOW); delay(600); digitalWrite (motorA1, LOW); digitalWrite(motorA2, LOW); digitalWrite (motorB1, LOW); digitalWrite(motorB2, LOW); delay(200);
//////////////////////// digitalWrite (motorA1, LOW); //cho xe robot xoay phải 1 đoạn digitalWrite(motorA2, HIGH); digitalWrite (motorB1, LOW); digitalWrite(motorB2, LOW); delay(500); digitalWrite (motorA1, LOW); digitalWrite(motorA2, LOW); digitalWrite (motorB1, LOW); digitalWrite(motorB2, LOW); delay(200); digitalWrite (motorA1, LOW); //cho xe robot đi thẳng 1 digitalWrite(motorA2, HIGH); digitalWrite (motorB1, HIGH); digitalWrite(motorB2, LOW);
44 while (left_sensor_state == LOW) { left_sensor_state = digitalRead(L_S); s_sensor_state = digitalRead(S_S); right_sensor_state = digitalRead(R_S);
Serial.println("in the first while");
} void forword() { // chương trình con xe robot đi tiến digitalWrite (motorA1, LOW); digitalWrite(motorA2, HIGH); digitalWrite (motorB1, HIGH); digitalWrite(motorB2, LOW);
} void turnRight() { digitalWrite (motorA1, LOW); digitalWrite(motorA2, LOW);