Mündəricat:
- Addım 1: Tələb olunan komponentlər
- Addım 2: Parçaları qurun
- Addım 3: Ətraf mühitin qurulması
- Addım 4: GiggleBot proqramlaşdırılması
- Addım 5: Çalışmasına icazə verin
Video: Python istifadə edərək GiggleBot Xətti İzləyicisi: 5 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:45
Bu dəfə, MicroPython Dexter Industries GiggleBot-da, daxili xətt izləyicisi sensorundan istifadə edərək qara xətti izləmək üçün proqramlaşdırırıq.
GiggleBotun uyğun bir şəkildə idarə oluna bilməsi üçün BBC mikro: bit ilə birləşdirilməlidir.
Bu dərslik sizin üçün çox inkişaf etmişsə və GiggleBot -un proqramlaşdırılması indiyə qədər çoxdursa, robotun MakeCode -da necə proqramlaşdırılacağını göstərən başlanğıc dərsindən keçə bilərsiniz. Əlaqələndirilmiş dərslik sizi əsaslarla tanış edəcək.
Addım 1: Tələb olunan komponentlər
Aşağıdakı hardware komponentləri tələb olunur:
- x3 AA batareyaları - mənim vəziyyətimdə ümumilikdə daha aşağı gərginlikli batareyaları istifadə edirəm.
- Mikro: bit üçün Dexter Industries GiggleBot robotu.
- BBC mikro: bit.
Əlbəttə ki, BBC mikro: bitini proqramlaşdırmaq üçün bir mikro USB kabelinə də ehtiyacınız var - bu kabel ümumiyyətlə BBC micro: bit paketinin içərisindədir və ya hər zaman (Android) smartfonların doldurulması üçün istifadə olunan birindən istifadə edə bilərsiniz.
Micro: GiggleBot -u buradan əldə edin
Addım 2: Parçaları qurun
Bəzi kafelləri çap etdirmək və öz mahnılarınızı tərtib etmək məcburiyyətində qalacaqsınız. Şərtlərimizi təkrarladığınızdan 100% əmin olduğunuz üçün öz plitələrimizdən istifadə edə bilərsiniz. Və ya macəra hiss edirsinizsə, qara lentdən istifadə edərək özünüz edə bilərsiniz. İşdə istifadə etdiyimiz plitələr üçün PDF.
Yuxarıdakı trek aşağıdakı sayda fərqli plitələrdən ibarətdir:
- 1 nömrəli 12 plitələr.
- 2 nömrəli 5 plitələr.
- 5 nömrəli kafel tipli 3 şablon.
- 6 nömrəli kafel tipli 3 şablon - burada bir əlavə kafel ilə başa çatacaqsınız.
Sonra onları çap edin və kəsin. Onları yuxarıdakı fotoşəkildə olduğu kimi yerləşdirməyə çalışın və yolun sağ üst tərəfində 2 plitənin bir -biri ilə üst -üstə düşməsi lazım olduğunu unutmayın - səhv bir şey etdiyinizi düşünürsünüzsə bu gözlənilir.
Addım 3: Ətraf mühitin qurulması
MicroPython -da BBC micro: bit proqramlaşdıra bilməyiniz üçün bunun üçün bir redaktor (Mu Redaktor) qurmalı və GiggleBot MicroPython İşləmə müddətini iş vaxtı olaraq təyin etməlisiniz. Bunun üçün bu səhifədəki təlimatları izləməlisiniz. Bu andan etibarən, iş vaxtının v0.4.0 versiyası istifadə olunur.
Addım 4: GiggleBot proqramlaşdırılması
Başa düşməzdən əvvəl, GiggleBot MicroPython iş vaxtı BBC micro: bit və digər kitabxanalar üçün GiggleBot və digər Dexter Industries Sensorlarını dəstəkləmək üçün klassik iş vaxtını ehtiva edir.
Qurduqdan sonra Mu redaktorunda aşağıdakı skripti açın və Flash düyməsini basın. Bu, GiggleBot MicroPython Runtime və yeni açdığınız skriptini BBC micro: bit -ə yandıracaq. Ssenari də aşağıda göstərilmişdir.
Yanıp sönmə prosesi başa çatdıqdan sonra, BBC micro: bit -i GiggleBot -a taxtanın neopikselləri irəli baxaraq yığın, yola qoyun və yandırın.
Skriptdə PID və digər 2 sabitin (sürət təyin nöqtəsi və minimum sürət sabitləri) artıq qurulduğuna diqqət yetirin.
Qeyd: Aşağıdakı skriptdə boş yerlər ola bilər və bu, GitHub Gists -in göstərilməsindəki bəzi problemlərlə əlaqəli görünür. Sizi kodu kopyalayıb yapışdıra biləcəyiniz GitHub səhifəsinə aparmaq üçün mahiyyəti vurun.
GiggleBot PID Line Follower - NeoPixels ilə tənzimlənmişdir
microbit idxalından* |
gigglebot idxalından* |
utime import_su_ms, ticks_us |
idxal idarəsi |
# GB neopikselləri işə salın |
neo = başlanğıc () |
# zamanlama |
update_rate = 50 |
# qazanc/sabit (batareya gərginliyinin 4,0 volt civarında olduğunu nəzərə alsaq) |
Kp = 25.0 |
Ki = 0.5 |
Kd = 35.0 |
trigger_point = 0.3 |
min_speed_percent = 0.3 |
əsas_sürət = 70 |
təyin nöqtəsi = 0.5 |
last_position = setpoint |
inteqral = 0.0 |
run_neopixels = Doğrudur |
center_pixel = 5# təbəssümün mərkəzi pikselinin GB -də yerləşdiyi yer |
# turkuaz = tuple (xəritə (lambda x: int (x / 5), (64, 224, 208))) # neopixel ilə səhv çəkmək üçün istifadə ediləcək rəng |
# turkuaz = (12, 44, 41) # tam olaraq yuxarıdakı firuzə bunun üzərində şərh etdi |
error_width_per_pixel = 0.5/3# maksimum səhv, hər bir neopiksel arasındakı seqmentlərin sayına bölünür |
defupper_bound_linear_speed_reducer (abs_error, trigger_point, üst_bağlı, ən kiçik_motor_gücü, ən yüksək_motor_gücü): |
qlobal baza sürəti |
əgər abs_error> = trigger_point: |
# x0 = 0.0 |
# y0 = 0.0 |
# x1 = yuxarı_bağlı - tətik nöqtəsi |
# y1 = 1.0 |
# x = abs_error - tətik nöqtəsi |
# y = y0 + (x - x0) * (y1 - y0) / (x1 - x0) |
# eyni ilə |
y = (abs_error - tətik nöqtəsi) / (yuxarı_bağlı - tetikleyici_ nöqtə) |
motor_gücü = baza sürəti * (ən kiçik_motor_gücü + (1- y) * (ən yüksək_motor_ gücü - ən kiçik_motor_ gücü)) |
motor gücünü qaytarın |
başqa: |
qayıt baza sürəti * ən yüksək_motor_gücü |
run = Yanlış |
əvvəlki_xəta = 0 |
whileTrue: |
# a düyməsinə basıldıqda izləməyə başlayın |
əgər button_a.is_pressed (): |
run = Doğru |
# amma b düyməsinə basıldıqda xətt izləyicisini dayandırın |
əgər button_b.is_pressed (): |
run = Yanlış |
inteqral = 0.0 |
əvvəlki_xəta = 0.0 |
pixel_off () |
dayan () |
yuxu_ms (500) |
run isTrue olarsa: |
# xətt sensorlarını oxuyun |
start_time = ticks_us () |
sağ, sol = oxumaq_sensoru (LINE_SENSOR, İKİSİ) |
mövqe <0.5 olduqda # xətt soldadır |
mövqe> 0,5 olduqda # xətt sağdadır |
mövqe = 0.5 olduqda # xətt ortadadır |
# ağırlıqlı arifmetik ortalamadır |
cəhd edin: |
mövqe = sağ /üzmək (sol + sağ) |
ZeroDivisionError istisna olmaqla: |
mövqe = 0.5 |
# aralıq [0, 1] olmalı və [0, 1] deyil |
mövqe == 0 olarsa: mövqe = 0.001 |
mövqe == 1 olarsa: mövqe = 0.999 |
# bir PD nəzarətçisindən istifadə edin |
səhv = mövqe - təyin olunan nöqtə |
inteqral += səhv |
düzəliş = Kp * xətası + Ki * integral + Kd * (səhv - əvvəlki_hata) |
əvvəlki_xəta = səhv |
# motor sürətini hesablayın |
motor_sürəti = yuxarı_bağlı_xətti_sürət_ötürücü (abs (səhv), təyinat nöqtəsi * tətik nöqtəsi, təyin nöqtəsi, min_sürət_fərdi, 1.0) |
leftMotorSpeed = motor_sürəti + düzəliş |
rightMotorSpeed = motor_sürəti - düzəliş |
# verilən xətaya görə neopikselləri işıqlandırın |
əgər run_neopixelsTrueand total_counts %3 == 0 olarsa: |
i inb '\ x00 / x01 / x02 / x03 / x04 / x05 / x06 / x07 / x08' üçün: |
neo = (0, 0, 0) |
i inb '\ x00 / x01 / x02 / x03' üçün: |
ifabs (səhv)> error_width_per_pixel * i: |
səhv <0: |
# neo [center_pixel + i] = firuzəyi |
neo [center_pixel + i] = (12, 44, 41) |
başqa: |
# neo [center_pixel - i] = firuzəyi |
neo [center_pixel + i] = (12, 44, 41) |
başqa: |
faiz = 1- (error_width_per_pixel * i -abs (error)) / error_width_per_pixel |
# cari pikseli işıqlandırın |
səhv <0: |
# neo [center_pixel + i] = tuple (xəritə (lambda x: int (x * faiz), firuzə)) |
neo [center_pixel + i] = (int (64* faiz /5), int (224* faiz /5), int (208* faiz /5)) |
başqa: |
# neo [center_pixel - i] = tuple (xəritə (lambda x: int (x * faiz), firuzə)) |
neo [center_pixel - i] = (int (64* faiz /5), int (224* faiz /5), int (208* faiz /5)) |
fasilə |
neo.show () |
cəhd edin: |
# motor sürətini kəsin |
solMotorSpeed> 100: |
solMotorSpeed = 100 |
rightMotorSpeed = sağMotorSpeed - solMotorSpeed +100 |
sağMotorSpeed> 100: |
sağMotorSpeed = 100 |
leftMotorSpeed = leftMotorSpeed - sağMotorSpeed +100 |
solMotorSpeed <-100: |
solMotorSpeed = -100 |
sağMotorSpeed <-100: |
sağMotorSpeed = -100 |
# motorları işə salın |
set_speed (solMotorSpeed, sağMotorSpeed) |
sürmək () |
# çap ((səhv, motor sürəti)) |
istisna olmaqla: |
# həll olunmayan bir problemlə üzləşsək |
keçmək |
# və döngə tezliyini qoruyun |
end_time = ticks_us () |
gecikmə_diff = (bitmə vaxtı - başlanğıc_vaxt) /1000 |
if1000.0/ update_rate - delay_diff> 0: |
yuxu (1000.0/ update_rate - delay_diff) |
GitHub tərəfindən ❤ ilə ev sahibliyi edən rawgigglebot_tuned_line_follower.py -yə baxın
Addım 5: Çalışmasına icazə verin
BBC mikro -da 2 düymə var: bit: A düyməsi və B düyməsi:
- A düyməsini basmaq GiggleBotu xətti izləməyə qoyur (əgər varsa).
- B düyməsini basmaq GiggleBotu dayandırır və yenidən istifadə etmək üçün hər şeyi sıfırlayır.
GiggleBotu bir xətti izləyərkən qaldırmamaq və sonra yenidən taxmaq tövsiyə olunur, çünki hesablama xətası robotun marşrutunu yığa və tamamilə poza bilər. Qaldırmaq istəyirsinizsə, B düyməsini basın və sonra geri qoyduğunuzda yenidən A düyməsini basın.
Tövsiyə:
PID xətti izləyicisi Atmega328P: 4 addım
PID Line Follower Atmega328P: GİRİŞ Bu təlimat beyninin içərisində çalışan PID (proporsional-inteqral-törəmə) Nəzarət (Riyazi) (Atmega328P) ilə səmərəli və etibarlı bir Xətt İzləyicisi hazırlamaqla əlaqədardır
ESP8266 və OLED istifadə edərək Canlı Covid19 İzləyicisi - Real vaxt Covid19 Tablosuna: 4 addım
ESP8266 və OLED istifadə edərək Canlı Covid19 İzləyicisi | Realtime Covid19 Tablosuna: Techtronic Harsh Veb saytına daxil olun: http: //techtronicharsh.com Hər yerdə yeni bir Corona Virusunun (COVID19) böyük bir yayılması var. Dünyada mövcud olan COVID-19 ssenarisini izləmək lazım gəldi, buna görə də evdə olarkən, bu
Python istifadə edərək Raspberry Pi və AIS328DQTR istifadə edərək sürətlənməni izləyin: 6 addım
Python istifadə edərək Raspberry Pi və AIS328DQTR istifadə edərək Sürətləndirməni izləyin: Sürətləndirmə sonsuzdur, düşünürəm ki, Fizikanın bəzi qanunlarına görə. Sahilə çıxan ən sürətli məxluq, bir anda ən yüksək sürətindən istifadə edərək ovunu tutur
Dünyanın ən kiçik xətti izləyicisi robotu necə etmək olar (robo Rizeh): 7 addım (şəkillərlə)
Dünyanın ən kiçik xətti izləyicisi robotu necə etmək olar (robo Rizeh): dünyanın ən kiçik xətt izləyicisi robotu (vibrobot) necə etmək olar " roboRizeh " çəki: 5qr ölçü: 19x16x10 mm: Naghi Sotoudeh Sözü " Rizeh " "kiçik" mənasını verən fars sözüdür. Rizeh, titrəməyə əsaslanan çox kiçik bir ro
Arduino + DS1307 + Neopixel istifadə edərək Xətti Saat: Bəzi Avadanlıqların Yenidən İstifadəsi .: 5 Addım
Arduino + DS1307 + Neopixel istifadə edərək xətti saat: Bəzi avadanlıqları yenidən istifadə edin. Əvvəlki layihələrdə Arduino UNO və Neopixel LED şeridi qaldı və fərqli bir şey etmək istədim. Neopixel zolağında böyük bir saat kimi istifadə ediləcəyi düşünülən 60 LED işığı olduğu üçün Saatları göstərmək üçün qırmızı 5 LEDli seqment istifadə olunur (60 LED