Arduino tabanlı dört ayaklı robot. Kendin yap Arduino robotu Arduino tarafından kontrol edilen bir robot nasıl yapılır

Arduino, uzaktan kumanda, basit sensörler ve mantık ile farklı arabalar yapmak çok kolay. Bu nedenle, bu hat inanılmaz derecede popüler. Bununla uyumlu birçok sensör ve genişletme kartı satışta. İnternet, her durum için hazır yazılım kütüphaneleri ve açık kaynak projeleriyle doludur. Arduino'ya hakim olma sürecinde sahip olacağın soruların hemen hemen hepsi birileri tarafından soruldu ve cevabını her zaman bulacaksın.

Bir şeyle başlayalım mı? Ana soru, denetleyicinin seçimidir. Bu revizyonların üzerine inşa edilmiş birçok Arduino revizyonu ve üçüncü taraf klonları vardır. İşte, belki de bizim için en ilginç iki sınıf:

  • Arduino Uno, yeni başlayanlar için en iyi seçim, en basit, en uygun fiyatlı ve genel karttır. 16 MHz saat hızına, 32 KB flash belleğe, 2 KB RAM'e ve 1 KB EEPROM'a sahip bir ATmega328 yongasına dayanmaktadır. Uno, sensörleri, servoları ve diğer cihazları kontrol etmek için kullanılabilen 14 dijital I/O'ya sahiptir;
  • Arduino Mega / Mega 2560, projenin zor olacağını önceden bildiğiniz zaman uygun bir boarddur. Ana fark, daha fazla I / O sayısıdır (Mega'da 48, Mega 2560'da 54). Ayrıca çok daha fazla bellek var: 8 KB RAM, 4 KB EEPROM ve 128 ve 256 KB flash bellek (sırasıyla Mega ve Mega 2560'ta). Kartlar ayrıca çip, USB hızı ve diğer bazı özelliklerde farklılık gösterir.

Elbette Arduino Pro, Arduino LilyPad ve daha pek çok şey var. Ama şimdilik, ilk iki modele odaklanalım. Bizim durumumuzda her şey oldukça basit: Çok sayıda bacağı olan bir robot için Mega'ya ihtiyaç var.

İlk kod

İlk olarak, Arduino IDE'yi (arduino.cc) kuralım - bu, platformlar arası ücretsiz bir geliştirme ortamıdır. Şimdi, Arduino'muzu bağlarsak, en basit örneği kullanarak ilk kodu yazmaya çalışabiliriz: LED yanıp sönen program. Çoğu Arduino denetleyicisinde bir tane bulunur ve pim 13'e bağlıdır. Bu arada, Arduino dünyasında programlara genellikle eskiz denir. İşte yorumların yer aldığı krokinin metni:

// Bu pin LED'ini isimlendirelim: const int LED = 13; void setup () (// Dijital pini // çıkış için başlat: pinMode (LED, OUTPUT);) void loop (// Mantığı bir seviye // pin 13'e besle (LED'i yak): digitalWrite (LED , YÜKSEK) ; // Çizimin yürütülmesini duraklat // bir saniye: gecikme (1000); // Pim 13'e // mantıksal bir sıfır seviyesi gönder (LED'i kapat): digitalWrite (LED, DÜŞÜK); / / Yine, çizimin yürütülmesini // bir saniye duraklatın: gecikme (1000);)

Kurulum ve döngü işlevlerine dikkat edin. Herhangi bir Arduino taslağında bulunmalıdırlar. Kurulum, açılışta veya denetleyici yeniden başlatıldıktan sonra bir kez çağrılır. Kodun yalnızca bir kez çalıştırılmasını istiyorsanız, buraya yerleştirilmelidir. Çoğu zaman bunlar, bir şeyi başlatmak için her türlü prosedürdür. Çizimimiz bir istisna değildir: Arduino dijital pinleri giriş ve çıkış görevi görebilir. Setup fonksiyonunda pin 13'ün controller üzerinde dijital çıkış görevi göreceğini söylüyoruz.

Kurulum işlevi işini bitirdikten sonra, içinde döngü işlevinin çağrılacağı kapalı bir döngü otomatik olarak başlatılır. Orada yapmak istediklerimizi yazmamız gerekiyor. Ve mantıksal birimin (5 V) seviyesini pim 13'e uygulamak, yani LED'i yakmak, sonra bir saniye beklemek (milisaniye cinsinden 1000), ardından mantıksal sıfır seviyesini (0 V) uygulamak ve tekrar beklemek istiyoruz. bir saniye. Bir sonraki döngü çağrısı her şeyi tekrarlayacaktır.

Şimdi çizimimizi kontrolöre "dolduruyoruz". Hayır, bir programcıya ihtiyacımız yok. Arduino denetleyicileri, eskizlerimize ek olarak, özellikle bilgisayardan kod indirmeyi kontrol eden özel bir program - önyükleyici içerir. Bu yüzden taslağı yüklemek için sadece bir USB kablosuna ve Arduino IDE'de Dosya → Yükle (Ctrl + U) menü öğesine ihtiyacımız var.

Anahtar soru

Aslında kaç bacağa ihtiyacımız var? Yürüyen robotlar için çeşitli konfigürasyonlar tanımlayalım. Bacak sayısına göre:

  • iki ayaklı - iki ayaklı (insan prototipi);
  • dörtlü - dört ayaklı (prototip - çoğu memeli);
  • hexapod - altı ayaklı (prototip - çoğu böcek);
  • ahtapot - sekiz ayaklı (prototip - örümcekler, akrepler, yengeçler ve diğer eklembacaklılar).

Bacak sayısına ek olarak, her birinin konfigürasyonu da önemlidir. Bir bacağın temel özelliği, serbestlik derecesi sayısı veya serbestlik boyutlarıdır (DOF). Serbestlik derecesi, bir eksen etrafında dönme veya bükülme yeteneğidir (daha az sıklıkla, bu eksen boyunca kademeli olarak hareket etme). Açıkçası, eğer özgürlük derecesi bir ise, o zaman böyle bir bacakta fazla ileri gitmeyeceksiniz. İki serbestlik derecesine sahip bacaklar (2DOF) zaten çok bacaklı robotların hareket etmesine izin verir, ancak 2DOF bir bacağın ucunu yalnızca bir düzlemde serbestçe hareket ettirmeyi mümkün kılar. Ve 3DOF ayağı, 3B uzayda "ayağı" hareket ettirir (tabii ki, üç eksenin tümü paralel değilse). Ayrıca, bacağın esnekliğini ve hareket aralığını basitçe artıran 4DOF bacaklar da vardır. Böceklerin çoğu zaman 4DOF pençeleri vardır.

Bu bizim için ne anlama geliyor? Ucuz amatör robotlarda, her bir serbestlik derecesi bir motor, daha doğrusu bir servo sürücü veya servo tarafından gerçekleştirilir. Bacak konfigürasyonu, bu servolardan kaçının gerekli olduğunu benzersiz bir şekilde belirler. Örneğin, bir 3DOF hexapod 18 servo, 4DOF örümcek ise 32 servo gerektirir. Rakam sizi korkutmasın, amatör RC modellerinde kullanılan küçük servolar çok ucuz. Çevrimiçi mağazalarda, istek üzerine mikro servo bulunabilir.

Servoları programlamak için ana işi yapan bir kontrolörlerinin zaten olduğunu bilmek yeterlidir. Ve gereken tek şey güç sağlamak ve kontrolöre tahrik milini hangi konuma çevirmek istediğimizi söyleyen bir dijital sinyal. Tasarımları hakkında bilgi bulmak kolaydır. Protokolleri, tüm dijital iletişim protokollerinin en basitidir: darbe genişliği modülasyonu - PWM (İngilizce PWM). Tüm basit servolarda üç pinli bir konektör bulunur: toprak, +5 V (voltaj boyut ve güce bağlı olarak değişebilir) ve sinyal girişi. Arduino kontrolörleri böyle bir sinyali iki farklı şekilde üretebilir. Birincisi, çipin kendisinin birkaç dijital I / O pinine çıktı verebildiği donanım PWM'sidir. İkincisi yazılımdır. Yazılım, aynı anda donanımdan daha farklı PWM sinyalleri almanızı sağlar. Arduino - Servo kütüphanesi altında bunun için uygun bir sarmalayıcı sağlanmıştır. Çoğu küçük boyutlu kontrolörde (Uno, Due, Nano) aynı anda 12 servo, Arduino Mega ve benzerlerinde 48 servo kullanmanıza izin verir. Servonun sinyal pini Arduino'nun dijital pinine bağlanır. Toprak ve güç - açıkçası toprak ve güç için, tüm hizmetlerde ortak olabilirler. Üç telli servo döngülerde toprak siyah veya kahverengidir, ortada genellikle +5 V kırmızı vardır ve son olarak sinyal beyaz veya sarıdır. Yazılım açısından, kontrol son derece basittir:

Servo myservo; // Arduino myservo.attach (9) pin 9'daki servo; // 90º konumuna döndür myservo.write (90);

Çoğu servo mili 180 ° döndürebilir ve onlar için 90 ° orta konumdur. Arduino kartınıza servoları bağlamayı kolaylaştıracak bir dizi çözüm var. En ikonik olanı Sensör Kalkanı. Uno'ya kurarak ve servolara terminallere güç sağlayarak, konektörlerini doğrudan ona takabilirsiniz.

pil

Bir diğer önemli konu ise beslenme. Tüm sistemi tek bir güç hattı ile beslemenizi sağlayan gelişmiş bir kartınız varsa (ve servo motorlar kontrolörün çalışmasına müdahale etmeyecek), o zaman tek bir kaynaktan geçebilirsiniz. Seçim çok büyük, en iyisi elbette radyo modelleri için Li-Ion / Li-Po briketleridir. Ama aynı zamanda uygun şarj cihazlarına da ihtiyaçları var. Daha basit bir denetleyiciniz varsa (Uno / Due / Nano), örneğin 9 voltluk bir "Crown" ile ayrı olarak çalıştırabilir ve servoları ana güçlü pile bağlayabilirsiniz. Yani servolar kesinlikle yeterli güce sahip olacak. Lityum piller söz konusu olduğunda, aşırı deşarj olmaması için voltajı normalden daha dikkatli izlemeniz gerekir (izin verilen voltajlar belirli bir pil türü için netleştirilmelidir). Bunu yapmak için, daha sonra tartışılacak olan Sleipnir robotuna küçük bir dijital voltmetre de vidalanır.

kendin yap robobug

Kit

  • Arduino Uno denetleyicisi: 1150 s.
  • Üç servo motor. HXT500, 200 p'yi kullandım. bir parça
  • Anahtarlı "Taç" için pil bölmesi: 50 r.
  • Pil "Krona": 145 ruble.
  • IR alıcısı: 90 s.
  • Yaklaşık 1,5 mm çapında çelik tel. Örneğin kırık yumurta çırpıcı kullandım.

Toplam: 2035 s.

DmitryDzz: Arduino Uno kontrolcüye dayalı küçük, uzaktan kumandalı altı ayaklı bir robot yapmanızı önermek istiyorum. Pençeler bir derece serbestliğe sahip olacak, kontrol geleneksel bir TV uzaktan kumandası kullanılarak gerçekleştirilecek.

Bunların pahalı Moskova mağazalarının fiyatları olduğunu söylemeliyim. Çin çevrimiçi mağazalarında, tüm bunlar yarı fiyatına mal olacak. Teslimat düşünüldüğünde. Ancak deneyimlerime göre iki haftadan üç aya kadar beklemeniz gerekecek.

Daha kolay bir yol, bir kurucu seti almaktır, çünkü ilk adımlarda bir kontrolör yeterli olmayacaktır. Artık birçok mağaza bu setleri sunuyor. Örneğin, harika bir çevrimiçi mağaza "Amperka" var. Burada, dolgunluk ve elbette fiyat bakımından farklılık gösteren birkaç benzer kurucu sunulacak. En basit şey, "Matryoshka X" benim için oldukça yeterliydi. Bir Arduino Uno denetleyicisi, bir bilgisayara bağlanmak için bir USB kablosu, bir prototipleme panosu (yeri doldurulamaz bir şey!), Bir dizi atlama teli, LED'ler, dirençler ve diğer önemsiz şeyler içerir.

Aynı mağazada, Rusça'ya çevrilmiş harika kısa video eğitimlerini bile bulabileceğiniz bir "Wiki" bölümü var. Onları kontrol ettiğinizden emin olun. Ve elbette, muhtemelen size yardım etmeye çalışacakları bir forum var.

Araçlardan gerekenler:

  • bir havya ve lehimleme için ihtiyacınız olan her şey. Çok fazla lehimlemenize gerek yok ve özel bir beceriye ihtiyacınız yok;
  • sıcak tutkal tabancası ve ona çubuklar;
  • tel ile çalışmak için pense.

Her şeyi topladıysanız, başlayalım!

Kontrol

İlk adıma geçelim: uzaktan kumandayla nasıl etkileşim kuracağımızı öğrenmemiz ve bazı düğmelerine basmak için kodları bulmamız gerekiyor. Bu kodlar daha sonra robot kontrol taslağı için kullanışlı olacaktır.

Bu aşamada başka bir IR alıcısına ihtiyacınız olacak ve bir prototipleme panosuna sahip olmak güzel olurdu. IR uzaktan kumandaların büyük çoğunluğu 36 kHz, 38 kHz veya 40 kHz (Panasonic, Sony) taşıyıcı frekanslarında çalışır. İstisnalar Sharp (56 kHz), Bang & Olufsen (455 kHz) uzaktan kumandalar ve belki de daha egzotik biri. Bu nedenle, 36, 38 veya 40 kHz'deki herhangi bir IR alıcısı iyidir. Frekans, sinyalin taşıyıcı frekansıyla tam olarak eşleşmeyebilir. Bu durumda alıcı hassasiyeti düşecek, ancak pratikte TSOP2136 IR alıcısı (36 kHz - son iki hane frekanstır) ve Sony uzaktan kumandayı (40 kHz) kullanırken herhangi bir rahatsızlık hissetmedim.

Bu nedenle, çoğu uzaktan kumanda için TSOP21xx, TSOP22xx, TSOP312xx IR alıcıları uygundur. Son iki basamak 36, 37, 38 veya 40 olabilir. IR alıcısını açmadan önce kontaklarının kablolarını belirtin - bunlardan sadece üçü vardır: + 5V (güç), GND (toprak), Vs (çıkış) . Devreyi resimdeki gibi monte edelim (TSOP2136 için kablolama).


Gördüğünüz gibi IR alıcının çıkışını A0 kontrol cihazının analog girişine bağladık.

Çizim kodu şöyle görünür:

#include "IRremote.h" // Kızılötesi alıcının bağlı olduğu // denetleyicinin analog girişi: const int IR_PIN = A0; // Bir IR alıcı nesnesi oluşturun: IRrecv irrecv (IR_PIN); void setup() (Serial.begin (9600); Serial.println ("hazır"); // IR sinyallerini dinlemeye başla // irrecv.enableIRIn ();) void loop (// Sonuç yapısını tanımla, / / içine // alınan ve kodu çözülen // IR komutları yerleştirilecek: decode_results sonuçları; // IR komutu kabul edilir ve // ​​kodu başarıyla çözülürse, alınan kodu // denetleyicinin seri portuna // çıkartırız : if (irrecv.decode (& sonuçlar)) (Serial.println (results.value); irrecv.resume ();))

Çizim, çeşitli IR uzaktan kumandalarından gelen sinyallerin kodunu çözen özel bir IRremote.h kitaplığı kullanır. Bu kütüphane açık kaynak kodlu bir projedir, https://github.com/shirriff/Arduino-IRremote adresinden indirebilirsiniz. Ve onu projemize bağlamak için üç adımı gerçekleştirmeniz gerekiyor:

  • kitaplık dizinini, sırasıyla Arduino IDE kurulum dizininde bulunan kitaplıklar dizinine kopyalayın;
  • IDE'yi yeniden başlatın;
  • Çizimimizin başına #include "IRremote.h" satırını ekleyin.

Kızılötesi kod çözme işlevleri artık çizimde mevcut olacak. Ancak ortaya çıkan kodları görmek için Seri nesnesini de kullanacağız. Yardımı ile kodları bilgisayara seri port (hepsi aynı USB kablosu) üzerinden aktaracağız. Kurulum fonksiyonunda Seri nesnesini başlatıyoruz. "9600", 9600 baud'dur - veri iletimi için kullanılacak hız. Başlattıktan sonra println fonksiyonunu kullanarak seri porta yazabiliriz. Bu çıktının sonucunu Arduino IDE'deki bir bilgisayarda görüntülemek için Araçlar → Seri Monitör menü öğesini seçin (Ctrl + Shift + M). Sadece 9600 baud'a ayarlandığından emin olun.

Böylece, kontrolör bir USB kablosu aracılığıyla güç alır ve onun üzerinden veri aktarır. Krokiyi yükleyin, Seri Monitörü başlatın ve uzaktan kumandadaki düğmelere basmaya başlayın. Kodlar, Seri Monitör penceresinde görünmelidir. Uzaktan kumanda protokolleri farklılık gösterir, bazen bir kod, bazen birkaç kod olabilir. Her durumda, uzaktan kumandadaki her bir düğmeye özel olan kodları her zaman vurgulayabilirsiniz.

Uzaktan kumandada 13 düğmeye ihtiyacımız var. Aşağıdakileri kullandım:

  • 1 - sola yumuşak dönüş;
  • 2 - ileri hareket;
  • 3 - sağa yumuşak dönüş;
  • 4 - yerinde sola dönün;
  • 5 - dur;
  • 6 - yerinde sağa dönün;
  • 7 - sağa dönüşle geriye doğru hareket;
  • 8 - geriye doğru hareket;
  • 9 - sola dönerek geriye doğru hareket;
  • mavi düğme - çok yavaş;
  • sarı - yavaşça;
  • yeşil - hızlı;
  • kırmızı - çok hızlı.

Bu düğmelerin kodlarını yazın, daha sonra robot kontrol çizimi için ihtiyacınız olacak.

hareket algoritması

Robot kontrol taslağı proje sayfamızda mevcuttur (bit.ly/1dEwNDC). Uzaktan kumandanın basılan düğmelerinin kodlarının sabitlerinin değerlerini uzaktan kumandanızın kodlarına değiştirmeyi unutmayın (ir_command_codes.h dosyasındaki IR_COMMAND_XXX_CODES sabitleri).

Krokiyi ayrıntılı olarak analiz etmeyeceğiz, kodda yeterince yorum olduğunu düşünüyorum, ancak bir soru hala dikkate değer.

Böcek hareketleri çok ilginç. Ve tüm bu böcekler yere düşmeye çok yakın olmasına rağmen, bir nedenden dolayı her zaman sabittirler: herhangi bir zamanda, en az üç bacak (ikisi bir tarafta ve biri diğerinde) yüzeyde durur. Ve bu bacaklar böceği bir hedefe doğru çekerken, diğer üçü bu hareketi tekrarlamak için yukarı çeker. Görevimiz benzer bir şey yapmak.

Robot böceğimiz, harekete dik olarak sıralanmış üç adet servo motora sahiptir. Sol ve sağ servo motorlar için mil ekseni yukarı doğru, merkezi olan için ise ileriye doğru yönlendirilmiştir. Örneğin, bir sol servonun görevi, aynı anda iki bacağı sallamaktır: sol ön ve sol arka. Bu arada, birbirlerine sıkıca bağlılar ve bu servonun sallanan sandalyesine yapıştırılıyorlar. Merkezi servonun görevi, böceğin sol tarafını, ardından sağ tarafını yükseltmektir. Bu nedenle, merkezi sol ve sağ ayaklar, tek bir U şeklinde parça olan bu motorun sallanan sandalyesine bağlanır.

Kroki, robotun ileri, geri hareketini, hareket halinde yumuşak dönüşleri ve yerinde dönüşlerini sağlamalıdır. Ayrıca böceğin hızını da kontrol etmek istiyorum. Bu hareketleri programlı olarak tanımlamak için matematiğe ihtiyacımız var. Şemaya bakın.


Mavi daireler, yüzeyde duran robot böceğinin bacaklarını ve beyaz olanları - havadakileri gösterir. Lütfen ileri veya geri hareket ederken sol ve sağ servo motorların tam olarak aynı şekilde hareket etmesi gerektiğini unutmayın. Ve yerinde viraj alırken, motorlar farklı yönlerde (simetrik olarak) dönmelidir. Ayrıca ileri ve geri hareketin sadece merkezi servo motorun fazında farklılık göstermesi de ilginçtir.

Peki bu nasıl uygulanıyor? Kontrolörün sürekli olarak döngü fonksiyonunu çağırdığını hatırlıyoruz. O halde bu fonksiyonda servo motorların o anki konumunu belirleyen ve onları bu konuma ayarlayan kodu koymalıyız. Her servo motor salınım yapmalıdır. Aşağıdaki formülü kullanarak t zamanında servo motorun konumunu hesaplayabiliriz:

X = Bir günah (2πt / T),

burada X, servo motorun istenen konumudur, A, salınımın genliğidir, T, salınımın periyodudur.

Böylece, t anına bağlı olarak, X'in değerindeki değişimi –A'dan + A'ya kadar alıyoruz. Servo motorlar 0 ile 180 ° arasında konumlandırılabilir. Bu nedenle, 90 ° 'de "sıfır" konumu etrafında salınım yapmak bizim için daha iyidir. Ve eğer 30 ° genlikli 90 ° konum etrafında 1 s periyotlu salınımlar sağlamak istiyorsak, formül aşağıdaki forma dönüştürülür:

X = 90 + 30 günah (2πt / 1000),

burada t, salınımın başlangıcından bu yana milisaniye cinsinden süredir. Robot böceğin hareket hızını kontrol etmek için salınım periyodunu değiştirebiliriz. Ne kadar büyükse, hız o kadar düşük olur.

Şimdi tekrar diyagramımıza dönelim çünkü yukarıda yazılan formül henüz tamamlanmadı. Sol ve sağ servo motorun senkron ve daha sonra zıt hareketi nasıl sağlanır? Merkezi servo motorun fazı nasıl değiştirilir? Formülümüze bir salınım aşaması eklememiz gerekiyor. Örneğin, sağ motor için sinüs argümanını π ile kaydırmak, onun yerinde dönmesine ihtiyacımız olduğu için, onun antifazda sola doğru çalışmasını sağlayacaktır. Şimdi formülümüz şöyle görünecek:

X = 90 + 30 günah (2πt / 1000 + Φ),

Φ salınım aşaması olduğunda, değer 0 ila 2π arasındadır.

Her hareket türü için servo motorlar için salınım fazlarının ne olması gerektiğini anlamak için tabloya bakın.

toplantı

Şimdi robotu prototip tahtasına koyalım ve kontrol taslağını dolduralım.

Bu, montajdan önce çok önemli bir adımdır. USB kablosunu çıkarmayı ve devre tahtasına Krona pilinden güç vermeyi deneyin. Hareketin tüm aşamalarını kontrol edin ve her şeyin çalıştığından emin olun. Robotu monte ettikten sonra bir şeyi değiştirmek (örneğin, boşta olan bir servo motoru değiştirmek) daha zor hale gelecektir.


Şimdi montajın kendisine geçelim. Ana taşıyıcı pil bölmesidir. Kapalı bir bölme kullanmanızı ve her zaman bir anahtarla kullanmanızı öneririm.

Böceğin detaylarını düzeltmenin en kolay yolu, sıcak eriyik yapıştırıcı kullanmaktır. Servo motorlarla başlayın. Gereksiz sabitleme kulaklarını çıkarın ve arabaları birbirine bağlayın. Ardından bu üç servo grubunu pil kapağına yapıştırın. Pili değiştirmek için pil bölmesinin serbestçe açılması gerektiğini unutmayın.

En kolay yol, denetleyiciyi bölmeye yapıştırmaktır, ancak Arduino Uno'yu sonsuza kadar böceğe vermek zorunda kalacağım için bu seçeneği gerçekten sevmiyorum. Bu nedenle hayatı kendiniz için zorlaştırabilir ve pil bölmesini sabitlemek için Arduino konektörlerini kullanabilirsiniz. Bölmenin alt kısmında, pim konektörünü pimler arasında 2,54 mm aralıkla yapıştırın. 8-11 numaralı dijital pinlerin etrafındaki denetleyici soketine sığacak şekilde konumlandırılmalıdır. Şimdilik onlara ihtiyacımız olmayacak. Konektör elinizde değilse, U şeklinde bükülmüş bir ataş yapacaktır.

Pil bölmesinden gelen teller Vin'e ve bitişik GND'ye bağlanmalıdır. Polariteyi karıştırmayın! Artı Vin'de "Taçlar", GND'de eksi. Tellerin Arduino konektörleriyle güvenilir bir şekilde temasını sağlamak için, telin ucunu daha kalın bir tane ile sulayabilirsiniz, ancak fiş olarak kısa bir ataş parçası kullandım. Ve lehimleme yerini ısıyla daralan bir tüple kapattı.


Servo döngülerinden gelen konektörler kesilmeli, güç kabloları (+5 V - genellikle kırmızı ve GND - siyah veya kahverengi) bağlanmalı ve denetleyici üzerindeki 5V jaklarına ve bitişik GND'ye getirilmelidir. Biraz sonra bağlanacağız. Kontrol sinyali kabloları (genellikle sarı) kontrolörün dijital çıkışlarına verilir: sol servo motor pin 2'ye, ortadaki pin 4'e ve sağdaki pin 7'ye.

IR alıcısının "+" ve "-" uçları Arduino konektörüne (5V ve bitişik GND) kolayca takılabilir. Doğru, ikiye bükülerek kalınlıklarını ikiye katlıyor. Servo motorların önceden bağlanmış güç kablolarını IR alıcısının aynı güç ayaklarına lehimliyoruz. IR alıcısının sinyal çıkışının, kontrolör A0'ın analog girişine ulaşması olası değildir ve bunu bir kablo ile oluşturmanız gerekecektir.

Bacak yapmak için birkaç ipucu. İlk olarak, sol ve sağ ön-arka bacakları hazırlayın. Simetrik olduklarından emin olun (kıvrımların hem uzunluklarına hem de açılarına dikkat edin). Bacakları yapıştırmaya ancak servo motorların "sıfır" konumuna (90 °) ayarlandığından emin olduktan sonra başlayın.

En son orta bacak çiftini takın. İlk önce orta bacakları daha uzun yapmanızı ve ardından kurulumdan sonra istediğiniz uzunlukta kesmenizi tavsiye ederim. "Sıfır" konumunda, altı ayağın tümü yüzeyde olmalıdır. 15 ° genlikli orta bacakların sallanması, ön-arka dönüşlere müdahale etmemelidir.

Sıradaki ne?

Robobug, en popüler ve uygun fiyatlı denetleyicilerden birine dayanan hazır bir mobil platformdur. Açık proje: https://github.com/beetle-ringo/arduino. GitHub'da çatal (çatal) ve kendi işlevselliğinizi ekleyin. Hayal gücünüzü serbest bırakın - bir IR LED ekleyin ve robot robotik savaşa hazır. Telemetreleri, dokunsal sensörleri, jiroskopu bağlayın ... Robota engellerden kaçınmayı veya hat boyunca yürümeyi öğretin, üzerine bir web kamerası kurmaya çalışın. Milyonlarca fikir olabilir ve her zaman en ilginç olanı seçebilirsiniz.

Robot Sleipnir

Kit

  • Arduino Uno Dagu Örümcek Robot denetleyicisi: 2530 s.
  • Servolar SG90 9g (16 adet) 1150 ovmak.
  • LiPo pil takımı, 7,4 V, 1800 mAh 490 r.
  • Radyo modülü 4 Pinli Bluetooth RF Alıcı-Verici 270 р.
  • Voltaj göstergesi (opsiyonel) DC 3,3–30 V Kırmızı LED Panel Metre 100 р.
  • Alüminyum köşe. En yakın yapı pazarında 135 ruble.
  • Cıvatalar ve somunlar. En yakın bit pazarında 35 s.

Toplam: 4710 s.

*Bileşenler farklı zamanlarda satın alındı ​​ve birçok konum optimize edilebilir

poconoco: Standart olmayan bir konfigürasyon oluşturmaya çalışalım - sekiz ayaklı bir 2DOF robotu. 2DOF bacakları programlamak çok daha kolay ve stokta bir sürü kullanılmayan servo var. Ve en önemlisi, tanrı Odin Sleipnir'in (her zaman hayal edilen!) sekiz ayaklı atının onuruna adlandırmak mümkün olacak.

Sleipnir'imizin her iki tarafında iki menteşeli dört ayak olacaktır. Her pivot bir servodur, yani her tarafta sekiz servo vardır. Basit olması için, atın bir tarafındaki sekiz eklemin tümü aynı düzlemde dönecektir. Bu hiç gerekli olmasa da. Üstelik bir taraftaki bacaklar, iki bitişik bacak birbirine değmeyecek şekilde biraz "dama tahtası" konulursa, daha da iyi olacak, daha geniş bir adım atmanıza ve dörtnala gitmenize izin verecektir.


Düzgün ve işlevsel, ancak en ucuz çözümden çok uzak olan, çok sayıda servoyu bağlamak için optimize edilmiş özel bir kontrol kartı kullanmaktır. Bir Dagu Örümcek Robot Kontrol Cihazı açtım - bu aynı Arduino Mega, ancak önceden kablolanmış 3 pimli konektörlere sahip bir kartta, aynı 48 servoyu herhangi bir kalkan olmadan hemen bağlayabilirsiniz. Çok ayaklı Arduino robotları için idealdir.

Kontrol

Bluetooth ile kontrol edeceğiz. Bunun için çeşitli donanım çözümleri var. Bunlar, UART seri arayüzlü kalkanlar ve ayrı kartlardır (normal bir com portu gibi, sadece 5 V sinyal seviyelerinde). Bana en pratik şey UART arayüzüne sahip küçük bir tahta gibi geldi. Arduino portunun ilgili UART/Seri pinlerine bağlanır. İki nüansı not edelim: Uno / Due / Nano ve benzerlerinde bu tür yalnızca bir bağlantı noktası vardır ve ayrıca USB üzerinden flash yapmak için kullanılır. Bu nedenle, yanıp sönme sırasında Bluetooth modülünün bağlantısını kesmek gerekebilir. Ve ikinci nüans - modülün RX piminin Arduino'nun TX pimine ve TX'in RX pimine bağlı olduğunu unutmayın. UART'ta böyle şeyler var.

Bluetooth programlama servolardan daha karmaşık değildir, veriler bayt bayt okunabilir, bunu kullanacağız:

Karakter cmd'si; Seri.başlangıç ​​(9600); if (Serial.available ()) cmd = Seri.read ();

Arduino Mega kullanılıyorsa ve Bluetooth ikinci porta bağlıysa Seri yerine Seri1 yazılır. Bluetooth'u kullanamamanız, ancak robotu doğrudan USB üzerinden kontrol etmeniz dikkat çekicidir. Ve yukarıdaki kodda hiçbir şey değişmeyecek! Sadece bir seri bağlantı noktası ile çalışıyor ve orada bir BT vericisi veya bir USB Seri dönüştürücünün asılı olup olmadığı önemli değil.

Bluetooth'un diğer yüzü

Bağlanmanın en uygun yolu standart Linux yardımcı programlarıdır. Çalışmak için sdptool, rfcomm yardımcı programlarına (Ubuntu depolarındaki bluez paketine dahildir) ve minicom'a (paket bu şekilde denir) ihtiyacımız var. Bu yardımcı programları kullanma talimatları web'de bulunabilir.

hareket algoritması


Bir hekzapod için en basit yürüyüş şu olacaktır: bacaklar üç bacaklı iki gruba ayrılır ve gruplardan biri tamamen yerde, diğeri havada yeniden düzenlenir. Bu, mümkün olan tek yürüyüşten uzaktır. Sadece iki pençeyi havada, hatta bir tanesini ve diğer dört veya beşini yerde tutabilirsiniz. Oktapod için de birçok yürüyüş var. En basitini, ayrıca dört bacaklı iki grupla alacağız.

Peki 16 servo ve seçilmiş bir yürüyüş ile çalışmak için ne yapmamız gerekiyor? Doğru cevap, ters kinematik (IK) hakkında okumaktır. Makalenin hacmi, konuyu geniş bir şekilde genişletmeye izin vermiyor, ancak internette bol miktarda materyal var. Kısaca IR, sistemin uzayda istenilen pozisyonu alması için gerekli kontrol sinyallerini bulma problemini çözer. Bacak için bu, ayağın gitmesi gereken noktanın koordinatlarına göre bunun için ayarlamanız gereken servoların açılarını belirlemeniz gerektiği anlamına gelir. Ve ayakların koordinatlarını kontrol ederek vücudun pozisyonunu kontrol edebilirsiniz. 2DOF bacaklarımız var, eksenler paralel, bu yüzden ayak her zaman aynı düzlemde hareket ediyor. Bu durumda, IR görevi, onu büyük ölçüde basitleştiren 2B alana indirgenir.

Her bir bacak için O koordinatlarının yerel orijini üst servonun, yani uyluğun şaftı olsun. Ve ayağın gitmesi gereken A noktasının koordinatlarına sahibiz. O zaman, iki dairenin kesişme noktalarını bulma problemini çözmeniz gerektiğini görmek kolaydır (bir tarafın bacaklarının şemasına bakın, orada en sağdaki bacakta gösterilmiştir). Dairelerin kesiştiği B noktasını bulduktan sonra (bunlardan herhangi birini seçerek), Kartezyen koordinatlardan kutupsal koordinatlara ötelemeyi kullanarak gerekli açıları hesaplamak kolaydır. Kodda, bu sorunun çözümü şöyle görünüyor:

Kayan Nokta A = -2 * x; kayan nokta B = -2 * y; kayan nokta C = kare (x) + kare (y) + kare (kalça Uzunluğu) - kare (shinUzunluğu); kayan nokta X0 = -A * C / (kare (A) + kare (B)); şamandıra Y0 = -B * C / (kare (A) + kare (B)); kayan nokta D = kare (kare (kalça Uzunluğu) - (kare (C) / (kare (A) + kare (B)))); kayan nokta = kare (kare (D) / (kare (A) + kare (B))); float balta, ay, bx, by; ax = X0 + B * çok; bx = X0 - B * çok; ay = Y0 - A * çok; tarafından = Y0 + A * çok; // veya başka bir kesişme noktası için bx float eklemLocalX = ax; // veya başka bir kesişim noktası için kayan eklemLocalY = ay; float hipPrimaryAngle = polarAngle (jointLocalX, eklemLocalY); float hipAngle = hipPrimaryAngle - hipStartAngle; float shinPrimaryAngle = polarAngle (x - ortakYerelX, y - ortakYerelY); float shinAngle = (shinPrimaryAngle - hipAngle) - shinStartAngle;

x ve y ayağınızla ulaşmanız gereken noktanın koordinatlarıdır; hipStartAngle - "kalçanın" başlangıçta döndürüldüğü açı (servonun orta konumunda), benzer şekilde - shinStartAngle. Bu arada, bu hesaplamalarda açılar açıkça radyan cinsindendir, ancak bunların Servo nesnelerine derece olarak iletilmesi gerekir. Bu snippet'i içeren eksiksiz çalışan ürün yazılımı kodu GitHub'da yayınlanmıştır, makalenin sonundaki bağlantıya bakın. Bu bir IC parçasıdır, ancak bunun yanında, bu IC'yi tüm bacaklarda kullanmak için biraz daha basit koda ihtiyacınız vardır (legReachTo (), legWrite () işlevlerine bakın). Ayrıca, yürüyüşü gerçekten uygulayan bir koda ihtiyacınız olacak - bir grup bacağın hareketi "geri" (böylece robot ileri hareket eder), diğer bacak grubu bir sonraki adım için kaldırılır ve yeniden düzenlenir, bkz. adımİleri () işlev. Verilen parametrelerle bir adım atıyor. Bu arada, bu parametrelerle, işlevin adına rağmen geri adım atabilirsiniz. Bu fonksiyon bir döngüde çağrılırsa, robot ileri adım atacaktır.

Şimdi komutları alıyor ve onları yorumluyoruz. Programa bir durum ekleyelim:

Enum Durumu (DUR, İLERİ, GERİ, İLERİ_SAĞ, İLERİ_SOL);

Ve ana yürütme döngüsü döngüsünde () mevcut duruma (durum değişkeni) bakacağız ve ileri doğru hareket edersek (dönerek veya çevirmeden) stepForward'ı () ve yine stepForward'ı () çekeceğiz, ancak negatif bir xamp argümanıyla, eğer geri dönmemiz gerekiyor... Dönüşler legWrite() ile işlenecek ve sağa dönüş için sağ taraftaki bacaklar (soldakiler kürek çekerken) yerinde kalacaktır. İşte böyle bir at tankı. Acımasız, ama çok basit ve işe yarıyor. Yumuşak bir dönüş sadece 3DOF ayaklarla yapılabilir, bunun bir örneği buggybug deposunda görülebilir.

Anahtar (durum) (durum İLERİ: durum FORWARD_RIGHT: durum FORWARD_LEFT: ileri adım (h, dh, xamp, xshift); break; durum GERİ: stepForward (h, dh, - xamp, xshift); break;)

Karakter komutu; while (Serial1.available ()) komutu = Serial1.read (); geçiş (komut) (durum "w": durum = İLERİ; ara; durum "s": durum = GERİ; ara; durum "d": durum = İLERİ_SAĞ; ara; durum "a": durum = İLERİ_SOL; kırılma; varsayılan : durum = DUR;)

Bu konuda, bellenimin ana noktaları bitti, gerisi küçük şeyler. Başka, belki de önemli bir nokta olmasına rağmen - servolara ince ayar yapma yeteneği. En doğru montajda bile, tüm servolara 90 ° döndürme komutu verilirse, bazıları yine de biraz açı dışı olacaktır. Bu nedenle, onu ayarlama yeteneğine ihtiyacınız var. Bunu nasıl yaptığımı, hipsWrite () ve shinsWrite () yöntemlerinde ve hipsTune ve shinsTune ince ayar dizilerinde görebilirsiniz.

toplantı

Bu tür yapılar için özel bir şeye gerek yoktur: parçaları kesmek için uygun kalınlıkta bir pleksiglas levha (en yakın ev bit pazarından) ve bir yapboz veya demir testeresi yapacaktır. Ve elbette, delik delmek için bir matkap. Pleksiglas yerine kontrplak kullanabilirsiniz (sonra son yapı üzerinde bir brülör ile bir hatıra yazısı da yapabilirsiniz). Alüminyum levhalar veya köşeler de kullanılabilir. Sleipnir ile 1 cm nervürlü alüminyum bir köşe kullanmanın yolunu takip ettim (bir inşaat süpermarketinden satın aldım).


Taban dikdörtgen bir çerçeve olacaktır. Ekstremiteler - 4 cm şeritler. Ayrıca çok sayıda küçük cıvata, somun stoklamaya değer. Köşeyi istenilen parçalara ayırıyoruz, servolar için oluklar kesiyoruz, montaj cıvataları ve vidaları için delikler açıyoruz. Tasarımı anlatmaktansa göstermek daha iyidir. Boyutlar herhangi biri olabilir, robotlar çeşitlendirilmelidir. Ancak unutmayın: bacaklar ne kadar uzun olursa, servonun o kadar fazla kolu itmesi gerekecek ve üzerinde o kadar fazla stres olacaktır. Dönme ve hatta kırılma imkansızlığına kadar. Ancak 4-5 cm - sorun değil.

Bütçe hafif robotlar için, genellikle uzuvların ayrı bir eklemlenmesi ile uğraşmazlar ve tüm yük tamamen servo miline düşer. Düşük ağırlıkta, bu hiç de kritik değil. Ve daha fazla ağırlıkla, metal dişlilere ve bilyeli yatak şaftına sahip servoları düşünmelisiniz.

Kural olarak, her servo birkaç vida ve çeşitli uygulamalar için mile vidalanabilen bir dizi ataşman ile birlikte gelir. Tek bir "korna" (veya korna) bizim için en iyi sonucu verir, bu da servoya bir çubuk takmanıza olanak tanır. Böylece, iki servonun eksenleri bir çubuğa bağlanır ve çubuk bir "uyluk" olur. Bu durumda, bir servo gövdeye bağlanır ve diğeri alt bacağın bir parçası olur. Uzuvları uzatmak veya daha ilginç hale getirmek için başka bir çubuğu vidalamaya değer. Biraz özenli çalışma - ve platform hazır (kullanışlı tornavida, anahtar, cımbız, tel kesici vb. setleri işlemi büyük ölçüde hızlandırır).

Sıradaki ne?

Projenin tamamı https://github.com/poconoco/sleipnir adresinde mevcuttur. En pratik olmayan konfigürasyonlardan birini tanımladım - birçok 2DOF ayağı, uzun, dar, kolayca yana düşüyor. 3DOF ayaklı daha iyi bir robot yapmaya çalışın. 4DOF ayaklı. Pençelerle veya çenelerle. 3DOF ters kinematiğine bir örnek olarak, buggybug deposuna başvurabilirsiniz - bir hexapod bellenimi var. Bluetooth yerine mesafe sensörleri koyarak kontrollü değil akıllı robotlar da yapabilirsiniz, robota duvarlardan ve engellerden kaçınmayı öğretebilirsiniz. Böyle bir sensörü bir servo sürücüye yerleştirir ve döndürürseniz, neredeyse sonar ile alanı tarayabilirsiniz.

Herkese merhaba. Bu makale, bunun nasıl yapılacağı hakkında kısa bir hikayedir. yapmak robot onlar tarafından elle... Neden bir hikaye, soruyorsun? Hepsi, böyle bir üretim için el sanatları tek bir makalede sunulması çok zor olan önemli bir bilgi deposu kullanmak gerekir. Montaj sürecini gözden geçireceğiz, tek gözle koda göz atacağız ve sonunda Silikon Vadisi'nin beynini canlandıracağız. Sonunda ne olması gerektiğine dair bir fikriniz olması için videoyu izlemenizi tavsiye ederim.

Devam etmeden önce, lütfen üretim sırasında aşağıdakilere dikkat edin. el sanatları lazer kesici kullanılmıştır. Ellerinizle yeterince tecrübeniz varsa lazer kesiciden vazgeçilebilir. Doğruluk, bir projeyi başarıyla tamamlamanın anahtarıdır!

Adım 1: Nasıl çalışır?

Robotun her birinde 3 servo bulunan 4 bacağı vardır, bu da uzuvları 3 serbestlik derecesinde hareket ettirmesini sağlar. "Sürünen bir yürüyüş" ile hareket eder. Yavaş olabilir, ancak en yumuşaklarından biri.

Öncelikle robota ileri, geri, sola ve sağa hareket etmeyi öğretmeli, ardından engelleri / engelleri tespit etmeye yardımcı olacak bir ultrasonik sensör ve ardından robotun kontrolünün yeni bir seviyeye ulaşacağı bir Bluetooth modülü eklemelisiniz. .

2. Adım: Gerekli ayrıntılar

iskelet 2 mm pleksiglastan yapılmıştır.

Ev yapımı ürünün elektronik kısmı şunlardan oluşacaktır:

  • 12 servo;
  • arduino nano (herhangi bir başka arduino kartıyla değiştirilebilir);

  • Servo kontrol için kalkan;
  • güç kaynağı ünitesi (projede PSU 5V 4A kullanılmıştır);

  • ultrasonik sensör;
  • hc 05 bluetooth modülü;

Bir kalkan yapmak için ihtiyacınız olacak:

  • devre kartı (tercihen ortak güç ve toprak hatları (otobüsler) ile);
  • karttan karta pin konnektörleri - 30 adet;
  • pano başına yuva - 36 adet;

  • teller.

enstrümanlar:

  • Lazer kesici (veya usta eller);
  • Süper yapıştırıcı;
  • Sıcakta eriyen yapıştırıcı.

Adım 3: iskelet

İskeletin bileşenlerini çizmek için bir grafik programı kullanalım.

Bundan sonra, mevcut herhangi bir şekilde, gelecekteki robotun 30 parçasını kestik.

Adım 4: montaj

Kestikten sonra koruyucu kağıt kaplamayı pleksiglastan çıkarın.

Ardından, bacakları birleştirmeye başlıyoruz. İskelet parçalara yerleşik bağlantı elemanları. Yapılması gereken tek şey parçaları bir araya getirmek. Bağlantı oldukça sıkı, ancak daha fazla güvenilirlik için bağlantı elemanlarına bir damla süper yapıştırıcı uygulayabilirsiniz.

Ardından servoları değiştirmeniz gerekir (servoların millerinin karşısındaki vidayı yapıştırın).

Bu iyileştirme ile robotu daha kararlı hale getireceğiz. Sadece 8 servo için modifikasyon yapılması yeterlidir, kalan 4 servo doğrudan gövdeye eklenecektir.

Bacakları bağlantı elemanına (kavisli kısım) ve bu da gövde üzerindeki servoya takıyoruz.

Adım 5: Kalkanı yapmak

Adımda sunulan fotoğrafları takip ederseniz, tahtanın üretimi oldukça basittir.

6. Adım: elektronik

Arduino kartına servoların pinlerini sabitleyelim. Pinler doğru sırayla bağlanmalıdır, aksi takdirde hiçbir şey işe yaramaz!

7. Adım: programlama

Frankenstein'ı hayata döndürmenin zamanı geldi. İlk olarak leg_init programını yükleyin ve robotun resimde gösterilen konumda olduğundan emin olun. Ardından, robotun ileri, geri, sol ve sağ gibi temel hareketlere yanıt verip vermediğini test etmek için quattro_test'i yükleyin.

ÖNEMLİ: arduino IDE yazılımına ek kütüphane eklemeniz gerekmektedir. Kütüphane bağlantısı aşağıda sunulmuştur:

Robot 5 adım ileri, 5 adım geri, 90 derece sola, 90 derece sağa dönmelidir. Frankenstein her şeyi doğru yaparsa, doğru yöne gidiyoruz demektir.

P. S: Robotu, her seferinde orijinal noktasına dönmemesi için bir stand gibi fincanın üzerine yerleştirin. Testler robotun düzgün çalıştığını gösterdikten sonra zemine/zemine yerleştirerek teste devam edebiliriz.

Adım 8: ters kinematik

Ters (ters) kinematik - robotu gerçekten kontrol eden kişidir (bu projenin matematiksel tarafı ile ilgilenmiyorsanız ve projeyi tamamlamak için aceleniz varsa, bu adımı atlayabilirsiniz, ancak robotu neyin tahrik ettiğini bilerek) her zaman faydalı olacaktır).

