Мазмұны:

[WIP] Мио белбеуімен басқарылатын Drawbot жасау: 11 қадам
[WIP] Мио белбеуімен басқарылатын Drawbot жасау: 11 қадам

Бейне: [WIP] Мио белбеуімен басқарылатын Drawbot жасау: 11 қадам

Бейне: [WIP] Мио белбеуімен басқарылатын Drawbot жасау: 11 қадам
Бейне: SCP-973 – Призрак Полицейского (Анимация SCP) 2024, Шілде
Anonim
[WIP] Myo белбеуімен басқарылатын Drawbot жасау
[WIP] Myo белбеуімен басқарылатын Drawbot жасау

Бәріне сәлем!

Бірнеше ай бұрын біз оны басқаруға тек Myo диапазонын қолданатын ашық жақтау тартқыш құру идеясын шешуге тырыстық. Біз жобаны алғаш бастаған кезде біз оны бірнеше кезеңге бөлу керектігін білдік. Біздің бірінші негізгі кезең-бұл біздің ботқа арналған ашық рамалық дизайнмен басымызды айналдыру. Бұл стандартты емес қондырғы, және біз бұл дизайнның қандай артықшылықтары бар екенін көргіміз келді.

Екіншіден, біз бұл прототипті құру тек өзімізге пайдалы болатынын білдік. Біздің дизайн мен жоспар - бұл соңғы рамканы металлға айналдыру және ардуино көмегімен Myo диапазонына салынған акселерометр мен гироскоптан өз орнын алу. Содан кейін бұл ақпарат қозғалтқыштарға жіберіледі және пайдаланушының қозғалысын қайталайды. Біз бұл біздің екінші кезеңді үш негізгі аспектке бөлетінін білдік:

  1. Myo -дан қозғалтқыштарға Arduino арқылы бағдарламалау
  2. электрлік дизайн біздің деректерді қозғалысқа келтіреді
  3. механикалық дизайн біздің қозғалысты жеңілдететін ақылға қонымды өлшемді жақтауды жасау үшін

Біздің команданың әр мүшесі біздің дизайн процесінің бірегей бөлігін жақсы сезінді, сондықтан біз әр адамның арасындағы жұмысты бөлуді шештік. Біз сонымен қатар бүкіл ғаламдық көріністен айырмашылығы, күнделікті ойлауды бақылау үшін бүкіл дизайн процесінде блог жүргіздік.

1 -қадам: Біз не істеуді жоспарладық

Image
Image

Біздің мақсатымыз - бұл екі өнімді бұрын қолданылмаған кезде біріктіру. Біз Myo белбеуі мен Evil Mad Scientist AxiDraw шабыттандырылған дизайнның өз нұсқасы арасында тірі эстафета жасауға бел будық.

2 -қадам: Прототипті ингредиенттер тізімі

2 2 x 4 ағаш тақтайшалар 1 Белбеу немесе тізбекті өлшеу> = 65 »4 Ағаш шегелер 3 Белбеуге немесе тізбекке сәйкес келетін тістері бар тетіктер 4 3 x 8 вексельді перфорацияланған пластиналар 30« Резеңке аралықтар 8 1 »диаметрлі шайбалар 1 1« диаметрі ағаш дюбель 1 'ұзын 8 Vex бұрандасы 1”8 ½” Vex бұрандасы 8 2”Vex бұрандасы 8 ¼” Резеңке аралықтары 48 Vex гайкалары 1 Кішкене ілмекті галстук

3 -қадам: [Прототип] Ағаш өңдеу біздің қару -жарақ пен арбаның интерьері

[Прототип] Ағаш өңдеу біздің қару -жарақ пен арбаның интерьері
[Прототип] Ағаш өңдеу біздің қару -жарақ пен арбаның интерьері

Біз 2x4 өлшемді екі өлшемді алып, оларды бірдей ұзындыққа (33 дюйм) кесеміз.

Үстел арамен біз тақталардың тар бөлігін «терең және ені» ортасында ойық жасадық.

Дюбельді 4 2 дюймге кесіңіз және бұрғылау прессінің көмегімен диаметрі шамамен ¼ дюймнің ортасында тесік жасаңыз.

4 -қадам: [Прототип] Біздің арбаны жасау

[Прототип] Біздің арбаны жасау
[Прототип] Біздің арбаны жасау
[Прототип] Біздің арбаны жасау
[Прототип] Біздің арбаны жасау
[Прототип] Біздің арбаны жасау
[Прототип] Біздің арбаны жасау

Ең дұрысы, біз 7х7 пішінді тесілген болаттан екі бөлікті қолданар едік, бірақ бізде бар болғаны 2х7 жолақтар болды, сондықтан біз оларды «X» конфигурациясында біріктірдік.

5 дюймдік резеңке аралықтарды салыңыз және векс пластиналарының бұрыштарын бір -біріне бекітіңіз

Ағаш сүлгілерді 1 -суретте көрсетілгендей бекітіңіз, осылайша олар шамамен 2 дюйм бос кеңістікте еркін айналады, осылайша редуктордың қай жерде орналасуы керектігін білу үшін біз шайбаларды қолдандық, бірақ кейінірек пластиктен жасалған кішкентай тісті дөңгелектердің жақсы жұмыс істейтінін анықтадық..

Ve «бұрандалы бұрандаларды, ¼» резеңке аралықты және 1 »диаметрлі шайбаларды қолданып, шайбаларды 1 -суретте көрсетілгендей жоғары күйде бекітіңіз (біз дұрыс пластиналарды таба алмағанымыз үшін жасыл пластикалық тісті дөңгелектерді қолдандық) шайбалардың мүмкін екеніне көз жеткізіңіз. оңай иіру және тақтаның ойықтарына кіру.

5 -қадам: [Прототип] Барлығын біріктіру

[Прототип] Барлығын біріктіру
[Прототип] Барлығын біріктіру
[Прототип] Барлығын біріктіру
[Прототип] Барлығын біріктіру
[Прототип] Барлығын біріктіру
[Прототип] Барлығын біріктіру
[Прототип] Барлығын біріктіру
[Прототип] Барлығын біріктіру

Тақтаны бетке қойыңыз да, арбаны ортаға сырғытыңыз, осылайша шайбалар арбаны тақтайдың үстінде ұстайды, ал тақтаның екі жағында тісті дөңгелектерді еркін айналдырады. Екінші тақтаның бір шетіне тісті дөңгелектеңіз, оның орталықта екеніне көз жеткізіңіз және оны бірінші тақтаға перпендикуляр кареткаға сырғытыңыз.

Енді белбеуді жүйеде көрсетілгендей ілмекпен айналдыру керек, белдіктің сыртында дюбельдер қалай орналасқанына және шассидің ортасында белбеу қозғалатын кезде кедергі келтіретін ештеңе жоқ екеніне мұқият назар аударыңыз.

Енді белдікті редукторы жоқ тақтаның бүйіріне бекіту керек. Біз өзімізді бекіту үшін қосымша шеге мен ілмекті қолдандық. Бірақ белбеу осы жерге бекітілген кезде қолданылатын әдіс маңызды емес

6 -қадам: [Прототип] Аяқталды және жылжуда

Image
Image

Солай болуы керек, белбеуді әр түрлі комбинацияда тартып, оның білекке тигізетін әр түрлі әсерін көріңіз!

7 -қадам: Біздің модельді дайын дизайнға аудару

Біздің модельді дайын дизайнға аудару
Біздің модельді дайын дизайнға аудару
Біздің модельді дайын дизайнға аудару
Біздің модельді дайын дизайнға аудару

Прототипімізді аяқтағаннан кейін біз қатты қуандық. Ешқайсымыз жиналмас бұрын жүйенің қалай жұмыс істейтінін білмедік. Бірақ, біздің бөлшектер біріккеннен кейін, біз ұнаған нәрсені және соңғы дизайнды жасау кезінде оны қалай жақсартатынымызды тез анықтадық. Жүйе бойынша біздің негізгі шағымдарымыз:

  1. Масштаб

    1. Біздің прототипіміз үлкен және икемсіз болды, бұл оны қолдарымыздың шетіне құлап кетуге бейім етті
    2. Вагон қажеттіден әлдеқайда үлкен болды және оның босқа бос орындары көп болды
    3. Біздің белбеуіміз (резервуардың протекторы) қажет болғаннан әлдеқайда үлкен болды, бұл қолдар арасындағы артық кеңістікті енгізді
  2. Үйкеліс

    1. Біздің вексельдер ағаш дөңгелектердің роликтерінен оңай өтпеді
    2. Ағаш пластмассадан жасалған вагон көп жағдайда қозғалғысы келмеді
  3. Моторизация

    Біз жүйені қуатты етіп жасауымыз керек еді

Осыны ескере отырып, біз соңғы дизайн бойынша өз жоспарларымызды құрдық. Біз тартқыштың ардуино арқылы Myo көмегімен басқарылуын қаладық, ал жақтауды алюминийден кішірек етіп жасағымыз келді.

Мұны істеу үшін біз түпнұсқалық прототиптің пайызын алдық және сол өлшемнен жұмыс істеуге кірістік. Экранды мойынтіректің өтуі үшін жеткілікті кең арналары бар өңделетін қаңылтырды қолдану арқылы бізде қолдануға төзімділігі жоғары жеңіл, бірақ берік дизайн болады.

Біздің прототип сонымен қатар мотордың айналуы біздің тартқыштың басына қалай әсер еткенін бірнеше минут ішінде анықтауға мүмкіндік берді. Бұл бізді басқару дизайны біз ойлағаннан да қарапайым болатынын түсінуге мүмкіндік береді. Жақынырақ тексере отырып, біз қозғалтқыштың қозғалысы аддитивті екенін түсіндік! Бұл дегеніміз, әрбір қозғалтқыш біздің қозғалысымызға тәуелсіз әсер етеді, бірақ біз оларды біріктіргенде, олар тоқтай бастайды.

Мысалы, егер координаталық жазықтық ретінде қарастырылса, онда теріс х шетінде орналасқан қозғалтқыш әрқашан біздің тартпаны екінші және төртінші квадрантқа тартады. Керісінше, оң жақ шетіне қозғалтқыш тартпаны әрқашан бірінші және үшінші квадрантқа итермелейді. Егер біз қозғалтқыштардың қозғалысын біріктіретін болсақ, онда бұл қайшылықты басқаратын бөліктер жойылады және келісетін бөліктер күшейеді.

8 -қадам: кодтау

Бірнеше жыл бұрын мен C тілінде кең көлемде жұмыс істегенде, менде lua немесе C ++ тәжірибесі болмады, бұл менің құжаттаманы қарауға көп уақыт жұмсауым керек дегенді білдіреді. Мен орындауға тырысатын жалпы тапсырма уақыт аралығы бойынша пайдаланушының орнын алу, содан кейін оны қозғалтқыштарға беру екенін білдім. Мен өзіме қажет бөлшектерді жақсы сіңіру үшін тапсырманы бөлуді шештім.

1. Деректерді Myo -дан алу (lua)

Мен Myo -дан ақпарат жинаудың жолын табуым керек екенін білдім. Бұл мен жақындағым келетін сынақтың бірінші бөлігі болды. Мұны істеу үшін мен сурет салуды бастамас бұрын пайдаланушының кенептің өлшемін калибрлегенін қалаймын. Бұл маған жұмыс істейтін шекараны алуға мүмкіндік береді. Мен әр түрлі пайдаланушылар арасындағы бағдарламаны қалыпты кенептердің пайыздық мөлшерін алу арқылы қалыпқа келтіре аламын, себебі менің деректерім өтеді. Мен әр секунд сайын GetOrientation тексерісін жүргізетін сценарийлік оқиға болуды шештім, себебі бұл тексерулер сізге болжауға болатын жабайы секіруді ешқашан жасамауға мүмкіндік береді (мысалы, егер пайдаланушы артқа бұрылып кетсе және алға).

Бұл мен соққан бірінші жол тосқауыл болды. Мен луаның өте үлкен шектеулерін таптым және бұл сценарийді жалғастырмас бұрын күтуге мүмкіндік бермейді. Бұл әрекетті орындаудың жалғыз жолы - бұл процессорды кідірту (ол бүкіл әлем бойынша, тіпті жүйелік сағатты ұстап тұруы мүмкін) немесе ОЖ -нің арнайы командаларын қолдану. Менің мысал кодында мен бастапқы ОЖ тексерісінде қалдырдым (түсініктеме). Бұл Луа құжаттамасында үлкен көлемде зерттеулер жүргізілгеннен кейін болды және жүйелік жолдың пішімделуін тексеру арқылы жасалды. Бұл мен бұрын жарияланған жобалардың құжаттамасын қарау керек деп шештім. Мен қанша уақыт жоғалтқанымды бірден түсіндім және бірден платформа айнымалысына айналдым. Оның көмегімен мен ОЖ -нің күту пәрмендерін дереу орындай алдым, бұрынғы шешімімді біріктіру үшін қажет болған күндерден айырмашылығы.

Дәл осы жобалау кезінде электрлік аспект бойынша жұмыс басталды, мен кодтың осы аспектісіндегі жұмысты тоқтаттым. Біздің қозғалтқыштар arduino -мен қалай байланысқанын білу мақсаты.

2. Arduino айналасында жұмыс істеу (C ++)

Біздің тақтамен жұмыс барған сайын күрделене түскенде, мен ардуиноның көп оқуға қабілетсіз екенін білдім. Бұл менің бастапқы кодтық дизайндағы үлкен кілт болды және біздің контроллермен ұсынылған шектеулер туралы толығырақ оқығаннан кейін, мен arduino екеуінің арасында қалай ауысатынын бағдарламалауым керек екенін білдім. Біздің мақсатымыз жақындаған сайын бұл менің күш -жігерімнің бағыты болды. Маған бастапқы сценарийдің үлкен бөліктерін алып тастауға тура келді, себебі олар файлды мотор контроллерімен файлға синхронды түрде жазуға арналған. Бұл кезек функциясы пайдаланушы біздің тартпадан озып кетсе де, бұл жобаны бұзбайтынына көз жеткізу үшін болды.

Мен кезекке қою функциясын бұрынғыдай орындамаса, сақтау керек деп шештім. Ол үшін мен массивтердің векторын құрдым. Бұл маған бұрынғы дизайнның рухын салыстырмалы түрде сақтауға мүмкіндік берді, сонымен қатар файлды оқу немесе жазу үшін өз орнымды қадағалаудың қажеті жоқ дегенді білдірді. Оның орнына, егер мен қолданушы қозғалатын болса, менің векторыма жаңа мән қосу ғана қалды (алдын ала тестілеу соңғы жазба орнынан x пен y -де кенеп өлшемінің айырмашылығының 1% -ынан аз болды, бұл деректердің жазылуына әкелмеді). Содан кейін мен вектордағы ең ескі мәнді ала аламын және оны бір сәтте қозғалтқыштың басқару пультіне жіберіп, біздің файлға жазып, содан кейін оны векторымнан алып тастай аламын. Бұл тұрақты IO ағынының жұмысына қатысты көптеген алаңдаушылықты жойды.

9 -қадам: электрлік

Image
Image
Электрлік
Электрлік

Мен бұрын электроника сабағына қатысып, ардуиноспен жақсы жұмыс істедім. Мен ешқашан ардуиноны сыртқы көзден ақпарат алуға мәжбүрлемедім (myo), менде тек arduino арқылы ақпаратты шығару тәжірибесі бар. Дегенмен, мен мотормен жұмыс істей алатындай етіп, біздің моторды электр торабына қосып, кодпен жұмыс жасадым.

Мен қолданған материалдар:

2 x қадамдық қозғалтқыштар

1 x Нан тақтасы

1 x Arduino (Uno)

2 x IC L293DE драйвері

40 x өтпелі сымдар

