Chế bộ volant từ board Arduino R3

CHẾ BỘ VOLANT TỪ BOARD VI ĐIỀU KHIỂN ARDUINO & ENCODER
(Bài thực hành ứng dụng sinh động cho các bạn trẻ chuyên ngành điện tử, điều khiển tự động...)

Nhiều bạn đã chế thành công bộ volant dùng 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 dùng gamepad, tuy nhiên sẽ cực hơn 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ó khá dễ, trong Gr cũng có đấy.

Rất hay là giờ đây đã có thêm một lựa chọn mới. Ngay trong Gr, đã có người bắt tay chế bộ volant từ board Arduino, tuy nhiên chỉ dùng biến trở, chưa thấy cái nào chạy encoder.
Để hiểu rõ Arduino là gì, vì sao chọn Arduino thay vì chọn Pic, 8051 hay AVR 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 vđk 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 driver 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.

Với sức hấp dẫn của Arduino như thế, 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 Gr, mình đã tham gia nhiệt tình. Rất tiếc, chủ đề đó đã bị xóa nên mình viết bài này để giữ lại, chia sẻ cùng các bạn, 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, 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.

Hình dướ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 là ATmega328. Các bạn hãy lưu ý về ký hiệu 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:
20993141009_cdba80f538_o.jpg


Loại chíp dán:
20479770373_50e91eb522_o.jpg


Chúng 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 nào cũng được, khi test bị ngược chiều thì đảo lại thôi)
- Chân A0, A1, A2 lần lượt nối với chân giữa của mỗi biến trở để làm các bàn đạp ga, côn, phanh (biến trở tầm 20k).
- Chân số từ 4 đến 12 và chân A3, A4, A5 sẽ nối lần lượt với mỗi chân của contac bấm, dùng cho đèn, còi, cam, hộp số ... tất cả có 12 chân, nối được cho 12 contac.
- Chân cấp nguồn + của encoder, một chân ngoài của mỗi biến trở (chân ngoài nào cũng được, khi test bị ngược chiều thì đảo lại), nhập làm một mối, nối đến chân 5v trên board.
- Chân GND của encoder, chân còn lại của các biến trở, chân còn lại của các contac bấm, tất cả nhập làm một mối, nối đến chân GND trên board.

* Cần nối đủ encoder và 3 biến trở. Riêng các contac để sau cũng được, cần đến đâu nối đến đó.
Encoder: https://www.aliexpress.com/item/Fre...lgo_pvid=eab10216-0732-4c7e-ba66-51e8783073f9
Biến trở (chiếc áp) : http://linhkientudong.vn/bien-tro-don-triet-ap-don-20k_i1437_c156.aspx
Contac bấm: http://phukienaqua.com/shops/Linh-Kien-DIY-Den-Led/Cong-tac-bam-den-17/

Bây giờ đến phần mềm, các bạn tải và giải nén trình Arduino IDE, 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
Còn đây là file code, linh hồn cho board mạch vđk, tải về giải nén để lát nạp vào board :
mega.nz/#!IgBgzTSa!a001YBRGBW91R-3cgW8YZ4fZajJcUSOoR_HynO-YGWI

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 (chạy file 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ở file code trên Arduino IDE : Trên IDE > File > Open > chọn mở file code đã tải về ở trên, tại đường dẫn: UnojoyWin \ UnoJoyArduinoSample \ UnoJoyArduinoSample.ino

Bước 6. Nạp code cho board mạch : trên Arduino IDE > Bấm dấu check (verify) để biên dịch > rồi bấm Upload (biểu tượng mũi tên nằm ngang, thứ 2 từ bên trái) để nạp. 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 trực tiếp 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 giao tiếp với PC, cần PC nhận nó là một gamepad thì phải qua thêm một bước 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 khác cho nó, bản thân Arduino trở thành một thiết bị khác, làm nhiệm vụ khác.

Bước 7: Thay file hex khác cho chip giao tiếp ATmega16u trên board Arduino:

- 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 mới 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.
- 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) File code mình đã viết cho 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\ TurnIntoAnArduino.bat (thay vì file TurnIntoAJoystick.bat ).
- Sửa code : 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 dòng 6 thành "int n = 100;"
- Nạp code : Bấm dấu check (verify) trên IDE để biên dịch lại code, rồi bấm Upload nạp lại code cho chip ATmega328 (bước 6).
- Nạp lại file hex cho chip ATmega16u, để board Arduino lại trở thành gamepad : làm đúng chính xác như bước 7, nạp file UnojoyWin\TurnIntoAJoystick.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 thì đắt tiền nhưng 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 tầm 20k, loại như hình dưới này nhé.

20480252293_973c4ccc8e_o.jpg



Dưới đây là clip mình đã mô phỏng, test kết quả hoạt động của board mạch

(ở đây là mình test mạch điện ảo theo kiểu chuyên nghiệp và con nhà nghèo...hi, khi các bạn làm với mạch Arduino thực thì cắm vào pc test nó trên ETS2)

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, làm quay cái encoder tích hợp trong nó, là giã lập cho sự quay của volant (trên mạch điện ảo, phải dùng motor để làm quay quay encoder)
- 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, số ...
Các động 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 trên mạch thực, trong đó bao gồm điều khiển tốc độ và chiều quay motor, tức để quay encoder (coi như quay volant).

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 ảo nêu trên. Tín hiệu này sẽ được PC chuyển vào ETS2 như tín hiệu từ một gamepad.

Ở kết quả mô phỏng này, quan trọng là xem đáp ứng của tín hiệu volant.
Hãy so sánh sự dịch chuyển cái dấu cộng stick bên hình phải (đối tượng bị điều khiển) với sự quay của cái motor bên hình trái (đối tượng điều khiển). Nói chung, nhìn cái gamepad này bị điều khiển chạy ok thì trong ETS2 cũng sẽ ok như thế. Tiêu chí đánh giá :
- Sự di chuyển của stick phải mịn màng và chấp hành theo sự quay của motor, không bị nhiễu giật lung tung.
- Từ vị trí cân bằng (stick ở giữa), khi cho motor quay vừa đủ 2.5 vòng/2 (900 độ/2) thì stick di chuyển vừa kịch đến biên (viền khung chữ nhật màu đỏ),
- Khi motor quay tiếp lố 2.5 vòng/2 thì stick vẫn đứng yên,
- Khi motor đảo chiều thì stick cũng đảo chiều ngay (bất kể khi nào).

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 ở hình bên phải là được rồi.
(Trong board mạch, có thêm 1 contac và 1 chiếc áp để đả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 !
 
Chỉnh sửa lần cuối:

vnsimulator

Administrator
Staff member
Đề nghị bạn @nguyenhaquan không đưa tên mình vào bài viết này, mình và bạn không hề nghiên cứu ra cái này.
Các bác không phải là người đầu tiên nghiên cứu ra nhưng các bác là những người đầu tiên khai sáng cho chộng đồng ETS2 VN nên những cống hiến đó đáng được ghi nhận bác à. Rất cảm ơn các bác đã đóng góp những ý kiến vô cùng quý giá.
 

kimtruong

New member
Các bác không phải là người đầu tiên nghiên cứu ra nhưng các bác là những người đầu tiên khai sáng cho chộng đồng ETS2 VN nên những cống hiến đó đáng được ghi nhận bác à. Rất cảm ơn các bác đã đóng góp những ý kiến vô cùng quý giá.
Đây là chuyện riêng giữa mình và bác @nguyenhaquan. Mình ko muốn một thứ ko phải mình nghiên cứu được mọi người gán ghép một cách vô lý như vậy. Bác @nguyenhaquan muốn nói thế nào trên topic này thế nào cũng được, mình ko quan tâm, mình chỉ đề nghị bác ấy xóa tên mình ở phía trên là được. Mình ko liên quan gì đến cái topic hướng dẫn này của bác ấy, ad @vnsimulator hiểu chưa.
 
Kim Truong: Cám ơn bạn đã góp ý !

Thật ra mình cũng chỉ tập trung giới thiệu về ứng dụng board Arduino, qua việc chế bộ volant làm ví dụ thôi, cũng không để ý những khía cạnh khác.

Sao mình không thể sửa được bài thế này ? không tìm thấy nút sửa đâu hết.
Các mod giúp mình với.
 
Chỉnh sửa lần cuối:
Đề nghị mod khôi phục giúp mình quyền sửa bài viết ở đầu topic này để chỉnh sửa bổ sung bài viết.
 
Chỉnh sửa lần cuối:

vnsimulator

Administrator
Staff member
Sao mình không thể sửa được bài thế này ? không tìm thấy nút sửa đâu hết.
Các mod giúp mình với.

A thông cảm nhé, do có giới hạn với thành viên mới đăng ký nên a mới ko sửa bài được. E vừa chuyển a qua group khác để tiện cho việc đóng góp kiến thức. Cảm ơn a đã dành time chia sẻ. Phiền a sửa lại #1 giúp e nhé.
 

phubonit

New member
Cho em hỏi, encoder mình mua ở đâu vậy chủ thớt, nó có gióng với encoder trong chuột bi không?
 
Xin hỏi chủ thớt nguyenhaquan giống như bạn phubonit như trên? Encoder có phải lấy ở motor có gắn encoder luôn không? Hay sử dung luôn cái motor encoder để làm vô lăng? Gà mờ cái này quá.
Hỏi cụ google thì thấy có motor encoder 32 xung giá còn chấp nhận được (50K). Còn 100 xung thì hơi chát (~200k)! Vậy có thể chế cái encoder này từ chuột bi được không? Hoặc cái 32 xung có thể dùng để làm vô lăng được không?
P/S: cũng đang mò mẫm tìm hiểu cái arduino hấp dẫn này được 2 ngày và vẫn tiếp tục tìm...
 
Cho em hỏi, encoder mình mua ở đâu vậy chủ thớt, nó có gióng với encoder trong chuột bi không?

Có thể chế encoder từ chuột bi được. Mình đã chế thành công. Các linh kiện cần là:

1 con chuột bi, mình lấy luôn chuột Mitsumi (lấy phần phát và thu tín hiệu encoder)
1 con dual op-amp: LM358 (hoặc LM339 hoặc...)
3 trở 4k7, 1 trở 1k8, 1 diod 4148
Sơ đồ mạch điện như trong ảnh.\
Phần đĩa encoder có thể dùng lại của chuột bi nhưng chỉ được 45 - 50 xung. Cần chế tiếp. Mình đã thử và thấy răng số xung tối đa có thể chạy với board arduino này là 102 xung và vẽ được cái đĩa 102 xung này
25836424170_514e3b6ee0_o.png

Các bạn in trên bìa bóng kính, đường kính đĩa khoảng 3cm (lấy băng dính trắng dán lại để bảo vệ lớp mực in)
26108955585_375241daa9_o.jpg
 
Chỉnh sửa lần cuối:

Đức Royal

Moderator
Staff member
Có thể chế encoder từ chuột bi được. Mình đã chế thành công. Các linh kiện cần là:

1 con chuột bi, mình lấy luôn chuột Mitsumi (lấy phần phát và thu tín hiệu encoder)
1 con dual op-amp: LM358 (hoặc LM339 hoặc...)
3 trở 4k7, 1 trở 1k8, 1 diod 4148
Sơ đồ mạch điện như trong ảnh.
26108955585_375241daa9_o.jpg
bạn có thể đăng lên diễn đàn để mọi người cùng biết và cùng nhau chia sẽ kinh nghiệm được không bạn ;)clap~~
 
bạn có thể đăng lên diễn đàn để mọi người cùng biết và cùng nhau chia sẽ kinh nghiệm được không bạn ;)clap~~
Thì mình đang làm theo luồng này cho tập trung mà. Hiện mình mới làm xong phần điện. Kế hoạch là dùng Board arduino chế vô lăng, côn, phanh, ga, đèn còi, gạt nước... Hộp số H thì dùng tay gamepad.
Linh kiện điện đã đủ. Vấn đề là phần cơ khí thôi. Đang tìm giải pháp.... headbang~~
 

Đức Royal

Moderator
Staff member
Thì mình đang làm theo luồng này cho tập trung mà. Hiện mình mới làm xong phần điện. Kế hoạch là dùng Board arduino chế vô lăng, côn, phanh, ga, đèn còi, gạt nước... Hộp số H thì dùng tay gamepad.
Linh kiện điện đã đủ. Vấn đề là phần cơ khí thôi. Đang tìm giải pháp.... headbang~~
bạn có thể tìm giải pháp bằng cách hỏi những người có kinh nghiệm đi trước, nhất là có bác @hoquangtrinh rất giỏi về vấn đề này nhé :)
 
Top