Dormir n' Tweet (6 / 8 paso)

Paso 6: programación

El programa tiene 5 secciones principales. Todo twitter bibliotecas deben ser incluidas para que funcione. Usted puede conseguir las bibliotecas y un dulce rápido tutorial aquí .

Funciones de utilidad
La única utilidad que tengo es tomar ritmo 5 leído veces y adecua entonces convertirlos en pulsaciones por minuto.

Twitter
Esto es donde es procesado y enviado el mensaje de twitter. Se alertó a si algo sale mal y da el mensaje de error de twitter en el monitor serie. Esto es importante porque las redes son siempre un dolor. También twitter no es molesto cuando envíe duplicados. Así que cuando estás corazón es el mismo para dos tweets en una fila y son o no son móviles. No se twittear a menos que algo ha cambiado.

Sensores de
En la función de movimiento de control se puede ver que se comparan valores pasados y presentes para ver si ha habido un cambio. El cambio es un movimiento de algún tipo. Tengo si declaraciones configurado para detectar movimiento en las tres dimensiones y tengo una sensibilidad creada para que usted pueda cambiar exactamente cuánto movimiento pone en marcha la función de movimiento. El número de veces que se movió luego es comparado con la cantidad total de movimiento Lee y luego se pasa un veredicto final si había o no movimiento durante el período de tiempo. Estos períodos son como windows. Así que si me muevo en la segunda ventana 30, Arduino se tweet que me he trasladado dentro de 30 segundos. Si estoy todavía, a decir que me sigue hasta la siguiente ventana. También se se filtra para que va a picar la nariz o cosas así no contarán como movimiento total.

El sensor de ritmo cardíaco cuenta la cantidad de tiempo entre cada latido del corazón de 5 latidos y luego los promedios. No se registrará el tiempo entre latidos si es fuera del rango de un corazón humano. De lo contrario cada contracción o táctil del sensor registraría como un salvaje beat por minuto valor. A menos que usted Lance Armstrong o un colibrí tu BPM debe estar entre 30 y 220. En estudios realizados a continuación 30BPM es extremadamente improbable y sobre 250BPM generalmente significa que un médico le da te de descarga con un desfibrilador. Esta gama se puede cambiar fácilmente en el programa si le sucede así que el Sr. Armstrong. O una zumbido cosa del hombre pájaro squirrle.

Salida
Esto es donde pasarán mucho tiempo si se producen errores. Pasé un par de horas mirando sin comprender esta ventana durante muchas horas en este proyecto. Espero que hacer demasiado, porque si funciona la primera vez no hacerlo bien.

La salida simplemente toma todo grabado información y salidas a la consola serial en la función printStatus. Esto es para cualquier consulta o resolución de problemas.

El tweetStatus toma la información recabada de los sensores y tweets un mensaje dependiendo de qué estado que estás en durante su sueño.

Funciones de Arduino
Sólo la configuración y el bucle principal. Bastante autoexplicativo.

Aquí está el código:
#if defined(ARDUINO) & & ARDUINO > 18 / / Arduino 0019 o posterior
#include
#endif
#include
#include
#include
#include
#include

Estado de acelerómetro
int x, y, z;
Lecturas del acelerómetro
Boolean movementHistory [5] = {falso, falso, falso, falso, falso};
El tiempo de los últimos latidos del corazón
lastMovementReadingTime largo sin signo = 0;
El número de lecturas tomadas
int movementReads = 0;
El número de veces en movimiento cuando se lee
int movementCount = 0;

Estado del sensor de ritmo cardíaco
int irSensorState = 0;
Lecturas de ritmo cardíaco
pulseTime int [5] = {0,0,0,0,0};
El tiempo de los últimos latidos del corazón
currentTime larga sin signo = 0;

Pernos de la frecuencia cardíaca
int SensorPin = 8;
int LEDpin = 9;

para twitter
lastPrint largo sin signo = 0;
lastTweet largo sin signo = 0;

Configuración de Ethernet Shield
mac de bytes [] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};

sustituir una dirección de red aquí
byte ip [] = {192 168 0, 250};

Su Token a Tweet (obtenerlo del http://arduino-tweet.appspot.com/)
Twitter twitter ("ponga su ficha aquí.");

//=============================
Funciones de utilidad
//=============================

/ * Toma un promedio de tiempo entre latidos del corazón * /
int calcPulseRate()
{
int pulseRate;
pulseRate = pulseTime [0] pulseTime [1] pulseTime [2] + pulseTime [3] + pulseTime [4]; luego toma 60/media para BPM
pulseRate = 60000 / (pulseRate/5);
volver pulseRate;
}

//=============================
Twitter
//=============================

/ * tweets el mensaje entrado a la twitter /
void tweet (char * msg)
{
Serial.println ("conectando...");
Si (twitter.post(msg)) {}
Especificar y serie a la respuesta de salida recibida a la serie.
Si no hay salida es necesaria, sólo puede omitir el argumento, por ejemplo
int estado = twitter.wait();
int estado = twitter.wait (y serie);
Si (status == 200) {}
Serial.println("OK.");
} else {}
Serial.Print ("error: código");
Serial.println(Status);
}
} else {}
Serial.println ("fallada la conexión.");
}
}

//=============================
Sensores de
//=============================

/ * Comprueba si ha habido un cambio en la posición del acelerómetro * /
checkMovement() Boolean //function compara valores antiguos a los nuevos y sólo detecta si está ocurriendo una cierta cantidad de movimiento
{
Boolean ret = false;
sensibilidad de int = 3;
int newX, newY, newZ;

/ * Leer los nuevos valores * /
newX = analogRead(0); leyó el pin de entrada analógica 0
newY = analogRead(1); leyó el pin de entrada analógica 1
newZ = analogRead(2); leyó el pin de entrada analógica 2

/ * Comprobar cambios * /
Si (x-newX > sensibilidad || x newX <-sensibilidad)
{
RET = true;
}
else if (newY y > sensibilidad || newY y <-sensibilidad)
{
RET = true;
}
else if (z-newZ > sensibilidad || newZ z <-sensibilidad)
{
RET = true;
}

Si (millis() - lastMovementReadingTime > 30000)
{
para (int i = 4; i > 0; i--)
{
movementHistory [i] = movementHistory [i-1]; Actualizaciones de la matriz por lo que puede cambiar el primer valor
}
movementHistory [0] = false;

Ciclo de servicio = 10%
Si (10 < = ((movementReads/movementCount) * 100))
{
movementHistory [0] = true;
}

movementReads = 0;
movementCount = 0;
lastMovementReadingTime = millis();
}

Si (ret)
{
movementCount ++;
}
movementReads ++;

Guardar nuevos valores
x = newX;
y = newY;
z = newZ;

/ * Serial.print(newX);
Serial.Print("");
Serial.Print(newY);
Serial.Print("");
Serial.println(Newz); * /
volver si hay movimiento
volver movementHistory [0];
}

/ * Lee el sensor de infrarrojos y obtiene el tiempo entre latidos del corazón * /
int getHeartRate()
{
Utiliza para stor el estado del transistor de la foto
newState int = digitalRead(SensorPin);

Ha habido un cambio
Si (newState! = irSensorState)
{
if(newState == 1)
{//beat es 1 o 0 si la declaración se introduce solamente cuando un 1 a un 0 o un 0 a un 1
para (int i = 4; i > 0; i--)
{
pulseTime [i] = pulseTime [i-1]; Actualizaciones de la matriz por lo que puede cambiar el primer valor
}

/*
* Este es el filtro para el sistema. La frecuencia cardíaca no debe ir encima 250BPM o debajo de 30BPM
* Otros métodos de filtrado. Compruebe si el valor entre latidos es mayor que un cierto nivel. Un gran cambio no funciona, media ponderada. materia de retraso.
*/
if(Millis() - currentTime > 240 & & millis() - currentTime < 2000 / * & & isMoving() == false * /)
{
pulseTime [0] = millis() - currentTime; mantiene el tiempo entre latidos a un rango razonable para evitar la confusión
}
}

if(newState == 0)
{
currentTime = millis();
}

Almacenar el estado de nuevo
irSensorState = newState;
}

calcula la frecuencia del pulso en el extremo
volver calcPulseRate();
}

//=============================
Salida
//=============================

/ * Imprime toda la información en el monitor serial * /
void printStatus (isMoving boolean, int pulseRate)
{
Si (millis() - lastPrint > = 1000)
{
Imprimir estado de movimiento
Serial.Print ("movimiento:");
Si (isMoving)
{
Serial.println("true");
}
otra cosa
{
Serial.println("false");
}

Imprimir estado de pulso
Si (pulseTime [4] == 0)
{
Serial.println("calibrating"); Si no se han tomado 5 lecturas todavía es calibrar el dispositivo
} else
{
Serial.Print(pulseTime[0]); Imprime los datos de
Serial.Print (",");
Serial.Print(pulseTime[1]);
Serial.Print (",");
Serial.Print(pulseTime[2]);
Serial.Print (",");
Serial.Print(pulseTime[3]);
Serial.Print (",");
Serial.Print(pulseTime[4]);
Serial.Print (",");
Serial.Print ("BPM:");
Serial.println(pulseRate);
}
lastPrint = millis();
}
}

/ * Encuentra el mensaje de apprpriate según el pulso y los movimientos y envía el mensaje a la función del tweet * /
void tweetStatus (boolean isMoving, int pulseRate)
{
char mensaje [140];
Es la longitud del tiempo entre tweets y otros filtros para decidir que mensaje debe enviarse a twitter
Si (millis() - lastTweet > = 300000) //5 minutos
{
Si (> 120 pulseRate & & isMoving)
{
sprintf (msg, "despierta con un pulso de: %d", pulseRate);
}
else if (pulseRate > 120 & &! isMoving)
{
sprintf (msg, "sueño emocionante con un pulso de: %d", pulseRate);
}
otra cosa
{
sprintf (msg, "durmiendo con un pulso de: %d", pulseRate);
}

Tweet(MSG);
la última vez que se actualiza desde que se hizo un tweet
lastTweet = millis();
}
}

//=============================
Funciones de Arduino
//=============================

/ * La función de configuración de Arduino * /
void setup()
{
Delay(1000);
Ethernet.Begin (mac, ip);
Serial.Begin(9600);
pinMode(LEDpin,OUTPUT);
pinMode(SensorPin,INPUT);
digitalWrite(LEDpin,HIGH); Controla el tiempo en el LED IR está activado o desactivado
}

/ * El Arduino ejecuta bucle que comprueba los sensores y envía un tweet dependiendo del estado de los sensores * /
void loop()
{
Boolean isMoving = false;
ritmo cardíaco int = 0;

/ * comprueba si el acelerómetro de cambios también ver si el dispositivo es móvil o no * /
isMoving = checkMovement();
/ * calcula el promedio ritmo cardiaco en pulsaciones por minuto según las diferencias detectadas por el tranistor IR * /
ritmo cardíaco = getHeartRate();

/ * envía un mensaje a la consola serial * /
printStatus (isMoving, ritmo cardíaco);
/ * envía un mensaje de twitter según el ritmo cardiaco de los usuarios y el movimiento * /
tweetStatus (isMoving, ritmo cardíaco);
}

Artículos Relacionados

Tweet-a-watt - cómo hacer un medidor de potencia canto...

Tweet-a-watt - cómo hacer un medidor de potencia canto...

Tweet-a-watt - cómo hacer un medidor de potencia de canto...Este proyecto documenta mis aventuras en el aprendizaje de cómo cablear hasta mi casa para el control de la energía inalámbrica. Vivo en un apartamento alquilado para no tener hacking-acceso
¿Tweet-a-Pot: Twitter habilitado Coffee Pot

¿Tweet-a-Pot: Twitter habilitado Coffee Pot

gusta la idea de un café sobre la marcha? ¿de tu cama? ¿Mientras estás en el autobús que viene casera? Entonces el pote de Tweet es para usted!Tweet-a-pot es la siguiente en twitter lujo habilitado dispositivos. Esta cafetera permite a su dueño hacer
El éxtasis de dormir afuera bajo las estrellas

El éxtasis de dormir afuera bajo las estrellas

Imagina si se quiere, qué espectacular sería dormirse bajo 1 billón estrellas todas las noches. Toma una respiración profunda de fresco aire y luego otro y sabes que eres uno con el universo. Imaginar cómo absolutamente espectacular sería, para abrir
Cómo dormir menos pero no siente sin dormir

Cómo dormir menos pero no siente sin dormir

después de mucha investigación y yo usando como conejillo de Indias, soy capaz de compartir mis hallazgos sobre cómo dormir menos, mucho menos.Lo que usted necesita:Para darse cuenta de cuánto tiempo de tu vida te pasas durmiendoPara darse cuenta de
Cómo lavar un saco de dormir

Cómo lavar un saco de dormir

Crecer en una familia acampa y unirse a Escultismo me dieron un amor de camping desde muy temprana edad. Pregunte quien tienda campos de que una de sus piezas más valiosas del equipo es su bolsa de dormir. Un saco bien cuidado puede significar la dif
Como usar un Ergo Carrier para calmar a su bebé dormir

Como usar un Ergo Carrier para calmar a su bebé dormir

Bienvenidos!Mi nombre es Jen y tengo un llevar a tu bebé, cambio de pañales de tela, lactancia materna, colecho, homeschooling mamá a cuatro diminutos sorprendentes--Manny (el loco gemelos de dos años), Zoe (9), Niko (5) y Vi.  Días son bastante chif
Volar a dormir. Cama de niño.

Volar a dormir. Cama de niño.

Se trata de una cama que hice para mi hijo. Le encantan los aviones. Me encanta proyectos ridículos que no tengo tiempo para. Es un partido en el cielo!Paso 1: inspiración Esta es la parte donde beber cerveza y pensar en ese proyecto impresionante qu
Saco de dormir para conversión del edredón

Saco de dormir para conversión del edredón

Bueno, el tema de abajo dormir tejidos es un poco polarizante. Si quieres disfrutar, hay toneladas de hilos de foro discutiendo en todo detalle. Al final es hasta una cuestión de preferencia. Sin embargo, voy a explicar muy brevemente lo que es.Básic
Cómo llegar a dormir.

Cómo llegar a dormir.

Todo el mundo ha tenido una de esas noches. Te metiste en la cama, su agradable y acogedor, y tal vez ver la televisión por un tiempo. Luego, voltear y cerrar los ojos. Unos 10 minutos más tarde usted se dio cuenta de que no dormirse. Estos son algun
Gato barato dormir aparador

Gato barato dormir aparador

Hola. Se trata de un bajo costo (puede ser debajo de $20 y reciclable) caja de plástico para un gato dormir y descansar en. Esto es adecuado para gatos interiores o al aire libre. Se podría utilizar para un gato de oficina o tienda. También podría se
Dormir torta de Santa

Dormir torta de Santa

Santa es tuckered todos hacia fuera después de su gran noche de entrega de regalos!Hice este pastel para fiesta de Navidad de un cliente. El árbol y la silla son todos pastel y Santa, la chimenea y los regalos son trata de cereal de arroz.Usted neces
Tweet para las burbujas

Tweet para las burbujas

Este proyecto se implementó recientemente en una conferencia IOT en Pune, India. La máquina de burbujas que trajimos desde aquí, se modificó para hacer burbujas si alguien tweets con #PuneIOT. Después de que la gente vino a saber sobre esto tenemos u
Cantar su perro dormir!

Cantar su perro dormir!

So... Este instructable he hecho voluntad dirá cómo canta un perro de cualquier raza para dormir. ¡ FUNCIONA! Realmente he probado este método en dos de mis perros... un kelpie australiano y un terrier australiano... Y dentro de diez minutos estaban
Raspar y mapa Tweets

Raspar y mapa Tweets

Esta es una guía práctica para raspar (archivo de tweets), guardar los tweets en una hoja de cálculo de google y migrar los datos a una tabla de la fusión de Google y finalmente producir un mapa de donde el usuario se encuentra (si es que se han fija