İçindekiler:

[WIP] Myo Kol Bandı Tarafından Kontrol Edilen Bir Drawbot Oluşturma: 11 Adım
[WIP] Myo Kol Bandı Tarafından Kontrol Edilen Bir Drawbot Oluşturma: 11 Adım

Video: [WIP] Myo Kol Bandı Tarafından Kontrol Edilen Bir Drawbot Oluşturma: 11 Adım

Video: [WIP] Myo Kol Bandı Tarafından Kontrol Edilen Bir Drawbot Oluşturma: 11 Adım
Video: Sérigraphie - Spide la Pub à Perpignan dans les Pyrénées Orientales, 66 2024, Temmuz
Anonim
[WIP] Myo Kol Bandı Tarafından Kontrol Edilen Bir Drawbot Oluşturma
[WIP] Myo Kol Bandı Tarafından Kontrol Edilen Bir Drawbot Oluşturma

Hepinize merhaba!

Birkaç ay önce, onu kontrol etmek için yalnızca bir Myo bandı kullanan açık çerçeveli bir çekme robotu yapma fikrini denemeye karar verdik. Projeye ilk başladığımızda, bunun birkaç farklı aşamaya bölünmesi gerektiğini biliyorduk. İlk ana aşamamız, beraberlik botumuz için açık çerçeveli bir tasarımın etrafını sarmaya çalışmaktı. Bu standart olmayan bir kurulum ve bu tasarımın faydalarının ne olduğunu görmek istedik.

İkincisi, bu prototipi inşa etmenin sadece kendimiz için faydalı olacağını biliyorduk. Tasarımımız ve planımız, son çerçevemizi metale taşımak ve bir arduino kullanarak konumumuzu Myo bandına yerleştirilmiş ivmeölçer ve jiroskoptan almaktı. Bu bilgi daha sonra motorlara gönderilecek ve kullanıcının hareketini kopyalayacaktır. Bunun ikinci aşamamızı üç ana konuya ayıracağını biliyorduk:

  1. Arduino aracılığıyla Myo'dan motorlara programlama
  2. verilerimizi harekete dönüştürmek için elektrik tasarımı
  3. Hareketimizi kolaylaştıracak makul boyutta bir çerçeve oluşturmak için mekanik tasarım

Ekibimizdeki her üye, tasarım sürecimizin benzersiz bir parçası ile kendini en rahat hissetti, bu nedenle çalışmalarımızı her bir kişi arasında bölmeye karar verdik. Ayrıca, daha küresel bir görünüm yerine günlük düşüncemizi takip etmek için tüm tasarım sürecimiz boyunca bir blog tuttuk.

Adım 1: Ne Yapmayı Planladık

Image
Image

Amacımız bu iki ürünü daha önce hiç kullanmadığımız şekilde bir araya getirmekti. Myo kol bandımız ile Evil Mad Scientist'in AxiDraw'ından ilham alan bir tasarımın kendi versiyonumuz arasında canlı bir geçiş yapmak için yola çıktık.

Adım 2: Prototip İçerik Listesi

2 2 x 4 ahşap levhalar 1 Kayış veya zincir ölçüsü >= 65” 4 Ahşap çiviler 3 Kayış veya zincire uyan dişli dişliler 4 3 x 8 vex delikli plakalar 30 ⅜” Kauçuk ara parçalar 8 1” çapında pullar 1 1” çapında ahşap dübel 1' uzunluğunda 8 Vex vida 1”8 ½” Vex vidalar 8 2” Vex vidalar 8 ¼” Lastik ara parçalar 48 Vex somunlar 1 Küçük fermuar

3. Adım: [Prototip] Kollarımızın ve Arabanın İç Kısmının Ağaç İşlenmesi

[Prototip] Kollarımızın ve Arabamızın İç Mekanizması Ağaç İşleme
[Prototip] Kollarımızın ve Arabamızın İç Mekanizması Ağaç İşleme

İki adet 2x4 aldık ve eşit uzunluklarda (33 ¼”) kestik

Bir masa testeresi kullanarak, tahtaların orta kısmında ¼” derinliğinde ve ⅛” genişliğindeki dar kısmı boyunca bir çentik açtık.

Dübeli 4 2” parçaya kesin ve bir matkap presi kullanarak dübelin ortasına yaklaşık ¼” çapında bir delik açın.

Adım 4: [Prototip] Arabamızı Yapmak

[Prototip] Arabamızı Yapmak
[Prototip] Arabamızı Yapmak
[Prototip] Arabamızı Yapmak
[Prototip] Arabamızı Yapmak
[Prototip] Arabamızı Yapmak
[Prototip] Arabamızı Yapmak

İdeal olarak, iki adet 7x7 adet vex delikli çelik kullanırdık, ancak elimizdeki tek şey 2x7 şeritlerdi, bu yüzden onları "X" konfigürasyonunda birbirine cıvataladık.

⅜” lastik ara parçalardan 5 tanesini istifleyin ve vex plakaların köşelerini birbirine sabitleyin

Tahta dübelleri şekil 1'de gösterildiği gibi gevşek bir şekilde sabitleyin, böylece aralarında yaklaşık 2 inç boşluk kalacak şekilde serbestçe dönecekler, bu noktada dişlilerin nereye yerleştirilmesi gerektiğini görmek için resmi kullanın bu noktada pullar kullandık ancak daha sonra küçük plastik vex dişlilerin daha iyi çalıştığını gördük.

½ “vex vidalar, ¼” lastik ara parçalar ve 1” çaplı rondelalar kullanarak rondelaları şekil 1'de gösterildiği gibi yüksek bir konumda sabitleyin (doğru rondelaları bulamadığımız için yeşil plastik dişliler kullandık) rondelaların sağlam olduğundan emin olun. kolayca döndürmek ve tahtanın çentiklerine sığdırmak için.

Adım 5: [Prototip] Hepsini Bir Araya Getirmek

[Prototip] Hepsini Bir Araya Getirmek
[Prototip] Hepsini Bir Araya Getirmek
[Prototip] Hepsini Bir Araya Getirmek
[Prototip] Hepsini Bir Araya Getirmek
[Prototip] Hepsini Bir Araya Getirmek
[Prototip] Hepsini Bir Araya Getirmek
[Prototip] Hepsini Bir Araya Getirmek
[Prototip] Hepsini Bir Araya Getirmek

Bir yüzeye bir tahta yerleştirin ve rondelaların arabayı tahtanın üzerinde tutması için arabayı ortasına kaydırın ve tahtanın her iki tarafında serbestçe dönmeleri için dişlileri aşağı indirin. Ortalandığından emin olarak ikinci panonun bir ucuna bir dişli çivi çakın ve ilk panoya dik olarak taşıyıcının üzerine kaydırın.

Şimdi kayış sistemden gösterildiği gibi geçirilmelidir, kayışın dış kısmındaki kavelaların nasıl olduğuna ve şasinin ortasında kayışı hareket halindeyken engelleyebilecek hiçbir şeyin olmadığına dikkat edin.

Şimdi kayışın tahtanın dişli olmayan tarafına bağlanması gerekiyor. Kendimizi sabitlemek için fazladan bir çivi ve fermuar kullandık. Ancak kemer o noktaya sabitlendiği sürece kullanılan yöntemin bir önemi yoktur.

Adım 6: [Prototip] Tamamlandı ve Taşınıyor

Image
Image

Olması gereken bu, kemeri farklı kombinasyonlarda çekin ve koldaki farklı etkilerini görün!

Adım 7: Modelimizi Biten Tasarımımıza Çevirmek

Modelimizi Biten Tasarımımıza Çevirmek
Modelimizi Biten Tasarımımıza Çevirmek
Modelimizi Biten Tasarımımıza Çevirmek
Modelimizi Biten Tasarımımıza Çevirmek

Prototipimizi tamamladığımızda çok mutlu olduk. Montajdan önce hiçbirimiz sistemin nasıl çalıştığından emin değildik. Ancak, parçalarımız bir araya geldiğinde neleri beğendiğimizi ve nihai tasarımı oluştururken nasıl geliştireceğimizi çabucak keşfettik. Çözümlenecek sistemle ilgili başlıca şikayetlerimiz şunlardı:

  1. Ölçek

    1. Prototipimiz devasa ve hantaldı, bu da onu kollarımızın kenarında devrilmeye meyilli hale getirdi.
    2. Taşıyıcı gereğinden çok daha büyüktü ve çok fazla boş alan vardı
    3. Kemerimiz (vex tank sırtı) gerekenden çok daha büyüktü, bu da kollar arasında fazla boşluk oluşmasına neden oldu.
  2. Sürtünme

    1. Vex basamaklarımız her noktada ahşap dübel merdanelerin üzerinden kolay geçmedi.
    2. Ahşap üzerine plastik, çoğu durumda arabayı hareket etmeye isteksiz hale getirdi
  3. motorize

    Sistemi güçlü hale getirmemiz gerekiyordu

Bunları göz önünde bulundurarak, nihai tasarım için planlarımızı çizdik. Çekme robotunun bir arduino üzerinden Myo ile kontrol edilmesini istedik ve çerçeveyi alüminyum ve daha küçük yapmak istedik.

Bunu yapmak için orijinal prototipimizin bir yüzdesini aldık ve o boyuttan çalışmaya başladık. Korumalı bir yatağın geçmesi için yeterince geniş kanallara sahip olacak şekilde işlenecek sac metal kullanarak, daha yüksek kullanım toleransına sahip hafif ama sağlam bir tasarıma sahip olacağız.

Prototipimiz ayrıca sadece birkaç dakika içinde motor dönüşünün çeki robotumuzun başını nasıl etkilediğini belirlememize izin verdi. Bu, kontrol tasarımımızın beklediğimizden daha basit olacağını anlamamıza yol açtı. Daha yakından inceledikten sonra, motorun hareketinin ilave olduğunu anladık! Bu, her motorun hareketimiz üzerinde bağımsız bir istenen etkiye sahip olduğu, ancak onları bir araya getirdiğimizde iptal etmeye başladıkları anlamına gelir.

Örneğin, bir koordinat düzlemi gibi düşünülürse, negatif x ucundaki motor, çekmecemizi her zaman ikinci ve dördüncü çeyreğe çekme eğiliminde olacaktır. Tersine, pozitif x uç üzerinde duran motor, çekmeceyi her zaman birinci ve üçüncü çeyreğe yönlendirecektir. Motorlarımızın hareketini birleştirirsek, bu çatışmayı yönlendirme kısımlarını iptal edecek ve uyumlu kısımları çoğaltacaktır.

Adım 8: Kodlama

Birkaç yıl önce C'de oldukça yoğun bir şekilde çalışırken, lua veya C++ ile hiçbir deneyimim yoktu ve bu, belgelere bakmak için kayda değer miktarda zaman harcamam gerektiği anlamına geliyordu. Yapmaya çalışacağım genel görevin, kullanıcının konumunu zaman aralıklarında almak ve ardından motorlara aktarmak olduğunu biliyordum. İhtiyacım olan kısımları daha iyi sindirmek için görevi kendim için bölmeye karar verdim.

1. Myo'dan Veri Alın (lua)

Myo'dan bilgi toplamanın bir yolunu bulmam gerektiğini biliyordum. Bu, yaklaşmak istediğim zorluğun ilk kısmıydı. Bunu yapmak için, çizime başlamadan önce kullanıcının tuval boyutunu kalibre etmesini istedim. Bu, çalışmak için bir sınıra sahip olmamı sağlar. Daha sonra, veri noktalarımın geçmesi için maksimum tuvalin bir yüzdesini alarak programı farklı kullanıcılar arasında normalleştirebilirim. Her yarım saniyede bir getOrientation kontrolü yapacak komut dosyasına sahip bir olaya sahip olmaya karar verdim, çünkü bu, kontrollerin asla tahmin etmeniz gereken vahşi bir sıçrama yapmamasını sağlar (örneğin, kullanıcı çılgınca geriye doğru sallanıyorsa ve ileri).

Bu, çarptığım ilk barikatı oluşturdu. Çok büyük bir lua sınırlaması keşfettim ve senaryoya devam etmeden önce beklememe izin vermiyordu. Bu eylemi gerçekleştirmenin tek yolu, CPU'yu duraklatmak (bu, onu küresel olarak duraklatacak, hatta sistem saatini tutacak) veya işletim sistemine özel komutları kullanmaktı. Örnek kodumda, yaptığım orijinal işletim sistemi kontrolünde bıraktım (yorum yaptım). Bu, lua'nın belgelerinde büyük miktarda araştırma yaptıktan sonraydı ve sistem yolu biçimlendirmesini kontrol ederek yapıldı. Bu, daha önce yayınlanmış projelerin belgelerine bakmam gerektiğine karar verdiğim zamandı. Ne kadar zaman kaybettiğimi hemen anladım ve hemen platform değişkenine yönlendirildim. Bununla birlikte, önceki çözümümü bir araya getirmem için harcadığım günlerin aksine, işletim sistemine özel bekleme komutlarını neredeyse anında uygulayabildim.

Elektrik yönü üzerinde çalışma bu tasarım zamanlarında başladı ve ben kodun bu yönü üzerinde çalışmayı askıya aldım. Amaç, motorlarımızın arduino ile nasıl arayüz oluşturduğunu öğrenmek.

2. Arduino Çevresinde Çalışmak (C++)

Breadboard'umuzla çalışmak giderek daha karmaşık hale geldikçe, arduino'nun çoklu iş parçacığını kullanamadığını öğrendim. Bu, orijinal kod tasarımımda büyük bir anahtardı ve denetleyicimizle sunulan sınırlamalar hakkında daha fazla okuduktan sonra, arduino'nun ikisi arasında nasıl geçiş yapacağını programlamam gerektiğini öğrendim. Son teslim tarihimiz yaklaştıkça çabalarımın odak noktası bu oldu. Orijinal komut dosyamın büyük bölümlerini, motor denetleyicisinin dosyayı okumasıyla eşzamanlı olarak bir dosyaya veri yazmak üzere tasarlandıkları için ıskartaya çıkarmak zorunda kaldım. Bu, kullanıcı çekmecemizin önünde olsa bile projeyi mahvetmeyeceğinden emin olmak için bir kuyruğa alma işlevine izin vermek içindi.

Daha önce olduğu gibi uygulanmadıysa, kuyruğa alma işlevinin kaydedilmesi gerektiğine karar verdim. Bunu yapmak için bir dizi vektörü oluşturdum. Bu, sadece önceki tasarımımın ruhunu nispeten sağlam tutmama izin vermekle kalmadı, aynı zamanda okuma veya yazma için dosyadaki yerimi takip etmem gerekmediği anlamına da geliyordu. Bunun yerine, şimdi tek yapmam gereken, kullanıcı hareket ediyorsa vektörüme yeni bir değer eklemekti (ön test, son kaydedilen konumdan hem x hem de y'deki tuval boyutu farkının %1'inden azdı, veri kaydı yapılmadı). Daha sonra vektörümdeki en eski değeri alabilir ve bir çırpıda motor kontrolüne gönderebilir, dosyamıza yazabilir ve ardından vektörümden çıkarabilirim. Bu, sürekli bir IO akışının çalışmasıyla ilgili endişelerimin çoğunu temizledi.

Adım 9: Elektrik

Image
Image
Elektriksel
Elektriksel

Geçmişte bir elektronik dersi almış ve arduinolarla adil bir miktar çalışmış olsam da. Arduino'nun bir dış kaynaktan (myo) bilgi almasını sağlamak için asla derine dalmadım, yalnızca arduino aracılığıyla bilgi çıktısı alma deneyimim var. Ancak, çekme robotumuzdaki motorları kablolamaya ve myo koduyla çalışabilmeleri için kod üzerinde çalışmaya başladım.

Kullandığım malzemeler:

2 x Step motorlar

1 x Ekmek Tahtası

1 x Arduino (Uno)

2 x Sürücü IC L293DE

40 x Atlama teli

2 x Hayranlar

1. Step Motorları ve Fanı Breadboard'a Bağlama

Devre şemasını takip ederek, breadboard üzerindeki sürücüye bir adet step motor bağlayabiliriz. Ardından, aynı şemayı takip ederek ikinci sürücü ve motora uygulayın, ancak atlama kablolarının arduinodaki farklı bir pin setine takılması gerekecektir (birinci motor diğer 4'ünün alanını kapladığı için).

Uyarı/İpucu:

Sürücüler çok küçük ve pimler birbirine çok yakın. Kabloların karışmaması için iki sürücü arasında boşluk bırakmak akıllıca olacaktır.

Sonraki, fanları kablolamak. Bu oldukça basit, sahip olduğum fanlar, pozitif ve zemine sahip temel bilgisayar işlemci fanlarıydı. Bu ikisini devre tahtasındaki ilgili +/- pinlerine takın ve her birini her bir sürücüye doğru eğin. (Adım motorların uzun bir süre boyunca bilgi ve komut patlamaları aldığından, sürücülerin aşırı ısınmaya ve kokuya eğilimli olduğunu gördük. Soğutmak için bir fan eklemek bu sorunu çözdü).

2. Arduino Kodu

Bu kolay kısım!

Arduino IDE'yi açın, “Dosya” sekmesine gidin, ardından daha da aşağıya inecek ve size bir “adım” sekmesi gösterecek olan “örnek” sekmesine bırakın Ardından “Stepper_OneStepAtATime” ı açmak istiyorsunuz.

Bu, arduino/motor kablolarına neredeyse tak ve çalıştır olan bir örnek kodu önceden yükleyecektir. Aşağıda göstereceğim iki motoru çalıştıracağımız için küçük ayarlamalar yapmamız gerekecek. Arduino IDE varsayılan olarak 8-11 pinlerine ayarlandığından, hangi pinleri kullanmaya karar verdiğinize bağlı olarak küçük ayarlamalar yapmanız gerekebilir.

İki motoru “senkron” olarak hareket ettirmek için kullandığım kod aşağıdadır:

//#Dahil etmek

const int stepPerRevolution = 200;

Stepper myStepper1(stepsPerRevolution, 9, 10, 11, 12);

Stepper myStepper2(stepsPerRevolution, 4, 5, 6, 7);

int stepCount = 0;

void setup() { // seri bağlantı noktasını başlat: Serial.begin(9600); }

boşluk döngüsü () {

myStepper1.step(1);

Serial.print("adımlar:");

Serial.println(stepCount);

stepCount++;

gecikme(0.5);

myStepper2.step(1); gecikme(0.5); }

3. Olası Sorunlar

Bu işlem sırasında karşılaştığım sorunlar doğru kod örneğini kullanmamak, hatalı bir atlama kablosu kullanmak, yanlış sürücü IC'sini kullanmaktı.

Kullanmakta olduğunuz sürücünüzün bir motoru kontrol edebildiğinden emin olun

Seri numarasını kontrol edin ve özelliklerini kontrol edin

Motorlarımın garip bir şekilde dönmesine neden olan ölü bir atlama teli sorunuyla karşılaştım

Her kabloyu kontrol etmek için bir multimetre kullanmak zorunda kaldım

Ve her zaman kodunuzu “;” sonunu kaçırmak gibi küçük hatalar için iki kez kontrol edin. emretmek

Adım 10: Mekanik

Mekanik
Mekanik
Mekanik
Mekanik
Mekanik
Mekanik
Mekanik
Mekanik

1. Malzeme

Kolların tam üretim modeli için güçlü ancak hafif malzemeden yapılması önerilir, alüminyumun mükemmel bir uyum olduğunu hissettik.

9.125" x 17.5" boyutunda kesilmiş 032 gauge alüminyum levhalar kullandık ve önceki adımda gösterilen çizimdeki deseni izledik.

2. Üretim

Kenar kenarını (mavi makine) kullanarak, parça kırılıp katlandığında iki kenar birbirine kenetlenerek tek bir tam parça oluşturacak şekilde zıt yönlere bakan kenarlar ekledik.

Büyük virajlar için yüksek hassasiyeti nedeniyle tenisçi kullandık.

Şimdi daha küçük virajlar için, daha küçük ayaklı bir makine kullanmak isteyeceksiniz, işte burada roto-kalıp gibi bir makine devreye giriyor. Daha küçük ayağı nedeniyle, ne yazık ki daha küçük kırılmaların yapılmasına izin veriyor., elimizdeki roto-kalıp hala rayımız için çok büyüktü ve deforme oldu.

**Alternatif olarak, uygun ekipmana veya araçlara erişiminiz yoksa, bir ikame yapılabilir.**

Bizim durumumuzda, alüminyum güneş paneli raylarından kollarımızı bir plazma kesici kullanarak kestik ve uçlarını pürüzsüz hale getirdikten sonra çift taraflı bir ray sistemi yapmak için arka arkaya cıvataladık. İdeal olarak, rayları birbirine kaynaklamak isterdik, ancak bir kaynak istasyonuna erişimimiz olmadan bunun yerine rayları birbirine kenetledik ve delinerek birbirine cıvataladık. Ancak bu yol izlenirse, parçanın mümkün olduğunca az esnemesini sağlamak için bir kontra somun ve rondela kullanmaya özellikle dikkat edilmelidir.

3. Kemer

Kayışlar için kurtarabildiğimiz bazı eski 3D yazıcı kayışlarını kullandık.

Kayışlar başlangıçta yeterince uzun değildi, bu yüzden bir miktar ısıyla daralan makaron kullanarak, yeterince uzun olacak bir tane yapmak için iki parçayı birleştirdik.

Yeşil dişliler ve ahşap dübeller, kayışın yerinden kaymasını önlemek için kullanılan ekstra geniş pullara sahip disk yatakları ile değiştirildi.

4. Taşıma

Ve son olarak, taşıyıcı, ilgili vidaların ve rondelaların gitmesi gereken yerlerde matkapla preslenmiş deliklerle birlikte, 5" x 5" boyutunda 032 alüminyum levhadan yapılmıştır. Mesafe, rayınızın ne kadar geniş olduğuna ve yıkayıcılarınızda ne kadar boşluk olduğuna bağlı olarak değişecektir.

Adım 11: Yansımalar

Ne yazık ki, projemizin her tarafı zamanın büyük barikatıyla karşılaştı ve tasarımımızı hedeflenen tarihe kadar tamamlayamadık. Ekibimizin her bir üyesi, tasarımımızın diğer tüm yönlerinde en azından bir dereceye kadar işbirliği yaptı ve bu da bazı öğrenme eğrisi zaman havuzlarına yol açtı. Bu, mümkün olduğu kadar az dış kaynağa sahip bir ürün tasarlama isteğiyle birleştiğinde (hepimiz kendi parçalarımızı sıfırdan oluşturmak istedik), büyük miktarda yeniden icat edilen tekerleklere yol açtı.

Projede çalışan herkes projenin diğer yönleri hakkında daha fazla şey öğrendi. Yazılımın belirli bir eylemi gerçekleştirmesini sağlamak başka, yazılımın donanımla birlikte çalışmasını sağlamak başka bir şeydir. Bu projenin kodlama yönü üzerinde çalışan herkesin proje kodlayıcımız kadar aşina olmasının önemli olduğunu söyleyebilirim.

Genel olarak, tam olarak istediğimizi elde edemedik. Ancak doğru yolda olduğumuzu hissediyorum ve hepimiz gelecekteki projelere uygulayabileceğimiz yeni kavramlar keşfettik ve öğrendik.

Önerilen: