Paso 9: Programación tu ropa | Código completo de acelerómetro
Abajo está el código completo de Arduino para el acelerómetro:
/*
Resolver!
Aquí está el código utilizado para crear un sistema usable que un acelerómetro se utiliza para contar el número de
pasos que un usuario toma. El sistema almacena este valor en una variable y salidas de una presentación visual basada en la
número.
A continuación es el código utilizado. */
a continuación establece las variables y los pernos utilizados en el código
las siguientes describen los pasadores utilizados para las almohadillas de luz
int led = 5;
int led2 = 9;
led3 int = 11;
/ / int pasos = 7;
estas constantes describen los pines utilizados para el acelerómetro:
const int xpin = A5; / / eje x del acelerómetro
const int ypin = A2; / / eje
const int zpin = A3; / / eje z (sólo en modelos de 3-ejes)
número de milisegundos entre las lecturas
int sampleDelay = 500;
/ / la variable global "pasos" describe la variable utilizada para determinar la salida de luces:
pasos de int = 0;
SoftwareSerial xbee(5,6);
la configuración «comienza» todo:
void setup() {}
inicializar la comunicación serial:
Serial.Begin(9600);
/ / configurar lo Xbee serie a 9600
XBee.Begin(9600);
/ / inicializar los pines digitales como salida y los pernos del acelerómetro como entradas:
pinMode (led, salida);
pinMode (led2, salida);
pinMode (led3, salida);
pinMode (xpin, entrada);
pinMode (ypin, entrada);
pinMode (zpin, entrada);
}
una y otra vez funciona para siempre la rutina bucle:
void loop() {}
código de acelerómetro para determinar la variable 'pasos'
se utilizan las siguientes variables de flot para ayudar a determinar el umbral de "pasos":
oldy flotador = 0;
umbral de flotador = 0;
//read el valor de xbee
sensorValue = xbee.read();
Puerto de //serial de que imprime a lo que fue leído para confirmar que ha recibido
Serial.Print("; Valor del sensor = ");
Serial.Write(senorValue);
/ / pin lecturas para x, y, z:
int x = analogRead(xpin);
Delay(1); //add un pequeño retardo entre lecturas de pin. He leído que debería hacer esto pero no han probado la importancia
int y = analogRead(ypin);
Delay(1); //add un pequeño retardo entre lecturas de pin. He leído que debería hacer esto pero no han probado la importancia
int z = analogRead(zpin);
/ * zero_G es la lectura que esperamos del sensor cuando no detecta ninguna aceleración. Reste este valor del sensor de lectura para obtener un sensor cambiado de puesto de lectura. */
Float zero_G = 512;
/ * escala es el número de unidades que esperamos que la lectura del sensor para cambiar cuando cambia la aceleración a lo largo de un eje de 1G. Dividir el sensor cambiado de puesto de lectura en la escala para obtener aceleración en Gs. * /
escala de flotador = 102.3;
para este proyecto, no estamos imprimiendo los valores de 'x', pero si quieres imprimir:
Serial.Print (((float) x - zero_G) / escala);
Serial.Print("\t");
para este proyecto, estamos imprimiendo los valores de 'y', esto le ayudará a determinar el umbral:
umbral = oldy - ((float) y - zero_G) / escala;
Serial.Print ("y =");
Serial.Print (((float) y - zero_G) / escala);
Serial.Print("; umbral = ");
Serial.println(THRESHOLD);
para este proyecto, no estamos imprimiendo los valores de 'z', pero si quieres imprimir:
Serial.Print("\t");
Serial.Print (((float) z - zero_G) / escala); Serial.Print("\n");
Si (umbral > 1.3)
pasos ++;
Serial.Print ("pasos =");
Serial.Print(STEPS);
código utilizado para determinar qué conjunto de luces a la salida:
Si (pasos < = 5) {}
digitalWrite (led, alto); Encienda el primer LED pantalla (alto es el nivel de voltaje)
/ / delay(1000); / / espera por un segundo
digitalWrite (led, baja); Apague la primera pantalla de LED por lo que la tensión baja
Delay(1000); Espere un segundo
SoftwareSerial.println("A");
}
else if ((steps > 5) & & (pasos < 10)) {}
digitalWrite (led2, HIGH); a su vez el segundo LED Mostrar en (alto es el nivel de voltaje)
/ / delay(1000); / / espera por un segundo
digitalWrite (led2, LOW); Apague la segunda pantalla de LED por lo que la tensión baja
Delay(1000); Espere un segundo
SoftwareSerial.println("B");
}
else if (pasos > 10) {}
digitalWrite (LED 3, alto); a su vez el tercer indicador LED en (alto es el nivel de voltaje)
/ / delay(1000); / / espera por un segundo
digitalWrite (LED 3, bajo); Apagar la pantalla de LED tercer haciendo que la tensión baja
Delay(1000); Espere un segundo
SoftwareSerial.println("C");
}
Else {}
return 0;
}
/ retardo antes de la lectura siguiente:
Delay(sampleDelay);
}