LÀM BỘ VOLANT TỪ BOARD ARDUINO - SỬ DỤNG ENCODER
Nhiều bạn đã làm volant từ chuột, làm bộ volant từ gamepad bao gồm các pedal.
Cũng có bạn tiến xa hơn, chế bộ volant từ vi điều khiển từ A tới Z, từ phần cứng tới phần mềm; dựa trên các vi điều khiển quen thuộc như Pic, 8051 ..
Nếu so cùng giá tiền, làm từ vđk thì đặc tính volant tốt hơn so với gamepad, tuy nhiên phải có nghề một chút. Tức là ta sẽ tự chế ra một cái gamepad xịn (b1), rồi từ đó lắp ráp thành bộ volant (b2).
Trong bài này mình hướng dẫn các bạn làm b1, còn b2 thì đã có nhiều trên mạng và nó rất dễ.
Giờ đây lại có thêm một lựa chọn mới, ngay trong Group đã có một vài bác chế bộ volant từ board Arduino.
Để hiểu rõ Arduino là gì, vì sao chọn Arduino thay vì chọn Pic, 8051 hay AVR rời thì mời các bạn tham khảo ở đây
http://arduino.vn/bai-viet/42-arduino-uno-r3-la-gi.
Theo mình, so với dùng các vđk rời, board mạch này có các ưu điểm rất hấp dẫn với người không chuyên:
- Là một board mạch vi điều khiển hoàn chỉnh, chỉ việc cắm vào cổng USB máy tính, cài drive là chạy. Mạch dùng để chạy và cũng nạp code trực tiếp từ máy tính luôn.
- Rất dễ viết code: nếu dùng 8051, Pic .. phải viết cả trang code thì với Arduino chỉ còn vài dòng là xong (tuyệt vời, nhờ thư viện mở của Arduino liên tục phát triển trên cộng đồng mạng, trong gần 10 năm qua). Tuy nhiên ở đây, code thì cũng đã free sẵn luôn rồi, coi như xong.
- Giá chỉ bằng cái gamepad: Board Arduino Uno r3 chíp thường 170k, chíp dán 90k (hàng TQ):
http://dientuachau.com/page/index.php?_m=mod_product&_a=view&p_id=1107
Tóm lại, nó đang rất hot trong giới hâm mộ kể cả chuyên và không chuyên, mới có mặt tại VN hơn một năm nay.
Và qua bài viết này, bạn chỉ cần nắm thao tác nạp code (nôm na giống như PC thì cần phải nạp Hệ điều hành vậy), rồi mua mạch về là chiến thôi... chỉ cần có tay nghề "vọc" là ok.
Mình thì đã có bộ g27 rồi, nhưng vì sức hấp dẫn của Arduino nên vừa rồi thấy có bác đưa quá trình chế bộ volant từ board mạch Arduino này lên fb Group nên mình đã tham gia. Rất tiếc, chủ đề đó đã bị xóa nên mình viết bài này để lưu lại, cũng là hệ thống lại kiến thức của mình sau gần một tháng làm quen với Arduino.
Về phần điện, từ mạch Arduino được chia sẻ trên mạng, không chỉ áp dụng mà bọn mình đã cải tiến được một điểm quan trọng, đó là sử dụng encoder mô phỏng volant thay vì dùng biến trở (giúp volant quay mịn hơn, khống chế góc quay volant 2,5 vòng từ trong phần mềm nên sẽ chính xác hơn, đơn giản hơn so với làm từ biến trở).
Các bạn chỉ cần biết để lựa chọn phương án như vậy thôi, việc còn lại chỉ là lắp ráp và dùng thôi.
Đây là dòng board Arduino Uno, phiên bản R3, được dùng phổ biến và cũng là board dùng trong bài viết này, chip vđk ứng dụng trên board này có tên ATmega328. Các bạn hãy lưu ý về ký hiệu (số thứ tự) chân trên board để đấu nối cho đúng hướng dẫn (thứ tự chân được ghi trên board, không sử dụng thứ tự chân của con chip vđk nhé).
Ngoài ra trên board còn có vđk giao tiếp ATmega16.
Loại chip thường:
Loại chíp dán:
Để chế bộ volant, ta cần chuẩn bị thêm một số linh kiện, và đấu nối chúng vào board mạch như sau:
- Chân số 2, 3 lần lượt nối với kênh A và kênh B encoder, để làm volant (chọn encoder có độ phân giải tầm 100 xung).
- Chân số từ 4 đến 12 và chân A3, A4, A5 sẽ nối với 12 phím bấm làm đèn, còi, cam...12 chân còn lại của các phím bấm nối GND.
- Chân A0, A1 A2 sẽ nối với điểm giữa các biến trở để làm các bàn đạp ga, côn, phanh (biến trở 20k).
- Các chân cấp nguồn và chân nối đất của encoder, biến trở sẽ nối với chân chân 5v và chân GND trên board.
Bây giờ đến phần mềm, các bạn tải và giải nén trình Arduino IDE, có trong hướng dẫn sau, dùng để soạn thảo và nạp code cho board qua cổng USB.
http://arduino.vn/bai-viet/68-cai-dat-driver-va-arduino-ide
Code để nạp ở đây, tải về và giải nén:
http://drive.google.com/file/d/0B9kS2-WJKNGcZUlxb3NXZ3hrTlE/view?usp=sharing
Quy trình thực hiện:
Bước 1. Cắm board vào cổng USB, cài đặt Driver cho board Arduino: Vào thư mục UnojoyWin chạy UnoJoyDriverInstaller.exe
Rồi khởi động trình Arduino IDE đã tải ở trên (Arduino.exe).
Bước 2. Xác định cổng COM nào đã kết nối trên PC: Trên windows> vào Device Manager > Pors (Com & LPT) > Arduino (COM…) ; ví dụ là Arduino (COM1) có nghĩa là board Arduino đang nối vào cổng COM1 trên PC.
Bước 3. Chọn cổng COM tương ứng cho Arduino IDE: Trên IDE > Tools > Serial Port > COM1
Bước 4. Chọn đúng dòng board Arduino trên Arduino IDE: Trên IDE > Tools > Board > Arduino Uno
Bước 5. Mở code trên Arduino IDE: Trên IDE > File > Open > chọn mở file code UnojoyWin \ UnoJoyArduinoSample \ UnoJoyArduinoSample.ino đã tải về.
Bước 6. Nạp code cho board mạch: trên Arduino IDE > Upload (biểu tượng mũi tên nằm ngang, thứ 2 từ bên trái). Khi nạp xong sẽ có thông báo (lưu ý, bước này là nạp file hex cho chip ứng dụng ATmega328)
Đối với một ứng dụng thông thường, dùng board Arduino để điều khiển các thiết bị ngoại vi khác (động cơ, LCD, mạch wifi ...) thì qua 6 bước như vậy là xong.
Nhưng với ứng dụng này, chúng ta muốn dùng Arduino điều khiển game, muốn PC nhận nó là một gamepad thì phải qua thêm một công đoạn nữa.
Có thể hiểu board Arduino bao gồm phần cứng và phần mềm, và giờ ta thay phần mềm cho nó, bản thân Arduino trở thành một thiết bị khác, làm nhiệm vụ khác.
Công việc cụ thể là thay file hex khác cho chip giao tiếp ATmega16u trên board Arduino, như sau:
Bước 7:
- Các bạn tải và cài phần mềm flip để hỗ trợ nạp file hex cho chip giao tiếp
http://www.atmel.com/images/Flip Installer - 3.4.7.112.exe
- Dùng dây dẫn điện quẹt cho chạm chân GDN lên chân Reset, tại cụm đầu nối ICSP1 như hình 1 ở trên (2 chân đánh dấu đỏ), gọi là set mode DFU cho board mạch Arduino.
- Vào thư mục UnoJoyWin đã tải về, chạy file
TurnIntoAJoystick.bat để nạp file hex cho chip giao tiếp.
- Sau khi nạp xong, bạn rút và cắm lại dây USB, lúc này PC sẽ nhận board Arduino là một Gamepad, vậy là xong !
Trên windows, bạn vào mục Devices and Prints để test Gamepad rồi vào ETS2 để chạy thử bộ volant mới này xem sao.
Các bạn xem thêm clip gốc hướng dẫn thực hiện
LƯU Ý:
a) Board Arduino có thể dùng nguồn từ cổng USB hoặc nguồn ngoài 7-9v cắm vào đầu jack 5ly (có thể chạy 12v, nhưng board mạch TQ sẽ khá nóng)
- Nếu dùng nguồn từ cổng USB trên PC thì cẩn thận, nếu để chạm mạch trên board có thể làm hỏng cổng USB của PC.
Trên board có 01 cầu chì tự ngắt mạch khi bị chạm và sau đó tự phục hồi, tuy nhiên cẩn thận thì hơn.
- Nếu dùng nguồn ngoài cắm vào jack 5ly thì phải chú ý chân âm dương, nếu bị ngược sẽ làm cháy board mạch ngay tức khắc.
b) Phần code ở đây dùng để test với encoder có độ phân giải 20 xung, nếu các bạn dùng loại encoder có độ phân giải khác, thì cần sửa code như sau:
- Khôi phục lại file Hex cho chip ATmega16u, để board Arduino trở về mặc định ban đầu: làm như bước 7, nhưng chạy file UnojoyWin\ TurnIntoAn
Arduino.bat (thay vì file UnojoyWin\TurnIntoA
Joystick.bat trong bước 7).
- Mở file code trên IDE (bước 5), tìm đến dòng thứ 6 "int n = 20;" và sửa theo độ phân giải mới (ví dụ: encoder của bạn là loại 100 xung thì sửa thành "int n = 100;",
- Bấm dấu check (verify) trên IDE để biên dịch lại code,
- Sau đó nạp lại code cho board (bước 6 - Upload).
- Nạp lại file Hex cho chip ATmega16u, để board Arduino trở thành gamepad (làm đúng chính xác như bước 7, nạp file UnojoyWin\TurnIntoA
Joystick.bat)
Encoder phân giải cao thì volant quay càng mượt, với mạch này các bạn nên chọn loại có độ phân giải tầm 100 xung là vừa, cao hơn nữa cũng không mượt hơn.
c) Các biến trở dùng cho các bàn đạp các bạn chọn mua loại 20k, giống như hình dưới này nhé.
Dưới đây là clip cho thấy kết quả hoạt động của board mạch
Các bạn quan sát board mạch Arduino hình bên trái, được mình mô phỏng trên phần mềm proteus:
- Cái motor quay quay, có tích hợp encoder, là giã lập cho sự quay của volant,
- Các biến trở kéo trượt lên xuống là giã lập cho hành trình các chân đạp pedal
- Các phím bấm thì rõ rồi, dùng cho các nút đèn còi...
Thao tác trên mạch này là do mình điều khiển các nút bấm và kéo các chiếc áp, mô phỏng các động tác khi lái xe.
Hình gamepad bên phải : Phản ánh kết quả tín hiệu nhận được trên PC khi ta thao tác trên board mạch Arduino. Các tín hiệu này sẽ được PC chuyển vào trong ETS2 cho chúng ta, như tín hiệu từ một gamepad.
Trong kết quả mô phỏng này, quan trọng nhất là xem đáp ứng của cái volant, tức là xem cái dấu cộng stick trái của gamepad (hình bên phải) di chuyển có mượt mà và chính xác theo thao tác quay motor hay không (mạch điện bên trái)? Kết quả ở đây thế nào thì trong ETS2 sẽ như thế:
- Khi cho motor quay vừa đúng 2.5 vòng thì stick di chuyển vừa kịch đến biên (khung chữ nhật màu đỏ),
- Khi motor quay lố 2.5 vòng thì stick đứng yên,
- Khi motor đão chiều thì stick cũng đão chiều ngay.
Còn lại, 3 chiếc áp ở giữa và các phím bấm, khi thao tác thấy có đáp ứng là được rồi.
Trong board mạch, mình có dùng thêm 1 contac và 1 chiếc áp trên cùng để đão chiều và tăng giảm tốc độ cho motor.
Rất vui lòng và cám ơn các bạn đã xem.