Sova n' Tweet (6 / 8 steg)

Steg 6: programmering



Programmet har 5 huvuddelar. Alla twitter bibliotek måste inkluderas om detta ska fungera. Du kan få bibliotek och en söt snabb tutorial här .

Utility funktioner
Den enda nytta jag har tar 5 beat läst gånger och i genomsnitt dem sedan konvertera dem till ett slag per minut.

Twitter
Detta är där twitter meddelandet bearbetas och skickas. Du är varnad om något går fel och ges felmeddelandet från twitter i följetong monitor. Detta är en viktig eftersom nätverk är alltid en smärta. Också blir inte twitter upprörd när du skickar kopior. Så när du är hjärtat är densamma för två tweets i rad och du är eller inte är rörliga. Det kommer inte tweet om något har förändrats.

Sensorer
I funktionen kontrollera rörelsen kan du se att tidigare och nuvarande värden jämförs för att se om det har skett en förändring. Ändringen är en rörelse av något slag. Jag har om uttalanden så rörelse detekteras i alla tre dimensioner och jag har en känslighet ställa in så att du kan ändra exakt hur mycket rörelse sätter igång funktionen rörelse. Antalet gånger som flyttat är sedan jämfört med det totala antalet rörelsen läser och sedan en slutlig dom skickas om det var eller inte var rörelse under tidsperioden. Dessa tidsperioder är som windows. Så om jag flyttar i det andra fönstret i 30, twittrar Arduino som jag har flyttat inom 30 sekunder. Om jag fortfarande är, kommer det att säga jag förblir fortfarande till nästa fönster. Det är också filtrerats så kommer klia din näsa eller saker som det inte kommer att räknas som totala rörelse.

På dig pulssensorn räknar tid mellan varje hjärtslag för 5 beats och sedan i genomsnitt dem. Tiden mellan slag registreras inte om det är utanför intervallet för ett mänskligt hjärta. Annars varje twitch eller touch sensor skulle registrera sig som en vilda slag per minut värde. Om du inte är Lance Armstrong eller en surrande fågel bör din puls mellan 30 och 220. I studier som har gjorts under 30BPM är ytterst osannolikt och över 250BPM innebär oftast en läkare vill chockera dig med en defibrillator. Detta intervall kan enkelt ändras i programmet om du bara så råkar vara Mr Armstrong. Eller en surrande fågel squirrle man sak.

Utgång
Det är där du kommer att tillbringa mycket tid om det sker några misstag. Jag tillbringade ett par timmar stirrade uttryckslöst på fönstret i många timmar under detta projekt. Jag hoppas du gör också, eftersom om det fungerar första gången du inte gör det rätt.

Resultatet helt enkelt tar alla registrerade information och utgångar till seriekonsoll i funktionen printStatus. Detta är för felsökning eller utredning.

TweetStatus tar den information som samlats in från sensorerna och tweets ett meddelande beroende på vilket skick du är under sömnen.

Arduino funktioner
Bara setup och den viktigaste loopen. Söt jag förklarande.

Här är koden:
#if defined(ARDUINO) & & ARDUINO > 18 / / Arduino 0019 eller senare
#include
#endif
#include
#include
#include
#include
#include

Accelerometer staten
int x, y, z;
Accelerometer avläsningar
booleska movementHistory [5] = {falskt, false, false, false, false};
Tiden för sista hjärtrytm
osignerade långa lastMovementReadingTime = 0;
Antal läsningar tagit
int movementReads = 0;
Hur många gånger flytta när läser
int movementCount = 0;

Puls sensor status
int irSensorState = 0;
Puls avläsningar
int pulseTime [5] = {0,0,0,0,0}.
Tiden för sista hjärtrytm
osignerade långa currentTime = 0;

Puls pins
int SensorPin = 8;
int LEDpin = 9;

behövs för twitter
osignerade långa lastPrint = 0;
osignerade långa lastTweet = 0;

Ethernet-Shield inställningar
byte [mac] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};

ersätta en adress på ditt eget nätverk här
byte ip [] = {192, 168, 0, 250};

Din Token tweet (få den från http://arduino-tweet.appspot.com/)
Twitter twitter ("lägga din token i här");

//=============================
Utility funktioner
//=============================

/ * Tar i genomsnitt av tiden mellan hjärtat slår * /
int calcPulseRate()
{
int pulseRate;
pulseRate = pulseTime [0] + pulseTime [1] + pulseTime [2] + [3] pulseTime pulseTime [4]. sedan tar 60/genomsnittligt att få BPM
pulseRate = 60000 / (pulseRate/5).
återvända pulseRate;
}

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

/ * tweets matas in budskapet till twitter * /
void tweet (char * msg)
{
Serial.println ("ansluta...");
om (twitter.post(msg)) {
Ange & Serial output fick svar på följetong.
Om ingen utgång krävs, kan du bara utesluta argumentet, t.ex.
int status = twitter.wait();
int status = twitter.wait (& följetong);
om (status == 200) {
Serial.println("OK.");
} annat {
Serial.Print ("misslyckades: koden");
Serial.println(status);
}
} annat {
Serial.println ("Anslutning misslyckades.");
}
}

//=============================
Sensorer
//=============================

/ * Kontrollerar om det har skett en förändring i accelerometer läge * /
booleska checkMovement() //function jämför gamla värden till nya och identifierar endast om en viss mängd rörelse sker
{
Boolean ret = false;
int känslighet = 3;
int newX, newY, newZ;

/ * Läs de nya värdena * /
newX = analogRead(0); Läs analog ingångsstift 0
newY = analogRead(1); Läs analog ingång stift 1
newZ = analogRead(2); Läs analog ingång stift 2

/ * För ändringskontroll * /
om (x-newX > känslighet || x-newX <-känslighet)
{
ret = sant;
}
annars om (y-newY > känslighet || y-newY <-känslighet)
{
ret = sant;
}
annars om (z-newZ > känslighet || z-newZ <-känslighet)
{
ret = sant;
}

om (millis() - lastMovementReadingTime > 30000)
{
för (int jag = 4; jag > 0; i--)
{
movementHistory [i] = movementHistory [i-1]; Uppdateringar i matrisen så det första värdet kan ändras
}
movementHistory [0] = false;

Duty cycle = 10%
om (10 < = ((movementReads/movementCount) * 100))
{
movementHistory [0] = true;
}

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

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

Lagra nya värden
x = newX;
y = newY;
z = newZ;

/ * Serial.print(newX);
Serial.Print("");
Serial.Print(newY);
Serial.Print("");
Serial.println(newZ); * /
återgå om det finns rörelse
återgå movementHistory [0];
}

/ * Läser IR-sensorn och får tiden mellan hjärtat slår * /
int getHeartRate()
{
Brukade stor status för foto transistorn
int newState = digitalRead(SensorPin);

Det har skett en förändring
om (newState! = irSensorState)
{
IF(newState == 1)
{//beat är 1 eller 0 om uttalande endast anges när en 1 vänder sig till en 0 eller 0 till 1
för (int jag = 4; jag > 0; i--)
{
pulseTime [i] = pulseTime [i-1]; Uppdateringar i matrisen så det första värdet kan ändras
}

/*
* Detta är filtret för systemet. Pulsen-är inte tillåtet att gå över 250BPM eller under 30BPM
* Andra filtrering metoder. Kontrollera om värdet mellan beats är större än en viss nivå. En stor förändring fungerar inte, viktat medelvärde. dröjsmål grejer.
*/
IF(Millis() - currentTime > 240 & & millis() - currentTime < 2000 / * & & isMoving() == false * /)
{
pulseTime [0] = millis() - currentTime; håller tiden mellan beats till ett rimligt intervall för att undvika missförstånd
}
}

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

Lagra den nya staten
irSensorState = newState;
}

beräknar pulsen i slutet
återvända calcPulseRate();
}

//=============================
Utgång
//=============================

/ * Skriver ut all information till seriell monitor * /
void printStatus (boolean isMoving, int pulseRate)
{
om (millis() - lastPrint > = 1000)
{
Skriva ut rörelsen status
Serial.Print ("rörelse:");
om (isMoving)
{
Serial.println("true");
}
annat
{
Serial.println("false");
}

Puls utskriftsstatus
om (pulseTime [4] == 0)
{
Serial.println("Calibrating"); om 5 avläsningar inte har vidtagits kalibrerar enheten fortfarande
} annat
{
Serial.Print(pulseTime[0]); Skriver ut data
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();
}
}

/ * Finner apprpriate meddelandet enligt rörelser och puls och skickar meddelandet till funktionen tweet * /
void tweetStatus (boolean isMoving, int pulseRate)
{
char msg [140];
Är längden av tid mellan tweets och andra filter för att bestämma vilken meddelande ska skickas till twitter
om (millis() - lastTweet > = 300000) //5 minuter
{
om (pulseRate > 120 & & isMoving)
{
sprintf (msg, "vakna upp med en puls på: %d", pulseRate);
}
annars om (pulseRate > 120 & &! isMoving)
{
sprintf (msg, "spännande dröm med en puls på: %d", pulseRate);
}
annat
{
sprintf (msg, "sova med en puls av: %d", pulseRate);
}

Tweet(MSG);
uppdateras senast sedan en tweet gjordes
lastTweet = millis();
}
}

//=============================
Arduino funktioner
//=============================

/ * Arduino setup-funktionen * /
void setup()
{
Delay(1000);
Ethernet.BEGIN (mac, ip);
Serial.BEGIN(9600);
pinMode(LEDpin,OUTPUT);
pinMode(SensorPin,INPUT);
digitalWrite(LEDpin,HIGH); Kontroller väder IR-LED är på eller av
}

/ * Arduino köra loopen som kontrollerar sensorer och sedan skickar en tweet beroende på sensorer * /
void loop()
{
booleska isMoving = false;
int hjärtrytm = 0;

/ * kontrollerar accelerometern för ändringar för se om enheten är flytta eller inte * /
isMoving = checkMovement();
/ * beräknar den genomsnittliga pulsen i slag per minut beroende skillnader upptäcks av IR tranistor * /
hjärtrytm = getHeartRate();

/ * skickar ett meddelande till den seriella konsolen * /
printStatus (isMoving, hjärtrytm);
/ * skickar ett meddelande till twitter beroende på användare puls och rörelse * /
tweetStatus (isMoving, hjärtrytm);
}

Se Steg
Relaterade Ämnen

Tweet-a-watt - hur man gör en kvittrande kraftmätare...

Tweet-a-watt - hur man gör en kvittrande kraftmätare...Detta projekt dokumenterar mina äventyr i att lära hur tråd upp mitt hem för trådlöst strömförsörjning övervakning. Jag bor i en hyrd lägenhet så jag inte har hacka-tillgång till panelen mätaren...

Tweeting graviditetstest

Projektidé kom från detta harmlös twitter inlägg. Men Hej, varför inte prova att göra en? Jag läste någonstans att världen behöver mer löjlig smarta enheter. Så här är det.Jag har (vi har) bara någonsin använt icke-digital graviditetstest där du läsa...

Tweeting fågelbordet

I sommar min 5 år gamla ville son och jag arbeta med ett projekt som skulle vara kul, utbildning och relaterade till naturen. Medan du njuter av en vacker Colorado sommarkväll på morfar och mormors däck titta på alla kolibrier slåss över 6 ställen på...

Tweeting sällskapsdjur skål

har du någonsin gick förbi din pet's vatten eller mat skål och se den tomma; bara att undra hur länge din sällskapsdjur har varit utan vatten? Här är min ta på en lösning på detta problem: en skål som tweets när det är tomt eller låg på innehållet. D...

Tweeting katt dörr

Obs: för att se allt på en sida, vänligen gå till: www.tweetingcatdoor.com Efter att ha fått många mail begära instruktioner och kit för att bygga "Tweeting katt dörr ", jag bestämde mig att göra en version som är fristående och inte behöver en...

Tweeting hamster bur

Har du någonsin undrat vad din hamster gör när du sover eller ut ur huset? Är han kasta vilda fester eller öva franska? Eller kanske bara kör i hans hjul?Vi ville ta reda på själva vad vår hamster, Martin, fick upp till bakom stängda dörrar och så by...

Tweeting, trådlös, ful Drum rökare (UDS) temperatur styrenhet med Android

(Senast uppdaterad: oktober 2014. Se sista steget för information om ändringarna.)Detta är UDS Digital handledare, en Android app och hårdvara för distans bibehålla temperaturen för din UDS som en termostat. Din telefon övervakar temperaturen inuti U...

Billiga faux energidrycker för den sover berövade

Steg 1: Verktyg och förnödenheter Tools-Kaffebryggare-Kylskåp-Glasflaska (plast kommer lös och smaka illa)-Tratt (min är toppen av en två liters flaska)-Sked-Snusnäsduk-HammareLeveranser-Kaffesump-Socker eller honung-Kaffe filterSteg 2: Göra Da kaffe...

BILLIGT sätt att bo COOL medan du sover

OK här är vad du behöver!1. box Fan2. två dukar stift våren sorten3. lim4. ett lakan5. en stolFörst ta dina två kläder stift limma dem till toppen av box fläkten jag använde varmt lim det fungerade bra.Nästa ta stolen, uttryckte det vid foten av säng...

Linux dator tweeting.

Gjort detta för ett bra tag och jag älskar det. Riktiga datorn automation. Detta är en instructable att få din linux dator komma åt twiiter via kommandoraden för att både skicka och ta emot tweets. Fina med detta är det kommer att fungera på ett syst...

Tweeting bilder från webbkameran

Nu när vi har en lampa servaren set-up, kan vi skapa web-projekt! Det första projektet som vi kommer att göra är ett program som automatiskt kommer tweet en bild från vår webbkamera när vi trycker på "Nafsa foto".Steg 1: Komma igångInnan vi kan...

Tweeting Webcam bilder från din ZYBO

Detta Instructable kommer över hur du tweet bilder från en webbkamera på en ZYBO, när allt är klart, du kommer att kunna aktivera ZYBO och börja tweeting omedelbart.För detta instructable behöver du:ZYBO som har framgångsrikt startat upp med LinaroMo...

Paracord filt / sovsäck kompression rem med handtag - jag gjorde det på TechShop!

Om du inte vet om TechShop ännu, kolla @ www.techshop.ws!Det kan bli frustrerande redovisade mjuk objekt som filtar eller kläder till en läger mark. Jag designade denna super lätt att göra rem att bära filtar; dock kan det också användas för andra ob...

Armé tält Tablet fodral (Nexus 7) med magnetiska spännet och sova Switch

jag tog en gammal armé tält ($20 på min lokala army överskott butik) och kapade ett avsnitt ur. Jag fodrade den med en Delta airlines filt (det är verkligen mjukt, typ av rensar skärmen när jag sätter tabletten där) och jag såg till att ha broderade...

Hur till sova på kinesiska muren

den kinesiska muren är en av de mest fantastiska platserna i Kina och besöka muren är ett måste göra om du går till Kina. Om du känner för lite äventyr och en riktig resa erfarenhet, kan du sova på väggen när du besöker den.Vad kan vara roligare än a...

Tweet-a-pott: Twitter aktiverat kaffekanna

gillar tanken på att göra kaffe i farten? från din säng? Medan du är på bussen kommer hem? Då är Tweet-a-potten för dig!Tweet-a-pott är nästa i fancy twitter aktiverade enheter. Denna kaffekanna kan dess ägare att göra en kanna kaffe från någonstans...

Extasen sova utanför under stjärnorna

Tänk om ni vill, hur spektakulära det vore att somna under en miljard stjärnor varje kväll. Ta ett djupt andetag av färska utanför luft, och sedan en annan, och vet att du är ett med universum. Och Tänk hur absolut spektakulära det skulle vara, att ö...

Hur tvätta en sovsäck

Växer upp i en camping familj och gå med scouting gav mig en kärlek till camping från tidig ålder. Fråga vem som helst som tält läger att en av dina mest värdefulla delar av utrustning är din sovsäck. En välskött sovsäck kan betyda skillnaden mellan...

Hur man sover mindre men inte känna sömnlösa

efter mycket forskning och använder mig själv som ett marsvin, kan jag dela mina slutsatser om hur man sova mindre, mycket mindre.Vad behöver du:Att inse hur mycket tid av ditt liv du spendera sovaFör att inse vad kan göra du med 3 timmar per dagFör...