สร้างเกม Flappy Bird ด้วย Arduino UNO + Processing IDE

Flappy Bird เหมือนเกมนกตัวจริงที่คุณควบคุมนกตัวโปรด ที่ต้องเอาชนะอุปสรรคมากมาย หากคุณต้องการบินเหมือนนกจริงหรือเพลิดเพลินกับการบิน เกมที่เครื่องปัดจะตอบสนองความต้องการของคุณ เกมดังกล่าวช่วยให้คุณกางปีกเครื่องปัดและบินได้เหมือนนกจริง คุณเคยจินตนาการไหมว่ามันจะเป็นอย่างไร เมื่อเราเล่นโดยใช้ท่าทางมือของเรา? ดังนั้นทำตามทุกขั้นตอนตามบทความนี้ คุณจะทำให้มันเกิดขึ้นได้ด้วย Arduino UNO

รายการอุปกรณ์

ขั้นตอนการทํางาน

1. ติดตั้งโปรแกรม Arduino IDE

สำหรับการเขียนโปรแกรมของ Arduino IDE นั้นจะใช้ภาษา C/C++ ซึ่งเป็นรูปแบบภาษาซีประยุกต์แบบหนึ่ง ที่มีโครงสร้างการทำงานของตัวภาษาโดยรวม คล้ายกับ ภาษาซีมาตรฐาน (ANSI-C) ทั่วๆไป เพียงแต่ได้มีการปรับปรุงเพื่อลดความยุ่งยากในการใช้งานลง เพื่อให้ผู้ใช้สามารถใช้งาน เขียนโปรแกรมได้ง่าย และสะดวกมากกว่าเขียนภาษาซี แบบมาตรฐาน

Arduino integrated development environment หรือเรียกสั้นๆว่า โปรแกรม Arduino IDE เป็นโปรแกรมที่ “แจกฟรี” ภายใต้เงื่อนไขในการใช้งานลักษณะ Open source ซึ่ง Arduino IDE จะทำหน้าที่ ติดต่อ ระหว่าง คอมพิวเตอร์ ของเรา (Windows, Mac OS X และ Linux) กับ บอร์ด Arduino ซึ่งโปรแกรมนี้ออกแบบให้ง่ายต่อการเขียนโค้ดและอัปโหลดโค้ดที่เราเขียน เข้าสู่ บอร์ด Arduino

โดย Download ตัวติดตั้งได้จาก

https://www.arduino.cc/en/Main/Software

เลือก Windows Installer, for Windows 7 and up

Download ตัวติดตั้ง Arduino IDE


คลิกเลือก JUST DOWNLOAD (หากต้องการร่วมบริจาคช่วยการพัฒนา Arduino Software สามารถกด CONTRIBUTE & DOWNLOAD)

เมื่อดาวน์โหลดเสร็จแล้ว ให้ติดตั้งตามที่โปรแกรมแนะนำ

2. เชื่อมต่อสายระหว่าง HC-SR04 กับ Arduino UNO



เชื่อมต่อสาย HC-SR04 กับ Arduino UNO

3. ตรวจสอบ Port ของบอร์ด Arduino UNO

เชื่อมต่อสาย USB จาก คอมพิวเตอร์ ไปที่บอร์ด Arduino UNO

เชื่อมต่อสาย Arduino UNO

บอร์ดนี้มีตัวสื่อสารกับ พอร์ต USB ของคอมพิวเตอร์ คือ USB communication เป็นชิป ATmega16U2 ซึ่งแปลงสัญญาณ USB เป็นแบบอนุกรม เพื่อช่วยให้คอมพิวเตอร์ของสามารถอัพโหลดโปรแกรมและสื่อสารกับชิป ATmega328 ได้

โดย คลิกขวา Computer -> Properties -> Device Manager

ไปที่ Ports (COM & LPT) จะพบ Arduino Uno ในตัวอย่างเป็น (COM14) แสดงว่าคอมพิวเตอร์ของเราสามารถ ติดต่อสื่อสารกับ บอร์ด Arduino UNO ได้แล้ว

4. อัพโหลดโค้ด สร้างเกม Flappy Bird ด้วย Arduino UNO

เปิดโปรแกรม Arduino IDE

เปิดโปรแกรม Arduino IDE

เขียนโปรแกรม หรือ Sketch ตามโค้ดด้านล่างนี้

//for more projects visit www.blackkeyhole.com
const int trigPin = 11; //DECLARE TRIG PIN AT D11
int echoPin = 10;       //DECLARE ECHO PIN AT D10
int safezone = 10;
void setup()
{
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  Serial.begin(9600);
}
void loop()
{
  long duration, cm;          //DECLARE VARIABLES TO STORE SENSOR O/P
  digitalWrite(trigPin, LOW); //MAKE THE TRIG PIN LOW
  delayMicroseconds(2);       //WAIT FOR FEW MICROSECONDS
  digitalWrite(trigPin, HIGH); //NOW SET THE TRIG PIN
  delayMicroseconds(5);       //WAIT FOR FEW MICROSECONDS UNTIL THE TRIG PULSE IS SENT
  digitalWrite(trigPin, LOW); //MAKE THE TRIG PIN LOW AGAIN
  duration = pulseIn(echoPin, HIGH); //MAKE ECHO PIN HIGH AND STORE THE BOUNCED PULSE IN VARIABLE DURATION
  cm = microsecondsToCentimeters(duration);
  long inch = cm / 2.54;
  Serial.println(cm);
}
long microsecondsToCentimeters(long microseconds) //SPEED OF SOUND IS 29 uSEC PER CM
{
  return microseconds / 29 / 2; 
}


ไปที่ Tools -> Board แล้วเลือกให้ตรงกับบอร์ดที่ใช้งาน สำหรับ Arduino UNO ให้เลือกบอร์ด Arduino Uno

เลือกให้ตรงกับบอร์ดที่ใช้งาน สำหรับ Arduino UNO

เลือก Port โดยไปที่ Tools -> Port -> COM14 (Arduino Uno)
(โดย COM14 แต่ละเครื่องจะไม่เหมือนกัน ให้เลือกตามที่ปรากฎ)

เลือก Port โดยไปที่ Tools -> Port ->

คลิกที่ Upload

คลิกที่ Upload

ตั้งชื่อตามต้องการ ในตัวอย่างตั้งเป็น flappybird_uno -> Save

ตั้งชื่อตามต้องการ uno -> Save


โปรแกรมจะคอมไพล์ (compile) โดยจะทำการอ่านโปรแกรมภาษาซีทั้งหมดตั้งแต่ต้นจนจบ แล้วทำการแปลผลทีเดียว

โปรแกรมจะคอมไพล์ (compile)

รอจนกระทั่งขึ้น Done uploading. ที่แถบด้านล่าง แสดงว่าเราอัพโหลดโปรแกรมลงบอร์ดได้สำเร็จแล้ว

ขึ้น Done uploading. ที่แถบด้านล่าง

5. ดาวน์โหลด และ ติดตั้ง โปรแกรม Processing IDE

Processing เป็นซอฟท์แวร์ เป็นโปรแกรมที่ “แจกฟรี” ภายใต้เงื่อนไขในการใช้งานลักษณะ Open source เหมาะสำหรับผู้ต้องการพัฒนาโปรแกรมเกี่ยวกับการสร้างภาพเคลื่อนไหวและการมีปฏิสัมพันธ์ สำหรับผู้ที่เคยใช้ชุดพัฒนาโปรแกรม Arduino มาแล้ว เมื่อเห็นรูปร่างหน้าตาการอินเตอร์เฟสของ Processing แล้วจะรู้สึกคุ้นเคยมาก เพราะเหมือนกันนั่นเอง อีกทั้ง Processing และ Arduino ใช้หลักการในการเขียนโปรแกรมเหมือนกัน โดยมีพื้นฐานมาจากภาษา C/C++ รวมถึงการติดตั้งชุดพัฒนาก็เหมือนกันด้วย

เริ่มใช้งานโดย ใช้คอมพิวเตอร์ Download ตัวติดตั้ง Processing IDE ได้จาก

ติดตั้ง โปรแกรม Processing


ให้แตกไฟล์ จะได้โฟลเดอร์ processing-3.5.4 จะย้ายไปใว้ที่ใหนก็ได้ เวลาจะเปิดโปรแกรม ให้เข้าไปดับเบิลคลิกไฟล์ processing.exe ใน โฟลเดอร์ processing-3.5.4

เปิดโปรแกรม Processing
โปรแกรม Processing 3

เขียนโปรแกรม ให้กับ Processing ตามโค้ดด้านล่าง

import processing.serial.*;
int DistanceUltra;
int IncomingDistance;
Serial myPort;
String DataIn;
Pipe p1 = new Pipe();
Pipe p2 = new Pipe();
Pipe p3 = new Pipe();
 
//bird height and width location
float birdy = 46;
float birdx = 56;
float gravity = 5;
 
//the speed of the pipes
int speed;
 
//score and game state
boolean gameOver = false;
int score = 0;
int highscore = 0;
 
int point = 1;
 
color birdColor = color(255, 204, 0);
 
 
void setup(){
  size(400,600);
  p1.x = width + 50;
  p2.x = width + 220;
  p3.x = width + 370;
  myPort = new Serial(this, "COM14", 9600); //change the com port which is suitable for your machine
  myPort.bufferUntil(10);
}
void serialEvent (Serial myPort){
DataIn = myPort.readString();
println(DataIn);
IncomingDistance = int(trim(DataIn));
println("incoming distance="+IncomingDistance);
if (IncomingDistance>1 && IncomingDistance<100 ) { DistanceUltra = IncomingDistance; //save the value only if its in the range 1 to 100 } }
}
}
 
void draw(){
 
  background(0);
  p1.pipe();
  p2.pipe();
  p3.pipe();
 
  fill(birdColor);
  ellipse(birdx, birdy, 55,55);
 // birdy += gravity;
  play();
  success(p1);
  success(p2);
  success(p3);
 
  if (IncomingDistance>10)
  {
    //birdy -= jumpForce;
    birdy -= gravity;
  }    
  else
  {
    birdy += gravity;
  }
  
}
 
 
void play(){
 
  if(gameOver == false)
  {
    speed = 2;
    p1.x -= speed;
    p2.x -= speed;
    p3.x -= speed;
   
    textSize(24);
    fill(255,255,255);
    text(score, width/2, 30);  
  }
 
  if(gameOver == true)
  {
    speed = 0;
    p1.x -= speed;
    p2.x -= speed;
    p3.x -= speed;
   
    if( highscore < score)
    {
       highscore = score;
    }
   
    textSize(16);
    fill(0, 102, 153);
    textAlign(CENTER);
    text("Click : Play Again", width/2, height/2);
    text("Score: " + score, width/2, height/2 - 20);
    text("High-Score: " + highscore, width/2, height/2 - 40);
   
    if (mousePressed)
    {
       delay(900);
       score = 0;
       gameOver = false;
       birdy = 100;
       birdx = 56;
       p1.x = width + 50;
       p2.x = width + 220;
       p3.x = width + 370;
       p1.top = random(height/2);
       p1.bottom = random(height/2);
       p2.top = random(height/2);
       p2.bottom = random(height/2);
       p3.top = random(height/2);
       p3.bottom = random(height/2);
 
    }  
  }
 
}
 
void success(Pipe test){
 
  if(birdy < test.top || birdy > height - test.bottom)
  {
    if(birdx > test.x && birdx < test.x + test.w)
    {
      gameOver = true;
    }
  }
}
class Pipe
{
  float top = random(height/3 + 200);
  float bottom = random(height/3 +200);
 
 
  float x = width + 150;
  float w = 70;
  color pipeColor = color(0, 255, 0);
 
  void pipe()
  {
    fill(pipeColor);
    rect(x, 0, w, top);
    rect(x, height-bottom, w, bottom);
   
    if(x < -100)
    {
     score += point;
     x = width;
     top = random(height/2);
     bottom = random(height/2);
    }
 
   
  }
 
 
}



แก้ไขชื่อ COM ให้ตรงกับ บอร์ด Arduino UNO ของคุณ

แก้ไขชื่อ COM ให้ตรงกับ บอร์ด Arduino UNO


คลิกที่ Run

โค้ดเกม Flappy Bird

โปรแกรม Processing IDE จะแสดง หน้าจอเกม Flappy Bird

เกม Flappy Bird


แสดงว่า โปรเจค สร้างเกม Flappy Bird ของคุณสำเร็จแล้ว -> จากนั้นทดสอบเล่นเกม

credit : blackkeyhole.com by : Ashshak