Tabla de contenido:
- Paso 1: Haga la base y el soporte de la tapa con bisagras
- Paso 2: Haga un brazo servo más largo y conecte el servo
- Paso 3: Cargue y ejecute el croquis
Video: Rodillo de bolas automatizado con Arduino y un servo: 3 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:40
Este es un pequeño proyecto simple de Arduino y servo que tarda unas dos horas en completarse. Utiliza un servo para levantar un extremo de la tapa de un frasco y hacer girar una bola de acero alrededor de la circunferencia interior. Se inicia automáticamente, puede cambiar de velocidad y puede girar dos (¿o más?) Bolas a la vez. Divertido de construir y empezar a trabajar. Los parámetros de tiempo se pueden reproducir para velocidades probablemente incluso más rápidas. Se podrían usar algunos sensores de efecto hall con una bola magnética para convertirla en una máquina más inteligente que pueda descubrir los mejores parámetros.
Debo mencionar que alguien aquí en instructables.com tiene una máquina de rodillos de bolas más sofisticada:
Materiales necesitados:
Arduino Uno (o cualquier Arduino)
Servo escudo (opcional)
Servo de 9g
tapa del frasco
bola de acero
un poco de madera de desecho
Paso 1: Haga la base y el soporte de la tapa con bisagras
La base es solo un trozo de madera para montar la pieza de madera con bisagras. La madera con bisagras debe ser más grande que la tapa de un frasco que usarás y tener suficiente espacio para las bisagras y para montar el servo.
Usé pequeñas bisagras de plástico rc para aviones y las pegué a la madera con bisagras y a la base.
Paso 2: Haga un brazo servo más largo y conecte el servo
Para hacer un brazo de servo más largo, simplemente adjunté una pieza de madera de 5 centímetros al brazo del servo con un par de pequeños tornillos y tuercas. El brazo del servo debe estar a 90 grados en el servo cuando está horizontal a la base.
Acabo de pegar en caliente el servo al soporte de madera con bisagras, pero descubrí que si lo dejas funcionar por más de unos minutos, el servo calentará el pegamento caliente y se soltará de la madera. Por lo tanto, se justifica un mejor método de apego.
Paso 3: Cargue y ejecute el croquis
Conecté mi servo al pin 7 usando un escudo porque es conveniente y solo cuestan unos pocos dólares. Si no tiene un escudo, conecte el cable de señal del servo al pin 7 en el Arduino, el cable rojo a 5v en el Arduino y el cable de tierra a GND en el Arduino. El arduino debe proporcionar suficiente corriente para operar el servo. Utilizo el escudo porque es fácil usar un voltaje externo solo para el servo.
Aquí está el boceto. Escribí una rutina del controlador de velocidad del servo para alterar la velocidad del servo porque probablemente no funcionará bien a toda velocidad.
Puede modificar el timingDelay para obtener diferentes velocidades de rodadura de la bola. También puede modificar el tercer parámetro de la función myServo () para cambiar la velocidad.
//////////////////////////////////////////////////// //////////////////////////////////////////////////// ////////////// // creado por Jim Demello, Universidad Shangluo, 2017
// eres libre de usar, manipular, hacer lo que quieras con este código, mi nombre no es obligatorio
// Esta rutina permite interpolar cualquier número de servos, solo agregue nuevas líneas si el número de servos excede 4
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#incluir
Servo myservo1, myservo2; // crea un objeto servo para controlar un servo
int servoRead (int servoNumber) {
int servoCurrent;
if (servoNumber == 1) {servoCurrent = myservo1.read (); }
if (servoNumber == 2) {servoCurrent = myservo2.read (); }
return servoCurrent;
}
void servoWrite (int servoNumber, int offset) {
if (servoNumber == 1) {myservo1.write (offset); }
if (servoNumber == 2) {myservo2.write (offset); }
}
void myServo (int newAngle, int angleInc, int incDelay, int servoNum) {
int curAngle;
if (servoNum == 1) {curAngle = myservo1.read (); }
if (servoNum == 2) {curAngle = myservo2.read (); }
if (curAngle <newAngle) {
for (int ángulo = curAngle; angle <newAngle; angle + = angleInc) {
if (servoNum == 1) myservo1.write (ángulo);
if (servoNum == 2) myservo2.write (ángulo);
delay (incDelay); }
}
else if (curAngle> newAngle) {
for (int ángulo = curAngle; angle> newAngle; angle - = angleInc) {
if (servoNum == 1) myservo1.write (ángulo);
if (servoNum == 2) myservo2.write (ángulo);
delay (incDelay); }
}
}
void interpolate2Servos (int servo1, int servo1Position, int servo2, int servo2Position, int numberSteps, int timeDelay) {
int servo1Current, servo2Current;
servo1Current = servoRead (servo1);
servo2Current = servoRead (servo2);
// Serial.print ("Servo3Pos y Actual"); Serial.print (servo3Position); Serial.print (""); Serial.println (servo3Current);
// Serial.print ("Servo4Pos y Actual"); Serial.print (servo4Position); Serial.print (""); Serial.println (servo4Current);
// Serial.print ("Servo5Pos y Actual"); Serial.print (servo5Position); Serial.print (""); Serial.println (servo5Current);
// Serial.print ("Servo6Pos y Actual"); Serial.print (servo6Position); Serial.print (""); Serial.println (servo6Current);
// Serial.println ("");
int cOffset = (servo1Position - servo1Current); cOffset = abs (cOffset) / numberSteps;
int dOffset = (servo2Position - servo2Current); dOffset = abs (dOffset) / numberSteps;
int cOffsetTotal = 0, dOffsetTotal = 0;
cOffsetTotal = servo1Current;
dOffsetTotal = servo2Current;
para (int x = 0; x
if (servo1Position> servo1Current) {cOffsetTotal = cOffsetTotal + cOffset; }
else {cOffsetTotal = cOffsetTotal - cOffset; }
if (servo2Position> servo2Current) {dOffsetTotal = dOffsetTotal + dOffset; }
else {dOffsetTotal = dOffsetTotal - dOffset; }
if (servo1Position! = servo1Current) servoWrite (servo1, cOffsetTotal);
if (servo2Position! = servo2Current) servoWrite (servo2, dOffsetTotal);
// Serial.print ("Desplazamiento ayb"); Serial.print (aOffsetTotal); Serial.print (""); Serial.println (bOffsetTotal); retraso (10);
delay (timeDelay);
} // final para
//////////////////////////////////////
// cuidar los restos de módulo //
/////////////////////////////////////
if (servo1Position! = servo1Current) servoWrite (servo1, servo1Position);
if (servo2Position! = servo2Current) servoWrite (servo2, servo2Position);
}
int timingDelay = 100;
int servoDelay = 100;
int degGap = 10;
// Este es el grado inicial (debe ser menor que el grado final)
int degStart = 0;
// Estos son los grados finales (deben ser mayores que el grado inicial)
int degEnd = 360;
// Este es el radio del círculo
int radio = 8;
configuración vacía ()
{
Serial.begin (9600);
retraso (100);
myservo1.attach (7); // conecta el servo en el pin 7 al objeto servo
myservo1.write (90);
myservo2.attach (8); // conecta el servo en el pin 8 al objeto servo
myservo2.write (90);
retraso (1000); // espera a que llegue el servo
interpolate2Servos (1, 90, 2, 90, 10, 60); // neutral
retraso (1000);
}
bucle vacío () {
timingDelay = 15; // funciona a las 10
servoDelay = 4;
spin4 ();
// interpolate2Servos (1, 90, 2, 90, 1, 60); // neutral
// retraso (1000);
// salir (0); // pausar el programa - presione reiniciar para continuar
}
void spin3 () {
interpolate2Servos (1, 90, 2, 110, 1, 60); // neutral
delay (timingDelay);
interpolate2Servos (1, 90, 2, 80, 1, 60); // neutral
delay (timingDelay);
}
void spin2 () {
// interpolate2Servos (1, 80, 2, 90, 1, 50); // neutral
delay (timingDelay);
interpolate2Servos (1, 80, 2, 80, 1, 60); // neutral
delay (timingDelay);
interpolate2Servos (1, 110, 2, 80, 1, 60); // neutral
delay (timingDelay);
// interpolate2Servos (1, 110, 2, 110, 1, 60); // neutral
delay (timingDelay);
}
void spin1 () {
// int deg = (degStart / (180 / 3.14));
flotar grados = (gradosStart * 3.141592 / 180); // convertir grados a radianes
flotar xPos = 90 + (cos (grados) * radio);
// xPos = round (xPos);
flotar yPos = 90 + (sin (grados) * radio);
// yPos = round (yPos);
Serial.print ("degGap ="); Serial.print (degGap); Serial.print ("deg ="); Serial.print (deg); Serial.print ("cos ="); Serial.print (cos (deg)); Serial.print ("degStart ="); Serial.print (degStart); Serial.print ("x ="); Serial.print (xPos); Serial.print ("y ="); Serial.print ("y ="); Serial. println (yPos);
// interpolate2Servos (1, xPos, 2, yPos, 1, servoDelay); // neutral
myservo1.write (xPos);
myservo2.write (yPos);
delay (timingDelay);
if (degStart> = degEnd) {
degStart = 0;
si (degGap> 180)
degGap = 180;
// degGap = 0;
demás
degGap = degGap + 2;
degGap = degGap - 2;
// degStart = degStart + degGap;
}
degStart = degStart + degGap;
}
void spin4 () {
para (int i = 0; i <= 360; i ++) {
flotar j = 20 * (cos ((3,14 * i) / 180)) + 90;
flotar k = 20 * (sin ((3,14 * i) / 180)) + 90;
myservo1.write (j);
myservo2.write (k);
Serial.print (j);
Serial.print (",");
Serial.println (k);
retraso (100);
}
}
Recomendado:
Reparación del controlador de rodillo CD-I de Philips: 5 pasos
Reparación del controlador de rodillo CD-I de Philips: un problema común con el controlador de rodillo CD-I de Philip es que los emisores de infrarrojos degradarán el rendimiento y la bola de seguimiento dejará de seguir. Los botones funcionarán pero la bola de seguimiento no se moverá. Esto se puede solucionar quitando y reemplazando el
Bolas de orbe brillantes de bricolaje con Arduino: 8 pasos (con imágenes)
DIY Glowing Orb Balls con Arduino: Hola chicos :-) En este instructivo voy a construir un increíble proyecto de LED Arduino. He usado bolas de dragón hechas de vidrio, pego un LED blanco con cada bola de dragón y programé el Arduino con diferentes patrón como efecto de respiración, apilar por st
Agregar rodillo (punto de montaje del segundo eje) en micro servos para proyectos robóticos: 4 pasos
Agregue Idler (segundo punto de montaje del eje) en micro servos para proyectos robóticos: en proyectos robóticos humanoides, los servos se utilizan en las articulaciones para mover diferentes segmentos del robot, la mayoría de las veces es mejor montar cada segmento en 2 o más puntos en el eje de rotación del servo para la estabilidad y la transferencia adecuada de par
Cámara de 180 ° con seguimiento de bolas: 5 pasos (con imágenes)
Ball Tracking 180 ° Camera: ¡Bienvenido a mi primer proyecto! Estoy emocionado de compartir lo que hice y mostrarle los pasos para construir su propia cámara de seguimiento. Este proyecto fue posible utilizando la biblioteca OpenCV junto con Python
Cómo hacer un rodillo de etiquetas: 4 pasos
Cómo hacer un rodillo de etiquetas: Los siguientes pasos le mostrarán aproximadamente cómo hacer un rodillo de etiquetas para una impresora de etiquetas pequeña. Trabajo como especialista en TI en un laboratorio y uno de los trabajos de nuestras damas de servicio al cliente es imprimir unos miles de etiquetas de una etiqueta Zebra Label p