Partikel kärna: Skicka ett mail när rörelse detekteras (4 / 5 steg)
Steg 4: kod
Efter montering kretsen alla du behöver göra är få kärnan ansluten till internet, och efter det är gjort är det dags att ladda upp koden till kärnan. Här är koden för att laddas upp...
// -----------------------------------------
Publicera och Dashboard med Photoresistors
// -----------------------------------------
Denna app kommer att publicera en händelse när stråla av ljust mellan LED och fotomotstånd är bruten.
Det kommer att publicera en annan händelse när ljuset är intakt igen.
Precis innan vi ska börja med att förklara vilket stift allt är ansluten till.
int ledde = D0; Det är där din LED är inkopplad. Den andra sidan går till en ansluten till GND. resistor
int boardLed = D7; Detta är den LED som redan finns på enheten.
Kärnan är det LED i det övre högra hörnet.
Fotonen är det bredvid D7 PIN-koden.
int fotomotstånd = A0; Det är där din fotomotstånd är inkopplad. Den andra sidan går till "power" stift (nedan).
int power = A5; Detta är den andra änden av din fotomotstånd. Den andra sidan är ansluten till "fotomotstånd" pin (ovan).
Följande värden få ställa in när enheten startar upp och kalibrerar:
int intactValue; Detta är det genomsnittliga värdet att fotomotstånd läser när balken är intakt.
int brokenValue; Detta är det genomsnittliga värdet att fotomotstånd läser när strålen bryts.
int beamThreshold; Detta är ett värde som är halvvägs mellan ledOnValue och ledOffValue, över vilken antar vi att led är på och nedanför som antar vi att den är avstängd.
bool beamBroken = false; Denna flagga används att markera om vi har en ny status eller nu. Vi kommer att använda det i slingan.
Vi börjar med setup-funktionen.
void setup() {
Denna del är mestadels samma:
pinMode(led,OUTPUT); Vår LED stift är utdata (LED-belysning)
pinMode(boardLed,OUTPUT); Våra inbyggda LED är utdata samt
pinMode(photoresistor,INPUT); Vår fotomotstånd stift input (läsa fotomotstånd)
pinMode(power,OUTPUT); PIN-koden driver fotomotstånd är utdata (skicka ut konsekvent driver)
Nästa, skriva fotomotstånd makt vara det högsta möjliga, vilket är 4095 i analog.
digitalWrite(power,HIGH);
Eftersom alla sätter upp deras lysdioder annorlunda, kommer vi också börja med att kalibrera våra fotomotstånd.
Den här kommer att kräva lite input från användaren!
Först, D7 LED kommer för att berätta för dig att lägga din hand framför strålen.
digitalWrite(boardLed,HIGH);
Delay(2000);
Sedan D7 lysdioden slocknar och lysdioden tänds.
digitalWrite(boardLed,LOW);
digitalWrite(led,HIGH);
Delay(500);
Nu ska vi ta några avläsningar...
int on_1 = analogRead(photoresistor); Läs fotomotstånd
Delay(200); vänta 200 millisekunder
int on_2 = analogRead(photoresistor); Läs fotomotstånd
Delay(300); vänta 300 millisekunder
Nu blinkar för att låta oss veta att du har tagit avläsningarna...
digitalWrite(boardLed,HIGH);
Delay(100);
digitalWrite(boardLed,LOW);
Delay(100);
digitalWrite(boardLed,HIGH);
Delay(100);
digitalWrite(boardLed,LOW);
Delay(100);
Nu kommer D7 LED för att berätta för dig att ta bort din hand...
digitalWrite(boardLed,HIGH);
Delay(2000);
D7 LED stängs av...
digitalWrite(boardLed,LOW);
// ... Och vi kommer att ta två fler behandlingar.
int off_1 = analogRead(photoresistor); Läs fotomotstånd
Delay(200); vänta 200 millisekunder
int off_2 = analogRead(photoresistor); Läs fotomotstånd
Delay(1000); vänta en sekund
Nu flash D7 LED på och av tre gånger till oss att vi är redo att gå!
digitalWrite(boardLed,HIGH);
Delay(100);
digitalWrite(boardLed,LOW);
Delay(100);
digitalWrite(boardLed,HIGH);
Delay(100);
digitalWrite(boardLed,LOW);
Delay(100);
digitalWrite(boardLed,HIGH);
Delay(100);
digitalWrite(boardLed,LOW);
Nu vi i genomsnitt "till" och "off" värden för att få blir en uppfattning om vad motståndet när lampan är på och av
intactValue = (on_1 + on_2) / 2;
brokenValue = (off_1 + off_2) / 2;
Låt oss också beräkna värdet mellan ledOn och ledOff, över vilken antar vi att led är på och nedanför som vi antar led är avstängd.
beamThreshold = (intactValue + brokenValue) / 2;
}
Nu för loopen.
void loop() {
/ * I denna loop funktion, vi kommer att kontrollera om balken har brutits.
När status för balken ändras, kommer vi att skicka en Spark.publish() till molnet
så att om vi vill, vi kan kontrollera från andra enheter när lampan är på eller av.
Vi kommer också aktivera D7 lampan när fotomotstånd upptäcker en balk breakagse.
*/
om (analogRead(photoresistor) > beamThreshold) {
/ * Om du är över tröskeln, antar vi balken är intakt.
Om strålen var intakt innan, men behöver vi inte ändra något.
Vi ska använda flaggan beamBroken för att hjälpa oss reda på detta.
Denna flagga övervakar den aktuella statusen för strålen.
Efter strålen är trasiga, är det inställt sant
och när strålen återansluter är inställd på FALSE.
*/
om (beamBroken == true) {
Om strålen bröts innan, är detta en ny status.
Vi kommer att skicka en publicering till molnet och aktivera LED.
Skicka en publicering till dina enheter...
Spark.publish("beamStatus","intact",60,Private);
Och flash ombord LED på och av.
digitalWrite(boardLed,HIGH);
Delay(500);
digitalWrite(boardLed,LOW);
Slutligen satte flaggan för att återspegla aktuell status för strålen.
beamBroken = false;
}
annat {
Annars är detta inte en ny status, och vi behöver inte göra någonting.
}
}
annat {
Om du är under tröskelvärdet, är balken förmodligen bruten.
om (beamBroken == false) {
Skicka en publicering...
Spark.publish("beamStatus","Broken",60,Private);
Och flash ombord LED på och av.
digitalWrite(boardLed,HIGH);
Delay(500);
digitalWrite(boardLed,LOW);
Slutligen satte flaggan för att återspegla aktuell status för strålen.
beamBroken = sant;
}
annat {
Annars är detta inte en ny status, och vi behöver inte göra någonting.
}
}
}