Paso 4: Datos incompletos
Sólo cortar y pegar como subir un archivo en ibles no puede retener el nombre del archivo y será confuso.
=== Inicio del sketch ===
/*
Este programa está basado en ejemplos de sketch de Arduino y los siguientes:
ADXL345_Example.PDE - esquema de ejemplo de integración con un ADXL345 triple acelerómetro de ejes.
Copyright (C) 2011 amor electrónica (loveelectronics.co.uk)
Este programa es software libre: usted puede redistribuirlo y/o modificar
bajo los términos de la versión 3 de Licencia Pública General GNU como
Publicado por la Free Software Foundation.
Este programa se distribuye con la esperanza de que sea útil,
pero sin ninguna garantía; ni siquiera la garantía implícita de
COMERCIABILIDAD o aptitud para un propósito PARTICULAR. Ver la
GNU General Public License para más detalles.
Usted debe han recibido una copia de la Licencia Pública General de GNU
junto con este programa. Si no, consulte < http://www.gnu.org/licenses/>.
*/
Incluir la biblioteca de alambre por lo que podemos empezar usando I2C.
#include < Wire.h >
Incluir la biblioteca electrónica ADXL345 de amor para que podamos usar el acelerómetro.
#include < ADXL345.h >
incluir la librería servo para controlar el servo
#include < Servo.h >
Servo myservoA; crear objeto servo para controlar un servo
se puede crear un máximo de ocho objetos de servo
Servo myservoB; crear objeto servo para controlar un servo
se puede crear un máximo de ocho objetos de servo
posA de int = 0; variable para almacenar la posición del servo
posB int = 0;
Declarar una instancia global del acelerómetro.
ADXL345 accel;
Configurar un pin que vamos a utilizar para indicar nuestro estado mediante un LED.
int statusPin = 2; Estoy usando el pin digital 2.
//------------------------------------------------------
void setup()
{
myservoA.attach(7); se fija el servo en el pin 6 al objeto servo
myservoB.attach(6); se fija el servo en el pin 7 al objeto servo
Empezar por configurar el puerto Serial por lo que podemos enviar los resultados de nuestras.
Serial.Begin(9600);
Iniciar la biblioteca de hilos I2C para que podamos usar I2C para hablar con el acelerómetro.
Wire.Begin();
Listo un LED para indicar nuestro estado.
pinMode (statusPin, salida);
Crear una instancia del acelerómetro en la dirección por defecto (0x1D)
aceleración = ADXL345();
Compruebe que el acelerómetro es de hecho conectado.
if(ACCEL. EnsureConnected())
{
Serial.println ("conectado a ADXL345.");
digitalWrite (statusPin, HIGH); Si estamos conectados, la luz LED de nuestro estado.
}
otra cosa
{
Serial.println ("Could not connect to ADXL345.");
digitalWrite (statusPin, bajo); Si no estamos conectados, apague el LED.
}
Establecer el intervalo del acelerómetro a un máximo de 2G.
Accel. SetRange (2, true);
Dile el acelerómetro para empezar a tomar medidas.
Accel. EnableMeasurements();
}
//----------------------------------
void loop()
{
if(ACCEL. IsConnected) / / si estamos conectados al acelerómetro.
{
Leer los datos en bruto en el acelerómetro.
AccelerometerRaw raw = accel. ReadRawAxis();
Estos datos se pueden acceder como sigue:
int xAxisRawData = crudo. XAxis;
Leer la * escala * datos procedentes del acelerómetro (esto hace su propia lectura del acelerómetro
así que no tienes que ReadRawAxis antes de usar este método).
Este método útil le da el valor de G gracias a la biblioteca electrónica de amor.
AccelerometerScaled escalada = accel. ReadScaledAxis();
Estos datos se pueden acceder como sigue:
Float xAxisGs = escala. XAxis;
Habían salida de los datos recibidos.
Salida (crudo, escala);
}
}
Salida de los datos por el puerto serie.
Salida nula (AccelerometerRaw prima, AccelerometerScaled escaladas)
{
Inicializa el pin LED como salida:
pinMode (8, salida);
pinMode (9, salida);
pinMode (11, salida);
pinMode (12, salida);
Nos hablan de los valores crudos de acelerómetro.
Serial.Print("Raw:\t");
Serial.Print (crudo. XAxis);
Serial.Print("");
Serial.Print (crudo. EjeY respectivamente);
Serial.Print("");
Serial.Print (crudo. ZAxis);
Nos hablan de esto datos, pero la escala en unidades de utilidad (G).
Serial.Print ("\tScaled:\t");
Serial.Print (escalado. XAxis);
Serial.Print ("G");
Serial.Print (escalado. EjeY respectivamente);
Serial.Print ("G");
Serial.Print (escalado. ZAxis);
Serial.println("G");
Show conducido por eje
Si (a escala. XAxis > 0) {}
digitalWrite (8, HIGH); prende el LED
}
otra cosa
{
digitalWrite (8, bajo); fijar el LED apagado
}
//
Si (a escala. EjeY respectivamente > 0) {}
digitalWrite (9, alto); prende el LED
}
otra cosa
{
digitalWrite (9, bajo); fijar el LED apagado
}
//
Si (a escala. ZAxis > 0.8) {}
digitalWrite (11, alto); prende el LED
}
otra cosa
{
digitalWrite (11, bajo); fijar el LED apagado
}
mover servo según condiciones detecta---
Si (a escala. ZAxis < 0.8) {}
Serial.println ("*** subir inferior---aumento menor");
RaiseLower();
Delay(265);
}
//
Si (a escala. EjeY respectivamente < 0) {}
Serial.println ("*** Twitch medio---media de contracción nerviosa");
twitchMiddle();
Delay(400);
}
//
Si (a escala. XAxis < 0 y escala. EjeY respectivamente > 0 y escala. ZAxis > 0) {}
Serial.println ("*** derecho---Wink Wink derecha");
winkRight();
Delay(265);
}
}
//-------------------------------
subrutina para subir y baja
void RaiseLower()
{
twitchshort();
Twitch();
para (posA = 0; posA < 135; posA += 1) / / va desde 0 grados a 135 grados
{/ / en pasos de 1 grado
myservoA.write(posA); Dile el servo a la posición en la variable 'pos'
myservoB.write(180-posA);
Delay(12); espera 15ms para el servo a la posición
}
para (posA = 135; posA > = 1; posA-= 1) / / va de 135 grados a 0 grados
{
myservoA.write(posA); Dile el servo a la posición en la variable 'pos'
myservoB.write(180-posA);
Delay(12); espera 15ms para el servo a la posición
}
}
subrutina para twitch---
void twitch()
{
para (posA = 0; posA < 45; posA += 1) / / va desde 0 grados a 45 grados
{/ / en pasos de 1 grado
myservoA.write(posA); Dile el servo a la posición en la variable 'pos'
myservoB.write(180-posA);
Delay(8); espera 15ms para el servo a la posición
}
para (posA = 45; posA > = 1; posA-= 1) / / va de 45 grados a 0 grados
{
myservoA.write(posA); Dile el servo a la posición en la variable 'pos'
myservoB.write(180-posA);
Delay(8); espera 15ms para el servo a la posición
}
}
subrutina para contracción---
void twitchshort()
{
para (posA = 0; posA < 25; posA += 1) / / va desde 0 grados a 25 grados
{/ / en pasos de 1 grado
myservoA.write(posA); Dile el servo a la posición en la variable 'pos'
myservoB.write(180-posA);
Delay(5); espera 15ms para el servo a la posición
}
para (posA = 25; posA > = 1; posA-= 1) / / va de 25 grados a 0 grados
{
myservoA.write(posA); Dile el servo a la posición en la variable 'pos'
myservoB.write(180-posA);
Delay(5); espera 15ms para el servo a la posición
}
}
subrutina para contracción media---
void twitchMiddle()
{
para (posA = 0; posA < 100; posA += 1) / / va de 100 grados a 0 grados
{/ / en pasos de 1 grado
myservoA.write(posA); Dile el servo a la posición en la variable 'pos'
myservoB.write(180-posA);
Delay(10); espera 15ms para el servo a la posición
}
para (posA = 100; posA > = 1; posA-= 1) / / va de 100 grados a 0 grados
{
myservoA.write(posA); Dile el servo a la posición en la variable 'pos'
myservoB.write(180-posA);
Delay(10); espera 15ms para el servo a la posición
}
Delay(250);
para (posA = 0; posA < 120; posA += 1) / / va de 100 grados a 0 grados
{/ / en pasos de 1 grado
myservoA.write(posA); Dile el servo a la posición en la variable 'pos'
myservoB.write(180-posA);
Delay(10); espera 15ms para el servo a la posición
}
}
subrutina para guiño derecho---
void winkRight()
{
para (posA = 0; posA < 120; posA += 1) / / va desde 0 grados hasta 120 grados
{/ / en pasos de 1 grado
myservoA.write(posA); Dile el servo a la posición en la variable 'pos'
myservoB.write(180-posA);
Delay(10); espera 15ms para el servo a la posición
}
para (posA = 120; posA > = 1; posA-= 1) / / va de 180 grados a 0 grados
{
myservoA.write(posA); Dile el servo a la posición en la variable 'pos'
myservoB.write(180-posA);
Delay(10); espera 15ms para el servo a la posición
}
myservoB.write(180); elevar la otra oreja si descansando para que coincida con la vertical
}
=== final del bosquejo ===
Si inclina la cabeza hacia adelante, las orejas deben hacer un completo arriba y abajo.
Si inclina la cabeza hacia la derecha, la oreja izquierda debe ir hacia arriba y hacia abajo.
Debe haber un leve meneo si una ligera inclinación. Los oídos de la gota en una posición baja.
Jugar con los valores de retardo y servo tiempo lazos de acción realista.
Recuerde que tendrá que averiguar donde tus servos están colocados al comienzo de 0 grados y de qué manera giran. Luego tienes que acomodar el movimiento con los comandos de servo en el bosquejo.
X, Y, Z y servo movimiento en mi prototipo puede no coincidir con ustedes.