İçindekiler:
- Adım 1: Gerekli Bileşenler
- Adım 2: Parçaları Ayarlayın
- 3. Adım: Ortamı Ayarlama
- Adım 4: GiggleBot'u Programlama
- Adım 5: Çalıştırmasına İzin Vermek
Video: Python Kullanan GiggleBot Çizgi Takipçisi: 5 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
Bu sefer MicroPython'da Dexter Industries GiggleBot'u yerleşik çizgi takipçi sensörünü kullanarak siyah bir çizgiyi takip edecek şekilde programlıyoruz.
GiggleBot'un uygun şekilde kontrol edilebilmesi için bir BBC micro:bit ile eşleştirilmesi gerekir.
Bu öğretici sizin için fazla gelişmişse ve GiggleBot'u programlamak şimdilik çok fazlaysa, robotun MakeCode'da nasıl programlanabileceğini gösteren başlangıç eğitimini her zaman buradan inceleyebilirsiniz. Bağlantılı öğretici, temel bilgilerde size yol gösterecektir.
Adım 1: Gerekli Bileşenler
Aşağıdaki donanım bileşenleri gereklidir:
- x3 AA piller - benim durumumda genel olarak daha düşük voltajlı şarj edilebilir piller kullanıyorum.
- Micro:bit için bir Dexter Industries GiggleBot robotu.
- Bir BBC mikro:bit.
Tabii ki, BBC micro:bit'i programlamak için bir mikro USB kablosuna da ihtiyacınız var - bu kablo genellikle BBC micro:bit'in paketinde gelir veya her zaman akıllı telefonları şarj etmek için (Android) kullanılanı kullanabilirsiniz.
Micro:bit için GiggleBot'u buradan edinin
Adım 2: Parçaları Ayarlayın
Bazı karoları basmak ve kendi parçalarınızı tasarlamak zorunda kalacaksınız. Koşullarımızı tekrarladığınızdan %100 emin olmak için kendi karolarımızı kullanabilirsiniz. Ya da maceraperest hissediyorsanız, biraz siyah bant kullanabilir ve kendinizinkini yapabilirsiniz. İşte kullandığımız karoların PDF'si.
Yukarıdaki parça, aşağıdaki sayıda farklı karodan oluşur:
- 12 karo tip #1.
- 2 tip 5 fayans.
- 3 karo tipi #5 şablonu.
- 3 karo türü #6 şablonu - burada, fazladan bir karo elde edeceksiniz.
Sırada, onları yazdırın ve kesin. Bunları yukarıdaki fotoğraftaki gibi yerleştirmeyi deneyin ve pistin sağ üst tarafında 2 karonun birbiriyle örtüşmesi gerektiğini unutmayın - yanlış bir şey yapıp yapmadığınızı merak ediyorsanız bu beklenir.
3. Adım: Ortamı Ayarlama
BBC micro:bit'i MicroPython'da programlayabilmeniz için, onun için bir düzenleyici (Mu Düzenleyici) kurmanız ve çalışma zamanı olarak GiggleBot MicroPython Çalışma Zamanını ayarlamanız gerekir. Bunun için bu sayfadaki talimatları izlemelisiniz. Bu andan itibaren, çalışma zamanının v0.4.0 sürümü kullanılmaktadır.
Adım 4: GiggleBot'u Programlama
Başlamadan önce, GiggleBot MicroPython çalışma zamanı, BBC micro:bit için klasik çalışma zamanını ve GiggleBot ve diğer Dexter Industries Sensörlerini destekleyen diğer kitaplıkları içerir.
Ayarladıktan sonra, Mu editöründe aşağıdaki betiği açın ve Flash'a tıklayın. Bu, GiggleBot MicroPython Runtime'ı ve az önce açtığınız komut dosyasını BBC micro:bit'inize flaş edecektir. Komut dosyası da aşağıda gösterilmiştir.
Flashlama işlemi tamamlandıktan sonra, BBC micro:bit'i kartın neopikselleri öne bakacak şekilde GiggleBot'a istifleyin, raya yerleştirin ve açın.
Komut dosyasında PID ve diğer 2 sabitin (hız ayar noktası ve minimum hız sabitleri) zaten ayarlanmış olduğuna dikkat edin.
Not: Aşağıdaki komut dosyasında boşluklar eksik olabilir ve bu, GitHub Gists'in görüntülenmesindeki bazı sorunlardan kaynaklanıyor gibi görünüyor. Sizi kodu kopyalayıp yapıştırabileceğiniz GitHub sayfasına götürmek için özü tıklayın.
GiggleBot PID Çizgi Takipçisi - NeoPixels ile Ayarlandı
mikrobit içe aktarmadan* |
gigglebot içe aktarmadan* |
utime import sleep_ms, ticks_us |
ithalat yapısı |
# GB neopiksellerini başlat |
neo = init() |
# zamanlama |
güncelleme oranı =50 |
# kazançlar/sabitler (akü voltajının 4.0 volt civarında olduğu varsayılarak) |
Kp =25,0 |
Ki = 0,5 |
Kd =35,0 |
tetikleyici_nokta =0.3 |
min_speed_percent = 0,3 |
temel_hız =70 |
ayar noktası = 0,5 |
last_position = ayar noktası |
integral =0.0 |
run_neopixels =Doğru |
center_pixel =5# gülümsemenin merkez pikselinin GB'de bulunduğu yer |
# turquoise = tuple(map(lambda x: int(x / 5), (64, 224, 208))) # neopiksellerle hatayı çizmek için kullanılacak renk |
# turkuaz = (12, 44, 41) # tam olarak yukarıdaki turkuaz bunun üstüne yorum yaptı |
error_width_per_pixel =0.5/3# maksimum hata bölü her neopiksel arasındaki segment sayısı |
defupper_bound_linear_speed_reducer(abs_error, tetikleme_noktası, üst_sınır, en küçük_motor_gücü, en yüksek_motor_gücü): |
küresel base_speed |
abs_error >= trigger_point ise: |
# x0 = 0.0 |
# y0 = 0.0 |
# x1 = üst sınır - tetikleyici_nokta |
# y1 = 1.0 |
# x = abs_error - tetikleyici_nokta |
# y = y0 + (x - x0) * (y1 - y0) / (x1 - x0) |
# ile aynı |
y = (abs_error - tetikleme_noktası) / (üst_sınır - tetikleme_noktası) |
motor_power = temel_hız * (en küçük_motor_gücü + (1- y) * (en yüksek_motor_gücü - en küçük_motor_gücü)) |
dönüş motor_power |
Başka: |
dönüş base_speed * en yüksek_motor_power |
çalıştır =Yanlış |
önceki_hata =0 |
whileTrue: |
# a düğmesine basılırsa takip etmeye başlayın |
button_a.is_pressed() ise: |
çalıştır =Doğru |
# ancak b düğmesine basılırsa çizgi izleyeni durdurun |
button_b.is_pressed() ise: |
çalıştır =Yanlış |
integral =0.0 |
önceki_hata =0.0 |
piksel_kapalı() |
Dur() |
uyku_ms(500) |
isTrue çalıştırılırsa: |
# hat sensörlerini oku |
start_time = ticks_us() |
sağ, sol = read_sensor(LINE_SENSOR, BOTH) |
# satır, konum < 0,5 olduğunda soldadır |
# satır, konum > 0,5 olduğunda sağdadır |
# konum = 0,5 olduğunda satır ortadadır |
# ağırlıklı bir aritmetik ortalama |
denemek: |
pozisyon = sağ /float(sol + sağ) |
hariçZeroDivisionError: |
konum = 0,5 |
# aralık (0, 1) olmalı ve [0, 1] değil |
konum ==0 ise: konum =0,001 |
konum ==1 ise: konum =0.999 |
# bir PD denetleyicisi kullanın |
hata = konum - ayar noktası |
integral += hata |
düzeltme = Kp * hata + Ki * integral + Kd * (hata - önceki_hata) |
önceki_hata = hata |
# motor hızlarını hesapla |
motor_speed = high_bound_linear_speed_reducer(abs(hata), ayar noktası * tetikleme_noktası, ayar noktası, min_speed_percent, 1.0) |
leftMotorSpeed = motor_speed + düzeltme |
rightMotorSpeed = motor_speed - düzeltme |
# verilen hataya göre neopikselleri aydınlat |
run_neopixels isTrueand total_counts ise %3==0: |
i inb'\x00\x01\x02\x03\x04\x05\x06\x07\x08' için: |
neo = (0, 0, 0) |
i inb'\x00\x01\x02\x03' için: |
ifabs(hata) > error_width_per_pixel * i: |
hata <0 ise: |
# neo[center_pixel + i] = turkuaz |
neo[center_pixel + i] = (12, 44, 41) |
Başka: |
# neo[center_pixel - i] = turkuaz |
neo[center_pixel + i] = (12, 44, 41) |
Başka: |
yüzde =1- (error_width_per_pixel * i -abs(error)) / error_width_per_pixel |
# mevcut pikseli aydınlat |
hata <0 ise: |
# neo[center_pixel + i] = demet(harita(lambda x: int(x * yüzde), turkuaz)) |
neo[center_pixel + i] = (int(64* yüzde /5), int(224* yüzde /5), int(208* yüzde /5)) |
Başka: |
# neo[center_pixel - i] = demet(harita(lambda x: int(x * yüzde), turkuaz)) |
neo[center_pixel - i] = (int(64* yüzde /5), int(224* yüzde /5), int(208* yüzde /5)) |
kırmak |
neo.göster() |
denemek: |
# motor hızlarını kırpın |
sol Motor Hızı >100 ise: |
solMotorHızı =100 |
rightMotorSpeed = rightMotorSpeed - leftMotorSpeed +100 |
sağ Motor Hızı >100 ise: |
sağMotorHızı =100 |
leftMotorSpeed = leftMotorSpeed - rightMotorSpeed +100 |
Motor Hızı <-100 ise: |
solMotorHızı =-100 |
doğruysaMotor Hızı <-100: |
sağMotorHızı =-100 |
# motorları çalıştır |
set_speed(leftMotorSpeed, rightMotorSpeed) |
sürmek() |
# print((hata, motor_hızı)) |
hariç: |
# çözülemez bir sorunla karşılaşırsak diye |
geçmek |
# ve döngü frekansını koru |
end_time = ticks_us() |
delay_diff = (bitiş_zamanı - başlangıç_zamanı) /1000 |
if1000.0/ update_rate - delay_diff >0: |
uyku(1000.0/ update_rate - delay_diff) |
GitHub tarafından ❤ ile barındırılan rawgigglebot_tuned_line_follower.py dosyasını görüntüleyin
Adım 5: Çalıştırmasına İzin Vermek
BBC micro:bit üzerinde 2 düğme vardır: düğme A ve düğme B:
- A düğmesine basmak, GiggleBot'u çizgiyi takip edecek şekilde ayarlar (eğer varsa).
- B düğmesine basmak GiggleBot'u durdurur ve tekrar kullanabilmeniz için her şeyi sıfırlar.
GiggleBot'u bir çizgiyi takip ederken kaldırmamanız ve ardından tekrar takmamanız şiddetle tavsiye edilir, çünkü hesaplanan hata birikebilir ve robotun rotasını tamamen bozabilir. Kaldırmak istiyorsanız B düğmesine basın ve geri koyduğunuzda tekrar A düğmesine basın.
Önerilen:
Tinkercad'de Çizgi Takipçisi: 3 Adım
Tinkercad'de Çizgi Takipçisi: A-Line Follower Robot, adından da anlaşılacağı gibi, zemine veya tavana gömülü görsel bir çizgiyi takip eden, otomatik yönlendirmeli bir araçtır. Genellikle görsel çizgi, çizgi izleyen robotun gittiği yoldur ve bir anda siyah bir çizgi olacaktır
PID Çizgi Takipçisi Atmega328P: 4 Adım
PID Çizgi Takipçisi Atmega328P: GİRİŞBu talimat, beyninin içinde çalışan PID (orantılı-integral-türev) Kontrollü (Matematiksel) (Atmega328P) ile verimli ve güvenilir bir Çizgi Takipçisi yapmakla ilgilidir. Çizgi takipçisi, her iki b
Arduino Kullanan Basit Çizgi Takipçisi: 5 Adım
Arduino Kullanan Basit Çizgi İzleyici: Arduino Çizgi İzleyen Robot Bu dersimizde, beyaz arka planda siyah bir çizgiyi takip edecek ve yolundaki eğrilere ulaştığında doğru dönüşü yapacak bir Arduino çizgi izleyen robotun çalışmasını tartışacağız. Arduino Hat Takipçisi Co
Bölüm 3: GPIO: ARM Montajı: Çizgi Takipçisi: TI-RSLK: 6 Adım
Bölüm 3: GPIO: ARM Montajı: Çizgi Takipçisi: TI-RSLK: Merhaba. Bu, ARM derlemesini kullanmaya devam ettiğimiz bir sonraki taksittir (daha yüksek seviyeli bir dil yerine). Bu Eğitilebilir Yazının ilham kaynağı, Texas Instruments Robotics System Learning Kit'in Lab 6'sı veya TI-RSLK'dır. Mikrofonu kullanacağız
Arduino Kullanan Çizgi Takipçisi - Kolay Kendin Yap Projesi: 6 Adım
Arduino Kullanan Çizgi Takipçisi | Kolay Kendin Yap Projesi: Bu dersimizde ArduinoParts Needed kullanarak bir çizgi takipçisi yapacağız: Şasi: BO Motorlar ve Tekerlekler: https://amzn.to/2Yjh9I7 L298n motor Sürücü: https://amzn.to/2IWNMWF IR sensörü : https://amzn.to/2FFtFu3 Arduino Uno: https://amzn.to/2FyTrjF J