Arduino'da ilk robotu yaratma deneyimi (robot “avcı”)

Merhaba

Bu yazımda ilk robotumu Arduino kullanarak monte etme sürecini anlatmak istiyorum. Materyal, benim gibi bir çeşit "kendi kendine koşan araba" yapmak isteyen yeni başlayanlar için faydalı olacaktır. Makale, çeşitli nüanslar üzerine eklemelerimle çalışma aşamalarının bir açıklamasıdır. Makalenin sonunda son koda bir bağlantı (büyük olasılıkla en ideali değil) verilmiştir.

Arduino'da ilk robotu yaratma deneyimi (robot “avcı”)

Fırsat buldukça oğlumu (8 yaşında) katılıma dahil ettim. Tam olarak neyin işe yaradığı ve neyin işe yaramadığı - makalenin bir kısmını buna ayırdım, belki birisi için faydalı olabilir.

Robotun genel tanımı

İlk olarak robotun kendisi hakkında birkaç söz (fikir). Başlangıçta standart bir şey toplamak istemedim. Aynı zamanda, bileşen seti oldukça standarttı - şasi, motorlar, ultrasonik sensör, hat sensörü, LED'ler, tweeter. Başlangıçta, kendi bölgesini koruyan bu "çorba setinden" bir robot icat edildi. Daire çizgisini aşan suçluya doğru ilerler ve ardından merkeze geri döner. Ancak bu sürüm, her zaman daire içinde kalmak için çizilmiş bir çizgiye ek olarak ekstra matematik gerektiriyordu.

Bu nedenle biraz düşündükten sonra fikrimi biraz değiştirdim ve bir “avcı” robot yapmaya karar verdim. Başlangıçta kendi ekseni etrafında dönerek yakındaki bir hedefi (kişiyi) seçer. “Av” tespit edilirse “avcı” yanıp sönen ışıkları ve sireni yakar ve ona doğru ilerlemeye başlar. Kişi uzaklaştığında/kaçtığında robot yeni bir hedef seçer ve onu takip eder ve bu şekilde devam eder. Böyle bir robotun sınırlı bir daireye ihtiyacı yoktur ve açık alanlarda da çalışabilir.

Gördüğünüz gibi bu daha çok bir yakalama oyununa benziyor. Sonunda robotun yeterince hızlı olmadığı ortaya çıksa da, etrafındaki insanlarla dürüst bir şekilde etkileşime giriyor. Çocuklar özellikle bundan hoşlanırlar (ancak bazen onu ayaklar altına almak üzereymiş gibi görünürler, kalpleri atlar...). Bunun teknik tasarımı yaygınlaştırmak için iyi bir çözüm olduğunu düşünüyorum.

Robot yapısı

Artık fikre karar verdik, devam edelim düzen. Öğelerin listesi robotun yapabilmesi gerekenlerden oluşturulur. Burada her şey oldukça açık, o yüzden hemen numaralandırmaya bakalım:

Arduino'da ilk robotu yaratma deneyimi (robot “avcı”)

Robotun “beyni” bir arduino uno kartıdır (1); Çin'den sipariş edilen bir setin içindeydi. Bizim amaçlarımız açısından bu oldukça yeterli (kullanılan pin sayısına odaklanıyoruz). Aynı kitten, üzerine iki tahrik tekerleğinin (2) ve bir arka (serbestçe dönen) (3) takılı olduğu hazır bir şasi (4) aldık. Kit ayrıca hazır bir pil bölmesini (5) içeriyordu. Robotun önünde bir ultrasonik sensör (HC-SR04) (6), arkada bir motor sürücüsü (L298N) (7), ortada bir LED flaşör (8) ve biraz da yanda bir tweeter (9) bulunmaktadır.

Düzenleme aşamasında şunlara bakıyoruz:

- her şeyin uyması için
- dengeli olmak
- rasyonel olarak yerleştirilmek

Çinli meslektaşlarımız bunu bizim için kısmen yaptı. Böylece ağır pil bölmesi merkeze yerleştirilir ve tahrik tekerlekleri yaklaşık olarak onun altına yerleştirilir. Diğer tüm panolar hafiftir ve çevreye yerleştirilebilir.

nüanslar:

  1. Kitin şasisinde çok sayıda fabrika deliği var ancak bunların mantığının ne olduğunu hala çözemedim. Motorlar ve akü paketi sorunsuz bir şekilde sabitlendi, ardından şu veya bu kartı sabitlemek için yeni delikler açarak "ayarlama" başladı.
  2. Depolama alanlarındaki pirinç raflar ve diğer bağlantı elemanlarının büyük yardımı oldu (bazen onları çıkarmak zorunda kalıyorduk).
  3. Her panodaki baraları kelepçelerden geçirdim (yine depoda buldum). Çok kullanışlı, tüm teller güzelce duruyor ve sallanmıyor.

Bireysel bloklar

Şimdi geçeceğim bloklar ve sana her birini kişisel olarak anlatacağım.

pil bölmesi

Robotun iyi bir enerji kaynağına sahip olması gerektiği açıktır. Seçenekler değişiklik gösterebilir, ben 4 adet AA pilli seçeneği tercih ettim. Toplamda yaklaşık 5 V verirler ve bu voltaj arduino kartının 5V pinine doğrudan uygulanabilir (stabilizatörü atlayarak).

Elbette biraz ihtiyatlıydım ama bu çözüm oldukça uygulanabilir.

Her yerde güce ihtiyaç duyulduğundan, kolaylık sağlamak için robotun ortasına iki konektör yaptım: biri toprağı "dağıtır" (sağda) ve ikincisi - 5 V (solda).

Arduino'da ilk robotu yaratma deneyimi (robot “avcı”)

Motorlar ve sürücü

İlk olarak motorların montajı hakkında. Montaj parçası fabrikada üretilmiştir ancak büyük toleranslarla yapılmıştır. Başka bir deyişle, motorlar birkaç milimetre sağa ve sola yalpalayabiliyor. Görevimiz açısından bu kritik değil ancak bazı yerlerde etkisi olabilir (robot yana doğru hareket etmeye başlayacaktır). Her ihtimale karşı motorları kesinlikle paralel ayarladım ve yapıştırıcıyla sabitledim.

Arduino'da ilk robotu yaratma deneyimi (robot “avcı”)

Motorları kontrol etmek için yukarıda yazdığım gibi L298N sürücüsü kullanılıyor. Belgelere göre, her motor için üç pim bulunur: biri hızı değiştirmek için ve bir çift pim dönüş yönü için. Burada önemli bir nokta var. Besleme voltajı 5 V ise hız kontrolünün çalışmadığı ortaya çıktı! Yani ya hiç dönmüyor ya da maksimuma dönüyor. Birkaç akşam “öldürmeme” neden olan özellik bu. Sonunda forumlardan birinde bir yerde bahsedildiğini buldum.

Genel olarak konuşursak, robotu döndürürken düşük bir dönüş hızına ihtiyacım vardı, böylece robotun alanı tarayacak zamanı olacaktı. Ancak bu fikirden hiçbir şey çıkmadığı için bunu farklı bir şekilde yapmak zorunda kaldım: küçük bir dönüş - dur - dönüş - dur vb. Yine, o kadar zarif değil ama uygulanabilir.

Ayrıca her takipten sonra robotun yeni bir dönüş için rastgele bir yön seçtiğini de buraya ekleyeceğim (saat yönünde veya saat yönünün tersine).

ultrasonik sensör

Arduino'da ilk robotu yaratma deneyimi (robot “avcı”)

Uzlaşmacı bir çözüm aramamız gereken başka bir donanım parçası. Ultrasonik sensör gerçek engeller üzerinde dengesiz sayılar üretir. Aslında bu bekleniyordu. İdeal olarak, pürüzsüz, düzgün ve dik yüzeylerin olduğu yarışmalarda bir yerde çalışır, ancak birinin bacakları önünde "flaşlanırsa" ek işlemin uygulanması gerekir.

Böyle bir işleme ayarladım medyan filtre üç sayı için. Gerçek çocuklar üzerinde yapılan testlere dayanarak (testler sırasında hiçbir çocuğa zarar verilmedi!), verileri normalleştirmek için oldukça yeterli olduğu ortaya çıktı. Buradaki fizik basittir: Bizden yansıyan sinyaller var. sağ nesneler (gerekli mesafeyi vererek) ve daha uzaktaki nesnelerden, örneğin duvarlardan yansıtılır. İkincisi, 45, 46, formdaki ölçümlerdeki rastgele emisyonlardır. 230, 46, 46, 45, 45, 310, 46... Medyan filtrenin kestiği bunlardır.

Tüm işlemlerden sonra en yakın nesneye olan mesafeyi elde ederiz. Belirli bir eşik değerinin altındaysa alarmı açıp doğrudan “davetsiz misafire” doğru ilerliyoruz.

Flaşör ve siren

Belki de yukarıdakilerin hepsinin en basit unsurları. Yukarıdaki fotoğraflarda görülebilirler. Donanımla ilgili yazacak bir şey yok burada, şimdi geçelim kodu.

Kontrol programı

Kodu ayrıntılı olarak açıklamanın amacını göremiyorum, buna kimin ihtiyacı var - bağlantı makalenin sonunda, orada her şey oldukça okunabilir. Ama genel yapıyı anlatsam iyi olurdu.

Anlamamız gereken ilk şey, robotun gerçek zamanlı bir cihaz olduğuydu. Daha doğrusu hatırlamak için, çünkü hem öncesinde hem de şimdi hala elektronikle çalışıyorum. Yani, meydan okumayı hemen unutuyoruz gecikme ()örnek çizimlerde kullanmayı sevdikleri ve programı belirli bir süre boyunca "donduran". Bunun yerine deneyimli kişilerin önerdiği gibi her blok için zamanlayıcılar sunuyoruz. Gerekli aralık geçti - eylem gerçekleştirildi (LED'in parlaklığı artırıldı, motor açıldı vb.).

Zamanlayıcılar birbirine bağlanabilir. Örneğin tweeter flaşörle senkronize olarak çalışır. Bu, programı biraz basitleştirir.

Doğal olarak her şeyi ayrı işlevlere ayırıyoruz (yanıp sönen ışıklar, ses, dönme, ileri gitme vb.). Bunu yapmazsanız neyin nereden, nereden geldiğini anlayamazsınız.

Pedagojinin nüansları

Yukarıda anlatılanların hepsini akşamları boş zamanlarımda yaptım. Yavaş yavaş robotun üzerinde yaklaşık üç hafta geçirdim. Bu burada bitebilirdi ama size bir çocukla çalışmayı da anlatacağıma söz verdim. Bu yaşta ne yapılabilir?

Talimatlara göre çalışın

İlk önce her ayrıntıyı ayrı ayrı kontrol ettik - LED'ler, tweeter, motorlar, sensörler vb. Çok sayıda hazır örnek var - bazıları doğrudan geliştirme ortamında, diğerleri internette bulunabilir. Bu beni kesinlikle mutlu ediyor. Kodu alıyoruz, parçayı bağlıyoruz, çalıştığından emin oluyoruz ve ardından görevimize uyacak şekilde değiştirmeye başlıyoruz. Çocuk bağlantıları şemaya göre ve benim gözetimim altında yapar. Bu iyi. Ayrıca kesinlikle talimatlara göre çalışabilmeniz gerekir.

İşin sırası ("özelden genele")

Bu zor bir nokta. Büyük bir projenin ("robot yapma") küçük görevlerden ("sensör bağlama", "motorları bağlama") oluştuğunu ve bunların da daha da küçük adımlardan oluştuğunu ("bir robot bulma") öğrenmeniz gerekir. programı,” “bir kart bağlayın.” ", "ürün yazılımını indir"...). Alt seviyedeki az çok anlaşılır görevleri yerine getirerek orta seviyenin görevlerini "kapatırız" ve bunlardan genel sonuç oluşur. Açıkladım ama sanırım gerçekleşme yakın zamanda gelmeyecek. Muhtemelen ergenlik döneminde bir yerlerde.

Montaj

Delme, dişler, vidalar, somunlar, lehimleme ve reçine kokusu - onlar olmasaydı nerede olurduk? Çocuk, "Havya ile çalışma" temel becerisini aldı - birkaç bağlantıyı lehimlemeyi başardı (biraz yardım ettim, saklamayacağım). Güvenlik açıklamasını unutmayın.

Bilgisayar işi

Robot için program yazdım ama yine de bazı olumlu sonuçlar elde etmeyi başardım.

Birincisi: İngilizce. Okulda yeni başlamışlardı, biz de pishalka, migalka, yarkost ve diğer harf çevirisinin ne olduğunu anlamakta zorlanıyorduk. En azından bunu anladık. Henüz bu seviyeye ulaşamadığımız için bilinçli olarak ana dili İngilizce olan kelimeleri kullanmadım.

İkincisi: verimli çalışma. Kısayol tuşu kombinasyonlarını ve standart işlemlerin nasıl hızlı bir şekilde gerçekleştirileceğini öğrettik. Programı yazarken periyodik olarak oğlumla yer değiştirdik ve ne yapılması gerektiğini söyledim (değiştirme, arama vb.). Tekrar tekrar tekrarlamak zorunda kaldım: "Seçime çift tıklayın", "Shift'i basılı tutun", "Ctrl'yi basılı tutun" vb. Buradaki öğrenme süreci hızlı değil, ancak becerilerin yavaş yavaş "alt kortekste" biriktirileceğini düşünüyorum.

Gizli metinYukarıdakilerin neredeyse açık olduğunu söyleyebilirsiniz. Ama dürüst olmak gerekirse, bu sonbaharda bir okulda 9. sınıfta bilgisayar bilimi öğretme fırsatım oldu. Bu korkunç. Öğrenciler Ctrl + Z, Ctrl + C ve Ctrl + V, Shift tuşunu basılı tutarken metin seçme veya bir kelimeye çift tıklama gibi temel şeyleri bilmiyorlar. Bu, bilgisayar bilimi eğitiminin üçüncü yılında olmalarına rağmen... Kendi sonucunu çıkar.

Üçüncüsü: dokunarak yazmaya başlayın. Koddaki yorumları yazması için çocuğa emanet ettim (bırakın pratik yapsın). Parmaklarımızın yavaş yavaş tuşların yerini hatırlaması için ellerimizi hemen doğru bir şekilde yerleştirdik.

Gördüğünüz gibi henüz yolun başındayız. Becerilerimizi ve bilgilerimizi geliştirmeye devam edeceğiz; bunlar hayatta faydalı olacak.

Bu arada, gelecek hakkında...

Daha da geliştirilmesi

Robot yapılır, hareket eder, yanıp söner ve bip sesi çıkarır. Şimdi ne var? Başardıklarımızdan ilham alarak bunu daha da geliştirmeyi planlıyoruz. Ay gezgini gibi bir uzaktan kumanda yapma fikri var. Tamamen farklı bir yerde hareket eden bir robotun hareketini uzaktan kumandanın başında kontrol etmek ilginç olurdu. Ama bu farklı bir hikaye olacak...

Ve sonunda, aslında bu makalenin kahramanları (tıklayarak video):

Arduino'da ilk robotu yaratma deneyimi (robot “avcı”)

Teşekkürler!

Kod bağlantısı

Kaynak: habr.com

Yorum ekle