P2. ARDUINO BLUETOOTH TANK [Turret Control]
by thanh01_pmt in Circuits > Arduino
2200 Views, 11 Favorites, 0 Comments
P2. ARDUINO BLUETOOTH TANK [Turret Control]
“Mình viết bài này nhằm chia sẻ cho tất cả bạn nào yêu mô hình và muốn làm một chiếc xe tăng điều khiển qua điện thoại như mình đang làm. Về cơ bản, mình muốn con tăng phải là một Tăng chiến, tức là chạy được và bắn được. Tuy nhiên, nếu gom toàn bộ hướng dẫn vào trong cùng một bài thì quá dài và phức tạp. Mà biết đâu chừng bạn nào đó yêu hòa bình sẽ phản đối mình về việc lắp súng lên xe đồ chơi thì sao ^^!, kkkk....
Trong PHẦN 1 này mình sẽ chỉ nói về hướng làm PHẦN CHẠY, còn PHẦN BẮN thì để PHẦN 2 NHEK.” Như đã hứa trong PHẦN 1 của chuỗi bài “Chế tạo xe tăng Arduino Bluetooth điều khiển bằng điện thoại”, hôm nay mình tiếp tục đăng PHẦN 2, hấp dẫn không kém là “CHẾ TẠO VÀ ĐIỀU KHIỂN THÁP PHÁO CỦA XE TĂNG QUA BLUETOOTH”. Gọi là xe tăng mà không có tháp pháo thì trăm phần trăm có bạn sẽ hình dung nó thành một loại xe cẩu hoặc xe ủi nào đấy. Mình cũng đoán có nhiều bạn đang hóng sau phần này sẽ có thứ gì đó bắn được. Nhưng rất tiếc phải làm thất vọng các bạn một xíu vì PHẦN 2 chỉ nói về chế tạo và điều khiển phần THÁP thôi, còn phần PHÁO mình sẽ làm một bài cụ thể khác vì nó cũng tương đối phức tạp. Cơ mà, phim hay thì phải xem nhiều tập nó mới thêm hấp dẫn chứ nhỉ ^^! Trong phần này để các bạn dễ hình dung ra nó là 1 cái tháp pháo, phần PHÁO – nòng súng, mình sẽ thay bằng đèn laser. Như vậy cũng đủ để đi lùa chó, mèo rồi đó bạn @@! Các bạn cũng sẽ dễ thấy ra một ứng dụng nữa của phần này, đó là, nếu bạn thay đèn laser bằng 1 camera nhỏ thì mình sẽ có một xe điều khiển FPV (First Person View) có thể tùy chỉnh góc nhìn/góc quay camera khi đang chạy. Hết phần giới thiệu, mình sẽ vào phần chính ngay bây giờ…
CHUẨN BỊ VẬT LIỆU & DỤNG CỤ
CẦN CHUẨN BỊ ÍT NHẤT:
- Mạch Arduino Uno (x1)
- Mạch Arduino Motor Shield L293 (x1)
- Mạch Bluetooth HC-05 hoặc HC-06 (x1)
- Động cơ R/C Servo (x2)
- Điện thoại Android (x1)
- Pin 9V-12V (x1)Máy vi tính để nạp chương trình (x1)
*** Các bạn có thể tìm thấy tất cả những linh kiện này tại Shop Arduino (shoparduino.com) (trừ điện thoại và máy vi tính ra nhen ^^!)
VÀ NHỮNG THỨ LINH TINH KHÁC:
- Keo dán (keo nến/keo 502)
- Dây điện nối mạch
CHẾ TẠO PHẦN THÁP PHÁO
Mình sẽ nói sơ qua về nguyên lý. Tại sao mình lại cần tới 2 động cơ R/C Servo? Đơn giản vì mình sẽ dùng một động cơ để điều chỉnh góc của pháo so với thân xe và động cơ còn lại để điều chỉnh góc bắn so với phương nằm ngang. Thực sự, theo nguyên lý này thì việc bố trí 2 động cơ R/C Servo như thế nào là rất dễ. Bạn chỉ cần lắp làm sao để phần trục của 2 động cơ này vuông góc với nhau là được. Bạn có thể tham khảo hình bên dưới để dễ hình dung.
Cách đơn giản là lấy que kem,hoặc que đè lưỡi rồi dùng keo nến dán 2 động cơ lên que đè lưỡi theo hình, KKK… (Mình đang làm thử thôi mà, chạy rồi thì mình thiết kế lại phần vỏ cho đẹp và Pro).
Còn 1 cách nữa là dán trực tiếp 2 mặt của RC Servo lại với nhau.
Tiêu chí của phần này là làm sao để 2 động cơ kết nối chắc chắn nha bạn. Chỗ nối keo mà lung lay, sau này xe tăng mà bắn thì dễ bị lạc đạn lắm, có khi giật quá làm gãy luôn tháp pháo ấy chứ, kkkk…. Bạn có thể tùy chọn 1 trong 3 cách (3 hình) mà mình đã giới thiệu.
Kèm theo là hình sản phẩm mình đã nối theo cách đầu tiên (chỉ thêm phần vỏ)
NỐI DÂY
1. Nối dây RC Servo với L293 Shield
Động cơ R/C servo có 3 dây: 0V, 5V, tín hiệu. Dây tín hiệu sẽ có màu vàng. Motor Shield L293 có 2 chấu 3 chân dùng để cắm loại động cơ này. Bạn cứ cắm dây của 2 động cơ vào 2 chấu này theo hình sao cho, dây màu vàng cắm đúng vào chân có kí hiệu S (Signal - tín hiệu).
2. Nối dây đèn Laser với L293 Shield
Bạn cắm dây (-) của đèn vào 1 chân trong cụm Gnd Dây (+) của đèn vào chân A2 trong cụm Analog In
3. Nối dây giữa module Bluetooth HC-05 và L293 Shield
Bạn cũng cần xem lại P1. ARDUINO BLUETOOTH TANK [Control Tank Tread Only] nếu đã quên cách đấu dây kết nối này.
CÀI ĐẶT PHẦN MỀM LÊN ĐIỆN THOẠI ANDROID VÀ TINH CHỈNH
1. Cài đặt phần mềm:
Do mình sẽ sử dụng một phần mềm để vừa điều khiển xe và điều khiển phần tháp pháo nên nếu bạn đã từng cài phần mềm ở PHẦN 1 rồi thì có thể quan thẳng bước tinh chỉnh. Bạn nào chưa cài thì có thể đọc thông tin theo link về PHẦN 1 bên dưới.
2. Tinh chỉnh:
Bạn nên đọc lại bước tinh chỉnh ở P1. ARDUINO BLUETOOTH TANK [Control Tank Tread Only] để dễ thực hiện phần này
1. Vào Option Menu => Settings => Chọn Continuous stream => Save Setting
2. Vào Option Menu => Change Rate => Cấu hình lại như sau:
Maximum left angle wheels: 0
Center angle LR head: 85
Maximum right angle head: 178
Maximum up angle wheels: 178
Center angle LR head: 85
Maximum right angle head: 0
--------------------------------------------------------------------
Giao diện điều khiển trên điện thoại như hình 1. Giao diện mặc định dùng để điều khiển 2 bánh xích xe tăng
Để chuyển sang điều khiển tháp pháo, bạn bấm vào hình bánh xe, giao diện sẽ chuyển thành hình 2.
Để bắn, bạn nhấn vào chữ "A" như hình 3.
VIẾT CHƯƠNG TRÌNH CHO ARDUINO
Nếu bạn vẫn chưa biết kết nối và nạp chương trình từ máy tính xuống Arduino Uno thế nào thì xem hướng dẫn chi tiết ở PHẦN 1 nhek.
Mặc định bạn sẽ cần có chút kiến thức về Arduino và một chút tiếng Anh để đọc hiểu chương trình bên dưới của mình nếu muốn điều chỉnh nó cho hợp với ý của bạn. Thực sự thuật toán sử dụng trong chương trình mình cũng đọc hiểu và viết lại từ một chương trình của một bạn khác (link tham khảo bên dưới). Nhưng như mình nói ở trên, bạn không cần BIẾT TUỐT để làm điều mình thích nên cũng sẽ không sao nếu bạn copy nguyên xi chương trình của mình và dán nó vào Arduino IDE để tải xuống Uno. ^^!
========================================
Mình sẽ dành ít thời gian nói về chương trình mình viết.
Ở PHẦN 1:
Cơ bản, không phải tự nhiên mình nghĩ ra chương trình này. Để viết chương trình, mình cần biết chương trình điều kiển trên Android đã mã hóa tín hiệu Bluetooth như thế nào ứng với mỗi thao tác điều khiển của mình trên điện thoại trước khi gửi đến Arduino Uno. Đi lòng vòng tìm kiếm thì mình kiếm ra bảng mã hóa như hình. Thực ra, mình tìm thấy cả một bài viết và chương trình chi tiết của tác giả nhưng không thể sử dụng được do chương trình chưa hoàn thiện (tác giả đã không đính kèm các chương trình con để thử tài người hâm mộ như kiểu chơi điền khuyết, kkk....).Mình đính kèm file pdf bài viết của tác giả để các bạn tiện tham khảo. Nếu các bạn đã biết về Arduino thì trong chuong trình mình dùng 2 thư viện chính là AF_Motor (cho ArduinoMotor Shield L293) và Software Serial để giải quyết vấn đề nhận và giải mã tín hiệu. Để làm cho xe tăng chạy như thật thì là một vấn đề ở thuật toán lập trình. Điểm đặc biệt của nó thể hiện qua thuật toán Map() mà mình dùng.
TRONG PHẦN 2 NÀY:
Mình sẽ viết tiếp trên chương trình ở PHẦN 1, chứ không tách rời để đảm bảo sau khi các bạn làm đến phần này thì có thể điều khiển luôn cả 2 phần bánh xích và tháp pháo từ 1 phần mềm duy nhất trên điện thoại. Hay quá phải không nào ^^! Nếu các bạn tự viết chương trình, các bạn sẽ trải qua những kinh nghiệm xương máu và hại não như mình gặp ở đây: “Thế quái nào tất cả giải thuật đều đúng mà sau khi nạp chương trình, cả tháp pháo và bánh xích đều chạy không đúng?!”. Đúng hơn là bánh xích không thể chạy được nữa, còn tháp pháo thì lắc quanh vị trí cân bằng và sau 1 thời gian mình điều khiển trong ức chế thì nó không quay được nữa luôn. Mình tốn cả buổi tối dò đi dò lại chương trình và sau đó là hỏi thầy Google. Ban đầu thầy không chỉ đâu (không tìm thấy bất cứ thông tin nào trên các diễn đàn của Việt Nam) nhưng gãi đúng chỗ ngứa của thấy thì thầy xì ra (nhập đúng từ khóa tiếng Anh). Kết quả trên một trang diễn đàn nước ngoài chỉ ra rằng thư viện Software Serial (mình dùng để nhận tín hiệu Bluetooth từ điện thoại) và thư viện Servo (để xuất tín hiệu điều khiển tháp pháo) xung khắc với nhau do dùng cùng một nền tảng phần cứng. Nó như kiểu thằng em đang chơi xe (cái xe là phần cứng mình nói) thì thằng anh nhảy vào giật lấy cái xe để chơi, cuối cùng hai thằng quýnh lộn, chẳng thằng nào chơi được cả, kkk… Và giải pháp cho vấn đề này là mình phải thay thế thằng thư viện Servo (có sẵn trong Arduino IDE) bằng một thư viện điều khiển R/C Servo khác là PWMServo. Bạn nhớ là cần phải Import (Nhập) thư viện PWMServo vào Arduino IDE trước khi tải chương trình xuống Arduino Uno. Chi tiết cách import/nhập một thư viện vào Arduino IDE như thế nào thì bạn hỏi thầy Google giúp mình. Còn thư viện PWMServo thì mình có đính kèm bên dưới, bạn cần tải về và import thôi, không cần tìm nữa.
Sau vụ này mình rút kinh nghiệm là mình và có thể cả các bạn cũng đang nghiên cứu lập trình ứng dụng điều khiển trên Arduino nói riêng và các họ vi điều khiển nói chung, nên xem sơ nền tảng phần cứng của các thư viện mà mình sử dụng xem có nguy cơ xung khắc do dùng chung tài nguyên hay không (thường các VĐK có tài nguyên khá hạn chế) để tránh những trường hợp phải hại não do chẳng biết mình làm sai từ đâu.
ĐEM XE ĐI TẬP LÁI VÀ TẬP BẮN THÔI ^^!
Chúc các bạn thành công với hướng dẫn này.
Mọi thứ không phải quá khó đúng không?
P/S: Mình share link toàn bộ dữ liệu, bài viết, tài liệu, chương trình liên quan cho bạn nào đang nghiên cứu về Arduino và muốn tìm hiểu sâu hơn về mảng điều khiển xe ở cuối bài.
Link toàn bộ tài liệu liên quan
Nếu thấy bài viết này hay thì nhớ Share cho bạn bè nhek. Mình cũng rất mong đọc được những bài viết khác từ các bạn. Cùng nhau giúp cộng đồng DIY Việt vững mạnh.
P/S: Bạn cần tìm món nào trong bài viết của mình thì vào Shop Arduino (shoparduino.com), có hết nha và cam kết giá hữu nghị để hỗ trợ phong trào DIY Robot.
Thân,
Minh Thành
Admin of Shop Arduino