Dalam tutorial ini, MatGyver akan tunjukkan Step-by-Step bagaimana membuat DIY Joystick-Gamepad dengan menggunakan Arduino Pro Micro.
Sebelum kita mulakan Tutorial, kami akan terangkan Perkara-perkara Penting yang perlu kita tahu berkenaan Arduino Pro Micro.
Arduino Pro Micro, adalah antara sejenis Arduino yang Jarang diPelopori oleh DIY Hobbyist kita, juga termasuk projek-projek FYP Student.
Kebanyakan project, hanya berkitar pada Arduino UNO, NANO, MEGA dan NodeMCU.
PERBEZAAN PRO MICRO VS LAIN2 ARDUINO
Mungkin masih ramai yang tidak tahu berkenaan komponen-komponen Chip di atas sebuah Board Arduino.
Setiap Board Arduino, MEMERLUKAN Chip Serial UART-to-USB, SUPAYA Data dapat dihantar dari Arduino ke USB-Computer ataupun dari Arduino ke USB-Computer, samada untuk meng-UPLOAD program, atau mendapatkan data SERIAL MONITOR. (Rujuk Gambar di bawah)

Komunikasi Arduino-USB datang dari Pin 0 dan Pin 1 Arduino yang biasa ditandakan dengan TX dan RX, juga dikenali sebagai SERIAL PORT Arduino. Tapi, SIGNAL Serial Tx dan Rx ini adalah dalam bentuk TTL (Transistor-to-Transistor Logic).
Signal TTL ini akan diubah oleh Chip Serial UART – USB dalam bentuk atau format USB, yang dapat difahami oleh Computer sebagai USB Communication.

CHIP ARDUINO PRO MICRO (ATmega32U4)
Bagi Arduino Pro Micro pula, ia tidak mempunyai Chip Serial UART – USB converter, KERANA ia sudah mempunyai BUILT-IN infrastruktur USB Communication dalam Chip ATmega32U4-nya.

Tanpa memerlukan chip tambahan, Windows boleh terus detect ia sebagai sebuah USB device KEYBOARD dan COM Port yang mempunyai fungsi tambahan:
- USB KeyBoard Function
- USB Mouse Function

Source: https://images-na.ssl-images-amazon.com/
Jika anda perasan, Arduino Pro Micro ini mempunyai sejumlah 9 Pin Analog Input!
FUNGSI GAMEPAD-JOYSTICK

Bagi mengaktifkan Fungsi GAMEPAD-JOYSTICK pada Arduino Pro Micro, anda akan perlukan Library Joystick.h yang akan GENERATE-kan signal Sebuah Joystick dan di hantar ke PC melalui USB.
INSTALL LIBRARY Joystick.h
Library yang akan digunakan dalam tutorial ini, adalah library oleh Tuan MHeironimus dari GitHub.
Library ini mempunyai pelbagai folder, dan kami telah permudahkan dalam link berikut untuk diDownload:
Library JoystickV2 by MHeironimus
atau, anda boleh terus ke link GitHub-nya adalah dibawah:
https://github.com/MHeironimus/ArduinoJoystickLibrary/tree/version-2.0

Setelah Download Library Joystick.h dalam bentuk .ZIP file,
NAVIGASI KE:
Sketch > Include Library > Add.ZIP Library
untuk install Library tersebut.
MENGGUNAKAN LIBRARY Joystick.h
Rujuk rajah berikut sebagai panduan untuk langkah-langkah seterusnya.

DEFINING AREA
Includekan library Joystick.h dan juga cipta objek Joystick.
//Includekan Library Joystick.h #include "Joystick.h" //Cipta Objek Joystick untuk digunakan dalam coding Joystick_ Joystick;
VOID SETUP
2 komponen penting dalam Void Setup adalah:
- Set Range Minimum dan Maximum setiap Axis-Joystick
(Value yang tertera di bawah adalah Default Value, dan tidak perlu ditukar) - Mulakan Fungsi Joystick dengan Joystick.begin();
void setup(){ //setkan value maksimum dan minimum untuk axis Joystick Joystick.setXAxisRange(-127, 127); Joystick.setYAxisRange(-127, 127); Joystick.setZAxisRange(-127, 127); Joystick.setRxAxisRange(0, 360); Joystick.setRyAxisRange(360, 0); Joystick.setRzAxisRange(0, 720); Joystick.setThrottleRange(0, 255); Joystick.setRudderRange(255, 0); //mulakan library Joystcik.h Joystick.begin(); }//END VOID SETUP
Anda boleh merujuk maksud Setting Range di atas mengikut gambarajah Joystick-Calibration di berikut:

VOID LOOP
Rujuk Syntax-syntax di bawah untuk digunakan dalam Void Loop.
void loop(){ //Syntax untuk memberi arahan Button On Joystick.pressButton(X); //gantikan X dengan nombor butang antara 1~32 //Syntax untuk memberi arahan Button OFF Joystick.releaseButton(X); //gantikan X dengan nombor butang antara 1~32 //Syntax untuk SET NILAI X-axis Joystick.setXAxis(X); //nilai X = -127 ~ 127 //Syntax untuk SET NILAI Y-axis Joystick.setYAxis(X); //nilai X = -127 ~ 127 //Syntax untuk SET NILAI Z-axis Joystick.setZAxis(X); //nilai X = -127 ~ 127 //Syntax untuk SET NILAI X-Rotation Joystick.setRxAxis(X); //nilai X = 0 ~ 360 //Syntax untuk SET NILAI Y-Rotation Joystick.setRyAxis(X); //nilai X = 360 ~ 0 //Syntax untuk SET NILAI Z-Rotation Joystick.setRzAxis(X); //nilai X = 0 ~ 720 //Syntax untuk SET NILAI Throttle Joystick.setThrottle(X); //nilai X = 0 ~ 255 /***PENTING****/ //Ini adalah syntax untuk menghantar semua //Value di atas kepada PC Joystick.sendState(); }//END VOID LOOP
Kesemua Nilai Joystick Axis perlu mengikut RANGE yang telah ditetapkan.
Contohnya, jika mempunyai Input Potentiometer pada pin Analog (0 ~ 1023) untuk dijadikan sebagai signal Joystick,
Anda boleh praktikkan penggunaan MAPPING, contoh seperti berikut:
void loop(){ //nilai input dari Potentiometer 0 ~ 1023 //diMAP kan kepada set nilai baru 0~255 int X = map(analogRead(A0), 0, 1023, 0, 255); //Syntax untuk SET NILAI Throttle //Nilai X 0~255 digunakan untuk set Nilai Throttle Joystick.setThrottle(X); //nilai X = 0 ~ 255 /***PENTING****/ //Ini adalah syntax untuk menghantar semua //Value di atas kepada PC Joystick.sendState(); }//END VOID LOOP
Apabila Pro Micro sentiasa menghantar DATA-DATA BARU setiap axis dan butang melalui syntax Joystick.sendState(); , PC akan automatically dapat detect Arduino Pro Micro tersebut sebagai Gamepad-Joystick!
Untuk mudah faham lagi, anda boleh rujuk Full-Coding di bawah untuk satu contoh 4-axis Joystick Controller DIY kami.
TEST LIBRARY Joystick.h
Selepas install Library ini, anda boleh terus ke bahagian EXAMPLE, buka File JoystickTest dan Upload Coding JoystickTest pada Pro Micro anda, untuk terus buat ujian.
NAVIGASI KE:
File > Examples > Joystick > JoystickTest

Pastikan anda memilih Board Arduino Leonardo dan COM Port yang betul.
Dalam EXAMPLE ini, Coding akan memeberi Arahan SIMULASI untuk setiap Axis Joystick dan juga kesemua 32 unit butang.
SIMULASI JOYSTICK ini dapat dilihat dalam paparan Joystick Calibration dalam Windows 8 atau 10.

NAVIGASI KE:
Settings > Devices and Printers > Game Controller Settings
Dan RIGHT-Click pada Icon Generic USB Joystick, dan pilih Game Controller Settings.
Dalam Game Controller Settings anda akan dapat lihat Arduino Leonardo diDetect sebagai Game Controller.
Terus tekan pada Properties, dan paparan Joystick Calibration Test akan muncul.
PENTING!:
Pastikan anda sambungkan pin A0 pada Ground supaya Simulasi JoystickTest dapat berjalan mengikut EXAMPLE tadi.


Anda akan dapat lihat Butang-butang dan juga Setiap Axis Rotation bergerak dan berfungsi.
Windows 10 & DRIVER JOYSTICK-GAMEPAD
Terdapat beberapa kes bagi Windows 10, di mana Driver Joystick nya tidak wujud.
Anda boleh download driver Generic Joystick Driver untuk Windows 8/10 di link berikut:
DIY RC-JOYSTICK CONTROLLER

Dari EXAMPLE di atas, kita boleh lihat bagaimana Coding Library Joystick.h berfungsi.
Sekarang, kita akan gunakan, 4 Potentiometer DALAM sebuah Joystick-Gamepad kami yang rosak, untuk dapatkan ANALOG INPUT (0~1023) bagi menjadi signal pada Arduino Pro Micro Joystick kita.

Konsep mana-mana Joystick atau Gamepad, hanyalah pada penggunaan Potentiometer!
(termasuk Steering Simulator)

Buatkan sambungan wiring seperti rajah di atas, di mana, 4 pin analog A0, A1, A2, dan A3 akan digunakan.
Kemudian gunakan Coding di bawah, Copy dan Upload untuk DIY Joystick ini!
CODING DIY JOYSTICK 4-Axis
#include "Joystick.h" //Create Joystick Object Joystick_ Joystick; //JOYSTICK INPUTS int xjoy = 0; int yjoy = 0; int tjoy = 0; int rjoy = 0; int xjoyA = 0; int yjoyA = 0; int tjoyA = 0; int rjoyA = 0; void setup() { Serial.begin(9600); Joystick.setXAxisRange(-127, 127); Joystick.setYAxisRange(-127, 127); Joystick.setZAxisRange(-127, 127); Joystick.setRzAxisRange(0, 720); Joystick.begin(); pinMode(A0, INPUT); pinMode(A1, INPUT); pinMode(A2, INPUT); pinMode(A3, INPUT); //pinMode(13, OUTPUT); }//END VOID SETUP void loop() { xjoy = analogRead(A0); yjoy = analogRead(A1); tjoy = analogRead(A2); rjoy = analogRead(A3); xjoyA = map(xjoy, 0, 1023, 127, -127); yjoyA = map(yjoy, 0, 1023, 127, -127); tjoyA = map(tjoy, 0, 1023, 0, 720); rjoyA = map(rjoy, 0, 1023, 127, -127); Joystick.setXAxis(xjoyA); Joystick.setYAxis(yjoyA); Joystick.setRzAxis(tjoyA); Joystick.setZAxis(rjoyA); Joystick.sendState(); //Uncomment di bawah untuk CHECK data dari Variable //checkSerial(); }//END VOID LOOP void checkSerial(){ Serial.print(tjoyA); Serial.print("/"); Serial.print(tjoy); Serial.print(" "); Serial.print(rjoyA); Serial.print("/"); Serial.print(rjoy); Serial.print(" "); Serial.print(xjoyA); Serial.print(" "); Serial.print(yjoyA); Serial.print(" "); Serial.println(); }
Selepas Upload Coding, buka semula Joystick Calibration Configuration, dan lihat Axis-axis yang bergerak mengikut pergerakan JOYSTICK!

DIY JOYSTICK MENGGUNAKAN ANALOG PS2 CONTROLLER


Module Analog Joystick PS2, adalah antara module Joystick termurah yang available di Malaysia atau Jalan Pasar.
Joystick ini juga mempunyai 2 POTENTIOMETER, satu untuk X-Axis dan satu lagi untuk Y-Axis.
Bagi menggunakan Joystick ini, anda boleh terus gunakan Coding yang sama di atas, tanpa buat sebarang perubahan.

GAME-GAME PERCUMA ANDA BOLEH CUBA!
Anda boleh mencuba beberapa Software/App Game Simulator QuadCopter dan juga RC Airplane FREE yang berikut, untuk test dan latih SKIL PENERBANGAN!
Untuk Android Device :
#1 FreeRider FPV
(Cari di Google Playstore)
#2 Absolute RC Flight Simulator
(Cari di Google Playstore)

Untuk Windows 8/10:
#1 FMS 2.0 – Flying Model Simulator

Link Downloadnya adalah berikut:
Flying Model Simulator 2.0 (FMS)
Jika anda mempunyai sebarang PERTANYAAN berkenaan artikel ini, anda boleh maklumkan dalam bahagian COMMENT.
Selamat Bermain Flight Simulator!
Jika anda menyukai artikel-artikel keluaran MatGyver.my, kami mohon jasa baik tuan/cikpuan untuk sumbangkan like pada page FaceBook kami,
dan juga Subscribe ke YouTube Channel kami !

Huh..sangat berguna..thanks
LikeLike
Terima kasih tuan 😃
Kalau tuan ada topic lain yang mahu kami buat tutorial, boleh recommend di sini ya!
LikeLike