Selain elektronika saya juga memiliki hobby lain yaitu Ngegame (Main Game), hehe. Dan beberapa saat lalu dari artikel ini ditulis, saya menemukan game yang cukup menarik dari salah satu channel Yotube. Game ini bernama OSU!, game music tapping layaknya Guitar Hero (jika kalian tau, aja), namun memiliki konsep yang berbeda dengan guitar hero, dimana tidak menggunakan garis tab, melainkan menggunakan peta geometrix. berikut ini contoh gamenya.

Loh kok web ini jadi bahas Game sih?? hehe tenag aja, saya tidak akan membahas detail gamenya, tetapi ada hal yang membuat saya tertarik dari game ini. Tentunya berhubungan dengan Elektronika dan Arduino, Ya :). Oke, pada saat saya mulai menekuni game ini, ternya ta ada salah satu channel Youtube yang menggunakan tool, yang cukup menarik menurut saya. Dimana dia membelu sebuah Keyboard kecil dengan 2 Tombol Key dan 3 buah Button. Nama-nya Nono Keyboard (Nano Keboard, slang otaku anime, biar ke jepang-jepangan, haha). Yang bikin saya tertarik adalah setelah saya cek di Marketplace (Tokopedia atau Bukalapak – NB: Bukan ngiklan ya :p),  harga dari keyboard ini bisa sampai 700 ribuan Rupiah. Harga fantastic untuk satu buah keyboard dengan 2 tombol, sedangkan saya beli keyboard mekanikal Full Key dengan harga yang sama.

harga nano keyboard

Dari permasalahan diatas saya bertanya-tanya, bukannya Arduino mendukung komunikasi Keyboard dengan HID (Human Interface Divice), langsung-lah saya Googling dan mencari informasi library tersebut, dan all-hasil ketemu. Nah pada artikel ini saya akan memberikan tutorial membuat  DIY Nano Keboard untuk game OSU! mayan untuk kalian yang suka gamenya tapi gak punya keyboard Mechanical karena harganya yang cukup mahal.  Oke langsung saja kita mulai dari daftar komponen.

Daftar Komponen

  • 1pcs ATMEGA8 (rekomendasi biar Murah) atau ATMEGA328
  • 2pcs Mechanical Switch (Pilih warna yang kalian suka, pelajari dulu perbedaan warna switch. Rekomendasi Merah /  Hitam). Bisa pakai Oetemu /  Cherry MX.
  • 3pcs Tact Switch 6×6 (susaikan selerah).
  • 1pcs Soket Micro USB (jika susah, redesign aja ganti soket gampang dicari, macam USB B Arduino UNO).
  • 2pcs Dioda Zener 3,6V.
  • 1pcs Resistor 1/4W 2,2K.
  • 2pcs Resistor 1/4W 68Ohm.
  • 2pcs Capasitor Keramik 22pf
  • 1pcs Crystal 16MHz
  • 1pcs Fuse Resistor (kalau susah, langsung aja jumper pakai kawat. Cuma untuk sikring).
  • Untuk LED (bebas, kasih gak dikasih gak masalah, cuma estetika).
  • USBasp, untuk upload Program.

Skemarik dan PCB

Catatan: File Desain sudah dilampirkan di Repository.

Arduino Program

//----------------------------------------------------------------------------------
#include <USBKeyboard.h>

#define BL       11
#define BR       10
#define B1       A5
#define B2       12
#define B3       9
#define LAYOUT   LAYOUT_US

int State1, State2, State3, StateR, StateL;
int holdR, holdL, oldR, oldL;
USBKeyboard nonoKey = USBKeyboard();

//----------------------------------------------------------------------------------
void setup() {
  TIMSK = 0;        // MEGA8
  //TIMSK0 = 0;     // MEGA328
  pinMode(BL, INPUT_PULLUP);
  pinMode(BR, INPUT_PULLUP);
  pinMode(B1, INPUT_PULLUP);
  pinMode(B2, INPUT_PULLUP);
  pinMode(B3, INPUT_PULLUP);
}
//----------------------------------------------------------------------------------
void loop() {
  nonoKey.update();
  if (digitalRead(BL) == LOW and StateL == LOW) {
    nonoKey.sendReport(0, nonoKey.asciiToKeycode('z'), 0, 0, 0, 0, 0); StateL = HIGH;
  }
  if (digitalRead(BR) == LOW and StateR == LOW) {
    nonoKey.sendReport(0, nonoKey.asciiToKeycode('x'), 0, 0, 0, 0, 0); StateR = HIGH;
  }
  if (digitalRead(B1) == LOW and State1 == LOW) {
    nonoKey.sendKeys(0x51, 0, 0, 0, 0, 0); State1 = HIGH;
  }
  if (digitalRead(B2) == LOW and State2 == LOW) {
    nonoKey.sendKeys(0x29, 0, 0, 0, 0, 0); State2 = HIGH;
  }
  if (digitalRead(B3) == LOW and State3 == LOW) {
    nonoKey.sendKeys(0x52, 0, 0, 0, 0, 0); State3 = HIGH;
  }

  //-----------------------------------------------------------------------
  if (holdL > 50) {
    holdL = 100;
    if (oldL > 10) {
      nonoKey.sendReport(0, nonoKey.asciiToKeycode('z'), 0, 0, 0, 0, 0); oldL = 0;
    }
  }
  if (holdR > 50) {
    holdR = 100;
    if (oldR > 10) {
      nonoKey.sendReport(0, nonoKey.asciiToKeycode('x'), 0, 0, 0, 0, 0); oldR = 0;
    }
  }



  //-----------------------------------------------------------------------

  if (digitalRead(BL) == HIGH and digitalRead(BR) == HIGH) {
    nonoKey.sendReport(0, 0, 0, 0, 0, 0, 0);
  }

  if (digitalRead(BL) == HIGH) {
    StateL = LOW; oldL = 0; holdL = 0;
    if (digitalRead(BR) == LOW) {
      nonoKey.sendReport(0, nonoKey.asciiToKeycode('x'), 0, 0, 0, 0, 0);
    }
  }
  if (digitalRead(BR) == HIGH) {
    StateR = LOW; oldR = 0; holdR = 0;
    if (digitalRead(BL) == LOW) {
      nonoKey.sendReport(0, nonoKey.asciiToKeycode('z'), 0, 0, 0, 0, 0);
    }
  }
  if (digitalRead(B1) == HIGH) {
    State1 = LOW;
  }
  if (digitalRead(B2) == HIGH) {
    State2 = LOW;
  }
  if (digitalRead(B3) == HIGH) {
    State3 = LOW;
  }

  delayMicroseconds(20000);
  holdL = holdL + 1;
  holdR = holdR + 1;
  oldL = oldL + 1;
  oldR = oldR + 1;
}
//----------------------------------------------------------------------------------

Catatan: Program dan Library sudah dilampirkan di Repository.

Hasil

Berikut ini gambar hasil yang saya buat.

Video

https://www.youtube.com/watch?v=CLEGnbkHYBc

Repository Download

Hehe gimana? keren-kan, ketimbang beli mahal-mahal gimana kalau kita membuat sendiri nano Keyboardnya.