Operácie

Kitronik :MOVE mini MK2: Rozdiel medzi revíziami

Zo stránky SensorWiki

Balogh (diskusia | príspevky)
Bez shrnutí editace
Balogh (diskusia | príspevky)
 
(19 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 1: Riadok 1:
Druhá, vylepšená verzia :MOVE od firmy Kitronik.
Druhá, vylepšená verzia :MOVE od firmy Kitronik. Dodáva sa v rozloženom stave, po zložení sa už nepredpokladá prerábanie.  




Riadok 9: Riadok 9:
* Product page https://kitronik.co.uk/products/5652-move-mini-mk2-buggy-kit-excl-microbit
* Product page https://kitronik.co.uk/products/5652-move-mini-mk2-buggy-kit-excl-microbit
* Aplikácia na ovládanie cez mobil (Android): https://play.google.com/store/apps/details?id=com.kitronik.blemove&gl=SK
* Aplikácia na ovládanie cez mobil (Android): https://play.google.com/store/apps/details?id=com.kitronik.blemove&gl=SK
Základná verzia robota je bez senzorov, preto odporúčame doplniť Sensor interface board a k nej je potom možné doplniť senzor na detekciu čiary ako aj ultrazvukový senzor.
P0  5x neopixel RGB LED
P1  servo 1
P2  servo 2
P3  voľné
P4  voľné
 
P8  ultrazvukový senzor Trigger
P10  ultrazvukový senzor Echo
P15 ľavý senzor čiary
P16 pravý senzor čiary
P19 i2c zbernica SCL
P20 i2c zbernica SDA




Riadok 17: Riadok 34:
=== Blinker ===
=== Blinker ===


Pre prácu so svetielkami na hornej hrane robota je potrebné nahrať knižnicu '''<code>pocetNavstevnikov</code>'''
Pre prácu so svetielkami na hornej hrane robota je potrebné nahrať knižnicu '''<code>Neopixel</code>'''


Jednoduchý program pre blinker, funguje na tlačítka - stlačením ľavého tlačidla 🅰 sa zapne ľavá smerovka, pravým tlačidlom 🅱 sa zapne pravá. Stlačením oboch 🅰+🅱 sa blinker vypne.  
Jednoduchý program pre blinker, funguje na tlačítka - stlačením ľavého tlačidla 🅰 sa zapne ľavá smerovka, pravým tlačidlom 🅱 sa zapne pravá. Stlačením oboch 🅰+🅱 sa blinker vypne.  


<gallery heights=200px mode="packed">  <!-- slideshow? -->
<gallery heights=600px mode="packed">  <!-- slideshow? -->
Image:microbit-KitronikMoveBlinker.png|''Smerovky''
Image:microbit-KitronikMoveBlinker.png|''Smerovky''
</gallery>
</gallery>
Riadok 119: Riadok 136:
</tabs>
</tabs>


=== Základné pohyby ===
Výrobca, firma Kitronik poskytuje pre robota špeciálnu knižnicu. Niekedy sa volá iba '''<code>Kitronik</code>''', ale väčšinou ju nájdete pod názvom '''<code>Servo:Lite</code>'''
Tento ukážkový program len pohýbe všetkými smermi a potom skončí.
<gallery heights=400px mode="packed">  <!-- slideshow? -->
Image:microbit-KitronikMoveMovements.png|''Základné pohyby''
</gallery>




<tabs>
<tab name="Javascript"><source lang="javascript">


=== Základné pohyby ===
kitronik_servo_lite.forward()
basic.pause(500)
kitronik_servo_lite.backward()
basic.pause(500)
kitronik_servo_lite.right()
basic.pause(500)
kitronik_servo_lite.left()
basic.pause(500)
kitronik_servo_lite.stop()
 
</source></tab>
<tab name="MS Python"><source lang="python" style="background: LightBlue;">
 
kitronik_servo_lite.forward()
basic.pause(500)
kitronik_servo_lite.backward()
basic.pause(500)
kitronik_servo_lite.right()
basic.pause(500)
kitronik_servo_lite.left()
basic.pause(500)
kitronik_servo_lite.stop()


</source></tab>
</tabs>


=== Line following robot ===
=== Line following robot ===
Robot musí byť doplnený špeciálnym senzorom, ktorý sa pripojí k expanznej doske, umožňujúcej využiť aj viac ako 3 vstupy P0 - P3.
Samozrejmosťou je tiež vopred nahrať knižnicu '''<code>Kitronik</code>'''
* Product page https://kitronik.co.uk/products/5659-line-following-add-on-for-move-mini-v2
* Product manual https://resources.kitronik.co.uk/pdf/5629-move-line-following-board-microbit-datasheet.pdf
<gallery heights=600px mode="packed">  <!-- slideshow? -->
Image:microbit-KitronikMoveLinefollowerRobot.jpg|''Robot sleduje čiernu čiaru na svetlom podklade.''
Image:microbit-KitronikMoveLinefollower.png|''Robot sleduje čiernu čiaru na svetlom podklade.''
</gallery>
<tabs>
<tab name="Javascript"><source lang="javascript">
let Left_Detector = 0
let Right_Detector = 0
pins.setPull(DigitalPin.P15, PinPullMode.PullUp)
pins.setPull(DigitalPin.P16, PinPullMode.PullUp)
basic.forever(function on_forever() {
   
    Right_Detector = pins.digitalReadPin(DigitalPin.P15)
    Left_Detector = pins.digitalReadPin(DigitalPin.P16)
    if (Left_Detector == 1 && Right_Detector == 1) {
        kitronik.forward()
    } else if (Left_Detector == 0 && Right_Detector == 1) {
        kitronik.left()
    } else if (Left_Detector == 1 && Right_Detector == 0) {
        kitronik.right()
    } else if (Left_Detector == 0 && Right_Detector == 0) {
        kitronik.forward()
    }
   
})
</source></tab>
<tab name="MS Python"><source lang="python" style="background: LightBlue;">
Left_Detector = 0
Right_Detector = 0
pins.set_pull(DigitalPin.P15, PinPullMode.PULL_UP)
pins.set_pull(DigitalPin.P16, PinPullMode.PULL_UP)
def on_forever():
    global Right_Detector, Left_Detector
    Right_Detector = pins.digital_read_pin(DigitalPin.P15)
    Left_Detector = pins.digital_read_pin(DigitalPin.P16)
    if Left_Detector == 1 and Right_Detector == 1:
        kitronik.forward()
    elif Left_Detector == 0 and Right_Detector == 1:
        kitronik.left()
    elif Left_Detector == 1 and Right_Detector == 0:
        kitronik.right()
    elif Left_Detector == 0 and Right_Detector == 0:
        kitronik.forward()
basic.forever(on_forever)
</source></tab>
</tabs>


=== Ultrazvukový senzor ===
=== Ultrazvukový senzor ===


Pre prácu s ultrazvukovým senzorom je potrebné nahrať knižnicu '''<code>Sonar</code>'''


Stlačením ľavého tlačidla 🅰 sa vždy pripočíta jednotka. Stlačením oboch 🅰+🅱 sa zariadenie vynuluje a začneme od začiatku. Vo všetkých príkladoch používame '''premennú''' <code>pocetNavstevnikov</code>.
Jednoduchý program, ktorý ukáže ako robot zastaví pred prekážkou
 


<gallery heights=200px mode="packed">  <!-- slideshow? -->
<gallery heights=500px mode="packed">  <!-- slideshow? -->
Image:microbit-PeopleCounter.png|''Prvý program...''
Image:microbit-KitronikMoveRobotWithSonar.jpg|''Robot s namontovaným snímačom.''
Image:microbit-PeopleCounterRun.png|''...bude vyzerať v simulátore takto.''
Image:microbit-KitronikMoveSonarStop.png|''Stoj, prekážka.''
</gallery>
</gallery>


Riadok 141: Riadok 256:
<tabs>
<tabs>
<tab name="Javascript"><source lang="javascript">
<tab name="Javascript"><source lang="javascript">
input.onButtonPressed(Button.A, function () {
 
    turn_left_indicator_on = true
let Distance = 0
    turn_right_indicator_on = false
pins.setPull(DigitalPin.P8, PinPullMode.PullUp)
    indicator.clear()
pins.setPull(DigitalPin.P10, PinPullMode.PullUp)
    indicator.show()
})
input.onButtonPressed(Button.AB, function () {
    turn_left_indicator_on = false
    turn_right_indicator_on = false
    indicator.clear()
    indicator.show()
})
input.onButtonPressed(Button.B, function () {
    turn_left_indicator_on = false
    turn_right_indicator_on = true
    indicator.clear()
    indicator.show()
})
let turn_right_indicator_on = false
let turn_left_indicator_on = false
let indicator: neopixel.Strip = null
indicator = neopixel.create(DigitalPin.P0, 5, NeoPixelMode.RGB)
indicator.setBrightness(80)
basic.forever(function () {
basic.forever(function () {
     if (turn_left_indicator_on == true) {
     Distance = sonar.ping(
        indicator.setPixelColor(0, neopixel.colors(NeoPixelColors.Orange))
    DigitalPin.P8,
        indicator.show()
    DigitalPin.P10,
        basic.pause(75)
    PingUnit.Centimeters
        indicator.setPixelColor(0, neopixel.colors(NeoPixelColors.Black))
    )
        indicator.show()
     if (Distance > 4) {
        basic.pause(75)
         kitronik_servo_lite.driveForwards(1)
     } else if (turn_right_indicator_on == true) {
    } else {
         indicator.setPixelColor(4, neopixel.colors(NeoPixelColors.Orange))
         kitronik_servo_lite.stop()
        indicator.show()
        basic.pause(75)
        indicator.setPixelColor(4, neopixel.colors(NeoPixelColors.Black))
        indicator.show()
         basic.pause(75)
     }
     }
})
})
</source></tab>
</source></tab>
<tab name="MS Python"><source lang="python" style="background: LightBlue;">
<tab name="MS Python"><source lang="python" style="background: LightBlue;">
def on_button_pressed_a():
    global turn_left_indicator_on, turn_right_indicator_on
    turn_left_indicator_on = True
    turn_right_indicator_on = False
    indicator.clear()
    indicator.show()
input.on_button_pressed(Button.A, on_button_pressed_a)


def on_button_pressed_ab():
Distance = 0
    global turn_left_indicator_on, turn_right_indicator_on
pins.set_pull(DigitalPin.P8, PinPullMode.PULL_UP)
    turn_left_indicator_on = False
pins.set_pull(DigitalPin.P10, PinPullMode.PULL_UP)
    turn_right_indicator_on = False
    indicator.clear()
    indicator.show()
input.on_button_pressed(Button.AB, on_button_pressed_ab)


def on_button_pressed_b():
def on_forever():
     global turn_left_indicator_on, turn_right_indicator_on
     global Distance
     turn_left_indicator_on = False
     Distance = sonar.ping(DigitalPin.P8, DigitalPin.P10, PingUnit.CENTIMETERS)
     turn_right_indicator_on = True
     if Distance > 4:
    indicator.clear()
        kitronik_servo_lite.drive_forwards(1)
     indicator.show()
     else:
input.on_button_pressed(Button.B, on_button_pressed_b)
        kitronik_servo_lite.stop()
basic.forever(on_forever)


turn_right_indicator_on = False
turn_left_indicator_on = False
indicator: neopixel.Strip = None
indicator = neopixel.create(DigitalPin.P0, 5, NeoPixelMode.RGB)
indicator.set_brightness(80)


def on_forever():
    if turn_left_indicator_on == True:
        indicator.set_pixel_color(0, neopixel.colors(NeoPixelColors.ORANGE))
        indicator.show()
        basic.pause(75)
        indicator.set_pixel_color(0, neopixel.colors(NeoPixelColors.BLACK))
        indicator.show()
        basic.pause(75)
    elif turn_right_indicator_on == True:
        indicator.set_pixel_color(4, neopixel.colors(NeoPixelColors.ORANGE))
        indicator.show()
        basic.pause(75)
        indicator.set_pixel_color(4, neopixel.colors(NeoPixelColors.BLACK))
        indicator.show()
        basic.pause(75)
basic.forever(on_forever)
</source></tab>
</source></tab>
</tabs>
</tabs>
=== Materiály pre učiteľov ===
* [http://www.robotika.sk/misc/balogh/prezentaciaKitronik1.odp Prezentácia na prvú časť kurzu] (OpenOffice format)
* Príklady k prvej časti] <BR> - tieto doplníme v budúcnosti
* [http://www.robotika.sk/misc/balogh/prezentaciaKitronik1.odp Prezentácia na druhú časť kurzu - senzory]  (OpenOffice format)
* [http://www.robotika.sk/r/index1.html Príklady k druhej časti] <BR> - deti si môžu otvoriť jednotlivé príklady, odpadnú tak problémy s knižnicami, využijú to aj pomalšie deti, ktoré nestíhajú.
* Pracovné listy
** [http://www.robotika.sk/misc/balogh/pracovnyList1.pdf  Parkovisko]
** [http://www.robotika.sk/misc/balogh/pracovnyList2.pdf  Pravítko k ultrazvuku]
** [http://www.robotika.sk/misc/balogh/pracovnyList3.pdf  Sledovanie čiary]
'''Poznámky:'''
* počas workshopov sme narazili na problémy s jazykovými verziami. V niektorých verziách Edge sa automaticky nastavila slovenčina a aj keď sme ručne zmenili nastavenie na English, ostalo všetko v slovenčine. Nepríjemné bolo najmä to, že preložený text sa niekedy nezmestil do daného bloku a prekrýval sa s iným textom, niekde sa preto dokonca nedalo ani zmeniť parameter príkazu.
* komplikácia je aj to, že v niektorých prehliadačoch (ale nezistili sme žiadne spoločné znaky) sa preložili do slovenčiny základné bloky, ale nie importované knižnice. Tiež je zvláštne, že pod názvom Kitronik :move sa niekomu nahrala knižnica (Extension) Servo:lite, niekomu zasa Kitronik.
* celkovo odoporúčame problémy s jazykovou verziou vyriešiť tak, že všetko budeme programovať v angličtine. Má to aj tú výhodu, že pri neskoršom prechode k nejakému vyššiemu programovaciemu jazyky budú deťom príkazy už povedomé.




Riadok 237: Riadok 321:




 
 
 
<center>
[[Súbor:logoRoboCoop.png|800px]]<BR>
Materiály na tejto stránke vznikli v rámci projektu RoboCoop: Vzdelávanie prostredníctvom robotiky podporené medziregionálnou spoluprácou.<BR><BR>
 
</center>
 
 
[[Category:Micro:bit]][[Category:Príklady micro:bit]]
[[Category:Micro:bit]][[Category:Príklady micro:bit]]

Aktuálna revízia z 17:08, 25. marec 2022

Druhá, vylepšená verzia :MOVE od firmy Kitronik. Dodáva sa v rozloženom stave, po zložení sa už nepredpokladá prerábanie.



Kitronik :MOVE mk2.


Základná verzia robota je bez senzorov, preto odporúčame doplniť Sensor interface board a k nej je potom možné doplniť senzor na detekciu čiary ako aj ultrazvukový senzor.

P0  5x neopixel RGB LED
P1  servo 1
P2  servo 2
P3  voľné
P4  voľné
 
P8   ultrazvukový senzor Trigger
P10  ultrazvukový senzor Echo
P15 ľavý senzor čiary
P16 pravý senzor čiary
P19 i2c zbernica SCL
P20 i2c zbernica SDA


Základné programy

Blinker

Pre prácu so svetielkami na hornej hrane robota je potrebné nahrať knižnicu Neopixel

Jednoduchý program pre blinker, funguje na tlačítka - stlačením ľavého tlačidla 🅰 sa zapne ľavá smerovka, pravým tlačidlom 🅱 sa zapne pravá. Stlačením oboch 🅰+🅱 sa blinker vypne.


input.onButtonPressed(Button.A, function () {
    turn_left_indicator_on = true
    turn_right_indicator_on = false
    indicator.clear()
    indicator.show()
})
input.onButtonPressed(Button.AB, function () {
    turn_left_indicator_on = false
    turn_right_indicator_on = false
    indicator.clear()
    indicator.show()
})
input.onButtonPressed(Button.B, function () {
    turn_left_indicator_on = false
    turn_right_indicator_on = true
    indicator.clear()
    indicator.show()
})
let turn_right_indicator_on = false
let turn_left_indicator_on = false
let indicator: neopixel.Strip = null
indicator = neopixel.create(DigitalPin.P0, 5, NeoPixelMode.RGB)
indicator.setBrightness(80)
basic.forever(function () {
    if (turn_left_indicator_on == true) {
        indicator.setPixelColor(0, neopixel.colors(NeoPixelColors.Orange))
        indicator.show()
        basic.pause(75)
        indicator.setPixelColor(0, neopixel.colors(NeoPixelColors.Black))
        indicator.show()
        basic.pause(75)
    } else if (turn_right_indicator_on == true) {
        indicator.setPixelColor(4, neopixel.colors(NeoPixelColors.Orange))
        indicator.show()
        basic.pause(75)
        indicator.setPixelColor(4, neopixel.colors(NeoPixelColors.Black))
        indicator.show()
        basic.pause(75)
    }
})
def on_button_pressed_a():
    global turn_left_indicator_on, turn_right_indicator_on
    turn_left_indicator_on = True
    turn_right_indicator_on = False
    indicator.clear()
    indicator.show()
input.on_button_pressed(Button.A, on_button_pressed_a)

def on_button_pressed_ab():
    global turn_left_indicator_on, turn_right_indicator_on
    turn_left_indicator_on = False
    turn_right_indicator_on = False
    indicator.clear()
    indicator.show()
input.on_button_pressed(Button.AB, on_button_pressed_ab)

def on_button_pressed_b():
    global turn_left_indicator_on, turn_right_indicator_on
    turn_left_indicator_on = False
    turn_right_indicator_on = True
    indicator.clear()
    indicator.show()
input.on_button_pressed(Button.B, on_button_pressed_b)

turn_right_indicator_on = False
turn_left_indicator_on = False
indicator: neopixel.Strip = None
indicator = neopixel.create(DigitalPin.P0, 5, NeoPixelMode.RGB)
indicator.set_brightness(80)

def on_forever():
    if turn_left_indicator_on == True:
        indicator.set_pixel_color(0, neopixel.colors(NeoPixelColors.ORANGE))
        indicator.show()
        basic.pause(75)
        indicator.set_pixel_color(0, neopixel.colors(NeoPixelColors.BLACK))
        indicator.show()
        basic.pause(75)
    elif turn_right_indicator_on == True:
        indicator.set_pixel_color(4, neopixel.colors(NeoPixelColors.ORANGE))
        indicator.show()
        basic.pause(75)
        indicator.set_pixel_color(4, neopixel.colors(NeoPixelColors.BLACK))
        indicator.show()
        basic.pause(75)
basic.forever(on_forever)

Základné pohyby

Výrobca, firma Kitronik poskytuje pre robota špeciálnu knižnicu. Niekedy sa volá iba Kitronik, ale väčšinou ju nájdete pod názvom Servo:Lite

Tento ukážkový program len pohýbe všetkými smermi a potom skončí.



kitronik_servo_lite.forward()
basic.pause(500)
kitronik_servo_lite.backward()
basic.pause(500)
kitronik_servo_lite.right()
basic.pause(500)
kitronik_servo_lite.left()
basic.pause(500)
kitronik_servo_lite.stop()
kitronik_servo_lite.forward()
basic.pause(500)
kitronik_servo_lite.backward()
basic.pause(500)
kitronik_servo_lite.right()
basic.pause(500)
kitronik_servo_lite.left()
basic.pause(500)
kitronik_servo_lite.stop()

Line following robot

Robot musí byť doplnený špeciálnym senzorom, ktorý sa pripojí k expanznej doske, umožňujúcej využiť aj viac ako 3 vstupy P0 - P3. Samozrejmosťou je tiež vopred nahrať knižnicu Kitronik


let Left_Detector = 0
let Right_Detector = 0
pins.setPull(DigitalPin.P15, PinPullMode.PullUp)
pins.setPull(DigitalPin.P16, PinPullMode.PullUp)

basic.forever(function on_forever() {
    
    Right_Detector = pins.digitalReadPin(DigitalPin.P15)
    Left_Detector = pins.digitalReadPin(DigitalPin.P16)
    if (Left_Detector == 1 && Right_Detector == 1) {
        kitronik.forward()
    } else if (Left_Detector == 0 && Right_Detector == 1) {
        kitronik.left()
    } else if (Left_Detector == 1 && Right_Detector == 0) {
        kitronik.right()
    } else if (Left_Detector == 0 && Right_Detector == 0) {
        kitronik.forward()
    }
    
})
Left_Detector = 0
Right_Detector = 0
pins.set_pull(DigitalPin.P15, PinPullMode.PULL_UP)
pins.set_pull(DigitalPin.P16, PinPullMode.PULL_UP)


def on_forever():
    global Right_Detector, Left_Detector
    Right_Detector = pins.digital_read_pin(DigitalPin.P15)
    Left_Detector = pins.digital_read_pin(DigitalPin.P16)
    if Left_Detector == 1 and Right_Detector == 1:
        kitronik.forward()
    elif Left_Detector == 0 and Right_Detector == 1:
        kitronik.left()
    elif Left_Detector == 1 and Right_Detector == 0:
        kitronik.right()
    elif Left_Detector == 0 and Right_Detector == 0:
        kitronik.forward()
basic.forever(on_forever)

Ultrazvukový senzor

Pre prácu s ultrazvukovým senzorom je potrebné nahrať knižnicu Sonar

Jednoduchý program, ktorý ukáže ako robot zastaví pred prekážkou


let Distance = 0
pins.setPull(DigitalPin.P8, PinPullMode.PullUp)
pins.setPull(DigitalPin.P10, PinPullMode.PullUp)
basic.forever(function () {
    Distance = sonar.ping(
    DigitalPin.P8,
    DigitalPin.P10,
    PingUnit.Centimeters
    )
    if (Distance > 4) {
        kitronik_servo_lite.driveForwards(1)
    } else {
        kitronik_servo_lite.stop()
    }
})
Distance = 0
pins.set_pull(DigitalPin.P8, PinPullMode.PULL_UP)
pins.set_pull(DigitalPin.P10, PinPullMode.PULL_UP)

def on_forever():
    global Distance
    Distance = sonar.ping(DigitalPin.P8, DigitalPin.P10, PingUnit.CENTIMETERS)
    if Distance > 4:
        kitronik_servo_lite.drive_forwards(1)
    else:
        kitronik_servo_lite.stop()
basic.forever(on_forever)


Materiály pre učiteľov


Poznámky:

  • počas workshopov sme narazili na problémy s jazykovými verziami. V niektorých verziách Edge sa automaticky nastavila slovenčina a aj keď sme ručne zmenili nastavenie na English, ostalo všetko v slovenčine. Nepríjemné bolo najmä to, že preložený text sa niekedy nezmestil do daného bloku a prekrýval sa s iným textom, niekde sa preto dokonca nedalo ani zmeniť parameter príkazu.
  • komplikácia je aj to, že v niektorých prehliadačoch (ale nezistili sme žiadne spoločné znaky) sa preložili do slovenčiny základné bloky, ale nie importované knižnice. Tiež je zvláštne, že pod názvom Kitronik :move sa niekomu nahrala knižnica (Extension) Servo:lite, niekomu zasa Kitronik.
  • celkovo odoporúčame problémy s jazykovou verziou vyriešiť tak, že všetko budeme programovať v angličtine. Má to aj tú výhodu, že pri neskoršom prechode k nejakému vyššiemu programovaciemu jazyky budú deťom príkazy už povedomé.



👉 Späť na zoznam príkladov....




Materiály na tejto stránke vznikli v rámci projektu RoboCoop: Vzdelávanie prostredníctvom robotiky podporené medziregionálnou spoluprácou.