Operácie

Elecfreaks ring:bit Car: Rozdiel medzi revíziami

Zo stránky SensorWiki

Balogh (diskusia | príspevky)
Bez shrnutí editace
Balogh (diskusia | príspevky)
Riadok 58: Riadok 58:
=== Blinker ===
=== Blinker ===


Pre prácu so svetielkami na hornej hrane robota je potrebné nahrať knižnicu '''<code>Neopixel</code>'''
Ukážka práce s RGB LED diódami na rozširovacom module. Ak ho nemáte, zameňte LED číslo 2 a 9 za 0 a 1, ktoré sú priamo na základnej doske. Správna činnosť programu vyžaduje 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=600px mode="packed">  <!-- slideshow? -->
<gallery heights=600px mode="packed">  <!-- slideshow? -->
Image:microbit-KitronikMoveBlinker.png|''Smerovky''
Image:microbit-RingBitBlinker.png|''Smerovky''
</gallery>
</gallery>


Riadok 70: Riadok 70:
<tab name="Javascript"><source lang="javascript">
<tab name="Javascript"><source lang="javascript">
input.onButtonPressed(Button.A, function () {
input.onButtonPressed(Button.A, function () {
     turn_left_indicator_on = true
     turn_right_indicator_on = true
     turn_right_indicator_on = false
     turn_left_indicator_on = false
     indicator.clear()
     indicator.clear()
     indicator.show()
     indicator.show()
Riadok 82: Riadok 82:
})
})
input.onButtonPressed(Button.B, function () {
input.onButtonPressed(Button.B, function () {
     turn_left_indicator_on = false
     turn_left_indicator_on = true
     turn_right_indicator_on = true
     turn_right_indicator_on = false
     indicator.clear()
     indicator.clear()
     indicator.show()
     indicator.show()
})
})
let turn_left_indicator_on = false
let turn_right_indicator_on = false
let turn_right_indicator_on = false
let turn_left_indicator_on = false
let indicator: neopixel.Strip = null
let indicator: neopixel.Strip = null
indicator = neopixel.create(DigitalPin.P0, 5, NeoPixelMode.RGB)
indicator = neopixel.create(DigitalPin.P0, 10, NeoPixelMode.RGB)
indicator.setBrightness(80)
indicator.setBrightness(80)
basic.forever(function () {
basic.forever(function () {
     if (turn_left_indicator_on == true) {
     if (turn_left_indicator_on == true) {
         indicator.setPixelColor(0, neopixel.colors(NeoPixelColors.Orange))
         indicator.setPixelColor(9, neopixel.colors(NeoPixelColors.Orange))
         indicator.show()
         indicator.show()
         basic.pause(75)
         basic.pause(75)
         indicator.setPixelColor(0, neopixel.colors(NeoPixelColors.Black))
         indicator.setPixelColor(9, neopixel.colors(NeoPixelColors.Black))
         indicator.show()
         indicator.show()
         basic.pause(75)
         basic.pause(75)
     } else if (turn_right_indicator_on == true) {
     } else if (turn_right_indicator_on == true) {
         indicator.setPixelColor(4, neopixel.colors(NeoPixelColors.Orange))
         indicator.setPixelColor(2, neopixel.colors(NeoPixelColors.Orange))
         indicator.show()
         indicator.show()
         basic.pause(75)
         basic.pause(75)
         indicator.setPixelColor(4, neopixel.colors(NeoPixelColors.Black))
         indicator.setPixelColor(2, neopixel.colors(NeoPixelColors.Black))
         indicator.show()
         indicator.show()
         basic.pause(75)
         basic.pause(75)
Riadok 112: Riadok 112:
<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():
def on_button_pressed_a():
     global turn_left_indicator_on, turn_right_indicator_on
     global turn_right_indicator_on, turn_left_indicator_on
     turn_left_indicator_on = True
     turn_right_indicator_on = True
     turn_right_indicator_on = False
     turn_left_indicator_on = False
     indicator.clear()
     indicator.clear()
     indicator.show()
     indicator.show()
Riadok 129: Riadok 129:
def on_button_pressed_b():
def on_button_pressed_b():
     global turn_left_indicator_on, turn_right_indicator_on
     global turn_left_indicator_on, turn_right_indicator_on
     turn_left_indicator_on = False
     turn_left_indicator_on = True
     turn_right_indicator_on = True
     turn_right_indicator_on = False
     indicator.clear()
     indicator.clear()
     indicator.show()
     indicator.show()
input.on_button_pressed(Button.B, on_button_pressed_b)
input.on_button_pressed(Button.B, on_button_pressed_b)


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


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

Verzia z 09:52, 20. január 2022

Robot ring:bot Car od firmy Elecfreaks.



Elecfreaks ring:bit Car v2

Technické parametre

  • Napájanie 3,5 - 5,0 V DC ( 3x AAA 1,5 V batéria)
  • Vstupy a senzory
    • 2x infračervený detektor (na čiary) s roztečou 1,5 cm
    • 1x ultrazvukový senzor SR04, SR04P (5V interface? odmeraj)
    • P0, P1, P2
  • Výstupy a aktory
    • 2x modifikovaný servomotor EF90D
    • 2x RGB LED Neopixel zo spodnej strany (s príslušenstvom Light Bar + ďalších 8
  • Rozmery: 88 x 80 x 80 mm (bez príslušenstva)
  • Hmotnosť: 120 g (bez/s batériami)


Priradenie vstupov a výstupov

 P0 rozširujúce moduly (nedajú sa používať súčasne viaceré)
 P1 ľavý motor
 P2 pravý motor


Výhody:

  • jednoduchosť
  • kvalitné servomotory

Nevýhody:

  • len tri porty (P0-2) využiteľné
  • vypínač na rozširujúcej doske nevypína motory pri napájaní cez USB
  • neprístupné tlačidlo RESET


Základné programy

Blinker

Ukážka práce s RGB LED diódami na rozširovacom module. Ak ho nemáte, zameňte LED číslo 2 a 9 za 0 a 1, ktoré sú priamo na základnej doske. Správna činnosť programu vyžaduje 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_right_indicator_on = true
    turn_left_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 = true
    turn_right_indicator_on = false
    indicator.clear()
    indicator.show()
})
let turn_left_indicator_on = false
let turn_right_indicator_on = false
let indicator: neopixel.Strip = null
indicator = neopixel.create(DigitalPin.P0, 10, NeoPixelMode.RGB)
indicator.setBrightness(80)
basic.forever(function () {
    if (turn_left_indicator_on == true) {
        indicator.setPixelColor(9, neopixel.colors(NeoPixelColors.Orange))
        indicator.show()
        basic.pause(75)
        indicator.setPixelColor(9, neopixel.colors(NeoPixelColors.Black))
        indicator.show()
        basic.pause(75)
    } else if (turn_right_indicator_on == true) {
        indicator.setPixelColor(2, neopixel.colors(NeoPixelColors.Orange))
        indicator.show()
        basic.pause(75)
        indicator.setPixelColor(2, neopixel.colors(NeoPixelColors.Black))
        indicator.show()
        basic.pause(75)
    }
})
def on_button_pressed_a():
    global turn_right_indicator_on, turn_left_indicator_on
    turn_right_indicator_on = True
    turn_left_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 = True
    turn_right_indicator_on = False
    indicator.clear()
    indicator.show()
input.on_button_pressed(Button.B, on_button_pressed_b)

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

def on_forever():
    if turn_left_indicator_on == True:
        indicator.set_pixel_color(9, neopixel.colors(NeoPixelColors.ORANGE))
        indicator.show()
        basic.pause(75)
        indicator.set_pixel_color(9, neopixel.colors(NeoPixelColors.BLACK))
        indicator.show()
        basic.pause(75)
    elif turn_right_indicator_on == True:
        indicator.set_pixel_color(2, neopixel.colors(NeoPixelColors.ORANGE))
        indicator.show()
        basic.pause(75)
        indicator.set_pixel_color(2, 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

ring:bit ukazkovy program https://makecode.microbit.org/45086-58044-52516-35101

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)



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