Tabla de contenido:

Arduino Cradle Rocker: 19 pasos (con imágenes)
Arduino Cradle Rocker: 19 pasos (con imágenes)

Video: Arduino Cradle Rocker: 19 pasos (con imágenes)

Video: Arduino Cradle Rocker: 19 pasos (con imágenes)
Video: 💡 Controlar Motor PASO A PASO con Arduino (Stepper Motor) 【 2021 】 - Capítulo #34🔋 2024, Mes de julio
Anonim
Image
Image

Lo siento, no pude resistir la música intensa y cursi que sugirió mi edición de video.

Recientemente tuve mi primer hijo y ya tenía una cuna de madera que mi tío (que es un carpintero increíble) le hizo a mi sobrino. Mi sobrino lo había superado hace mucho tiempo, así que estaba feliz de tomarlo y evitar gastar TODO EL DINERO en cualquier cuna / moisés por la que las blogueras de mamás hicieron que mi esposa se desmayara. La base es un diseño bastante simple, básicamente dos montantes con pernos a través de ellos que sostienen el cuerpo de la base. Hay una clavija extraíble para bloquearlo en su lugar.

En unas pocas semanas, descubrimos que a menudo podíamos calmar la ligera irritabilidad meciendo un poco la cuna hasta que nuestro niño se calmara. La noche que descubrimos esto, pasé unos 10 minutos de estiramiento a altas horas de la noche con mi brazo sacando de debajo de las sábanas, meciéndolo somnoliento, feliz de haber encontrado una manera de calmarlo sin levantarme de la cama. Por la mañana le puse una cuerda y un pequeño mosquetón para poder balancear la base sin tener que estirar el brazo.

A la mañana siguiente, comencé a pensar en una manera de hacer que un robot meza a este niño por mí. Entra en el Arduino …

Suministros

Ok, este fue mi primer proyecto Arduino, así que hice algunos experimentos y prueba y error, y estoy seguro de que hay margen de mejora en mi diseño, pero aquí está mi lista de partes: Arduino Uno ($ 13) para controlar todo. kit ($ 10) para conectar cables

El motor paso a paso ($ 14) Esta es la pieza más divertida, porque es lo que hace todo el trabajo. Comencé con un controlador de torque ligeramente más bajo, pero luego obtuve este y está funcionando bastante bien. Siéntase libre de obtener uno aún más potente. Controladores de motor paso a paso ($ 10-30) Esto se encuentra entre el Arduino y el motor. Este en específico aparentemente puede conducir el motor más silenciosamente que otros, así que fui con eso ya que el motor va a estar a unos pocos pies de mi cabeza (y la de mi hijo) mientras dormimos. Originalmente compré un controlador TMC2209 por ~ $ 10, pero terminé comprando un paquete de 4 porque tuve algunas dificultades al principio y quería asegurarme de que no había frito la placa en algún momento. Terminé matando 3 tableros, lo que me lleva a mi siguiente elemento… ¡Condensadores! ($ 10) Realmente solo necesitas 1 condensador de 47 uF 50V, por lo que esta caja de 240 fue demasiado exagerada. Una fuente de alimentación de 36V ($ 17) Originalmente compré una pequeña fuente de 12V, luego descubrí que esa era la fuente de todos mis problemas y obtuve uno que estaba más cerca del voltaje máximo que podía manejar mi motor paso a paso. Si usa un motor diferente o un controlador paso a paso, asegúrese de que pueda manejar el voltaje (V) y que el amperaje (A) de la fuente sea al menos tan alto como los amperios pico consumidos por el motor. $ 8) Esto es a lo que se conecta la fuente de alimentación. Tendrá que soldarlos a algunos cables para pegarlos en su tablero. Un gran paquete de puentes ($ 9) para que pueda colocar los controles donde quiera en la habitación.

Botones ($ 8) para encender / apagar, etc.

Un amplificador de micrófono ($ 11) Oh, ¿no sabían que esto también estaba activado por sonido?

Algunas ruedas de polea pequeñas ($ 8) terminé usando estas, pero podría haber mejores alternativas. Más sobre eso más adelante. Definitivamente también necesitará un soldador y lo que quiera usar para montar el motor. Personalmente, solo hice una caja aproximada con 4 piezas de madera atornilladas, y luego las atornillé a otra pieza de madera que tiene aproximadamente el ancho de mi pata de cuna. Por ahora lo tengo sujeto porque no sé si quiero estropear la cuna de mi tío.

Paso 1: familiarícese con el pinout de su controlador paso a paso

Conecte Arduino 5V / GND a su placa de pruebas
Conecte Arduino 5V / GND a su placa de pruebas

El programa de modelado que utilicé no tenía esta placa de controlador exacta, por lo que tendrá que hacer referencia a esta imagen. He dispuesto todo en la misma orientación que esta imagen.

Paso 2: Conecte Arduino 5V / GND a su placa de pruebas

Conecte un cable del Arduino 5V al riel "+" en un lado de su placa de pruebas Conecte un cable de uno de los Arduino GND al riel "-" en el mismo lado de la placa de pruebas

(ignora el

Paso 3: Conecte los rieles +/- a VIO / GND

Conecte los rieles +/- a VIO / GND
Conecte los rieles +/- a VIO / GND

Conecte un cable del riel "-" a GND en la parte inferior izquierda de la placa del controlador paso a paso. Conecte un cable del riel "+" a VIO

Paso 4: Conecte DIR / STEP a los pines digitales en el Arduino

Conecte DIR / STEP a los pines digitales en el Arduino
Conecte DIR / STEP a los pines digitales en el Arduino

Conecte los pines DIR y STEP de la placa del controlador paso a paso a dos de los pines digitales del Arduino. Usé los pines 2 y 3, respectivamente, pero no importa siempre que establezca los pines en su código más adelante.

Paso 5: Sigamos adelante y agreguemos ese capacitor …

Sigamos adelante y agreguemos ese condensador …
Sigamos adelante y agreguemos ese condensador …

Quemé 2 placas de controlador paso a paso porque no tenía un condensador en su lugar, así que sigamos adelante y agreguemos el condensador 47uF 50V a los pines VM / GND en la placa del controlador. Asegúrese de que el pin "-" del condensador esté en el pin GND de la placa de pruebas (habrá un "-" en el lado correspondiente del condensador)

Paso 6: Y sigue adelante y conecta ese GND

Y sigue adelante y conecta ese GND
Y sigue adelante y conecta ese GND

En el GND al que acaba de agregar el condensador, continúe y conéctelo al mismo riel "-" que el otro GND.

Paso 7: conecte el motor al controlador

Conecte el motor al controlador
Conecte el motor al controlador

Qué pin va a dónde dependerá del motor que compró, pero el que enumeré tiene el diagrama de cableado en la lista de Amazon.

Para mi motor

Conecte verde y negro a M2B y M2A

Conecte rojo y azul a M1A y M1B Nota: Si por alguna razón su motor no tiene un diagrama, puede averiguar fácilmente qué cables forman un circuito si tiene un multímetro. Configura tu multímetro a un nivel bajo de amperaje y desconecta el motor. Toca uno de los cables del multímetro con uno de los cables del motor y luego prueba cada uno de los otros cables con el otro cable. Si obtiene una lectura de resistencia, entonces esos dos cables forman un circuito y los otros dos forman el otro.

Paso 8: conecte EN, MS1 y MS2 a "-"

Conecte EN, MS1 y MS2 a
Conecte EN, MS1 y MS2 a

No estoy completamente seguro de que esto sea necesario, pero creo que configura el motor en una configuración de micropasos más pequeña en el controlador TMC2209. Puede conectarlos al riel "-" más cercano a ellos, ya que lo conectaremos al otro lado más adelante.

Paso 9: suelde un conector de alimentación hembra a dos cables

Suelde un conector de alimentación hembra a dos cables
Suelde un conector de alimentación hembra a dos cables

No soy el mejor del mundo soldando, así que tendrás que buscarlo en otro lado, pero yo hice el mío así. Doblé los extremos de los cables para que quedaran planos contra los cables del conector, luego soldé el cable al cable. No tenía cables termocontraíbles, así que los envolví prodigiosamente con cinta aislante.

Paso 10: conecte su conector hembra recién soldado

Conecte su conector hembra recién soldado
Conecte su conector hembra recién soldado

Por favor, no conecte su fuente de alimentación real todavía. Cable rojo a "+", negro a "-"

Paso 11: conéctelos a VM / GND

Conéctelos a VM / GND
Conéctelos a VM / GND

Conecte esos rieles "+" y "-" a VM y el GND al lado. Los que tienen el condensador.

Paso 12: admira tu obra

Admira tu obra
Admira tu obra

Muy bien, ahora tiene el motor y el controlador completamente configurados. De ahora en adelante, solo haremos controles. Por cierto, en el futuro:

  • Si ha desconectado su controlador por alguna razón, no intente conectarlo mientras su energía de 36V está enchufada. Maté mi tercer tablero de controlador de esa manera.
  • Conecte la alimentación de 36 V antes de conectar la alimentación de Arduino. Personalmente no freí un Arduino, pero en el camino vi muchas advertencias sobre esto.

Paso 13: Opcional - Verifique su VREF

El TMC2209 tiene un potenciómetro que controla la corriente al motor. Si tiene el mismo controlador que yo, puede leerlo aquí. Si desea ajustar la configuración:

  • Desconecte toda la energía y desconecte los cables del motor del controlador.
  • Desconecte el cable del pin EN (habilitar) del controlador. Este es el pin en la esquina superior izquierda.
  • Conecte la fuente de alimentación de su motor (la de 36 V)
  • Usando un multímetro en 20V, toque un cable a una fuente de GND (utilicé un cable que se conecta a mi riel "-") y toque el otro cable al pin VREF. Por favor, no toque el cable con nada más, PUEDE cortocircuitar su controlador si lo hace.
  • Utilice un destornillador pequeño para ajustar suavemente el tornillo del potenciómetro. Para mi tabla, en sentido antihorario = más potencia. Mi VREF lee personalmente ~ 0.6V.

Paso 14: ¡Botones

¡Botones!
¡Botones!

A continuación, conecte sus botones así. No necesitan energía.

  • Conecte un riel "-" de su tablero de botones a uno de los GND del Arduino. También puede simplemente encadenarlo fuera del riel "-" de la otra placa si lo desea.
  • Conecte un pin de cada botón al riel "-"
  • Conecte otro pin de cada botón a un pin digital en el Arduino.

Usé 4 botones: Motor encendido / apagado

Continuar motor

Micrófono encendido

Micrófono apagado

Más sobre esto cuando lleguemos al código, pero usé botones de micrófono distintos simplemente porque no tenía LED para saber si el micrófono estaba encendido o apagado, por lo que tener botones de encendido / apagado distintos lo hizo infalible.

Paso 15: agregue la placa de micrófono

Agregue la placa de micrófono
Agregue la placa de micrófono

Este es simple, y Adafruit tiene buenas instrucciones (¡y conceptos básicos de soldadura!) Aquí.

  • Conectar "-" a GND
  • Conecte GND en la placa del micrófono a "-" (puede conectar directamente GND a GND y omitir el paso anterior, de verdad)
  • Conecte VCC a la potencia de 3.3V en el Arduino. Esto es importante ya que esta fuente de alimentación es menos "ruidosa" que la de 5 V, lo que resulta en mejores lecturas del micrófono.
  • Conecte OUT a un pin ANALOG IN en el Arduino. Usé A0.

Paso 16: ¡Este debería ser el resultado final

¡Este debería ser el resultado final!
¡Este debería ser el resultado final!
¡Este debería ser el resultado final!
¡Este debería ser el resultado final!

Todo debería estar listo ahora. Aquí hay una imagen del diagrama final y mi mezcolanza de cables en realidad. ¡Veamos un código!

Paso 17: ¡Código

Ok, ¡veamos el código! Este no es mi trabajo más limpio, pero hace el trabajo. He agregado comentarios para explicar todo aquí, pero tengan paciencia conmigo. Usé Arduino IDE para todo esto (disponible en Windows y Mac de forma gratuita) La esencia es esta: Establezca la velocidad y la distancia del motor para girar.

Establecer una serie de rocas (columpios) para hacer.

Gire la distancia establecida para 1 swing. Balancea un número determinado de veces.

Entre todo eso, observe si se presionan botones o escuche el micrófono para ver si el motor debe encenderse. Necesitará ajustar los valores de velocidad, distancia y sensibilidad del micrófono. La velocidad del motor afectará el volumen y el par. Cuanto más rápido va el motor, más fuerte es y menos par se obtiene. El mío actualmente es casi silencioso, por lo que es posible hacer que funcione sin hacer mucho sonido.

#include // biblioteca de motores paso a paso "estándar"

// # define DEBUG 1 // descomenta esto cuando quieras ajustar los niveles del micrófono // Configuración de los botones - estos corresponden a los pines digitales que conectaste a los botones const int motorEnablePin = 10; const int continuePin = 11; const int micDisablePin = 12; const int micEnablePin = 13; // Configuración del micrófono - A0 aquí es la entrada analógica para el micrófono. La ventana de muestra está en milis const int micPin = A0; const int sampleWindow = 1000; muestra int sin firmar; bool micEnabled = false; doble micSensibilidad = 0,53; // Probablemente necesites cambiar esto // Para mí, alrededor de.5 fue lo suficientemente bueno como para no disparar con pequeños arrullos // pero se disparará con pequeños gritos int stepsPerRevolution = 3200; // cambie esto para que se ajuste al número de pasos por revolución de su motor // Mi motor es de 200 pasos / revolución // Pero configuré el controlador en 1/16 micropasos // entonces 200 * 16 = 3200 … honestamente, no tengo idea de si esto es la forma correcta // de hacer esto Stepper myStepper (stepsPerRevolution, 2, 3); // 2 y 3 son los pines DIR y STEP int stepCount = 0; int motorSpeed = 95; // necesitará ajustar esto de acuerdo a su cuna y peso del bebé int numSteps = 90; // La distancia que se moverá el motor. // Necesitarás ajustar esto en función del radio de la rueda que coloques // en tu motor. Esto y la velocidad probablemente serán de prueba y error. // Nota - mayor velocidad en motores paso a paso = menor torque efectivo // Si no tiene suficiente torque, su motor saltará pasos (no se moverá) int oldmotorButtonValue = HIGH; bool habilitado = falso; // motor habilitado? int loopStartValue = 0; int maxRocks = 100; // cuántas veces quieres que se mueva antes de apagar int rockCount = 0; configuración vacía () {#ifdef DEBUG Serial.begin (9600); // para el registro de depuración #endif pinMode (motorEnablePin, INPUT_PULLUP); // Esta es una configuración para que los botones funcionen sin poder pinMode (continuePin, INPUT_PULLUP); pinMode (micEnablePin, INPUT_PULLUP); pinMode (micDisablePin, INPUT_PULLUP); myStepper.setSpeed (motorSpeed); // establece la velocidad del motor a lo que especificó anteriormente} void loop () {int motorButtonValue = digitalRead (motorEnablePin); // digitalRead solo lee los valores del botón int continueValue = digitalRead (continuePin); // Esto detecta la presión del botón del motor y evita que se dispare más de una vez por clic si (motorButtonValue == HIGH && oldmotorButtonValue == LOW) {enabled =! Enabled; } micCheck (); // Si el motor está apagado y el micrófono está encendido, escuche el llanto del bebé if (! Enabled && micEnabled) {if (getMicReading ()> = micSensitivity) enabled = true; } if (habilitado) {stepsPerRevolution = stepsPerRevolution * -1; // dirección inversa // Con mi configuración es más efectivo invertir // en el primer swing. Puede poner esto después del bucle // si ese no es el caso del suyo // girar el motor a la distancia especificada anteriormente para (int i = loopStartValue; i <numSteps; i ++) {// verificar si se apaga int tempmotorButtonValue = digitalRead (motorEnablePin); if (tempmotorButtonValue! = motorButtonValue) {rockCount = 0; // Estas dos líneas siguientes "guardan" la posición del motor, de modo que la próxima vez que lo enciendas // seguirá viajando como si no lo hubieras apagado. Esto evita que se pierdan // sus distancias de movimiento loopStartValue = i; // guardar posición stepsPerRevolution = stepsPerRevolution * -1; // mantener la dirección oldmotorButtonValue = tempmotorButtonValue; rotura; } checkContinue (continueValue); // verifica si se presionó el botón Continuar micCheck (); myStepper.step (stepsPerRevolution / 50); // cuántos pasos tomar por bucle, // es posible que deba ajustar esto // asegúrese de que continuemos la distancia completa del bucle si el bucle terminó // esto entra en juego si apagó el motor usted mismo y "salvó" el posición if (i == numSteps - 1) {loopStartValue = 0; }}} retraso (100); // pausa 100 milis antes de hacer la siguiente piedra. Necesitarás ajustar esto. si (habilitado) checkComplete (); oldmotorButtonValue = motorButtonValue; // esto se utiliza para evitar dobles clics} // Este código es directamente de Adafruit. double getMicReading () {startMillis largo sin firmar = millis (); unsigned int peakToPeak = 0; // nivel pico a pico unsigned int signalMax = 0; unsigned int signalMin = 1024; while (millis () - startMillis <muestraWindow) {micCheck (); if (digitalRead (motorEnablePin) == LOW) habilitado = verdadero; muestra = analogRead (micPin); if (muestra signalMax) {signalMax = muestra; // guarda solo los niveles máximos} else if (sample = maxRocks) {habilitado = falso; rockCount = 0; // volver a la posición del medio

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

myStepper.step (stepsPerRevolution * -1 / 50); // paso 1/100 de una revolución:

}

} }

Paso 18: Montaje y configuración de la rueda

Montaje y configuración de la rueda
Montaje y configuración de la rueda

Esto sigue siendo un WIP para mí, porque como dije, no estoy seguro de querer poner tornillos en mi base todavía. La forma en que preparé la mía es la siguiente:

  • Ponga una abrazadera para que actúe como un brazo que sale de la base para que mi rueda pueda tirar en línea recta.
  • Atornillé una caja tosca para colocar el motor y la atornillé a una placa base, que sujeté a la pata de la base.
  • Hizo una polea de madera personalizada con un orificio para colocar la pequeña polea paso a paso en el interior. Hice el orificio central muy apretado y simplemente golpeé la polea paso a paso. Hice un agujero en la rueda hasta el medio para poder acceder al tornillo de la polea de metal para apretarlo en el motor paso a paso.
  • Pasó una cuerda desde el "brazo" de la cuna hasta la rueda. Aseguré la cuerda pasándola por el agujero que había perforado y colocándola en su lugar.

La mejor solución para el tercer paso es simplemente comprar una rueda de polea de mayor diámetro en primer lugar. El mío tiene un poco menos de 3 de diámetro dentro de la ranura y funciona muy bien para mi cuna en particular.

Mi primera versión usó un brazo en lugar de una rueda. No funcionó tan bien porque la fuerza no se estaba aplicando en una dirección constante, y también era muy susceptible de ser desviado si la posición inicial no era la correcta. Usar una rueda resuelve esos problemas. También me entretuve usando un pequeño sistema de poleas, pero terminé sin necesitarlo porque mi rueda me dio suficiente torque.

Paso 19: Configuración final

Configuración final
Configuración final

Monte el micrófono cerca de su hijo, pero en un lugar donde no se golpeen con ningún cable. Coloque los botones donde desee, siempre que tenga suficientes cables para llegar al destino final. También puedes simplemente reemplazar los botones con una configuración wifi en el arduino, pero aún no he profundizado tanto. ¡Buena suerte!

Recomendado: