Slapen n' Tweet (6 / 8 stap)

Stap 6: programmeren


Het programma heeft 5 belangrijkste secties. Alle twitter bibliotheken moeten worden opgenomen voor dit te laten werken. Kunt u de bibliotheken en een zoete snelle tutorial hier .

Utility Functions
De enige tool die ik heb is het nemen van de 5 beat keer gelezen en gemiddeld hen dan ze te converteren naar een beats per minuut.

Twitter
Dit is waar de twitter-bericht wordt verwerkt en verzonden. U bent gewaarschuwd als er iets misgaat en het foutbericht gegeven van twitter in de seriële monitor. Dit is belangrijk omdat netwerken altijd een pijn zijn. Ook wordt niet twitter verstoord wanneer u duplicaten verzendt. Dus als je hart is hetzelfde voor twee tweets in een rij en u zijn of niet bewegen. Het zal niet tweet tenzij er iets veranderd.

Sensoren
In de check verkeer functie kunt u zien dat de vroegere en huidige waarden worden vergeleken om te zien als er een wijziging is geweest. De wijziging wordt een beweging van een soort. Ik heb als verklaringen ingesteld zodat beweging wordt gedetecteerd in alle drie dimensies en ik heb een gevoeligheid instellen zodat kunt u precies hoeveel beweging zet de functie van de beweging. Het aantal keren verplaatst wordt vervolgens vergeleken met het totale aantal verkeer leest en vervolgens een eindoordeel wordt doorgegeven of er sprake is of was niet beweging tijdens de geselecteerde periode. Deze termijnen zijn als windows. Dus als ik in het tweede venster van 30 verplaatst, zal de Arduino tweet die ik binnen 30 seconden verplaatst heb. Als ik nog steeds ben, zal het zeggen dat ik blijf nog steeds tot het volgende venster. Het ook gefilterd zodat gonna jeuken uw neus of dingen als dat zal niet worden geteld als totale beweging.

De hartslagsensor telt de hoeveelheid tijd tussen elke hartslag voor 5 beats en vervolgens het gemiddelde van hen. De tijd tussen beats zal niet worden opgenomen als het buiten het bereik van een menselijk hart. Anders zou elke kramp of aanraking van de sensor Registreer als een wilde beat per minuut waarde. Tenzij je Lance Armstrong of een zoemende vogel moet uw BPM tussen 30 en 220. In studies gedaan onder 30BPM is uiterst onwaarschijnlijk en over 250BPM betekent meestal dat een arts wil je schokken met een defibrillator. Dit bereik kan gemakkelijk worden gewijzigd in het programma, als je toevallig net zo Dhr. Armstrong. Of een zoemende vogel squirrle man ding.

Uitgang
Dit is waar u zal besteden veel tijd als er fouten zijn gemaakt. Ik heb een paar uur wezenloos staren naar dit venster voor vele uren tijdens dit project. Ik hoop jij ook, want als het de eerste keer werkt niet je het goed doet.

De output gewoon neemt alle opgenomen gegevens en het naar de seriële console in de printStatus functie-uitgangen. Dit is voor probleemoplossing of onderzoek.

De tweetStatus neemt de verzamelde informatie uit de sensoren en tweets een bericht naar gelang van welke staat dat je bent tijdens uw slaap.

Functies van de Arduino
Gewoon de setup en de hoofdlus. Vrij zelf verklarend.

Hier is de Code:
#if defined(ARDUINO) & & ARDUINO > 18 / / Arduino 0019 of hoger
#include
#endif
#include
#include
#include
#include
#include

Versnellingsmeter staat
int x, y, z;
Versnellingsmeter lezingen
Booleaanse movementHistory [5] = {onwaar, false, false, false, onwaar};
Het tijdstip van de laatste hartslag
unsigned long lastMovementReadingTime = 0;
Het aantal leest genomen
int movementReads = 0;
Het aantal keren verplaatsen wanneer lezen
int movementCount = 0;

Hartslag sensor status
int irSensorState = 0;
Hartslag lezingen
int pulseTime [5] = {0,0,0,0,0};
Het tijdstip van de laatste hartslag
unsigned long currentTime = 0;

Hartslag pinnen
int SensorPin = 8;
int LEDpin = 9;

nodig voor twitter
unsigned long lastPrint = 0;
unsigned long lastTweet = 0;

Ethernet Shield instellingen
byte mac [] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};

vervangen van een adres op uw eigen netwerk hier
byte ip [] = {192, 168, 0, 250};

Uw Token om Tweet (het krijgen van http://arduino-tweet.appspot.com/)
Twitter twitter ("zet uw token hier.");

//=============================
Utility Functions
//=============================

/ * Duurt gemiddeld van de tijd tussen hartslagen * /
int calcPulseRate()
{
int pulseRate;
pulseRate = pulseTime [0] + pulseTime [1] + pulseTime [2] + [3] pulseTime, pulseTime [4]; Vervolgens neemt 60/gemiddelde te krijgen van de BPM
pulseRate = 60000 / (pulseRate/5);
Return pulseRate;
}

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

/ * tweets van het ingevoerde bericht aan twitter * /
VOID tweet (char * msg)
{
Serial.println ("verbinden...");
Als (twitter.post(msg)) {}
Geef & seriële uitgang ontvangen reactie op Serial.
Als geen uitvoer vereist is, kunt u het argument, bijvoorbeeld gewoon weglaten
int status = twitter.wait();
int status = twitter.wait (& Serial);
Als (status == 200) {}
Serial.println("OK.");
} else {}
Serial.Print ("mislukt: code");
Serial.println(status);
}
} else {}
Serial.println ("verbinding mislukt.");
}
}

//=============================
Sensoren
//=============================

/ * Controleert als er een wijziging aangebracht in versnellingsmeter positie is * /
Booleaanse checkMovement() //function oude waarden naar nieuwe ones vergelijkt en detecteert alleen als een bepaalde ammount verkeer gebeurt
{
Boolean ret = false;
int gevoeligheid = 3;
int newX, newY, newZ;

/ * Lees de nieuwe waarden * /
newX = analogRead(0); lezen van analoge invoer pin 0
newY = analogRead(1); analoge invoer pin 1 lezen
newZ = analogRead(2); analoge invoer pin 2 lezen

/ * Gecontroleerd op wijzigingen * /
Als (x-newX > gevoeligheid || x-newX <-gevoeligheid)
{
RET = true;
}
anders als (y-newY > gevoeligheid || y-newY <-gevoeligheid)
{
RET = true;
}
anders als (z-newZ > gevoeligheid || z-newZ <-gevoeligheid)
{
RET = true;
}

Als (millis() - lastMovementReadingTime > 30000)
{
for (int i = 4; ik > 0; ik--)
{
movementHistory [i] = movementHistory [i-1]; De matrix automatisch bijgewerkt, zodat de eerste waarde kan worden gewijzigd
}
movementHistory [0] = false;

Taakcyclus = 10%
Als (10 < = ((movementReads/movementCount) * 100))
{
movementHistory [0] = true;
}

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

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

Nieuwe waarden opslaan
x = newX;
y = newY;
z = newZ;

/ * Serial.print(newX);
Serial.Print("");
Serial.Print(newY);
Serial.Print("");
Serial.println(newZ); * /
retourneren of er beweging is
keren movementHistory [0];
}

/ * Leest de IR-sensor en wordt de tijd tussen hartslagen * /
int getHeartRate()
{
De status van de foto transistor aan stor gewend
int newState = digitalRead(SensorPin);

Is er een verandering
Als (newState! = irSensorState)
{
if(newState == 1)
{//beat is 1 of 0 dit als verklaring wordt alleen worden ingevoerd wanneer een 1 op een 0 of een 0 naar een 1 draait
for (int i = 4; ik > 0; ik--)
{
pulseTime [i] = pulseTime [i-1]; De matrix automatisch bijgewerkt, zodat de eerste waarde kan worden gewijzigd
}

/*
* Dit is het filter voor het systeem. De hartslag is niet toegestaan om te gaan boven 250BPM of onder 30BPM
* Andere filteren statistiek. Controleer of de waarde tussen beats groter dan een bepaald niveau is. Een grote verandering werkt niet, gewogen gemiddelde. vertraging spul.
*/
if(Millis() - currentTime > 240 & & millis() - currentTime < 2000 / * & & isMoving() == false * /)
{
pulseTime [0] = millis() - currentTime; houdt de tijd tussen beats tot een redelijk bereik om verwarring te voorkomen
}
}

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

Opslaan van de nieuwe staat
irSensorState = newState;
}

Berekent de hartslag aan het einde
Return calcPulseRate();
}

//=============================
Uitgang
//=============================

/ * Alle gegevens naar de seriële monitor worden afgedrukt * /
VOID printStatus (boolean isMoving, int pulseRate)
{
Als (millis() - lastPrint > = 1000)
{
Verkeer status afdrukken
Serial.Print ("verkeer:");
Als (isMoving)
{
Serial.println("True");
}
anders
{
Serial.println("false");
}

Pulse status afdrukken
Als (pulseTime [4] == 0)
{
Serial.println("Calibrating"); als 5 lezingen zijn niet genomen is nog steeds het apparaat kalibreren
} else
{
Serial.Print(pulseTime[0]); De gegevens worden afgedrukt
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();
}
}

/ * Vindt het bericht van de apprpriate volgens bewegingen en polsslag en verzendt het bericht naar de tweet functie * /
VOID tweetStatus (boolean isMoving, int pulseRate)
{
char msg [140];
Is de lengte van de tijd tussen tweets en andere filters om te beslissen welk bericht moet worden verzonden naar twitter
Als (millis() - lastTweet > = 300000) //5 minuten
{
Als (pulseRate > 120 & & isMoving)
{
sprintf (msg, "Awake met een polsslag van: %d", pulseRate);
}
anders als (pulseRate > 120 & &! isMoving)
{
sprintf (msg, "spannende droom met een polsslag van: %d", pulseRate);
}
anders
{
sprintf (msg, "slapen met een polsslag van: %d", pulseRate);
}

Tweet(msg);
de laatste keer bijgewerkt aangezien een tweet is gemaakt
lastTweet = millis();
}
}

//=============================
Functies van de Arduino
//=============================

/ * De Arduino setup functie * /
VOID Setup
{
delay(1000);
Ethernet.begin (mac, ip);
Serial.begin(9600);
pinMode(LEDpin,OUTPUT);
pinMode(SensorPin,INPUT);
digitalWrite(LEDpin,HIGH); Besturing weer de IR LED is in- of uitschakelen
}

/ * De Arduino uitvoeren lus dat de controles van de sensoren en stuurt vervolgens een tweet afhankelijk van de status van de sensoren * /
void loop
{
Boole isMoving = false;
int tekeer = 0;

/ * de versnellingsmeter controles voor veranderingen te zien of het apparaat verplaatsen of niet * /
isMoving = checkMovement();
/ * Berekent de gemiddelde hartslag in slagen per minuut volgens verschillen gedetecteerd door de IR-tranistor * /
Hartslag = getHeartRate();

/ * stuurt een bericht naar de seriële console * /
printStatus (isMoving, tekeer);
/ * stuurt een bericht naar twitter afhankelijk van de hartslag van de gebruikers en verkeer * /
tweetStatus (isMoving, tekeer);
}

Gerelateerde Artikelen

Tweeting zwangerschapstest

Tweeting zwangerschapstest

Het idee van het project kwam uit deze ironische twitter post. Maar he, waarom niet proberen te maken? Ik heb ergens gelezen dat de wereld heeft behoefte aan meer belachelijk smart-apparaten. Dus hier is het.Ik heb (we've) alleen ooit gebruikt de nie
Tweeting, draadloos, Ugly Drum Smoker (UDS) temperatuur controller met Android

Tweeting, draadloos, Ugly Drum Smoker (UDS) temperatuur controller met Android

(Laatst bijgewerkt: oktober 2014. Zie laatste stap voor details over wijzigingen.)Dit is de UDS digitale Supervisor, een Android app en hardware voor het onderhoud op afstand de temperatuur van uw UDS zoals een thermostaat. Uw telefoon monitoren van
Tweeting Vogelhuis/waterbak

Tweeting Vogelhuis/waterbak

Deze zomer mijn 5 jaar oude wilde zoon en ik om te werken aan een project dat zou leuk, educatief, en verband houden met aard. Terwijl u geniet van een prachtige Colorado zomeravond op het dek van het opa en oma's kijken alle van de kolibries vechten
Tweet-a-watt - hoe maak je een gekwetter Energiemeter...

Tweet-a-watt - hoe maak je een gekwetter Energiemeter...

Tweet-a-watt - hoe maak je een gekwetter Energiemeter...Dit project documenten mijn avonturen in het leren hoe aan kabellengte tot mijn huis voor het toezicht op draadloze macht. Ik woon in een gehuurde appartement dus ik heb geen hacken-toegang tot
Tweeting kat deur

Tweeting kat deur

Opmerking: om alles op één pagina zien, ga dan naar: www.tweetingcatdoor.com Na het ontvangen van veel e-mails vraagt van de instructies en Kits voor de bouw van de "Tweeting kat deur ", besloten heb ik om een versie die is zelfstandig en heeft
Tweeting huisdier Bowl

Tweeting huisdier Bowl

heb je ooit liep langs uw huisdier water of voedsel kom en zie het lege; alleen voor vraag me af hoe lang uw huisdieren zijn geweest zonder water? Hier is mijn nemen over een oplossing voor dit probleem: een kom dat tweets wanneer het leeg of weinig
Gut controleren een Tweeting en Facebooking koelkast

Gut controleren een Tweeting en Facebooking koelkast

ik heb een probleem, ik ben proberen om gewicht te verliezen maar ik hou van snoepen laat in de avond. En geen mens weet dat ik zelfs doen. Dat is een van mijn grootste hindernissen, ik dacht waarom niet omvatten al mijn sociale media vrienden en vol
De extase van buiten slapen onder de sterren

De extase van buiten slapen onder de sterren

Stel je voor als je wil, hoe spectaculair zou vallen in slaap onder een miljard sterren elke nacht. Neem een diepe adem van verse buiten lucht, en dan nog eens, en weet je bent één met het universum. Stel je voor hoe absoluut spectaculair het zou moe
Tweet-a-Pot: Twitter koffiepot ingeschakeld

Tweet-a-Pot: Twitter koffiepot ingeschakeld

hou van het idee van het maken van koffie op het vliegen? vanuit uw bed? Terwijl je op de bus komt thuis? Dan is de Tweet-a-pot voor jou!Tweet-a-pot is de volgende in fancy twitter ingeschakeld apparaten. Deze koffiepot kan de eigenaar te maken van e
Tweeting Webcam foto's van uw ZYBO

Tweeting Webcam foto's van uw ZYBO

Dit Instructable gaat over hoe om tweet foto's van een Webcam op een ZYBO, als alles klaar is, kun je de ZYBO inschakelen en beginnen tweeting onmiddellijk.Voor dit instructable moet u:ZYBO dat is met succes is opgestart met LinaroMonitorToetsenbord/
Linux computer tweeting.

Linux computer tweeting.

Dit gedaan voor een tijdje en I love it. Echte computer automatisering. Dit is een instructable om uw linux computer toegang tot twiiter via de opdrachtregel voor zowel verzenden en ontvangen tweets. Het grote ding over dit is dat het zal werken op e
Hoe om te slapen minder, maar niet het gevoel slapeloze

Hoe om te slapen minder, maar niet het gevoel slapeloze

na veel onderzoek en gebruik van mezelf als een cavia, ben ik in staat om delen van mijn bevindingen over hoe om te slapen minder, veel minder.Wat heb je nodig:Om te beseffen hoeveel tijd van uw leven u slapen bestedenOm te beseffen wat kan doen je m
Tweeting WiFi Radio Control Panel

Tweeting WiFi Radio Control Panel

dit is een update naar mijn Standalone WiFi Radio Control Panel, waarmee zij om tweet het nu spelende nummer en het station.  Het project is gebaseerd op een AdaFruit Boarduino, een Arduino-compatibele microcontroller-platform, met een Ethernet-shiel
Goedkope kat slapen hok

Goedkope kat slapen hok

Hallo. Dit is een goedkoop (kan worden onder $20, en Recycleerbaar) plastic doos voor een kat om te slapen en rusten in. Dit is goed voor indoor of outdoor katten. U kunt het gebruiken voor een kantoor of winkel kat. Ook kan een stuk speelgoed voor k