Mục lục:

Robot bơ: Robot Arduino với cuộc khủng hoảng hiện tại: 6 bước (có hình ảnh)
Robot bơ: Robot Arduino với cuộc khủng hoảng hiện tại: 6 bước (có hình ảnh)

Video: Robot bơ: Robot Arduino với cuộc khủng hoảng hiện tại: 6 bước (có hình ảnh)

Video: Robot bơ: Robot Arduino với cuộc khủng hoảng hiện tại: 6 bước (có hình ảnh)
Video: Robot biến hình siêu ngầu #shorts #short #youtube 2024, Tháng bảy
Anonim
Image
Image

Dự án này dựa trên loạt phim hoạt hình "Rick and Morty". Trong một trong những tập phim, Rick chế tạo một người máy với mục đích duy nhất là mang bơ. Là sinh viên đến từ Bruface (Khoa Kỹ thuật Brussels), chúng tôi có một nhiệm vụ cho dự án cơ điện tử là chế tạo một robot dựa trên một chủ đề được gợi ý. Nhiệm vụ cho dự án này là: Làm một con rô bốt chỉ phục vụ bơ. Nó có thể có một cuộc khủng hoảng tồn tại. Tất nhiên, robot trong tập phim của Rick và Morty là một robot khá phức tạp và cần phải đơn giản hóa một số điều sau:

Vì mục đích duy nhất là mang bơ, nên có nhiều lựa chọn thay thế đơn giản hơn. Thay vì làm cho rô-bốt nhìn và lấy bơ, trước khi đưa nó đến đúng người, rô-bốt có thể mang bơ mọi lúc. Do đó, ý tưởng chính là tạo ra một chiếc xe đẩy bơ đến nơi cần thiết.

Ngoài việc vận chuyển bơ, robot cần biết mình cần mang bơ đi đâu. Trong tập phim, Rick sử dụng giọng nói của mình để gọi và chỉ huy người máy. Điều này đòi hỏi một hệ thống nhận dạng giọng nói đắt tiền và sẽ phức tạp. Thay vào đó, mọi người trong bàn sẽ nhận được một nút: khi nút này được kích hoạt, rô bốt có thể xác định vị trí nút này và di chuyển về phía nó.

Tóm lại, rô bốt cần đáp ứng các yêu cầu sau:

  • Nó cần phải an toàn: nó phải tránh chướng ngại vật và ngăn không cho bản thân rơi xuống bàn;
  • Robot cần phải nhỏ: không gian trên bàn bị hạn chế và không ai muốn một robot phục vụ bơ nhưng lại có kích thước bằng một nửa chiếc bàn;
  • Sự làm việc của robot không thể phụ thuộc vào kích thước hoặc hình dạng của bàn, bằng cách đó nó có thể được sử dụng trên các bàn khác nhau;
  • Nó cần phải mang bơ đến đúng người tại bàn.

Bước 1: Khái niệm chính

Các yêu cầu đã đề cập trước đó có thể được đáp ứng bằng các kỹ thuật khác nhau. Các quyết định về thiết kế chính đã được thực hiện được giải thích trong bước này. Chi tiết về cách những ý tưởng này được thực hiện có thể được tìm thấy trong các bước sau.

Để hoàn thành nhiệm vụ của mình, robot cần phải di chuyển cho đến khi đến đích. Xem xét ứng dụng của robot, có thể thấy đơn giản rằng việc sử dụng bánh xe thay vì chuyển động "đi bộ" sẽ tốt hơn để làm cho nó di chuyển. Vì bàn là một bề mặt phẳng và robot sẽ không đạt được tốc độ quá cao, nên hai bánh xe dẫn động và một bánh lăn là giải pháp đơn giản và dễ điều khiển nhất. Các bánh xe được truyền động cần được cung cấp năng lượng bởi hai động cơ. Động cơ cần có mô-men xoắn lớn nhưng không cần đạt tốc độ cao, đó là lý do tại sao động cơ servo liên tục sẽ được sử dụng. Một ưu điểm khác của động cơ servo là sự đơn giản khi sử dụng với Arduino.

