Tuesday 25 July 2017

Game Dengan Arduino: PONG Bab 4

 Kesimpulan

Berdasarkan pembahasan dan evaluasi dari bab-bab sebelumnya sampai dengan pembuatan game Pong maka dapat diambil kesimpulan seperti berikut ini :
  1. Sistem game Pong dapat diimplementasikan menggunakan Arduino Uno, layar OLED, dan dua joystick. Sistem ini adalah permainan saling berusaha memasukkan bola ke area lawan menggunakan paddle masing-masing player, yang diatur dengan dua joystick.
  2. Sistem game Pong dapat diimplementasikan menggunakan arsitektur FreeRTOS dengan lima task, yaitu draw, readJoystick, drawCentralLine, drawBall, dan drawPlayer. 
  3. Game Pong! ini dapat dimainkan oleh segala usia. Berdasarkan hasil ujicoba dari beberapa user, dapat disimpulkan bahwa game ini mudah digunakan, desaign yang sederhana dan tidak terdapat error jika dijalankan.
  4. Game yang dibuat digunakan sebagai sarana bermain, menghibur dan membantu user sebagai media belajar bagi pemain. 

 Saran

Untuk lebih memahami tentang sebuah aplikasi game diperlukan pemahaman program aplikasi serta efek animasi yang baik. Game dalam aplikasi ini diharapkan dapat lebih bervariasi lagi bentuknya agar user semakin termotivasi dan tidak mudah bosan dalam memainkannya. Untuk membuat sebuah game yang baik diperlukan kemampuan berimajinasi dan kreatifitas yang baik, sedikit banyaknya pembuat game harus memahami logika pemograman.

Game Dengan Arduino: PONG Bab 3

 Komponen-Komponen yang Dibutuhkan

Dalam pembuatan game Pong dengan Arduino, komponen yang pasti dibutuhkan adalah Arduino itu sendiri. Arduino yang digunakan adalah Arduino UNO karena Arduino ini umum digunakan dan mudah untuk didapat. Selain Arduino terdapat beberapa komponen lain yang dibutuhkan agar game ini menarik perhatian pemain yaitu:
  • Arduino TFT
  • breadboard
  • beberapa kabel jumper
  • 2 buah potentiometer sebesar 10 kΩ

3.1.1 Arduino TFT

Arduino TFT merupakan layar LCD TFT dengan slot microSD di belakangnya. Layar ini digunakan untuk menampilkan antar muka Pong. Pin pada Arduino TFT didesain agar muat dengan soket yang ada pada Arduino Esplora dan Arduino Robot, tetapi hal ini tidak menutup kemungkinan untuk digunakan dengan board Arduino lainnya.

Secara default, orientasi layar Arduino TFT adalah horisontal dengan posisi atas layar tepat di bawah tulisan SD CARD. Layar ini berukuran 160px x 128px dan dapat menampilkan warna 16-bit. Channel merah dan biru memiliki resolusi 5-bit, channel hijau memiliki resolusi 6-bit. Sehingga terdapat 32 level untuk merah dan biru dan 64 level untuk hijau. 

3.1.2 Potentiometer

Potentiometer merupakan alat dengan tiga terminal yang digunakan dengan cara memutarnya. Alat ini umum ditemukan pada alat-alat elektronik seperti speaker yang digunakan untuk mengatur volume. Potentiometer termasuk ke dalam alat pasif, yang artinya alat ini dapat beroperasi tanpa power supply. Nilai pada potentiometer digunakan untuk mengontrol tengangan maupun arus listrik.
Pada game ini, nilai yang dihasilkan oleh potentiometer akan digunakan untuk menggerakan paddle milik pemain.

 Proses Pembuatan

Pertama, hubungkan pin power 5V dan pin ground (GND) pada arduino ke breadboard seperti gambar di bawah ini. Agar tidak bingung, gunakan kabel warna merah untuk power dan kabel warna hitam untuk ground.

Gambar 3.3: Skema Power dan Ground
Selanjutnya adalah menghubungkan kedua potentiometer ke breadboard. Hubungkan pin pertama atau terminal terluar milik potentiometer ke jalur power pada breadboard. Lalu hubungkan pin terluar lainnya ke jalur ground pada breadboard. Tersisa pin di tengah yang belum terhubung. Pin ini dihubungkan ke analog input pada Arduino. Melalui pin ini, potentiometer mengirimkan nilai ke pada Arduino. Potentiometer pertama terhubung dengan pin analog A0 dan potentiometer kedua terhubung dengan pin analog A1. Seperti biasa, power dihubungkan dengan kabel berwarna merah, ground dengan kabel berwarna hitam dan untuk menghubungkan pin tengah, gunakan kabel berwarna kuning.

Gambar 3.4: Skema Potentiometer dengan Arduino UNO
Setelah potentiometer terhubung, hubungkan Arduino TFT ke breadboard. Perhatikan baik-baik pin pada Arduino TFT. Header pada sisi layar dengan tab warna biru lah yang terhubung dengan board. Perlu diingat, orientasi layar ini terbalik. Jadi jangan kaget.

Gambar 3.5: Arduino TFT ke Breadboard
Oke, selanjutnya kita perlu menghubungkan Arduino TFT dengan Arduino UNO. Hubungkan pin BL dan +5V ke power. Hubungkan juga pin GND ke ground. Pin LCD-CS dihubungkan ke pin 10, pin DC dihubungkan ke pin 9, pin RESET dihubungkan ke pin 8, pin MOSI dihubungkan ke pin 11, dan terakhir pin SCK dihubungkan ke pin 13. Untuk menghubungkan pin-pin tersebut, gunakan kabel jumper. Untuk pin yang terhubung ke pin digital pada arduino, gunakan kabel warna biru. Kalau masih bingung cara menghubungkannya, lihat gambar di bawah ini ya.

Gambar 3.6: Arduino TFT ke Arduino UNO

 Kode Program Pong

Komponen yang diperlukan sudah terpasang dengan rapi. Sekarang saatnya untuk membuat program. Sebelum menulis kode, pastikan IDE yang digunakan adalah versi terbaru agar library yang digunakan pada game ini dapat diload dengan baik.
Ketikan kode berikut untuk mengimpor library SPI dan TFT. 
#include  
#include 
Library SPI digunakan agar microcontroller pada Arduino UNO dapat berkomunikasi dengan komponen yang terhubung dengan pin SPI (Serial Peripheral Interface). Library TFT digunakan agar kita dapat menggambar sesuai ke layar Arduino TFT.
Lalu definisikan tiga buah konstanta untuk masing-masing pin LCD-CS, DC, dan RESTART dengan nilai sesuai dengan pin yang terhubung. Selanjutnya kita butuh instance dari library TFT untuk mengontrol layar TFT. Instance tersebut diberi nama TFTscreen. Berikut adalah kodenya.
#define cs   10 
#define dc   9 
#define rst  8

TFT TFTscreen = TFT(cs, dc, rst);
Selanjutnya kita butuh variabel untuk posisi x,y milik paddle dan bola, arah bola dan posisi terakhir bola dan juga paddle. Seluruh variabel ini memiliki tipe integer.
int paddleX = 0; 
int paddleY = 0; 
int oldPaddleX, oldPaddleY; 
int ballDirectionX = 1; 
int ballDirectionY = 1;
int ballX, ballY, oldBallX, oldBallY;
Sekarang, kita inisiasi layar TFT lalu menghapus background layar di dalam function setup(). Berikut adalah kodenya.
void setup() {   
 TFTscreen.begin();   
 TFTscreen.background(0,0,0);  
}
Dapat dilihat pada kode di atas, untuk menghapus background layar cukup menset background layar menjadi hitam melalui function background(). Argumen pada function tersebut adalah nilai masing-masing channel RGB.
Selanjutnya, kita perlu menyimpan nilai tinggi dan lebar layar. Kemudian, kita harus membaca nilai dari potentiometer sebelum proses mapping untuk menggunakan range nilainya. Berikut adalah kodenya.
void loop() {   
 int myWidth = TFTscreen.width();   
 int myHeight = TFTscreen.height();
 paddleX = map(analogRead(A0), 0, 1023, 
	0, myWidth) - 20/2;    
 paddleY = map(analogRead(A1), 0, 1023, 
	0, myHeight) - 5/2;
Nilai tinggi dan lebar layar didapatkan dari function width() dan height() yang diakses dari objek TFTscreen. Lalu untuk membaca nilai dari potentiometer, gunakan function analogRead() dengan argumen pin analog pada Arduino yang terhubung dengan potentiometer. Setelah membaca nilai dari potentiometer, proses mapping dilakukan menggunakan function map(). Function ini digunakan untuk mengatur suatu nilai dari suatu range ke range lain. Nilai rendah potentiometer pertama yang terhubung ke pin A0 sebesar 0 akan dimap ke nilai terendah yaitu 0 dan nilai tertingginya yaitu sebesar 1023 akan dimap ke nilai lebar layar. Hal yang serupa juga dilakukan untuk potentiometer yang terhubung dengan pin A1, hanya saja nilai tertinggi pada potentiometer ini dimap ke nilai tinggi layar.
Setelah proses mapping, nilai hasil mapping potentiometer A0 dikurangi dengan 20/2 dan disimpan ke dalam variabel paddleX. Nilai hasil mapping potentiometer A1 dikurangi dengan 5/2 dan disimpan ke variabel paddleY.
Ok, selanjutnya adalah menghapus lokasi terakhir paddle jika ada pergerakan. Berikut adalah kodenya.
TFTscreen.fill(0,0,0);
 if (oldPaddleX != paddleX || 
	oldPaddleY != paddleY) {     
	TFTscreen.rect(oldPaddleX, 
	oldPaddleY, 20, 5);   
 }
Untuk menghapus lokasi terakhir paddle, cukup membuat persegi panjang dengan warna hitam. Pada kode di atas, function fill() digunakan untuk memberi warna pada objek yang akan digambar. Function ini memiliki argumen yang sama dengan function background. Setelah mengatur warna, program akan mencek apalah nilai oldPaddleX tidak sama dengan nilai paddleX atau nilai oldPaddleY tidak sama dengan nilai paddleY. Jika benar, berarti ada pergerakan paddle. Maka, program akan membuat persegi di koordinat oldPaddleX dan oldPaddleY sebesar 20 x 5.
Untuk menggambar paddlenya dengan warna putih, tuliskan kode berikut.
TFTscreen.fill(255,255,255);
TFTscreen.rect(paddleX, paddleY, 20, 5);
Lalu kita perlu menyimpan posisi paddle saat ini menjadi posisi sebelumnya. Hal ini dilakukan agar kita dapat melakukan pengecekan apakah paddle bergerak atau tidak. Masih ingat kode untuk mengecek pergerakan paddle? Ya, paddle dianggap bergerak jika posisi terakhir paddle tidak sama dengan posisi paddle sekarang. Berikut adalah kodenya.
oldPaddleX = paddleX;
oldPaddleY = paddleY;
Terakhir, kita akan menggunakan nilai dari variabel ballSpeed untuk menentukan seberapa cepat layar melakukan perubahan. Kode di bawah ini ditulis pada akhir function loop().
 if (millis() % ballSpeed < 2) {   
	moveBall();   
 } 
}
Kode di atas digunakan untuk mencek apakah millisec modulo nilai ballSpeed lebih kecil dari 2. Jika iya, program akan menjalankan function buatan kita yaitu moveBall() untuk menggerakkan bola.
Function moveBall() akan mengubah posisi bola dengan cara seperti mengubah posisi paddle, yaitu menggambar persegi panjang warna hitam pada posisi sebelumnya dan menggambar persegi panjang warna putih pada posisi yang baru. Function ini juga akan memastikan bola tidak keluar dari layar jika bola menyentuh sisi layar. Berikut adalah kodenya. Ingat, tulis kode ini di luar function loop() ya.
void moveBall() {   
 if (ballX > TFTscreen.width() || 
	ballX < 0) {
	ballDirectionX = -ballDirectionX;
 }   
 if (ballY > TFTscreen.height() || 
	ballY < 0) {
	ballDirectionY = -ballDirectionY;
 }
 if (inPaddle(ballX, ballY, paddleX, 
	paddleY, 20, 5)) {
	ballDirectionY = -ballDirectionY;
 }

 ballX += ballDirectionX;
 ballY += ballDirectionY;

 TFTscreen.fill(0,0,0);
 if (oldBallX != ballX || 
	oldBallY != ballY) {
	TFTscreen.rect(oldBallX, oldBallY, 
		5, 5);
 }

 TFTscreen.fill(255,255,255);
 TFTscreen.rect(ballX, ballY, 5, 5);
 oldBallX = ballX;   oldBallY = ballY; 
}
Pada function tersebut, if pertama dan kedua digunakan agar bola tidak keluar dari sisi layar lalu arah bola dibuat negatif untuk menandakan bola bergerak ke arah datang. Pada if ketiga, terdapat function baru yaitu inPaddle(). Function ini kita gunakan untuk mencek apakah bola menyentuh paddle. Jika menyentuh paddle, arah bola terhadap sumbu Y diubah menjadi berlawanan.
Setelah melakukan pengecekan, masing-masing variabel yang menyimpan koordinat X dan Y milik bola ditambah dengan nilai dari variabel ballDirection masing-masing sumbu. Lalu, kita hapus bola pada posisi sebelumnya dengan cara yang sama seperti menghapus paddle. Setelah kita hapus bola tersebut, ktia gambar bola dengan warna putih pada posisi yang baru. Terakhir, jangan lupa untuk menyimpan koordinat posisi bola saat ini ke variabel oldBall masing-masing sumbu. Variabel ini digunakan untuk mencek ada atau tidak pergerakan bola.
Kode terakhir adalah function inPaddle(). Function ini memiliki 6 buah argumen. Berikut adalah kodenya.
boolean inPaddle(int x, int y, 
  int rectX, int rectY, 
  int rectWidth, int rectHeight) {

  boolean result = false;
  if ((x >= rectX && x <= 
	 (rectX + rectWidth)) &&
     (y >= rectY && y <= 
	 (rectY + rectHeight))) {
	
		result = true; 
  }

  return result;   

}
Function inPaddle() akan mencek posisi bola dan paddle. Jika posisi mereka sama, maka function akan memberikan nilai true dan mengubah arah bola pada function moveBall().
Itu adalah keseluruhan kode untuk membuat game Pong sederhana. Di bawah ini adalah bentuk utuh dari programnya.
/*
 TFT Pong
 
This example for the Arduino screen reads 
the values  of 2 potentiometers to move a 
rectangular platform  on the x and y axes. 
The platform can intersect  with a 
ball causing it to bounce.

This example code is in the public domain.
Created by Tom Igoe December 2012  
Modified 15 April 2013 by Scott Fitzgerald

 
http://www.arduino.cc/en/Tutorial/TFTPong
*/


#include  
#include 

#define cs   10 
#define dc   9 
#define rst  8

TFT TFTscreen = TFT(cs, dc, rst);

int paddleX = 0; 
int paddleY = 0; 
int oldPaddleX, oldPaddleY; 
int ballDirectionX = 1; 
int ballDirectionY = 1;
int ballX, ballY, oldBallX, oldBallY;

void setup() {   
 TFTscreen.begin();   
 TFTscreen.background(0,0,0);  
}

void loop() {   
 int myWidth = TFTscreen.width();   
 int myHeight = TFTscreen.height();
 paddleX = map(analogRead(A0), 0, 1023, 
	0, myWidth) - 20/2;    
 paddleY = map(analogRead(A1), 0, 1023, 
	0, myHeight) - 5/2;

 TFTscreen.fill(0,0,0);
 if (oldPaddleX != paddleX || 
	oldPaddleY != paddleY) {     
	TFTscreen.rect(oldPaddleX, 
	oldPaddleY, 20, 5);   
 }

 TFTscreen.fill(255,255,255);
 TFTscreen.rect(paddleX, paddleY, 20, 5);

 oldPaddleX = paddleX;
 oldPaddleY = paddleY;

 if (millis() % ballSpeed < 2) {   
	moveBall();   
 } 
}

void moveBall() {   
 if (ballX > TFTscreen.width() || 
	ballX < 0) {
	ballDirectionX = -ballDirectionX;
 }   
 if (ballY > TFTscreen.height() || 
	ballY < 0) {
	ballDirectionY = -ballDirectionY;
 }
 if (inPaddle(ballX, ballY, paddleX, 
	paddleY, 20, 5)) {
	ballDirectionY = -ballDirectionY;
 }

 ballX += ballDirectionX;
 ballY += ballDirectionY;

 TFTscreen.fill(0,0,0);
 if (oldBallX != ballX || 
	oldBallY != ballY) {
	TFTscreen.rect(oldBallX, oldBallY, 
		5, 5);
 }

 TFTscreen.fill(255,255,255);
 TFTscreen.rect(ballX, ballY, 5, 5);
 oldBallX = ballX;   oldBallY = ballY; 
}

boolean inPaddle(int x, int y, 
  int rectX, int rectY, 
  int rectWidth, int rectHeight) {

  boolean result = false;
  if ((x >= rectX && x <= 
	 (rectX + rectWidth)) &&
     (y >= rectY && y <= 
	 (rectY + rectHeight))) {
	
		result = true; 
  }

  return result;   

}

Game Dengan Arduino: PONG Bab 2

 Pong

Pong adalah permainan video generasi pertama yang dirilis sebagai permainan arkade yang dioperasikan dengan koin yang dikembangkan oleh Atari Inc. pada tanggal 29 November, 1972. Pong adalah permainan video olahraga dua dimensi yang mensimulasikan sebuah permainan tenis meja. Sistem ini adalah permainan saling berusaha memasukkan bola ke area lawan menggunakan paddle masing-masing player, yang diatur dengan dua joystick. Permainan ini dapat dimainkan dengan dua orang. Untuk memenangkan permainan, sang pemain harus memukul bola tersebut sampai sang lawan tidak bisa memukul bola tersebut. 
Pong merupakan salah satu permainan arkade perrtama yang dirilis secara komersial. Permainan ini meraih keuntungan empat kali lebih banyak dibanding mesin yang dikendalikan dengan koin lainnya. Keuntungan ini yang membuat Atari menerima banyak pesanan Pong dan memberikan pemasukan yang cukup besar untuk Atari. Pada tahun 1973, Atari memenuhi 2.500 order dan pada tahun 1974, Atari menjual mesin Pong sebanyak 8.000 unit.
Karena kesuksesan ini, pada tahun 1977, Atari merilis Home Pong, yaitu versi Pong yang dapat dihubungkan dengan televisi. Home Pong pun sukses menggebrak pasar. Sekitar 150.000 unit terjual pada musim liburan. Hingga saat ini, Pong menjadi game yang sangat legendaris.

 Objek pada Pong

Pong hanya memiliki 3 buah objek sederhana berbentuk persegi panjang. Dua persegi panjang digunakan sebagai alat pemukul (paddle) milik masing-masing pemain. Satu persegi panjang lainnya digunakan sebagai bola yang harus masuk ke area lawan.
Tiap pemain diberikan paddle untuk menangkis bola yang datang. Paddle tersebut berbentuk persegi panjang pipih dengan panjang yang tidak melebihi area permainan dan cukup kecil agar bola tetap dapat melewati paddle jika pemain tidak dapat menangkisnya. Paddle ini hanya dapat bergerak ke arah kiri dan kanan pemain.
Bola pada Pong dibuat kecil agar pemain sulit untuk menangkisnya. Bola ini dapat bergerak ke 9 arah mata angin. Saat bola menabrak paddle, bola tersebut memantul ke arah bersebrangan menuju pemain lain.

 Gameplay Pong

Tujuan dari game ini tidak jauh berbeda dari tenis meja. Pemain harus menjatuhkan bola di posisi lawan. Hanya saja pada Pong, pemain harus membuat bola masuk ke area belakang lawan. Saat permainan dimulai, bola akan bergerak ke salah satu pemain. Lalu pemain harus menangkisnya dengan paddle agar bola tidak masuk ke areanya. Setelah bola mengenai paddle pemain, bola tersebut memantul dan meuju pemain lain. Jika pemain dapat memasukan bola ke area belakang lawan, pemain tersebut mendapat poin.

 Gamification

2.4.1 Pengertian Gamification

Gamification atau dalam bahasa Indonesia gamifikasi adalah penggunaan dari teknik desain permainan, permainan berpikir dan permainan mekanik untuk meningkatkan non-game konteks.
Biasanya gamifikasi berlaku untuk non-game aplikasi dan proses, untuk mendorong orang untuk mengadopsi mereka, atau untuk mempengaruhi bagaimana mereka digunakan. Gamification menggunakan mekanisme berbasis game, estetika and pemikiran game untuk mengaktifkan orang, memotivasi tindakan, mendorong pembelajaran, dan memecahkan masalah.

2.4.2 Elemen Gamification

Ada beberapa elemen dari pengertian gamification yang perlu diperhatikan :
  1. Berbasis game = bertujuan menciptakan suatu sistem dimana pembelajar, pemain, konsumen, dan karyawan aktif menghadapi tantangan yang didefinisikan melalui aturan-aturan, interaktifitas, dan feedback yang menghasilkan suatu penilaian yang terukur dan mendorong reaksi emosional.
  2. Mekanisme = mekanisme memainkan game yang dimaksud di sini adalah munculnya level, mendapatkan lencana, sistem poin, dan batasan waktu. Inilah elemen-elemen yang digunakan dalam game.
  3. Estetika = Tanpa grafis yang interaktif dan pengalaman permainan yang dirancang secara baik, maka gamification tidak akan sukses.
  4. Pemikiran game = Ini elemen terpenting dari gamification. Ini merupakan gagasan merubah pengalaman sehari-hari seperti jogging atau berlari menjadi suatu kegiatan yang memiliki elemen-elemen kompetisi,kerja sama, eksplorasi dan bercerita (story-telling).
  5. Aktif = Tujuan eksplisit gamification adalah menarik perhatian pembelajar dan melibatkannya. Keterlibatan dan keaktifan seorang individu menjadi fokus utama gamification. 
  6. Orang = dapat berupa pembelajar, konsumen atau pemain.
  7. Memotivasi tindakan = membangkitkan energi dan memberikan arah, tujuan, atau makna bagi perilaku dan tindakan.
  8. Mendorong pembelajaran = hal ini berjalan karena banyak elemen gamification berdasarkan psikologi pendidikan.
  9. Memecahkan masalah = gamification dapat berpotensi tinggi menolong memecahkan masalah.

2.4.3 Perbedaan Gamification dan Game

  • Game merupakan suatu unit yang utuh.
  • Game memiliki kegiatan awal, pertengahan, dan akhir yang jelas sebagai satu keutuhan.
  • Game memiliki suatu kondisi dimana harus ada kemenangan yang jelas.
  • Pemain tahu ketika orang lain dan dirinya telah menyelesaikan Game.
  • Game memiliki elemen game yang banyak.
  • Game memuat mekanisme untuk berapa kali usaha yang dimainkan; tantangan; reward system.
  • Gamification bukanlah satu unit game yang utuh.
  • Gamification bertujuan menggunakan elemen game untuk mendorong pembelajar sibuk dengan isi materinya dan menunjukkan kemajuannya untuk mencapai tujuan pembelajaran.

2.4.4 Jenis Gamification

  • Structural Gamification
Menerapkan elemen game untuk mendorong pembelajar menyimak konten materi dengan tanpa merubah konten materi menjadi terlihat seperti game namun struktur di sekeliling konten itulah yang tampak seperti game.
Tujuan utama tipe ini adalah untuk memotivasi pembelajar menyimak isi materi dan menyibukkan diri dengan materinya dalam proses pembelajaran yang terlihat tidak seperti game namun sambil meraih berbagai reward. Elemen game yang paling umum pada tipe ini adalah badge, points, leaderboards, dan level. Contoh: adanya penugasan mengumpulkan jenis-jenis bunga dan akan mendapatkan badge.
  • Content Gamification
Menerapkan elemen game dan pemikiran game dalam isi materi sehingga isi materi berubah terlihat seperti game. Contoh: menambah elemen cerita dalam pengajaran suatu materi atau memulai suatu pengajaran dengan suatu tantangan alih-alih menyampaikan sederet tujuan mata kuliah.
Elemen dalam Content Gamification :
  1. Cerita
  2. Tantangan
  3. Keingintahuan
  4. Karakter
  5. Interaktifitas
  6. Feedback
  7. Bebas untuk gagal (it’s OK to fail)

2.4.5 Kelebihan

Gamifikasi bekerja dengan membuat teknologi yang lebih menarik,dengan mendorong pengguna untuk terlibat dalam perilaku yang diinginkan, dengan menunjukkan jalan untuk penguasaan dan otonomi, dengan membantu untuk memecahkan masalah dan tidak menjadi gangguan, dan dengan mengambil keuntungan dari kecenderungan psikologis manusia 'untuk terlibat dalam game'.

2.4.6 Kekurangan

  1. Motivasi yang didapatkan hanya bersifat superfisial. Motivasi yang didapatkan hanya dari permainan bukan dari produk yang seharusnya dihasilkan. Program seperti frequent flyer milesmenyediakan beberapa manfaat nyata bagi aktivitas dan perkembangan. Namun gamifikasi akan menurunkan nilai insentif yang didapat karena hal ini hanya dijadikan perayaan digital atau cara untuk menyombongkan diri.
  2. Terkadang metode untuk mencapai tingkatan tertinggi menjadi satu-satunya aspek yang dianggap penting. Hal ini menjadi masalah akibat kesalahan arah motivasional. Pengguna menetapkan motivasi mereka hanya untuk menjadi yang terbaik namun melupakan apa yang sebenarnya menjadi penawaran dari situs yang dimaksud. hal ini mungkin terlihat tidak relevan bagi perusahaan karena pengguna terus menghabiskan waktu mereka namun tidak terbentuk loyalitas dan ikatan terhadap brand seperti yang diharapkan perusahaan.
  3. Gamifikasi menghilangkan banyak esensi dari permainan itu sendiri. Ini menjadi seperti teknologi cut and paste dan kurangnya orisinilitas. Permainan adalah tentang menemukan seustu dan melewati rintangan. Memang pada situs yang menggunakan gamifikasi terdapat beberapa tingkatan namun bukan layaknya permainan tradisional. Dimana pengembang situs justru menampilkan fitur mudah, biasa, dan membosankan sehingga diharapkan pengguna akan lebih mudah untuk menang.
  4. Gamifikasi dangkal dapat menghasilkan pengalaman yang biasa saja dan memiiki nilai rendah terhadap ROI (Return of Investment; pengambalian modal) sehingga terkadang gamifikasi tidak menjual dan justru menjatuhkan nilai situs.

2.4.7 Gamification Game Pong

Pong menuntut pemain untuk mendapatkan poin lebih banyak dari lawannya dengan memasukan bola ke area lawan. Pemain pun dibuat sulit untuk menjaga areanya dengan cara membuat paddle tidak terlalu besar, sehingga bola dapat dengan mudah melewati paddle jika pemain lengah. Pong juga dimainkan oleh dua orang agar jiwa kompetitif pemain meningkat karena dia melawan manusia bukan melawan melawan NPC atau AI. Hal seperti itu dilakukan agar pemain terus bermain Pong dan membujuk mereka untuk menang melawan pemain lain.

 Arduino

Arduino adalah pengendali mikro single-board yang bersifat open-source, diturunkan dari Wiring platform, dirancang untuk memudahkan penggunaan elektronik dalam berbagai bidang. Hardwarenya memiliki prosesor Atmel AVR dan softwarenya memiliki bahasa pemrograman sendiri.
Arduino juga merupakan platform hardware terbuka yang ditujukan kepada siapa saja yang ingin membuat purwarupa peralatan elektronik interaktif berdasarkan hardware dan software yang fleksibel dan mudah digunakan. Mikrokontroler diprogram menggunakan bahasa pemrograman arduino yang memiliki kemiripan syntax dengan bahasa pemrograman C. Karena sifatnya yang terbuka maka siapa saja dapat mengunduh skema hardware arduino dan membangunnya.
Arduino menggunakan keluarga mikrokontroler AT Mega yang dirilis oleh Atmel sebagai basis, namun ada individu/perusahaan yang membuat clone arduino dengan menggunakan mikrokontroler lain dan tetap kompatibel dengan arduino pada level hardware. Untuk fleksibilitas, program dimasukkan melalui bootloader meskipun ada opsi untuk membypass bootloader dan menggunakan downloader untuk memprogram mikrokontroler secara langsung melalui port ISP.

 Sejarah Arduino

Semuanya berawal dari sebuah thesis yang dibuat oleh Hernando Barragan, di institute Ivrea, Italia pada tahun 2005, dikembangkan oleh Massimo Banzi dan David Cuartielles dan diberi nama Arduin of Ivrea. Lalu diganti nama menjadi Arduino yang dalam bahasa Italia berarti teman yang berani.
Tujuan awal dibuat Arduino adalah untuk membuat perangkat mudah dan murah, dari perangkat yang ada saat itu. Dan perangkat tersebut ditujukan untuk para siswa yang akan membuat perangkat desain dan interaksi.
Sifat Arduino yang Open Source, membuat Arduino berkembang sangat cepat. Dan banyak lahir perangkat-perangkat sejenis Arduino. Seperti DFRDuino atau Freeduino, dan kalau yang lokal ada namanya CipaDuino yang dibuat oleh SKIR70, terus ada MurmerDuino yang dibuat oleh Robot Unyil, ada lagi AViShaDuino yang salah satu pembuatnya adalah Admin Kelas Robot.
Sampai saat ini pihak resmi, sudah membuat berbagai jenis-jenis Arduino. Mulai dari yang paling mudah dicari dan paling banyak digunakan, yaitu Arduino Uno. Hingga Arduino yang sudah menggunakan ARM Cortex, beebentuk Mini PC. Dan sudah ada ratusan ribu Arduino yang digunakan di gunakan di dunia pada tahun 2011. Dan untuk hari ini, yang bisa kamu hitung sendiri ya. Dan Arduino juga sudah banyak dipaka oleh perusahaan besar. Contohnya Google menggunakan Arduino untuk Accessory Development Kit, NASA memakai Arduino untuk prototypin, ada lagi Large Hadron Colider memakai Arduino dalam beberapa hal untuk pengumpulan data.

 Macam - Macam Arduino

Arduino memiliki beberapa macam atau tipe sesuai dengan fiturnya masing-masing yang dapat dimanfaatkan sesuai kebutuhan dalam pembuatan sebuah alat atau robot. Berikut beberapa macam dari Arduino dengan fitur yang dimilikinya :

2.7.1 Arduino USB

Arduino USB, yaitu mikrokontroler Arduino dengan menggunakan USB sebagai antar muka pemrograman atau komunikasi komputer. Terdapat beberapa macam pada Arduino USB sebagai berikut :

2.7.1.1 Arduino UNO

Arduino Uno adalah papan mikrokontroler berdasarkan ATmega328 (datasheet). Ini memiliki 14 digital pin input / output (dimana 6 dapat digunakan sebagai output PWM), 6 input analog, resonator keramik 16 MHz, koneksi USB, jack listrik, header ICSP, dan tombol reset. Ini berisi semua yang diperlukan untuk mendukung mikrokontroler, hanya menghubungkannya ke komputer dengan kabel USB atau power itu dengan adaptor AC-DC atau baterai untuk memulai menggunakannya.
Uno berbeda dari semua papan sebelumnya di bahwa itu tidak menggunakan chip driver FTDI USB-to-serial. Sebaliknya, fitur Atmega16U2 (Atmega8U2 sampai versi R2) diprogram sebagai konverter USB-to-serial.
Revisi ke 2 Uno memiliki resistor menarik garis 8U2 HWB line to ground, sehingga lebih mudah untuk dimasukkan ke dalam mode DFU.
Revisi ke 3 memiliki fitur-fitur baru berikut :
  • 1,0 pinout: menambahkan SDA dan pin SCL yang dekat dengan pin AREF dan dua pin baru lainnya ditempatkan dekat dengan pin RESET, yang IOREF yang memungkinkan perisai untuk beradaptasi dengan tegangan yang tersedia dari papan. Di masa depan, perisai akan kompatibel dengan kedua papan yang menggunakan AVR yang beroperasi dengan 5V dan dengan Arduino Due yang beroperasi dengan 3.3V. Yang kedua adalah pin tidak terhubung, yang disediakan untuk tujuan masa depan. 
  • Stronger RESET sirkuit.
  • Atmega 16U2 menggantikan 8U2.
Kata "Uno" berarti satu di Italia dan diberi nama untuk menandai peluncuran Arduino 1.0. Arduino Uno dan versi 1.0 akan menjadi versi referensi Arduino, bergerak maju. Arduino Uno adalah yang terbaru dalam serangkaian USB Arduino papan, dan model referensi untuk platform Arduino, untuk perbandingan dengan versi sebelumnya, lihat indeks Arduino papan.

2.7.1.2 Arduino Duemilanove

Arduino Arduino Duemilanovemilanove adalah papan mikrokontroler berdasarkan Atmel SAM3X8E ARM-Cortex-M3 CPU. Ini adalah pertama papan Arduino didasarkan pada 32-bit mikrokontroler ARM inti. Ini memiliki 54 digital pin input / output (yang 12 dapat digunakan sebagai output PWM), 12 analog input, 4 UART (hardware port serial), jam 84 MHz, USB OTG koneksi yang mampu, 2 DAC (digital ke analog) , 2 TWI, jack listrik, header SPI, header JTAG, tombol reset dan tombol hapus. 
Peringatan: Tidak seperti papan Arduino lainnya, Arduino Duemilanove berjalan pada 3.3V. Tegangan maksimum yang I / O pin dapat mentolerir adalah 3.3V. Memberikan tegangan yang lebih tinggi, seperti 5V ke I / O pin dapat merusak papan.
Arduino Duemilanove berisi semua yang diperlukan untuk mendukung mikrokontroler, hanya menghubungkannya ke komputer dengan kabel micro-USB atau power dengan adaptor AC-DC atau baterai untuk memulainya. Arduino Duemilanove kompatibel dengan semua perisai Arduino yang bekerja di 3.3V dan telah sesuai dengan 1,0 Arduino pinout. Arduino Duemilanove mengikuti 1.0 pinout :
  • TWI: SDA dan SCL pin yang dekat dengan pin AREF.
  • Arduino IOREF pin yang memungkinkan perisai terpasang dengan konfigurasi yang tepat untuk beradaptasi dengan tegangan yang diberikan oleh Arduino.
Hal ini memungkinkan kompatibilitas perisai dengan papan 3.3V seperti papan Karena dan AVR berbasis yang beroperasi pada 5V. Arduino Duemilanove memiliki forum khusus untuk membahas papan.
Arduino Duemilanove memiliki inti ARM 32-bit yang dapat mengalahkan papan mikrokontroler 8-bit yang khas. Perbedaan yang paling signifikan adalah :
  • 32-bit inti, yang memungkinkan operasi pada 4 byte data luas dalam jam CPU tunggal. (untuk informasi lebih lanjut lihat int jenis halaman). 
  • Kecepatan CPU di 84Mhz.
  • 96 KByte SRAM.
  • 512 KByte memori Flash untuk kode.
  • DMA controller, yang dapat meringankan CPU dari melakukan tugas-tugas intensif memori.

2.7.1.3 Arduino Leonardo

Arduino Leonardo adalah papan mikrokontroler berdasarkan AT mega32u4. memiliki 20 digital pin input / output (yang 7 dapat digunakan sebagai output PWM dan 12 input analog sebagai), osilator kristal 16 MHz, koneksi micro USB, jack listrik, header ICSP, dan tombol reset. Berisi semua yang diperlukan untuk mendukung mikrokontroler, hanya menghubungkannya ke komputer dengan kabel USB atau power dengan adaptor AC-DC atau baterai untuk memulai menggunakkannya.
Leonardo berbeda dari semua papan sebelumnya di bahwa ATmega32u4 telah built-in USB komunikasi, menghilangkan kebutuhan untuk prosesor sekunder. Hal ini memungkinkan Leonardo tampil sebagai komputer yang terhubung sebagai mouse dan keyboard, selain virtual (CDC) serial / COM port. Ini juga memiliki implikasi lain untuk perilaku modul.

2.7.1.4 Arduino Mega 2560

Arduino mega 2560 adalah papan mikrokontroler ATmega 2560 berdasarkan (datasheet) memiliki 54 digital pin input / output (dimana 15 dapat digunakan sebagai output PWM), 16 analog input, 4 UART (hardware port serial), osilator kristal 16 MHz, koneksi USB, jack listrik, header ICSP, dan tombol reset. Ini berisi semua yang diperlukan untuk mendukung mikrokontroler,hanya menghubungkannya ke komputer dengan kabel USB atau power dengan adaptor AC-DC atau baterai. Arduino Mega kompatibel dengan sebagian besar shield,dirancang untuk Arduino Duemilanove atau Diecimila.
Arduino Mega2560 berbeda dari semua board sebelumnya ,tidak menggunakan chip driver FTDI USB-to-serial. Sebaliknya, fitur ATmega16U2 (ATmega8U2 dalam revisi 1 dan revisi 2 papan) diprogram sebagai konverter USB-to-serial.
Revisi 2 dewan Mega2560 memiliki resistor menarik garis 8U2 HWB ke tanah, sehingga lebih mudah untuk dimasukkan ke dalam mode DFU.
Revisi 3 dari dewan memiliki fitur-fitur baru berikut :
  • 1,0 pinout: menambahkan SDA dan pin SCL yang dekat dengan pin AREF dan dua pin baru lainnya ditempatkan dekat dengan pin RESET, yang IOREF yang memungkinkan perisai untuk beradaptasi dengan tegangan yang tersedia dari papan. Di masa depan, perisai akan kompatibel baik dengan dewan yang menggunakan AVR yang beroperasi dengan 5V dan dengan Arduino Due yang beroperasi dengan 3.3V. Yang kedua adalah pin tidak terhubung, yang disediakan untuk tujuan masa depan. 
  • Stronger RESET sirkuit. 
  • Atmega 16U2 menggantikan 8U2.

2.7.1.5 Arduino Intel Galileo

Galileo adalah papan mikrokontroler berdasarkan Intel ® Quark SoC X1000 Application Processor, 32-bit sistem Pentium-kelas Intel pada sebuah chip (datasheet). Ini adalah board pertama berdasarkan arsitektur Intel ® dirancang untuk menjadi hardware dan software pin-kompatibel dengan perisai Arduino dirancang untuk Uno R3. Digital pin 0-13 (dan AREF berdekatan dan pin GND), Analog input 0 sampai 5, header listrik, ICSP header, dan pin port UART (0 dan 1), semua di lokasi yang sama seperti pada Arduino Uno R3. Hal ini juga dikenal sebagai Arduino 1.0 pinout.
Galileo dirancang untuk mendukung shield yang beroperasi di kedua tegangan 3.3V atau 5V. Tegangan operasi inti Galileo adalah 3.3V. Namun, jumper di board memungkinkan terjemahan tegangan 5V di pin I / O. Hal ini memberikan dukungan untuk 5V shield Uno dan perilaku default. Dengan beralih posisi jumper, terjemahan tegangan dapat dinonaktifkan untuk menyediakan operasi 3.3V di pin I / O.
Tentu saja, board Galileo juga perangkat lunak yang cocok dengan Arduino Software Development Environment (IDE), yang membuat kegunaan dan pengenalan snap. Selain hardware Arduino dan kompatibilitas software, arduino.
Galileo memiliki beberapa industri PC standar I / O port dan fitur untuk memperluas penggunaan asli dan kemampuan luar ekosistem perisai Arduino. Sebuah ukuran penuh Slot mini-PCI Express, pelabuhan 100Mb Ethernet, slot Micro-SD, RS-232 port serial, port host USB, port USB Client, dan 8MByte NOR Flash.

2.7.1.6 Arduino Pro Micro AT

Arduino Mikro adalah board mikrokontroler berdasarkan ATmega32u4 (lihat datasheet), yang dikembangkan bersama dengan Adafruit. Ini memiliki 20 digital pin input / output (yang 7 dapat digunakan sebagai output PWM dan 12 input analog sebagai), osilator 16 MHz kristal, koneksi USB mikro, header ICSP, dan tombol reset. Ini berisi semua yang diperlukan untuk mendukung mikrokontroler, hanya menghubungkannya ke komputer dengan kabel USB mikro untuk memulainya. Dengan memiliki faktor bentuk yang memungkinkannya untuk dapat dengan mudah ditempatkan pada papan tempat memotong roti.
Arduino Micro mirip dengan Arduino Leonardo in bahwa ATmega32u4 telah built-in USB komunikasi, dengan menghilangkan kebutuhan untuk prosesor sekunder. Hal ini memungkinkan Micro muncul ke komputer yang terhubung sebagai mouse dan keyboard, selain virtual (CDC) serial / COM port. Ini juga memiliki implikasi lain untuk pemanfaatan board.

2.7.1.7 Arduino Nano R3

Arduino Nano R3 adalah sebuah papan kecil, lengkap, dan ramah-papan tempat memotong roti berdasarkan ATmega328 (Arduino Nano 3.x) atau ATmega168 (Arduino Nano 2.x). Ini memiliki lebih atau kurang fungsi yang sama dari Arduino Duemilanove, tetapi dalam paket yang berbeda. Ini tidak memiliki hanya colokan listrik DC, dan bekerja dengan kabel USB Mini-B bukan satu standar. Arduino Nano dirancang dan diproduksi oleh Gravitech.

2.7.1.8 Arduino Mini Atmega

Arduino ProMini ditujukan untuk pengguna tingkat lanjut yang membutuhkan fleksibilitas, biaya rendah, dan ukuran kecil. Muncul dengan minimum komponen (tidak ada on-board USB atau pin header) untuk menjaga biaya turun. Ini adalah pilihan yang baik untuk papan Anda ingin meninggalkan board tertanam dalam proyek. Harap dicatat bahwa ada dua versi dari board: satu yang beroperasi pada 5V (seperti kebanyakan papan Arduino), dan salah satu yang beroperasi pada 3.3V. Pastikan untuk memberikan yang benar daya dan penggunaan komponen yang operasi tegangan cocok dengan board.

2.7.1.9 Arduino Mega ADK

Arduino MEGA ADK adalah board mikrokontroler AT mega 2560 berdasarkan (datasheet). Memiliki antarmuka USB untuk terhubung dengan ponsel berbasis Android, berdasarkan MAX3421e IC. Ini memiliki 54 digital pin input / output (dimana 15 dapat digunakan sebagai output PWM), 16 analog input, 4 UART (hardware port serial), osilator kristal 16 MHz, koneksi USB, jack listrik, header ICSP, dan tombol reset. 
Arduino MEGA ADK berdasarkan Mega 2560.Mirip dengan Mega 2560 dan Uno, hotel ini memiliki sebuah ATmega8U2 diprogram sebagai konverter USB-to-serial. Revisi ke 2 dari board ADK memiliki resistor menarik garis 8U2 HWB ke tanah, sehingga lebih mudah untuk dimasukkan ke dalam mode DFU. Revisi 3 dari dewan memiliki fitur-fitur baru berikut :
  • 1,0 pinout: menambahkan SDA dan pin SCL yang dekat dengan pin AREF dan dua pin baru lainnya ditempatkan dekat dengan pin RESET, yang IOREF yang memungkinkan perisai untuk beradaptasi dengan tegangan yang tersedia dari papan. Di masa depan, shield akan kompatibel baik dengan arduino yang menggunakan AVR yang beroperasi dengan 5V dan dengan Arduino Due yang beroperasi dengan 3.3V. Yang kedua adalah pin tidak terhubung, yang disediakan untuk tujuan pengembangan.

2.7.1.10 Arduino Esplora

Arduino Esplora adalah papan mikrokontroler berasal dari Arduino Leonardo. Esplora berbeda dari semua papan Arduino sebelumnya dalam hal ini menyediakan sejumlah built-in, siap digunakan set sensor onboard untuk interaksi. Ini dirancang untuk orang yang ingin bangun dan berjalan dengan Arduino tanpa harus belajar tentang elektronik dari pertama. Untuk langkah-demi-langkah pengantar Esplora, memeriksa Memulai dengan Esplora panduan.
Esplora onboard suara dan cahaya output, dan beberapa sensor input, termasuk joystick, slider, sensor suhu, accelerometer, mikrofon, dan sensor cahaya. Hal ini juga memiliki potensi untuk memperluas kemampuan dengan dua input dan output konektor Tinkerkit, dan soket untuk layar LCD warna TFT.
Seperti papan Leonardo, yang Esplora menggunakan mikrokontroler AVR Atmega32U4 dengan 16 MHz osilator kristal dan koneksi USB mikro mampu bertindak sebagai perangkat USB klien, seperti mouse atau keyboard. 
Di sudut kiri atas papan ada tombol tekan reset, yang dapat Anda gunakan untuk me-restart board arduino. Ada empat LED Status :
  • Pada [Hijau] menunjukkan apakah board menerima catu daya.
  • L [yellow] terhubung langsung ke mikrokontroler, dapat diakses melalui pin 13.
  • RX Dan TX [kuning] menunjukkan data yang dikirim atau diterima melalui komunikasi USB Dewan berisi semua yang diperlukan untuk mendukung mikrokontroler, hanya menghubungkannya ke komputer dengan kabel USB untuk memulainya.

2.7.2 Arduino Tipe Serial

Arduino Serial, yaitu jenis mikrokontroler arduino yang menggunakan RS232 sebagai antar muka pemrograman atau komunikasi computer.

2.7.3 Arduino Mega

Arduino MEGA, yaitu mikrokontroler Arduino dengan spesifikasi yang lebih tinggi, dilengkapi tambahan pin digital, pin analog, port serial dan sebagainya. Arduino Mega berbasis ATmega1280 dengan 54 digital input/output.

2.7.4 Arduino Fio

Arduino Fio, yaitu mikrokontroler Arduino yang ditujukan untuk penggunaan nirkabel. Arduino Fio ini menggunakan ATmega328P sebagai basis kontrolernya.

2.7.5 Arduino Lylypad

Arduino Lilypad, yaitu mikrokontroler dengan bentuk yang melingkar. Contoh: LilyPad Arduino 00, LilyPad Arduino 01, LilyPad Arduino 02, LilyPad Arduino 03, LilyPad Arduino 04.

2.7.6 Arduino BT

Arduino BT, mikrokontroler Arduino yang mengandung modul Bluetooth untuk komunikasi nirkabel.

2.7.7 Arduino Nano & Mini

Arduino Nano dan Arduino Mini, merupakan jenis arduino berbentuk kompak dan digunakan bersama breadboard. Contoh: Arduino Nano 3.0, Arduino Nano 2.x, Arduino Mini 04, Arduino Mini 03, Arduino Stamp 02.

 Arduino Software IDE

IDE itu merupakan kependekan dari Integrated Developtment Enviroenment, atau secara bahasa mudahnya merupakan lingkungan terintegrasi yang digunakan untuk melakukan pengembangan. Disebut sebagai lingkungan karena melalui software inilah Arduino dilakukan pemrograman untuk melakukan fungsi-fungsi yang dibenamkan melalui sintaks pemrograman. Arduino menggunakan bahasa pemrograman sendiri yang menyerupai bahasa C. Bahasa pemrograman Arduino (Sketch) sudah dilakukan perubahan untuk memudahkan pemula dalam melakukan pemrograman dari bahasa aslinya. Sebelum dijual ke pasaran, IC mikrokontroler Arduino telah ditanamkan suatu program bernama Bootlader yang berfungsi sebagai penengah antara compiler Arduino dengan mikrokontroler.
Arduino software IDE dibuat dari bahasa pemrograman JAVA. Arduino IDE juga dilengkapi dengan library C/C++ yang biasa disebut Wiring yang membuat operasi input dan output menjadi lebih mudah. Arduino IDE ini dikembangkan dari software Processing yang dirombak menjadi Arduino IDE khusus untuk pemrograman dengan Arduino.

Game Dengan Arduino: PONG Bab 1