Elecfreaks ring:bit Car: Rozdiel medzi revíziami
Zo stránky SensorWiki
Bez shrnutí editace |
|||
Riadok 58: | Riadok 58: | ||
=== Blinker === | === 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 '''<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- | 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_right_indicator_on = true | |||
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 = | turn_left_indicator_on = true | ||
turn_right_indicator_on = | 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 indicator: neopixel.Strip = null | let indicator: neopixel.Strip = null | ||
indicator = neopixel.create(DigitalPin.P0, | 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( | indicator.setPixelColor(9, neopixel.colors(NeoPixelColors.Orange)) | ||
indicator.show() | indicator.show() | ||
basic.pause(75) | basic.pause(75) | ||
indicator.setPixelColor( | 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( | indicator.setPixelColor(2, neopixel.colors(NeoPixelColors.Orange)) | ||
indicator.show() | indicator.show() | ||
basic.pause(75) | basic.pause(75) | ||
indicator.setPixelColor( | 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 | global turn_right_indicator_on, turn_left_indicator_on | ||
turn_right_indicator_on = True | |||
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 = | turn_left_indicator_on = True | ||
turn_right_indicator_on = | 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 | ||
indicator: neopixel.Strip = None | indicator: neopixel.Strip = None | ||
indicator = neopixel.create(DigitalPin.P0, | 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( | indicator.set_pixel_color(9, neopixel.colors(NeoPixelColors.ORANGE)) | ||
indicator.show() | indicator.show() | ||
basic.pause(75) | basic.pause(75) | ||
indicator.set_pixel_color( | 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( | indicator.set_pixel_color(2, neopixel.colors(NeoPixelColors.ORANGE)) | ||
indicator.show() | indicator.show() | ||
basic.pause(75) | basic.pause(75) | ||
indicator.set_pixel_color( | 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.
- Product page https://www.elecfreaks.com/ring-bit-car-v2-for-micro-bit.html
- Príslušenstvo
- Manual https://www.elecfreaks.com/learn-en/microbitKit/ring_bit_v2/index.html
- RLX (ceny k 20.1.2022)
- ring:bit v2 + micro:bit v2 47,88 € s DPH
- ring:bit v2 bez micro:bitu 23,00 € s DPH
- príslušenstvo: ultrazvukový senzor, sledovanie čiary a LED pásik 17,40 € s DPH
- príslušenstvo: len sledovanie čiary 7,08 € s DPH
- náhradný diel: riadiaca doska 6,73 € s DPH
- Návod v slovenčine https://www.nextech.sk/a/Konstrukcia-a-programovanie-robotov-3--E2-80-93-podvozok-Ring-bit-pre-Micro-bit
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.
-
Smerovky
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čí.
-
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()
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
- 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
-
Robot sleduje čiernu čiaru na svetlom podklade.
-
Robot sleduje čiernu čiaru na svetlom podklade.
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
-
Robot s namontovaným snímačom.
-
Stoj, prekážka.
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....