Cuprins:

[WIP] Crearea unui drawbot controlat de o bandă Myo: 11 pași
[WIP] Crearea unui drawbot controlat de o bandă Myo: 11 pași

Video: [WIP] Crearea unui drawbot controlat de o bandă Myo: 11 pași

Video: [WIP] Crearea unui drawbot controlat de o bandă Myo: 11 pași
Video: Hören & Verstehen - Prüfungsvorbereitung B2/C1 2024, Iulie
Anonim
[WIP] Crearea unui drawbot controlat de o bandă Myo
[WIP] Crearea unui drawbot controlat de o bandă Myo

Buna tuturor!

Cu câteva luni în urmă, am decis să încercăm să abordăm ideea construirii unui drawbot open-frame care să folosească doar o bandă Myo pentru a o controla. Când am început proiectul, am știut că va trebui să fie împărțit în câteva faze diferite. Prima noastră fază principală a fost să încercăm să ne înfășurăm capul în jurul unui design cu cadru deschis pentru botul nostru de desen. Aceasta este o configurație non-standard și am vrut să vedem care au fost avantajele acestui design.

În al doilea rând, am știut că construirea acestui prototip se va dovedi utilă numai pentru noi înșine. Proiectul și planul nostru a fost să mutăm cadrul final în metal și, folosind un arduino, să primim poziția noastră de la accelerometru și giroscop încorporat în banda Myo. Aceste informații vor fi trimise apoi motoarelor și ar replica mișcarea utilizatorului. Știam că acest lucru va face ca a doua fază să se împartă în trei aspecte principale:

  1. programarea de la Myo la motoare, prin intermediul Arduino
  2. proiectare electrică pentru a transpune datele noastre în mișcare
  3. design mecanic pentru a crea un cadru de dimensiuni rezonabile care să ne faciliteze mișcarea

Fiecare membru al echipei noastre s-a simțit cel mai confortabil cu o parte unică a procesului nostru de proiectare, așa că am decis să ne împărțim munca între fiecare persoană. De asemenea, am păstrat un blog pe parcursul întregului nostru proces de proiectare pentru a ne urmări gândirea zi de zi, spre deosebire de un aspect mai global.

Pasul 1: Ce am planificat să facem

Image
Image

Scopul nostru a fost de a combina aceste două produse într-un mod pe care nu l-am văzut nici unul folosit anterior. Ne-am propus să facem un releu live între banderola noastră Myo și propria noastră versiune a unui design inspirat de AxiDraw al Evil Mad Scientist.

Pasul 2: Lista de ingrediente prototip

2 2 x 4 plăci de lemn 1 Curea sau lanț de măsurare> = 65”4 Cuie din lemn 3 Angrenaje cu dinți care se potrivesc centurii sau lanțului 4 3 x 8 plăci perforate vex 30” Distanțieri din cauciuc 8 1”diametru șaibe 1 1” diametru din lemn diblă lungă 1 '8 șuruburi Vex 1”8 ½” șuruburi Vex 8 2”șuruburi Vex 8 ¼” Distanțieri din cauciuc 48 piulițe Vex 1 cravată mică

Pasul 3: [Prototip] Prelucrarea lemnului Interiorul armelor și căruciorului nostru

[Prototip] Prelucrarea lemnului Interiorul armelor și căruciorului nostru
[Prototip] Prelucrarea lemnului Interiorul armelor și căruciorului nostru

Am luat două 2x4 și le-am tăiat la lungimi egale (33 ¼”)

Folosind un ferăstrău de masă am făcut o crestătură de-a lungul părții înguste a scândurilor ¼”adânc și ⅛” lat în mijloc

Tăiați diblul în 4 bucăți de 2”și găuriți o gaură în mijlocul diblului cu diametrul de aproximativ ¼” folosind o presă de găurit

Pasul 4: [Prototip] Realizarea transportului nostru

[Prototip] Realizarea transportului nostru
[Prototip] Realizarea transportului nostru
[Prototip] Realizarea transportului nostru
[Prototip] Realizarea transportului nostru
[Prototip] Realizarea transportului nostru
[Prototip] Realizarea transportului nostru

În mod ideal, am folosi două bucăți de oțel perforat de 7x7, dar tot ce aveam la dispoziție erau benzile de 2x7, așa că le-am înșurubat într-o configurație „X”

Stivați 5 distanțieri din cauciuc de ⅜”și fixați colțurile plăcilor vex una de alta

Asigurați ușor diblurile din lemn, așa cum se arată în figura 1, astfel încât acestea să se învârtă liber cu aproximativ 2 de spațiu între ele. Utilizați imaginea pentru a vedea unde ar trebui poziționate uneltele în acest moment, am folosit șaibe, dar mai târziu am constatat că uneltele mici din plastic vex funcționează mai bine.

Folosind șuruburile ½ „vex, distanțiere din cauciuc ¼” și șaibe cu diametrul de 1”fixați șaibele într-o poziție ridicată așa cum se arată în figura 1 (am folosit unelte din plastic verde, deoarece nu am putut găsi șaibele potrivite) asigurați-vă că șaibele sunt capabile să se învârtă ușor și să se încadreze în crestăturile plăcii.

Pasul 5: [Prototip] Unind totul împreună

[Prototip] Punând totul împreună
[Prototip] Punând totul împreună
[Prototip] Punând totul împreună
[Prototip] Punând totul împreună
[Prototip] Punând totul împreună
[Prototip] Punând totul împreună
[Prototip] Punând totul împreună
[Prototip] Punând totul împreună

Așezați o scândură pe o suprafață și glisați căruciorul în mijloc, astfel încât șaibele să țină căruciorul deasupra scândurii și pe ambele părți ale scândurii cuie uneltele în jos, astfel încât să se rotească liber. Cuieți un angrenaj la un capăt al celei de-a doua plăci asigurându-vă că este centrat și glisați-l pe trăsura perpendiculară pe prima placă.

Acum centura trebuie să fie înfășurată prin sistem așa cum se arată, acordați o atenție deosebită modului în care sunt diblurile în exteriorul centurii și cum nu există nimic în centrul șasiului care ar putea împiedica centura în timp ce se mișcă.

Acum centura trebuie fixată pe partea laterală a plăcii care nu are un angrenaj. Am folosit o cravată suplimentară pentru unghii și fermoar pentru a ne prinde. Dar metoda utilizată nu contează atâta timp cât centura este ancorată în acel loc

Pasul 6: [Prototip] Finalizat și în mișcare

Image
Image

Asta ar trebui să fie, trageți centura în diferite combinații și vedeți diferitele efecte pe care le are asupra brațului!

Pasul 7: Traducerea modelului nostru în designul nostru finalizat

Traducerea modelului nostru în designul nostru finalizat
Traducerea modelului nostru în designul nostru finalizat
Traducerea modelului nostru în designul nostru finalizat
Traducerea modelului nostru în designul nostru finalizat

Odată ce ne-am finalizat prototipul, am fost în extaz. Niciunul dintre noi nu era sigur cum a funcționat sistemul înainte de asamblare. Dar, odată ce piesele noastre s-au reunit, am descoperit rapid ce ne-a plăcut și cum îl vom îmbunătăți atunci când creăm designul final. Principalele noastre reclamații legate de sistemul de soluționat au fost:

  1. Scară

    1. Prototipul nostru era masiv și dificil, ceea ce îl făcea predispus să se răstoarne la marginea brațelor noastre
    2. Trăsura era mult mai mare decât era necesar și avea mult spațiu irosit
    3. Centura noastră (banda de rulare a rezervorului vex) a fost mult mai mare decât era necesar, ceea ce a introdus spațiu în exces între brațe
  2. Frecare

    1. Banda noastră de rulare vex nu a trecut cu ușurință peste rolele de dibluri din lemn în toate punctele
    2. Plasticul pe lemn a făcut ca trăsura să nu se mai miște în multe cazuri
  3. Motorizarea

    Trebuia să facem sistemul capabil de putere

Având în vedere aceste lucruri, ne-am trasat planurile pentru designul final. Am vrut ca drawbot-ul să fie controlat cu un Myo prin intermediul unui arduino și am vrut să facem cadrul din aluminiu și mai mic.

Pentru a face acest lucru, am luat un procent din prototipul nostru original și ne-am propus să lucrăm de la acea dimensiune. Folosind tablă care ar fi prelucrată pentru a avea canale suficient de largi pentru a putea trece un rulment ecranat, am avea un design ușor, dar robust, care ar avea o toleranță de utilizare mai mare.

Prototipul nostru ne-a permis, de asemenea, în doar câteva minute, să determinăm modul în care rotația motorului a afectat capul robotului nostru. Acest lucru ne-a determinat să înțelegem că proiectul nostru de control ar fi mai simplu decât am anticipat. La o inspecție mai atentă, ne-am dat seama că mișcarea motorului este aditivă! Aceasta înseamnă că fiecare motor are un efect dorit independent asupra mișcării noastre, dar atunci când le combinăm împreună, acestea încep să se anuleze.

De exemplu, dacă este considerat ca un plan de coordonate, poziționarea motorului în extremitatea x negativă va tinde întotdeauna să ne tragă sertarul în al doilea și al patrulea cadran. Dimpotrivă, poziționarea motorului pe extremitatea x pozitivă va tinde întotdeauna sertarul în primul și al treilea cadran. Dacă combinăm mișcarea motoarelor noastre, aceasta va anula porțiunile de direcționare a conflictului și va amplifica porțiunile care sunt de acord.

Pasul 8: Codificare

În timp ce am lucrat destul de mult în C acum câțiva ani, nu aveam experiență cu lua sau C ++, ceea ce însemna că trebuia să petrec o cantitate considerabilă de timp căutând prin documentație. Știam că sarcina generală pe care aș încerca să o îndeplinesc era obținerea poziției utilizatorului în intervale de timp și apoi trecerea la motoare. Am decis să descompun sarcina pentru a digera mai bine părțile de care aveam nevoie.

1. Obțineți date de la Myo (lua)

Știam că trebuie să găsesc o modalitate de a colecta informațiile de la Myo. Aceasta a fost prima parte a provocării pe care am vrut să o abordez. Pentru a face acest lucru, am vrut ca utilizatorul să își calibreze dimensiunea pânzei înainte de a începe să deseneze. Acest lucru mi-ar permite să am o graniță de la care să lucrez. Aș putea apoi normaliza programul între diferiți utilizatori luând pur și simplu un procent din pânza maximă ca puncte de date pentru a trece. Am decis să am un eveniment scriptat care să facă o verificare getOrientation la fiecare jumătate de secundă, deoarece ar permite verificărilor să nu efectueze niciodată un salt sălbatic pe care ar trebui să-l ghiciți (de exemplu, dacă utilizatorul se mișca sălbatic înapoi și mai departe).

Acest lucru a făcut primul obstacol pe care l-am lovit. Am descoperit o limitare foarte mare a lua și că nu îmi permite să aștept înainte de a continua scenariul. Singura modalitate de a efectua această acțiune a fost fie întreruperea procesorului (care l-ar întrerupe la nivel global, chiar ținând ceasul sistemului), fie folosirea comenzilor specifice sistemului de operare. În exemplul meu de cod, am lăsat în sistemul de operare original verificarea pe care am executat-o (comentată). Acest lucru a fost efectuat după o mare cantitate de cercetări în documentația lua și a fost realizat prin verificarea formatării căii sistemului. Atunci am decis că trebuie să mă uit la documentația pentru proiectele care au fost publicate anterior. Am realizat imediat cât timp am pierdut și am fost imediat condus la variabila platformă. Odată cu aceasta, am reușit să implementez comenzi de așteptare specifice sistemului de operare aproape imediat, spre deosebire de zilele în care mi-a trebuit să cobor împreună soluția mea anterioară.

În această perioadă de proiectare a început lucrarea la aspectul electric și am suspendat lucrul la acest aspect al codului. Intenția este de a afla cum interacționează motoarele noastre cu arduino.

2. Lucrul în jurul Arduino (C ++)

Pe măsură ce lucrul cu panoul nostru a devenit din ce în ce mai complex, am aflat că arduino-ul era incapabil de multithreading. Aceasta a fost o cheie mare în designul meu original de cod și, după ce am citit mai multe despre limitările prezentate cu controlerul nostru, am aflat că va trebui să programez modul în care arduino ar trece între cele două. Aceasta a devenit punctul central al eforturilor mele pe măsură ce termenul nostru se apropia. A trebuit să scot porțiuni mari din scriptul meu original, deoarece acestea au fost concepute pentru a scrie date într-un fișier sincron cu controlerul motorului care citește fișierul. Aceasta trebuia să permită o funcție de așteptare pentru a vă asigura că, chiar dacă utilizatorul ar fi în fața sertarului nostru, nu ar strica proiectul.

Am decis ca funcția de așteptare să fie salvată, dacă nu este implementată în același mod ca înainte. Pentru a face acest lucru, am creat un vector de tablouri. Acest lucru mi-a permis să nu păstrez spiritul designului meu anterior relativ intact, ci a însemnat și că nu trebuia să-mi urmăresc locul în fișier, nici pentru citire, nici pentru scriere. În schimb, acum tot ce trebuia să fac era să adaug pur și simplu o nouă valoare în vectorul meu dacă utilizatorul se deplasa (testarea preliminară era mai mică de 1% din diferența de dimensiune a pânzei, atât în x, cât și în ultima poziție înregistrată, rezultând nicio înregistrare a datelor). Aș putea apoi să iau cea mai veche valoare din vectorul meu și dintr-o singură lovitură, să o trimit la controlul motorului, să o scriu în fișierul nostru și apoi să o scot din vectorul meu. Acest lucru mi-a curățat multe dintre preocupările mele cu privire la un flux IO constant care rulează.

Pasul 9: electric

Image
Image
Electric
Electric

În timp ce am urmat un curs de electronică în trecut și am lucrat o cantitate echitabilă cu arduino-uri. Nu m-am adâncit niciodată adânc în a face ca arduino să primească informații dintr-o sursă externă (myo), am experiență doar să transmit informații prin arduino. Cu toate acestea, am luat cablul motoarelor de pe drawbot-ul nostru și am lucrat la cod pentru ca acestea să poată lucra cu codul myo.

Materiale pe care le-am folosit:

2 x motoare pas cu pas

1 x panou de pâine

1 x Arduino (Uno)

2 x driver IC L293DE

40 x fire jumper

2 x ventilatoare

1. Conectarea motoarelor pas cu pas și a ventilatorului la placa de panouri

Urmând schema de circuite, putem conecta un motor pas cu pas la driverul de pe panou. Apoi, urmând aceeași diagramă, aplicați celui de-al doilea driver și motor, cu toate acestea, firele jumper vor trebui conectate la un set diferit de pini din arduino (deoarece primul motor ocupă spațiul altor 4).

Avertisment / Sfat:

Driverele sunt foarte mici, iar știfturile sunt foarte apropiate. Ar fi înțelept să distanți cei doi șoferi, astfel încât firele să nu devină confuze.

Următorul este să conectați ventilatoarele. Acest lucru este destul de simplu, ventilatoarele pe care le aveam disponibile erau ventilatoare de bază ale procesorului computerului, care au un aspect pozitiv și solid. Conectați-i pe acești doi în pinii lor +/- de pe panoul de măsurare și înclinați-i pe fiecare spre fiecare driver. (Am constatat că, deoarece motoarele pas cu pas primesc explozii de informații și comenzi pe o perioadă lungă de timp, driverele tind să se supraîncălzească și să miroasă. Adăugarea unui ventilator pentru răcire a rezolvat această problemă).

2. Cod Arduino

Aceasta este partea ușoară!

Deschideți ID-ul Arduino, accesați fila „Fișier”, apoi treceți la fila „exemplu”, care va cădea și mai departe și vă va arăta o filă „pas cu pas” Apoi doriți să deschideți „Stepper_OneStepAtATime”

Aceasta va preîncărca un exemplu de cod care este aproape plug-and-play la cablajul arduino / motor. Va trebui să facem mici ajustări pentru că vom folosi două motoare, pe care le voi arăta mai jos. De asemenea, poate fi necesar să faceți ajustări minore în funcție de pinii pe care ați decis să îi utilizați, deoarece ID-ul Arduino este implicit la pinii 8-11.

Codul pe care l-am folosit pentru a face cele două motoare să se deplaseze în „sincronizare” este mai jos:

//#include

const int stepsPerRevolution = 200;

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

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

int stepCount = 0;

void setup () {// inițializează portul serial: Serial.begin (9600); }

bucla nulă () {

myStepper1.step (1);

Serial.print ("pași:");

Serial.println (stepCount);

stepCount ++;

întârziere (0,5);

myStepper2.step (1); întârziere (0,5); }

3. Probleme posibile

Problemele pe care le-am întâmpinat în timpul acestui proces nu au fost folosirea exemplului de cod corect, folosirea unui cablu jumper defect, folosirea IC-ului driverului greșit.

Asigurați-vă că șoferul pe care îl utilizați este capabil să controleze un motor

Verificați numărul de serie și verificați specificațiile acestuia

M-am confruntat cu o problemă de a avea un cablu mort, care a făcut ca motoarele mele să se învârtă ciudat

A trebuit să folosesc un multimetru pentru a verifica fiecare fir

Și verificați întotdeauna din nou codul pentru erori mici, cum ar fi lipsa unui capăt „;” comanda

Pasul 10: Mecanic

Mecanic
Mecanic
Mecanic
Mecanic
Mecanic
Mecanic
Mecanic
Mecanic

1. Material

Pentru modelul complet de producție a brațelor, se recomandă ca acestea să fie fabricate dintr-un material puternic, dar ușor, am considerat că aluminiul se potrivește perfect.

Am folosit foi de aluminiu de calibru 032 tăiate la 9,125 "x 17,5" și am trasat modelul din desenul prezentat în pasul anterior.

2. Fabricare

Folosind hemmerul (mașina albastră) am adăugat tivuri orientate spre direcții opuse, astfel încât atunci când piesa este ruptă și pliată, cele două tivuri s-ar interbloca formând o singură piesă completă.

Pentru curbele mari am folosit tennismitul, datorită preciziei sale ridicate.

Acum, pentru curbele mai mici, veți dori să utilizați o mașină cu un picior mai mic, aici intră o mașină ca roto-die. Din cauza piciorului său mai mic, permite efectuarea unor pauze mai mici, din păcate., roto-die la dispoziția noastră era încă prea mare pentru șina noastră și a fost deformată.

** Alternativ, dacă nu aveți acces la echipamentele sau instrumentele corespunzătoare, atunci se poate face un substitut. **

În cazul nostru, ne-am tăiat brațele de pe șinele panourilor solare din aluminiu folosind un tăietor cu plasmă și am măcinat capetele netede, apoi le-am înșurubat spate în spate pentru a face un sistem de șine cu două fețe. În mod ideal, am dori să sudăm șinele împreună, cu toate acestea, fără acces la o stație de sudare, am prins în loc șinele și le-am forat, apoi le-am înșurubat. Dar dacă se ia această cale, atunci trebuie să se acorde o atenție deosebită folosirii unei piulițe de blocare și a unei șaibe pentru a se asigura că piesa are o flexibilitate cât mai mică.

3. Centura

Pentru curele am folosit câteva curele vechi de imprimantă 3D pe care am putut să le salvăm.

Curelele nu erau suficient de lungi inițial, așa că folosind niște tuburi termocontractibile am combinat două bucăți pentru a face una care să fie suficient de lungă.

Angrenajele verzi și diblurile din lemn au fost înlocuite cu rulmenți cu discuri, cu șaibe extra largi, utilizate pentru a împiedica alunecarea curelei din loc.

4. Transport

Și, în cele din urmă, trăsura a fost realizată dintr-o foaie de aluminiu 032 de 5 "x 5", cu găuri presate acolo unde se intenționează șuruburile și șaibele corespunzătoare. Distanța va varia în funcție de cât de lată este șina și de cât de mult spațiu aveți la șaibe.

Pasul 11: Reflecții

Din păcate, fiecare parte a proiectului nostru a intrat în marea baricadă a timpului și nu am reușit să ne finalizăm proiectarea până la data țintă. Fiecare membru al echipei noastre a ajuns să colaboreze în celelalte aspecte ale designului nostru, cel puțin într-o oarecare măsură, ducând la unele scufundări ale curbei de învățare. Acest lucru, împreună cu dorința de a proiecta un produs cu resurse externe cât mai puține (așa cum am vrut cu toții să creăm piesele noastre de la zero), duc la o cantitate mare de roți reinventate.

Toți cei care au lucrat la proiect au aflat mai multe despre celelalte aspecte ale proiectului. A face ca software-ul să facă o acțiune specifică este un lucru, apoi să faci ca software-ul să funcționeze împreună cu hardware-ul este altul. Aș spune că este important ca oricine lucrează la aspectul de codificare al acestui proiect să fie la fel de familiar ca și programatorul nostru de codificare.

În general, nu am reușit să realizăm exact ceea ce ne-am dorit. Cu toate acestea, simt că am fost pe drumul cel bun și am descoperit și am învățat cu toții noi concepte pe care le vom putea aplica pentru proiectele viitoare.

Recomandat: