Buenas
Soy nuevo en el tema de programación en arduino y por cosas de la vida quise simular el movimiento de un dedo con servos sg90 mediante la flexión del sensor adosad a un guante. He montado la estructura, pero al confeccionar el código y ejercutarlo, los valores obtenidos y posterior codificación para ver los motores, resultan muy variados entorno a los ángulos y la velocidad de los servos en responder a los cambios constante que registra el sensor de flexión cuando muevo el dedo (temblores).
Es posible que sean las sentencias de valor absoluto, obtenga grados variados en una cantidad de tiempo determinado, generando movimientos bruscos.
Adjuntare el codido del programa que estado trabajando.
include <Servo.h>
Servo dedo11, dedo12;
int servoPin1 = 6;
int servoPin2 = 7;
int flexPin1 = A1;
void setup() {
Serial.begin(9600);
dedo11.attach(servoPin1, 500, 1500);
dedo12.attach(servoPin2, 500, 1500);
pinMode(servoPin1, OUTPUT);
pinMode(servoPin2, OUTPUT);
pinMode(flexPin1, INPUT);
}
void loop() {
Serial.println("Resistencia flexPin1:" + String((analogRead(flexPin1))));
while((analogRead(flexPin1)>=410 && analogRead(flexPin1)<=550)){
float pos4 = map(analogRead(flexPin1), 410, 550, 0, 180);
float pos5 = map(analogRead(flexPin1), 420, 560, 0, 180);
float pos6 = pos4- pos5;
if(pos6<=1,3){
Serial.println("Resistencia flexPin1:" + String((analogRead(flexPin1))));
pos6 = constrain(pos6, 0, 180);
Serial.println("Grados dedo12:" + String(pos4));
Serial.println("Grados pos5:" + String(pos5));
Serial.println("Grados pos6:" + String(pos6));
dedo12.write(pos4);
delay(1);
}
while((analogRead(flexPin1)>=270 && analogRead(flexPin1)<=405)){
float pos1 = map(analogRead(flexPin1), 270, 405, 0, 150);
float pos2 = map(analogRead(flexPin1), 280, 400, 0, 150);
float pos3 = pos1- pos2;
if(pos3<=1,3){
Serial.println("Resistencia flexPin1:" + String((analogRead(flexPin1))));
pos3 = constrain(pos3, 0, 180);
Serial.println("Grados dedo11:" + String(pos1));
Serial.println("Grados pos2:" + String(pos2));
Serial.println("Grados:pos3" + String(pos3));
dedo11.write(pos1);
delay(1);
}
}
}
}
//delay(1000);