Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/szymciem8/micropython-public-preview
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
https://github.com/szymciem8/micropython-public-preview
course micropython python raspberry-pi raspberry-pi-pico
Last synced: 19 days ago
JSON representation
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
- Host: GitHub
- URL: https://github.com/szymciem8/micropython-public-preview
- Owner: szymciem8
- Created: 2021-12-02T13:23:29.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2022-01-05T23:01:08.000Z (about 3 years ago)
- Last Synced: 2024-11-10T23:36:06.215Z (3 months ago)
- Topics: course, micropython, python, raspberry-pi, raspberry-pi-pico
- Language: Python
- Homepage:
- Size: 5.74 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 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
![](img/Obraz1.gif)## Program testowy – plan na dzisiaj
![](img/Obraz2.gif)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
![](img/Obraz3.png)
# 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_przyciskodczyty+=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 = 0if 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!