Mục lục:

Nền tảng robot Arduino đơn giản!: 5 bước
Nền tảng robot Arduino đơn giản!: 5 bước

Video: Nền tảng robot Arduino đơn giản!: 5 bước

Video: Nền tảng robot Arduino đơn giản!: 5 bước
Video: Tự học Arduino cơ bản | Bài 12 Tự chế Robot tránh vật cản dùng Arduino cảm biến siêu âm 2024, Tháng bảy
Anonim
Nền tảng robot Arduino đơn giản!
Nền tảng robot Arduino đơn giản!
Nền tảng robot Arduino đơn giản!
Nền tảng robot Arduino đơn giản!

Tôi vừa có một Arduino sau khi chơi với một số bộ vi điều khiển AVR trong các cuộc họp nhóm Robotics. Tôi thích ý tưởng về một con chip lập trình thực sự rẻ tiền có thể chạy bất cứ thứ gì từ một giao diện máy tính đơn giản, vì vậy tôi đã nhận Arduino vì nó đã có một bảng mạch và giao diện USB đẹp mắt. Đối với dự án Arduino đầu tiên của mình, tôi đã đào được một bộ Vex Robotics mà tôi đã đặt từ một số cuộc thi mà tôi đã làm ở trường trung học. Tôi đã luôn muốn tạo ra một nền tảng robot điều khiển bằng máy tính nhưng vi điều khiển Vex yêu cầu một cáp lập trình mà tôi không có. Tôi quyết định sử dụng Arduino mới của mình (và sau này có thể là chip AVR trần nếu tôi hoạt động) để điều khiển nền tảng. Cuối cùng, tôi muốn có một netbook và sau đó tôi có thể điều khiển robot bằng WiFi và xem webcam của nó từ xa.

Tôi đã quản lý để có được một giao thức nối tiếp phù hợp và một ví dụ đơn giản để điều khiển robot bằng bộ điều khiển Xbox 360 được kết nối với PC Linux.

Bước 1: Những gì nó có thể làm…

Những gì nó có thể làm…
Những gì nó có thể làm…
Những gì nó có thể làm…
Những gì nó có thể làm…

Arduino là một nền tảng rất linh hoạt. Mục tiêu cơ bản của tôi chỉ là làm cho Arduino giao tiếp hai động cơ Vex với PC, nhưng tôi có rất nhiều chân cắm đầu vào / đầu ra còn sót lại và quyết định thêm một số thứ bổ sung. Ngay bây giờ tôi có một đèn LED RGB cho trạng thái cổng nối tiếp (màu xanh lá cây nếu gói tốt, màu đỏ nếu chúng kém) và một quạt PC được điều khiển bằng bóng bán dẫn. Tôi cũng có thể thêm công tắc và cảm biến nhưng tôi chưa đặt bất kỳ công tắc nào vào đó. Điều tốt nhất về nó là bạn có thể thêm bất cứ thứ gì bạn muốn vào rô bốt Arduino. Chỉ cần một chút mã giao diện để kiểm soát các nội dung bổ sung và nhận đầu vào cho máy tính.

Bước 2: Các bộ phận

Các bộ phận
Các bộ phận
Các bộ phận
Các bộ phận
Các bộ phận
Các bộ phận

Đối với robot của tôi, tôi đã sử dụng một vài bộ phận khác nhau. Hầu hết các bộ phận là từ những thứ cũ mà tôi đã đặt xung quanh tầng hầm của mình.1) Arduino Duemilanove w / ATMega328Đây là Arduino mới nhất và vì tôi vừa có được nó cách đây vài ngày nên tôi có cái mới nhất. Tuy nhiên, mã đủ nhỏ để có thể dễ dàng phù hợp với bất kỳ Arduino nào. Nó thậm chí có thể phù hợp với ATTiny (nếu tôi xây dựng một bộ điều khiển robot ngoài Arduino, ATTiny 2313 trông giống như một lựa chọn tốt, nó nhỏ hơn và rẻ hơn nhưng vẫn có nhiều đầu ra và giao diện UART nối tiếp) 2) Vex Robotics PlatformI đã có một bộ Vex cách đây vài năm để chế tạo một robot điều khiển bằng sóng radio để nhặt đồ cho một cuộc thi ở trường trung học. Tôi đã chế tạo đế "bot vuông" cơ bản có 4 bánh xe được điều khiển bởi hai động cơ. Bạn có thể thay thế các cơ sở robot khác nếu bạn có một số nền tảng khác mà bạn muốn lái. Điều quan trọng cần lưu ý là động cơ Vex về bản chất là các servo quay liên tục, chúng sử dụng điều chế độ rộng xung để báo hiệu tốc độ và hướng quay. Động cơ Vex rất đẹp vì chúng có dải điện áp hoạt động cao, khoảng từ 5 đến 15 vôn. Tôi đang sử dụng 12V vì tôi đã có một pin 12V. Đối với hầu hết các servo sở thích tiêu chuẩn, bạn sẽ cần điện áp thấp hơn (thường là 6 volt).3) Pin Một robot sẽ vô dụng nếu không có nguồn điện. Để kiểm tra, tôi sử dụng bộ chuyển đổi ổ cắm tường 9V tiêu chuẩn của RadioShack, nhưng để hoạt động không dây, tôi tìm thấy một bộ pin 12V NiMH trong một máy tính xách tay cổ. Mặc dù nó không đủ sạc để chạy máy tính xách tay nhưng nó vẫn giúp cho robot Vex của tôi hoạt động tốt. Nó cũng có thể cấp nguồn cho Arduino bằng cách sử dụng chân đầu vào Vin trên đầu nối nguồn, Arduino sẽ điều chỉnh 12V xuống 5 và thậm chí xuất nó ra chân đầu ra 5V trên đầu nối nguồn. lên dây mọi thứ. Cuối cùng tôi sẽ nhận được một bảng tạo mẫu đẹp hơn và hàn trên một số kết nối lâu dài hơn nhưng hiện tại bảng mạch giúp bạn dễ dàng thay đổi mọi thứ. Breadboard của tôi là "breadboard cơ bản" của SparkFun, chỉ là một breadboard trên một tấm kim loại có 3 đầu cuối. trong USB), bạn có thể sử dụng bộ chuyển đổi RS232-TTL. Tôi đang sử dụng MAX232 vì tôi có một vài trong số chúng nằm xung quanh và tôi đã hàn nó trên một miếng bảng tạo mẫu nhỏ với các tụ điện cần thiết. Tôi cần RS-232 vì máy tính xách tay cũ của tôi chỉ có một cổng USB và tôi đang sử dụng cổng đó cho bộ điều khiển trò chơi để điều khiển robot. có một cái với thứ tự Arduino của tôi vì chúng nghe rất tuyệt). Đèn nhấp nháy màu đỏ, xanh lục, xanh lam theo thứ tự khi Arduino khởi động để cho biết rô bốt đã khởi động lại và sau đó sáng lên Màu xanh lục khi nhận được gói động cơ, Màu xanh lam khi nhận được gói quạt và Đỏ khi lỗi hoặc không xác định gói đã được nhận. Để điều khiển quạt, tôi đã sử dụng một bóng bán dẫn NPN tiêu chuẩn (giống những bóng bán dẫn tôi đã trình bày trong Bài hướng dẫn cuối cùng của mình) và một điện trở ở giữa bóng bán dẫn và Arduino (bóng bán dẫn đang hút quá nhiều dòng điện và làm nóng Arduino, vì vậy tôi đặt một giới hạn điện trở trong để ngăn chặn nó).

Bước 3: Lập trình Arduino và PC

Lập trình Arduino và PC
Lập trình Arduino và PC

Để lập trình Arduino, rõ ràng bạn sẽ cần phần mềm Arduino và cáp USB. Bạn cũng có thể lập trình Arduino bằng cổng nối tiếp và bộ chuyển đổi mức TTL nếu PC của bạn có cổng nối tiếp. Lưu ý rằng giao diện nối tiếp USB sẽ không giao tiếp với bộ xử lý ATMega của Arduino nếu có một bộ chuyển đổi mức được kết nối với các chân nối tiếp của Arduino (chân 0 và 1), vì vậy hãy ngắt kết nối nó trước khi sử dụng USB. Trên Arduino, chúng ta sẽ cần một giao diện nối tiếp cho phép PC để điều khiển động cơ. Chúng tôi cũng sẽ cần một hệ thống truyền động servo PWM để gửi các tín hiệu chính xác đến các động cơ Vex và đảm bảo chúng đi đúng hướng khi được cung cấp các giá trị phù hợp. Tôi cũng đã thêm một số đèn LED nhấp nháy đơn giản, chủ yếu để chỉ báo trạng thái nhưng cũng vì nó trông rất ngầu. Trên PC, chúng ta sẽ cần mở cổng nối tiếp và gửi các khung dữ liệu mà chương trình Arduino sẽ hiểu. PC cũng cần đưa ra các giá trị động cơ. Một cách dễ dàng để thực hiện việc này là sử dụng bảng điều khiển hoặc bảng điều khiển trò chơi USB, tôi đang sử dụng bộ điều khiển Xbox 360. Một lựa chọn khác là sử dụng máy tính nối mạng (netbook hoặc bảng ITX mini nhỏ) trên chính robot để điều khiển không dây. Với netbook, bạn thậm chí có thể sử dụng webcam trên bo mạch để truyền phát lại nguồn cấp dữ liệu video và điều khiển robot của bạn từ xa. Tôi đã sử dụng hệ thống ổ cắm Linux để lập trình mạng cho thiết lập của mình. Một chương trình ("máy chủ cần điều khiển") được chạy trên một PC riêng biệt có cắm bộ điều khiển và một chương trình khác ("máy khách") được chạy trên netbook được kết nối với Arduino. Thao tác này liên kết hai máy tính và gửi thông tin cần điều khiển đến netbook, sau đó sẽ gửi các gói nối tiếp đến Arduino điều khiển rô bốt. Để kết nối với Arduino bằng PC Linux (trong C ++), trước tiên bạn phải mở cổng nối tiếp đúng tốc độ truyền và sau đó gửi các giá trị bằng giao thức mà bạn cũng đã sử dụng trên mã của Arduino. Định dạng nối tiếp của tôi là đơn giản và hiệu quả. Tôi sử dụng 4 byte cho mỗi "khung" để gửi hai tốc độ động cơ (mỗi tốc độ là một byte duy nhất). Các byte đầu tiên và cuối cùng là các giá trị được mã hóa cứng được sử dụng để giữ cho Arduino không gửi nhầm byte đến mã PWM và khiến động cơ hoạt động. Đây là mục đích chính của đèn LED RGB, nó nhấp nháy màu đỏ khi khung nối tiếp chưa hoàn thành. 4 byte như sau: 255 (byte "bắt đầu" được mã hóa cứng),,, 200 (byte "kết thúc" được mã hóa cứng) Để đảm bảo nhận dữ liệu đáng tin cậy, hãy đảm bảo bạn đặt đủ độ trễ giữa các vòng lặp chương trình. Nếu bạn chạy mã PC của mình quá nhanh, nó sẽ làm ngập cổng và Arduino có thể bắt đầu giảm hoặc thậm chí đọc sai byte. Ngay cả khi nó không làm rơi thông tin, nó cũng có thể làm tràn bộ đệm cổng nối tiếp của Arduino. Đối với động cơ Vex, tôi đã sử dụng thư viện Arduino Servo. Vì động cơ Vex chỉ là động cơ quay liên tục, chúng sử dụng cùng một tín hiệu mà các servo sử dụng. Tuy nhiên, thay vì 90 độ là điểm chính giữa, nó là điểm dừng mà động cơ không quay. Giảm "góc" làm cho động cơ bắt đầu quay theo một hướng, trong khi tăng góc làm cho động cơ quay theo hướng khác. Bạn càng xa tâm điểm, động cơ sẽ quay càng nhanh. Mặc dù sẽ không phá vỡ bất cứ điều gì nếu bạn gửi các giá trị lớn hơn 180 độ đến động cơ, tôi khuyên bạn nên hạn chế các giá trị từ 0 đến 180 độ (trong trường hợp này là gia số tốc độ). Bởi vì tôi muốn kiểm soát nhiều hơn và lái xe ít mất kiểm soát hơn, tôi đã thêm một phần mềm "giới hạn tốc độ" vào chương trình của mình để không cho phép tốc độ tăng trên 30 "độ" theo cả hai hướng (phạm vi là 90 +/- 30). Tôi dự định thêm một lệnh cổng nối tiếp thay đổi giới hạn tốc độ, để máy tính có thể xóa giới hạn một cách nhanh chóng nếu bạn muốn chạy nhanh (Tôi đã thử nghiệm trong các phòng nhỏ nên tôi không muốn nó tăng tốc độ và đâm vào tường, đặc biệt là với một netbook trên đó). Để biết thêm thông tin, hãy tải xuống mã đính kèm ở cuối Tài liệu hướng dẫn này.

Bước 4: Thêm Netbook để khám phá các thế giới chưa biết từ xa

Thêm Netbook để khám phá các thế giới chưa biết từ xa
Thêm Netbook để khám phá các thế giới chưa biết từ xa
Thêm Netbook để khám phá các thế giới chưa biết từ xa
Thêm Netbook để khám phá các thế giới chưa biết từ xa

Với một PC đầy đủ trên rô bốt Arduino của bạn, bạn có thể điều khiển rô bốt của mình từ xa tới mức có thể tiếp cận WiFi của bạn mà không cần bất kỳ sợi dây nào để giới hạn rô bốt trong một khu vực. Một ứng cử viên sáng giá cho công việc này là một chiếc netbook, vì netbook rất nhỏ, nhẹ, có pin tích hợp, có Wi-Fi và hầu hết đều được tích hợp webcam có thể được sử dụng để truyền trực tuyến chế độ xem của robot trở lại nơi an toàn nơi bạn có thể kiểm soát nó. Ngoài ra, nếu netbook của bạn được trang bị dịch vụ băng thông rộng di động, phạm vi của bạn thực tế là không giới hạn. Với đủ pin, bạn có thể lái rô-bốt của mình đến cửa hàng bánh pizza địa phương và đặt hàng qua webcam (không được khuyến nghị, rô-bốt thường không được phép ở các địa điểm bán bánh pizza, ngay cả khi người ta có thể cố gắng ăn cắp rô-bốt và có thể thậm chí cả bánh pizza). Nó cũng có thể là một cách tốt để khám phá độ sâu tối của tầng hầm của bạn từ sự thoải mái của chiếc ghế văn phòng của bạn, mặc dù việc thêm một số đèn pha có thể rất hữu ích trong trường hợp này.

Có nhiều cách để làm cho điều này hoạt động, nhiều cách có lẽ dễ dàng hơn nhiều so với cách của tôi, mặc dù tôi không quen với Xử lý hoặc các ngôn ngữ dựa trên tập lệnh, vì vậy tôi đã chọn sử dụng Linux và C ++ để tạo liên kết điều khiển không dây giữa trạm cơ sở của mình (hay còn gọi là ThinkPad cũ) và netbook Lenovo IdeaPad mới của tôi được kết nối với đế ổ đĩa Arduino. Cả hai PC đều chạy Ubuntu. ThinkPad của tôi được cắm vào mạng LAN của trường tôi và IdeaPad của tôi được kết nối với điểm truy cập WiFi của tôi cũng được kết nối với mạng LAN của trường (Tôi không thể nhận được luồng video đáng tin cậy từ WiFi của trường vì mọi người khác đang sử dụng nó, vì vậy tôi đã thiết lập thiết lập bộ định tuyến của riêng tôi để cung cấp kết nối tốt). Một kết nối tốt đặc biệt quan trọng trong trường hợp của tôi vì tôi đã không thực hiện bất kỳ kiểm tra lỗi hoặc thời gian chờ nào. Nếu kết nối mạng đột ngột bị ngắt, robot sẽ tiếp tục cho đến khi nó đâm vào thứ gì đó hoặc tôi chạy và dừng nó. Đây là yếu tố chính đằng sau quyết định của tôi để làm chậm hệ thống truyền động bằng cách giảm tốc độ động cơ và thực hiện giới hạn tốc độ phần mềm.

Bước 5: Nhận nguồn cấp dữ liệu video

Sau khi trình thám hiểm rô bốt của bạn có thể lái xe không dây, có thể bạn sẽ muốn có nguồn cấp dữ liệu video từ netbook để bạn có thể biết rô bốt của mình đang ở đâu. Nếu bạn đang sử dụng Ubuntu (hoặc ngay cả khi bạn không sử dụng!) Tôi khuyên bạn nên sử dụng VLC Media Player để phát trực tuyến. Nếu bạn chưa cài đặt nó, bạn thực sự đang bỏ lỡ, vì vậy hãy cài đặt nó bằng lệnh "sudo apt-get install vlc", duyệt tìm VLC trong Trung tâm Phần mềm Ubuntu (chỉ dành cho 9.10) hoặc tải xuống trình cài đặt tại videolan. org nếu bạn đang sử dụng Windows. Bạn sẽ cần VLC chạy trên cả hai PC. VLC có khả năng phát trực tuyến cũng như phát các luồng trên mạng. Trên netbook (PC rô bốt), trước tiên hãy đảm bảo webcam của bạn (tích hợp sẵn hoặc kết nối USB) hoạt động bằng cách nhấp vào Mở thiết bị chụp và thử Video cho Linux 2 (một số thiết bị cũ hơn có thể cần Video cho Linux hơn là phiên bản 2 mới). Bạn sẽ thấy chế độ xem của máy ảnh trên màn hình netbook. Để phát trực tuyến, hãy chọn Truyền từ menu Tệp, sau đó chọn tab Capture Device ở đầu cửa sổ xuất hiện. Hãy nhớ rằng Ubuntu (và nhiều bản phân phối Linux khác) cho phép bạn giữ phím Alt để nhấp và kéo các cửa sổ quá lớn so với màn hình của bạn (đặc biệt hữu ích trên các netbook cũ hơn, mặc dù IdeaPad của tôi có độ phân giải 1024x576 kỳ lạ mà không có lý do rõ ràng). Để giảm độ trễ, hãy nhấp vào "Hiển thị thêm Tùy chọn" và giảm giá trị bộ nhớ đệm. Số lượng mà bạn có thể hạ thấp nó đôi khi tùy thuộc vào thiết bị, nó sẽ không ổn định nếu bạn hạ thấp quá nhiều. Ở 300ms, bạn có thể bị chậm một chút nhưng nó không quá tệ.

Tiếp theo, nhấp vào Stream để chuyển đến menu tiếp theo. Nhấp vào Tiếp theo, sau đó chọn và thêm HTTP làm điểm đến mới. Bây giờ, hãy thiết lập Chuyển mã để làm cho luồng nhỏ hơn. Tôi đã tạo một cấu hình tùy chỉnh sử dụng M-JPEG ở tốc độ 60kb / giây và 8 khung hình / giây. Điều này là do việc sử dụng codec nâng cao như MPEG hoặc Theora sẽ ngốn thời gian CPU lớn trên bộ xử lý Atom của netbook và điều này có thể dẫn đến nguồn cấp dữ liệu video của bạn bị dừng mà không có lý do rõ ràng. MJPEG là một codec đơn giản, dễ sử dụng ở tốc độ bit thấp. Sau khi bắt đầu luồng của bạn, hãy mở VLC trên PC khác của bạn, mở luồng mạng, chọn HTTP, sau đó nhập địa chỉ IP của netbook của bạn (cục bộ hoặc Internet tùy thuộc vào cách bạn đang kết nối), sau đó là ": 8080". Bạn cần chỉ định cổng vì một số lý do kỳ quặc, nếu không nó sẽ gây ra lỗi cho bạn. Nếu bạn có kết nối tốt, bạn sẽ thấy nguồn cấp dữ liệu của webcam trên PC khác của mình, nhưng nó sẽ có độ trễ nhẹ (khoảng một giây). Tôi không biết chính xác lý do tại sao sự chậm trễ này xảy ra, nhưng tôi không thể tìm ra cách để loại bỏ nó. Bây giờ, hãy mở ứng dụng điều khiển và bắt đầu điều khiển rô bốt netbook của bạn. Tìm hiểu cách thức hoạt động của độ trễ khi lái xe để bạn không đâm vào bất cứ thứ gì. Nếu nó hoạt động, rô bốt netbook của bạn đã hoàn tất.

Đề xuất: