micro:bit workshop


micro:bit workshop

1. Úvod

1.1 Python

Python je veľmi populárny a všestranný programovací jazyk odporúčaný pre vyučovanie základov programovania. Práve preto postupne nahrádza iné programovacie jazyky na hodinách informatiky. Vo veľkom Python využívajú aj v Google, Dropbox, Európskej organizácii jadrového výskumu CERN, sociálnych sieťach Facebook, Pinterest a Instagram, či pri vyučovaní na prestížnej vysokej škole MIT.

Autorom jazyka Python je Guido van Rossum (prvá verzia je z 1989). V súčasnosti jazyk Python vyvíja a spravuje komunita, zastrešovaná medzinárodnou organizáciou Python Software Foundation (skratka PSF). Samotný jazyk je open-source.

Python je interpretovaný jazyk, a preto sa po dopísaní kódu ho neskompilujeme (ako napríklad C či Pascal) ale spustíme ho v interpreteri. Ten náš kód za chodu číta a prekladá na strojové inštukcie pre procesor. Preto je potrebné, aby sme na spustenie Python kódu mali na počítači nainštalovaný Python interpreter. (ako si vysvetlíme o schvíľu)

Odporúčame používať najnovšiu verziu Python3 (v súčasnosti je to Python3.6). Python2 je staršia verzia Pythonu a už nie je vhodné v nej programovať.

V čom sa Python líši snáď najviac od iných programovacích jazykov je práve komunika. Tá je tvorená profesionálmi, začiatočníkmi, učiteľmi i víkendovými programátormi a tak je veľmi rôznorodá. Po celom svete sa pravidelne organizujú konferencie PyCon (čiže PYthon CONference). Na Slovensku je táto konferencia organizovaná raz ročne občianskym združením SPy (Slovak Python User Group).

1.2 MicroPython

MicroPython je upravená verzia Pythonu, ktorá beží aj na menej výkonných zariadeniach. Vďaka tomu vieme v MicroPythone programovať mikroelektroniku a interagovať s okolitým svetom pomocou LED diód, senzorov, bzučiakov, motorčekov, atď. Takéto zariadenia sú zároveň rádovo lacnejšie ako počítače pre klasický Python. Obrovskou výhodou je fakt, že syntax je pre obe verzie jazyka rovnaká, a tak sa učiteľom aj žiakom stačí naučiť iba jeden jazyk.

Tak ako na spustenie Python kódu na počítači potrebuje nainštalovaný interpreter, tak aj pre MicroPython kód musíme na mikroprocesom najprv nainsťalovať MicroPython interpreter. To stačí spraviť raz a následne mu budeme už len posielať naše zdrojové kódy na preklad. Raz za čas sa ale oplatí MicroPython na zariadení preinštalovať na novšiu verziu, aby sme mali vždy čo najviac funkčný interpreter.

MicroPython interpreter vymyslel Damien George v roku 2013 pre vývojovú dosku pyboard (s mikroprocesorom STM32). V súčasnosti existuje viacero verzií MicoPythonu pre rôzne mikroprocesory. My budeme používať verziu pre micro:bit.

1.3 Čo je to micro:bit?

Malá edukačná doska vhodná pre využitie vrámci hodín informatiky na základných a stredných školách. Vďaka konektorom (tzv. pinom) je možné ňou programovať hardvér.

Ako môžem micro:bit programovať? Je možné programovať ho v MicroPythone, C, JavaScripte a cez Blockly (podobné Scratch).

2 Blokové programovanie (Blockly)

Online Blockly Editor (SK) je online editor pre programovanie micro:bitu cez grafický programovací jazyk. Pri tomto spôsobe programovania nie je potrebná inštalácia softvéru na počítač či administrátorské práva, stačí prístup na internet a internetový prehliadač.

2.1 Základné

Zobraziť reťazec - vypíše text na obrazovke

Zobraziť LED - zobrazí obrázok na obrazovke

2.2 Vstup

V tejto časti sa nachádzajú bloky, ktoré spustia kód pri nejakej udalosti - napríklad pri stlačení tlačidla, naklonení dosky alebo zatrasení.

2.3 Hudba

Microbit dokáže generovať aj zvuk, a to konkrétne na kolíku 0. Preto k nemu pripojíme jeden káblik mikrofónu (dátový) a druhý (zem) pripojíme k GND. Skúste si spustiť melódio svadba.

2.4 Radio

Micro:bit obsahuje aj vbudovaný komunikačný modul, a teda vedia medzi sebou navzájom komunikovať.

2.5 Cykly, Logiku, Premenné, Matematika

Tak ako v Scratch, aj Blockly obsahuje základné príkazy a konštrukcie. Zaujímavým môže byť vybrať náhodne od 0 po n, ktorý generuje náhodné čísla.

3 MicroPython

3.1 Online MicroPython Editor

Online MicroPython Editor (EN) je ďaľší online editor, no tento krát je určený pre tvorby MicroPython kódu. Ani pri tomto spôsobe programovania nie je potrebná inštalácia softvéru na počítač či administrátorské práva, stačí prístup na internet a internetový prehliadač.

# Add your Python code here. E.g.
from microbit import *


while True:
    display.scroll('Hello, World!')
    display.show(Image.HEART)
    sleep(2000)
  • from micobit import * - tento príkaz nám v kóde sprístupní všetku funkcionalitu knižnice microbit, vďaka ktorej vieme pristupovať k hardérovej funkcionalite micro:bitu.
  • while True: - tento príkaz nám bude donekonečna vykonávať kód, ktorý prislúcha do daného while cyklu
  • Indentácia . v Pythone (na rozdiel od iných jazykov) sa kód prislúchajúci do bloku neoznačuje zátvorkami, ale pomocou odsadzovania, čiže indentácie. Aby nejaký kód prislúchal pod príkaz while, musí byť odsadený aspoň o jeden tabulátor (štyri medzerníky)
  • display.scroll() vypíše daný reťazec na obrazovku
  • display.show(Image.HEART) vykreslí daný obrázok na obrazovku
  • sleep() - funkcia sleep pozastaví micro:bit na zadaný počet milisekúnd
  • poznámky - poznámky sa v Pythone tvoria mriežkou (#)

Ako ale zistíme, aké možné obrázky môžeme vykresliť? Na to nám slúži online micro:bit MicroPython dokumentácia, v ktorej je zoznam všetkých príkazov, ktoré je možné použiť.

3.2 Mu Editor

Mu (čoskoro v SK) je IDE pre písanie MicroPython kódu pre micro:bit, ako aj pre Python3 (skvelá alternatíva k IDLE). Je možné ho stiahnuť a spustiť bez inštalácie, alebo inštalovať pomocou nástroja pip. Pre plnú funkcionalitu je potrebné pri platforme Windows stiahnúť si driver pre micro:bit.

Mu editor

4 Zobrazovanie znakov na displeji

4.1 Zobrazenie textu - reťazcov

from microbit import *
display.scroll("Ahoj Turiec!")

návod v dokumentácii

Dokumentácia pre funkciu display.scroll()

4.2 Trvalé zobrazovanie textu

from microbit import *
while True:
    display.scroll("Ahoj Turiec!")

4.3 Zobrazovanie obrázkov

from microbit import *

display.show(Image.SAD)
sleep(1000)
display.show(Image.HAPPY)

Zoznam všetkých obrázkov je v dokumentácii

4.4 Vlastný obrázok

from microbit import *

boat = Image("05050:"
             "05050:"
             "05050:"
             "99999:"
             "09990")

display.show(boat)

Tento kód je možné skrátiť aj na

from microbit import *

boat = Image("05050:05050:05050:99999:09990")

display.show(boat)

Návod na tvorbu vlastných obrázkov je v dokumentácii

4.5 Zmena obrázku tlačidlami

from microbit import *

while True:
    if button_a.is_pressed():
        display.show(Image.HAPPY)
    else:
        display.clear()

Úloha 1: Pozmeň kód tak, aby sa pri stlačení tlačidla B zobrazil obrázok Image.SAD

Úloha 2: Pozmeň kód tak, aby sa pri stlačení oboch tlačidiel naraz zobrazil obrázok Image.CONFUSED

4.6 Naklonenie


from microbit import *

while True:
    gesture = accelerometer.current_gesture()
    if gesture == "face up":
        display.show(Image.HAPPY)
    else:
        display.show(Image.ANGRY)

Gestures:

  • up
  • down
  • left
  • right
  • face up
  • face down
  • freefall
  • 3g
  • 6g
  • 8g
  • shake

Úloha: Pomocou obrázkov Image.ARROW_N, Image.ARROW_E, Image.ARROW_S a Image.ARROW_W naprogramuj micro:bit tak, aby pri akomkoľvek naklonení smerovala šípka na obrazovke smerom hore.

5 Zvuk (Music & Speech)

Pripojenie reproduktora

5.1 Predprogramovaná hudba

import music

music.play(music.NYAN)
  • music - kinižnica na generovanie hudby na pine 0
  • music.NYAN - prehrá melódiu NYAN

micro:bit už má niekoľko predprogramovaných melódií, tie nájdete v - dokumentácii (pozri Music)

5.2 Písanie vlastnej hudby

import music

tune = ["C4:4", "D", "E", "C", "C", "D", "E", "C", "E", "F", "G:8",
        "E:4", "F", "G:8"]
music.play(tune)
  • C4:4 - nota C zo štvrtej oktávy s dĺžkou 4

5.3 Rolničky na micro:bite

Noty Noty

Rolničky noty

# Piesen Rolnicky
import music

tune = ["E:2", "E:2", "E:4", "E:2", "E:2", "E:4", "E:2", "G:2", "C:3", "D:1",
        "E:8", ]
music.play(tune)

Úloha: Doplň celú pieseň a zmeň jej tóninu

5.4 Zvukové efekty

import music

music.pitch(400, 1000)

Prvým argumentom je frekvencia a druhým dĺžka prehrávania frekvencie.

Viac o tvorení zvukových efektov pomocou funkcie music.pitch() nájdeš v dokumentácii

5.5 Tvorba melódie

import music

music.pitch(400, 1000)
music.pitch(600, 1000)
music.pitch(800, 1000)

Úloha: Naprogramuj jednoduchý dvojtónový alarm ktorý sa po 5 sekundách vypne

5.6 Tvorba melódie cez cykly

import music

for freq in [400, 600, 800]:
    music.pitch(freq, 1000)
import music

for freq in range(400, 1000, 200):
    music.pitch(freq, 1000)

5.7 Obrátená melódia

import music

for freq in [800, 600, 400]:
    music.pitch(freq, 1000)
import music

for freq in range(800, 200, -200):
    music.pitch(freq, 1000)

5.8 Jemnejšia melódia

Teraz zmenšíme jednotlivé skoky vo frekvenciách a aj dĺžky prehrávania jednotlivých tónov

import music

while True:
    for freq in range(880, 1760, 16):
        music.pitch(freq, 6)
    for freq in range(1760, 880, -16):
        music.pitch(freq, 6)

Úloha: Naprogramuj policajnú sirénu (inšpiruj sa touto zvučkou)

5.9 Rozprávajúci micro:bit

Speech setup

import speech

speech.say("Hello students! I am a microbit")

6 NeoPixel

6.1 Zasvietenie jednej LEDky

from microbit import *
import neopixel

np = neopixel.NeoPixel(pin1, 8)
np[0] = (255, 0, 0)
np.show()

6.2 Zasvietenie všetkých LEDiek

from microbit import *
import neopixel

np = neopixel.NeoPixel(pin1, 8)
np[0] = (255, 0, 0)
np[1] = (255, 0, 0)
np[2] = (255, 0, 0)
np[3] = (255, 0, 0)
np[4] = (255, 0, 0)
np[5] = (255, 0, 0)
np[6] = (255, 0, 0)
np[7] = (255, 0, 0)
np.show()

6.3 Zasvietenie všetkých LEDiek cyklom

from microbit import *
import neopixel

np = neopixel.NeoPixel(pin1, 8)

for i in [0, 1, 2, 3, 4, 5, 6, 7]:
    np[i] = (255, 0, 0)
np.show()

from microbit import *
import neopixel

np = neopixel.NeoPixel(pin1, 8)

for i in range(0, 8, 1):
    np[i] = (255, 0, 0)
np.show()

6.4 Jednosmerný Knight Rider

from microbit import *
import neopixel

np = neopixel.NeoPixel(pin1, 8)

while True:

    for i in range(0, len(np)):
        for led_id in range(0, len(np)):
            if i == led_id:
                np[led_id] = (0, 255, 0)
            else:
                np[led_id] = (0, 0, 0)
        sleep(100)
        np.show()

Úloha: Naprogramuj NeoPixel tak, aby sa LEDka odrazila naspäť

6.5 FadeIn and FadeOut

from microbit import *
import neopixel

np = neopixel.NeoPixel(pin1, 8)

while True:

    # fade in
    for i in range(0, 256, 1):
        for led_id in range(len(np)):
            np[led_id] = (0, i, 0)
        np.show()

    # fade out
    for i in range(255, 0, -1):
        for led_id in range(len(np)):
            np[led_id] = (0, i, 0)
        np.show()

    # clear
    for i in range(len(np)):
        np[i] = (0, 0, 0)
    np.show()

6.6 Náhodné generovanie farieb

from microbit import *
import neopixel
from random import randint, seed

seed(5)
np = neopixel.NeoPixel(pin1, 8)

while True:

    for i in range(0, len(np)):
        red = randint(0, 255)
        green = randint(0, 255)
        blue = randint(0, 255)

        np[i] = (red, green, blue)

        np.show()
        sleep(500)

Úloha: Pozmeň program tak, aby každú sekundu zmenil farby všetkých LED diód naraz

7 Vstup na kolíky

from microbit import *

while True:
    if pin2.read_digital():
        display.show(Image.HAPPY)
    else:
        display.show(Image.SAD)

Micro:bit pinout

8 Banánové piano

Teraz zameň read_digital za is_touched. Namiesto kábliku použi na prepojenie kúsky alobalu a ruky. Vyskúšaj to aj cez banán, jablko či pomaranč.

Micro:bit pinout

from microbit import *
import music

tune = ["C4:4", "D", "E", "C", "C", "D", "E", "C", "E", "F", "G:8",
        "E:4", "F", "G:8"]
i = 0

while True:
    if pin2.is_touched():
        music.play(tune[i])
        i += 1
        if i == len(tune):
            i = 0

Toto naše piano vieme rozšíriť ešte aj o svetlo - pri každom stlačení klávesu náhodne zmeníme všetky farby na LED pásiku.

9 Hra na reflexy

TBA

10 Diaľkový vypínač - bezdrôtová komunikácia

10.1 Bezdrôtové vysielanie a prijímanie na micro:bitoch

# Vysielanie
import radio

radio.on()
radio.send('sprava')
# Prijimanie
import radio

radio.on()

while True:
    sprava = radio.receive()
    if sprava:
        print(sprava)

10.2 Bezdrôtový vypínač (problémový)

# Vysielanie
import radio
from microbit import *

radio.on()

while True:
    if button_a.was_pressed():
        radio.send('on')
    elif button_b.was_pressed():
        radio.send('off')
# Prijimanie
import radio
from microbit import *

radio.on()

while True:
    sprava = radio.receive()
    if sprava == 'on':
        display.show(Image.HAPPY)
    elif sprava == 'off':
        display.show(Image.SAD)

10.3 Bezdrôtový vypínač so špeciálnym protokolom

# Vysielanie
import radio
from microbit import *

radio.on()

while True:
    if button_a.was_pressed():
        radio.send('adam-janka-on')
    elif button_b.was_pressed():
        radio.send('adam-janka-off')
# Prijimanie
import radio
from microbit import *

radio.on()

while True:
    sprava = radio.receive()
    if sprava == 'adam-janka-on':
        display.show(Image.HAPPY)
    elif sprava == 'adam-janka-off':
        display.show(Image.SAD)

10.4 Wireless Sniffer - Odchytávanie cudzích správ

# Sniffer
import radio
from microbit import *

radio.on()

while True:
    message = radio.receive()
    if message:
        print(message)

11 Robot buggy

Návod na ovládanie motorov

Návod na ovládanie LED diód

# Kod pre Robota
from microbit import *
import radio

radio.on()

while True:
    try:
        msg = radio.receive()
    except Exception:
        continue
    if msg is None:
        pin1.write_analog(0)
        pin2.write_analog(0)
    else:
        if msg == "F":
            display.show(Image.ARROW_N)
            pin1.write_analog(1)
            pin2.write_analog(180)
        elif msg == "L":
            display.show(Image.ARROW_E)
            pin1.write_analog(180)
            pin2.write_analog(180)
        elif msg == "R":
            display.show(Image.ARROW_W)
            pin1.write_analog(1)
            pin2.write_analog(1)
    sleep(10)
    display.clear()
# Ovladac
from microbit import *
import radio

radio.on()

while True:
    if accelerometer.get_y() < -500:
        radio.send("F")
        display.show(Image.ARROW_N)
    elif accelerometer.get_x() > 500:
        radio.send("R")
        display.show(Image.ARROW_E)
    elif accelerometer.get_x() < -500:
        radio.send("L")
        display.show(Image.ARROW_W)
    sleep(10)

micro:bit pinball game

Piano

micro:bit reaction game

robot so špeciálnym ovládačom

playing Star Wars music with Blockly

Room alarm Blockly

To mention:

  • Relay, Humidity sensors, PIR sensors, Rain sensor
  • Robotics

Odkazy a inšpirácia

Kde kúpiť micro:bit

Slovensko

Česko

Kitronics (Veľká Británia)

Ďalšie obchody v UK

Učíme s Hardvérom

Projekt Učíme s Hardvérom je iniciatívou občianskeho združenia SPy, ktorého cieľom je priniesť zaujímavejšie hodiny informatiky do škôl. Viac info nájdete na tomto odkaze.

SPy o.z. a PyConSK

Projekt je zastrešený občianskym združením SPy, ktoré organizuje každoročnú medzinárodnú konferenciu PyCon SK a pravidelné mesačné meetupy v Bratislave. Súčasťou konferencie je aj sekcia pre učiteľov, EduTrack, so zameraním na vyučovanie programovania v jazyku Python, oboznámenie učiteľov s novými trendmi a možnosťami v oblasti programovania.

Kontakt

Feedback

Feedback Formulár