| Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung |
| gf_informatik:microbit_programmieren_grundlagen [2023-09-18 06:42] – [Distanzmesser] hof | gf_informatik:microbit_programmieren_grundlagen [2025-11-19 14:27] (aktuell) – [Beschleunigung messen] gra |
|---|
| Eine kurze Übersicht zu den wichtigsten Funktionen in englischer Sprache findest du im [[https://microbit.org/get-started/user-guide/python/|Microbit-Python-Guide]] | Eine kurze Übersicht zu den wichtigsten Funktionen in englischer Sprache findest du im [[https://microbit.org/get-started/user-guide/python/|Microbit-Python-Guide]] |
| |
| In der [[https://microbit-micropython.readthedocs.io/en/latest/index.html|Microbit-Micropython-Dokumentation]] findest du //alle// Informationen zur Programmierung des Micro-Bit. | In der [[https://microbit-micropython.readthedocs.io/en/stable/|Microbit-Micropython-Dokumentation]] findest du //alle// Informationen zur Programmierung des Micro-Bit. |
| |
| ===== - Getting started ===== | ===== - Getting started ===== |
| |
| Für die Programmierung des Microbits nutzen wir den Online-Editor: | Für die Programmierung des Microbits nutzen wir den Online-Editor: |
| - **Online-Editor:** | * **Online-Editor:** |
| - Link: https://python.microbit.org/ | * Link: https://python.microbit.org/ |
| - Verwende Chrome Browser (oder Edge) | * Verwende den Chrome Browser (oder Edge) |
| - Tipp zum **Speichern:**: | * Tipp zum **Speichern:** |
| - Kopiere deinen Code jeweils in ein Word Dokument. | * Speichere das Python-Script über die drei Punkte neben dem `Save` Button: {{.:microbit_programmieren_grundlagen:pasted:20250813-052046.png?nolink&300}}. |
| - Verwende z.B. folgende Vorlage: {{ :gf_informatik:mikktrl_rob_aufgaben_template.docx |Template Aufgaben}} | * Speichere die Dateien in `OneDrive - Kantonsschule Romanshorn/2M/Informatik/Robotik` |
| - Bonus bei diesem Vorgehen: schöne Übersicht von allen deinen Codes! | |
| |
| <nodisp 2> | <nodisp 2> |
| * Die zweite Zeile sagt dem Display, dass es die Zeichenkette "Hello, World!" als Laufschrift anzeigen soll – oder etwas genauer formuliert: Vom ''display''-Objekt wird die Funktion ''scroll()'' aufgerufen und dieser Funktion wird die Zeichenkette "Hello, World!" übergeben. | * Die zweite Zeile sagt dem Display, dass es die Zeichenkette "Hello, World!" als Laufschrift anzeigen soll – oder etwas genauer formuliert: Vom ''display''-Objekt wird die Funktion ''scroll()'' aufgerufen und dieser Funktion wird die Zeichenkette "Hello, World!" übergeben. |
| |
| Über das display-Objekt kannst du auf weitere Display-Funktionen zugreifen. Wenn du im Mu-Editor ''display'' und dann einen Punkt eintippst, erhältst du eine Liste mit allen Display-Funktionen. Die wichtigsten sind ''clear()'' zum Löschen des Displays und ''show()'' zur Anzeige von einem oder mehreren Bildern. | Über das `display`-Objekt kannst du auf weitere Display-Funktionen zugreifen. Wenn du im Mu-Editor ''display'' und dann einen Punkt eintippst, erhältst du eine Liste mit allen Display-Funktionen. Die wichtigsten sind ''clear()'' zum Löschen des Displays und ''show()'' zur Anzeige von Text oder Bildern. |
| |
| ==== Bilder anzeigen ==== | ==== Bilder anzeigen ==== |
| Über das ''Image''-Objekt kannst du auf eine Reihe von vordefinierten Bildern zugreifen. | Über das ''Image''-Objekt kannst du auf eine Reihe von vordefinierten Bildern zugreifen. |
| |
| [[https://microbit-micropython.readthedocs.io/en/latest/tutorials/images.html|Hier findest du eine Übersicht über die Bilder und eine Anleitung zum Erstellen von eigenen Bildern und Animationen.]] | [[https://microbit-micropython.readthedocs.io/en/stable/tutorials/images.html|Hier findest du eine Übersicht über die Bilder und eine Anleitung zum Erstellen von eigenen Bildern und Animationen.]] |
| |
| ==== Animationen mit Bilder-Listen ==== | ==== Animationen mit Bilder-Listen ==== |
| In Python kannst du auf einfache Weise Listen erstellen, [[gf_informatik:programmieren_iii#listen|das hast du hier gelernt]]. Im folgenden Code wird eine Liste von Bildern erstellt und angezeigt. | In Python kannst du auf einfache Weise Listen erstellen. Im folgenden Code wird eine Liste von Bildern erstellt und angezeigt. |
| |
| <code python> | <code python> |
| Sobald du nun den Stromkreis zwischen Ground (GND) und Pin 0 schliesst (beide gleichzeitig berühren oder mit Kabel verbinden), sollte nun ein Happy-Smile angezeigt werden. | Sobald du nun den Stromkreis zwischen Ground (GND) und Pin 0 schliesst (beide gleichzeitig berühren oder mit Kabel verbinden), sollte nun ein Happy-Smile angezeigt werden. |
| |
| Für mehr Infos siehe hier: https://microbit-micropython.readthedocs.io/en/latest/pin.html | Für mehr Infos siehe hier: https://microbit-micropython.readthedocs.io/en/stable/pin.html |
| ===== - Beschleunigungssensor ===== | ===== - Beschleunigungssensor ===== |
| |
| </code> | </code> |
| |
| Innerhalb der Endlos-Schleife ''while True'' werden zwei Befehele ständig wiederholt: | Innerhalb der Endlos-Schleife ''while True'' werden zwei Befehle ständig wiederholt: |
| * ''sleep(100)'' lässt das Programm während 100 Millisekunden in der Funktion sleep() verharren, | * ''sleep(100)'' lässt das Programm während 100 Millisekunden in der Funktion sleep() verharren, |
| * in der zweiten Zeile sind zwei Funktionen ineinander verschachtelt: | * in der zweiten Zeile sind zwei Funktionen ineinander verschachtelt: |
| * Die Funktion ''get\_values()'' gibt Werte in der Einheit **mg** zurück, $1000$ mg entsprechen 1 g: $1 g = 9.81 \text{m}/\text{s}^2$. | * Die Funktion ''get\_values()'' gibt Werte in der Einheit **mg** zurück, $1000$ mg entsprechen 1 g: $1 g = 9.81 \text{m}/\text{s}^2$. |
| * Standardmässig beträgt der Messbereich des Beschleunigungssensors +/- 2 $g$. | * Standardmässig beträgt der Messbereich des Beschleunigungssensors +/- 2 $g$. |
| * Mit ''get\_values()'' erhältst du die Beschleunigungen $a_x,a_y,a_z$ für die drei einzelnen Koordinaten. Die **Gesamtbeschleunigung** (Betrag der Beschleunigung) ist dann gegeben durch den Satz von Pythagoras in 3D: $$a = \sqrt{a_x^2 + a_y^2 + a_z^2}$$ **Achtung:** Dieser Wert ist immer positiv. Du verlierst damit also sämtliche Informationen über die Richtung der Beschleunigung. | * Mit ''get\_values()'' erhältst du die Beschleunigungen $a_x,a_y,a_z$ für die drei einzelnen Koordinaten. Die **Gesamtbeschleunigung** (Betrag der Beschleunigung) ist dann gegeben durch den Satz von Pythagoras in 3D: $$a = \sqrt{a_x^2 + a_y^2 + a_z^2}$$ |
| | In python geht das so: |
| | <code python> |
| | import math |
| | # ... |
| | ax, ay, az = accelerometer.get_values() |
| | a = math.sqrt(ax*ax + ay*ay + az*az) |
| | </code> |
| | |
| | **Achtung:** Die Gesamtbeschleunigung ist immer positiv. Du verlierst damit also sämtliche Informationen über die Richtung der Beschleunigung. |
| |
| |
| Die Funktion ''is_gesture()'' gibt ''True'' zurück, wenn der Beschleunigungssensor die in den Klammern angegebene Geste erkannt hat. Sonst gibt sie ''False'' zurück. | Die Funktion ''is_gesture()'' gibt ''True'' zurück, wenn der Beschleunigungssensor die in den Klammern angegebene Geste erkannt hat. Sonst gibt sie ''False'' zurück. |
| |
| [[https://microbit-micropython.readthedocs.io/en/latest/accelerometer.html|Hier findest du eine Übersicht über Funktionen des Beschleunigungssensors.]] | [[https://microbit-micropython.readthedocs.io/en/stable/accelerometer.html|Hier findest du eine Übersicht über Funktionen des Beschleunigungssensors.]] |
| |
| [[https://microbit-micropython.readthedocs.io/en/latest/tutorials/gestures.html|Hier findest du eine Übersicht über alle Gesten und eine Anleitung dazu, wie du aus deinem Microbit einen Magic8Ball programmieren kannst.]] | [[https://microbit-micropython.readthedocs.io/en/stable/tutorials/gestures.html|Hier findest du eine Übersicht über alle Gesten und eine Anleitung dazu, wie du aus deinem Microbit einen Magic8Ball programmieren kannst.]] |
| |
| |
| </code> | </code> |
| |
| * Die Zeile ''import music'' importiert das Modul ''music''. Dieses enthält die Funktionen ''pitch()'', ''play()'' und [[https://microbit-micropython.readthedocs.io/en/latest/music.html#functions|weitere Funktionen.]] | * Die Zeile ''import music'' importiert das Modul ''music''. Dieses enthält die Funktionen ''pitch()'', ''play()'' und [[https://microbit-micropython.readthedocs.io/en/stable/music.html#functions|weitere Funktionen.]] |
| * Der Funktion ''pitch()'' wird die //Frequenz// des Tons in Hertz und die //Dauer// des Tons in Millisekunden übergeben. | * Der Funktion ''pitch()'' wird die //Frequenz// des Tons in Hertz und die //Dauer// des Tons in Millisekunden übergeben. |
| * Wenn du kurz testen willst, welche Frequenz wie klingt, [[https://musiclab.chromeexperiments.com/Oscillators/|klicke hier]]. | * Wenn du kurz testen willst, welche Frequenz wie klingt, [[https://musiclab.chromeexperiments.com/Oscillators/|klicke hier]]. |
| ==== Melodien erstellen und abspielen ==== | ==== Melodien erstellen und abspielen ==== |
| |
| Das Modul ''music'' enthält schon [[https://microbit-micropython.readthedocs.io/en/latest/music.html#built-in-melodies|ein paar vordefinierte Melodien.]] Folgender Code spielt eine solche Melodie ab: | Das Modul ''music'' enthält schon [[https://microbit-micropython.readthedocs.io/en/stable/music.html#built-in-melodies|ein paar vordefinierte Melodien.]] Folgender Code spielt eine solche Melodie ab: |
| <code python> | <code python> |
| from microbit import* | from microbit import* |
| my_melody = ['g3:4', 'g3:4', 'b3:4', 'g3:4','c4:4', 'f4:4', 'c4:4', 'g3:8'] | my_melody = ['g3:4', 'g3:4', 'b3:4', 'g3:4','c4:4', 'f4:4', 'c4:4', 'g3:8'] |
| |
| music.set_tempo(bpm = 180) # 120 Schläge pro Minute wäre Standard | music.set_tempo(bpm = 180) # Standardeinstellung: 120 Schläge pro Minute (bpm) |
| music.set_tempo(ticks = 8) # 8 Schläge pro Takt ist Standard | music.set_tempo(ticks = 8) # Standardeinstellung: 4 Schläge pro Takt |
| |
| music.play(my_melody) | music.play(my_melody) |
| 1. Konvertiere das Bild in einen String: `s = repr(Image.HAPPY)` | 1. Konvertiere das Bild in einen String: `s = repr(Image.HAPPY)` |
| 1. Entferne alles, so dass String noch die Form `s = '00000:00000:00900:00000:00000'` hat. | 1. Entferne alles, so dass String noch die Form `s = '00000:00000:00900:00000:00000'` hat. |
| | 1. Mit [[https://docs.python.org/3/library/stdtypes.html#str.removeprefix|str.removeprefix]] und `str.removesuffix` kannst du die unnötigen Teile entfernen. |
| 1. Versende diesen String. | 1. Versende diesen String. |
| 1. Wandle den empfangenen String mit `Image()` wieder in ein Bild um und zeige es an. | 1. Wandle den empfangenen String mit `Image()` wieder in ein Bild um und zeige es an. |
| Zur Installation des Codes lädst du [[https://github.com/tkilla77/maqueen/releases/latest/download/maqueen.hex|maqueen.hex]] herunter und auf den Microbit drauf (an einfachsten: Datei auf die Seite ziehen). | Zur Installation des Codes lädst du [[https://github.com/tkilla77/maqueen/releases/latest/download/maqueen.hex|maqueen.hex]] herunter und auf den Microbit drauf (an einfachsten: Datei auf die Seite ziehen). |
| * Alternative: Lade [[https://github.com/tkilla77/maqueen/blob/master/maqueen/maqueen.py|maqueen.py]] und füge die Datei deinem Projekt hinzu. | * Alternative: Lade [[https://github.com/tkilla77/maqueen/blob/master/maqueen/maqueen.py|maqueen.py]] und füge die Datei deinem Projekt hinzu. |
| | |
| | **Beachte:** Du benötigst jeweils **zwei** Dateien in deinem Projekt: `maqueen.py` ist die Bibliothek für die Motorensteuerung, diese musst du weder lesen noch verstehen. In der Hauptdatei `main.py` ist dein eigener Code, der die Motorensteuerung benützt (mit `from maqueen import *`). |
| |
| === Distanzmesser === | === Distanzmesser === |
| |
| chassis.forward(speed=100) # Vorwärts fahren mit Geschwindigkeit 100 | chassis.forward(speed=100) # Vorwärts fahren mit Geschwindigkeit 100 |
| | sleep(1000) # 1s weiterfahren |
| chassis.stop() # Stoppen | chassis.stop() # Stoppen |
| chassis.left() # Links drehen | chassis.left() # Links drehen bis auf weiteres |
| | sleep(500) # Wenden während einer halben Sekunde |
| | chassis.stop() # Wieder anhalten |
| </code> | </code> |
| |