back to top

#14 Dinosaur Game


Geliştirilecek elektronik sistemler görevini itme, çekme, döndürme, kaldırma, indirme gibi hareketle sonuçlanan işlerle yerine getireceklerse projede aktuatör olarak pnomatik sistemler ya da elektrik motorlu sistemler kullanılır. Picobricks, projelerinde yazdığın kodları harekete geçirebilecek sistemler üretebilmen için iki farklı motor tipini desteklemektedir. DC motor ve DC motorların elektronik olarak hareketlerinin düzenlendiği Servo motorlar. Servo motorlar dönüş açısı değeri verildiğinde o açıya dönen motorlardır. Model uçakların kanatlarında, uçağa yön verebilmek için kanat uçlarındaki yaprakları servo motorlar ile hareket ettirilmektedir. RC teknelerde aracın yönünü değiştirmek için de aynı mantıkla servo motorlar kullanılmaktadır. Ayrıca tam tur dönebilen, akıllı sürekli servo olarak bilinen gelişmiş servo motorlar, evlerimizde kullandığımız akıllı süpürgelerin tekerleklerinde de kullanılmaktadır.

Bu projede PicoBricks ile Servo motorların nasıl kontrol edilebildiğini öğreneceksin.

Proje Detayları ve Algoritma

Bu projede Google Chrome offline dinasour game’i otomatik olarak Picobricks’e oynatacağız. Oyunda Picobricks engelleri algılayarak otomatik olarak dinazorun hareketlerini kontrol edecek. Oyun esnasında dinazorun karşısına çıkan engelleri algılamak için picobricks LDR sensör kullanacağız. LDR sensör yüzeyine temas eden ışık miktarını ölçerek analog sinyaller gönderebilmektedir. Sensörü bilgisayar ekranına sabitleyerek beyaz ve siyah renkler arasındaki ışık miktarı farkından yararlanarak dinazorun önüne engel gelip gelmediğini algılayabiliriz. Engel algılandığında ise servo motor kullanarak klavyedeki boşluk tuşuna otomatik olarak basılmasını sağlayabiliriz. Bu sayede dinazor engelleri kolaylıkla aşacaktır. Proje kodlarını yazarken öncelikle LDR sensörü bilgisayar ekranına sabitleyerek beyaz ve siyah zemindeki sensör verilerine okuyacak daha sonra bu verilere göre servo motorun hareket etmesi için gerekli kodları yazacağız.

Bağlantı Şeması

Not: Motor sürücü grove kablo girişinin sağ ve sol tarafında üçlü pinler bulunmakta ve bu pinler 2’li jumper ile kısa devre yapılmaktadır. DC motor kullanırken DC motor tarafında takılı olması gereken jumper, servo motor kullanırken çıkarılarak servo tarafına takılmalıdır.

Projenin MicroBlocks ile Kodlanması

Projenin çalışması için öncelikle bulunduğunuz ortama göre değişecek olan LDR sensör değerlerini okumalısın. Bunun için say123 bloğunu kullanabilirsin. Chrome offline dinosaur game aç. Sensörü dinazordan 3-4 cm sağ tarafa ve yol çizgisinin hemen üzerine bant yardımıyla sabitle. Sensörün ekrana değdiğinden emin olduktan sonra sensör değerlerini oku. Beyaz zeminde iken gelen değerler, engel geldiğinde gelen değerlerden farklı olacaktır. Aradaki farkı gözlemleyerek belirleyeceğiniz sınır değerini when bloğu ile koda dönüştür. LDR sensör değeri belirlediğin değerden küçük olduğunda servonun açısının 25 derece değişip eski konumuna geri gelmesi için gerekli kodları yaz ve servo motoru space tuşuna otomatik olarak basacak şekilde klavyenize sabitle.

Projenin MicroBlocks kodlarına ulaşmak için tıkla.

Proje Görseli

Proje Önerisi

Oyunda ilk başta zemin rengi beyaz figürler siyah renklidir. Belirli bir aşamadan sonra ise renkler tersine dönmektedir. Bu sebeple LDR sensör verileri değişmektedir. Bu problemi çözmek için değişken ve fonksiyon kullanarak oyun beyaz zemindeyken bir kod grubu, siyah zemindeyken diğer kod grubunu çalıştırabilir ya da bu farkı algılaması için ikinci bir LDR sensör takabilirsin. 

Picobricks ve modülleri basitten karmaşığa birçok proje geliştirmemize imkan sunmaktadır. Günlük hayatta oynadığımız bir bilgisayar oyununu otomatik olarak Picobricks’e oynattığımız bu projeyi geliştirerek minecraft gibi farklı oyunlarda da kullanabilirsin.

Projenin MicroPython Kodları

Işık sensörünün okuduğu değeri shell penceresine yazdıracak  kodlar:
from machine import Pin, ADC
from utime import sleep

ldr=ADC(27)

while True:
    print(ldr.read_u16())
    sleep(0.01)


Projenin Kodları:
from machine import Pin, ADC,PWM
from utime import sleep

ldr=ADC(27)
servo=PWM(Pin(21))
servo.freq(50)

while True:
    sleep(0.01)
    if ldr.read_u16()>40000:
        servo.duty_u16(2000)
        sleep(0.1)
        servo.duty_u16(1350)
        sleep(0.5)

Projenin Arduino C Kodları


#include <Servo.h>
Servo myservo;

void setup() {
  myservo.attach(22);
  myservo.write(20);
  pinMode(27,INPUT);
}

void loop() {
  
  int light_sensor=analogRead(27);

  if(light_sensor>100){

    int x=45;
    int y=20;
    
    myservo.write(x);
    delay(100);
    myservo.write(y);
    delay(500);
  }
}




Önceki İçerik
Sonraki İçerik

Son Çıkan Yazılar

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz