Servo comentarios Hack (gratis) (8 / 8 paso)

Paso 8: Ajuste de Auto rango

armé una muestra más completa de código basada en V2 desde el paso 7. Ajustará automáticamente la gama de dos servos vestidas, guardar los datos de la gama en la EEPROM (gama de retroalimentación y nos rango de pulso) para el reinicio de futuro. También hay una opción para restablecer los datos guardados gama de reinicio.
También hay un bonito bloque que genera servo suave aceleración y desaceleración en base a la función coseno. Me encanta trig.
¡ Disfrute!

/ * > Auto_Set_Range <
Código de prueba de servo con retroalimentación hackeado del pote interno.
Cable de control del servo conectado a digital 10 y 11
Cable de retroalimentación de posición conectado a analógico 0 y 1
Servos son declarado en una matriz para la fácil adición de servos más.
Construir un divisor de voltaje en el pin ARef: + 5V--4,7 K--Aref--K 3,3--GND
Con una tensión regulada de 4.78V dando por resultado Referencia analógica será ~1.85V
(ver http://arduino.cc/en/Reference/AnalogReference)
Esto aumentará la resolución del potenciómetro de la lectura.
Utilice los siguientes comandos para toggel entre leer los comentarios de servo
y la lectura de cualquier otro pin analógico que necesita ver a 5V como referencia
analogReference(EXTERNAL); establece 1023 analógica en voltaje en el pin ARef
analogReference(DEFAULT); sistemas analógicos 1023 a 5V o 3.3V dependiendo de la fuente de alimentación

ESTE CÓDIGO VIENE EN 8,9 K EN LA MEMORIA. SIN TODOS LOS COMENTARIOS DE LA SERIE ES 8,3 K
PODÍA REDUCIRSE POR ALGUIEN MÁS INTELIGENTE QUE YO, ESTOY SEGURO!

*/

#include < Servo.h > //import biblioteca de servo
Biblioteca EEPROM //import #include < EEPROM.h >
const int numServos = 2; ¿cuantos servos tienes?
const int sPin [numServos] = {10, 11}; ¿Qué pines son coincidentes a?
Servo servo [numServos]; declare la matriz de servo

int highPulse [numServos]; anchura de pulso alta
int lowPulse [numServos]; anchura de pulso bajo
int [numServos]; lectura de comentarios lowPulse
int B [numServos]; lectura de comentarios highPulse
int aquí [numServos]; ángulo de movimiento de
int allí [numServos]; ángulo hacia

Float x [numServos]; convertidas a radianes para derivar la onda coseno del ángulo

int h;
int t;
int respuesta; utilizado para sostener el valor de retroalimentación servo
int tecla = 2;
int e = 1; Dirección de la EEPROM para empezar a almacenar/recuperar los datos de servo
int ángulo; ángulo de deriva de la función coseno. envía al servo en bucle
int btwReadings = 20; tiempo de retardo entre
int whlReading = 3; tiempo de retardo entre lecturas analógicas de la olla interna

Boolean rangeTest = false;
Boolean doneMove [numServos];

void setup() {}

Serial.Begin(19200); inicializar la salida serie
Serial.println ("es!");
analogReference(EXTERNAL);
pinMode (botón, entrada);
para (int i = 0; i < numServos; i ++) {}
pinMode (sPin[i],OUTPUT);
}
int n = EEPROM.read(0);
Si (n == 20) {}
callRange();
}
Si (rangeTest == false) {}
para (int i = 0; i < numServos; i ++) {}
setRange(i); ir a la gama de prueba y ajuste de los valores
doneMove [i] = true;
}
rangeTest = true;
EEPROM.write(0,20); indicar el futuro startups que hemos hecho esto!
}
Delay(1000);
}

void loop() {}

para (int i = 0; i < numServos; i ++) {}
Si (doneMove [i] == true) {}
doneMove [i] = false;
aquí [i] = se [i];
allí [i] = al azar (180.1) + 0,5;
Si (allí [i] == here[i]) {allí [i] = al azar (180.1) + 0.5;}
Si (aquí [i] < there[i]) {x [i] = 0;} Else {x [i] = 180;}
Serial.Print ("movimiento servo");
Serial.Print(i);
Serial.Print ("desde");
Serial.Print(here[i]);
Serial.Print ("a");
Serial.println(There[i]);
}
}

