Índice:

Arduino Cradle Rocker: 19 etapas (com imagens)
Arduino Cradle Rocker: 19 etapas (com imagens)

Vídeo: Arduino Cradle Rocker: 19 etapas (com imagens)

Vídeo: Arduino Cradle Rocker: 19 etapas (com imagens)
Vídeo: 10 Easy Steps To Make Pull-Out Trash Bin 2024, Julho
Anonim
Image
Image

Desculpe, não pude resistir à música intensa e cafona que meu lance de edição de vídeo sugeriu.

Recentemente, tive meu primeiro filho e já tinha um berço de madeira que meu tio (que é um marceneiro incrível) fez para meu sobrinho. Meu sobrinho havia superado isso há muito tempo, então eu estava feliz em aceitar e evitar gastar TODO O DINHEIRO em qualquer berço / berço que a mamãe blogueira fez com que minha esposa desmaiasse. O berço tem um design bastante simples, basicamente dois montantes com parafusos através deles que sustentam o corpo do berço. Há um pino removível para travá-lo no lugar.

Em poucas semanas, descobrimos que muitas vezes podíamos conter a agitação leve balançando o berço um pouco até que nosso filho se acalmasse. Na noite em que descobrimos isso, passei alguns trechos de 10 minutos tarde da noite com meu braço estendido por baixo das cobertas, balançando-o sonolentamente, feliz por ter encontrado uma maneira de acalmá-lo sem sair da cama. de manhã prendi um barbante e um pequeno mosquetão para poder balançar o berço sem ter que esticar o braço.

Na manhã seguinte, comecei a pensar em uma maneira de apenas ter um robô embalando esse garoto para mim. Entre no Arduino …

Suprimentos

Ok, este foi meu primeiro projeto Arduino de todos os tempos, então fiz alguns experimentos e tentativa e erro, e tenho certeza que há espaço para melhorias em meu design, mas aqui está minha lista de peças: Arduino Uno ($ 13) para controlar tudo Uma placa de ensaio kit ($ 10) para conectar fios

O motor de passo (US $ 14) Esta é a peça mais divertida, porque é a única coisa que faz todo o trabalho. Comecei com uma chave de torque um pouco menor, mas comprei essa e está funcionando muito bem. Sinta-se à vontade para adquirir um ainda mais poderoso. Drivers de motor de passo ($ 10-30) Fica entre o Arduino e o motor. Este específico é aparentemente capaz de acionar o motor de forma mais silenciosa do que alguns outros, então optei por isso, já que o motor estará a poucos metros da minha cabeça (e da de meu filho) enquanto estamos dormindo. Originalmente, comprei apenas um driver TMC2209 por ~ $ 10, mas acabei comprando um pacote de 4 porque tive algumas dificuldades no início e queria ter certeza de que não fritaria a placa em algum momento. Na verdade, acabei matando 3 placas, o que me leva ao meu próximo item… Capacitores! (US $ 10) Você realmente só precisa de 1 capacitor de 47 uF 50 V, então esta caixa de 240 foi um exagero. Uma fonte de alimentação de 36 V (US $ 17) Eu comprei originalmente uma fonte insignificante de 12 V, então descobri que essa era a fonte de todos os meus problemas e consegui um que estava mais próximo da tensão máxima que meu motor de passo poderia suportar. Se você usar um motor ou driver de passo diferente, certifique-se de que ele pode lidar com a tensão (V) e que a Amperagem (A) da fonte é pelo menos tão alta quanto os Amps de pico consumidos pelo motor. $ 8) É a isto que a fonte de alimentação se conecta. Você precisará soldá-los a alguns fios para grudar em sua placa de ensaio. Um grande pacote de jumpers (US $ 9) para que eu pudesse colocar os controles onde eu quisesse na sala.

Botões ($ 8) para ligar / desligar, etc.

Um amplificador de microfone (US $ 11) Ah, vocês não sabiam que também estava ativado por som?

Acabei usando algumas rodas de polia pequenas (US $ 8), mas pode haver alternativas melhores. Mais sobre isso mais tarde. Você definitivamente precisará de um ferro de solda e de tudo o que deseja usar para montar o motor. Eu, pessoalmente, acabei de fazer uma caixa grosseira com 4 pedaços de madeira aparafusados e depois os aparafusei em outro pedaço de madeira que tem aproximadamente a largura da minha perna de berço. Por enquanto, estou apenas prendendo porque não sei se quero estragar o berço do meu tio.

Etapa 1: familiarize-se com a pinagem do driver de passo

Conecte o Arduino 5V / GND à sua placa de ensaio
Conecte o Arduino 5V / GND à sua placa de ensaio

O programa de modelagem que usei não tinha essa placa de driver exata, então você terá que fazer referência a esta imagem. Arrumei tudo na mesma orientação desta imagem.

Etapa 2: conecte o Arduino 5V / GND à sua placa de ensaio

Conecte um fio do Arduino 5V ao trilho "+" em um lado de sua placa de ensaio. Conecte um fio de um dos GNDs do Arduino ao trilho "-" no mesmo lado da placa de ensaio

(ignore o

Etapa 3: Conecte os +/- Rails ao VIO / GND

Conecte os +/- Rails ao VIO / GND
Conecte os +/- Rails ao VIO / GND

Conecte um fio do trilho "-" ao GND na parte inferior esquerda da placa do acionador de passo. Conecte um fio do trilho "+" ao VIO

Etapa 4: conectar DIR / STEP aos pinos digitais no Arduino

Conecte DIR / STEP aos pinos digitais no Arduino
Conecte DIR / STEP aos pinos digitais no Arduino

Conecte os pinos DIR e STEP da placa de driver de passo a dois dos pinos digitais no Arduino. Usei os pinos 2 e 3, respectivamente, mas não importa, desde que você defina os pinos em seu código posteriormente.

Etapa 5: vamos em frente e adicione esse capacitor …

Vamos em frente e adicione esse capacitor …
Vamos em frente e adicione esse capacitor …

Eu queimei 2 placas de driver de passo porque não tinha um capacitor instalado, então vamos adicionar o capacitor 47uF 50V aos pinos VM / GND na placa de driver. Certifique-se de que o pino "-" no capacitor está no pino GND na placa de ensaio (haverá um "-" no lado correspondente do capacitor)

Etapa 6: vá em frente e conecte esse GND

E vá em frente e conecte esse GND
E vá em frente e conecte esse GND

No GND ao qual você acabou de adicionar o capacitor, vá em frente e conecte-o ao mesmo trilho "-" do outro GND.

Etapa 7: Conecte o motor ao driver

Conecte o motor ao driver
Conecte o motor ao driver

Qual pino vai para onde vai depender do motor que você comprou, mas o que listei tem o diagrama de fiação na lista da Amazon.

Para o meu motor -

Conecte Verde e Preto a M2B e M2A

Conecte Vermelho e Azul a M1A e M1BNote: Se por algum motivo seu motor não tiver um diagrama, você pode facilmente descobrir quais fios formam um circuito se você tiver um multímetro. Defina o multímetro para uma configuração de amp baixo e desligue o motor. Toque um dos fios do multímetro em um dos fios do motor e tente cada um dos outros fios com o outro fio. Se você obtiver uma leitura de resistência, esses dois fios formam 1 circuito e os outros dois formam o outro.

Etapa 8: Conecte EN, MS1 e MS2 a "-"

Conecte EN, MS1 e MS2 para
Conecte EN, MS1 e MS2 para

Não estou totalmente certo de que isso seja necessário, mas acredito que define o motor para uma configuração de microstep menor no driver TMC2209. Você pode conectá-los ao trilho "-" mais próximo deles, pois iremos conectá-lo ao outro lado mais tarde.

Etapa 9: soldar um conector de alimentação fêmea a dois fios

Solde um conector de alimentação fêmea em dois fios
Solde um conector de alimentação fêmea em dois fios

Não sou o melhor do mundo em soldagem, então você precisará procurar em outro lugar para isso, mas eu fiz o meu assim. Dobrei as pontas dos fios de forma que ficassem achatados contra os fios do conector e, em seguida, soldei o fio ao fio. Eu não tinha nenhum material termorretrátil de fio, então apenas envolvi-os prodigiosamente com fita isolante.

Etapa 10: conecte seu conector fêmea recém-soldado

Conecte seu conector fêmea recém-soldado
Conecte seu conector fêmea recém-soldado

Não conecte sua fonte de alimentação real ainda. Fio vermelho para "+", preto para "-"

Etapa 11: conecte-os ao VM / GND

Conecte aqueles a VM / GND
Conecte aqueles a VM / GND

Conecte os trilhos "+" e "-" ao VM e ao GND próximo a ele. Aqueles com o capacitor nele.

Etapa 12: admire sua obra

Admire o seu trabalho manual
Admire o seu trabalho manual

Tudo bem, agora você tem o motor e o driver totalmente configurados! De agora em diante, estaremos apenas fazendo controles. A propósito, daqui para a frente:

  • Se você desconectou seu driver por qualquer motivo, não tente conectá-lo enquanto sua alimentação de 36 V estiver conectada. Eu matei minha terceira placa de driver assim.
  • Conecte a alimentação de 36 V antes de conectar a alimentação do Arduino. Eu não fritei pessoalmente um Arduino, mas ao longo do caminho vi muitos avisos sobre isso.

Etapa 13: Opcional - Verifique seu VREF

O TMC2209 possui um potenciômetro que controla a corrente para o motor. Se você tem o mesmo driver que eu, você pode ler sobre isso aqui. Se você deseja ajustar a configuração:

  • Desconecte toda a alimentação e desconecte os fios do motor do driver.
  • Desconecte o fio do pino EN (habilitar) no driver. Este é o pino no canto superior esquerdo.
  • Conecte a fonte de alimentação do seu motor (o de 36 V)
  • Usando um multímetro ajustado para 20 V, toque um fio em uma fonte de GND (usei um fio conectado ao meu trilho "-") e toque o outro fio no pino VREF. Por favor, não toque o cabo em mais nada, você PODE encurtar seu driver se fizer isso.
  • Use uma pequena chave de fenda para ajustar suavemente o parafuso do potenciômetro. Para minha placa, sentido anti-horário = mais potência. Meu VREF lê pessoalmente ~ 0,6V.

Etapa 14: Botões

Botões!
Botões!

Em seguida, conecte seus botões assim. Eles não precisam de energia.

  • Conecte um trilho "-" de sua placa de ensaio de botão a um dos GNDs do Arduino. Você também pode simplesmente acorrentá-lo fora do trilho "-" da outra placa de ensaio, se desejar.
  • Conecte um pino de cada botão ao trilho "-"
  • Conecte outro pino de cada botão a um pino digital no Arduino.

Usei 4 botões: motor liga / desliga

Motor continuar

Microfone ligado

Microfone desligado

Mais sobre isso quando chegarmos ao código, mas usei botões de microfone distintos simplesmente porque não tinha LEDs para me informar se o microfone estava ligado ou desligado, portanto, ter botões liga / desliga distintos tornou-o à prova de falhas.

Etapa 15: adicionar a placa do microfone

Adicione a placa do microfone
Adicione a placa do microfone

Este é simples, e Adafruit tem boas instruções (e noções básicas de soldagem!) Aqui.

  • Conecte "-" a um GND
  • Conecte o GND na placa do microfone a "-" (você poderia conectar diretamente o GND ao GND e pular a etapa anterior, na verdade)
  • Conecte o VCC à alimentação de 3,3 V no Arduino. Isso é importante porque esta fonte de alimentação é menos "barulhenta" do que a de 5 V, resultando em melhores leituras do microfone
  • Conecte OUT a um pino ANALOG IN no Arduino. Eu usei A0.

Etapa 16: Este deve ser o resultado final

Este deve ser o resultado final!
Este deve ser o resultado final!
Este deve ser o resultado final!
Este deve ser o resultado final!

Tudo deve estar pronto agora. Aqui está uma foto do diagrama final e minha confusão de fios na realidade. Vamos dar uma olhada em alguns códigos!

Etapa 17: Código

Ok, vamos dar uma olhada no código! Este não é meu trabalho mais limpo, mas dá conta do recado. Adicionei comentários para explicar tudo aqui, mas tenha paciência. Usei o IDE do Arduino para tudo isso (disponível no Windows e no Mac gratuitamente). A ideia é esta: Defina a velocidade do motor e a distância para virar.

Defina uma série de pedras (balanços) para fazer.

Vire a distância definida para 1 swing. Balance um determinado número de vezes.

Entre tudo isso, preste atenção aos botões pressionados ou ouça o microfone para ver se o motor deve ligar. Você precisará ajustar os valores de velocidade, distância e sensibilidade do microfone. A velocidade do motor afetará o volume e o torque. Quanto mais rápido o motor anda, mais alto ele se torna e menos torque você obtém. No momento, o meu está quase silencioso, então é possível fazê-lo funcionar sem fazer muito barulho.

#include // biblioteca de motor de passo "padrão"

// # define DEBUG 1 // descomente quando quiser ajustar os níveis do microfone // Configuração do botão - correspondem a onde os pinos digitais que você conectou aos botões const int motorEnablePin = 10; const int continuePin = 11; const int micDisablePin = 12; const int micEnablePin = 13; // Configuração do microfone - A0 aqui é a entrada analógica para o microfone. A janela de amostra está em milis const int micPin = A0; const int sampleWindow = 1000; amostra int sem sinal; bool micEnabled = false; sensibilidade dupla = 0,53; // você provavelmente precisará alterar isso // Para mim, cerca de 0,5 foi bom o suficiente para não disparar em pequenos arrulhos // mas disparará em pequenos gritos int stepsPerRevolution = 3200; // mude isso para ajustar o número de passos por revolução para o seu motor // Meu motor tem 200 passos / revolução // Mas eu configurei o driver para 1/16 microsteps // então 200 * 16 = 3200 … honestamente, não tenho ideia se isso é a maneira apropriada // de fazer isso Stepper myStepper (stepsPerRevolution, 2, 3); // 2 e 3 são os pinos DIR e STEP int stepCount = 0; int motorSpeed = 95; // você precisará ajustar isso de acordo com o peso do berço e do bebê int numSteps = 90; // A distância que o motor se moverá. // Você precisará ajustar isso com base no raio da roda que você anexa // ao seu motor. Isso e a velocidade provavelmente serão por tentativa e erro. // Observação - maior velocidade em motores de passo = menor torque efetivo // Se você não tiver torque suficiente, seu motor irá pular etapas (não se moverá) int oldmotorButtonValue = HIGH; bool ativado = falso; // motor habilitado? int loopStartValue = 0; int maxRocks = 100; // quantas vezes você deseja que ele balance antes de desligar int rockCount = 0; void setup () {#ifdef DEBUG Serial.begin (9600); // para registro de depuração #endif pinMode (motorEnablePin, INPUT_PULLUP); // Esta é uma configuração para os botões funcionarem sem alimentação pinMode (continuePin, INPUT_PULLUP); pinMode (micEnablePin, INPUT_PULLUP); pinMode (micDisablePin, INPUT_PULLUP); myStepper.setSpeed (motorSpeed); // define a velocidade do motor para o que você especificou anteriormente} void loop () {int motorButtonValue = digitalRead (motorEnablePin); // digitalRead apenas lê os valores do botão int continueValue = digitalRead (continuePin); // Isso detecta o pressionamento do botão do motor e evita que ele dispare mais de uma vez por clique if (motorButtonValue == HIGH && oldmotorButtonValue == LOW) {enabled =! Enabled; } micCheck (); // Se o motor estiver desligado e o microfone ligado, ouça o choro do bebê if (! Enabled && micEnabled) {if (getMicReading ()> = micSensitivity) enabled = true; } if (habilitado) {stepsPerRevolution = stepsPerRevolution * -1; // direção reversa // Com minha configuração, é mais eficaz reverter na // primeira tacada. Você pode colocar isso depois do loop // se não for o caso do seu // gire o motor a distância especificada acima para (int i = loopStartValue; i <numSteps; i ++) {// verifique se há desligamento int tempmotorButtonValue = digitalRead (motorEnablePin); if (tempmotorButtonValue! = motorButtonValue) {rockCount = 0; // Essas próximas duas linhas "salvam" a posição do motor, de modo que da próxima vez que você ligá-lo // ele continue viajando como se você não o tivesse desligado. Isso evita prejudicar // suas distâncias de movimento loopStartValue = i; // salva a posição stepsPerRevolution = stepsPerRevolution * -1; // mantém a direção oldmotorButtonValue = tempmotorButtonValue; pausa; } checkContinue (continueValue); // verifique se o botão continuar foi pressionado micCheck (); myStepper.step (stepsPerRevolution / 50); // quantos passos dar por loop, // você pode precisar ajustar isso // certifique-se de continuar a distância completa do loop se o loop terminar // isso entra em jogo se você desligou o motor e "salvou" o posição if (i == numSteps - 1) {loopStartValue = 0; }}} atraso (100); // pausa 100 millis antes de fazer a próxima pedra. Você precisará ajustar isso. if (habilitado) checkComplete (); oldmotorButtonValue = motorButtonValue; // isso é usado para evitar cliques duplos} // Este código é diretamente da Adafruit. double getMicReading () {unsigned long startMillis = millis (); sem sinal int peakToPeak = 0; // nível pico a pico sem sinal int signalMax = 0; sem sinal int signalMin = 1024; while (millis () - startMillis <sampleWindow) {micCheck (); if (digitalRead (motorEnablePin) == LOW) habilitado = verdadeiro; amostra = analogRead (micPin); if (amostra sinalMax) {sinalMax = amostra; // salva apenas os níveis máximos} else if (amostra = maxRocks) {ativado = falso; rockCount = 0; // voltar para a posição do meio

for (int i = loopStartValue; i <numSteps / 2; i ++) {

myStepper.step (stepsPerRevolution * -1 / 50); // passo 1/100 de uma revolução:

}

} }

Etapa 18: Montagem e configuração da roda

Montagem e configuração da roda
Montagem e configuração da roda

Este ainda é um WIP para mim, porque como eu disse, não tenho certeza se quero colocar parafusos em meu berço ainda. A maneira como montei o meu é a seguinte:

  • Coloque uma braçadeira para funcionar como um braço saindo do berço para que minha roda possa puxar em linha reta
  • Aparafusei uma caixa rudimentar para colocar o motor e aparafusei a uma placa de base, que prendi na perna do berço
  • Fez uma roda de polia de madeira personalizada com um orifício para encaixar a pequena roda de polia de passo dentro. Eu fiz o orifício central bem apertado e apenas malho na roda da polia de passo. Fiz um orifício na roda até o meio para poder acessar o parafuso na polia de metal para apertá-la no motor de passo.
  • Passei uma corda do "braço" do berço até o volante. Prendi a corda passando-a pelo orifício que fiz e apenas prendendo-a no lugar.

A melhor solução para a 3ª etapa é apenas comprar uma roda de polia de diâmetro maior em primeiro lugar. O meu tem um diâmetro de pouco menos de 3 "dentro da ranhura e funciona muito bem para o meu berço em particular.

Minha primeira versão usava um braço em vez de uma roda. Não funcionou tão bem porque a força não estava sendo aplicada em uma direção consistente e também era muito suscetível a ser jogada para fora se a posição inicial não estivesse correta. Usar uma roda resolve esses problemas. Também me diverti usando um sistema de polia pequena, mas acabei não precisando porque minha roda me deu torque suficiente.

Etapa 19: Configuração final

Configuração Final
Configuração Final

Monte o microfone próximo ao seu filho, mas em um lugar onde ele não atinja nenhum fio. Coloque os botões onde quiser, contanto que você tenha fios suficientes para chegar ao destino final. Você também pode simplesmente substituir os botões por uma configuração de wi-fi no Arduino, mas ainda não fui tão fundo. Boa sorte!

Recomendado: