Differences

This shows you the differences between two versions of the page.

Link to this comparison view

sde:laboratoare:02_microbit_ro [2021/02/12 19:28]
alexandra.state2607 [Scrierea primului program în editorul de cod online]
— (current)
Line 1: Line 1:
-====== Laborator 02 - Set up BBC micro:bit ====== 
- 
-==== Resurse ==== 
-[[https://​microbit-micropython.readthedocs.io/​en/​v2-docs/​| Documentație BBC micro:bit MicroPython]] 
- 
-<​hidden>​ 
-Mai trebuie explicat cum sa folosesca simulatorul de la https://​github.com/​CodeGuild-co/​PythonEditor 
- 
-Pune si un link catre toata documentatia https://​microbit-micropython.readthedocs.io/​en/​v2-docs/​. Poti face asta intr-o sectiune de 
-resurse la inceput. 
- 
-Mai scrie ca vom folosi doua variante de programare: MicroPython (asta de aici) si MakeCode (Python facut de Microsoft) 
-</​hidden>​ 
- 
-===== Obiectivele laboratorului ===== 
-  * Conectarea micro:​bit-ului la PC 
-  * Încărcarea programelor pe micro:bit 
- 
- 
- 
- 
-===== Prezentare BBC micro:bit V2===== 
-BBC micro:bit este o placă de dezvoltare care folosește un **microcontroller**. Scopul acestui device este de a oferi studenților un bun start pentru a începe devoltarea competențelor în programare. Micro:bit V2 este un ARM Cortex M4, mic, ușor de utilizat. Este prevăzut cu 25 de LED-uri, pe care se pot afișa mesaje sau imagini, cu acclerometru pentru a detecta mișcarile, busolă, bluetooth, două butoane prin care se poate intercționa cu user-ul si alți senzori pe care-i vom descoperi pe parcursul laboratorului. 
- 
- 
-Programele se scriu pe PC și sunt încărcate pe BBC micro:bit, acestea rămân în memoria [[https://​www.techopedia.com/​definition/​24481/​flash-memory#:​~:​text=Flash%20memory%20is%20a%20non,​cameras%20and%20solid%2Dstate%20drives.|flash]] și se executa atunci când microcontroller-ul este alimentat. 
- 
-Ce este un microcontroller?​ 
-Microcontroller-ul este un calculator micșorat într-un singur chip, care poate rula câte un program o dată si consuma cu mult mai puțină decât un laptop sau un calculator. În plus, acestea sunt bune în a controla și a detecta semnalele electrice prin intermediul pinilor. 
-Acestea se găsesc peste tot, de exemplu ceasul digital, cuptorul cu microunde, mouse-ul etc. sunt controlate de microcontrollere. 
-Pentru mai multe informații despre acestea poți accesa acest [[https://​www.allaboutcircuits.com/​technical-articles/​what-is-a-microcontroller-introduction-component-characteristics-component/​|link]]. 
- 
- 
-{{ :​sde:​laboratoare:​microbitv2.png?​600 |}} 
- 
-====== Set up ====== 
- 
-În acest laborator, pentru a scrie programe pe micro:bit vom folosi MicroPython,​ un limbaj de programare creat pentru a lucra cu microcontrollere. Acesta este un subset al limbajului de programare numit Python. 
- 
-Dacă ai BBC micro:bit V2 urmează instrucțtiunile de la [[https://​ocw.cs.pub.ro/​courses/​sde/​laboratoare/​02_microbit_ro?&#​scrierea_primului_program_in_editorul_de_cod_online|secțiunea urătoare]]. 
-===== Connectarea micro:​bit-ului la PC ===== 
- 
-Primul pas pentru a conecta microcontroller-ul la calculator este să ne folosim de cablul micro USB din kit. Introduceți capatul USB tip B în partea de sus a micro:​bit-ului,​ iar celălalt capăt în calculator. ​ 
-    
-===== Scrierea primului program în editorul de cod online ===== 
- 
-Pentru desfășurarea acestui laborator vom scrie programele într-un editor de cod online, numit [[https://​python.microbit.org/​v/​2 
-|Makecode]] creat de Microsoft. 
- 
-==== Exemplul 1 ==== 
- 
-Primul program pe care îl vom scrie va fi afișarea textul “Hello” pe cele 5 LED-uri, urmat de abrevierea “SdE”, care va fi stocat într-o variabilă. 
-    
-<code python> 
-from microbit import display ​ #import "​diplay"​ from microbit library 
- 
-name = "​SdE"​ #​declaration of a variable with a String 
- 
-#all the code that is idented under the loop belongs to it 
-while True: #infinite looop 
-    # "​display"​ is an object that refers to the LEDs, this method allows us to control them 
-    display.scroll("​HELLO"​ + " " + name) # concatenation of Strings 
-    ​ 
-</​code>​ 
- 
-    
-===== Încărcarea pe micro:bit ===== 
- 
-Transferul de program se numește flashing deoarece programul este copiat în memoria flash a micro:​bit-ului. 
- 
-==== Metoda 1: Incarcarea fisierului .hex pe micr:obit ==== 
- 
-După conectarea microcontroller-ului în calculator va aparea “MICROBIT” ca un stick de memorie. 
- 
-Următorul pas este sa salvam programul din editorul de cod  ca fișier .hex.  
-Se apasă pe butonul "​Load/​Save",​ apoi acestase downloadează făcând click pe “Download Project Hex”, așa cum este reprezentat în imaginile de mai jos:  
- 
-{{ :​sde:​laboratoare:​load.png?​250 |  }} 
-{{ :​sde:​laboratoare:​downloadhex.png?​250 |}} 
- 
-Ultimul pas pentru a încarca programul pe micro:bit este să deschideți folder-ul unde s-a salvat fisierul .hex downloadat și să-l copiați în “MICROBIT”. Programul se va compila automat pe microcontroller. ​ 
- 
-==== Metoda 2: Direct flash ==== 
- 
-Pentru această metodă este suficient să se utilizeze doar editorul de cod online dintr-un browser **Chrome** sau **Edge**. 
-Primul pas este să se conecteze placuța apăsând pe butonul “Connect” din meniul editorului de cod. 
- 
-{{ :​sde:​laboratoare:​connect_editor.png?​250 | }} 
-  
-Va apărea o fereastra similara cu cea de jos. Tot ce rămane de facut este să faceți click pe placuta “BBCmicrobit” pe care editorul o dectează, apoi click pe butonul “Connect”. 
- 
-{{  : sde:​laboratoare:​connect.png?​250 | }} 
- 
-Ultimul pas pentru a flash-ui programul este să apasați pe butonul “Flash”. Este posibil să așteptați câteva secunde pana când programul va fi încarcat pe placută. 
- 
-{{ :​sde:​laboratoare:​flash.png?​250 | }} 
- 
- 
-===== Input devices sau butoane ===== 
- 
-În schema microcontroller-ului prezentată anterior, se poate observa faptul că [[https://​ocw.cs.pub.ro/​courses/​sde/​laboratoare/​02_microbit_ro?&#​prezentare_bbc_microbit|micro:​bit-ul]] are trei butoane. ​ 
- 
-Cel de pe spate este pentru **reset**. Dacă acest buton este apăsat timp de cinci secunde microcontroller-ul va opri rularea programului care este încarcat. Totodată, dacă butonul de reset este apăsat scurt programul care este flash-uit pe placuță se va reseta. ​ 
- 
-Pe partea din față se pot observa două butoane A și B, care pot fi accesate în cod astfel //​button_a//​ și //​button_b//​. Acestea au o metoda //​is_pressed()//,​ care va returna //True// dacă butonul este apăsat, în caz contrar metoda va returna //False//. 
- 
-În acest exemplu vom folosi condiționalul “if” sau “if statement”. 
- 
-<code python> 
-# Simple decision 
-a = 33 
-b = 200 
-if b > a: 
-  print("​b is greater than a") 
-</​code>​ 
- 
-<code python> 
-# Use "​elif"​ to add an additional condition 
-a = 33 
-b = 33 
-if b > a: 
-  print("​b is greater than a") 
-elif a == b: 
-  print("​a and b are equal"​) 
-</​code>​ 
- 
-<code python> 
-# The "​else"​ keyword takes anything that has not been included before 
-a = 200 
-b = 33 
-if b > a: 
-  print("​b is greater than a") 
-elif a == b: 
-  print("​a and b are equal"​) 
-else: 
-  print("​a is greater than b") 
-</​code>​ 
- 
-<code python> 
-# Else without elif 
-a = 200 
-b = 33 
-if b > a: 
-  print("​b is greater than a") 
-else: 
-  print("​b is not greater than a") 
-</​code>  ​ 
- 
-==== Exemplul 2 ==== 
- 
-Programul urmator va afișa pe display litera ”A” daca butonul A este apăsat, respectiv litera “B” daca butonul B este apăsat. Dacă niciun buton nu este apăsat va afișa pe dislapay o imagine, care reprezintă un emoticon confuz. 
- 
-<code python> 
-from microbit import display, button_a, button_b, Image  
- 
-while True:   #​infinite looop 
-    if button_a.is_pressed():​ #check if the button A is pressed 
-        display.scroll("​A"​) 
-    elif button_b.is_pressed():​ #check if the button B is pressed 
-        display.scroll("​B"​) 
-    else: 
-        display.show(Image.CONFUSED) 
-</​code>​ 
- 
- 
-===== Accelerometru. Gesturi ===== 
- 
-Micro:bit poate să recunoască gesturi precum înclinare sau scuturare. ​ 
-Pe spatele microntroler-ului,​ în partea de jos, se poate vedea un chip mic, care reprezintă un **accelerometru**,​ numit [[https://​ocw.cs.pub.ro/​courses/​sde/​laboratoare/​02_microbit_ro?&#​prezentare_bbc_microbit|"​Compass and Accelerometer”]]. ​ Acesta poate măsura acclerarea în toate cele trei dimensiuni, anume accelerarea stânga-dreapta,​ accelerarea față-spate și accelerarea sus-jos. 
- 
-Ce este un accelreometru?​ Un acclerometru are rolul de a măsura și a analiza accelerațiile liniare și unghiulare, de exemplu, masinile moderne folosesc un accelerometru care detectează un accident pentru a declansa airbag-urile. 
- 
-==== Exemplul 3 ==== 
-În acest exemplu vom explora acclerometrul afișând pe display-ul micr:​obit-ului un pătrat dacă acesta este înclinat către stânga, un tringhi dacă acesta este înclinat către dreapta și un diamant dacă este pus cu fața în sus. 
- 
-<code python> 
-from microbit import display, accelerometer,​ Image 
- 
-while True: 
-    if accelerometer.current_gesture() == "​left":​ 
-        display.show(Image.SQUARE) 
-    elif accelerometer.current_gesture() == "​right":​ 
-        display.show(Image.TRIANGLE) 
-    elif accelerometer.current_gesture() == "face up": 
-        display.show(Image.DIAMOND) 
-    else: 
-        display.clear() 
-</​code>​ 
- 
-===== Direcții. Busolă ===== 
- 
-Senzorul pentru [[https://​www.youtube.com/​watch?​v=a3P6LWwPBqM&​feature=emb_logo|busolă]] deceteaza câmpuri magnetice ale Pământului și este amplasat tot pe spatele micro:​bit-ului,​ precum acclerometrul. Acesta este folosit pentru a decta dacă un magnet se afla prin preajma micro:​bit-ului sau pentru navigare, poate arata direcțiile Nord, Sud, Est și Vest. 
- 
-==== Exemplul 4 ==== 
- 
-În acest exemplu vom vedea cum micr:​obit-ul poate fi folosit ca o busolă. __Atenție__:​ Imediat după ce ați rulat codul trebuie să așteptați puțin pană se afisează textul care spune “TITLING FILL”, iar apoi pe rând se va afișa căte un LED; trebuie să înclinați micro:​bit-ul până display-ul se va lumina complet. 
- 
-<code python> 
-from microbit import display, compass 
-compass.calibrate() 
- 
-while True: 
-    degrees = compass.heading() 
-    if degrees < 45 or degrees > 315: 
-        display.show('​N'​) 
-    elif degrees < 135: 
-        display.show("​E"​) 
-    elif degrees < 225: 
-        display.show("​S"​) 
-    elif degrees < 315: 
-        display.show("​W"​) 
-    else: 
-        display.show('​ ') 
-</​code>​ 
- 
-===== Microfonul și Speaker-ul ===== 
- 
-BBC micro:bit v2 are fixat pe spate microfonul, iar pe partea din față se observa indicatorul,​ care lumineaza atunci cand acesta aste accesat. Acesta poate măsura nivelul de sunet din jurul plăcuței și poate reacționa la sunete înalte sau mai joase. 
- 
-Tot in partea din spate exista pe [[https://​www.allaboutcircuits.com/​technical-articles/​what-is-a-printed-circuit-board-pcb/​|PCB]] un difuzor(speaker) magnetic din care rezultă ca output sunetul. 
- 
- 
-==== Exemplul 5 ==== 
-Acest exemplu simulează o lumânare. După importarea bibliotecilor se declară un contor numit //lit//, care inițial are valoarea True. Apoi se verifica dacă a fost înregistrat un sunet puternic folosind funcția //​was_event()//,​ care totodată șterge istoricul evenimentelor sonore înainte de a returna. Dacă cea din urma returnează True se schimba valoare contorului, anume valoarea lui //lit//. În cazul în care lumânarea este aprinsă se va afișa pe display o imagine care o simuleaza o lumânare și care va face flacăra să licarească la o poziție random de la 1 la 3.  
- 
-Pentru a crea **imaginea** este necesar să dăm valori fiecarui pixel de pe display. Valoarea 0 însemna ca led-ul respectiv este oprit, nu luminează. Valorile între 1 și 9(valoarea maximă) arată nivelul de luminozitate al pixelului. Pentru a reprezenta o linie valorile sunt închise în //""//​ și se termină cu //://. În acest exemplu, ​ se observă faptul că fiecare linie din //Image()// reprezintă ​ poziționarea led-urilor de pe display-ul fizic al mico:​bit-ului. Prin urmare, analizând prima linie, care sugerează flacăra, toate led-urile sunt oprite cu exceptia celui de pe pozitia 3, care are pixel-ul setat la luminozitate maximă. Restul liniilor sunt asemenea pentru a forma restul lumânării,​ pozițiile 1 și 5, au pixel-ul setat la valoarea 0, iar restul la valoarea 9. 
- 
-Pentru a crea **efectul de licărire** se folosește funcția //​set_pixel()//,​ caruia i se dau ca parametrii linia, coloana și valoarea pixelului. 
- 
-<code python> 
-from microbit import display, microphone, SoundEvent, Image, sleep 
-import random 
- 
-lit = True 
- 
-while True: 
-    if microphone.was_event(SoundEvent.LOUD):​ #check if a loud sound was 
-        lit = not lit 
-        sleep(500) 
-    if lit: 
-        display.show(Image( #candle image 
-        "​00900:"​ 
-        "​09990:"​ 
-        "​09990:"​ 
-        "​09990:"​ 
-        "​09990"​)) 
-        sleep(150) 
-        flicker = random.randint(1,​ 3) 
-        if flicker != 2: 
-            display.set_pixel(2,​0,​0) 
-            display.set_pixel(flicker,​0,​9) 
-        sleep(150) 
-    else: 
-        display.clear() 
-</​code>​ 
- 
- 
-===== Senzorul de atingere ===== 
- 
-Micro:​bit-ul are senzorul de atingere amplasat pe [[https://​www.youtube.com/​watch?​v=spFD3SxxxHQ&​feature=emb_logo|logo]],​ care poate fi folosit ca și input. Acesta poate interacționa cu user-ul precum un buton. 
- 
-  
- 
-==== Exemplul 6 ==== 
-În acest exemplu se verifică dacă senzorul este atins atunci, se va afișa mesajul “Hello” altfel, display-ul va fi neluminat. 
- 
-<code python> 
-from microbit import display, pin_logo 
- 
-while True: 
-    if pin_logo.is_touched():​ 
-        display.scroll("​Hello"​) 
-    else: 
-        display.clear() #display stays empty 
-</​code>​ 
- 
-===== Senzorul de temperatura și de lumină ===== 
- 
-Senzorul de [[https://​youtu.be/​mrHn8eZ9eqg|temperatură]] înregistrează cu aproximație temperatura din jurul micr:​obit-ului,​ iar senzorul de [[https://​youtu.be/​ii0U_FMr-Z4|lumină]] poate înregistra nivelul de lumină prin intermediul LED-urilor. 
- 
-==== Exemplul 7 ==== 
- 
-Exemplul urmator afisează temepratura dacă butonul A este apăsat, iar dacă deasupra LED-urilor micro:​bit-ul înregistrează o lumină puternică va afișa pe display un soare. Pentru a testa senzorul de lumină, în acest exemplu puteți îndrepta lumina de la lanterna telefonului către plăcuță. 
- 
-<code python> 
-from microbit import display, button_a, Image, temperature 
- 
-while True: 
-    if button_a.was_pressed():​ 
-        display.scroll(temperature()) #displat the temperature 
-    elif display.read_light_level() > 100: #check the light level 
-        display.show(Image( #sun image 
-        "​90909:"​ 
-        "​09990:"​ 
-        "​99999:"​ 
-        "​09990:"​ 
-        "​90909"​)) 
-    else: 
-        display.clear() 
-</​code>​ 
- 
-===== Exerciții ===== 
- 
-   - Scrieți un program care la apăsarea simultană a butoanelor A și B va afișa o imagine care reprezintă "​DA",​ iar dacă niciun buton nu este apăsat va apărea o imagine care reprezintă "​NU"​. Pentru imagini vezi [[https://​microbit-micropython.readthedocs.io/​en/​v2-docs/​tutorials/​images.html|documentația]]. 
-   - Modificați punctul anterior astfel încât la apăsarea butonului A se va afișa litera "​A",​ iar la apăsarea butonului B se va afișa litera "​B"​. 
-   - Scrieți un program care afișeaza pe display numărul curent de scuturări. Când micro bit-ul înregistrează 9 scuturări pe display va apărea o imagine. 
-   - Creați un program care înregistrează numarul de înclinări către stanga și către dreapta. De fiecare data când micro:​bit-ul este îndreptat în una dintre cele două părți să se afișeze numărul curent de înclinări către partea respectivă. //Hint//: folosiți metoda [[https://​microbit-micropython.readthedocs.io/​en/​v1.0.1/​microbit.html#​microbit.sleep|sleep]] 
-   - Scrieți un program care la atingerea logo-ului(senzorul de atingere) să faca toggle între o imagine cu diamant și imagine cu diamant mic. 
-   - Să se scrie un program, care la înregistrarea unui sunet va afișa pe display o imagine și va rosti cu ajutorul speech-ului "​ON"​. Dacă nu este înregistrat niciun sunet display-ul rămâne gol. Afișati nivelul de sunet la o acțiune la alegere(apăsare unui buton, atingerea logo-ului, înclinare etc.)  
-   - Modificați codul de la [[https://​ocw.cs.pub.ro/​courses/​sde/​laboratoare/​02_microbit_ro?&#​senzorul_de_temperatura_si_de_lumina|exemplul 7]] astfel încât micro:​bit-ul detectează lumină să folosească speaker-ul pentru a reda muzica JUMP_UP, iar când lumina este oprită să redea muzica JUMP_DOWN. Pentru acesarea bibliotecii "​music"​ vezi [[https://​microbit-micropython.readthedocs.io/​en/​v2-docs/​tutorials/​music.html|documentația]]. 
- 
- 
-  
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
-  
- 
- 
- 
- 
- 
  
sde/laboratoare/02_microbit_ro.1613150888.txt.gz · Last modified: 2021/02/12 19:28 by alexandra.state2607
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0