![Sledovač řádku GiggleBot pomocí Pythonu: 5 kroků Sledovač řádku GiggleBot pomocí Pythonu: 5 kroků](https://i.howwhatproduce.com/images/002/image-4707-12-j.webp)
Obsah:
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-23 14:38
![Sledovač řádku GiggleBot pomocí Pythonu Sledovač řádku GiggleBot pomocí Pythonu](https://i.howwhatproduce.com/images/002/image-4707-13-j.webp)
![Sledovač řádku GiggleBot pomocí Pythonu Sledovač řádku GiggleBot pomocí Pythonu](https://i.howwhatproduce.com/images/002/image-4707-14-j.webp)
![Sledovač řádku GiggleBot pomocí Pythonu Sledovač řádku GiggleBot pomocí Pythonu](https://i.howwhatproduce.com/images/002/image-4707-15-j.webp)
Tentokrát programujeme v MicroPythonu Dexter Industries GiggleBot, abychom sledovali černou čáru pomocí vestavěného senzoru sledovače čáry.
Aby bylo možné GiggleBot vhodně ovládat, musí být spárován s BBC micro: bitem.
Pokud je tento výukový program pro vás příliš pokročilý a programování GiggleBotu je prozatím příliš mnoho, můžete si vždy projít úvodní návod, který vám ukáže, jak lze robota naprogramovat v MakeCode zde. Propojený tutoriál vás provede úplnými základy.
Krok 1: Požadované součásti
![Požadované součásti Požadované součásti](https://i.howwhatproduce.com/images/002/image-4707-16-j.webp)
Jsou vyžadovány následující hardwarové komponenty:
- x3 AA baterie - v mém případě používám nabíjecí baterie, které mají celkově nižší napětí.
- Robot Dexter Industries GiggleBot pro micro: bit.
- Micro: bit BBC.
K naprogramování BBC micro: bit samozřejmě potřebujete také kabel micro USB - tento kabel se obvykle dodává v balíčku BBC micro: bit nebo můžete vždy použít ten, který se používá k nabíjení smartphonů (Android).
Získejte GiggleBot pro micro: bit zde
Krok 2: Nastavení stop
![Nastavte stopy Nastavte stopy](https://i.howwhatproduce.com/images/002/image-4707-17-j.webp)
Budete muset projít tiskem některých dlaždic a navrhováním vlastních skladeb. Můžete použít naše vlastní dlaždice, abyste si byli 100% jisti, že replikujete naše podmínky. Nebo pokud se cítíte dobrodružně, můžete použít černou pásku a vytvořit si vlastní. Zde je PDF pro dlaždice, které jsme použili.
Výše uvedená stopa se skládá z následujícího počtu různých dlaždic:
- 12 dlaždic typu #1.
- 5 dlaždic typu #2.
- 3 šablony typu dlaždice #5.
- 3 šablony typu dlaždice č. 6 - zde skončíte s jednou dlaždicí navíc.
Dále je vytiskněte a ořízněte. Zkuste je umístit jako na výše uvedené fotografii a mějte na paměti, že na pravé horní straně trati se 2 dlaždice musí překrývat s ostatními - to se očekává v případě, že vás zajímá, jestli děláte něco špatně.
Krok 3: Nastavení prostředí
![Nastavení prostředí Nastavení prostředí](https://i.howwhatproduce.com/images/002/image-4707-18-j.webp)
Abyste mohli programovat micro: bit BBC v programu MicroPython, musíte pro něj nastavit editor (editor Mu) a nastavit běhový čas GiggleBot MicroPython Runtime. Chcete -li to provést, musíte postupovat podle pokynů na této stránce. Od tohoto okamžiku se používá verze v0.4.0 modulu runtime.
Krok 4: Programování GiggleBot
Než se pustíme do toho, běhový modul GiggleBot MicroPython obsahuje klasický běhový modul pro BBC micro: bit a další knihovny na podporu GiggleBot a dalších senzorů Dexter Industries.
Po nastavení otevřete v editoru Mu následující skript a klikněte na Flash. To bude blikat GiggleBot MicroPython Runtime a skript, který jste právě otevřeli pro váš BBC micro: bit. Skript je také zobrazen níže.
Jakmile je proces blikání hotový, naskládejte BBC micro: bit do GiggleBotu neopixely desky směrem dopředu, umístěte jej na dráhu a zapněte.
Všimněte si, že ve skriptu jsou již nastaveny PID a další 2 konstanty (požadovaná hodnota rychlosti a konstanty minimální rychlosti).
Poznámka: Následující skript může mít chybějící mezery a zdá se, že je to způsobeno nějakým problémem při zobrazování GitHub Gists. Kliknutím na podstatu se dostanete na stránku GitHub, kde můžete zkopírovat a vložit kód.
Sledovač linky GiggleBot PID - vyladěný s NeoPixels
z importu mikrobitů* |
z importu gigglebot* |
z utime import sleep_ms, ticks_us |
dovozní ustruct |
# inicializujte GB neopixely |
neo = init () |
# načasování |
update_rate = 50 |
# zisky/konstanty (za předpokladu, že napětí baterie je kolem 4,0 voltů) |
Kp = 25,0 |
Ki = 0,5 |
Kd = 35,0 |
trigger_point = 0,3 |
min_speed_percent = 0,3 |
základní rychlost = 70 |
žádaná hodnota = 0,5 |
last_position = požadovaná hodnota |
integrál = 0,0 |
run_neopixels = Pravda |
center_pixel = 5# kde je středový pixel úsměvu umístěn na GB |
# turquoise = tuple (map (lambda x: int (x / 5), (64, 224, 208))) # color to use to draw the error with the neopixels |
# turquoise = (12, 44, 41) # což je přesně ta výše zmíněná tyrkysová komentovaná nad tímto |
error_width_per_pixel = 0,5/3# max chyba děleno počtem segmentů mezi každým neopixelem |
defupper_bound_linear_speed_reducer (abs_error, trigger_point, upper_bound, smaller_motor_power, higher_motor_power): |
globální základní rychlost |
pokud abs_error> = trigger_point: |
# x0 = 0,0 |
# y0 = 0,0 |
# x1 = upper_bound - trigger_point |
# y1 = 1,0 |
# x = abs_error - trigger_point |
# y = y0 + (x - x0) * (y1 - y0) / (x1 - x0) |
# stejný jako |
y = (abs_error - trigger_point) / (upper_bound - trigger_point) |
motor_power = základní_rychlost * (nejmenší_motorová_moc + (1- r) * (nejvyšší_motorová_míra - nejmenší_motorová_moc)) |
vrátit motor_power |
jiný: |
návrat base_speed * nejvyšší_motor_power |
run = False |
previous_error = 0 |
whileTrue: |
# pokud je stisknuto tlačítko a, začněte sledovat |
if button_a.is_pressed (): |
run = True |
#, ale pokud je stisknuto tlačítko b, zastavte sledovače řádků |
pokud button_b.is_pressed (): |
run = False |
integrál = 0,0 |
previous_error = 0,0 |
pixely_vypnuto () |
stop() |
sleep_ms (500) |
pokud je běh True: |
# přečtěte si čidla linky |
start_time = ticks_us () |
vpravo, vlevo = snímač čtení (LINE_SENSOR, BOTH) |
# řádek je vlevo, když je pozice <0,5 |
# řádek je vpravo, když je poloha> 0,5 |
# řádek je uprostřed, když pozice = 0,5 |
# je to vážený aritmetický průměr |
Snaž se: |
pozice = vpravo /plovoucí (vlevo + vpravo) |
kroměZeroDivisionError: |
pozice = 0,5 |
# rozsah musí být (0, 1) a ne [0, 1] |
pokud pozice == 0: pozice = 0,001 |
pokud pozice == 1: pozice = 0,999 |
# použijte PD ovladač |
chyba = poloha - žádaná hodnota |
integrál += chyba |
oprava = Kp * chyba + Ki * integrál + Kd * (chyba - předchozí_ chyba) |
previous_error = chyba |
# vypočítat otáčky motoru |
motor_speed = horní_bound_linear_speed_reducer (abs (chyba), setpoint * trigger_point, setpoint, min_speed_percent, 1.0) |
leftMotorSpeed = motor_speed + oprava |
rightMotorSpeed = motor_speed - oprava |
# rozsviťte neopixely podle dané chyby |
pokud run_neopixels isTrueaand total_counts %3 == 0: |
pro i inb '\ x00 / x01 / x02 / x03 / x04 / x05 / x06 / x07 / x08': |
neo = (0, 0, 0) |
pro i inb '\ x00 / x01 / x02 / x03': |
ifabs (chyba)> error_width_per_pixel * i: |
pokud chyba <0: |
# neo [center_pixel + i] = tyrkysová |
neo [center_pixel + i] = (12, 44, 41) |
jiný: |
# neo [center_pixel - i] = tyrkysová |
neo [center_pixel + i] = (12, 44, 41) |
jiný: |
procento = 1- (error_width_per_pixel * i -abs (chyba)) / error_width_per_pixel |
# rozsviťte aktuální pixel |
pokud chyba <0: |
# neo [center_pixel + i] = tuple (mapa (lambda x: int (x * procento), tyrkysová)) |
neo [center_pixel + i] = (int (64* procent /5), int (224* procent /5), int (208* procent /5)) |
jiný: |
# neo [center_pixel - i] = tuple (mapa (lambda x: int (x * procento), tyrkysová)) |
neo [center_pixel - i] = (int (64* procent /5), int (224* procent /5), int (208* procent /5)) |
přestávka |
neo.show () |
Snaž se: |
# omezte otáčky motoru |
je -li ponecháno MotorSpeed> 100: |
leftMotorSpeed = 100 |
rightMotorSpeed = rightMotorSpeed - leftMotorSpeed +100 |
pokud správně MotorSpeed> 100: |
rightMotorSpeed = 100 |
leftMotorSpeed = leftMotorSpeed - rightMotorSpeed +100 |
pokud je vlevo MotorSpeed <-100: |
leftMotorSpeed = -100 |
pokud rightMotorSpeed <-100: |
rightMotorSpeed = -100 |
# aktivujte motory |
set_speed (leftMotorSpeed, rightMotorSpeed) |
řídit() |
# tisk ((chyba, rychlost motoru)) |
až na: |
# v případě, že se dostaneme do nějakého neopravitelného problému |
složit |
# a udržujte frekvenci smyčky |
end_time = ticks_us () |
delay_diff = (end_time - start_time) /1000 |
if1000.0/ update_rate - delay_diff> 0: |
spánek (1000.0/ update_rate - delay_diff) |
zobrazit rawgigglebot_tuned_line_follower.py hostované s ❤ od GitHub
Krok 5: Nechte to běžet
![](https://i.ytimg.com/vi/6xfwGRyIrA4/hqdefault.jpg)
Na BBC micro: bit: tlačítko A a tlačítko B jsou 2 tlačítka:
- Stisknutím tlačítka A nastavíte GiggleBot tak, aby sledoval čáru (pokud existuje).
- Stisknutím tlačítka B GiggleBot zastavíte a vše resetujete, abyste jej mohli znovu použít.
Důrazně doporučujeme nezvedat GiggleBot, když jde po čáře, a pak ho na něj vrátit, protože chyba, která se vypočítává, se může nahromadit a úplně zkazit trasu robota. Pokud ho chcete zvednout, stiskněte tlačítko B a poté, co jej vrátíte zpět, stiskněte znovu A.
Doporučuje:
Monitorování akcelerace pomocí Raspberry Pi a AIS328DQTR pomocí Pythonu: 6 kroků
![Monitorování akcelerace pomocí Raspberry Pi a AIS328DQTR pomocí Pythonu: 6 kroků Monitorování akcelerace pomocí Raspberry Pi a AIS328DQTR pomocí Pythonu: 6 kroků](https://i.howwhatproduce.com/images/010/image-28686-j.webp)
Monitorování akcelerace pomocí Raspberry Pi a AIS328DQTR pomocí Pythonu: Podle některých fyzikálních zákonů je akcelerace konečná.- Terry Riley Gepard při pronásledování využívá úžasné zrychlení a rychlé změny rychlosti. Nejrychlejší tvor na břehu jednou za čas využije svého nejvyššího tempa k ulovení kořisti
Jak zapnout/vypnout Wifi pomocí příkazového řádku !!: 4 kroky
![Jak zapnout/vypnout Wifi pomocí příkazového řádku !!: 4 kroky Jak zapnout/vypnout Wifi pomocí příkazového řádku !!: 4 kroky](https://i.howwhatproduce.com/images/006/image-17124-15-j.webp)
Jak zapnout/vypnout Wifi pomocí příkazového řádku !!: Tento Instructable vám ukáže, jak zapnout nebo vypnout wifi na vašem počítači pomocí příkazového řádku Přihlaste se k odběru mého kanálu Děkuji
Vytvářejte časosběrná videa pomocí Raspberry Pi (11 řádků kódu): 12 kroků (s obrázky)
![Vytvářejte časosběrná videa pomocí Raspberry Pi (11 řádků kódu): 12 kroků (s obrázky) Vytvářejte časosběrná videa pomocí Raspberry Pi (11 řádků kódu): 12 kroků (s obrázky)](https://i.howwhatproduce.com/images/002/image-5896-26-j.webp)
Vytvářejte časosběrná videa pomocí Raspberry Pi (11 řádků kódu): Nedávno jsem poprvé zasadil semena do svého květináče. Byl jsem opravdu nadšený, když jsem je viděl růst, ale jak všichni víme, je to pomalý proces. Nemohl jsem vidět růst, byl jsem opravdu zklamaný, ale najednou se ve mně probudil nadšenec elektroniky uvnitř
Vytvořte virtuální síť Wifi pomocí příkazového řádku v systému Windows 10: 10 kroků
![Vytvořte virtuální síť Wifi pomocí příkazového řádku v systému Windows 10: 10 kroků Vytvořte virtuální síť Wifi pomocí příkazového řádku v systému Windows 10: 10 kroků](https://i.howwhatproduce.com/images/002/image-3621-57-j.webp)
Vytvořte virtuální síť Wifi pomocí příkazového řádku v systému Windows 10: Ukážu vám, jak vytváření virtuální sítě WiFi funguje na počítačích se systémem Windows 10. Ukážu několik kroků, jak postupovat, a také vysvětlím, zda váš počítač tuto funkci podporuje nebo ne
Jak sledovat hvězdné války pomocí počítačových symbolů na příkazovém řádku: 3 kroky
![Jak sledovat hvězdné války pomocí počítačových symbolů na příkazovém řádku: 3 kroky Jak sledovat hvězdné války pomocí počítačových symbolů na příkazovém řádku: 3 kroky](https://i.howwhatproduce.com/images/003/image-7436-52-j.webp)
Jak se dívat na Hvězdné války pomocí počítačových symbolů na příkazovém řádku: Toto je jen podivný trik, který jsem se naučil, a tak jsem se rozhodl toto zveřejnit. Můžete sledovat většinu začátku prvního filmu Starwars, což je epizoda IV z příkazového řádku vytvořeného nějakým chlapem. To je parádní. UPOZORNĚNÍ: Nepřijímám kredit za