Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Avenger Assembled:Iron Man Helmet &Arc Reactor

Componenten en benodigdheden

Arduino UNO
× 1
Adafruit NeoPixel Ring:WS2812 5050 RGB LED
× 1
Adafruit Capacitive Touch Sensor Breakout - MPR121
× 1
Servo's (Tower Pro MG996R)
× 1
4xAA-batterijhouder
× 1
9V batterijclip
× 1
Jumperdraden (algemeen)
× 1

Benodigde gereedschappen en machines

3D-printer (algemeen)
We gebruikten een Lulzbot Mini die al meer dan 1 jaar perfect werkt (behalve onze flexystruderkop die nooit gewerkt :( )

Apps en online services

Arduino IDE
Autodesk Netfabb
fritzing

Over dit project

Avenger Assembled:3D-geprinte en Arduino-gestuurde Iron Man-helm en boogreactor.

Inleiding en motivatie:

Mijn motivatie achter het maken van deze helm begon met mijn allereerste helm die ik ooit heb gemaakt. Het was een kartonnen Antman-helm uit een paar video's die ik online vond. Het was echt cool (omdat ik een grote Marvel-fan ben), dus besloot ik dat ik echt een Iron Man-helm wilde maken. Ik was net naar de National Maker Faire in Washington D.C. geweest en iedereen was dol op de Antman-helm. Dit motiveerde me nog meer om de Iron Man te maken. Ik heb verschillende prototypes doorlopen, te beginnen met een andere helm van karton. Die helm was te klein, dus ik ontwierp mijn eigen helm, deze keer toen ik hem in elkaar zette leek het meer op een bal op mijn hoofd dan die uit de film. Uiteindelijk ging ik naar een papieren model. Dit papieren model zag er fantastisch uit, maar ik kwam nog een probleem tegen. Het papieren model was te dun. Ik probeerde het te repareren, maar het werkte gewoon niet, dus besloot ik de helm in 3D te printen. Ik heb er eindelijk een gemaakt die stabiel genoeg was en ook groot genoeg om op mijn hoofd en een motor te passen.

  • De helm- en boogreactor maken:

De 3D-afdruk:

1) Splitsen in stukjes - software

De eerste stap om deze helm te maken, was het bestand online vinden en vervolgens afdrukken. Het bestand dat ik vond was een gemotoriseerde Iron Man-helm. Het bestand dat ik van thingiverse heb gedownload, bestond uit drie delen:het hoofdgedeelte, de kin en de voorplaat. Omdat alle drie de stukken te groot waren voor de bouwplaat van mijn printer, moest ik software vinden die mijn helm in delen kon snijden. Terwijl ik online keek, vond ik online gratis software genaamd netfabb basic. Ik heb de tool gedownload en mijn bestand ernaar geüpload. Netfabb basic was heel gemakkelijk te gebruiken en ik kon de delen van de helm opknippen. Daarna heb ik het onderdeel afgedrukt op de hoofdhelm, het kinstuk en de gezichtsplaat. Terwijl ik door de afdrukken ging, plakte ik de stukken aan elkaar en controleerde ik of de maat goed was. Toen alle onderdelen klaar waren met printen en 1 ½ rol filament op was, had ik de 24-delige helm.

2) De juiste lijm selecteren

De volgende uitdaging was het vinden van de juiste lijm om de onderdelen aan elkaar te lijmen. Om de lijm te laten werken, moet deze aan drie vereisten voldoen:

  • Het moest de stukken bij elkaar houden met een sterke band,
  • een korte uithardingstijd hebben
  • gemakkelijk te schuren.

We hebben 4 verschillende soorten lijm getest, E6000, JB Weld KwikWeld, JB Weld Plastic Bonder en Loctite Plastic Bonder epoxy. Uiteindelijk hebben we KwikWeld gebruikt omdat het aan alle drie de vereisten voldeed. Om de stukken te bevestigen, zouden de eerste stappen zijn om de zijkanten die gelijmd zouden worden ruwer te maken. Ik gebruikte een vijl om de gladde zijkanten op te ruwen totdat het stuk ruwe zijkanten had met kleine groeven en zakken. Dit zou helpen om het stuk bij elkaar te houden. Vervolgens hebben we de JB KwikWeld met gelijke delen van de verharder en het staal gemengd en gelijkmatig verdeeld over beide vijlzijden en samengeperst. Als je een klem hebt, schuif deze dan in de klem en veeg de overtollige lijm weg. Het duurt ongeveer 10 minuten om te drogen, maar het helpt om het langer te laten staan.

  • 3) Het servomechanisme ontwerpen

De volgende uitdaging bij het maken van de Iron Man-helm was het ontwerpen van het servomechanisme. Omdat ik moeite had om erachter te komen hoe ik de servo aan de helm moest bevestigen met de foto's op de thingiverse-pagina, Ik besloot om mijn eigen te maken. Eerst plande ik uit waar de servo zou komen en mat een rechte lijn van de servo naar de bevestigingsplaats. Toen vermoedde ik de hoek die de servo zou zijn. Het eerste ontwerp was een beetje uit met een te scherpe hoek. De volgende heb ik gerepareerd en het was precies goed. Daarna heb ik de arm in de servo en de bevestigingsplaats geschroefd om te kijken of het paste. Het deed! Ten slotte heb ik een klem ontworpen die om de servo past en heb ik deze uitgeprint. Ik heb alles in elkaar gezet en we hebben de allereerste test gedaan. Het was onstabiel en de voorplaat ging niet helemaal soepel en gelijkmatig omhoog. Om dit probleem op te lossen, heb ik een metalen kleerhanger in een rechthoekige vorm gebogen en in de sleuven geplaatst waar het 3D-geprinte onderdeel moest komen. Toen ontwierp ik clips om onder de kleerhanger te gaan om te voorkomen dat hij valt. Ik heb met een ijzerzaag gleuven in de bovenkant van de helm gesneden en alles weer in elkaar gezet. We hebben het voor de tweede keer geprobeerd en het werkte prima!

4) Montage en schilderen

Eindelijk was het klaar om te schilderen. Ik heb alles uit elkaar gehaald en de eerste witte grondlaag aangebracht. Toen de primer klaar was, maskeerde ik een deel van het kinstuk af met schilderstape en schilderde ik de helm rood. Voor de voorplaat heb ik het helemaal goud geverfd. Omdat het goud snel droogt, was het snel klaar, maar de rode verf droogt erg langzaam, dus ik liet het drogen. Nadat alle onderdelen droog waren, nam ik de tape van het kinstuk en maskeerde alles in de buurt van het stuk dat nog wit was. Daarna gebruikte ik aluminiumfolie en plakte het om de rest van de helm. Toen schilderde ik het witte deel goud en wachtte tot dat droog was. Daarna heb ik de helm weer weer in elkaar gezet en zet alles op een rijtje. Toen deed ik de laatste test en het werkte!

5) De boogreactor:

Het maken van de boogreactor was de volgende. Ik heb eerst de grootte van de neo-pixelring gemeten en een hoesje ontworpen om het vast te houden. Vervolgens heb ik voor het deksel een ontwerp van iemand op thingiverse gebruikt en het aangepast aan mijn behoeften. Je kunt het originele model hier vinden:http://www.thingiverse.com/thing:33021 Het nieuwe ontwerp had bijna exact dezelfde kenmerken, hoewel sommige delen een beetje buiten proportie zijn. Ik heb de behuizing en de bovenkant uitgeprint en ze passen redelijk goed. Het enige probleem was dat de Neopixel te klein was voor de behuizing. het bleek dat ik mijn berekeningen verkeerd had gedaan, dus ging ik terug en veranderde dat. Deze keer paste het. Vervolgens voegde ik twee gaten toe voor de draden om door te gaan en een staaf aan de bovenkant om het touwtje in te gaan, zodat ik het om mijn nek kon dragen. Ten slotte heb ik een defuser toegevoegd die is gemaakt van doorschijnend abs-filament dat goed in de behuizing past. Het printgedeelte was eindelijk klaar!

De elektronica:

Toen de 3D-print eenmaal klaar was, wisten we dat we een geweldig platform hadden om wat elektronica in te bedden. Voor dit project willen we graag 1 servomotor aansturen die op de frontplaat van de helm is bevestigd. Ook zouden we graag een Neopixel ring in de Arc Reactor aansturen. We gebruikten een Arduino Uno als basis voor het besturingssysteem voor dit project. Er zijn echter tal van andere soorten borden die ook kunnen worden gebruikt en om deze reden hebben we de software en hardware generiek gehouden. In feite hebben we in dit project zowel een Uno als een Arduino101 door elkaar gebruikt. Dit zorgt ook voor toekomstige uitbreiding en het potentieel om een ​​verbonden helm te maken met de BLE aan boord van de 101!

Iron Man moet de servomotor van de helm en de neopixelring van de boogreactor aansturen. We gebruikten de MPR121 ADAFRUIT 12-KEY CAPACITIVE TOUCH SENSOR BREAKOUT om een ​​op aanraking gebaseerde interface te bieden. Dit breakout-bord maakt 12 verschillende ingangen mogelijk en communiceert met de Uno via I2C. De 12 contacten laten voldoende ruimte over voor toekomstige uitbreiding en I2C maakt deel uit van de standaard IDE-pakketten voor de Arduino-familie, waardoor we kaarten kunnen uitwisselen zonder herprogrammering. Het is goed gedocumenteerd en de meegeleverde softwarevoorbeelden maken het gemakkelijk om te begrijpen hoe het te gebruiken in onze schets.

We bevestigden draden met blote uiteinden om te werken met onze capacitieve aanraakschakelaars. Hoewel we geen traditionele "switch bounce" zien zoals die wordt waargenomen met mechanische schakelaars, genereert een enkele aanraking meerdere hits als de loop() in de arduino-schets peilt het bord. Om te voorkomen dat de servo "klappert" als reactie op deze hits, hebben we een softwarevertragingsmechanisme van 1/4 seconde geïmplementeerd bij het lezen van aanrakingen. Na het testen van de Uno en MPR121 hebben we de servomotor en voedingen toegevoegd.

Rekening houdend met het gebruik van een servomotor onder belasting en de wens om dit project op de 2016 NYC Maker Faire "in het veld te implementeren", is een van de belangrijkste overwegingen van dit project de stroomvoorziening. Er is ons verteld dat het ontwerp van de voeding een van de belangrijkste, maar minst glamoureuze gebieden van elektrotechniek is. We zijn geen van beiden elektrotechnisch ingenieur, dus de oplossing die we bedachten was een combinatie van wat we lazen dat zou werken, wat we begrepen, wat we beschikbaar hadden en wat we aan het werk gingen. We beweren dus niet dat dit de beste oplossing is en kijken uit naar suggesties voor verbeteringen.

Vanwege de belasting van de servo, het potentieel voor back-emf en de aanbevelingen van https://www.arduino.cc/en/Reference/Servo, hebben we ervoor gekozen om de servo apart van de Uno van stroom te voorzien. De voeding en aarde van de servomotor waren verbonden met de voeding en aarde van een 4XAA-batterijpakket. Heel belangrijk is dat de aarde van de Uno, de servo en het batterijpakket allemaal moeten worden aangesloten om het circuit te voltooien. We doen dit door de grondrail van het Perma-Proto-bord, het 4XAA-batterijpakket en een draad van de aardingspin van de Uno met elkaar te verbinden, zoals te zien is in het onderstaande Fritzing-schema.

Oorspronkelijk hadden we ook de Neopixel-ring die ook werd gevoed door het 4XAA-batterijpakket. We hebben dit veranderd omdat er wat "klapperen" van de servo leek te zijn wanneer de Neopixel-ring werd in- en uitgeschakeld. Dit kan echter te wijten zijn aan bijna lege batterijen op het moment dat we aan het testen waren. Helaas merkten we dit de avond voor de Maker Faire en zaten we al op de Perma-Proto. We hebben besloten om de Neopixel Ring rechtstreeks op de Uno aan te sluiten en tegelijkertijd over te schakelen op nieuwe batterijen. Dit loste het probleem op, maar beantwoordde de vraag niet. Misschien zullen we dit nastreven terwijl we eraan werken om het project in de toekomst te verbeteren.

Het hele circuit werd geprototypeerd op een breadboard en vervolgens eenvoudig verplaatst naar een Adafruit ¼ Perma-Proto-bord. Met een veilige behuizing is dit een van de eenvoudigste manieren om snel een inzetbaar pakket voor uw project te maken. We hebben een aangepaste behuizing ontworpen en geprint in blauw HIPS-filament, zoals hieronder te zien is. De hele unit met batterijen was verpakt in een cameratas voor de Maker Faire!

De software:

Er zijn momenteel 2 versies van de schets, IronMan02.ino en IronMan04.ino . Beide werken met de hardwareconfiguratie zoals beschreven in dit artikel.

De eerste, IronMan02.ino is de "get-it-done"-versie die volgt in de geest van, "Perfectie is de vijand van voltooiing." We hadden een deadline die we moesten halen en deze versie, hoewel niet elegant, heeft de klus geklaard. In deze versie zul je zien dat we objecten hebben gemaakt die de helm en boogreactor vertegenwoordigen. Dit werd gedaan in afwachting van de implementatie van multitasking op de Arduino in toekomstige versies, dus het was geen complete haastklus. We kunnen het lezen van de serie van drie artikelen over arduino-multitasking door Bill Earl van Adafruit ten zeerste aanbevelen. Onze code is gebaseerd, vooral IronMan04.ino, is gebaseerd op de voorbeelden, ideeën en aanbevelingen uit deze set van 3 tutorials. Deze artikelen brengen je verder dan de basisprincipes van Arduino-programmering en zorgen ervoor dat je projecten echt van de grond komen!

Een probleem dat we tegenkwamen, was dat de voorplaat te snel open en dicht ging. We hebben dit opgelost door de delay() . te gebruiken functie om de beweging van de voorplaat te vertragen en glad te strijken. Ja, als Dr. Reallyevilbadguy op het punt staat Iron Man in het gezicht te schieten met zijn superdoodlaser, wil je dat de helm snel sluit, maar voor demonstratiedoeleinden ziet de langzamere, vloeiendere beweging er veel beter uit.

// zet de helm omhoog, 1/4 seconde tijdsblok om chatten/stuiteren op de aanraakkap te voorkomen. switch void up() { if((millis() - lastSwitched)> 250) { lastSwitched =millis(); if (!helmetUp int currPos =0; while(currPos  

Het probleem met het gebruik van de delay() functie is dat de microcontroller niets anders kan doen tijdens de delay() . We hebben dit probleem opgelost met behulp van de richtlijnen in de adafruit-tutorials hierboven in de tweede versie, IronMan04.ino .

De tweede versie, IronMan04.ino , bevat 2 belangrijke elementen die we wilden implementeren, maar die we vóór de Maker Faire te weinig tijd hadden om te bereiken:

  • Bediening met één knop/aanraakscherm
  • Multitasken

Toen we met mensen spraken over ons eerste project, was de reactie van iedereen:je zou maar één knop/aanraaksensor moeten hebben om de helm op en neer te bewegen. We konden het niet meer eens zijn en besloten dit te implementeren toen we tijd hadden. Onze oplossing omvat het gebruik van verschillende toestandsvariabelen:

  • omdraaien - om de staat van de voorplaat te behouden
  • omdraaien - om aan te geven of de voorplaat momenteel van positie verandert
  • directioneel - om aan te geven dat de voorplaat omhoog of omlaag wordt verplaatst

In setup() , we starten de helm altijd in de open of up configuratie. Dit is niet absoluut noodzakelijk. Ongeacht de aanvankelijke staat, zal het wisselen van de voorplaatschakelaar u bij de tweede druk in de juiste staat brengen. We hebben de code echter geschreven om er rekening mee te houden dat de oorspronkelijke staat van de voorplaat omhoog is, en daarom is er in het begin geen verspilde druk op de knop. Is dit de beste manier? We weten het niet zeker, maar aangezien enkele van de grootste wetenschappelijke geesten vele jaren aan controletheorie hebben gewerkt, denk ik dat we het goed hebben gedaan met dit project!

Aangezien we in de loop naar aanrakingen van de MPR121 peilen, zal één door de gebruiker waargenomen aanraking veel aanrakingssignalen genereren. Dit is vergelijkbaar met de traditionele switch bounce en doen we door middel van software. We willen een snelle reactie op de aanraaksensor en we willen multitasking implementeren, dus in plaats van meerdere aanrakingen te blokkeren in de schakelaar/case van de loop() functie plaatsen we een timingblok met de millis() functie in de Helm en ArcReactor objecten, zoals te zien in dit codefragment van de Helmet voorwerp:

void flipFaceplate() { // timing block om te beschermen tegen chatter/bounce if ((millis()-lastFlipped)> 500) { . . . 

Nogmaals, door de delay() . niet te gebruiken functie behouden we multitasking in ons project. Het is misschien verstandiger om een ​​variabele te gebruiken voor het vertragingsinterval van 500 milliseconden om wijzigingen en testen mogelijk te maken, maar we hebben het goed gedaan met onze tweede schatting van 500 en waren hier gewoon een beetje slordig.

Om de servo soepel door zijn rotatiehoek te vegen, moesten we de rotatie van de servo's langzaam verhogen. Door een tijdblok op de hoekstap van de servomotor te plaatsen door de huidige tijd te controleren met de millis() functie:

void Update() { if ( flipping &(millis()-lastMoved)>=15) { lastMoved =millis(); if (directionaliteit ==UP) { currentPos =currentPos + 3; } else { currentPos =currentPos - 3; } Serial.print("huidige positie:");Serial.print(currentPos); helmServo.write(currentPos); } if ((currentPos>=upAngle) || (currentPos <=downAngle)) { flipping=false; } }}; 

We hebben dit wederom geïmplementeerd zonder de delay() functie. Als je dit project bouwt en goed kijkt, zul je merken dat met IronMan04.ino op de Uno, je de voorplaat kunt omdraaien en de Neopixel tegelijkertijd aan en uit kunt zetten. Met de IronMan02.ino, de delay() zorgt ervoor dat het wordt geblokkeerd totdat de servo klaar is met bewegen. Bedankt Bill Earl!

Deze laatste regel van de update-functie controleert of we de bovenste of onderste positie van de frontplaat niet overschrijden, aangezien de loop() functie roept Update() . aan het zal dit voortdurend controleren na de laatste beweging van de helm en vervolgens de flippen . instellen variabel op onwaar om aan te geven dat de voorplaat klaar is met omhoog of omlaag bewegen. Bij de volgende cyclus door, met omdraaien false, de hele functie wordt in wezen overgeslagen.

 if ((currentPos>=upAngle) || (currentPos <=downAngle)) { flipping=false; } 

Toekomstige richtingen:

Er zijn zoveel dingen die we met dit project kunnen doen, we weten niet precies waar we moeten beginnen! Gloeiende ogen is één. Misschien BLE-connectiviteit toevoegen met de arduino101? Een spraakinterface? Jarvis pleit hier zeker voor!

Code

Iron Man-helm en Arc Reactor-project!
https://github.com/lachendeKatze/Iron-Man

Schema's


Productieproces

  1. Mangatdeksel
  2. Kledingstrijkijzer
  3. Gietijzeren kachel
  4. Voetbalhelm
  5. IJzer
  6. Batterij
  7. UnifiedWater v1
  8. Iron Man
  9. Arduino Power
  10. Intel Arduino 101 BLE Blynk Tank
  11. Smeedijzer begrijpen