Buen día.
He montado un programa para poder mover 6 servos de un brazo robot mandando la posición por teclado.
Aun soy novato con la programación y me he encontrado este problema:
-Los servos solo se mueven a la primera posición que ls mando, al mandar una segunda no reaccionan
-He puesto que me mande por serial la posición de los servos pero me está mandando el pin de los servos.
Agradecería consejos e ideas que se puedan incluir.
El brazo robot al final quedaría controlado por bluetooth por un escada de potenciómetros desde el móvil, ya sea mandando la posición deseada por el teclado del ordenador po por el móvil y con un ciclo programado. Cambiando de manual a automático por un pulso en alguna entrada física o por el móvil.
Hay que decir que el programa que adjunto es un esbozo de como quedaría al final. no es más que para ir haciendo pruebas en el brazo que he montado que incluso este es solo la versión 1. Aun tengo que introducir el servo que hará de codo y hacer la base más grande para contrarrestar el tamaño de la pinza.
Adjunto el programa.
/*
MOVER DOS SERVOS CON ARDUINO
Este codigo recibe numeros enteros por serial
y mueve dos servos.
*/
/*
Manera mover los servos:
se introducira un numero que sera desde 180x a 0x
la x sera el numero asociado al servo que queremos mover
ejemplo:
Para mover el servo 1 (servobase) a la posicion 90
hay que introducir 901
*/
#include<Servo.h>
//Creamos los objetos servo
Servo servobase; //servo1
Servo hombro; //servo2
Servo codo; //servo3
Servo muneca; //servo4
Servo mano; //servo5
Servo dedos; //servo6
int enviado; //Aqui enviamos el numero completo
int num; //Numero del servo
int posicion; //Posicion del servo
int posicion_base;
int posicion_hombro;
int posicion_codo;
int posicion_muneca;
int posicion_mano;
int posicion_dedos;
void setup()
{
//Inicializamos los Servos
servobase.attach(7);
servobase.write(90);
posicion_base=90;
hombro.attach(8);
hombro.write(45);
posicion_hombro=45;
codo.attach(9);
//codo.write();
posicion_codo=0;
muneca.attach(10);
muneca.write(0);
posicion_muneca=10;
mano.attach(11);
mano.write(90);
posicion_mano=90;
dedos.attach(12);
dedos.write(110);
posicion_dedos=110;
//Inicializamos la comunicacion por Serial
Serial.begin(9600);
}
void loop()
{
if(Serial.available() >= 1)
{
/*
1- Leer un numero entero por serial
2- Calculamos su modulo por 10 (sera el numero del motor)
3- Dividir el entero inicial por 10
4- Lo que quede, sera la posicion del motor
*/
enviado = Serial.parseInt();
num = enviado%10;
enviado = enviado/10;
posicion = enviado;
//Hora de mover los servos!
if(num == 1)
{
posicion = constrain (posicion,0,180);
posicion_base = posicion;
servobase.write(posicion);
}
else if(num == 2)
{
posicion = constrain (posicion,0,180);
posicion_hombro = posicion;
hombro.write(posicion);
}
else if(num == 3)
{
posicion = constrain (posicion,0,180);
posicion_codo = posicion;
codo.write(posicion);
}
else if(num == 4)
{
posicion = constrain (posicion,0,180);
posicion_muneca = posicion;
muneca.write(posicion);
}
else if(num == 5)
{
posicion = constrain (posicion,0,180);
posicion_mano = posicion;
mano.write(posicion);
}
else if(num == 6)
{
posicion = constrain (posicion,0,180);
posicion_dedos = posicion;
dedos.write(posicion);
}
// posicion_base = base.read();
Serial.print("Posicion base: ");
Serial.println(posicion_base);
Serial.print("Posicion hombro: ");
Serial.println(posicion_hombro);
Serial.print("Posicion codo: ");
Serial.println(posicion_codo);
Serial.print("Posicion muneca: ");
Serial.println(posicion_muneca);
Serial.print("Posicion mano: ");
Serial.println(posicion_mano);
Serial.print("Posicion dedos: ");
Serial.println(posicion_dedos);
}
}