İçeriğe Geç

Labirent Oyunu Projesi

06 Nov 2023
Labyrinth Game

İçerik Tablosu

    PicoBricks ile sınırsız hayal gücünün kapılarını aralayabilirsiniz. Bu olağanüstü araç ile yaratıcılığınızın sınırlarını zorlayarak çeşitli oyunlar yaratabilirsiniz. Örneğin, labirent oyunları oluşturmak oldukça keyifli bir deneyim sunar. Yeni PicoBricks sürümü ile bu oyunları uzaktan kumanda ile kontrol etme imkanına da sahipsiniz!

    Labirent oyununu anlatırken, oyuncuların topun hareketini uzaktan kumanda veya benzeri bir cihazla kontrol edebildiğini ve amacın bir deliğe veya hedef noktasına ulaşmak olduğunu vurgulamalıyız. Labirent içinde yol alırken, oyuncular topun dengesini korumalı ve engelleri aşmalıdır. Tüm bunları yaparken, topu ustalıkla hedefe yönlendirmeye çalışırlar. Labirent oyunu, oyuncuların tamamen içine çeken, el-göz koordinasyonunu gerektiren ve sabır ile odaklanmayı gerektiren bir deneyim sunar.


    Detaylar ve Algoritma

    "PicoBricks ve bir IR alıcı kullanarak servo motor üzerinde kablosuz kontrol sağlayan labirent oyunumuzu özenle tasarladık. Programımız, bir IR uzaktan kumanda tarafından gönderilen sinyalleri algılamak için tasarlandı ve bu sinyallere dayanarak servo motorun çeşitli hareketleri, örneğin yukarı, aşağı, sola, sağa hareket etmesi veya durmasını sağlayacak şekilde komutlar veriyor.

    Servo motorun açılarını dikkatlice hesapladık ve bunları PWM (Pulse Width Modulation - Darbe Genişlik Modülasyonu) sinyali kullanarak kesin pozisyonlara dönüştürdük. Programımız, otomasyon projeleri ve uzaktan kontrol edilen cihazlar için temel bir örnek olarak hizmet ederken, aynı zamanda bir 3D yazıcı aracılığıyla üretilen mekanik bir tasarımı da içeriyor. İlgilenenler, kodun işlevselliğini derinlemesine anlamak ve benzer projeler için kullanmak üzere koda göz atabilirler.

    İsterseniz, kendi labirent oyununuzu yaratıp 3D yazıcınızda basabilir, ya da aşağıdaki indirme butonunu kullanarak STL dosyasını indirip 3D yazıcınızda basabilirsiniz."


    Devre Şeması


    Picobricks IDE Kodları

    MicroBlocks Kodları


    MicroPython Kodları

    MicroPython kodu aşağıda gösterilmiştir. Kodlama yaparken, servo motorların farklı şekillerde bağlanmış olabileceğini unutmayın ve bu nedenle "degree" ve "degree2" değerlerini uygun şekilde ayarlayın.

    
    from time import sleep
    from machine import Pin
    from picobricks import NEC_16
    from picobricks import IR_RX
    from machine import PWM
    from math import fabs
    
    def ir_callback(data, addr, ctrl):
        global ir_data
        global ir_addr, data_rcvd
        if data > 0:
            ir_data = data
            ir_addr = addr
            print('Data {:02x} Addr {:04x}'.format(data, addr))
            data_rcvd = True
    ir = NEC_16(Pin(0, Pin.IN), ir_callback)
    ir_data = 0
    data_rcvd = False
    
    pwm_2 = PWM(Pin(22))
    pwm_2.freq(50)
    def CalculateAngle(angle):
       angle = fabs((angle * (6000 / 180)) + 2000)
       angle = round(angle)
       return angle
    
    def up():
        global dare_question_long, blank, degree, degree2, i
        for count in range((8)):
            degree += 2
            pwm_2.duty_u16(CalculateAngle(degree))
    
    pwm_1 = PWM(Pin(21))
    pwm_1.freq(50)
    
    def left():
        global dare_question_long, blank, degree, degree2, i
        for count in range((8)):
            degree2 += 2
            pwm_1.duty_u16(CalculateAngle(degree2))
    
    def down():
        global dare_question_long, blank, degree, degree2, i
        for count in range((8)):
            degree -= 2
            pwm_2.duty_u16(CalculateAngle(degree))
    
    def right():
        global dare_question_long, blank, degree, degree2, i
        for count in range((8)):
            degree2 -= 2
            pwm_1.duty_u16(CalculateAngle(degree2))
    
    def stop():
        global dare_question_long, blank, degree, degree2, i
        degree = 0
        degree2 = 0
        pwm_1.duty_u16(CalculateAngle(degree))
        pwm_2.duty_u16(CalculateAngle(degree2))
    
    degree = 60
    degree2 = 60
    i = 0
    
    while True:
        if data_rcvd == True:
            data_rcvd = False
            if ir_data == IR_RX.number_up:
                up()
            elif ir_data == IR_RX.number_down:
                down()
            elif ir_data == IR_RX.number_left:
                left()
            elif ir_data == IR_RX.number_right:
                right()
            elif ir_data == IR_RX.number_ok:
                stop()
    

    Arduino C Kodları

    
    #include <Wire.h>
    #include <DHT.h>
    #include "ACROBOTIC_SSD1306.h"
    #include <IRremote.h>
    #include <IRremote.hpp>
    #include <Servo.h>
    #define IR_RECEIVE_PIN 0
    Servo servo1;
    Servo servo2;
    int angle1, angle2;
    void servoBalance(){
      angle1 = 90; // set the horizontal plane angle 
      angle2 = 90; 
      setServoAngle();
    }
    void setServoAngle(){
      servo1.write(angle1);
      servo2.write(angle2);
    }
    void setup() {
      Serial.begin(9600);
      Wire.begin();  
      oled.init();                      
      oled.clearDisplay(); 
      pinMode(0,INPUT);
      IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
      servo1.attach(21); 
      servo2.attach(22);
      servoBalance();
    }
    void loop() {
      setServoAngle();
      delay(500);
      if (IrReceiver.decode()) {
        int a = (IrReceiver.decodedIRData.decodedRawData);
        Serial.println(a);
        IrReceiver.resume(); // Receive the next value
        if(a == -417792256){
           angle2+=30;
        }else if (a == -1387069696){
           angle2-=30;
        }else if (a == -150405376){
           angle1-=30; 
        }else if (a == -1520763136){
           angle1+=30;
        }else if (a == -484638976){
           servoBalance();
        }
      }
    }
    
    Önceki Gönderi
    Sıradaki Gönderi

    Abone olduğun için teşekkürler!

    Bu e-posta kaydedildi!

    Görünümü satın alın
    Seçenekleri Seçin

    Seçeneği Düzenle

    Stok Bildirimi

    Karşılaştır

    Ürün Stok KoduDeğerlendirmeAçıklama Kategori Uygunluk Ürün Tipi Diğer Detaylar
    this is just a warning
    Giriş Yap
    Alışveriş Sepeti
    0 Ürünler
    Same Day Shipping No Extra Costs
    Easy Returns Guarantee Return with Ease
    Secure Checkout Secure Payment