Basit bir deyişle, ters kinematik veya IR olarak kısaltılır, trigonometrik denklemlerin bacağın keskin ucunun konumunu, her servonun açısını vb. belirleyen ve sonuçta bir çift ön ayarı belirleyen "kısmı" dır. Örneğin robotun her adımının uzunluğu veya hareket/dinlenme sırasında vücudun bulunacağı yükseklik. Bu önceden tanımlanmış parametreleri kullanarak, sistem verilen komutları kullanarak robotu kontrol etmek için her bir servonun hareket ettirilmesi gereken miktarı alacaktır.

Robot hakkında biraz. Her şeyden önce, projenin mümkün olduğunca ucuz olması gerekiyordu. Gövde herhangi bir hesaplama ve dengeleme yapılmadan oluşturulmuştur, gövde için temel gereksinim minimum boyutlardır. Öyleyse bu robotu monte etmeye başlayalım.

Parça listesi:
1. Gövde ve pençeler için 1.5 mm pleksiglastan yapılmış bir dizi parça.
2. Arduino Mega veya Uno (Mega kullanılır) - 1 adet.
3. Mikro servo (TowerPro SG90 tarafından kullanılır) - 8 adet.
4. Ultrasonik telemetre HC-SR04 - 1 adet.
5. Pil boyutu 18560, 3.7V (TrustFire 2400 mAh tarafından kullanılır) - 2 adet.
6. Pil tutucu boyutu 18560 (dönüştürülmüş kap kullanılır - ambalaj) - 1 adet.
7. PCB standı 25 mm. (bu tür raflar kullanılır) - 4 adet.
8. Breadboard'un bir parçası.
9. Atlama telleri.
10. Vida DIN 7985 M2, 8 mm. - 18 parça.
11. Somun DIN 934 M2 - 18 ad.

Z-RoboDog robotunun montajı:

1. Robotun gövdesi 1,5 mm kalınlığında şeffaf pleksiglastan yapılmıştır. Tüm parçalar CorelDraw programında yapılan çizime göre lazerle kesilir:

2. Gövdeyi ikinci bir yapıştırıcıyla yapıştırın. Yapıştırılmış kasanın gücü yeterli olacaktır. Montaj yaparken, alt kapaktaki deliklerin konumunu dikkate alın (fotoğrafa bakın), bunun yerine kartı takın ve her şeyin eşleştiğinden emin olun. Yan panelleri, tel delikleri arka panele daha yakın olacak şekilde takın. Arkadaki daha geniş delik USB kablosu içindir, montaj sırasında bunu dikkate alın.


3. Delikleri işaretleyin ve delin (2 mm delin). Cıvataları ve somunları kullanarak servoları muhafazaya sabitleyin (listedeki 10, 11. maddeler). Ön servo miller ön duvara daha yakın olmalıdır. Arka servo milleri arka duvara daha yakındır.




4.1. Pençelerini topla. Bacakların üst kısımlarını alın (iki delikli). Parçanın ortasını işaretleyin. Servo rocker'ı değiştirerek bağlantı noktalarını vidalar ve matkap delikleriyle işaretleyin (1,5 mm matkap). Vida başları koltukların yan tarafında olacak şekilde külbütör kollarını sabitleyin. Farklı taraflardaki külbütörleri ve mil yuvalarını ters yöne gelene kadar sabitleyin.


4.2. Servoları monte etmek için delikleri işaretleyin ve delin (2 mm matkap ucu). Sabit servoların milleri, şaftın dar kenarına daha yakın olmalıdır.


4.3. Pençelerin kaymasını önlemek için, örneğin kauçuk gibi üzerlerine yapıştırın. Ancak patinin ön kısmını yapıştırmamalısınız, adımlar sırasında köpek yakalayabilir ve sıkışabilir. Arabadan yapışkan halı şeritlerini yapıştırdım.

5. Ultrasonik mesafe ölçeri takmak için delikleri işaretleyin ve delin (2 mm matkap). Telemetreyi temas ayakları yukarı bakacak şekilde takın.

6. Pil tutucuyu muhafazada ortalanacak şekilde takın. Arduino kartını sabitleyin ve tüm bileşenleri bağlayın. Güç kaynağını bölmek için devre tahtasının bir kısmı kullanıldı.

Z-RoboDog robotunu kurma ve çalıştırma:

Bu noktada, adımların kalibre edilebilmesi için ayakları kendiniz ayarlamanız gerekecektir. Asıl sorun, millere sadece belirli konumlarda bağlanan külbütör kollarıdır. Ayrıca servoların kendileri çalışma derecelerinde farklılık gösterebilir.

Köpeğimin patileri servonun köşelerinin uç noktalarına bu şekilde bakıyor (değişkenler zs1, zs2, zs3, vb.). Fotoğraftaki gibi patilerinizi ortaya çıkarmaya çalışın. Görsel olarak, bacaklar aynı pozisyonda olmalıdır.

Ana duruşta patilerinizi de ortaya çıkarabilirsiniz. Bundan sonra, sallanan kolları servo millere vidalamayı unutmayın.


Z-RoboDog yazılım bölümü:

Kod çok basit, her yere yorumlar ekleniyor. Tüm hareketler bir dizi içindedir, sayılarda kafa karıştırmamak için her servo için değişkenler kullandım. Örneğin, s1 servo 1'dir, s2 servo 2'dir, vb. Anlamayı kolaylaştırmak için size böyle bir şema sunuyor.

Patiler şemada numaralandırılmıştır, patinin her bir parçası onu hareket ettiren bir servo ile ilişkilendirilmiştir. Ayrıca her pati için hareket yönleri belirtilir, artı ve eksi işaretleri açı artırıldığında veya azaltıldığında patinin nereye hareket edeceğini gösterir. Ana dikmenin açıları (s1, s2, s3, vb.) başlangıç ​​açıları olarak seçilmiştir. Örneğin 2. ayağı uzatmanız gerekiyorsa s3 ve s4 açısını artırmalısınız dizide şöyle görünecektir (s1, s2, s3 + 100, s4 + 50, s5, s6, s7, s8) . İşte tam kroki. Kod bilgim nedeniyle yazılmıştır, yanlış uygulama yolunu seçtiysem lütfen bana bildirin.

Video:


Arşivlenmiş eskiz: Sunucumuzdan dosya indirme erişiminiz yok

Bugünkü yazımda sizlere Arduino mikrodenetleyici bazında engelleri aşan bir robotu kendi elinizle nasıl yapacağınızı anlatacağım.



Evde bir robot yapmak için mikrodenetleyici kartının kendisine ve bir ultrasonik sensöre ihtiyacınız olacak. Sensör bir engel tespit ederse, servo engelin etrafından dolaşmasına izin verecektir. Robot, boşluğu sağa ve sola tarayarak engelden kaçınmak için en çok tercih edilen yolu seçecektir.

Codebender, robotunuzu bir tarayıcıdan programlamanın en kolay yolu olan tarayıcı tabanlı bir IDE'dir. "Arduino'da Çalıştır" düğmesine tıklamanız gerekiyor ve bu kadar, daha kolay olamazdı.

Pili bölmeye yerleştirin ve fonksiyon düğmesine bir kez basın, robot ileriye doğru hareket edecektir. Hareketi durdurmak için düğmeye tekrar basın.

/ * Servo motorlu ve ultrasonik sensörlü HC-SR04 LED'li ve sesli uyarıcılı Arduino Engelden Kaçınan Robot * / // Kitaplıklar #include #include "Ultrasonic.h" // Sabitler const int düğmesi = 2; // Düğmenin pin 2'ye pini const int led = 3; // LED pini (bir direnç aracılığıyla) pin 3'e const int buzzer = 4; // Buzzer'ın pin 4'e pini const int motorA1 = 6; // A motorunun pozitif (+) pimi ile pim 6'ya (PWM) (L298 modülünden!) const int motorA2 = 9; // A motorunun negatif pini (-) ile pin 9 arası (PWM) const int motorB1 = 10; // B motorunun pozitif (+) pininden 10 pinine (PWM) const int motorB2 = 11; // B motorunun negatif pimi (-) ile pim 11'e (PWM) Ultrasonik ultrasonik (A4, A5); // Ultrasonik nesne oluştur (trig pin, echo pin) Servo myservo; // Servoları kontrol etmek için bir Servo nesnesi oluşturun // Değişkenler int uzaklık; // Nesneye olan mesafeyi saklamak için değişken int checkRight; int kontrolSol; int işlevi = 0; // Robot fonksiyonunu saklamak için değişken: "1" - hareket veya "0" - durduruldu. Varsayılan olarak durduruldu int buttonState = 0; // Düğmenin durumunu saklamak için değişken. Varsayılan olarak "0" int konum = 90; // servonun konumunu saklamak için değişken. Varsayılan olarak 90 derece - sensör ileriye bakar int flag = 0; // buton bırakıldığında butonun durumunu saklamak için kullanışlı flag void setup() (myservo.attach (5); // Servo pini pin 5'e bağlı myservo.write (kon); // servoya gitmesini söyler pinMode (button, INPUT_PULLUP); pinMode (led, OUTPUT); pinMode (buzzer, OUTPUT); pinMode (motorA1, OUTPUT); pinMode (motorA2, OUTPUT); pinMode (motorB1, OUTPUT) değişkenindeki konuma " pos " ; pinMode (motorB2, OUTPUT) ;) void loop () (// Düğmenin durumunun kontrol edilmesi buttonState = digitalRead (düğme); unsigned uzun currentMillis = millis (); // sayma ... // Ana işlevi değiştirir ( durduruldu / hareket ediyor) butona basıldığında eğer (buttonState = = LOW) (// butona bir kez basılırsa ... gecikme (500); if (bayrak == 0) (fonksiyon = 1; bayrak = 1; / / bayrak değişkenini değiştirin) else if (bayrak == 1) (/ / Düğmeye iki kez basılırsa işlev = 0; bayrak = 0; // bayrak değişkenini tekrar değiştirin)) if (işlev == 0) (// Düğme serbest bırakılır veya iki kez basılırsa: myservo.write (90); // servo için 90 derece ayarlayın - sensör ü ileri durdurma (); // robot sabit kalır noTone (sesli uyarı); // sesli uyarı kapalı digitalWrite (led, HIGH); // ve diyot açık) else if (fonksiyon == 1) (// Düğmeye basılırsa: // Mesafeyi okuyun ... mesafe = ultrasonic.Ranging (CM); // İpucu: Santimetre için "CM" ve inç için "INC" kullanın // Nesneleri kontrol edin. .. if (mesafe> 10) (ileri (); // Her şey yolunda, ilerliyor! noTone (buzzer); digitalWrite (led, DÜŞÜK);) else if (mesafe)<=10){ stop(); //Обнаружен объект! Останавливаемся и проверяем слева и справа лучший способ обхода! tone(buzzer,500); // издаём звук digitalWrite(led,HIGH); // включаем светодиод //Начинаем сканировать... for(pos = 0; pos =0; pos-=1){ //идём от 180 градусов к 0 myservo.write(pos); // говорим серво пройти на позицию в переменной "pos" delay(10); // ждём 10 мс, пока сервопривод достигнет нужной позиции } checkRight= ultrasonic.Ranging(CM); myservo.write(90); // Датчик снова смотрит вперёд //Принимаем решение – двигаться влево или вправо? if (checkLeft checkRight){ right(); delay(400); // задержка, меняем значение при необходимости, чтобы заставить робота повернуться. } else if (checkLeft <=10 && checkRight <=10){ backward(); //Дорога перекрыта... возвращаемся и идём налево;) left(); } } } } void forward(){ digitalWrite(motorA1, HIGH); digitalWrite(motorA2, LOW); digitalWrite(motorB1, HIGH); digitalWrite(motorB2, LOW); } void backward(){ digitalWrite(motorA1, LOW); digitalWrite(motorA2, HIGH); digitalWrite(motorB1, LOW); digitalWrite(motorB2, HIGH); } void left(){ digitalWrite(motorA1, HIGH); digitalWrite(motorA2, LOW); digitalWrite(motorB1, LOW); digitalWrite(motorB2, HIGH); } void right(){ digitalWrite(motorA1, LOW); digitalWrite(motorA2, HIGH); digitalWrite(motorB1, HIGH); digitalWrite(motorB2, LOW); } void stop(){ digitalWrite(motorA1, LOW); digitalWrite(motorA2, LOW); digitalWrite(motorB1, LOW); digitalWrite(motorB2, LOW); }

"Düzenle" düğmesine tıklayarak taslağı ihtiyaçlarınıza göre düzenleyebilirsiniz.

Örneğin bir engele ölçülen mesafenin "10" değerini cm cinsinden değiştirerek robot Arduino'nun engel aramak için tarayacağı mesafeyi azaltacak veya artıracaksınız.

Robot hareket etmezse elektrik motorlarının (motorA1 ve motorA2 veya motorB1 ve motorB2) kontaklarını değiştirebilir.

7. Adım: tamamlanmış robot

Arduino mikrodenetleyicisine dayalı engellerden kaçınan ev yapımı robotunuz hazır.

Ama aynı zamanda bu tahtaya dayalı hazır tam teşekküllü bir robot satın alarak. İlkokul veya okul öncesi çağındaki çocuklar için bu tür hazır Arduino projeleri bile tercih edilir, çünkü "Ölü" tahta sıkıcı görünüyor. Bu yoldan özellikle elektrik devrelerine ilgi duymayanlar için uygundur.

Çalışan bir robot modeli satın alarak, yani. Aslında, hazır bir yüksek teknoloji oyuncak, kendi kendine tasarım ve robot yaratmaya olan ilgiyi uyandırabilirsiniz. Böyle bir oyuncakla yeterince oynadıktan ve nasıl çalıştığını anladıktan sonra, modeli geliştirmeye başlayabilir, her şeyi parçalara ayırabilir ve serbest kalan kartı, sürücüleri ve sensörleri kullanarak Arduino'da yeni projeler oluşturmaya başlayabilirsiniz. Arduino platformunun açıklığı, aynı bileşenlerden yeni oyuncaklar yapılmasına izin verir.

Arduino kartındaki hazır robotlara küçük bir genel bakış sunuyoruz.

Bluetooth ile kontrol edilen Arduino makinesi

Bluetooth kontrollü araba, maliyeti 100 doların biraz altında. Demonte olarak teslim edilir. Gövde, motor, tekerlekler, lityum pil ve şarj cihazına ek olarak bir Arduino UNO328 kartı, bir motor denetleyicisi, bir Bluetooth adaptörü, bir uzaktan kumanda ve daha fazlasını alıyoruz.

Bunu ve başka bir robotu içeren video:

Oyuncağın daha ayrıntılı bir açıklaması ve DealExtreme çevrimiçi mağazasının web sitesinde satın alma yeteneği.

Arduino kaplumbağa robotu

Kaplumbağa robotu montaj kiti yaklaşık 90 dolara mal oluyor. Eksik olan tek şey kabuktur, bu kahramanın yaşamı için gerekli olan her şey sete dahildir: Arduino Uno kartı, servolar, sensörler, izleme modülleri, IR alıcısı ve uzaktan kumanda, pil.

Kaplumbağa, Aliexpress'deki daha ucuz bir robot olan DealExtreme web sitesinden satın alınabilir.

Bir cep telefonundan kontrol edilen Arduino paletli araç

Bir cep telefonundan Bluetooth ile kontrol edilen paletli araç, 94 dolar değerinde. Paletli tabana ek olarak, bir Arduino Uno kartı ve bir genişletme kartı, bir Bluetooth kartı, bir pil ve bir şarj cihazı alıyoruz.

DealExtreme web sitesinde paletli bir araç da satın alınabilir, ayrıca ayrıntılı bir açıklama da vardır. Belki daha ilginç demir Arduino tankı Aliexpress'de.

labirentte sürüş Arduino araba

Labirentlerden geçen araba, 83 dolar değerinde. Motorlar, Arduino Uno kartları ve diğer gerekli öğelere ek olarak, izleme modülleri ve engellerden kaçınma modülleri içerir.

Bitmiş robot veya robot çerçevesi

İncelemede tartışılan Arduino robotları oluşturmak için hazır kitleri kullanma seçeneğine ek olarak, robotun ayrı bir çerçevesini (gövdesini) satın alabilirsiniz - tekerlekli bir platform veya tırtıl, insansı, örümcek ve diğer modeller. Bu durumda robotun dolumunu kendiniz yapmanız gerekecektir. Bu tür vakalara genel bir bakış, makalemizde verilmiştir.

Hazır robotları başka nereden satın alabilirim?

İncelemede, bize göre Çin çevrimiçi mağazalarından en ucuz ve en ilginç hazır Arduino robotlarını seçtik. Çin'den bir paket beklemek için zaman yoksa, Amperka ve DESSY çevrimiçi mağazalarında çok çeşitli hazır robotlar var. Düşük fiyatlar ve hızlı teslimat, ROBstore çevrimiçi mağazası tarafından sunulmaktadır. Önerilen mağazaların listesi.

Arduino proje incelemelerimiz de ilginizi çekebilir:


Arduino öğrenme

Arduino öğrenmeye nereden başlayacağınızdan emin değil misiniz? Size daha yakın olanı düşünün - kendi basit modellerinizi bir araya getirmek ve bunları yavaş yavaş karmaşık hale getirmek veya daha karmaşık, ancak hazır çözümleri tanımak mı?