Smart Home-styrenhet med Sensorflare och Spark kärna av partikel: Läs din sensor värden på Sensorflare (7 / 12 steg)
Steg 7: Beskrivning av koden
Variabeldeklaration:
Först och främst är det medföljande biblioteket på det sätt som har beskrivits tidigare. Som ett resultat inkluderar nästa rad i koden.
#include "sensorflare/sensorflare.h"
För varje stift att vi vill deklarera som en PWM-utgång och vara avlägsen kontroll genom Sensorflare blir instanser en "PWMout" objekt och tillhörande särskilda PIN-koden. I exemplet är ansluten får en led på A0, då objektet kallas pwm som parameter A0. Ljusintensiteten är kontrollerad distans av en generation av en PWM-signal med mellan 0 och 255.
SensorFlare::PWMOut pwm(A0);
Nu är det nödvändigt att deklarera ett objekt för varje variabel vilket värde vill vi komma åt genom Sensorflare plattform. Variablerna kan publiceras på Spark Core molnet som privat (endast du kommer att kunna komma åt deras värden) eller allmänheten (varje användare av gnista kan komma åt sina värden från molnet). I exemplet är förklarade sedan 2 objekt varTem och varPin som ska referera till 2 variabler som kommer att publiceras som public på gnista och tillgång från ditt Sensorflare konto vid namn temperatur och pir respektive. En annan ett objekt varLight som kommer att referera till en privat variabel på Spark molnet kommer från ditt Sensorflare konto namn ljus.
Båda metoderna initieras variabeln som kommer att publiceras som allmänheten < br > SensorFlare::VarPublish varTem("temperature");
SensorFlare::VarPublish varPir("pir","PUBLIC");
Initieras variabeln som kommer att publiceras som privat
SensorFlare::VarPublish varLight("light","PRIVATE");
Måste deklareras variablerna som kommer att publiceras senare.
float temperatur;
float ljus;
int status;
Slutligen måste vara deklarera alla andra variabler som ville användas i programmet.
int tem_pin = A3;
int light_pin = A4;
int pir_pin = D0;
int new_status;
bool förändring;
Setup():
Setup-funktionen endast kör en och är allmänt används för att initiera variabler, pin lägen och funktioner. Det är nödvändigt att anropa metoden "begin()" för alla objekt som har definierats tidigare.
PWM.BEGIN();
varTem.begin(temperature);
varLight.begin(light);
varPir.begin(status);
Extra stift som inte kommer fjärrkontrollen och kommer att vara digital input PIN-koden för PIR-sensorn.
pinMode(pir_pin,INPUT);
Loop()
Funktionen loop() loopar efter varandra, så att ditt program att ändra och svara.
Den inkluderade analog sensorn (temperatur och foto motstånd) ger i deras respektive analoga ingångar av en kärna, en spänning mellan 0 till 3.3V att står i proportion till olika temperatur och ljus i miljön. Kärna ur används en analog digital omvandlare 12 bitar som mappar en signal från 0 till 3, 3V i värden från 0 till 4095 när anropas funktionen "analodRead()". Först och främst måste det beräknas den spänning som motsvarar värdet läsa.
Den specifika LM335 temperatursensorn ger en spänning proportionell mot temperaturen i Kelvin med en känslighet på 10mV/K. Då temperaturen i Kelvin kommer att uppnås genom att omvandla spänningen till mV enheter och delat det mellan känslighet. Slutliga uttryck för temperaturen i den förväntade enheten (° C) omvandlingen från Kelvin görs genom att subtrahera 273.15 (motsvarande 0 i Kelvin grader).
Luminositet, intensiteten av ljuset, kan beräknas med hjälp av sensorn som har lämnats i den innan avsnitt i manualen. För det första värde foto-motståndet i KΩ och sedan den motsvarande ljusstyrkan i Lux.
Temperatursensor
flyta tem = analogRead(tem_pin); läsa värdet från sensorn
Det returnerade värdet från kärnan kommer att vara i intervallet från 0 till 4095
Beräkna spänningen från sensorn behandlingen
flyta spänning = (tem * 3.3) / 4095;
flyta deg = spänning * 100. multiplicera med 100 att få grader i K
temperatur = deg - 273.15; subtrahera absoluta nollpunkten för att få grader Celsius
Luminositet
flyta fotocell = analogRead(light_pin); läsa värdet från sensorn
Det returnerade värdet från kärnan kommer att vara i intervallet från 0 till 4095
Beräkna spänningen från sensorn behandlingen
flyta Vphotocell = ((photocell * 3.3) / 4095);
flyta rl =(Vphotocell*10) /(3.3-Vphotocell); //Photoresistor värdet i KΩ
flyta värde = 500/rl, //luminosity
ljus = (int) värde;
PIR som en digital signal (1 när upptäcks ett drag och 0 om det inte rör sig närvarande) som läses genom motsvarande digital ingång av kärna ur. Den intressant händelsen i detta fall är när sensorn upptäcker en rörelse, företräda det av en övergång från 0 till 1 (variabeln ändras status deras värde till 1) respektive indata när börjar flytten och en övergång från 1 till 0 när stopp (variabeln status kommer att vara 0). Sedan kommer en händelse att publiceras varje gång som en övergång skett i specifika PIN-koden. Koden identifierar PIR övergången och publicerar varje gång det hände. För detta har använts metod "Publish(Variable,period)" där variabeln att publicera är status och det är publicera omedelbart när metoden är kalla per markerar en period av 0.
Hitta förändringen av statligt av PIR-sensorn. Känna igen drag
new_status=digitalRead(pir_pin);
om (status! = new_status) {
status = new_status;
ändra = sant;
}
Publicera varje gång som finns en förändring i stiftet på som är ansluta PIR utdata
om (ändra == TRUE) {
varPir.Publish (status, 0); //Publish variabeln samtidigt kallas metoden
ändra = FALSE;
}
Temperatur och ljusstyrka skall offentliggöras regelbundet - i detta fall var 15 sekund räcker. "Publish(Variable,period)"-metoden kommer att kallas för varje objekt som representerar varje variabel som vill offentliggöra tillhörande respektive variabel att publicera och under 15 sekunder.
varTem.Publish(temperature,15);
varLight.Publish(light,15);