calcCos (posición actual, posición, paso, posición de matriz de servo)
para (int i = 0; i < numServos; i ++) {}
ángulo = calcCos(here[i],there[i],1.5,i);
Si (doneMove [i] == false) {}
servo[i].Write(Angle);
Delay(5);
}
}
} / / FINAL DE BUCLE VACÍO

/*
ESTE FUNCIÓN AUTO-AJUSTA LA GAMA DE SERVOS
ASUME PULSADOR EN PIN 2
*/

void setRange(int x) {//parameter pasado es la matriz posición de servo
int pb = 0; utilizado para sostener el botón lectura
int prueba; variable de uso general
int h;
int t;
pulso de int = 1500; primero que nos pulso utilizado en la prueba de rango
Serial.Print ("Pulse el botón para ajustar la gama de Servo[");
Serial.Print(x);
Serial.println("].");
{while(!PB)}
PB = digitalRead(Button);
}
PB = 0;
Serial.Print ("ajuste gama límites en... 3");
para (int i = 2; i > = 0; i--) {//count por tres segundos
Delay(1000);
Serial.Print("..");
Serial.Print(i);
}
Serial.println();
servo[x].Attach(sPin[x]);
Delay(20);
servo[x].writeMicroseconds(pulse); enviar servo a mediados de gama
Delay(2000); Espere a llegar

{}
pulso += 10; incriment nos anchura de pulso
readMove(x,pulse);
} while(h > t); condición para mantener la gama de prueba
highPulse [x] = pulso-20; mantenerse alejado de gama extrema
B [x] = h-10; ajustar la feedback de extremo
Serial.println();
servo[x].writeMicroseconds(highPulse[x]);
pulso = highPulse [x];
Delay(500);
{}
pulso-=10;
readMove(x,pulse);
} while(h < t);

lowPulse [x] = pulso + 20;
[X] = t + 10;
servo[x].writeMicroseconds(lowPulse[x]);

Comentarios = getFeedback(x); toma actual de lectura de la olla
allí [x] = map(feedBack,A[x],B[x],0,180); ajustar la feedback a la salida de grado
servo[x].Attach(sPin[x],lowPulse[x],highPulse[x]); Fije este servo
servo[x].Write(There[x]); envía impulsos de donde estamos

doneMove [x] = true;

prueba = [x] >> 8;
writeE(test); almacenar lectura baja retroalimentación
writeE(A[x]);
prueba = B [x] >> 8;
writeE(test); almacenar lectura alta regeneración
writeE(B[x]);
prueba = lowPulse [x] >> 8;
writeE(test); almacenar el pulso bajo control
writeE(lowPulse[x]);
prueba = highPulse [x] >> 8;
writeE(test); almacenar el pulso de control de la alta
writeE(highPulse[x]);

Serial.println ("gama de comentarios:");
Serial.Print(A[x]);
Serial.Print ("<>");
Serial.println(B[x]);
Serial.println ("nos gama del pulso:");
Serial.Print(lowPulse[x]);
Serial.Print ("<>");
Serial.println(highPulse[x]);
Serial.Print("servo[");
Serial.Print(x);
Serial.println ("] adjunto, los datos guardados en la EEPROM");

} //end setRange()

void writeE (byte b) {}
EEPROM.write(e,b);
e += 1;
}

void readMove (int n, int p) {}
t = getFeedback(n);
servo[n].writeMicroseconds(p);
Delay(btwReadings);
h = getFeedback(n);
Serial.println(h);
} //END CONJUNTO GAMA

/*
ESTA FUNCIÓN LEE EL POTENCIÓMETRO INTERNO DEL SERVO
*/
int getFeedback(int a) {}
int j;
int promedio;
int resultado;
int prueba;
int leer [20];
Boolean hecho;

para (j = 0; j < 20; j ++) {}
lectura [j] = analogRead(a); obtener datos del potenciómetro de servo
Delay(whlReading);
} / / ordenar el array bajo a alto en lecturas
= false; clara clasificación bandera
mientras que (hecho! = true) {/ / clase de intercambio simple, ordena números de menor a mayor
= true;
para (j = 0; j < 20; j ++) {}
Si (lectura [j] > lectura [j + 1]) {/ / aquí los números de clasificación
prueba = lectura [j + 1];
la lectura [j + 1] = lectura de [j];
lectura [j] = prueba;
= false;
}
}
}
significa = 0;
para (int k = 6; k < 14; k ++) {//discard los 6 mayores y 6 lecturas más bajas
significa += leyendo [k];
}
resultado = media/8; media lecturas útiles
Return(Result);
} / / FIN OBTENER RETROALIMENTACIÓN

/*
ESTA FUNCIÓN LLAMA PREVIAMENTE SET GAMA DE EEPROM
ASUME PULSADOR EN PIN 2
*/
void callRange() {}
int prueba;

Serial.Print ("a guardado gama pulse botón reset en el pin 2");
para (int i = 5; i > = 0; i--) {}
Serial.Print("..");
Serial.Print(i);
para (int j = 0; j < 100; j ++) {}
Si (digitalRead(Button) == 1) {}
Serial.println();
Delay(1000);
retorno;
}
Delay(10);
}
}
Serial.println();
Serial.println ("al recuperar servo datos");
para (int i = 0; i < numServos; i ++) {}
prueba = readE();
[I] = prueba << 8; obtener una lectura almacenada baja retroalimentación
[I] = A [i] + readE();
prueba = readE();
B [i] = prueba << 8; obtener lectura de retroalimentación alta almacenados
B [i] = B [i] + readE();
prueba = readE();
lowPulse [i] = prueba << 8; conseguir el pulso de control de baja storeed
lowPulse [i] = lowPulse [i] + readE();
prueba = readE();
highPulse [i] = prueba << 8; Haz almacenado control alto pulso
highPulse [i] = highPulse [i] + readE();
Comentarios = getFeedback(i); toma actual de lectura de la olla
allí [i] = map(feedBack,A[i],B[i],0,180); ajustar la feedback a la salida de grado
servo[i].Attach(sPin[i],lowPulse[i],highPulse[i]); Fije este servo
servo[i].Write(There[i]); envía impulsos de donde estamos
doneMove [i] = true; configurar para realizar primero mover
Serial.println ("gama de comentarios:");
Serial.Print(A[i]);
Serial.Print ("<>");
Serial.println(B[i]);
Serial.println ("nos gama del pulso:");
Serial.Print(lowPulse[i]);
Serial.Print ("<>");
Serial.println(highPulse[i]);
Serial.Print("servo[");
Serial.Print(i);
Serial.println ("] adjunto, obtenido datos de EEPROM");
Serial.Print ("servo");
Serial.Print(i);
Serial.Print ("posición actual =");
Serial.println(There[i]);
Serial.println();

}

rangeTest = true; establece el indicador rangeTest
} //end callRange()

byte readE() {}
byte E = EEPROM.read(e);
e += 1;
E retorno;
} //END LLAMADA GAMA

/*
ESTA FUNCIÓN CREA LISO (COSENO) MOVIMIENTO DE AQUÍ PARA ALLÁ
*/

int calcCos (int h, int XX, flotador s, int n) {}
int r;
int a;
if(h < th) {}
x [n] += s;
Si (x [n] > = 181) {doneMove [n] = true;}
r = (cos(radians(x[n]))*100);
un = map(r,100,-100,h,t);
}
if(h > TH) {}
x [n] = s;
Si (x [n] < = -1) {doneMove [n] = true;}
r = (cos(radians(x[n]))*100);
un = map(r,-100,100,h,t);
}
volver a;
} //END CALC COS

Artículos Relacionados

IKEA MOLGER paquete plano HACK

IKEA MOLGER paquete plano HACK

Paquete plano muebles hacks son una pasión enorme y ha sido así desde mi primer caso de libro de Billy.La Asamblea de este hack de herramienta de almacenaje molger particular no requiere de habilidades de alto montaje, ni herramientas específicas. De
Sub Micro (espía) dirigible no rígido del edificio con Servos hackeado

Sub Micro (espía) dirigible no rígido del edificio con Servos hackeado

Ible este describe la estructura de propulsión interior dirigible alrededor de 10g, adecuado para uso con un común 11" globo del látex. Con 14" o más grande del globo tiene una capacidad de carga para una película de antena miniatura cámara para
Máquina de café de Arduino

Máquina de café de Arduino

Hice este proyecto porque era molesto para iniciar la máquina, que regresar un minuto más tarde cuando la máquina de café está lo suficientemente caliente para encender el interruptor. Encienda el interruptor por 10 segundos, luego apagarlo nuevament
PROTEI_007

PROTEI_007

Protei_007 es el séptimo prototipo para un proyecto llamado proteinuria, que es de código abierto, articulado, segmentado, robótica, sin tripulación, velero, construido para navegar contra el viento, arrastrando un auge largo aceite absorbente, para
Móvil infantil interactivo

Móvil infantil interactivo

¿qué se puede hacer con acrílico fluorescente como la inspiración?  Decidimos hacer un resplandor en la oscuridad bebé móvil, con un juguete que lo acompaña.  Este proyecto se completó como parte de la clase de arte y Computación Universidad de Olin
DIY administradores de contraseñas utilizando Kurety

DIY administradores de contraseñas utilizando Kurety

Seguridad en línea se está convirtiendo en cada vez más importante cada año. Parece como que crecen exponencialmente en tecnología y aquellos que quieran hacer vida peor para empresas y consumidores por igual. Sentí que era mi deber dar un paso lejos
Inteligente de impresión 3D

Inteligente de impresión 3D

¿Por qué smart?Pausa el proceso de impresión le permite integrar sin problemas los componentes internos. Una vez que vayas en este instructable, podrás añadir sensores (RFID), hardware (tornillos, tuercas) e incluso refuerzan su plástico 3d parte imp
Cable Control remoto sin pilas

Cable Control remoto sin pilas

este dínamo Rover es un juguete de control remoto con cable que no requiere ningún tipo de batería, pero utiliza la fuente de energía renovable de la energía del músculo de los niños (o la potencia muscular de los adultos a su niño interior).La idea
Cómo hacer un obstáculos evitando Robot Arduino estilo

Cómo hacer un obstáculos evitando Robot Arduino estilo

que siempre has querido hacer uno de esos robots cool que básicamente pueden evitar cualquier objeto. Pero no tienes suficiente dinero para comprar uno de esos realmente caros, con piezas del corte ya que todos los materiales donde allí para usted. S
Guía secreta de Candy Crush tus amigos con puntajes altos no quieren saber sobre

Guía secreta de Candy Crush tus amigos con puntajes altos no quieren saber sobre

Haga clic aquí ahora http://www.youtube.com/watch?v=E2cLTfcgQ2c y conseguir el número 1 caramelo aplastar secreto guía para vencer a todos su Facebook amigos puntuaciones 100% Legal y totalmente Hack gratis técnicasSi eres como yo, probablemente has
De la torre Pro SG 90 Micro Servo Hack

De la torre Pro SG 90 Micro Servo Hack

Hola allí! Este instructivo contiene las instrucciones completa de cómo se puede hackear una torre pro SG 90 micro servo para rotación continua.¿Por qué?Servos micro pueden ser utilizados como las ruedas del robot y son más convenientes para tales us
Hack de vida: Cómo hacer una película de Redbox gratis

Hack de vida: Cómo hacer una película de Redbox gratis

Todo el mundo quiere cosas gratis. Aquí es un hack de vida simple para conseguir una película libre de Redbox.Paso 1: El único pasoSólo hay uno, solo paso para conseguir una película libre de Redbox.Cuando pide un código de promoción, escriba en: dvd
Servo mecánico Hack. ¿

Servo mecánico Hack. ¿

Otro hack de servo, esto es realmente necesario?Solamente, si agrega algo nuevo. Creo que esto se hace, pero corregirme si me equivoco.Como un novato, al principio me costó entender las diferencias entre los tipos de hacks. Lo que puedo decir hay 3 t
Hack Cube Servo (G15) de alta velocidad

Hack Cube Servo (G15) de alta velocidad

Este Instructable le guiará para modificar el Servo del cubo para conseguir una mayor velocidad de servo de cubo normal.Paso 1: Obtener herramientas necesarias listosLo que se necesita:1. un destornillador philips.2. pegamento para plástico de epoxy.