Construa seu Próprio Capacete e Reator Arc do Homem de Ferro com Arduino – Guia Passo a Passo
Componentes e materiais
| Componente | Quantidade |
|---|---|
| Arduino UNO | 1 |
| Anel NeoPixel Adafruit: WS2812 5050 RGB LED | 1 |
| Sensor de Toque Capacitivo Adafruit MPR121 | 1 |
| Servos (Tower Pro MG996R) | 1 |
| Suporte para 4 pilhas AA | 1 |
| Conector para bateria 9V | 1 |
| Fios jumper (genéricos) | 1 |
Ferramentas necessárias
- Impressora 3D (genérica) - Usamos uma Lulzbot Mini que funcionou perfeitamente por mais de 1 ano (exceto nosso flexystruder que nunca funcionou :( )
Aplicativos e serviços online
- Arduino IDE
- Autodesk Netfabb
- Fritzing
Sobre o projeto
Vingadores Unidos: Capacete e Reator Arc do Homem de Ferro Impressos em 3D e Controlados por Arduino
Introdução e Motivação
Minha motivação para fazer este capacete começou com meu primeiro capacete, que já fiz. Era um capacete do Homem-Formiga de papelão de alguns vídeos que encontrei online. Era realmente legal (sendo um grande fã da Marvel), então decidi que realmente queria fazer um capacete do Homem de Ferro. Eu tinha acabado de ir à National Maker Faire em Washington D.C. e todos adoraram o capacete do Homem-Formiga. Isso me motivou ainda mais a fazer o do Homem de Ferro. Passei por vários protótipos, começando com outro capacete de papelão. Aquele capacete era muito pequeno, então projetei o meu próprio, mas quando montei, parecia mais uma bola na minha cabeça do que o do filme. Finalmente, fui para um modelo de papel. Este modelo de papel ficou fantástico, mas encontrei mais um problema. O modelo de papel era muito frágil. Tentei consertar, mas não funcionou, então decidi imprimir o capacete em 3D. Finalmente, fiz um que era estável o suficiente e também grande o suficiente para caber minha cabeça e um motor.
A Impressão 3D
1) Dividindo em peças - software
O primeiro passo para criar este capacete foi encontrar o arquivo online e imprimi-lo. O arquivo que encontrei era de um capacete motorizado do Homem de Ferro. O arquivo que baixei do Thingiverse vinha em três peças: a parte principal, o queixo e a viseira. Como todas as três peças eram grandes demais para a mesa da minha impressora, precisei encontrar software que pudesse cortar meu capacete em partes. Procurando online, encontrei software gratuito chamado Netfabb Basic. Baixei a ferramenta e carreguei meu arquivo nela. O Netfabb Basic era muito fácil de usar e consegui cortar as partes do capacete. Então imprimi as partes do capacete principal, peça do queixo e viseira. Durante as impressões, eu prendia as peças com fita adesiva e verificava se o tamanho estava bom. Quando todas as peças terminaram de imprimir e 1 rolo e meio de filamento foram usados, eu tinha o capacete de 24 peças.
2) Selecionando o adesivo adequado
O próximo desafio foi encontrar o adesivo certo para colar as peças. Para a cola funcionar, ela teria que atender a três requisitos:
- Segurar as peças com uma ligação forte
- Ter tempo de cura rápido
- Ser fácil de lixar
Testamos 4 tipos diferentes de cola: E6000, JB Weld KwikWeld, JB Weld Plastic Bonder e Loctite Plastic Bonder epóxi. Acabamos usando KwikWeld porque atendia a todos os três requisitos. Para prender as peças, o primeiro passo seria rugosificar os lados que seriam colados. Usei uma lixa para rugosificar os lados lisos até que a peça tivesse lados rugosos com pequenas ranhuras e bolsões. Isso ajudaria a peça a grudar. Então misturamos o JB KwikWeld junto com partes iguais do endurecedor e do aço e espalhamos uniformemente em ambos os lados lixados e pressionamos juntos. Se você tiver uma braçadeira, coloque nela e limpe o excesso de cola. Leva cerca de 10 minutos para secar, mas ajuda a deixar mais tempo que isso.
3) Projetando o mecanismo do servo
O próximo desafio na fabricação do capacete do Homem de Ferro foi projetar o mecanismo do servo. Como eu estava lutando para descobrir como prender o servo ao capacete com as fotos na página do Thingiverse, decidi fazer o meu próprio. Primeiro, planejei onde o servo ficaria e medi uma linha reta do servo ao local de fixação. Então estimei o ângulo que o servo teria. O primeiro projeto estava um pouco fora com um ângulo muito agudo. O próximo corrigi e ficou quase certo. Então aparafusei o braço no servo e no local de fixação para ver se encaixava. Encaixou! Finalmente, projetei uma braçadeira para caber ao redor do servo e imprimi. Montei tudo e fiz o primeiro teste. Era instável e a viseira não subia totalmente de forma suave e igual. Para corrigir, dobrei um cabide de metal em forma retangular e coloquei nos slots onde a peça impressa em 3D deveria ir. Então projetei clipes para ir sob o cabide para impedir que caísse. Cortei slots no topo do capacete com uma serra e montei tudo de novo. Tentamos pela segunda vez e funcionou muito bem!
4) Montagem e Pintura
Finalmente, estava pronto para pintar. Desmontei tudo e dei a primeira camada de primer branco. Uma vez que o primer secou, mascarei parte da peça do queixo com fita de pintor e pintei o capacete de vermelho. Para a viseira, pintei toda de dourado. Como o dourado seca rápido, logo terminou, mas a tinta vermelha seca muito devagar, então deixei secar. Depois que todas as peças secaram, tirei a fita da peça do queixo e mascarei tudo perto da parte que ainda estava branca. Então usei papel alumínio e coloquei ao redor do resto do capacete. Então pintei a parte branca de dourado e esperei secar. Então montei o capacete novamente e juntei tudo. Então fiz o teste final e funcionou!
5) O Reator Arc
Fazer o reator arc foi o próximo. Primeiro medi o tamanho do anel neo-pixel e projetei uma caixa para segurá-lo. Para a tampa, usei um design de alguém no Thingiverse e modifiquei para minhas necessidades. Você pode encontrar o modelo original aqui: Thingiverse 33021. O novo design tinha quase as mesmas características, embora algumas partes estejam um pouco fora de proporção. Imprimi a caixa e a tampa e encaixaram bem. O único problema era que o Neopixel era muito pequeno para a caixa. Acontece que fiz meus cálculos errados, então voltei e corrigi. Dessa vez encaixou. Em seguida, adicionei dois furos para os fios passarem e uma barra no topo para a corda passar para que eu pudesse usar no pescoço. Finalmente, adicionei um difusor feito de filamento ABS translúcido que encaixou perfeitamente na caixa. A parte de impressão finalmente terminou!
A Eletrônica
Uma vez que a impressão 3D terminou, sabíamos que tínhamos uma ótima plataforma para embutir eletrônica. Para este projeto, gostaríamos de controlar 1 motor servo que está preso à viseira do capacete. Também gostaríamos de controlar um anel Neopixel no Reator Arc. Usamos um Arduino Uno como base do sistema de controle para este projeto. No entanto, existem numerosos outros tipos de placas que poderiam ser usadas também e mantivemos o software e hardware genéricos por esse motivo. Na verdade, usamos tanto um Uno quanto um Arduino 101 intercambiavelmente neste projeto. Isso também permitirá expansão futura e o potencial de fazer um capacete conectado com o BLE onboard do 101!
O Homem de Ferro precisará acionar o motor servo do capacete e o anel neopixel do reator arc. Usamos o MPR121 ADAFRUIT 12-KEY CAPACITIVE TOUCH SENSOR BREAKOUT para fornecer uma interface baseada em toque. Esta placa breakout permite 12 entradas diferentes e comunica com o Uno usando I2C. Os 12 contatos deixam bastante espaço para expansão futura e I2C faz parte dos pacotes padrão da IDE para a família Arduino, nos dando a capacidade de trocar placas sem reprogramar. É bem documentado e os exemplos de software fornecidos tornam fácil entender como usá-lo em nosso sketch.
Conectamos fios com pontas descobertas para atuar como nossos interruptores de toque capacitivo. Embora não vejamos o tradicional "bounce" de interruptor como observado com interruptores mecânicos, um único toque gerará múltiplos acionamentos conforme o loop() no sketch do Arduino faz polling na placa. Para evitar o servo "chiando" em resposta a esses acionamentos, implementamos um mecanismo de atraso de software de 1/4 de segundo ao ler toques. Após testar o Uno e MPR121, adicionamos o motor servo e fontes de alimentação.
Levando em consideração o uso de um motor servo sob carga e o desejo de "implantar em campo" este projeto na NYC Maker Faire 2016, uma das considerações mais importantes deste projeto é a fonte de alimentação. Disseram-nos que o design de fonte de alimentação é uma das áreas mais importantes, mas menos glamorosas, da engenharia elétrica. Nenhum de nós é engenheiro elétrico, então a solução que encontramos é uma combinação do que lemos que funcionaria, o que entendemos, o que tínhamos disponível e o que funcionou. Então não reivindicamos que esta é a melhor solução e aguardamos sugestões de melhorias.
Devido à carga colocada no servo, o potencial para contra-EMF e as recomendações de Arduino Servo Reference, escolhemos alimentar o servo separadamente do Uno. A alimentação e terra do motor servo foram conectados à alimentação e terra de um pacote de baterias 4XAA. Muito importante: o terra do Uno, do servo e do pacote de baterias devem todos ser conectados para completar o circuito. Fazemos isso conectando o trilho de terra da placa Perma-Proto, o pacote de baterias 4XAA e um fio do pino de terra do Uno todos juntos, como pode ser visto no esquemático Fritzing abaixo.
Originalmente também tínhamos o anel Neopixel sendo alimentado do pacote de baterias 4XAA. Mudamos isso pois parecia haver algum "chiado" do servo quando o anel Neopixel era ligado e desligado. Isso, no entanto, pode ter sido devido a baterias fracas na época do teste. Infelizmente notamos isso na véspera da Maker Faire e já estávamos na Perma-Proto. Decidimos ligar o Anel Neopixel diretamente ao Uno e trocar para baterias novas ao mesmo tempo. Isso resolveu o problema, mas não respondeu a pergunta. Talvez, à medida que trabalhamos para melhorar o projeto no futuro, buscaremos isso.
O circuito inteiro foi prototipado em uma protoboard e então simplesmente movido para uma placa Adafruit ¼ Perma-Proto. Com um invólucro seguro, esta é uma das maneiras mais simples de criar rapidamente um pacote implantável para seu projeto. Projetamos e imprimimos um invólucro personalizado em filamento HIPS azul, visto abaixo. A unidade toda com baterias foi embalada em uma caixa de câmera para a Maker Faire!
O Software
Atualmente existem 2 versões do sketch, IronMan02.ino e IronMan04.ino. Ambos funcionarão com a configuração de hardware descrita neste artigo.
A primeira, IronMan02.ino, é a versão "faça acontecer" que segue o espírito de "A perfeição é inimiga da conclusão." Tínhamos um prazo a cumprir e esta versão, embora não elegante, fez o trabalho. Nesta versão, você verá que criamos objetos para representar o Capacete e o Reator Arc. Isso foi feito na expectativa de implementar multitarefa no Arduino em versões futuras, então não foi um trabalho totalmente apressado. Recomendamos fortemente ler a série de três artigos sobre multitarefa no Arduino por Bill Earl da Adafruit. Nosso código é baseado, especialmente IronMan04.ino, nos exemplos, ideias e recomendações deste conjunto de 3 tutoriais. Estes artigos levarão você além do básico da programação Arduino e permitirão que seus projetos realmente decolarem!
Um problema que enfrentamos foi que a viseira abria e fechava muito rápido. Resolvemos isso usando a função delay() para desacelerar e suavizar o movimento da viseira. Sim, se o Dr. Realmentemauvilão está prestes a explodir o Homem de Ferro na cara com seu super laser da morte, você quer que o capacete feche rápido, mas para fins de demonstração o movimento mais lento e suave fica muito melhor.
// mover capacete para cima, bloco de tempo de 1/4 segundo para evitar chiado/bounce no switch capacitivo
void up() {
if((millis() - lastSwitched) > 250 ) {
lastSwitched = millis();
if (!helmetUp) {
int currPos = 0;
while( currPos < upAngle ) {
helmetServo.write(currPos);
currPos = currPos + 2;
delay(20); // delay(20) bloqueia toda atividade do processador por 20 milissegundos!
}
helmetUp = true;
} else {/* não faz nada, capacete já está levantado*/}
}
}
O problema com o uso da função delay() é que o microcontrolador não pode fazer mais nada durante o delay(). Resolvemos este problema usando a orientação nos tutoriais da Adafruit acima na segunda versão, IronMan04.ino.
A segunda versão, IronMan04.ino, inclui 2 elementos principais que queríamos implementar, mas ficamos sem tempo tentando realizar antes da Maker Faire:
- Controle da viseira com um botão/toque
- Multitarefa
Quando conversamos com pessoas sobre nosso projeto inicial, a reação de todos foi: você deveria ter apenas um botão/sensor de toque para mover o capacete para cima e para baixo. Não podíamos concordar mais e decidimos implementar isso quando tivéssemos tempo. Nossa solução envolve usar várias variáveis de estado:
- flip - para manter o estado da viseira
- flipping - para indicar se a viseira está atualmente mudando de posição
- directionality - para indicar mover a viseira para cima ou para baixo
No setup(), sempre começamos o capacete na configuração aberta ou levantada. Isso não é absolutamente essencial. Independentemente do estado inicial, alternar o interruptor da viseira o levará ao estado correto na segunda pressão. No entanto, escrevemos o código levando em conta que o estado inicial da viseira é levantado, e portanto não há pressionamento de botão desperdiçado no início. É a melhor maneira? Não temos certeza, mas como algumas das maiores mentes científicas passaram muitos anos trabalhando em teoria de controle, acho que nos saímos bem com este projeto!
Como fazemos polling para toques do MPR121 no loop, um toque percebido pelo usuário gerará muitos sinais de toque. Isso é semelhante ao bounce tradicional de interruptor e lidamos com isso por meio de software. Queremos resposta rápida ao sensor de toque e queremos implementar multitarefa, então em vez de bloquear múltiplos toques no switch/case da função loop(), colocamos um bloco de tempo usando a função millis() nos objetos Helmet e ArcReactor, como visto neste fragmento de código do objeto Helmet:
void flipFaceplate() {
// bloco de tempo para proteger contra chiado/bounce
if ((millis()-lastFlipped) > 500 ) {
...
Novamente, ao não usar a função delay(), preservamos a multitarefa em nosso projeto. Poderia ser mais sábio usar uma variável para o intervalo de atraso de 500 milissegundos para permitir mudanças e testes, mas acertamos com nossa segunda tentativa de 500 e fomos um pouco descuidados aqui.
Para varrer suavemente o servo através de seu ângulo de rotação, precisávamos incrementar a rotação do servo lentamente. Colocando um bloco de tempo no passo do ângulo do motor servo verificando a hora atual com a função millis():
void Update() {
if ( flipping & (millis()-lastMoved) >= 15 ) {
lastMoved = millis();
if ( directionality == UP ) {
currentPos = currentPos + 3;
} else {
currentPos = currentPos - 3;
}
Serial.print("current position: ");Serial.print(currentPos);
helmetServo.write(currentPos);
}
if ((currentPos >= upAngle) || (currentPos <= downAngle)) {
flipping= false;
}
};
Mais uma vez implementamos isso sem a função delay(). Se você construir este projeto e observar cuidadosamente, notará que com IronMan04.ino rodando no Uno, você pode virar a viseira e ligar/desligar o Neopixel ao mesmo tempo. Com o IronMan02.ino, o delay() causa o bloqueio até que o servo termine de se mover. Obrigado Bill Earl!
Esta última linha da função update verifica para garantir que não excedamos a posição superior ou inferior da viseira, pois a função loop() chama Update(), ela verificará continuamente isso após o último movimento do capacete e então definirá a variável flipping como false para indicar que a viseira terminou de subir ou descer. No próximo ciclo, com flipping false, a função inteira é essencialmente ignorada.
if ((currentPos >= upAngle) || (currentPos <= downAngle)) {
flipping= false;
}
Direções Futuras
Há tantas coisas que poderíamos fazer com este projeto, não sei exatamente por onde começar! Olhos brilhantes é um. Talvez adicionar conectividade BLE com o Arduino 101? Uma interface de voz? Jarvis definitivamente está chamando para este!
Código
Projeto Capacete e Reator Arc do Homem de Ferro: GitHub - Iron-Man
Esquemáticos
Consulte o esquemático Fritzing no projeto original.
Processo de manufatura
- Tampas de Bueiro: Design, Materiais e Produção Moderna
- A Evolução e Produção Moderna dos Ferros de Passar Domésticos
- Fogões de Ferro Fundido: História, Design e Inovações Modernas
- A Evolução e Engenharia de Capacetes de Futebol Americano: Segurança, Design e Inovações Futuras
- Ferro: Propriedades, História e Aplicações Cotidianas
- Baterias: Da Pilha de Volta às Modernas Células de Lítio
- UnifiedWater v1 – Kit Completo de Sensor de Qualidade da Água com Arduino
- Construa um Homem de Ferro com Arduino: Componentes, Sensores e Guia Passo a Passo
- Soluções de Energia Otimizadas para Projetos Arduino
- Tudo Sobre Ferro Forjado: Propriedades, Usos e História