İçindekiler:

FaceBot: 8 Adım
FaceBot: 8 Adım

Video: FaceBot: 8 Adım

Video: FaceBot: 8 Adım
Video: Batuhan Turan - 8 Adım 2023 (Official Video) 2024, Ekim
Anonim
yüz botu
yüz botu

Bu kılavuz, yazı tipinde bir yüzü olan düşük maliyetli (39 $) bir çarpışmadan kaçınma robotunun nasıl oluşturulacağını gösterecektir. Bunu yeni, düşük maliyetli, parlak bir OLED ekran kullanarak yapıyoruz. Öğrencilerimiz robotlarına yüzler eklemeyi severler. Robotun ne yaptığına göre değişen gülen yüzler çizmeyi severler.

25 doların altında, bilgisayar biliminin temellerini öğretmenizi sağlayan birkaç küçük, düşük maliyetli robot var. Bu robotlarla ilgili sorunlardan biri, siz onu inşa ederken robotun içinde neler olup bittiğine dair şeffaflık sağlamamalarıdır. 2018'de düşük maliyetli, yüksek kaliteli OLED ekranların kullanıma sunulmasıyla birlikte her şey değişmeye başladı. Bu ekranlar aşağıdaki avantajlara sahiptir:

  • Çok parlaklar ve yüksek kontrasta sahipler. Aydınlık bir oda bile birçok açıdan okunması kolaydır.
  • İyi çözünürlüğe sahipler. Benim kullandıklarım 168x64 piksel. Bu, kullandığımız önceki ekranların neredeyse 4 katı.
  • Düşük güçlüdürler ve robotunuzun gücü düştüğünde bile sürekli çalışırlar.
  • Nispeten düşük maliyetlidirler (her biri yaklaşık 16 dolar) ve fiyatlar düşüyor.

Geçmişte, programlamaları zordu ve düşük maliyetli Arduino Nanos ile kullanılmak için çok fazla bellek kullanırlardı. Nano'da yalnızca 2K veya dinamik RAM bulunur. Bu kılavuz size bu sorunları nasıl çözeceğinizi ve çocukların programlamayı sevdiği bir robotu nasıl yapacağınızı gösterecek.

Adım 1: Adım 1: Temel Robotunuzu Oluşturun

Adım 1: Temel Robotunuzu Oluşturun
Adım 1: Temel Robotunuzu Oluşturun

Bir FaceBot oluşturmak için genellikle temel robotla başlarız. Bir örnek, burada açıklanan 25 dolarlık CoderDojo Robot'tur. Bu robot, basit bir motor kontrolörü, 2 DC motor ve 4 veya 6 AA pil olan düşük maliyetli ve popüler Arduino Nano'yu kullanır. Çoğu öğrenci, bir çarpışmadan kaçınma robotu oluşturmak için ping sensörünü kullanmaya başlar. 5v güç sistemi sağladığı için FaceBot için mükemmeldir. Maliyetleri düşük tutmak için genellikle öğrencilerime parçaları e-Bay'den çevrimiçi sipariş ettiririm. Parçaların gelmesi genellikle 2-3 hafta sürer ve motorlar ve güç anahtarı için az miktarda lehim gerektirir. Bağlantıların geri kalanı 400 bağlantılı bir devre tahtası kullanılarak yapılır. Öğrenciler, kaymalarını önlemek için sık sık kabloları sıcak yapıştırır.

Standart çarpışmadan kaçınma tasarımında yaptığımız bir değişiklik var. Ping sensörünü kasanın üstünden kasanın altına doğru hareket ettiriyoruz. Bu, robotun üstündeki ekran için yer bırakır.

Çarpışmadan kaçınma programınızı aldıktan sonra bir yüz eklemek için okunursunuz!

2. Adım: 2. Adım: OLED Ekranınızı Bulun ve Sipariş Edin

2. Adım: OLED Ekranınızı Bulun ve Sipariş Edin
2. Adım: OLED Ekranınızı Bulun ve Sipariş Edin

OLED ekranlar çıktığında, düşük maliyetli olanlar saatler veya fitness monitörleri için tasarlandı. Sonuç olarak, genellikle yaklaşık 1 inç çapında küçüktüler. İyi haber şu ki, düşük maliyetliydiler, yaklaşık 3 dolar. Bu ekranlarla birkaç robot yaptık, ancak ekranların boyutları sınırlı olduğu için ekranda yapabileceklerimiz sınırlıydı. Ardından 2018'de daha büyük 2,42 inç OLED ekranların maliyetinin düştüğünü görmeye başladık. 2019 yılının Ocak ayında fiyatlar yaklaşık 16 dolara düştü. Sonunda robot yüzlerimiz için kullanabileceğimiz harika bir ekrana sahip olduk.

İşte bu ekranların özellikleri:

  1. 2.42 inç (diyagonal ölçüm)
  2. 128 piksel boyunca (x boyutu)
  3. 64 piksel yüksekliğinde (y boyutu)
  4. Düşük güç (tipik olarak 10ma)
  5. Tek renkli (sarı, yeşil, mavi ve beyaz renkte gelirler)
  6. Varsayılan SPI arayüzü, isterseniz I2C olarak değiştirebilirsiniz.
  7. SSD1309 sürücüsü (çok yaygın bir görüntü sürücüsü)

SPI arayüzü yedi kabloya sahiptir. Arayüzdeki tipik etiketler şunlardır:

  1. CS - Çip Seçimi
  2. DC - Veri/Komut
  3. RES - Sıfırla
  4. SDA - Veri - bu Arduino Nano pin 11'e bağlanmalıdır
  5. SCL - Saat - bu Arduino Nano pin 13'e bağlanmalıdır
  6. VCC - +5 volt
  7. GND - Zemin

Ekranı breadboard'a bağlamak için de biraz kabloya ihtiyacınız olacak. Ekranlar genellikle ekrana lehimleyeceğiniz 7 pinli bir başlıkla gelir. 7 erkek-erkek 20mc Dupont konektörü kullandım ve kablolar ekranın arkasından çıkacak şekilde lehimledim.

Adım 3: Adım 3: OLED'i Arduino Nano'ya bağlayın

Adım 3: OLED'i Arduino Nano'ya bağlayın
Adım 3: OLED'i Arduino Nano'ya bağlayın
Adım 3: OLED'i Arduino Nano'ya bağlayın
Adım 3: OLED'i Arduino Nano'ya bağlayın

Artık OLED'inizi test etmeye hazırsınız. Aldığım her ekranın çalıştığını test etmek için başka bir Arduino Nano kullanıyorum. Testler çalıştıktan sonra robota bağlarım. Test cihazının bağlantı şeması yukarıdaki şekilde gösterilmiştir. OLED bağlantılarını dijital çıkışları destekleyen diğer pinlere taşıyabileceğinizi unutmayın, ancak SCL'nin (saat) Arduino Nano pin 13'te ve SDA'nın (veri) Arduino Nano pin 11'de olduğundan eminseniz, varsayılan ayarları kullanabilirsiniz. yazılım. Bu, kodunuzu biraz daha basit tutar.

4. Adım: 4. Adım: Ekranınızı Test Edin

4. Adım: Ekranınızı Test Edin
4. Adım: Ekranınızı Test Edin

Ekranınızı test etmek için u8g2 kitaplığını kullanacağız. Kullanabileceğiniz başka kütüphaneler de var ama benim tecrübeme göre hiçbiri u8g2 kütüphanesinde o kadar iyi değil. Kritik bir faktör, Arduino içindeki ekran tarafından ne kadar RAM kullanıldığıdır. u8g2, Arduino Nano ile çalışacak bir "Sayfa Modu" kullanan bulduğum tek kitaplık.

"Kütüphaneleri Yönet" menüsünde "u8g2" aratarak bu kütüphaneyi Arduino IED'nize ekleyebilirsiniz. Kodu doğrudan gethub'dan da indirebilirsiniz.

github.com/olikraus/u8g2

Kullandığım test kodu burada:

github.com/dmccreary/coderdojo-robots/blob…

Dikkat edilmesi gereken birkaç şey var. SCL ve SDA pin numaraları, Nano'daki varsayılan pinler oldukları için yorumlanır. u8g2 için yapıcı anahtar satırdır:

// Dinamik belleğin yalnızca %27'sini kullanan SSD1306, 128x64, tek sayfa, adsız, 4 kablolu, Donanım, Döndürmesiz SPI kullanıyoruzU8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, CS_PIN, DC_PIN, RDS_PIN);

Tek sayfa modunu kullanıyoruz çünkü bu mod minimum RAM kullanıyor. 4 kablolu donanım arayüzünü kullanıyoruz ve OLED varsayılan olarak SPI ile geliyor.

Adım 5: Adım 5: OLED'inizi Robota Ekleyin

Adım 5: OLED'inizi Robota Ekleyin
Adım 5: OLED'inizi Robota Ekleyin

Artık çalışan bir OLED'imiz olduğuna ve u8g2 kitaplıklarını nasıl başlatacağımızı bildiğimize göre, OLED'i temel robotumuzla entegre etmeye hazırız. Dikkate alınması gereken birkaç şey var. OLED testimizde kablolamayı kolaylaştırmak için yan yana olan pinleri kullandık. Maalesef Robotumuzu sürmek için pin 9'a ihtiyacımız var çünkü motor sürücüsüne analog sinyal göndermemiz gereken PWM pinlerinden biri. Çözüm, pim 9'daki kabloyu başka bir serbest pime taşımak ve ardından #define ifadesini bu yeni pime değiştirmek. OLED'i robotun önüne monte etmek için pleksiglastan iki üçgen parça kestim ve sıcak yapıştırdım. onları şasiye. Parçaları sıcak yapıştırmadan önce pleksiglasın yüzeyini pürüzlendirmek için her zaman biraz zımpara kağıdı kullanmayı severim, böylece kolayca ayrılmazlar.

Şimdi, OLED'imiz hakkında biraz veri alalım ve robota bazı yüzler çizelim!

Adım 6: Adım 6: Robot Parametrelerini Görüntüle

Adım 6: Robot Parametrelerini Görüntüle
Adım 6: Robot Parametrelerini Görüntüle

Bir ekrana sahip olmanın güzel yanlarından biri, robotumuz etrafta dolaşırken içinde neler olup bittiğine dair hata ayıklamaya gerçekten yardımcı olmasıdır. Geliştiricilerin, bilgisayarınıza bağlıyken masaüstünde yalnızca robot hareket halindeyken ÇALIŞMAMASI için bir işlevin çalışması nadir değildir. Ping sensörü tarafından ölçülen mesafe gibi bir değerin görüntülenmesi, bir robot parametresinin görüntülenmesine iyi bir örnektir.

Yukarıdaki fotoğrafta, ilk satır (Yankı Süresi), sesin ultrasonik hoparlörden ayrıldığı zaman ile mikrofon tarafından alındığı zaman arasındaki gecikme süresini gösterir. Bu sayı daha sonra ikinci satırda santimetreye dönüştürülür (Mesafe cm cinsinden). Sayaç, ekranın güncellendiğini göstermek için ikinci aramada güncellenir. "Dönüş…" yalnızca mesafe dönüş eşiği olarak adlandırılan belirli bir sayının altındaysa görüntülenir. Ping mesafesi bu sayının üzerindeyse her iki tekerlek de ileri doğru hareket eder. Eğer sayı dönüş eşiğinin altındaysa motorları ters çevirip (geri geri giderek) yön değiştiriyoruz.

İşte size ping sensöründen değerleri nasıl alacağınızı ve değerleri OLED ekranınızda nasıl görüntüleyeceğinizi gösteren bazı örnek kodlar.

İşte üç ping sensörünü (sol, orta ve sağ) test eden ve ekrandaki değerleri gösteren bir örnek:

github.com/dmccreary/coderdojo-robots/blob…

Adım 7: Adım 7: Bazı Yüzler Çizin

Adım 7: Bazı Yüzler Çizin!
Adım 7: Bazı Yüzler Çizin!

Şimdi bazı yüzler çizmek için tüm parçalara sahibiz. Öğrencilerimiz genellikle robotun ileriye doğru hareket etmesi durumunda mutlu bir yüze sahip olması gerektiğini düşünüyor. Önünde bir şey gördüğünde, bir şaşkınlık hissi kaydeder. Daha sonra geri döner ve belki de hangi yöne döneceğini belirtmek için hareket eden gözlerle etrafına bakar.

Bir yüz çizmek için çizim komutu oldukça basittir. Yüzün ana hatları için bir daire çizebilir ve her bir göz için daireleri doldurabiliriz. Ağız, bir gülümseme için yarım daire ve şaşkınlık hissi için dolgulu yuvarlak bir daire olabilir. Bu, çocukların ifadeleri kişiselleştirmek için yaratıcılıklarını kullanabilecekleri yerdir. Bazen kasıtlı olarak kötü yüzler çizerim ve öğrencilerden onları daha iyi hale getirmeme yardım etmelerini isterim.

Ekranın boyutunu elde etmek için display.height() ve display.width() işlevlerini kullanabilirsiniz. Aşağıdaki kodda değişkenleri ayarlıyoruz

half_width = display.width()/2;half_height = display.height()/2;

Bu hesaplamaları birçok kez yaparsanız, bir kez hesaplanıp bir değişkende saklanırsa kod biraz daha hızlıdır. Yukarıdaki sıkıcı düz yüzün nasıl çizildiğine dair bazı örnekler:

//bunu her döngünün başında yapıyoruz

display.clearDisplay(); // backgrounddisplay.fillCircle(half_width, half_height, 31, WHITE);// sağ göz karanlık display.fillCircle(half_width - 10, display.height()/3, 4, BLACK); // sol göz darkdisplay.fillCircle(half_width + 10, display.height()/3, 4, SİYAH); // ağız için düz bir çizgi çiz display.drawLine(half_width - 10, display.height()/3 * 2, half_width + 10, display.height()/3 * 2, BLACK); // bu satır yeni yüzümüzü OLED ekrana gönderir display.display();

8. Adım: 8. Adım: Özelleştirin

8. Adım: Özelleştirin
8. Adım: Özelleştirin

Temel yüzü çizmek sadece başlangıçtır. Öğrenciler birçok varyasyon oluşturabilir. Birçok öğrenci, hareket ederken bir ton veya ses çıkaran küçük bir hoparlör eklemiştir.

Ayrıca, öğrencilerinizin motorları doğru şekilde bağlamasına yardımcı olacak daha küçük test programları da oluşturabilirsiniz. Örneğin ekrandaki bir ok (üçgen), motorları bağlarken tekerleğin hangi yöne dönmesi gerektiğini öğrenciye söyleyecektir. Test programı, motor yönlerinin her biri arasında geçiş yapar:

  1. Sağ İleri
  2. Sağ Ters
  3. Sol İleri
  4. Sol Ters

Her mod için ekran, hangi tekerleğin ve hangi yönde dönmesi gerektiğini gösteren yeni bir ekranla güncellenir.

O programın bir örneği burada

github.com/dmccreary/coderdojo-robots/blob…

CoderDojo Robots GitHub FaceBot sayfasında birçok ek örnek ve programlama detayı bulunmaktadır.

FaceBot robotunun, öğrencilerin tüm çarpışmadan kaçınma parametrelerini (ileri hız, dönüş mesafesi, dönüş süresi, dönüş hızı) doğrudan ekranı kullanarak değiştirmesine olanak tanıyan bir sürümü de bulunmaktadır. Bu robotları "programlamak" için bilgisayar gerekmez! Bu sürümler, bilgisayarları dolaştırmak istemediğiniz MakerFairs ve etkinlikler için idealdir.

Lütfen sizin ve öğrencileriniz için hangi yeni yüzleri ortaya çıkardığınızı bize bildirin!

Mutlu kodlama!

Önerilen: