İçindekiler:
- Adım 1: Gerekli Bileşenler
- Adım 2: Robotu Birleştirme
- 3. Adım: Kendi Labirentinizi Yaratın - İsteğe Bağlı
- 4. Adım: Ortamı Ayarlama
- Adım 5: GiggleBot'u Programlama - Bölüm I
- Adım 6: Uzaktan Kumandayı Programlama - Bölüm II
- 7. Adım: Uzak Ekranın Yorumlanması
Video: GiggleBot ile Lidar Güdümlü Robot Yapın: 8 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
Bu eğitimde, GiggleBot'un bir labirentin zorluklarını çözmesini sağlıyoruz.
Mesafe sensörü taktığımız GiggleBot üzerine servo monte ediyoruz. Koşarken servo ileri geri dönecektir, böylece mesafe sensörü her bir engele kadar olan mesafeyi ölçebilir. Bu, genellikle çok daha pahalı olan bir LIDAR sensörü gibi çalışır.
Aynı zamanda, GiggleBot bu verileri 5'e 5 LED matrisinde engellere göre konumunu gösteren uzak bir BBC micro:bit'e gönderiyor.
İşiniz, GiggleBot'ta yalnızca diğer BBC micro:bit'te gösterilene bakarak gezinebilmektir. GiggleBot'u kontrol etmek için uzak BBC micro:bit üzerindeki düğmeler kullanılır.
Kulağa eğlenceli geliyor! Başlayalım, olur mu?
Adım 1: Gerekli Bileşenler
İhtiyacımız olacak:
- Bir GiggleBot.
- BBC micro:bit için bir pil takımı. Paketinde bir BBC micro:bit ile birlikte gelir.
- GiggleBot için x3 AA piller.
- Mesafe sensörünü GiggleBot'a bağlamak için bir Grove kablosu.
- DexterIndustries'dan bir Servo kiti.
- x3 BBC mikro: bitler. Biri GiggleBot için, diğeri robotu uzaktan kontrol etmek için kullanılır.
- DexterIndustries'dan bir Mesafe Sensörü.
BBC micro:bit için GiggleBot robotunu buradan edinin!
Adım 2: Robotu Birleştirme
GiggleBot'u programlanmaya hazır hale getirmek için, yapılması gereken çok fazla bir şey olmamasına rağmen onu bir araya getirmemiz gerekiyor.
3 adet AA pili GiggleBot'un altındaki bölmesine yerleştirin.
Servo paketini birleştirin. Servonun dönen koluna, servoyu GiggleBot'un ön konektörlerine sabitlemek için son deliğini kullanın. Yerinde daha stabil hale getirmek için bir vida ve/veya bir miktar tel kullanabilirsiniz. Veya tahtaya sıcak yapıştırabilirsiniz. Benim durumumda, servo kolu GiggleBot kartına bağlamak için bir vida ve kısa tel kullandım.
Servo kolunu servoya monte ederken, servonun zaten 80 konumuna ayarlandığından emin olun. Bunu gigglebot.set_servo(gigglebot. RIGHT, 80) numaralı telefonu arayarak yapabilirsiniz. Buradan daha fazlasını okuyabilirsiniz.
Ardından mesafe sensörünü servo paketinin ön tarafına yerleştirin ve yukarıdaki örnekteki gibi sabitleyin.
Son olarak mesafe sensörünü bir Grove kablosu ile 2 I2C portundan herhangi birine ve servo motoru GiggleBot üzerinde bulunan sağ porta bağlayın - üzerinde doğru port belirtilmiştir.
3. Adım: Kendi Labirentinizi Yaratın - İsteğe Bağlı
Bu durumda, NASCAR'a benzer bir kapalı döngü izi oluşturmak için bir sürü kutu kullandım.
Bu adımda, gerçekten yaratıcı olabilir ve istediğiniz kadar çarpık hale getirebilir veya gerçekten size bağlı olduğu için çok uzun yapabilirsiniz.
Ya da hiç pist istemiyorsanız, örneğin GiggleBot'u bir mutfağa veya oturma odasına koyabilirsiniz - bu yeterince iyi olmalı çünkü hala kaçınmanız gereken çok sayıda duvar ve engel var.
4. 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 yönergeleri takip etmelisiniz. Bu andan itibaren, çalışma zamanının v0.4.0 sürümü kullanılmaktadır.
Adım 5: GiggleBot'u Programlama - Bölüm I
İlk olarak, GiggleBot'un betiğini ayarlayalım. Bu komut dosyası GiggleBot'un servo motorunu 160 derece (her yönde 80 derece) döndürürken aynı zamanda dönüş başına mesafe sensöründen 10 okuma yapmasını sağlar.
Açıldığında, GiggleBot uzaktan kumandadan bir komut alana kadar beklemede kalacaktır. Yalnızca 3 komut olabilir: ileri, sola veya sağa hareket ettirin.
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.
Uzaktan Kumandalı LIDAR tabanlı GiggleBot
gigglebot içe aktarmadan* |
Distance_sensor'dan Uzaklık Sensörünü içe aktar |
mikrobit içe aktarma uykusundan |
utime import ticks_us, sleep_us |
ithalat yapısı |
ithal radyo |
# robot zaten hareket ediyorsa onu durdur |
Dur() |
# radyoyu etkinleştir |
radyo.on() |
# mesafe sensörü nesnesi |
ds = Mesafe Sensörü() |
ds.start_sürekli() |
döndürme_zamanı =0.7# saniye cinsinden ölçülür |
döndürme_span = 160# derece cinsinden ölçülür |
döndürme_adımları =10 |
genel gider_kompansasyon =1.05# yüzde olarak tanımlandı |
time_per_step =10**6* döndürme_zamanı / (rotate_steps *head_compensation) |
last_read_time =0 |
radar =bytearray(döndürme_adımları) |
servo_rotate_direction =0# 0 yukarı gitmek için (0->160) ve aksi halde 1 |
radar_index =0 |
set_servo(SAĞ, 0) |
whileTrue: |
# radardan oku |
eğer ticks_us() - last_read_time > time_per_step: |
# mesafe sensöründen oku |
radar[radar_index] =int(ds.read_range_continuous() /10) |
last_read_time = ticks_us() |
yazdır(radar_index) |
# servoyu soldan sağa döndürme mantığını yapın |
eğer radar_index == döndürme_adımları -1ve servo_rotate_direction ==0 ise: |
set_servo(SAĞ, 0) |
servo_rotate_direction =1 |
elif radar_index ==0ve servo_rotate_direction ==1: |
set_servo(SAĞ, döndürme_span) |
servo_rotate_direction =0 |
Başka: |
radar_index +=1if servo_rotate_direction ==0else-1 |
# ve radar değerlerini gönder |
radio.send_bytes(radar) |
denemek: |
# robot komutlarını oku |
lmotor, rmotor = ustruct.unpack('bb', radio.receive_bytes()) |
# ve alınan herhangi bir komut olması durumunda motorları çalıştırın |
set_speed(lmotor, rmotor) |
sürmek() |
hariçTypeError: |
geçmek |
GitHub tarafından ❤ ile barındırılan rawgigglebot_lidar_robot.py'yi görüntüleyin
Adım 6: Uzaktan Kumandayı Programlama - Bölüm II
Yapılması gereken, uzaktan kumanda görevi gören 2. BBC micro:bit'i programlamak.
Uzaktan kumanda, 5'e 5 pikselden oluşan ekranında engellere olan bağıl mesafeyi görüntülemek için kullanılır. En fazla 10 piksel açık olacaktır.
Aynı zamanda, uzaktan kumanda size GiggleBot'u 2 düğmesine basarak uzaktan kontrol etme yeteneği verir: ileri, sola ve sağa hareket 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.
Uzaktan Kumandalı LIDAR tabanlı GiggleBot - Uzaktan Kod
mikrobit içe aktarmadan uyku, ekran, button_a, button_b |
ithalat yapısı |
ithal radyo |
matematik ithal etmek |
radyo.on() |
döndürme_adımları =10 |
döndürme_span = 160# derece cinsinden |
döndürme_adım = döndürme_span / döndürme_adımları |
max_mesafe =50# santimetre cinsinden |
side_length_leds =3# piksel sayısıyla ölçülür |
radar =bytearray(döndürme_adımları) |
xar =bytearray(döndürme_adımları) |
yar =bytearray(döndürme_adımları) |
save_xar =bytearray(döndürme_adımları) |
save_yar =bytearray(döndürme_adımları) |
motor_hızı =50 |
whileTrue: |
durum = radio.receive_bytes_into(radar) |
durum Yok ise: |
# display.clear() |
c için, val numaralandırma(radar): |
eğer radar[c] <= max_mesafe: |
# her mesafenin 2 boyutlu koordinatlarını hesapla |
açı = döndürme_adımları / (döndürme_adımları -1) * döndürme_adım * c |
açı += (180- döndürme_açıklığı) /2.0 |
x_c = matematik.cos(açı * matematik.pi /180.0) * radar[c] |
y_c = matematik.sin(açı * matematik.pi /180.0) * radar[c] |
# mesafeleri 5x5 mikrobit ekrana sığacak şekilde ölçeklendirin |
x_c = x_c * (yan_uzunluk_ledleri -1) / maks_mesafe |
y_c = y_c * (yan_uzunluk_ledleri +1) / maks_mesafe |
# koordinatları yeniden konumlandır |
x_c += (yan_uzunluk_ledleri -1) |
y_c = (yan_uzunluk_ledleri +1) - y_c |
# tam olarak LED'lerin bulunduğu yuvarlak koordinatlar |
if x_c - math.floor(x_c) <0.5: |
x_c = matematik.zemin(x_c) |
Başka: |
x_c = matematik.ceil(x_c) |
if y_c - math.floor(y_c) <0.5: |
y_c = matematik.kat(y_c) |
Başka: |
y_c = matematik.ceil(y_c) |
xar[c] = x_c |
yar[c] = y_c |
Başka: |
xar[c] =0 |
yar[c] =0 |
display.clear() |
x, y için inzip(xar, yar): |
display.set_pixel(x, y, 9) |
# print(list(zip(xar, yar, radar))) |
durumA = button_a.is_pressed() |
durumB = button_b.is_pressed() |
durumA ve durumB ise: |
radio.send_bytes(ustruct.pack('bb', motor_speed, motor_speed)) |
print('ileri') |
durum A ve durumB değilse: |
radio.send_bytes(ustruct.pack('bb', motor_speed, -motor_speed)) |
yazdır('sol') |
durum A ve durum B değilse: |
radio.send_bytes(ustruct.pack('bb', -motor_speed, motor_speed)) |
yazdır ('doğru') |
durum A ve durum B değilse: |
radio.send_bytes(ustruct.pack('bb', 0, 0)) |
yazdır('dur') |
GitHub tarafından ❤ ile barındırılan rawgigglebot_lidar_remote.py dosyasını görüntüleyin
7. Adım: Uzak Ekranın Yorumlanması
"loading="lazy" GiggleBot'u kontrol ediyor, aşağıdaki seçeneklere sahipsiniz:
- GiggleBot'u ileri hareket ettirmek için A düğmesine ve B düğmesine basın.
- GiggleBot'u sola döndürmek için A düğmesine basın.
- GiggleBot'u sağa döndürmek için B düğmesine basın.
En yakın engellerin hangi yöne algılandığını görmek için uzaktan kumandanın (tuttuğunuz uzak BBC micro:bit) ekranına bakmanız yeterlidir. GiggleBot'u ona bakmadan uzaktan kontrol edebilmelisiniz.
Önerilen:
Kendi Bağlantılı Isıtma Termostatınızı Yapın ve Isıtma ile Tasarruf Yapın: 53 Adım (Resimlerle)
Kendi Bağlantılı Isıtma Termostatınızı Yapın ve Isıtma İle Tasarruf Edin: Amacı Nedir? Evinizi tam istediğiniz gibi ısıtarak konforu artırın Evinizi sadece ihtiyaç duyduğunuzda ısıtarak tasarruf edin ve sera gazı emisyonlarını azaltın Nerede olursanız olun ısıtmanızı kontrol altında tutun Bunu yaptığınız için gurur duyun
ESP32 ile PWM - Arduino IDE ile ESP 32'de PWM ile LED Karartma: 6 Adım
ESP32 ile PWM | Arduino IDE ile ESP 32'de PWM ile LED Karartma: Bu talimatta Arduino IDE & PWM temel olarak herhangi bir MCU'dan analog çıkış üretmek için kullanılır ve bu analog çıkış 0V ile 3.3V (esp32 durumunda) arasında herhangi bir şey olabilir & itibaren
Arduino İle Sabit Radar (LIDAR) Dizisi: 10 Adım (Resimli)
Arduino ile Sabit Radar (LIDAR) Dizisi: İki ayaklı bir robot inşa ederken, her zaman rakibimi izleyebilen ve onunla saldırı hareketleri yapabilen bir çeşit harika alete sahip olmayı düşünüyordum. Bir sürü radar/lidar projesi burada zaten var. Ancak, amacım için bazı sınırlamalar var
Çok Küçük Bir Robot Yapın: Kıskaçlı Dünyanın En Küçük Tekerlekli Robotunu Yapın.: 9 Adım (Resimlerle)
Çok Küçük Bir Robot Yapın: Kıskaçlı Dünyanın En Küçük Tekerlekli Robotunu Yapın.: Küçük nesneleri alıp hareket ettirebilen bir kavrayıcıya sahip 1/20 inç küp bir robot yapın. Bir Picaxe mikro denetleyici tarafından kontrol edilir. Zamanın bu noktasında, bunun dünyanın kıskaçlı en küçük tekerlekli robotu olabileceğine inanıyorum. Bu hiç şüphesiz ch
Arduino ile Çalışan Bir Konuşan Robot Kafası Yapın!: 26 Adım (Resimlerle)
Arduino ile Güçlendirilen Konuşan Robot Kafası İnşa Edin!: Bu robot kafası aslında fiziksel bilgisayar dersim için yıl sonu projesi olarak yapılmıştı, ancak yaz boyunca "öğrendi". nasıl konuşulur. Kafa, iki Freeduino, 3 TLC5940NT çip ve bir Adafruit Industries tarafından desteklenmektedir