2 x Жанкүйерлер

1. Stepper моторлары мен желдеткішті жұмыс тақтасына қосу

Схемаға сүйене отырып, біз бір сатылы қозғалтқышты жүргізушіге нан тақтасында сымдай аламыз. Содан кейін, дәл осы схемаға сәйкес екінші жүргізуші мен қозғалтқышқа қолданылады, алайда секіргіштердің сымдарын ардуинодағы басқа түйреуішке қосу керек болады (өйткені бірінші қозғалтқыш 4 басқа орынды алады).

Ескерту/кеңес:

Драйверлер өте кішкентай және түйреуіштер бір -біріне өте жақын. Сымдар шатастырылмауы үшін екі драйверді бөліп қою дұрыс болар еді.

Келесі - желдеткіштерді сыммен қосу. Бұл өте қарапайым, менде бар желдеткіштер оң және негізі бар компьютерлік процессордың негізгі желдеткіштері болды. Бұл екеуін нан тақтасындағы +/- түйреуіштеріне жалғап, әр жүргізушіге бұрыңыз. (Біз таптық, моторлар ұзақ уақыт бойы ақпараттар мен командаларды қабылдайтындықтан, драйверлер қызып кетеді және иіс сезеді. Салқындату үшін желдеткішті қосу бұл мәселені шешті).

2. Arduino коды

Бұл оңай бөлігі!

Arduino IDE бағдарламасын ашыңыз, «Файл» қойындысына өтіңіз, содан кейін «мысал» қойындысына өтіңіз, ол одан әрі төмендейді және сізге «қадам» қойындысын көрсетеді, содан кейін сіз «Stepper_OneStepAtATime» ашқыңыз келеді.

Бұл arduino/мотор сымдарына қосылатын және ойнайтын мысал кодын алдын ала жүктейді. Біз кішкене түзетулер енгізуіміз керек, өйткені біз екі қозғалтқышты іске қосамыз, мен оларды төменде көрсетемін. Сізге қандай түйреуіштерді қолдануға шешім қабылдағаныңызға байланысты кішкене түзетулер енгізу қажет болуы мүмкін, себебі Arduino IDE әдепкі бойынша 8-11 түйреуіштер болып табылады.

Мен екі қозғалтқышты «синхрондауда» жылжыту үшін қолданған код төменде:

//#кіреді

const int stepsPerRevolution = 200;

StepStepper1 (StepPerRevolution, 9, 10, 11, 12);

MyStepper2 қадамы (StepPerRevolution, 4, 5, 6, 7);

int stepCount = 0;

void setup () {// сериялық портты инициализациялау: Serial.begin (9600); }

void loop () {

myStepper1. қадам (1);

Serial.print («қадамдар:»);

Serial.println (stepCount);

stepCount ++;

кідіріс (0,5);

myStepper2.step (1); кідіріс (0,5); }

3. Мүмкін болатын проблемалар

Мен осы процесте кездескен мәселелер дұрыс код үлгісін қолданбаған, нашар секіргіш сымды қолданған, қате IC драйверін қолданған.

Сіздің жүргізуші моторды басқара алатынына көз жеткізіңіз

Сериялық нөмірді және оның сипаттамаларын тексеріңіз

Мен моторларымның біртүрлі айналуына әкеліп соқтырған сөндіргіш сымның болуы мәселесіне тап болдым

Әр сымды тексеру үшін мультиметрді қолдануға тура келді

Әрқашан кодты ұсақ қателер үшін екі рет тексеріңіз; «;» команда

10 -қадам: механикалық

Механикалық
Механикалық
Механикалық
Механикалық
Механикалық
Механикалық
Механикалық
Механикалық

1. Материал

Қару -жарақтың толық моделі үшін оларды берік, бірақ жеңіл материалдан жасау ұсынылады, біз алюминий өте жақсы сәйкес келетінін сездік.

Біз 9125 х 17,5 дюймге дейін кесілген 032 калибрлі алюминий парақтарды қолдандық және алдыңғы қадамда көрсетілген сызбаның үлгісін бақыладық.

2. Дайындау

Геммерді (көк машинаны) пайдаланып, біз қарама -қарсы жаққа қарама -қарсы жақтарды қостық, осылайша бөлік сынған және бүктелген кезде екі жиегі бір -біріне жабысып, біртұтас бөлікті құрады.

Үлкен иілу үшін біз теннисмит қолдандық, себебі оның дәлдігі жоғары.

Енді кішігірім иілу үшін сіз аяғы кішірек машинаны қолданғыңыз келеді, дәл осында дөңгелек тәрізді машина келеді. Оның аяғы кішірек болғандықтан, өкінішке орай, кішірек үзілістер жасауға мүмкіндік береді., біздің иелігіміздегі теміржол әлі де біздің теміржол үшін тым үлкен болды және ол деформацияланды.

** Немесе, егер сізде тиісті жабдыққа немесе құралдарға қол жеткізе алмасаңыз, оны алмастыруға болады. **

Біздің жағдайда біз қолымызды плазмалық кескішпен алюминийден күн панельдерінің рельстерінен кесіп, ұштарын тегіс етіп тарттық, содан кейін екі жақты рельсті жүйе жасау үшін оларды артқа бекітеміз. Ең дұрысы, біз рельстерді бір -бірімен дәнекерлегіміз келеді, бірақ дәнекерлеу станциясына қол жеткізбей, рельстерді бекітіп, бұрғылап бұрап, содан кейін оларды бұрап бекітеміз. Бірақ егер бұл бағыт алынса, онда бөліктің мүмкіндігінше аз иілуін қамтамасыз ету үшін құлыптау гайкасын және шайбаны қолдануға ерекше назар аудару қажет.

3. Белбеу

Белбеу үшін біз құтқара алатын бірнеше ескі 3D принтер белбеуін қолдандық.

Бастапқыда белбеудің ұзындығы жеткіліксіз болды, сондықтан біз жылуды қысқартатын түтіктерді қолдана отырып, екі бөлікті біріктіріп, жеткілікті ұзын етіп жасадық.

Жасыл редукторлар мен ағаш дюбельдер белбеудің орнынан сырғып кетпеуі үшін пайдаланылатын қосымша кең жуғыштары бар дискілі мойынтіректерге ауыстырылды.

4. Тасымалдау

Ақырында вагон 032 алюминийден 5 дюймдік парақтан жасалды, оған бұрандалар мен шайбалар кіретін тесіктер бұрғыланды. Қашықтық сіздің рельсіңіздің еніне және жуғыштарыңызда қаншалықты бос орынға байланысты өзгереді.

11 -қадам: Рефлексия

Өкінішке орай, біздің жобаның әр жағы уақыттың үлкен тосқауылына тап болды және біз өз жоспарымызды белгіленген күнге дейін аяқтай алмадық. Біздің команданың әрбір мүшесі біздің дизайнның басқа аспектілерінде кем дегенде белгілі бір дәрежеде ынтымақтасады, бұл қисық уақытты төмендетуге әкеледі. Бұл мүмкіндігінше аз сыртқы ресурстары бар өнімді жобалауға деген ұмтылыспен бірге (біз бәріміз өз бөлшектерімізді нөлден құрғымыз келгендіктен) дөңгелектердің үлкен мөлшеріне әкеледі.

Жобада жұмыс істегендердің бәрі жобаның басқа аспектілері туралы көбірек білді. Бағдарламалық жасақтаманы белгілі бір әрекетке айналдыру - бұл бір бөлек, содан кейін бағдарламалық жасақтаманы аппараттық құралдармен бірге жұмыс істеу - бұл басқа нәрсе. Мен айтар едім, бұл жобаның кодтау аспектісінде кім жұмыс жасаса, ол біздің жобалаушы сияқты таныс болуы керек.

Жалпы, біз қалағанымызға жете алмадық. Дегенмен, біз дұрыс жолда келе жатқанымызды және барлығымыз болашақ жобаларға қолдануға болатын жаңа ұғымдарды аштық және үйрендік деп ойлаймын.

Ұсынылған: