Smart energi övervakning & kontrollsystem (Edison inuti) (10 / 12 steg)
Steg 10: Programmera din Edison
Vår miljö är nästan redo att programmera Edison styrelse. Det fullständiga programmet är fäst. Ladda upp den till din Edison genom att använda arduino IDE. Du kan ändra programmet som dina krav. Förklaring av komplexa rapporter ges som kommentar.
#include < IoTkit.h > / / include IoTkit.h för att använda Intel IoT Kit
#include < Ethernet.h > / / måste vara att använda IoTkit
#include < aJSON.h >
#include < LiquidCrystal.h >
skapa ett objekt av klassen IoTkit
IoTkit iotkit;
CONST int vSensorPin = A0;
CONST int cSensorPin = A1;
CONST int numberOfSamples = 3000;
int sampleV, sampleC;
float voltageV, voltageC;
float instVoltage, instCurrent;
float sumI, sumV, sumP;
float realPower, apparentPower, reactivePower;
float powerFactor, voltageRMS, currentRMS;
osignerade långa last_kWhTime, kWhTime;
flyta kiloWattHour = 0,0;
RS, SV, D4, D5, D6, D7
LiquidCrystal lcd (7, 6, 2, 3, 4, 5);
void setup() {
sätta din installation kod här, om du vill köra en gång:
pinMode (7, OUTPUT); inte behövs för arduino
pinMode (6, OUTPUT); men måste ange för Edison LCD-bibliotek
pinMode (5, OUTPUT);
pinMode (4, OUTPUT);
pinMode (3, OUTPUT);
pinMode (2, utgång);
iotkit.BEGIN();
LCD.BEGIN (20, 4);
lcd.setCursor (0, 1);
}
void loop() {
sätta din huvudsakliga kod här, för att köra flera gånger:
calculatePower();
displayPower();
sendToCloud();
Delay(2000);
}
void calculatePower() {
för (int jag = 0; jag < numberOfSamples; i ++) {
sampleV = analogRead(vSensorPin);
sampleC = analogRead(cSensorPin);
voltageC = sampleC*5.0/1023.0;
voltageV = sampleV*5.0/1023.0;
instCurrent = (voltageC-2.5)/0.66;
instVoltage = (voltageV-2,46) * 7,8;
sumV += instVoltage * instVoltage;
sumI += instCurrent * instCurrent;
Sumpen += abs(instVoltage * instCurrent);
}
voltageRMS = sqrt(sumV / numberOfSamples);
currentRMS = sqrt(sumI / numberOfSamples);
realPower = sumP / numberOfSamples;
apparentPower = voltageRMS * currentRMS;
powerFactor = realPower / apparentPower;
reactivePower = sqrt (apparentPower * apparentPower - realPower * realPower);
last_kWhTime = kWhTime;
kWhTime = millis();
kiloWattHour += (realPower / 1000) * ((kWhTime-last_kWhTime) / 3600000.0);
sumV = 0;
sumI = 0;
Sumpen = 0;
}
void displayPower() {
LCD.Clear();
lcd.setCursor(0,0); Col, raden
LCD.Print ("spänning:");
LCD.Print((int)voltageRMS);
LCD.Print ("V");
LCD.Print ("ström:");
LCD.Print(currentRMS);
LCD.Print("A");
lcd.setCursor(0,1);
LCD.Print ("Power:");
LCD.Print(realPower);
LCD.Print ("W");
LCD.Print ("pf:");
LCD.Print(powerFactor);
lcd.setCursor(0,2);
LCD.Print ("VAR:");
LCD.Print(reactivePower);
LCD.Print ("VAR");
LCD.Print ("VA:");
LCD.Print(apparentPower);
LCD.Print("va");
lcd.setCursor(0,3);
LCD.Print ("energi som används:");
LCD.Print(kiloWattHour);
LCD.Print("kWh");
}
void sendToCloud() {
iotkit.send ("spänning", voltageRMS);
iotkit.send ("aktuell", currentRMS);
iotkit.send ("realpower", realPower);
iotkit.send ("powerfactor", powerFactor);
iotkit.send ("reactivepower", reactivePower);
iotkit.send ("apparentpower", apparentPower);
iotkit.send ("energi", kiloWattHour);
}