Mündəricat:

[WIP] Myo qol bandı tərəfindən idarə olunan bir Drawbot yaratmaq: 11 addım
[WIP] Myo qol bandı tərəfindən idarə olunan bir Drawbot yaratmaq: 11 addım

Video: [WIP] Myo qol bandı tərəfindən idarə olunan bir Drawbot yaratmaq: 11 addım

Video: [WIP] Myo qol bandı tərəfindən idarə olunan bir Drawbot yaratmaq: 11 addım
Video: Metal Gear Solid kimi gizli oyun. 👥 - Terminal GamePlay 🎮📱 🇦🇿 2024, Iyul
Anonim
[WIP] Myo qol bandı tərəfindən idarə olunan bir Drawbot yaratmaq
[WIP] Myo qol bandı tərəfindən idarə olunan bir Drawbot yaratmaq

Hamıya salam!

Bir neçə ay əvvəl, onu idarə etmək üçün yalnız bir Myo bandından istifadə edən açıq çərçivəli bir çəkmə qurmaq fikri ilə məşğul olmağa qərar verdik. Layihəyə ilk başlayanda bilirdik ki, bir neçə fərqli mərhələyə bölünməlidir. İlk əsas mərhələmiz, çəkmə botumuz üçün başımızı açıq çərçivə dizaynına sarmağa çalışmaq idi. Bu standart olmayan bir quruluşdur və bu dizaynın faydalarının nə olduğunu görmək istədik.

İkincisi, bu prototipin qurulmasının yalnız özümüz üçün faydalı olacağını bilirdik. Dizaynımız və planımız, son çərçivəmizi metal halına gətirmək və bir arduino istifadə edərək, mövqeyimizi Myo bandına qurulmuş akselerometr və giroskopdan almaq idi. Bu məlumatlar daha sonra mühərriklərə göndəriləcək və istifadəçinin hərəkətini təkrarlayacaq. Bunun ikinci mərhələmizin üç əsas aspektə ayrılacağını bilirdik:

  1. Myodan motorlara, Arduino vasitəsilə proqramlaşdırma
  2. məlumatlarımızı hərəkətə gətirmək üçün elektrik dizaynı
  3. Hərəkətimizi asanlaşdıracaq ağlabatan ölçüdə bir çərçivə yaratmaq üçün mexaniki dizayn

Komandamızdakı hər bir üzv, dizayn prosesimizin özünəməxsus bir hissəsi ilə özünü ən rahat hiss edirdi, buna görə də hər bir şəxs arasında işimizi bölmək qərarına gəldik. Daha qlobal görünüşün əksinə olaraq, gün ərzində düşüncə tərzimizi izləmək üçün bütün dizayn prosesimiz ərzində bir blog saxladıq.

Addım 1: Etməyi planlaşdırdığımız şey

Image
Image

Məqsədimiz bu iki məhsulu əvvəllər istifadə etmədiyimiz şəkildə birləşdirmək idi. Myo qolbağımızla Evil Mad Scientist -in AxiDraw -dan ilhamlanan bir dizaynın öz versiyası arasında canlı bir relay etmək üçün yola çıxdıq.

Addım 2: Prototip Tərkibi Siyahısı

2 2 x 4 taxta lövhə 1 Kəmər və ya zəncir ölçüsü> = 65 "4 Taxta dırnaqlar 3 Kəmərə və ya zəncirə uyğun dişli dişlilər 4 3 x 8 vexli delikli lövhələr 30 ⅜" Kauçuk boşluqlar 8 1 "diametrli yuyucular 1 1" diametrli taxta dübel 1 'uzun 8 Vex vintlər 1”8 ½” Vex vintlər 8 2”Vex vintlər 8 ¼” Kauçuk ayırıcılar 48 Vex qozlar 1 Kiçik fermuar bağlama

Addım 3: [Prototip] Qollarımızı və Aravamızın İçərisində Ağac İşlənməsi

[Prototip] Ağac İşləmə Qollarımız və Aravamızın Daxili
[Prototip] Ağac İşləmə Qollarımız və Aravamızın Daxili

İki ədəd 2x4 tutduq və onları eyni uzunluqda kəsdik (33 ¼ )

Bir masa mişarından istifadə edərək lövhələrin dar hissəsini deep "dərin və ⅛" ortasında bir çentik düzəldirik.

Dübeli 4 2 "hissəyə kəsin və bir qazma maşını istifadə edərək, təxminən 2" diametrli dübelin ortasında bir delik açın.

Addım 4: [Prototip] Daşıyıcımızı Hazırlayırıq

[Prototip] Yük arabamızı düzəltmək
[Prototip] Yük arabamızı düzəltmək
[Prototip] Yük arabamızı düzəltmək
[Prototip] Yük arabamızı düzəltmək
[Prototip] Yük arabamızı düzəltmək
[Prototip] Yük arabamızı düzəltmək

İdeal olaraq iki ədəd 7x7 ədəd perxli poladdan istifadə edərdik, ancaq əlimizdə olan yalnız 2x7 zolaqlar idi, buna görə də onları "X" konfiqurasiyasında birləşdirdik.

5 düymlük rezin boşluqları yığın və vex lövhələrinin künclərini bir -birinə bərkidin

Şəkil 1 -də göstərildiyi kimi taxta dübelləri sərbəst şəkildə bərkidin ki, aralarında təxminən 2 düym boşluq olsun və sərbəst dönsünlər, yuyuculardan istifadə edərək dişlilərin harada yerləşdirilməli olduğunu görmək üçün şəkildən istifadə edin, lakin sonradan kiçik plastik vex dişlilərin daha yaxşı işlədiyini gördük..

Ve “vex vintlər, ¼” rezin aralıqlar və 1”diametrli yuyuculardan istifadə edərək, yuyucular, şəkil 1 -də göstərildiyi kimi yüksək mövqedə sabitlənir (düzgün yuyucular tapa bilmədiyimiz üçün yaşıl plastik dişlilərdən istifadə etmişik) asanlıqla fırlanmaq və lövhənin çentiklərinə sığmaq.

Addım 5: [Prototip] Hamısını bir araya gətirmək

[Prototip] Hamısını bir araya gətirmək
[Prototip] Hamısını bir araya gətirmək
[Prototip] Hamısını bir araya gətirmək
[Prototip] Hamısını bir araya gətirmək
[Prototip] Hamısını bir araya gətirmək
[Prototip] Hamısını bir araya gətirmək
[Prototip] Hər şeyi bir araya gətirmək
[Prototip] Hər şeyi bir araya gətirmək

Bir səthə bir lövhə qoyun və arabanı ortasına sürüşdürün ki, yuyucular arabanı lövhənin üstündə tutsunlar və lövhənin hər iki tərəfində dişliləri sərbəst dönsünlər. İkinci lövhənin bir ucuna mərkəzləşdirildiyindən əmin olun və birinci lövhəyə dik olaraq arabaya sürüşdürün.

İndi kəmər, göstərildiyi kimi sistemin içindən keçməlidir, kəmərin kənarındakı dübellərin necə olduğuna və şassinin ortasında kəməri hərəkət edərkən maneə törədə biləcək heç bir şey olmadığına diqqət yetirin.

İndi kəməri dişli olmayan lövhənin kənarına bağlamaq lazımdır. Özümüzü bağlamaq üçün əlavə bir dırnaq və fermuar istifadə etdik. Ancaq kəmər o yerə sabitləndiyi müddətdə istifadə edilən metodun əhəmiyyəti yoxdur

Addım 6: [Prototip] Tamamlandı və Daşınır

Image
Image

Belə olmalıdır, kəməri fərqli kombinasiyalarda çəkin və qolundakı fərqli təsirləri görün!

Addım 7: Modelimizi Bitmiş Dizaynımıza Çevirin

Modelimizi Bitmiş Dizaynımıza Çevirmək
Modelimizi Bitmiş Dizaynımıza Çevirmək
Modelimizi Bitmiş Dizaynımıza Çevirmək
Modelimizi Bitmiş Dizaynımıza Çevirmək

Prototipimizi tamamladıqdan sonra heyrətləndik. Heç birimiz sistemin montajdan əvvəl necə işlədiyindən əmin deyildik. Ancaq hissələrimiz bir araya gəldikdən sonra nəyi bəyəndiyimizi və son dizaynı hazırlayarkən onu necə inkişaf etdirəcəyimizi kəşf etdik. Sistemlə əlaqədar əsas şikayətlərimiz bunlar idi:

  1. Ölçək

    1. Prototipimiz kütləvi və bacarıqsız idi ki, bu da qollarımızın kənarına yuvarlanmağa meylli etdi
    2. Daşıyıcı lazım olduğundan daha böyük idi və boş yerə çox idi
    3. Kəmərimiz (bir vex tankı), qollar arasında artıq boşluq yaradan zərurətdən daha böyük idi
  2. Sürtünmə

    1. Çətin dişlərimiz taxta dübel silindrlərinin üzərindən bütün nöqtələrdə asanlıqla keçmədi
    2. Taxta üzərindəki plastik arabanı bir çox hallarda hərəkət etmək istəmirdi
  3. Motorlu

    Sistemin gücünü artırmalıyıq

Bunları nəzərə alaraq, son dizayn üçün planlarımızı çəkdik. Çəkmə çubuğunun bir arduino vasitəsi ilə Myo ilə idarə olunmasını istədik və çərçivəni alüminium və daha kiçik etmək istədik.

Bunu etmək üçün orijinal prototipimizin bir faizini götürdük və bu ölçüdən işə başladıq. Qalxan bir yatağın keçə biləcəyi qədər geniş kanallara malik işlənəcək təbəqə metaldan istifadə etməklə daha yüksək istifadəyə dözümlülüyə malik olan yüngül, lakin möhkəm bir dizayn əldə edərdik.

Prototipimiz, motorun fırlanmasının çəkmə başımızın başına necə təsir etdiyini müəyyən etmək üçün cəmi bir neçə dəqiqə ərzində bizə imkan verdi. Bu, idarəetmə dizaynımızın gözlədiyimizdən daha sadə olacağını anlamağımıza səbəb olur. Daha yaxından araşdırdıqda, motorun hərəkətinin aşqar olduğunu anladıq! Bu o deməkdir ki, hər bir motor hərəkətimizə müstəqil olaraq arzuolunan təsir göstərir, lakin biz onları bir araya gətirdikdə ləğv etməyə başlayırlar.

Məsələn, bir koordinat təyyarəsi kimi qəbul edildikdə, mənfi x ucunda yerləşən motor həmişə çekmecemizi ikinci və dördüncü kvadrantlara çəkməyə meyllidir. Əksinə, pozitiv x ucuna qoyulan mühərrik həmişə çekmeceyi birinci və üçüncü kvadranta yönəldəcək. Mühərriklərimizin hərəkətini birləşdirsək, bu qarşıdurmanın istiqamətləndirmə hissələrini ləğv edər və razılaşan hissələri gücləndirər.

Addım 8: Kodlaşdırma

Bir neçə il əvvəl C -də kifayət qədər geniş işləsəm də, lua və ya C ++ ilə bağlı heç bir təcrübəm yox idi və bu, sənədləri araşdırmaq üçün xeyli vaxt sərf etməyim lazım olduğunu bildirir. Bilirdim ki, yerinə yetirməyə çalışacağım ümumi vəzifə istifadəçi mövqeyini zaman aralığında almaq və sonra onu mühərriklərə ötürməkdir. Ehtiyac duyduğum hissələri daha yaxşı həzm etmək üçün vəzifəni özüm həll etməyə qərar verdim.

1. Myodan məlumat əldə edin (lua)

Myodan məlumat toplamaq üçün bir yol tapmalı olduğumu bilirdim. Bu yaxınlaşmaq istədiyim problemin ilk hissəsi idi. Bunu etmək üçün, istifadəçinin çəkməyə başlamazdan əvvəl kətan ölçüsünü kalibr etməsini istədim. Bu, işləmək üçün bir sərhəd tanımağa imkan verəcəkdir. Verilən məlumatların keçməsi üçün maksimum kətanın yüzdə bir hissəsini götürərək fərqli istifadəçilər arasında proqramı normallaşdıra bilərdim. Saniyələrin hər yarısında bir getOrientation yoxlaması aparacaq bir skriptli hadisə keçirməyə qərar verdim, çünki bu, çeklərin heç vaxt təxmin etməyiniz lazım olan vəhşi sıçrayış etməməsinə imkan verərdi (məsələn, istifadəçi çılğınca arxaya yellənirsə və irəli).

Bu mənim vurduğum ilk maneəni yaratdı. Lua'nın çox böyük bir məhdudiyyətini kəşf etdim və bu, ssenariyə davam etməzdən əvvəl gözləməyimə icazə verməyəcək. Bu hərəkəti yerinə yetirməyin yeganə yolu ya CPU -nu (bütün dünyada dayandıra bilər, hətta sistem saatını tutaraq) dayandırmaq və ya OS -yə xas əmrlərdən istifadə etmək idi. Nümunə kodumda, yerinə yetirdiyim orijinal OS yoxlamasını tərk etdim (şərh etdim). Bu, luanın sənədlərində çoxlu araşdırma apardıqdan sonra edildi və sistem yolunun formatlanmasını yoxlayaraq edildi. Daha əvvəl nəşr olunan layihələrin sənədlərinə baxmaq lazım olduğuna qərar verdiyim vaxt idi. Nə qədər vaxt itirdiyimi dərhal anladım və dərhal platforma dəyişəninə səbəb oldum. Bununla, əvvəlki həllimi bir araya gətirməyim lazım olan günlərdən fərqli olaraq, OS -nin xüsusi gözləmə əmrlərini demək olar ki, dərhal tətbiq edə bildim.

Məhz bu dövrdə elektrik aspekti üzərində iş başladı və kodun bu tərəfi üzərində işi dayandırdım. Niyyətimiz, mühərriklərimizin arduino ilə necə əlaqə qurduğunu öyrənməkdir.

2. Arduino ətrafında işləmək (C ++)

Çörək taxtamızla iş getdikcə daha da mürəkkəbləşdikcə, arduinonun çox işləmə qabiliyyətinə malik olmadığını öyrəndim. Bu, orijinal kod dizaynımdakı böyük bir açar idi və nəzarətçimizlə təqdim olunan məhdudiyyətlər haqqında daha çox oxuduqdan sonra arduinonun ikisi arasında necə keçəcəyini proqramlaşdırmalı olduğumu öyrəndim. Müddətimiz yaxınlaşdıqca bu mənim səylərimin mərkəzinə çevrildi. Orijinal skriptimin böyük hissələrini faylı oxuyan motor nəzarətçisi ilə sinxron şəkildə bir fayla yazmaq üçün nəzərdə tutulduqları üçün silmək məcburiyyətində qaldım. Bu, istifadəçinin çəkməyimizdən qabaqda olsa belə, layihəni korlamayacağına əmin olmaq üçün bir növbə funksiyasına imkan vermək idi.

Əvvəlki kimi eyni şəkildə tətbiq olunmasa, növbə funksiyasının saxlanılması lazım olduğuna qərar verdim. Bunu etmək üçün bir sıra vektor yaratdım. Bu, nəinki əvvəlki dizaynımın ruhunu nisbətən bütöv saxlamağa imkan verdi, həm də oxumaq və ya yazmaq üçün sənəddəki yerimi izləmək məcburiyyətində olmadığımı ifadə etdi. Bunun əvəzinə, indi etməli olduğum tək şey, istifadəçi hərəkət edərsə, vektoruma yeni bir dəyər əlavə etmək idi (ilkin test, son qeyd olunan mövqedən həm x, həm də y kətan ölçüsü fərqinin 1% -dən az idi, məlumatların qeyd edilməməsi ilə nəticələndi). Daha sonra vektorumdakı ən qədim dəyəri götürə bilərdim və birdən -birə onu motor idarəetməsinə göndərə, sənədimizə yaza və sonra vektorumdan silə bilərdim. Bu daimi bir IO axınının olması ilə bağlı bir çox narahatlığımı təmizlədi.

Addım 9: Elektrik

Image
Image
Elektrik
Elektrik

Keçmişdə bir elektronika dərsi alsam da, arduinolarla kifayət qədər işlədim. Arduinonun xarici mənbədən (myo) məlumat almasını heç vaxt dərinləşdirməmişəm, yalnız arduino vasitəsilə məlumat çıxarmaq təcrübəm var. Bununla birlikdə, çəkmə botumuzdakı mühərrikləri bağladım və myo kodu ilə işləyə bilmələri üçün kod üzərində çalışdım.

İstifadə etdiyim materiallar:

2 x Step motor

1 x Çörək paneli

1 x Arduino (Uno)

2 x Sürücü IC L293DE

40 x Jumper telləri

2 x azarkeş

1. Stepper Motorları və Fanı Breadboard -a bağlamaq

Dövrə diaqramına əsasən, çörək taxtasındakı sürücüyə bir pilləli motoru bağlaya bilərik. Sonra, eyni diaqramı izləyərək ikinci sürücü və motora tətbiq edin, lakin tullanan tellərin arduinoda fərqli bir pin dəstəsinə bağlanması lazım olacaq (çünki ilk mühərrik 4 başqasının yerini tutur).

Xəbərdarlıq/İpucu:

Sürücülər çox kiçikdir və pinlər bir -birinə çox yaxındır. Tellərin qarışmaması üçün iki sürücünü boş yerə yerləşdirmək düzgün olardı.

Növbəti tərəfdarlara tel çəkməkdir. Bu olduqca sadədir, əlimdə olan azarkeşlər, müsbət və əsaslı əsas kompüter prosessor fanatları idi. Bu ikisini çörək lövhəsindəki müvafiq +/- pinlərinə bağlayın və hər birini hər sürücüyə yönəldin. (Step motorlarının uzun müddət məlumat və əmrlər alması səbəbindən sürücülərin həddindən artıq istiləşməyə və qoxuya meyl etdiyini gördük. Soyutmaq üçün fan əlavə etmək bu problemi həll etdi).

2. Arduino Kodu

Bu asan hissədir!

Arduino IDE -ni açın "Fayl" sekmesine keçin və sonra daha da aşağıya enəcək "nümunə" sekmesine keçin və "stepper" sekmesini göstərin Sonra "Stepper_OneStepAtATime" açmaq istəyirsiniz.

Bu, demək olar ki, arduino/motor naqillərinə qoşula bilən bir nümunə kodu əvvəlcədən yükləyəcək. Kiçik düzəlişlər etməli olacağıq, çünki aşağıda göstərəcəyim iki mühərriki işə salacağıq. Arduino IDE-nin 8-11-ci pinləri təyin etdiyi üçün istifadə etmək qərarına gəldiyiniz pindən asılı olaraq kiçik düzəlişlər etməlisiniz.

İki motorun "sinxronizasiya" halında hərəkət etməsi üçün istifadə etdiyim kod aşağıda verilmişdir:

//#daxildir

const int stepsPerRevolution = 200;

StepStepper1 (addımlarPerRevolution, 9, 10, 11, 12);

StepStepper2 (StepPerRevolution, 4, 5, 6, 7);

int stepCount = 0;

void setup () {// serial portunu işə salın: Serial.begin (9600); }

boşluq döngəsi () {

myStepper1. addım (1);

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

Serial.println (stepCount);

stepCount ++;

gecikmə (0,5);

myStepper2.step (1); gecikmə (0,5); }

3. Mümkün problemlər

Bu prosesdə qarşılaşdığım məsələlər düzgün kod nümunəsini istifadə etməmək, pis bir tullanan tel istifadə etmək, səhv sürücü IC istifadə etmək idi.

Sürücünüzün bir motoru idarə edə biləcəyinə əmin olun

Seriya nömrəsini yoxlayın və xüsusiyyətlərini yoxlayın

Mühərriklərimin qəribə bir şəkildə fırlanmasına səbəb olan ölü tullanan telə sahib olmaq problemi ilə üzləşdim

Hər teli yoxlamaq üçün multimetrdən istifadə etməliydim

Həmişə kodunuzun sonunu itirmə kimi kiçik səhvlər üçün iki dəfə yoxlayın ";" əmr

Addım 10: Mexanik

Mexanik
Mexanik
Mexanik
Mexanik
Mexanik
Mexanik
Mexanik
Mexanik

1. Material

Qolların tam istehsal modeli üçün güclü, lakin yüngül materialdan hazırlanması tövsiyə olunur, alüminiumun mükəmməl uyğun olduğunu hiss etdik.

9.125 "x 17.5" ölçüsündə kəsilmiş 032 ölçü alüminium təbəqələrdən istifadə etdik və nümunəni əvvəlki addımda göstərilən rəsmdən izlədik.

2. İstehsal

Hammerdən (mavi maşın) istifadə edərək, əks istiqamətə baxan çəpərlər əlavə etdik ki, parça qırılaraq qatlandıqda, iki kənar bir -birinə bağlanaraq tək bir parça meydana gətirsin.

Böyük əyilmələr üçün yüksək dəqiqliyə görə tennismitdən istifadə etdik.

İndi daha kiçik əyilmələr üçün, daha kiçik ayağı olan bir maşın istifadə etmək istəyəcəksiniz, bura roto-die kimi bir maşının daxil olduğu yerdir. Ayağı daha kiçik olduğundan təəssüf ki, daha kiçik fasilələr verməyə imkan verir. əlimizdəki roto-die hələ də dəmiryolumuz üçün çox böyük idi və deformasiyaya uğramışdı.

** Alternativ olaraq, uyğun avadanlıq və ya alətlərə çıxışınız yoxdursa, onu əvəz edə bilərsiniz. **

Bizim vəziyyətimizdə, qollarımızı plazma kəsici istifadə edərək alüminium günəş paneli raylarından kəsdik və uclarını hamarlaşdırdıqdan sonra arxa tərəfə bərkidərək iki tərəfli bir dəmir yolu sistemi qurduq. İdeal olaraq, relsləri bir -birinə qaynaq etmək istərdik, ancaq bir qaynaq stansiyasına girmədən, relsləri bir -birinə bağladıq və qazdıqdan sonra vintlə bağladıq. Ancaq bu yol alınarsa, parçanın mümkün qədər az əyilməsini təmin etmək üçün kilid qozu və yuyucudan istifadə edilməsinə xüsusi diqqət yetirilməlidir.

3. Kəmər

Kəmərlər üçün xilas edə biləcəyimiz bəzi köhnə 3D printer kəmərlərindən istifadə etdik.

Kəmərlər əvvəlcə kifayət qədər uzun deyildilər, buna görə də kifayət qədər uzun olacaq bir parça etmək üçün iki parça birləşdirdik.

Yaşıl dişlilər və taxta dübellər, kəmərin yerindən sürüşməməsi üçün istifadə olunan əlavə geniş yuyuculu disk yataqları ilə əvəz edildi.

4. Daşınma

Və nəhayət, vaqon, 5 "x 5" ölçülü 032 alüminiumdan hazırlanmışdır, müvafiq vintlər və yuyucular üçün nəzərdə tutulmuş yerlərdə deliklər qazılmışdır. Məsafə, dəmiryolunun nə qədər geniş olduğuna və yuyucularda nə qədər boşluğa malik olduğuna görə dəyişəcək.

Addım 11: Düşüncələr

Təəssüf ki, layihəmizin hər tərəfi böyük bir zaman barikadasına girdi və dizayn tariximizə qədər tamamlaya bilmədik. Komandamızın hər bir üzvü, dizaynımızın hər bir aspektində ən azından müəyyən dərəcədə əməkdaşlıq edərək sona çatdı ki, bu da öyrənmə əyrisi vaxtının batmasına səbəb oldu. Bu, mümkün qədər az xarici mənbəyə malik bir məhsul dizayn etmək istəyi ilə birlikdə (hamımız öz hissələrimizi sıfırdan yaratmaq istəyirdik) çoxlu sayda yenidən icad edilmiş təkərlərə səbəb olur.

Layihə üzərində işləyən hər kəs layihənin digər aspektləri haqqında daha çox məlumat əldə etdi. Proqram təminatını müəyyən bir hərəkətə salmaq bir şeydir, sonra proqram təminatı ilə birlikdə hardware işləməsi başqa bir şeydir. Deyərdim ki, kim bu layihənin kodlaşdırma aspekti üzərində işləyirsə, bizim layihə kodlayıcımız kimi tanış olsun.

Ümumiyyətlə, istədiyimizə tam nail ola bilmədik. Bununla birlikdə, doğru yolda olduğumuzu hiss edirik və hamımız gələcək layihələrə tətbiq edə biləcəyimiz yeni anlayışları kəşf etdik və öyrəndik.

Tövsiyə: