DIY USB-Joystick / GamePad dengan Arduino Pro Micro

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.

YouTube Channel : MatGyver Official. Jangan lupa subscribe kami ya!

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.

Arduino Pro Micro, Chip ATmega32U4

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.

Beberapa jenis Chip Serial UART – USB : ATmega8U (UNO Original) , CH340 (Arduino Compatible China) dan CP2102 (NodeMCU)

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.

Step #1 sebelum masukkan coding dalam Arduino Pro Micro, cucuk USB terus pada PC, dan pastikan anda dapat paparan Icon KeyBoard seperti dalam gambar ini.

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
PinOut Board Arduino Pro Micro.
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:

  1. Set Range Minimum dan Maximum setiap Axis-Joystick
    (Value yang tertera di bawah adalah Default Value, dan tidak perlu ditukar)
  2. 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:

Generic Joystick Driver

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.

Gambar Joystick yang telah di buka.

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.

DIY Joystick Remote hasil #teamMatGyver.

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 !

Dapatkan Tips-tips DIY dan Arduino dari FB Page Kami.
Konten Video Tips DIY Hobby MatGyver Official Channel.


Published by Mat Gyver

Peneraju Komuniti Digital Maker Malaysia. Pembangunan Komuniti diUtamakan.

2 thoughts on “DIY USB-Joystick / GamePad dengan Arduino Pro Micro

Tinggalkan Jawapan

Masukkan butiran anda dibawah atau klik ikon untuk log masuk akaun:

WordPress.com Logo

Anda sedang menulis komen melalui akaun WordPress.com anda. Log Out /  Tukar )

Facebook photo

Anda sedang menulis komen melalui akaun Facebook anda. Log Out /  Tukar )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: