Simon oyunu oluşturmak için Raspberry Pi'yi devre tahtasıyla kullanma konusunda yeni başlayanlar için rehber

Breadboard, hiçbir şeyi lehimlemenize gerek kalmadan devreler oluşturmanıza olanak tanır. Elektronikle denemeler yapmak için harika bir araçtır, ancak biraz korkutucu olabilir. Bir proje oluşturmak, öğrenirken motive kalmanıza yardımcı olabilir.

Yeni başlayanlar için harika projeler oluşturmanıza yardımcı olabilecek birçok basit oyun var. Ahududu Pi. Başlayabileceğiniz kolay oyunlardan biri Simon. Simon'ın oyunu Hafıza oyunu Bir dizi ışığın rastgele sırayla yanıp söndüğü ve oyuncunun bu sırayı hatırlaması gereken bir oyundur. Oyuncu ilerledikçe dizinin uzunluğu artar.

Gerekli bileşenler

Başlamak için aşağıdaki şeylere ihtiyacınız olacak:

  • Raspberry Pi cihazı.
  • MicroSD kart işletim sistemine aktarıldı Raspbian İşletim Sistemi Üzerinde.
  • Farklı renklerde 4 x LED ışık.
  • 4 x elektrik direnci (220 ohm'dan 1 kilo ohm'a kadar).
  • 4 x düğme.
  • 1 x devre tahtası.
  • Her şeyi bağlamak için yama kabloları.

Bu proje için herhangi bir Raspberry Pi modelini kullanabilirsiniz, ancak Pi Zero modelleri devre tahtalarına lehimlemeden kolayca bağlanmaz. Hangi modeli kullanırsanız kullanın, bir güç kaynağına, monitöre, klavyeye ve fareye de ihtiyacınız olacak.

Daha önce bir Raspberry Pi kurmadıysanız bu eğitim için her şeyi nasıl hazırlayacağınızı şu adreste öğrenebilirsiniz: Raspberry Pi'ye Yeni Başlayanlar Kılavuzu.

Bu derste Python kodunu yazacaksınız. Bunu yazmak için herhangi bir metin düzenleyiciyi kullanabilirsiniz, ancak daha kolay bir kod düzenleyici bulabilirsiniz. Bunlardan birçoğu zaten Raspberry Pi işletim sistemi üzerinde kuruludur ve Thonny yeni başlayanlar için kolay olacak şekilde tasarlanmıştır. Ne kullanırsanız kullanın, bu öğreticiyi takip etmek için kodu kaydedip çalıştırabilmeniz gerekir.

Breadboard'u kullanmaya başlama

Raspberry Pi'de iki sıra genel amaçlı giriş/çıkış (GPIO) pini bulunur. Bu pinler çeşitli harici bileşenleri Raspberry Pi'ye bağlamanızı sağlar. Bazı pinler bilgi gönderir, bazıları güç sağlar, bazıları ise elektronik cihazlarınızı topraklar.

Breadboard'umuza bir LED ekleyerek başlayacağız.

GPIO pinini kartınıza bağlayarak başlayın. Güç pini veya topraklama pini değil, GPIO pini olduğu sürece hangi pin olduğu önemli değildir. Yukarıda hangi pini kullanacağınıza karar vermenize yardımcı olacak GPIO pinlerinin bir diyagramı bulunmaktadır. Bu eğitimde GPIO 18 olarak da adlandırılan pin ID 24 kullanılır.

Pim, devre tahtasına bir miktar güç sağlayacak ve Raspberry Pi'nin tahtadaki bileşenlerle iletişim kurmasını sağlayacaktır. Daha sonra Pi üzerindeki 6 numaralı pini devre tahtasının toprak ucuna bağlayın. Bu, kartı topraklayacak ve elektrik devrelerinin oluşturulmasına izin verecektir.

Raspberry'den gelen güç LED'i doğrudan bağlamak için çok yüksek. Direnç kullanmak güç seviyesini azaltır ve LED'in yanmasını önler. Direncin bir ucunu GPIO pininin bağlı olduğu aynı hatta, ucunu da kartın diğer tarafına bağlayın. Daha sonra LED'in pozitif tarafını elektrik direncinin arkasına yerleştirin. LED'in negatif terminali doğrudan negatif tarafa bağlanabilir. Nihai sonuç yukarıdaki grafiğe benzemelidir. Kablolarınızı dikkatlice kontrol edin ve Pi'yi açın. Lamba yanmalıdır.

Artık Raspberry Pi'nizle kod kullanarak kontrol edebileceğiniz bir devre oluşturdunuz.

LED'leri kontrol etmek için Python kodunu kullanın

Bu eğitim size kodu adım adım anlatacaktır, ancak son koda geri dönmek isterseniz şu adreste bulabilirsiniz: Pastebin.

Şu anda güç LED'e gidiyor, ancak ne zaman açılıp kapanacağını kontrol etmek istiyoruz. Aşağıdaki Python kodu yönetim kuruluyla konuşmamızı sağlayacak.

import RPi.GPIO as GPIO GPIO.setmode(GPIO.BOARD) GPIO.setwarnings(False) red = 18 GPIO.setup(red, GPIO.OUT) GPIO.output(red, GPIO.LOW)

İlk birkaç satır her şeyi ayarlayan şeydir. Raspberry Pi GPIO kütüphanesi içe aktarılır. Bize izin verdiği yerde asGPIO Yazmaktan biraz tasarruf etmek için RPi.GPIO değişkenine GPIO olarak atıfta bulunmak. GPIO pin modu AÇIK olarak yapılandırılmıştır KURULU. Bu ayarı kullanmak zorunda değilsiniz, ancak pinlere GPIO satırlarındaki sıralarına göre bakmak daha kolay olabilir.

Son olarak uyarıları false olarak ayarladık. Bu gereksiz uyarıları durduracaktır.

Son üç satır LED'i kontrol eder. Kırmızı LED GPIO pin 18'e bağlanır. Bunu hatırlamak yerine değişkeni saklar kırmızı Yer. Ondan sonra anlatıyor GPIO.kurulumu Programımız bilgileri kırmızı pin'e gönderir. Son olarak GPIO.output'u kırmızı pin'e ayarladık. düşük. Bu programı çalıştırdığınızda ışık sönecektir. Tekrar açmak için geçiş yapın GPIO.DÜŞÜK إلى GPIO YÜKSEK ve programı yeniden çalıştırın.

Kodu kaydedin ve tıklayın تشغيل Bunu çalışırken görmek için. Kod düzenleyicide Çalıştır düğmesi yoksa herhangi bir adla (dosyaadım) kaydedin ve komutu çalıştırın. python dosyaadım.py Terminal penceresinde. Öncelikle yeni Python dosyasıyla aynı dizine gitmeniz gerekecek.

Birden fazla LED ekleyin

Simon oyununu oluşturmak için farklı renklerde dört lambaya ihtiyacımız var. Kırmızı LED'i ayarlamak için kullandığınız adımların aynıları diğer üçünü ayarlamak için de kullanılabilir. Kablo bağlantınız aşağıdaki şemaya benzemelidir:

Kodunuz şöyle görünmeli:

import RPi.GPIO as GPIO GPIO.setmode(GPIO.BOARD) GPIO.setwarnings(False) red = 18 yellow = 22 green = 24 blue = 26 GPIO.setup(red, GPIO.OUT) GPIO.setup(yellow, GPIO.OUT) GPIO.setup(green, GPIO.OUT) GPIO.setup(blue, GPIO.OUT) GPIO.output(red, GPIO.HIGH) GPIO.output(yellow, GPIO.HIGH) GPIO.output(green, GPIO.HIGH) GPIO.output(blue, GPIO.HIGH)

LED'leri test ettikten sonra ayarlayın GPIO çıkışı Karşı GPIO.DÜŞÜK Her LED'i tekrar kapatmak için.

Kullandığınız tellerin rengi önemli olmasa da tahtayı daha kolay okumanıza yardımcı olacak anlam taşıyan renkler kullanmaya çalışın. Örneğin, topraklama kablolaması için genellikle siyah kablo kullanılır. Bu devrede telin rengini LED ışığın rengiyle eşleştirmek isteyebilirsiniz.

Işıkları düğmelerle kontrol etme

Panelinize bir düğme ekleyerek başlayın. Düğmenin hem toprak konektörüne hem de GPIO pinine bağlanması gerekecektir. Elektrik devresi şöyle görünmelidir:

Butonun LED'i kontrol etmesini sağlamak için kodumuza bazı kodlar eklememiz gerekiyor. Düğme ayarı, GPIO pininin çıkış yerine giriş olarak ayarlanması dışında LED ayarına benzer. Bu kod ayrıca Pi'nin, düğmenin doğru şekilde çalışmasını sağlamak için gerekli olan dahili çekme direncini de ayarlar.

GPIO.setup(32, GPIO.IN, pull_up_down=GPIO.PUD_UP)

Şimdi butona basılıp basılmadığını kontrol eden bir koda ihtiyacımız var.

oyun = True while game: redButtonState = GPIO.input(32) if redButtonState == 0: GPIO.output(red, GPIO.HIGH) time.sleep(1) GPIO.output(red, GPIO.LOW)

Programımızın düğmeye basılıp basılmadığını kontrol etmeye devam etmesini istiyoruz, bu nedenle tekrarlama komutunun kullanılması gerekir. süre. Yineleme asla yanlış olmayacağından, biz durdurma düğmesine basarak veya klavye kısayolunu kullanarak programı manuel olarak sonlandırana kadar kod çalışmaya ve düğmeyi kontrol etmeye devam eder. Ctrl + C.

Daha sonra GPIO pininin bize gönderdiği girişe başvurmayı kolaylaştırmak için bu bilgiyi değişkene kaydediyoruz. kırmızıButtonState. Buton girişimiz 0 olursa butona basıldığını anlarız.

Butona basıldığında kırmızı LED yanacaktır. Ardından bir saniye sonra LED sönecektir. Bu süreyi eklemek için fonksiyonu kullanıyoruz. zaman.uyku (1). Bunun işe yaraması için kodunuzun üstünde bulunan zaman kitaplığını içe aktarmanız gerekecektir.

Bir düğme tetiklendiğinde, her LED için bir tane olmak üzere üç tane daha ekleyebilirsiniz. Kodunuz şöyle görünmeli:

import random import time import RPi.GPIO as GPIO GPIO.setmode (GPIO.BOARD) GPIO.setwarnings(False) red = 18 yellow = 22 green = 24 blue = 26 GPIO.setup(red, GPIO.OUT) GPIO.setup(yellow, GPIO.OUT) GPIO.setup(green, GPIO.OUT) GPIO.setup(blue, GPIO.OUT) GPIO.setup(32, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(36, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(38, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(40, GPIO.IN, pull_up_down=GPIO.PUD_UP) game = True while Oyun: redButtonState = GPIO.input(32) eğer redButtonState == 0 ise: GPIO.output(red, GPIO.HIGH) time.sleep(1) GPIO.output(red, GPIO.LOW) yellowButtonState = GPIO.input(36) eğer yellowButtonState == 0 ise: GPIO.output(yellow, GPIO.HIGH) GPIO.input(40) eğer blueButtonState == 0 ise:GPIO.output(blue, GPIO.HIGH) time.sleep(1) GPIO.output(blue, GPIO.LOW)

Breadboard'unuz şu şekilde görünmelidir:

Artık tüm elektronik cihazlar hazır. Herhangi bir sorunla karşılaşırsanız kodunuzda hata olup olmadığını kontrol edin. Kodun tamamını şuradan indirebileceğinizi unutmayın: Pastebin Eğer sıkışıp kalırsan!

Oyunu oluştur

Bu proje gerçekten bir devre tahtası kullanmaya başlamak için bilmeniz gereken tüm temel bilgileri kapsıyor. Ancak bu becerileri bir oyuna dönüştürmek gerçekten neler yapabileceğinizi gösterecek!

Simon oyununda oyuncu bir dizi ışığın yanıp söndüğünü görür ve deseni hatırlaması gerekir. Tek bir ışıkla kolayca başlar. Her seviye, oyunu daha da zorlaştırmak için desene rastgele bir ışık ekler.

Deseni oluştur

Bu adım oldukça basittir. Bir dizi ışık düzenimizi tutacak (model). İkinci bir dizi, LED'lerimiz için GPIO pinlerini saklayacak (ışıklar). Oyunun her yinelemesinde desen setinin sonuna yeni bir rastgele ışık eklenecektir. Fonksiyonu kullanacağız rastgele. 0 LED'i temsil eden 3 ile 4 arasında bir sayı seçmek için.

desen = [] ışıklar = [kırmızı, sarı, yeşil, mavi] oyun boyunca: desene rastgele bir sayı ekle (0, 3).

Daha sonra deseni göstermek için ışıkları açmalıyız.

while game: pattern.append(random.randint(0,3)) for x in pattern: GPIO.output(lights[x], GPIO.HIGH) time.sleep(1) GPIO.output(lights[x], GPIO.LOW) time.sleep(0.5)

İki ışık arasında durmak önemlidir. Aynı ışığın bir desende art arda kullanılıp kullanılmadığını görmeyi kolaylaştırır.

Oyuncu girdisini alın

Daha sonra oyun, oyuncu ışıkların düzenini tahmin edene kadar beklemelidir. Program, desendeki her ışığı taramalı ve oynatıcı düğmeye basana kadar beklemelidir. Bu iç içe yinelemeler gerektirir:

for time.sleep(1) GPIO.output(red, GPIO.LOW) if yellowButtonState == 0: GPIO.output(yellow, GPIO.HIGH) waitingForInput = False time.sleep(1) GPIO.output(yellow, GPIO.LOW) if greenButtonState == 0: GPIO.output(green, GPIO.HIGH) waitingForInput = False time.sleep(1) GPIO.output(green, GPIO.LOW) if blueButtonState == 0: GPIO.output(blue, GPIO.HIGH) waitingForInput = False time.sleep(1) GPIO.output(blue, GPIO.LOW)

Yukarıdaki kodun çoğu, düğmeleri test etmek için yazdığımız kodu yeniden kullanır.

Oynatıcı girişini doğrulayın

Buradan oyuncunun doğru desene girip girmediğini kontrol etmek çok kolaydır. Bir düğmeye her bastığında oyun, bunun doğru düğme olup olmadığını kontrol edebilir. Bunu yapmak için bir ifade ekleyin if Her düğme girişi için diğerleri:

Eğer redButtonState == 0 ise: GPIO.output(red, GPIO.HIGH) waitForInput = False Eğer x != 0 ise: game = False time.sleep(1) GPIO.output(red, GPIO.LOW)

değişken x Tekrarın için Aşağıdaki ışık numarasına sahiptir. Kırmızı LED ilk konumda veya 0 numaradır. Eğer oyuncumuz desenimizde 0 varken kırmızı LED düğmesine basarsa haklıdır! Aksi takdirde oyunu kaybeder. Bu değişkeni yaratacak oyun Karşı yanlış Oyun döngüsünü durdurmak ve programı sonlandırmak için.

Tebrikler! Sıfırdan bir oyun yarattım!

Bir oyun oluşturmak, bu projeye yalnızca LED'ler ve düğmeler eklemekten daha fazla kod ekler. Arkadaşlarınıza ve ailenize gösterebileceğiniz son bir proje üzerinde çalışmak motivasyonunuzu korumanıza yardımcı olabilir.

Bu oyun oldukça basittir. Temel tasarımı geliştirmek için kendinize meydan okuyun. Belki oyuncu kaybederse ışıklar yanıp sönebilir. Belki oyuna ses eklemek için kendinize meydan okumak istersiniz. Tek sınır hayal gücünüzdür!

Peki, hayal gücünüz ve hangi cihazları kullanmanız gerekiyor. Artık görüntüleyebilirsiniz Raspberry Pi kullanarak akıllı TV oluşturmak için en iyi projeler

Üst düğmeye git