İçindekiler:

Basit Arduino Robotik Platformu!: 5 Adım
Basit Arduino Robotik Platformu!: 5 Adım

Video: Basit Arduino Robotik Platformu!: 5 Adım

Video: Basit Arduino Robotik Platformu!: 5 Adım
Video: Arduino Nedir? Nasıl Kurulur ve Neler Yapılabilir? #1 2024, Kasım
Anonim
Basit Arduino Robotik Platformu!
Basit Arduino Robotik Platformu!
Basit Arduino Robotik Platformu!
Basit Arduino Robotik Platformu!

Robotik ekip toplantıları sırasında bazı AVR mikro denetleyicileriyle oynadıktan sonra bir Arduino aldım. Basit bir bilgisayar arayüzünden hemen hemen her şeyi çalıştırabilen gerçekten ucuz bir programlanabilir çip fikrini sevdim, bu yüzden bir Arduino aldım çünkü zaten güzel bir tahta ve USB arayüzü var. İlk Arduino projem için lisede yaptığım bazı yarışmalardan aldığım bir Vex Robotics kitini çıkardım. Her zaman bilgisayarla çalışan bir robotik platformu yapmak istemiştim ama Vex mikro denetleyici bende olmayan bir programlama kablosu gerektiriyor. Platformu sürmek için yeni Arduino'mu (ve belki daha sonra çalıştırırsam çıplak bir AVR çipi) kullanmaya karar verdim. Sonunda bir netbook almak istiyorum ve ardından WiFi kullanarak robotu sürebilir ve web kamerasını uzaktan görebilirim.

İyi bir seri protokol ve bir Linux PC'ye bağlı bir Xbox 360 denetleyicisi kullanarak robotu çalıştıran basit bir örnek elde etmeyi başardım.

Adım 1: Ne Yapabilir…

Ne yapabilir…
Ne yapabilir…
Ne yapabilir…
Ne yapabilir…

Arduino çok yönlü bir platformdur. Temel amacım sadece Arduino'yu iki Vex motorunu PC'ye bağlamaktı, ancak çok fazla artık giriş/çıkış pinim vardı ve bazı ekstra şeyler eklemeye karar verdim. Şu anda seri port durumu için bir RGB LED'im (paketler iyiyse yeşil, kötüyse kırmızı) ve bir transistör tarafından çalıştırılan bir PC fanım var. Anahtarlar ve sensörler de ekleyebilirim ama bunların hiçbirini henüz koymadım. Bunun en güzel yanı Arduino robotuna istediğinizi ekleyebiliyorsunuz. Fazladan şeyleri kontrol etmek ve bilgisayara girdi almak için sadece biraz arayüz kodu gerekir.

2. Adım: Parçalar

Parçalar
Parçalar
Parçalar
Parçalar
Parçalar
Parçalar

Robotum için birkaç farklı parça kullandım. Parçaların çoğu bodrum katıma döşediğim eski şeylerdendi.1) ATMega328 ile Arduino Duemilanove Bu en yeni Arduino ve birkaç gün önce aldığımdan beri en yenisine sahibim. Ancak kod, herhangi bir Arduino'ya kolayca sığacak kadar küçüktür. Muhtemelen bir ATTiny'ye bile sığabilir (Arduino'dan ayrı bir robot kontrol cihazı kurarsam, ATTiny 2313 iyi bir seçim gibi görünür, daha küçük ve daha ucuzdur ancak yine de çok sayıda çıktıya ve seri UART arayüzüne sahiptir)2) Vex Robotics PlatformI birkaç yıl önce bir lise yarışması için malzeme toplamak üzere radyo kontrollü bir robot yapmak için bir Vex kiti aldı. İki motor tarafından tahrik edilen 4 tekerleği olan temel "kare bot" tabanını yaptım. Sürmek istediğiniz başka bir platformunuz varsa, diğer robot üslerini değiştirebilirsiniz. Unutulmaması gereken önemli nokta, Vex motorlarının esasen sürekli dönüş servolarıdır, ne kadar hızlı ve hangi yöne döneceklerini bildirmek için darbe genişlik modülasyonu kullanırlar. Vex motorları güzel çünkü 5 ila 15 volt arasında bir yerde yüksek bir çalışma voltajı aralığına sahipler. 12V pilim olduğu için 12V kullanıyorum. Çoğu standart hobi servosu için daha düşük bir voltaja (genellikle 6 volt) ihtiyacınız olacaktır.3) PilGüç kaynağı olmadan robot bir işe yaramaz. Test için RadioShack'ten standart bir 9V duvar siğil adaptörü kullanıyorum, ancak kablosuz kullanım için eski bir dizüstü bilgisayarda 12V NiMH pil takımı buldum. Dizüstü bilgisayarı çalıştırmak için yeterli şarj tutmasa da, Vex robotumu gayet iyi çalıştırıyor. Ayrıca güç konektöründeki Vin giriş pinini kullanarak Arduino'ya güç verebilir, Arduino 12V'yi 5'e kadar düzenler ve hatta güç konektöründeki 5V çıkış pininden çıkarır.4) Temel Breadboard Şu anda bir devre tahtası kullanıyorum. her şeyi bağla. Sonunda daha güzel bir prototipleme tahtası alacağım ve daha kalıcı bağlantılar üzerinde lehim yapacağım ama şimdilik devre tahtası bazı şeyleri değiştirmeyi kolaylaştırıyor. Breadboard'um SparkFun'un "temel devre tahtası", sadece 3 terminalli metal bir plaka üzerinde bir devre tahtası.5) MAX232 tabanlı RS232-TTL dönüştürücüRobotunuzu bir RS-232 seri port bağlantısı kullanarak sürmek istiyorsanız (Arduino'nun yerleşik USB'de) bir RS232-TTL dönüştürücü kullanabilirsiniz. Bir MAX232 kullanıyorum çünkü birkaç tanesi etrafta yatıyordu ve gerekli kapasitörlerle küçük bir prototipleme panosuna lehimledim. RS-232'ye ihtiyacım var çünkü eski dizüstü bilgisayarımda yalnızca bir USB bağlantı noktası var ve bunu robotu sürmek için bir oyun denetleyicisi olarak kullanıyorum.6) İstendiği gibi ekstra parçalar Seri protokolün kolay hata ayıklaması için üzerine bir RGB LED yerleştirdim (Arduino siparişimden bir tane aldım çünkü kulağa hoş geliyorlardı). Arduino robotun yeniden başlatıldığını göstermek için açıldığında ışık sırayla kırmızı, yeşil, mavi yanıp söner ve ardından bir motor paketi alındığında Yeşil, bir fan paketi alındığında Mavi ve kötü veya bilinmeyen bir olduğunda Kırmızı yanar. paket alındı. Fanı sürmek için standart bir NPN transistörü (son Instructable'ımda gösterdiğimle aynı) ve transistör ile Arduino arasında bir direnç kullandım (transistör çok fazla akım çekiyor ve Arduino'yu ısıtıyordu, bu yüzden bir sınırlayıcı koydum. durdurmak için direnç).

Adım 3: Arduino ve PC Programlama

Arduino ve PC Programlama
Arduino ve PC Programlama

Arduino'yu programlamak için açıkça Arduino yazılımına ve bir USB kablosuna ihtiyacınız olacak. PC'nizde bir seri bağlantı noktası varsa, Arduino'yu bir seri bağlantı noktası ve bir TTL seviye dönüştürücü kullanarak da programlayabilirsiniz. Arduino'nun seri pinlerine (pin 0 ve 1) bağlı bir seviye dönüştürücü varsa, USB seri arayüzünün Arduino'nun ATMega işlemcisi ile iletişim kurmayacağını unutmayın, bu nedenle USB'yi kullanmadan önce bağlantısını kesin. Arduino'da, izin veren bir seri arayüze ihtiyacımız olacak. Motorları kontrol etmek için PC. Ayrıca Vex motorlarına doğru sinyalleri göndermek ve doğru değerler verildiğinde doğru yönlere gittiklerinden emin olmak için bir PWM servo sürücü sistemine ihtiyacımız olacak. Ayrıca, temel olarak durum göstergesi için ve aynı zamanda harika göründüğü için bazı basit LED yanıp sönme ekledim. PC'de seri portu açmamız ve Arduino programının anlayacağı veri çerçeveleri göndermemiz gerekecek. PC'nin ayrıca motor değerleri ile gelmesi gerekiyor. Bunu yapmanın kolay bir yolu, bir USB oyun pedi veya joystick kullanmaktır, ben bir Xbox 360 denetleyicisi kullanıyorum. Diğer bir seçenek de, kablosuz olarak sürmek için robotun kendisinde ağa bağlı bir bilgisayar (netbook veya küçük bir mini ITX kartı) kullanmaktır. Bir netbook ile, bir video beslemesini geri izlemek ve robotunuzu uzaktan sürmek için yerleşik web kamerasını bile kullanabilirsiniz. Kurulumum için ağ programlaması yapmak için Linux soket sistemini kullandım. Bir program ("joystick sunucusu"), bir denetleyicinin takılı olduğu ayrı bir bilgisayarda çalıştırılır ve Arduino'ya bağlı netbook üzerinde başka bir program ("istemci") çalıştırılır. Bu, iki bilgisayarı birbirine bağlar ve joystick bilgilerini netbook'a gönderir, ardından seri paketleri robotu çalıştıran Arduino'ya gönderir. Arduino'ya bir Linux PC (C++'da) kullanarak bağlanmak için önce seri bağlantı noktasını doğru şekilde açmalısınız. baud hızı ve ardından Arduino'nun kodunda da kullandığınız bir protokolü kullanarak değerleri gönderin. Seri formatım basit ve etkilidir. İki motor hızını göndermek için "çerçeve" başına 4 bayt kullanıyorum (her biri tek bir bayttır). İlk ve son bayt, Arduino'nun PWM koduna yanlış bayt göndermesini ve motorların çıldırmasına neden olmasını önlemek için kullanılan sabit kodlanmış değerlerdir. RGB LED'in birincil amacı budur, seri çerçeve tamamlanmadığında kırmızı renkte yanıp söner. 4 bayt aşağıdaki gibidir:255 (sabit kodlanmış "başlangıç" baytı),,, 200 (sabit kodlanmış "bitiş" baytı)Verilerin güvenilir bir şekilde alınmasını sağlamak için program döngüleri arasına yeterli gecikme koyduğunuzdan emin olun. PC kodunuzu çok hızlı çalıştırırsanız, bağlantı noktasını doldurur ve Arduino, baytları düşürmeye veya hatta yanlış okumaya başlayabilir. Bilgi düşürmese bile Arduino'nun seri port arabelleğini taşabilir. Vex motorlar için Arduino Servo kütüphanesini kullandım. Vex motorları sadece sürekli dönüş motorları olduğundan, servoların kullandığı sinyallemenin aynısını kullanırlar. Ancak 90 derece merkez nokta olmak yerine motorun dönmediği durma noktasıdır. "Açıyı" düşürmek motorun bir yönde dönmesine neden olurken, açının yükseltilmesi diğer yönde dönmesine neden olur. Merkez noktadan uzaklaştıkça motor daha hızlı döner. Motorlara 180 dereceden daha büyük değerler gönderirseniz hiçbir şeyi bozmayacak olsa da, değerleri 0 ile 180 derece arasında (ki bu durumda hız artışlarıdır) sınırlamanızı tavsiye ederim. Daha fazla kontrol ve daha az kontrol dışı robot sürüşü istediğim için, programıma her iki yönde de hızın 30 "derecenin" üzerine çıkmasına izin vermeyen bir yazılım "hız sınırı" ekledim (aralık 90 +/- 30'dur). Hızlı gitmek istiyorsanız bilgisayarın anında sınırı kaldırabilmesi için hız sınırını değiştiren bir seri bağlantı noktası komutu eklemeyi planlıyorum (küçük odalarda test ediyorum, bu yüzden hızlanmasını istemiyorum ve özellikle üzerinde bir netbook varken duvara çarpın). Daha fazla bilgi için, bu Talimatın sonundaki ekli kodu indirin.

Adım 4: Bilinmeyen Dünyaları Uzaktan Keşfetmek İçin Bir Netbook Ekleyin

Bilinmeyen Dünyaları Uzaktan Keşfetmek için Netbook Ekleyin
Bilinmeyen Dünyaları Uzaktan Keşfetmek için Netbook Ekleyin
Bilinmeyen Dünyaları Uzaktan Keşfetmek için Netbook Ekleyin
Bilinmeyen Dünyaları Uzaktan Keşfetmek için Netbook Ekleyin

Arduino robotunuzdaki eksiksiz bir PC ile, robotunuzu tek bir alanla sınırlamak için herhangi bir kablo olmadan WiFi'nizin ulaşabileceği kadar uzağa sürebilirsiniz. Bu iş için iyi bir aday bir netbook'tur, çünkü netbook'lar küçük, hafiftir, yerleşik pile sahiptir, WiFi'ye sahiptir ve hatta çoğu, robotun görüntüsünü güvenli bir yere geri göndermek için kullanılabilecek yerleşik web kameralarına sahiptir. kontrol edebilir. Ayrıca, netbook'unuz mobil geniş bant hizmetiyle donatılmışsa, menziliniz neredeyse sınırsızdır. Yeterli pille, robotunuzu yerel pizzacıya götürebilir ve web kamerası üzerinden sipariş verebilirsiniz (önerilmez, robotlara pizza yerlerinde genellikle izin verilmez, insanlar olsalar bile muhtemelen robotu çalmaya çalışacaklar ve belki pizza bile). Ayrıca ofis koltuğunuzun rahatlığında bodrumunuzun karanlık derinliklerini keşfetmek için iyi bir yol olabilir, ancak bu durumda bazı farlar eklemek çok yardımcı olabilir.

Bunu çalıştırmanın birçok yolu var, birçoğu muhtemelen benimkinden çok daha kolay, ancak İşleme veya komut dosyası tabanlı dillere aşina değilim, bu yüzden baz istasyonum (aka) arasında kablosuz bir kontrol bağlantısı oluşturmak için Linux ve C++ kullanmayı seçtim. eski ThinkPad) ve Arduino sürücü tabanına bağlı yeni Lenovo IdeaPad netbook'um. Her iki PC de Ubuntu çalıştırıyor. ThinkPad'im okulumun LAN'ına bağlı ve IdeaPad'im de okulun LAN'ına bağlı olan WiFi erişim noktama bağlı (herkes onu kullandığı için okul WiFi'sinden güvenilir bir video akışı alamadım, bu yüzden iyi bir bağlantı sağlamak için kendi yönlendiricimi kurun). Herhangi bir hata denetimi veya zaman aşımı uygulamadığım için iyi bir bağlantı özellikle benim durumumda önemlidir. Ağ bağlantısı aniden kesilirse, robot bir şeye çarpana kadar veya ben koşarak onu durdurana kadar devam eder. Bu, hem motorları yavaşlatarak hem de bir yazılım hız limiti uygulayarak aktarma organlarını yavaşlatma kararımın arkasındaki ana faktördür.

Adım 5: Video Beslemesi Alın

Robotik gezgininiz kablosuz olarak hareket edebildikten sonra, muhtemelen robotunuzun nerede olduğunu anlayabilmek için netbook'tan bir video beslemesi almak isteyeceksiniz. Ubuntu kullanıyorsanız (veya kullanmasanız bile!) Akış için VLC Media Player kullanmanızı öneririm. Yüklemediyseniz, gerçekten çok şey kaçırıyorsunuz, bu nedenle "sudo apt-get install vlc" komutunu kullanarak yükleyin, Ubuntu Yazılım Merkezi'nde (yalnızca 9.10) VLC'ye göz atın veya yükleyiciyi videolan'dan indirin. org Windows kullanıyorsanız. Her iki bilgisayarda da çalışan VLC'ye ihtiyacınız olacak. VLC, bir ağdaki akışları oynatmanın yanı sıra akış yapabilir. Netbook'ta (robot PC) önce, Open Capture Device'a tıklayarak ve Video for Linux 2'yi deneyerek web kameranızın (yerleşik veya USB bağlantılı) çalıştığından emin olun (bazı eski cihazların yeni 2 sürümü yerine Video for Linux'a ihtiyacı olabilir). Netbook ekranında kameranın görüntüsünü görmelisiniz. Akışı gerçekleştirmek için Dosya menüsünden Akış'ı seçin ve ardından görüntülenen pencerenin üst kısmındaki Aygıtı Yakala sekmesini seçin. Ubuntu'nun (ve diğer birçok Linux dağıtımının), ekranınız için çok büyük olan pencereleri tıklayıp sürüklemek için Alt tuşunu basılı tutmanıza izin verdiğini unutmayın (özellikle eski netbook'larda kullanışlıdır, ancak IdeaPad'im bile görünürde bir neden olmadan garip bir 1024x576 çözünürlüğe sahip olsa da). Gecikmeyi azaltmak için "Daha Fazla Seçenek Göster"e tıklayın ve önbelleğe alma değerini düşürün. Düşürebileceğiniz miktar bazen cihaza bağlıdır, çok düşürürseniz kararsız hale gelir. 300ms'de hafif bir gecikme yaşayabilirsiniz ama çok da kötü değil.

Ardından, sonraki menüye gitmek için Akış'ı tıklayın. İleri'ye tıklayın, ardından HTTP'yi seçip yeni bir hedef olarak ekleyin. Şimdi akışı küçültmek için Transcoding'i ayarlayın. 60kb/s ve 8fps'de M-JPEG kullanan özel bir profil oluşturdum. Bunun nedeni, MPEG veya Theora gibi gelişmiş bir kod çözücünün kullanılması, netbook'un Atom işlemcisinde çok büyük CPU zamanı tüketmesi ve bu, video beslemenizin görünürde bir neden olmadan durmasına yol açabilmesidir. MJPEG, düşük bit hızlarında kullanımı kolay basit bir kodlayıcıdır. Akışınızı başlattıktan sonra, diğer PC'nizde VLC'yi açın, bir ağ akışı açın, HTTP'yi seçin ve ardından netbook'unuzun IP adresini (bağlanma şeklinize bağlı olarak yerel veya İnternet) ve ardından ":8080" yazın. Bağlantı noktasını garip bir nedenle belirtmeniz gerekiyor, aksi takdirde size hata veriyor. İyi bir bağlantınız varsa, diğer PC'nizde web kameranızın beslemesini görmelisiniz, ancak biraz (yaklaşık bir saniye) gecikme olacaktır. Bu gecikmenin tam olarak neden oluştuğunu bilmiyorum ama bundan nasıl kurtulacağımı anlayamıyorum. Şimdi kontrol uygulamasını açın ve netbook robotunuzu sürmeye başlayın. Sürüş sırasında gecikmenin nasıl çalıştığına dair bir fikir edinin, böylece hiçbir şeye çarpmazsınız. Çalışırsa, netbook robotunuz bitmiştir.

Önerilen: