Proyecto con Arduino «Funny Crane»

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

 

cableado-proyecto-arduino-funny-crane

 

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»

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *