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»”