Este es un proyecto realizado en la formación de Saregune “Programación en lenguajes estructurados, sistemas embebidos con Arduino y Javascript Avanzado”. Se llama «Funny Crane» y en resumen es una grua con dos servomotores, uno se mueve sobre el eje Y (vertical) y el otro sobre el eje X (horizontal), de la combinación de ambos ejes se produce el movimiento de la grúa hasta 180 grados que es el límite de movimiento de este tipo de motores.
Está inspirado en las maquinas con las que jugábamos de niños en las barracas. Aquellas en que manejando una grua con un gancho intentabamos atrapar un peluche, o unas bolas que llevaban algún juguete dentro.
Materiales
- 2 Microservomotor Miuzei SG90 9G
- 10 Depresores de madera
- 10 Alambres de acero galvanizado
- 1 Base de madera
- 1 Iman
- 1 Protoboard
- 1 Arduino uno R3
- 1 Joystick AzDelivery 5 x ky-023
- 1 Pulsador
El circuito
Vídeo explicativo
Código
//importamos libreria Servo
#include <Servo.h>
//definimos servomotores, la funcion Servo viene en la libreria
Servo servo1;
Servo servo2;
//definimos las variables con la posicion inicial de los ejes
//a 90º porque van de 0 a 180º o sea 90 a un lado y 90 a otro
int ejeX = 90;
int ejeY = 90;
//variables X e Y del joystick van a pines analogico A4 y A5
int joyX = A4;
int joyY = A5;
int pulsador = 2; // Pin del pulsador
int inicialI=90; // Ángulo inicial del servo
int finaly=50;
int monedero =3; //boton inicio ciclo
unsigned long tiempoInicio = 0; //iniciamos contador a 0
int buzz=9;
void setup()
{
//declaramos los pines donde van los servos, no necesita especif. que son salida
servo1.attach (A0);//función "attach()"indica a placa Arduino pin de salida se va a conectar el servo
servo2.attach (A1);
//declaramos pines joystick como INPUT y Buzzer salida
pinMode (A4, INPUT);
pinMode (A5, INPUT);
//iniciamos cada variable "eje" a 90º, ahi inicia el proceso
servo1.write (ejeX);
servo2.write (ejeY);
pinMode(buzz, OUTPUT);
pinMode (pulsador, INPUT_PULLUP);
pinMode (monedero, INPUT_PULLUP);
servo1.write(inicialI); // Mover el primer servo a la posición inicial
servo2.write(inicialI); // Mover el segundo servo a la posición inicial
Serial.begin (9600);
}
void loop()
{
if (digitalRead(monedero) == LOW) {
tiempoInicio = millis(); // Guardar el tiempo de inicio
// Espera de 5 segundos
while (millis() - tiempoInicio < 1000) {
// Hacemos cualquier cosa que queramos mientras se espera
ejeX = map(analogRead(joyX), 0, 1023, 0, 179);
//instrucciones para SERVO 1, EJE X
if (analogRead(A4)<=90 && ejeX<180){ //si vamos en una direccion mientras este entre esos valores lo que lea del pin A0
ejeX++;
servo1.write (ejeX); //se escribe en la variable eje X
}
if (analogRead(A4)>90 && ejeX>0){ //lo mismo en la otra direccion
ejeX--;
servo1.write (ejeX);
Serial.println("el eje es >0 y <90");
Serial.println();
}
ejeY = map(analogRead(joyY), 0, 1023, 0, 179);
//instrucciones para SERVO 2, EJE Y
if (analogRead(A5)<=90 && ejeY <180){ //si vamos en una direccion mientras este entre esos valores lo que lea del pin A1
ejeY++;
servo2.write (ejeY); //se escribe en la variable eje Y
}
if (analogRead(A5)>90 && ejeY >0){ //lo mismo en la otra direccion
ejeY--;
servo2.write (ejeY);
}
if (digitalRead(pulsador) == LOW) { // Si se presiona el botón
servo1.write(120); // Mover el primer servoX a la posición final
delay(5000); // Esperar 10 segundos
servo2.write(50); // Mover el segundo servoY a la posición final abajo
delay(4000); // Esperar 10 segundos
servo2.write(120); // Mover el primer servoY a la posición inicial arriba
delay(4000);
servo1.write(50); // Mover el segundo servoX a la posición inicial
delay(5000); // Esperar 10 segundos
servo2.write(4000);//mover servoY abajo
delay(5000);
servo2.write(120); // Mover el primer servoY a la posición inicial arriba
delay(5000);
servo1.write(inicialI);//volver a posicion inicial
servo2.write(inicialI);
}
}
// Emisión del pitido en el buzzer
for (int i = 0; i < 100; i++) {
digitalWrite(buzz, HIGH);
delayMicroseconds(3000);
digitalWrite(buzz, LOW);
}
servo2.write(finaly);
}
delay(15); //hacemos que el ciclo tenga intervalo entre un ciclo y el siguiente
}
A continuación tenéis los links de los demás proyectos:
Safe Zone – Sistema de seguridad
Baserri Berdea – Sensor de humedad remoto

Un pensamiento en “Proyecto con Arduino «Funny Crane»”