Arduino Uçak Oyunu
Arduino Uno, HC-SR04 Ultrasonik Sensör ve Processing programı kullanılarak yapılmış etkileşimli bir oyun. Özellikle çocuklar için güzel bir uygulama.
Devreyi kurdum ve çalıştırdım. Daha sonra program kodlarını inceleyerek gerekli açıklamaları türkçe olarak program içinde (.pde dosyasında) yazdım. Oyun Arduino'ya bağlı HC-SR04 ultrasonic sensörü ile hareket ediyor. Arduinomuz da usb kablo ile pc'ye bağlı. Elimizi ultrasonik sensöre yakınlaştırdıkça uçak alçalıyor, uzaklaştırdıkça uçak yükseliyor. Kodlar ile oynandığında (içinde açıklama satırı var) fare ile de oynanabiliyor.
Oyun geliştirilmeye oldukça açık. Oyundaki nesneleri değiştirebilirsiniz. Kullanacağınız resimleri .png uzantılı ve arka planları şeffaf olarak kullanın. Hangi nesnenin, hangi özelliğinin ne olduğunu kodlar içinde belirttim.
Öncelikle processing programını indirin.
İşlem Basamakları:
1- Ultrasonik sensörümüzü Arduino'ya bağlıyoruz.
2- USB kablosu ile Arduinomuzu bilgisayara bağlanıyoruz.
3- Arduino Ide programını açıp ucakoyunu.ino dosyasını Arduino'ya yüklüyoruz.
4- processing.exe programını çalıştırıyoruz.
5- processing proagramı menüsünden dosya > aç'a tıklayıp ucak.pde dosyasını bulup tamamı seçerek aç'a tıklıyoruz.
6- Çalıştır düğmesine tıklayıp oyunu başlatıyoruz.
processing programı üzerinden ucak.pde dosyamızda değişiklikler/oynamalar yapabiliriz.
Renklerle oynamak için w3schools.com daki HTML Color Picker sayfasını kullanarak renklerin RGB kodlarını değiştirebilirsiniz.
# processing referanslarına buradan ulaşabilirsiniz. Komutların nasıl kullanıldığını görmek için.
# processin tutoriallerine buradan ulaşabilirsiniz. Öğretici örnekler var.
# processing indirme sayfasına buradan ulaşabilirsiniz.
# Proje Hocam sayfasına buradan ulaşabilirsiniz.
Devre Şeması:
Arduino ve Processing programlarının ortaklaşa çalışması söz konusu. projehocam sitesinde görüp çok ilgimi çeken bu uygulamayı yapmaya karar verdim. .ino dosyasını hiç değiştirmedim, .pde dosyasında oynadım. Bu arada dosya içindeki Proje Hocam ifadelerini de silmedim. Çünkü yapılmış bir uygulamaya biraz değişiklik ve açıklamalar getirdim.
Devreyi kurdum ve çalıştırdım. Daha sonra program kodlarını inceleyerek gerekli açıklamaları türkçe olarak program içinde (.pde dosyasında) yazdım. Oyun Arduino'ya bağlı HC-SR04 ultrasonic sensörü ile hareket ediyor. Arduinomuz da usb kablo ile pc'ye bağlı. Elimizi ultrasonik sensöre yakınlaştırdıkça uçak alçalıyor, uzaklaştırdıkça uçak yükseliyor. Kodlar ile oynandığında (içinde açıklama satırı var) fare ile de oynanabiliyor.
Oyun geliştirilmeye oldukça açık. Oyundaki nesneleri değiştirebilirsiniz. Kullanacağınız resimleri .png uzantılı ve arka planları şeffaf olarak kullanın. Hangi nesnenin, hangi özelliğinin ne olduğunu kodlar içinde belirttim.
Öncelikle processing programını indirin.
İşlem Basamakları:
1- Ultrasonik sensörümüzü Arduino'ya bağlıyoruz.
2- USB kablosu ile Arduinomuzu bilgisayara bağlanıyoruz.
3- Arduino Ide programını açıp ucakoyunu.ino dosyasını Arduino'ya yüklüyoruz.
4- processing.exe programını çalıştırıyoruz.
5- processing proagramı menüsünden dosya > aç'a tıklayıp ucak.pde dosyasını bulup tamamı seçerek aç'a tıklıyoruz.
6- Çalıştır düğmesine tıklayıp oyunu başlatıyoruz.
processing programı üzerinden ucak.pde dosyamızda değişiklikler/oynamalar yapabiliriz.
Renklerle oynamak için w3schools.com daki HTML Color Picker sayfasını kullanarak renklerin RGB kodlarını değiştirebilirsiniz.
# processing referanslarına buradan ulaşabilirsiniz. Komutların nasıl kullanıldığını görmek için.
# processin tutoriallerine buradan ulaşabilirsiniz. Öğretici örnekler var.
# processing indirme sayfasına buradan ulaşabilirsiniz.
# Proje Hocam sayfasına buradan ulaşabilirsiniz.
Devre Şeması:
HC-SR04 Ultrasonik Sensör
Arduino Uno
Arduino IDE Kodları:
ucakoyunu.ino dosyası
//Uçak Oyunu - Proje Hocam
int echoPin= 11;
int triggerPin= 12;
unsigned long pulsetime = 0;
unsigned distance =0;
unsigned OldDistance =0;
void setup (){
pinMode (echoPin, INPUT);
pinMode (triggerPin, OUTPUT);
Serial.begin(9600);
}
void loop(){
//compute the distance. Thanks for the ready-made code examples !!
digitalWrite(triggerPin, LOW);
delayMicroseconds(100);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(100);
digitalWrite(triggerPin, LOW);
pulsetime = pulseIn(echoPin, HIGH);
distance = pulsetime / 58;
delay(10);
//sent the value only if it's a new value
if (OldDistance != distance) {
Serial.println(distance);
OldDistance = distance;
}
delay(50); // wait 0.1 s between each measure
}
//dosya sonu
Processing Kodları:
ucak.pde dosyası
// Uçak Oyunu
// Ana Kaynak: Proje Hocam
// Düzenlenleme kodlagitsin.blogspot.com
int i, j;
float Hauteur; //en Y
float Angle;
int DistanceUltra;
int IncomingDistance;
//float Pas; //pour deplacements X
float MiniUcakX;
float MiniUcakY;
float HelicopterX;
float HelicopterY;
String DataIn; // gelen veri
//5 a 32 cm
float [] BulutX = new float[6];
float [] BulutY = new float[6];
PImage Bulut;
PImage MiniUcak;
PImage Helicopter;
//seri port yapılandırması
import processing.serial.*;
Serial myPort;
// hazırlık
void setup()
{
myPort = new Serial(this, Serial.list()[0], 9600);
myPort.bufferUntil(10); // Bir satırbaşı algıladığında alımı sonlandırın
frameRate(30);
size(800, 600);
rectMode(CORNERS) ; // köşelere koordinatlar veriyoruz
noCursor(); // neden olmasın ?
textSize(20); // yazı büyüklüğü
// yazı rengi otların rengiyle aynı, otların rengini değiştirince yazı rengi dedeğişiyor.
Hauteur = 300; // başlangıç düzlemi değeri-- uçağın ilk başladığı yükseklik...değeri küçülttükçe daha yukarıdan başlar
//kullanacağımız resimleri okutma
Bulut = loadImage("Bulut.png");
MiniUcak = loadImage("MiniUcak.png");
Helicopter = loadImage("Helicopter.png");
//bulutların pozisyonu
for (int i = 1; i <= 5; i = i+1) {
BulutX[i]=random(1000);
BulutY[i]=random(400);
}
}
// seri bağlantı noktasından gelen veri olayı
void serialEvent(Serial p) {
DataIn = p.readString();
// println(DataIn);
IncomingDistance = int(trim(DataIn)); // dizeden tam sayıya dönüşüm
println(IncomingDistance); // kontrol
if (IncomingDistance>1 && IncomingDistance<100 ) {
DistanceUltra = IncomingDistance; // değeri yalnızca 1 ila 100 aralığındaysa kaydet
}
}
// ana döngümüz
void draw()
{
background(0, 0, 0);
Ciel();
fill(51,204, 51); //otların rengi
rect(0, 575, 800, 600); // otlar
text(Angle, 10, 30); // sol üst köşedeki açı değeri (angle,soldan,yukardan)
text(Hauteur, 10, 60);// sol üst köşedeki yükseklik değeri (angle,soldan,yukardan)
//Angle = mouseY-300; // fare ile oynamak istiyorsanız bu satırı açınız ve bir sonrakini yorumlayınız.
Angle = (18- DistanceUltra)*4; // 4 değerini artırabilirsiniz ...
Hauteur = Hauteur + sin(radians(Angle))*10; // dikey pozisyonu hesaplar
// düzlemi ekranda tutmak için yükseklik aralığını kontrol edin
if (Hauteur < 0) {
Hauteur=0;
}
if (Hauteur > 600) {
Hauteur=600;
}
TraceUcak(Hauteur, Angle); //ana uçağımızı oluştur
MiniUcakX = MiniUcakX - cos(radians(Angle))*15; //sondaki 15 rakamı hızını etkiliyor. artırdıkça hızlanıyor
if (MiniUcakX < -30) {
MiniUcakX=900;
MiniUcakY = random(600);
}
// bulutları çiz ve hareket ettir
for (int i = 1; i <= 5; i = i+1) {
BulutX[i] = BulutX[i] - cos(radians(Angle))*(10+2*i);
image(Bulut, BulutX[i], BulutY[i], 200, 150);
if (BulutX[i] < -300) {
BulutX[i]=1000;
BulutY[i] = random(400);
}
}
image(MiniUcak, MiniUcakX, MiniUcakY, 200, 150); // Mini Ucak resmimizi gösterme
HelicopterX =HelicopterX - cos(radians(Angle))*10; //sondaki 10 rakamı hızını etkiliyor. artırdıkça hızlanıyor
if (HelicopterX < 60) {
HelicopterX=900;
HelicopterY = random(600);
}
image(Helicopter, HelicopterX, HelicopterY, 120, 60); // Helikopter resmimizi gösterme
}
void Ciel() {
// Gökyüzünü çiziyoruz
noStroke();
rectMode(CORNERS);
for (int i = 1; i < 600; i = i+10) {
fill( 49 +i*0.165, 118 +i*0.118, 181 + i*0.075 ); // gökyüzü ana rengi
rect(0, i, 800, i+10); //gökyüzü renk değişimi yukarıdan aşağı gradyan
}
}
void TraceUcak(float Y, float AngleInclinaison) {
//düzlemi verilen pozisyon ve açıda çizmek
//noStroke();
pushMatrix();
translate(400, Y);
rotate(radians(AngleInclinaison)); // derece olarak!
/*
çizim
|\___o__
________>
*/
scale(0.4); //0.2 pas mal ... uçağın büykülüğü ... 0.5 ideal
fill(255,51,204); // uçak rengi RGB
stroke(102, 0, 51); // uçak, tekerlek, pervane kenar çizgileri rengi
strokeWeight(10); // pervane ve tekerlek kalınlığı
ellipse(292-228, 151-85, 45, 45); // tekerlek
line(373-228, 145-85, 373-228, 20-85); // pervane
strokeWeight(7); // uçağın kenar çizgileri kalınlığı
beginShape();
// ana uçağımızı çiziyoruz
vertex(214, 120);
vertex(32, 82);
vertex(32, 76 );
vertex(15, 71);
vertex(35, 69);
vertex(35, 21);
vertex(49, 21);
vertex(57, 24);
vertex(70, 30);
vertex(79, 43);
vertex(81, 58);
vertex(95, 68);
vertex(161, 62);
vertex(187, 59);
vertex(239, 59);
vertex(242, 42);
vertex(296, 40);
vertex(297, 58);
vertex(351, 59);
vertex(365, 67);
vertex(373, 82);
vertex(364, 98);
vertex(339, 109);
vertex(305, 118);
vertex(273, 133);
translate(-228, -85); // merkezleme
endShape(CLOSE);
fill(0, 0, 0);
fill(255, 128, 0);
popMatrix();
}
//dosya sonu
KULLANILAN PROGRAMLAYICI: Arduino 1.8.10 , Processing3
Yorumlar
Yorum Gönder