Việc phát hiện các chướng ngại vật có thể được thực hiện bằng cách sử dụng cảm biến siêu âm đo khoảng cách, gắn với động cơ servo để chọn hướng đo. Các cạnh có thể được phát hiện bằng cách sử dụng cảm biến LDR. Sử dụng cảm biến LDR sẽ yêu cầu cấu tạo của một thiết bị chứa cả đèn led và cảm biến LDR. Cảm biến LDR đo ánh sáng phản xạ và có thể được xem như một loại cảm biến khoảng cách. Nguyên tắc tương tự cũng tồn tại với ánh sáng hồng ngoại. Có một số cảm biến tiệm cận hồng ngoại có đầu ra kỹ thuật số: gần hoặc không gần. Đây chính xác là những gì robot cần để phát hiện các cạnh. Bằng cách kết hợp 2 cảm biến cạnh được đặt giống như hai ăng-ten côn trùng và một cảm biến siêu âm được kích hoạt, robot sẽ có thể tránh chướng ngại vật và các cạnh.

Việc phát hiện nút cũng có thể được thực hiện bằng cách sử dụng cảm biến hồng ngoại và đèn LED. Ưu điểm của IR là nó vô hình nên việc sử dụng nó không gây khó chịu cho những người tại bàn. Tia laze cũng có thể được sử dụng, nhưng ánh sáng sẽ có thể nhìn thấy được và cũng rất nguy hiểm khi ai đó chĩa tia laze vào mắt người khác. Ngoài ra, người dùng sẽ cần phải nhắm mục tiêu các cảm biến trên robot chỉ bằng một chùm tia laze mỏng, điều này sẽ khá khó chịu. Bằng cách trang bị cho robot hai cảm biến IR và xây dựng nút bằng đèn LED IR, robot biết mình cần phải đi theo hướng nào bằng cách tuân theo cường độ của ánh sáng IR. Khi không có nút, rô bốt có thể quay lại cho đến khi một trong các đèn led bắt được tín hiệu từ một trong các nút.

Bơ được cho vào một ngăn trên đầu robot. Ngăn này có thể bao gồm một hộp và một nắp được kích hoạt để mở hộp. Để mở nắp và di chuyển cảm biến siêu âm để quét và phát hiện chướng ngại vật, chúng ta cần hai động cơ và vì mục đích này, động cơ servo không liên tục thích nghi hơn vì động cơ cần phải đi đến một vị trí nhất định và duy trì vị trí đó.

Một tính năng bổ sung của dự án là tương tác với môi trường bên ngoài bằng giọng nói của người máy. Một bộ rung rất đơn giản và thích hợp cho mục đích này nhưng nó không thể được sử dụng bất cứ lúc nào vì độ bền cao.

Khó khăn chính của dự án dựa vào mã hóa, vì phần cơ học khá đơn giản, nhiều trường hợp cần phải tính đến để tránh robot bị kẹt hoặc làm điều gì đó không mong muốn. Các vấn đề chính mà chúng ta cần giải quyết là mất tín hiệu IR do vật cản và dừng lại khi nó đến nút!

Bước 2: Vật liệu

Bộ phận cơ khí

  • Máy in 3D và máy cắt Laser

    • PLA sẽ được sử dụng để in 3D nhưng bạn cũng có thể sử dụng ABS
    • Một tấm ván ép bạch dương 3 mm sẽ được sử dụng để cắt laser vì nó mang lại khả năng sửa đổi dễ dàng sau này, Plexiglas cũng có thể được sử dụng nhưng khó sửa đổi hơn khi nó được cắt bằng laser mà không phá hủy nó
  • Bu lông, đai ốc, vòng đệm

    Hầu hết các thành phần được giữ với nhau bằng bu lông, vòng đệm và đai ốc M3, nhưng một số trong số chúng yêu cầu bộ bu lông M2 hoặc M4. Chiều dài của bu lông nằm trong khoảng 8-12 mm

  • Bộ đệm PCB, 25 mm và 15 mm
  • 2 động cơ Servo với bánh xe tương thích
  • Một số dây kim loại dày có đường kính khoảng 1-2 mm

Phần điện tử

  • Vi điều khiển

    1 bo mạch arduino UNO

  • Động cơ servo

    • 2 Động cơ servo lớn: Feetech liên tục 6Kg 360 độ
    • 2 động cơ servo siêu nhỏ: Feetech FS90
  • Cảm biến

    • 1 cảm biến siêu âm
    • 2 cảm biến tiệm cận IR
    • 2 điốt quang IR
  • Ắc quy

    • 1 đế pin 9V + pin
    • 1 ngăn chứa pin 4AA + pin
    • 1 hộp pin 9V + pin
  • Các thành phần bổ sung

    • Một số dây nhảy, dây điện và tấm hàn
    • Một số điện trở
    • 1 đèn LED hồng ngoại
    • 3 công tắc
    • 1 còi
    • 1 nút
    • 1 đầu nối pin Arduino đến 9V

Bước 3: Kiểm tra thiết bị điện tử

Kiểm tra thiết bị điện tử
Kiểm tra thiết bị điện tử
Kiểm tra thiết bị điện tử
Kiểm tra thiết bị điện tử

Tạo nút:

Nút này được thực hiện đơn giản bởi một công tắc, một đèn LED hồng ngoại và một điện trở 220 Ohm mắc nối tiếp, được cấp nguồn bằng pin 9V. Điều này được đặt trong một bộ pin 9V để có một thiết kế nhỏ gọn và sạch sẽ.

Tạo mô-đun thu hồng ngoại:

Các mô-đun này được làm bằng bảng hàn lỗ, sau này sẽ được gắn bằng vít vào rô bốt. Các mạch cho các mô-đun này được mô tả trong các sơ đồ chung. Nguyên tắc là đo cường độ của ánh sáng hồng ngoại. Để cải thiện các phép đo, có thể sử dụng ống chuẩn trực (làm bằng ống co lại) để tập trung vào một hướng quan tâm nhất định.

Các yêu cầu khác nhau của dự án cần được thực hiện bằng các thiết bị điện tử. Số lượng thiết bị nên được giới hạn để giữ độ phức tạp tương đối thấp. Bước này bao gồm các sơ đồ đi dây và mỗi mã để kiểm tra tất cả các bộ phận riêng biệt:

  • Động cơ Servo liên tục;
  • Thiết bị cảm biến sóng siêu âm;
  • Động cơ Servo không liên tục;
  • Tiếng còi;
  • Phát hiện hướng nút IR;
  • Phát hiện cạnh bằng cảm biến tiệm cận;

Những mã này có thể giúp hiểu các thành phần ngay từ đầu, nhưng nó cũng rất hữu ích cho việc gỡ lỗi ở các giai đoạn sau. Nếu một vấn đề nhất định xảy ra, lỗi có thể được phát hiện dễ dàng hơn bằng cách kiểm tra tất cả các thành phần riêng biệt.

Bước 4: Thiết kế miếng in 3D và cắt bằng laser

Thiết kế miếng in 3D và cắt bằng laser
Thiết kế miếng in 3D và cắt bằng laser
Thiết kế miếng in 3D và cắt bằng laser
Thiết kế miếng in 3D và cắt bằng laser
Thiết kế miếng in 3D và cắt bằng laser
Thiết kế miếng in 3D và cắt bằng laser

Cắt miếng bằng laser

Việc lắp ráp được làm bằng ba tấm ngang chính được giữ với nhau bằng các miếng đệm PCB để có được thiết kế mở, giúp dễ dàng truy cập vào thiết bị điện tử nếu cần.

Các tấm đó cần phải được khoét các lỗ cần thiết để vặn các miếng đệm và các thành phần khác cho quá trình lắp ráp cuối cùng. Về cơ bản, cả ba tấm đều có các lỗ ở cùng một vị trí cho các miếng đệm và các lỗ cụ thể cho các thiết bị điện tử được cố định tương ứng trên mỗi tấm. Chú ý rằng tấm giữa có một lỗ để luồn dây ở giữa.

Các mảnh nhỏ hơn được cắt theo kích thước của servo lớn để cố định chúng vào bộ phận lắp ráp.

Các mảnh in 3D

Ngoài việc cắt laser, một số mảnh sẽ cần được in 3D:

  • Sự hỗ trợ cho cảm biến siêu âm, liên kết nó với một cánh tay động cơ servo siêu nhỏ
  • Sự hỗ trợ cho bánh xe và hai cảm biến cạnh IR. Thiết kế đặc biệt của loại đầu mảnh hình hộp cho cảm biến IR hoạt động như một màn hình để tránh nhiễu giữa nút phát ra tín hiệu IR và cảm biến IR vốn chỉ tập trung vào những gì đang xảy ra trên mặt đất
  • Hỗ trợ cho động cơ servo vi mô mở nắp
  • Và cuối cùng là nắp, được làm bằng hai mảnh để có góc hoạt động lớn hơn bằng cách tránh va chạm với động cơ servo siêu nhỏ đang mở nắp:

    • Tấm dưới cùng sẽ được cố định vào tấm trên cùng
    • Và phần trên được liên kết với phần dưới bằng một bản lề và được truyền động bởi servo bằng cách sử dụng một dây kim loại dày. Chúng tôi quyết định thêm một chút cá tính cho robot bằng cách tạo cho nó một cái đầu.

Khi tất cả các mảnh được thiết kế và các tệp được xuất ở định dạng chính xác cho máy được sử dụng, các mảnh thực sự có thể được tạo ra. Cần biết rằng in 3D mất rất nhiều thời gian, đặc biệt là với kích thước của phần trên cùng của nắp. Bạn có thể cần một hoặc hai ngày để in tất cả các mảnh. Tuy nhiên, việc cắt laser chỉ là vấn đề trong vài phút.

Tất cả các tệp SOLIDWORKS có thể được tìm thấy trong thư mục nén.

Bước 5: Lắp ráp và đấu dây

Image
Image
Lắp ráp và đấu dây
Lắp ráp và đấu dây
Lắp ráp và đấu dây
Lắp ráp và đấu dây
Lắp ráp và đấu dây
Lắp ráp và đấu dây

Việc lắp ráp sẽ là sự kết hợp giữa hệ thống dây điện và vặn vít các thành phần lại với nhau, bắt đầu từ dưới lên trên.

Tấm đáy

Tấm dưới cùng được lắp ráp với bộ pin 4AA, động cơ servo, bộ phận in (gắn bánh lăn bên dưới tấm), hai cảm biến cạnh và 6 miếng đệm nam-nữ.

Tấm giữa

Tiếp theo, tấm giữa có thể được gắn, nén các động cơ servo giữa hai tấm. Tấm này sau đó có thể được cố định bằng cách đặt một bộ đệm khác lên trên nó. Một số dây cáp có thể được đưa qua lỗ trung tâm.

Mô-đun siêu âm có thể được gắn vào một servo không liên tục, được cố định trên tấm giữa với Arduino, bộ pin 9V (cấp nguồn cho arduino) và hai mô-đun thu hồng ngoại ở phía trước của rô bốt. Các mô-đun này được làm bằng bảng hàn lỗ thông qua và được gắn bằng vít vào tấm. Các mạch cho các mô-đun này được mô tả trong các sơ đồ chung.

Tấm trên cùng

Tại phần lắp ráp này, các công tắc không được cố định nhưng rô bốt đã có thể làm mọi thứ ngoại trừ các hành động yêu cầu nắp, do đó, nó cho phép chúng tôi thực hiện một số thử nghiệm để sửa ngưỡng, điều chỉnh mã của chuyển động và dễ dàng truy cập vào các cổng của arduino.

Khi tất cả những điều này đạt được, tấm trên có thể được cố định bằng miếng đệm. Các thành phần cuối cùng là hai công tắc, nút, servo, bộ rung và hệ thống nắp cuối cùng có thể được cố định vào tấm trên cùng để hoàn thành việc lắp ráp.

Điều cuối cùng cần kiểm tra và hiệu chỉnh là góc của servo để mở nắp một cách chính xác.

Ngưỡng của cảm biến cạnh phải được điều chỉnh với chiết áp đi kèm (bằng cách sử dụng tuốc nơ vít phẳng) cho các bề mặt bàn khác nhau. Ví dụ, một bảng màu trắng nên có ngưỡng thấp hơn một bảng màu nâu. Ngoài ra chiều cao của các cảm biến sẽ ảnh hưởng đến ngưỡng cần thiết.

Kết thúc bước này, việc lắp ráp đã hoàn thành và phần cuối cùng còn lại là các mã còn thiếu.

Bước 6: Mã hóa: Kết hợp mọi thứ lại với nhau

Tất cả các mã cần thiết để robot hoạt động đều nằm trong tệp nén có thể tải xuống. Điều quan trọng nhất là mã "chính" bao gồm thiết lập và vòng lặp chức năng của robot. Hầu hết các chức năng khác được viết trong các tệp con (cũng trong thư mục nén). Các tệp phụ này phải được lưu trong cùng một thư mục (được đặt tên là "chính") làm tập lệnh chính trước khi tải nó lên Arduino

Đầu tiên tốc độ chung của rô bốt được xác định cùng với biến "nhắc nhở". "Nhắc nhở" này là một giá trị ghi nhớ robot đã quay theo hướng nào. Nếu "nhắc nhở = 1", rô bốt đã / đang rẽ trái, nếu "nhắc nhở = 2", rô bốt đã / đang rẽ phải.

int speed = 9; // Tốc độ chung của robot

int nhắc = 1; // Hướng ban đầu

Trong quá trình thiết lập rô bốt, các tệp con khác nhau của chương trình được khởi tạo. Trong các tệp con này, các chức năng cơ bản về điều khiển động cơ, cảm biến,… được viết. Bằng cách khởi tạo chúng trong quá trình thiết lập, các chức năng được mô tả trong mỗi tệp này có thể được sử dụng trong vòng lặp chính. nó khởi động. Ở đây, chức năng r2D2 () bị vô hiệu hóa để ngăn bộ rung hút quá nhiều dòng điện.

// Thiết lập @ đặt lại // ----------------

void setup () {initialize_IR_sensors (); khởi tạo_của_bạn_và_edges (); khởi tạo_movement (); khởi tạo_lid (); khởi tạo_buzzer (); // r2D2 (); int nhắc = 1; // hướng ban đầu Starter (nhắc nhở); }

Chức năng Starter (nhắc nhở) lần đầu tiên được gọi trong thiết lập. Chức năng này làm cho rô bốt quay lại và tìm kiếm tín hiệu hồng ngoại của một trong các nút. Khi nó đã tìm thấy nút, chương trình sẽ thoát khỏi chức năng Starter bằng cách thay đổi biến 'cond' thành false. Điều này được kiểm tra mọi lúc trước khi nó tiếp tục quay đầu. Khi robot phát hiện chướng ngại vật hoặc cạnh, giao thức tránh những chướng ngại vật hoặc cạnh này sẽ được thực hiện. Các giao thức này sẽ được giải thích ở phần sau của bước này. Hàm Starter có một biến là biến nhắc nhở đã được thảo luận trước đó. Bằng cách cung cấp giá trị nhắc nhở cho chức năng Starter, robot biết nó cần quay theo hướng nào để tìm nút.

// Starter Loop: Quay lại và tìm kiếm nút // ------------------------------------ ----------------

void Starter (int prompt) {if (isedgeleft () || isedgeright ()) {// Dò tìm các cạnh edgeDetected (nhắc); } else {bool cond = true; while (cond == true) {if (buttonleft () == false && buttonright () == false && isButtonDetected () == true) {cond = false; } else {if (repeat == 1) {// Chúng tôi đang rẽ trái if (isobstacleleft ()) {stoppeed (); tránh_bạn (nhắc nhở); } else if (isedgeleft () || isedgeright ()) {// Dò tìm các cạnh edgeDetected (repeat); } else {turnleft (tốc độ); }} else if (repeat == 2) {if (isobstacleright ()) {stoppeed (); tránh_bạn (nhắc nhở); } else if (isedgeleft () || isedgeright ()) {// Dò tìm các cạnh edgeDetected (repeat); } else {rẽ phải (tốc độ); }}}}}}

Nếu rô bốt tìm thấy nút, thì vòng lặp Khởi động đầu tiên được thoát và vòng lặp chức năng chính của rô bốt bắt đầu. Vòng lặp chính này khá phức tạp vì mọi lúc mọi nơi, robot cần phải phát hiện xem có chướng ngại vật hoặc góc cạnh nào ở phía trước hay không. Bằng cách sử dụng hai cảm biến IR, chúng tôi có thể phân biệt ba trường hợp:

  • sự khác biệt giữa ánh sáng hồng ngoại được phát hiện bởi cảm biến bên trái và bên phải lớn hơn một ngưỡng nhất định và có một nút.
  • sự khác biệt về ánh sáng IR nhỏ hơn ngưỡng và có một nút ở phía trước rô bốt.
  • sự khác biệt về ánh sáng IR nhỏ hơn ngưỡng và không có nút KHÔNG ở phía trước rô bốt.

Cách thức hoạt động của thói quen theo dõi như sau: khi phát hiện nút, rô bốt sẽ di chuyển về phía nút bằng cách quay theo cùng hướng mà nó đã quay (sử dụng biến nhắc nhở) và đồng thời di chuyển về phía trước một chút. Nếu rô bốt rẽ quá xa, nút sẽ lại bị mất và lúc này rô bốt nhớ mình cần rẽ sang hướng khác. Điều này cũng được thực hiện trong khi tiến lên phía trước một chút. Bằng cách làm này, rô bốt liên tục rẽ trái và rẽ phải, nhưng đồng thời vẫn tiến về phía nút. Mỗi khi robot tìm thấy nút, nó sẽ tiếp tục quay cho đến khi mất nút, trong trường hợp đó, nó bắt đầu di chuyển theo hướng khác. "turnleft ()" hoặc "turnright ()", trong khi vòng lặp chính sử dụng "moosystemft ()" và "moveright ()". Các chức năng di chuyển / phải không chỉ làm cho rô-bốt quay mà còn làm cho nó tiến về phía trước cùng một lúc.

/ * Vòng lặp chức năng ---------------------------- Ở đây, chỉ có quy trình theo dõi * /

int bị mất = 0; // Nếu bị mất = 0 nút được tìm thấy, nếu bị mất = 1 nút bị mất void loop () {if (isedgeleft () || isedgeright ()) {

if (! isobstacle ()) {

chuyển động (tốc độ); chậm trễ (5); } else {tránh_obstacle (nhắc nhở); } else {if (repeat == 1 && lost == 1) {// Chúng tôi đang rẽ trái stoppeed (); if (! isobstacleright ()) {moveright (speed); // Quay lại để tìm nút} else {tránh_obstacle (nhắc nhở); } nhắc nhở = 2; } else if (repeat == 2 && lost == 1) {stoppeed (); if (! isobstacleleft ()) {moosystemft (tốc độ); // Chúng tôi đang rẽ phải} else {tránh_obstacle (nhắc nhở); } nhắc nhở = 1; } else if (mất == 0) {if (nhắc == 1) {// Chúng ta đang rẽ trái if (! isobstacleleft ()) {moosystemft (speed); // Chúng tôi đang rẽ phải} else {stoppeed (); tránh_bạn (nhắc nhở); } //} else if (repeat == 2) {if (! isobstacleright ()) {moveright (speed); // Quay lại để tìm nút} else {stoppeed (); tránh_bạn (nhắc nhở); }}} delay (10); mất = 0; }} //}}

Bây giờ, một lời giải thích nhỏ về hai thói quen phức tạp nhất được đưa ra:

Tránh các cạnh

Giao thức để tránh các cạnh được định nghĩa trong một hàm được gọi là "edgeDetection ()" được viết trong tệp con "chuyển động". Giao thức này dựa trên thực tế là robot chỉ gặp phải một cạnh khi nó đã đến đích: nút. Khi rô bốt phát hiện ra một cạnh, điều đầu tiên nó làm là lùi lại một chút để ở vị trí an toàn so với cạnh đó. Sau khi thực hiện xong, robot sẽ đợi trong 2 giây. Nếu ai đó nhấn nút ở phía trước rô bốt trong hai giây đó, rô bốt biết đã đến được người muốn bơ và mở ngăn bơ và trình bày bơ. Tại thời điểm này, ai đó có thể lấy bơ từ robot. Sau một vài giây, robot sẽ cảm thấy mệt mỏi vì chờ đợi và sẽ chỉ đóng nắp bơ. Sau khi đóng nắp, rô bốt sẽ thực hiện vòng lặp Khởi động để tìm kiếm một nút khác. Nếu xảy ra trường hợp rô bốt gặp phải một cạnh trước khi đến đích và nút phía trước rô bốt không được nhấn, rô bốt sẽ không mở nắp bơ và sẽ thực hiện ngay vòng lặp Khởi động.

Tránh chướng ngại vật

Hàm tránh_obstacle () cũng nằm trong tệp phụ "chuyển động". Điều khó khăn trong việc tránh chướng ngại vật là thực tế là robot có một điểm mù khá lớn. Cảm biến siêu âm được đặt ở phía trước của robot, có nghĩa là nó có thể phát hiện chướng ngại vật, nhưng không biết khi nào anh ta vượt qua nó. Để giải quyết vấn đề này, người ta sử dụng nguyên tắc sau: Một khi robot gặp chướng ngại vật, nó sẽ sử dụng biến điều khiển để quay theo hướng khác. Bằng cách này, robot sẽ tránh va vào chướng ngại vật. Robot tiếp tục quay cho đến khi cảm biến siêu âm không phát hiện chướng ngại vật nữa. Trong thời gian robot đang quay, một bộ đếm được tăng lên cho đến khi chướng ngại vật không được phát hiện nữa. Bộ đếm này đưa ra giá trị gần đúng về chiều dài của chướng ngại vật. Bằng cách di chuyển về phía trước và đồng thời giảm bộ đếm, chướng ngại vật có thể được tránh. Khi bộ đếm về 0, có thể sử dụng lại chức năng Starter để định vị lại nút. Tất nhiên, rô bốt thực hiện chức năng Khởi động bằng cách quay theo hướng mà nó nhớ là đã đi trước khi gặp chướng ngại vật (một lần nữa sử dụng biến nhắc nhở).

Bây giờ bạn đã hiểu đầy đủ về mã, bạn có thể bắt đầu sử dụng nó!

Đảm bảo điều chỉnh các ngưỡng cho phù hợp với môi trường của bạn (ví dụ: phản xạ IR cao hơn trên bảng trắng) và điều chỉnh các thông số khác nhau theo nhu cầu của bạn. Ngoài ra, cần hết sức chú ý đến việc cấp nguồn cho các mô-đun khác nhau. Điều quan trọng chính là các động cơ servo không được cấp nguồn bởi cổng Arduino 5V, vì chúng tốn rất nhiều dòng điện (điều này có thể làm hỏng bộ vi điều khiển). Nếu cùng một nguồn điện được sử dụng cho các cảm biến làm nguồn cấp điện cho Servos, một số vấn đề về đo lường có thể gặp phải.

Đề xuất: