Índice:

[WIP] Criando um Drawbot controlado por uma braçadeira Myo: 11 etapas
[WIP] Criando um Drawbot controlado por uma braçadeira Myo: 11 etapas

Vídeo: [WIP] Criando um Drawbot controlado por uma braçadeira Myo: 11 etapas

Vídeo: [WIP] Criando um Drawbot controlado por uma braçadeira Myo: 11 etapas
Vídeo: LARRY JUNE - SMOOTHIES IN 1991 (OFFICIAL MUSIC VIDEO) (PROD BY Julian Avila) 2024, Julho
Anonim
[WIP] Criação de um Drawbot controlado por uma braçadeira Myo
[WIP] Criação de um Drawbot controlado por uma braçadeira Myo

Olá a todos!

Há alguns meses, decidimos tentar abordar a ideia de construir um drawbot de moldura aberta que usasse apenas uma banda Myo para controlá-lo. Quando começamos o projeto, sabíamos que ele precisaria ser dividido em duas fases diferentes. Nossa primeira fase principal foi tentar envolver nossas cabeças em um design de quadro aberto para o nosso robô de desenho. Esta é uma configuração fora do padrão e queríamos ver quais eram os benefícios desse design.

Em segundo lugar, sabíamos que construir este protótipo só seria útil para nós mesmos. Nosso projeto e plano era mover nosso quadro final para o metal e, usando um arduino, receber nossa posição do acelerômetro e giroscópio embutidos na banda Myo. Essa informação seria então enviada aos motores e replicaria o movimento do usuário. Sabíamos que isso faria nossa segunda fase se dividir em três aspectos principais:

  1. programação de Myo para motores, através do Arduino
  2. projeto elétrico para traduzir nossos dados em movimento
  3. projeto mecânico para criar uma estrutura de tamanho razoável que facilitará nosso movimento

Cada membro de nossa equipe se sentiu mais confortável com uma parte única de nosso processo de design, então decidimos dividir nosso trabalho entre cada pessoa. Também mantivemos um blog durante todo o nosso processo de design para acompanhar nosso pensamento do dia a dia, em oposição a uma aparência mais global.

Etapa 1: O que planejamos fazer

Image
Image

Nosso objetivo era combinar esses dois produtos de uma forma que nunca vimos antes. Decidimos fazer uma transmissão ao vivo entre nossa braçadeira Myo e nossa própria versão de um design inspirado no AxiDraw do Evil Mad Scientist.

Etapa 2: Lista de Ingredientes do Protótipo

2 2 x 4 placas de madeira 1 Correia ou corrente medindo> = 65”4 Pregos de madeira 3 Engrenagens com dentes que se encaixam na correia ou corrente 4 3 x 8 placas vex perfuradas 30 ⅜” Espaçadores de borracha 8 arruelas de 1”de diâmetro 1 1” de diâmetro de madeira cavilha 1 'de comprimento 8 parafusos Vex 1”8 ½” Parafusos Vex 8 2”parafusos Vex 8 ¼” Espaçadores de borracha 48 Porcas Vex 1 Pequeno zip tie

Etapa 3: [protótipo] marcando nossos braços e interior do carro

[Protótipo] Trabalhando nossos braços e interior do carro
[Protótipo] Trabalhando nossos braços e interior do carro

Pegamos dois 2x4 e os cortamos em comprimentos iguais (33 ¼ )

Usando uma serra de mesa, fizemos um entalhe ao longo do lado da parte estreita das tábuas com ¼”de profundidade e ⅛” de largura no meio

Corte o tarugo em 4 pedaços de 2 "e faça um orifício no meio do tarugo com cerca de ¼" de diâmetro usando uma furadeira

Etapa 4: [protótipo] fazendo nosso carro

[Protótipo] Fazendo Nosso Carro
[Protótipo] Fazendo Nosso Carro
[Protótipo] Fazendo Nosso Carro
[Protótipo] Fazendo Nosso Carro
[Protótipo] Fazendo Nosso Carro
[Protótipo] Fazendo Nosso Carro

O ideal seria usar duas peças de aço perfurado Vex 7x7, mas tudo o que tínhamos disponíveis eram as tiras 2x7, então as aparafusamos em uma configuração em "X"

Empilhe 5 dos espaçadores de borracha de ⅜ e prenda os cantos das placas vex entre si

Prenda frouxamente os pinos de madeira como mostrado na figura 1 para que girem livremente com cerca de 2 de espaço entre eles use a imagem para ver onde as engrenagens devem ser posicionadas neste ponto, usamos arruelas, mas depois descobrimos que pequenas engrenagens de plástico vex funcionam melhor.

Usando os parafusos vex de ½ ", espaçadores de borracha de ¼" e arruelas de 1 "de diâmetro, fixe as arruelas em uma posição elevada, conforme mostrado na figura 1 (usamos engrenagens de plástico verdes porque não conseguimos encontrar as arruelas corretas), certifique-se de que as arruelas são capazes para girar facilmente e se encaixar nos entalhes da placa.

Etapa 5: [Protótipo] Juntando Tudo

[Protótipo] Juntando tudo
[Protótipo] Juntando tudo
[Protótipo] Juntando tudo
[Protótipo] Juntando tudo
[Protótipo] Juntando tudo
[Protótipo] Juntando tudo
[Protótipo] Juntando tudo
[Protótipo] Juntando tudo

Coloque uma placa em uma superfície e deslize o carro para o meio de forma que as arruelas prendam o carro acima da placa e em cada lado da placa preguem as engrenagens para baixo para que girem livremente. Pregue uma engrenagem em uma extremidade da segunda placa, certificando-se de que está centralizada e deslize-a para o carro perpendicular à primeira placa.

Agora a correia deve ser enrolada no sistema conforme mostrado, preste atenção em como os pinos estão do lado de fora da correia e como não há nada no centro do chassi que possa atrapalhar a correia enquanto ela está se movendo.

Agora o cinto precisa ser preso na lateral da placa que não tem engrenagem. Usamos um prego extra e uma gravata zip para prender os nossos. Mas o método usado não importa, desde que o cinto esteja ancorado naquele local

Etapa 6: [protótipo] concluído e em andamento

Image
Image

Deve ser isso, puxe o cinto em diferentes combinações e veja os diferentes efeitos que tem no braço!

Etapa 7: traduzindo nosso modelo em nosso design acabado

Traduzindo nosso modelo em nosso design acabado
Traduzindo nosso modelo em nosso design acabado
Traduzindo nosso modelo em nosso design acabado
Traduzindo nosso modelo em nosso design acabado

Assim que concluímos nosso protótipo, ficamos em êxtase. Nenhum de nós tinha certeza de como o sistema funcionava antes da montagem. Mas, uma vez que nossas peças se juntaram, descobrimos rapidamente o que gostamos e como poderíamos melhorá-lo ao criar o design final. Nossas principais reclamações com o sistema para resolver foram:

  1. Escala
    1. Nosso protótipo era enorme e pesado, o que o tornava propenso a tombar na ponta de nossos braços
    2. A carruagem era muito maior do que o necessário e tinha muito espaço desperdiçado
    3. Nosso cinto (um piso de tanque vex) era muito maior do que o necessário, o que introduziu espaço em excesso entre os braços
  2. Atrito

    1. Nossos degraus Vex não passaram facilmente sobre os roletes de madeira em todos os pontos
    2. Plástico na madeira fez com que o carro não quisesse se mover em muitos casos
  3. Motorização

    Precisávamos tornar o sistema capaz de funcionar

Com isso em mente, traçamos nossos planos para o design final. Queríamos que o drawbot fosse controlado com um Myo por meio de um arduino e queríamos fazer a moldura de alumínio e menor.

Para fazer isso, pegamos uma porcentagem de nosso protótipo original e começamos a trabalhar a partir desse tamanho. Ao usar uma folha de metal que seria usinada para ter canais largos o suficiente para a passagem de um rolamento blindado, teríamos um design leve, porém robusto, com maior tolerância de uso.

Nosso protótipo também nos permitiu, em apenas alguns minutos, determinar como a rotação do motor afetava a cabeça de nosso drawbot. Isso nos levou a entender que nosso projeto de controle seria mais simples do que havíamos previsto. Após uma inspeção mais detalhada, descobrimos que o movimento do motor é aditivo! Isso significa que cada motor tem um efeito desejado independente sobre nosso movimento, mas quando os combinamos, eles começam a se cancelar.

Por exemplo, se considerado como um plano de coordenadas, o motor colocado na extremidade negativa x sempre tenderá a puxar nossa gaveta para o segundo e quarto quadrantes. Por outro lado, o motor posicionado na extremidade x positiva sempre tenderá a gaveta para o primeiro e terceiro quadrantes. Se combinarmos o movimento de nossos motores, isso cancelará as partes do direcionamento desse conflito e amplificará as partes que concordam.

Etapa 8: codificação

Embora eu tenha trabalhado bastante em C alguns anos atrás, não tinha nenhuma experiência com lua ou C ++, e isso significava que precisava gastar uma quantidade considerável de tempo examinando a documentação. Eu sabia que a tarefa geral que tentaria realizar seria obter a posição do usuário em intervalos de tempo e depois passá-la para os motores. Decidi dividir a tarefa sozinho para digerir melhor as partes de que precisaria.

1. Obtenha dados de Myo (lua)

Eu sabia que precisava descobrir uma maneira de coletar as informações do Myo. Essa foi a primeira parte do desafio que eu queria abordar. Para fazer isso, eu queria que o usuário calibrasse o tamanho da tela antes de começar a desenhar. Isso me permitiria ter um limite a partir do qual trabalhar. Eu poderia então normalizar o programa entre diferentes usuários simplesmente tomando uma porcentagem da tela máxima conforme meus pontos de dados passassem. Decidi ter um evento de script que faria uma verificação getOrientation a cada meio segundo, pois permitiria que as verificações nunca executassem um salto selvagem que você precisaria adivinhar (por exemplo, se o usuário estivesse balançando descontroladamente para trás e adiante).

Isso fez o primeiro obstáculo que eu bati. Eu descobri uma limitação muito grande de lua, e que ela não me permitiria esperar antes de continuar o script. A única maneira de realizar essa ação era pausar a CPU (o que faria uma pausa global, até mesmo segurando o relógio do sistema) ou usar comandos específicos do sistema operacional. No meu código de exemplo, deixei a verificação do sistema operacional original que executei (comentei). Isso foi feito depois de fazer uma grande pesquisa na documentação de lua e foi feito verificando a formatação do caminho do sistema. Foi então que decidi que precisava olhar a documentação de projetos publicados anteriormente. Percebi imediatamente quanto tempo perdi e fui imediatamente levado para a variável de plataforma. Com ele, fui capaz de implementar comandos de espera específicos do SO quase imediatamente, ao contrário dos dias que levei para montar minha solução anterior.

Foi nessa época de design que o trabalho no aspecto elétrico começou, e eu suspirei o trabalho nesse aspecto do código. A intenção é aprender como nossos motores se relacionam com o arduino.

2. Trabalhando no Arduino (C ++)

À medida que o trabalho com nossa placa de ensaio se tornava cada vez mais complexo, descobri que o arduino era incapaz de multithreading. Essa foi uma grande chave em meu design de código original, e depois de ler mais sobre as limitações apresentadas com nosso controlador, descobri que precisaria programar como o arduino alternaria entre os dois. Este se tornou o foco de meus esforços conforme nosso prazo se aproximava. Tive que descartar grande parte do meu script original, pois eles foram projetados para gravar dados em um arquivo de forma síncrona com o controlador do motor lendo o arquivo. Isso permitia uma função de enfileiramento para garantir que, mesmo que o usuário estivesse à frente de nossa gaveta, isso não arruinaria o projeto.

Decidi que a função de enfileiramento deveria ser salva, se não implementada da mesma forma que antes. Para fazer isso, criei um vetor de matrizes. Isso me permitiu não apenas manter o espírito do meu projeto anterior relativamente intacto, mas também significava que eu não precisava controlar minha posição no arquivo para ler ou escrever. Em vez disso, agora tudo o que eu precisava fazer era simplesmente adicionar um novo valor ao meu vetor se o usuário estivesse se movendo (o teste preliminar foi inferior a 1% da diferença de tamanho da tela em xey da última posição registrada resultou em nenhum registro de dados). Eu poderia então pegar o valor mais antigo em meu vetor e, de uma só vez, enviá-lo para o controle do motor, gravá-lo em nosso arquivo e removê-lo de meu vetor. Isso limpou muitas das minhas preocupações sobre ter um fluxo constante de IO em execução.

Etapa 9: Elétrica

Image
Image
Elétrico
Elétrico

Embora eu tenha feito aulas de eletrônica no passado e trabalhado bastante com arduinos. Nunca me empenhei muito em fazer o arduino receber informações de uma fonte externa (myo), só tenho experiência em enviar informações por meio do arduino. No entanto, comecei a conectar os motores em nosso drawbot e a trabalhar no código para que eles pudessem funcionar com o código myo.

Materiais que usei:

2 x motores de passo

1 x tábua de pão

1 x Arduino (Uno)

2 x Driver IC L293DE

40 x fios de jumper

2 fãs

1. Conectando os motores de passo e o ventilador à placa de ensaio

Seguindo o diagrama do circuito, podemos conectar um motor de passo ao driver na placa de ensaio. Então, seguindo o mesmo diagrama, aplique isso ao segundo driver e motor, entretanto, os fios do jumper terão que ser plugados em um conjunto diferente de pinos no arduino (já que o primeiro motor está ocupando o espaço de outros 4).

Aviso / Dica:

Os drivers são muito pequenos e os pinos muito próximos. Seria aconselhável espaçar os dois drivers para que os fios não ficassem confusos.

O próximo passo é conectar os ventiladores. Isso é bastante simples, os ventiladores que eu tinha disponíveis eram ventiladores básicos do processador de computador, que têm um positivo e aterramento. Conecte esses dois em seus respectivos pinos +/- na placa de ensaio e posicione cada um deles em direção a cada driver. (Descobrimos que, como os motores de passo estão recebendo rajadas de informações e comandos por um longo período de tempo, os drivers tendem a superaquecer e cheirar mal. Adicionar um ventilador para resfriá-lo corrigiu esse problema).

2. Código Arduino

Esta é a parte fácil!

Abra o IDE do Arduino, vá para a guia “Arquivo” e depois vá para a guia “exemplo” que irá cair ainda mais e mostrará uma guia “passo a passo” Então você deseja abrir “Stepper_OneStepAtATime”

Isso irá pré-carregar um código de exemplo que é quase plug-and-play para a fiação do arduino / motor. Teremos que fazer pequenos ajustes porque estaremos operando dois motores, que mostrarei a seguir. Você também pode ter que fazer pequenos ajustes dependendo de quais pinos você decidiu usar, uma vez que o IDE do Arduino é padronizado para os pinos 8-11.

O código que usei para fazer os dois motores se moverem em “sincronia” está abaixo:

//#incluir

const int stepsPerRevolution = 200;

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

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

int stepCount = 0;

void setup () {// inicializa a porta serial: Serial.begin (9600); }

void loop () {

myStepper1.step (1);

Serial.print ("etapas:");

Serial.println (stepCount);

stepCount ++;

atraso (0,5);

myStepper2.step (1); atraso (0,5); }

3. Possíveis problemas

Problemas que encontrei durante este processo não estava usando o exemplo de código certo, usando um fio de jumper ruim, usando o driver IC errado.

Certifique-se de que o driver que você está usando é capaz de controlar um motor

Verifique o número de série e verifique suas especificações

Tive o problema de ter um fio de ligação morto, o que fez com que meus motores girassem de maneira estranha

Tive que usar um multímetro para verificar todos os fios

E sempre verifique seu código em busca de pequenos erros, como a falta de um final “;” comando

Etapa 10: Mecânica

Mecânico
Mecânico
Mecânico
Mecânico
Mecânico
Mecânico
Mecânico
Mecânico

1. Material

Para o modelo de produção total dos braços, é recomendado que sejam feitos de um material forte, porém leve, sentimos que o alumínio era um ajuste perfeito.

Usamos folhas de alumínio de calibre 032 cortadas em 9,125 "x 17,5" e traçamos o padrão a partir do desenho mostrado na etapa anterior.

2. Fabricação

Usando a bainha (a máquina azul), adicionamos bainhas voltadas para direções opostas para que, quando a peça for quebrada e dobrada, as duas bainhas se interliguem formando uma única peça completa.

Para as curvas grandes usamos o tennismith, por causa de sua alta precisão.

Agora, para as curvas menores, você vai querer usar uma máquina com um pé menor, é aqui que uma máquina como o roto-die entra. Devido ao seu pé menor, ele permite quebras menores sejam feitas, infelizmente, o roto-die à nossa disposição ainda era muito grande para o nosso trilho e estava deformado.

** Como alternativa, se você não tiver acesso aos equipamentos ou ferramentas adequados, uma substituição pode ser feita. **

Em nosso caso, cortamos nossos braços de trilhos de painel solar de alumínio usando um cortador de plasma e lixamos as pontas e depois as parafusamos de costas para fazer um sistema de trilhos de dupla face. Idealmente, gostaríamos de soldar os trilhos, no entanto, sem acesso a uma estação de soldagem, em vez disso, prendemos os trilhos e perfuramos e depois os parafusamos juntos. Mas se for feito esse caminho, deve-se tomar cuidado especial ao usar uma porca de travamento e uma arruela para garantir que a peça tenha o mínimo de flexão possível.

3. O cinto

Para as correias, usamos algumas correias de impressora 3D antigas que pudemos resgatar.

As correias não eram compridas o suficiente inicialmente, então, usando um tubo termorretrátil, combinamos duas peças para fazer uma que fosse adequadamente longa.

As engrenagens verdes e buchas de madeira foram substituídas por rolamentos de disco com arruelas extra largas usadas para evitar que a correia escorregue.

4. Carruagem

E, finalmente, o carro foi feito de uma folha de 5 "x 5" de alumínio 032, com furos pressionados onde os parafusos e arruelas correspondentes devem ser colocados. A distância irá variar dependendo da largura do trilho e de quanto espaço você tem nas arruelas.

Etapa 11: Reflexões

Infelizmente, todos os lados do nosso projeto se depararam com a grande barreira do tempo e não pudemos concluir nosso projeto na data prevista. Cada membro de nossa equipe acabou colaborando em todos os outros aspectos de nosso design, pelo menos em certa medida, levando a alguns declínios de tempo na curva de aprendizado. Isso, aliado ao desejo de projetar um produto com o mínimo de recursos externos possível (já que todos queríamos criar nossas respectivas peças do zero), levou a uma grande quantidade de rodas reinventadas.

Todos que trabalharam no projeto aprenderam mais sobre os outros aspectos do projeto. Fazer o software realizar uma ação específica é uma coisa, mas fazer o software funcionar junto com o hardware é outra. Eu diria que é importante que quem está trabalhando no aspecto de codificação deste projeto esteja tão familiarizado quanto o nosso programador de projeto.

No geral, não fomos capazes de alcançar exatamente o que desejávamos. No entanto, sinto que estávamos no caminho certo e todos nós descobrimos e aprendemos novos conceitos que poderemos aplicar em projetos futuros.

Recomendado: