Skip to content

Przegląd kursu korzystania z platformy Raspberry Pi Pico w języku MicroPython, pełny kurs jest dostępny w szkołach: Akademia Nauki i Rozowoju w Żorach oraz Akademia EMT Kids w Gliwicach

Notifications You must be signed in to change notification settings

szymciem8/MicroPython-Public-Preview

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 

Repository files navigation

Raspberry Pi Pico Bird Shooter

Lekcja jest częścią pełnego kursu, który został przygotowany dla szkół: Akademia Nauki i Rozowoju w Żorach oraz Akademia EMT Kids w Gliwicach, gdzie można wziąć udział w pełnym szkoleniu. Kurs jest przystosowany dla dzieci i młodzieży w wieku od 12 do 14 lat. Ze względu na przeznaczenie kursu, programy częściowo zostały napisane w języku polskim.

Pełny program – kolejne zajęcia

Program testowy – plan na dzisiaj

Umożliwiamy sterowanie celownikiem przy pomocy żyroskopu.

Założenia projektu

Gra polegająca na zestrzeliwaniu przelatujących ptaków. Przez dwie kolejne lekcje będziemy tworzyć grę sterowaną poprzez żyroskop podłączony do Raspberry Pi Pico. Żyroskop będzie wykorzystany do ustawienia celownika na ekranie, który pozwoli nam na zestrzelenie przelatujących ptaków. Potrzebny układ elektroniczny nie jest skomplikowany, ale będziemy musieli zbudować go ponownie na następnych zajęciach.

Schemat projektu

Pico

Dokładamy kolejny przycisk, którego wartości wypisujemy w porcie szeregowym. Ten przycisk posłuży nam jako spust do wykorzystania w grze.

while True:
    katy = zmierz_kat(skalibrowane, 2)
 
    if nowa_kalibracja.value():
        offset_x=katy['GyX']
        offset_y=katy['GyY']
        offset_z=katy['GyZ']
    
    print("%.2f,%.2f,%.2f" % (katy['GyX']-offset_x,
                              katy['GyY']-offset_y,
                              katy['GyZ']-offset_z))

PC - Biblioteki do podpięcia

import serial
from serial import Serial
import pygame
import time
from pygame.locals import *
import random

PC funkcja cz. 1

Pobieramy dane z Pico i wykorzystujemy je do obliczenie pozycji wskaźnika. Dodatkowo możemy wyświetlić dane w konsoli, żeby sprawdzić ich poprawność. Dla ciekawskich można sprawdzić co oznaczają nazwyroll,pitchiyaw.

def render_celownika():
    global odczyty, ostatni_przycisk

    odczyty+=1
    dane = pico.readline()

    if dane:
        dane = dane.decode()
        dane = dane.split(',')

        #Obrót wokół osi Z
        yaw = float(dane[2])
        #obrót wokół osi X
        pitch = float(dane[0])
        #Przycisk spustu
        przycisk = int(dane[3])

        #print("%.2f, %.2f" %(yaw, pitch))

        #Obliczamy pozycję wskaźnika na podstawie odebranych kątów
        x = szerokosc_okna/2 * (1 - yaw/20)
        y = wysokosc_okna/2 * (1 + pitch/20)

Dalsza część funkcji rysującej wskaźnik

Dbamy o to, żeby wskaźnik nie wyszedł poza okno. Dodatkowo wprowadzamy warunek, który czyści port szeregowy czas co jakiś czas. Jak się okazuje, zbyt duża nieodczytanych danych może spowodować spowolnione działanie.

        #Jeżli pozycja wskaźnika będzie poza ekranem to go blokujemy
        if x > szerokosc_okna - 20: x = szerokosc_okna - 10
        if x < 0: x = 0

        if y > wysokosc_okna - 20: y = wysokosc_okna - 10
        if y < 0: y = 0

        #Po 200 odczytach czyścimy port szeregowy 
        if odczyty==200:
            odczyty=0
            #Czyszczenie portu 
            pico.flushInput()
            for i in range(5):
                dane=pico.readline()

        #Rysjemy wskaźnik
        do_narysowania = pygame.draw.rect(okno, pygame.Color(0,0,0),(x, y, 10, 10))
        pygame.display.update(do_narysowania)

PC pętla główna

Inicjujemy połączenie z Pico oraz tworzymy odpowiednie zmienne. Opcja DOUBLEBUF pozwoli na szybsze działanie programu.

#Tworzymy połączenie z portem szeregowym 
pico = serial.Serial(port = "COM3", baudrate=9600)

#Tworzymy grę w pygame
szerokosc_okna = 1200
wysokosc_okna = 800
pygame.init()
okno = pygame.display.set_mode((szerokosc_okna, wysokosc_okna), DOUBLEBUF)

#Zmienne globalne
odczyty=0
ostatni_przycisk=0

#GŁÓWNA PĘTLA
run=True
while run:
    okno.fill(pygame.Color(0,0,255))
    render_celownika()
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
                    
    pygame.display.update()

Koniec!

About

Przegląd kursu korzystania z platformy Raspberry Pi Pico w języku MicroPython, pełny kurs jest dostępny w szkołach: Akademia Nauki i Rozowoju w Żorach oraz Akademia EMT Kids w Gliwicach

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages