Funcționarea proiectului nu necesită nici-o interacționare din partea omului, tot procesul fiind automat în cod. Senzorul de curent alternativ este legat de firul conectat la borna pozitiva și transmite date către Arduino, care le procesează și le scrie pe un display LCD. !ATENȚIE! În schemă am folosit o fotodiodă, deoarece TinkerCad nu are niciun fel de senzor de curent, dar are cele două borne ale senzorului folosit de mine și permite copierea perfectă a proiectului.
Aici sunt declarațiile librăriilor
#include "EmonLib.h" // Include Emon Library #include <LiquidCrystal.h>
Aceste variabile sunt folosite pentru calibrarea senzorului, care trebuie modificate în funcție de Burden Rezistor-ul fiecărui senzor + folosirea unui aparat de măsură pentru calibrare mai fină.
#define VOLT_CAL 151.1 #define CURRENT_CAL 25 EnergyMonitor emon1; // Create an instance const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
Aici doar am inițializat toate elementele necesare.
void setup() { Serial.begin(9600); lcd.begin(16,2); // columns, rows. use 16,2 for a 16x2 LCD, etc. lcd.clear(); lcd.setCursor(0,0); // set cursor to column 0, row 0 (the first row) lcd.print("Running"); emon1.voltage(1, VOLT_CAL, 1.7); // Voltage: input pin, calibration, phase_shift emon1.current(0, CURRENT_CAL); // Current: input pin, calibration. }
La fiecare ciclu, Arduino citește datele de la senzor, calculează valorile și le scrie pe LCD.
void loop() { emon1.calcVI(20,2000); // Calculate all. No.of half wavelengths (crossings), time-out float currentDraw = emon1.Irms; //extract Irms into Variable float supplyVoltage = emon1.Vrms; //extract Vrms into Variable Serial.print("Voltage: "); Serial.println(supplyVoltage); Serial.print("Current: "); Serial.println(currentDraw); Serial.print("Watts: "); Serial.println(currentDraw * supplyVoltage); Serial.println("\n\n"); delay (2000); lcd.clear(); lcd.setCursor(0,0); // Displays all current data lcd.print(currentDraw); lcd.print("A"); lcd.setCursor(10,0); lcd.print(currentDraw * supplyVoltage); lcd.print("W"); lcd.setCursor(0,1); lcd.print(supplyVoltage); lcd.print("V"); lcd.setCursor(10,1); lcd.print(currentDraw * supplyVoltage / 1000); lcd.print("kW"); }