EHF ivan golubovic obrenovac
Član broj: 311081 Poruke: 97 *.dynamic.isp.telekom.rs.
|
#include <Time.h>
#include <TimeLib.h>
////////// Inputs //////////
int VoltPin = 15;
int AmpPin = 14;
int ResetPin = 1; //Digital
int Reset;
////////// Variables //////////
double Volts;
double Amps;
double Watts = 0;
double WattsAvg = 0;
double WattsSum = 0;
double WattHours = 0;
double TotalWattHours = 0;
double PrevWattHours = 0;
double TotalKiloWattHours = 0;
int Currentsecond;
int Currentminute;
int Currenthour;
int Currentday;
int Currentmonth;
int Currentyear;
int Previoussecond;
int Previousminute;
int Prevhour;
unsigned long CurrentTime;
unsigned long PrevTime;
//Library for the Display
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20, 4); -----------------------------------------Ovde treba da se prepravi za 2x16, ali kada to uradim izbacuje gresku.
#include <SD.h>
const int chipSelect = BUILTIN_SDCARD; ---------------------------------Ovo je kod za koriscenje SD kartice na tenesy 3.6 mikrokontroleru koji ima SD citac na sebi, A meni treba da to prepoznaje na Arduino SD modulu. Ne znam kako da to sredim.
void setup() {
Serial.begin(115200);
//Wire.begin();
Wire.setSDA(18);
Wire.setSCL(19);
pinMode(1, INPUT_PULLUP);
////////// Initialize the lcd ////////// ---------------------------------------------Ovaj odeljak je za podesavanje lcd-a gde ce i kako biti sta ispisano, ovo i razumem kako bih odprilike stavio za 2x16 LCD ali ne znam kako da namestim da se smenjuje ili ti da ide
lcd.init(); prikazivanje podataka, NPR. stavio bih da ostane napon,struja i wati a da se sveostalo smenjuje, ili da se smenjuju dva prikaza svakih 2-3 sekunde
lcd.backlight();
lcd.setCursor(4,1);
lcd.print("SOLAR LOGGER");
delay(2000);
lcd.clear();
////////// Time & Date Set //////////-----------------------------------------------------------------------------------Ovo ako neko moze da mi objasni, posto uopste ne razumem kako funkcionise ovo za vreme i datum.
setTime(15, 00, 0, 26, 7, 2019); // Hour Minute Second Day Month Year
}
void loop() {
////////// Time & Date //////////
Currentsecond = second();
Currentminute = minute();
Currenthour = hour();
Currentday = day();
Currentmonth = month();
Currentyear = year();
CurrentTime = millis();
////////// Measurements //////////
Volts = (analogRead(VoltPin)-2)*0.0161; // (Raw volt value - Offset)*multiplier
//Volts = analogRead(A0); // Read raw volt value
Amps = (analogRead(A0)-761)*0.082; // (Raw amp value - Offset)*multiplier
//Amps = analogRead(A0); // Read raw amp value
Watts = Volts * Amps;
if(Amps < 0){
Watts = 0;
}
if((CurrentTime-PrevTime) < 0){
Watts = 0;
}
WattHours = WattHours + Watts * ((CurrentTime - PrevTime) * 0.000000277);
TotalWattHours = (TotalWattHours + Watts * ((CurrentTime - PrevTime) * 0.000000277));
TotalKiloWattHours = TotalWattHours * 0.001;
PrevTime = CurrentTime;
if(millis() > 4294967000){
PrevTime = 0;
}
Reset = digitalRead(1);
if(Reset == LOW){
WattHours = 0;
}
////////// LCD //////////-------------------------------------------------------------------Ovde podesavam sve vezano za LCD ali kako tacno da podesim za 2x16
if(Currentsecond != Previoussecond){
// First line
lcd.setCursor(1, 0); // (column, line)
lcd.print(Volts, 2);
lcd.setCursor(5, 0);
lcd.print("V");
lcd.setCursor(8, 0);
lcd.print(Amps, 2);
lcd.setCursor(12, 0);
lcd.print("A ");
if(Watts > 100){
lcd.setCursor(15, 0);
lcd.print(Watts, 0);
}
if(Watts > 10 && Watts < 100){
lcd.setCursor(15, 0);
lcd.print(" ");
lcd.print(Watts, 0);
}
if(Watts < 10){
lcd.setCursor(15, 0);
lcd.print(" ");
lcd.print(Watts, 0);
}
lcd.setCursor(18, 0);
lcd.print("W ");
// Second line
lcd.setCursor(3, 1);
lcd.print("Energy");
lcd.setCursor(11, 1);
lcd.print(WattHours);
lcd.setCursor(14, 1);
lcd.print("Wh");
// Third line
lcd.setCursor(3, 2);
lcd.print("Total");
lcd.setCursor(10, 2);
lcd.print(TotalKiloWattHours, 2);
lcd.setCursor(13, 2);
lcd.print("kWh");
// Fourth line
if(Currenthour < 10){
lcd.setCursor(1, 3);
lcd.print("0");
lcd.print(Currenthour);
}
else{
lcd.setCursor(1, 3);
lcd.print(Currenthour);
}
lcd.setCursor(3, 3);
lcd.print(":");
if(Currentminute < 10){
lcd.setCursor(4, 3);
lcd.print("0");
lcd.print(Currentminute);
}
else{
lcd.setCursor(4, 3);
lcd.print(Currentminute);
}
if(Currentday < 10){
lcd.setCursor(9, 3);
lcd.print("0");
lcd.print(Currentday);
}
else{
lcd.setCursor(9, 3);
lcd.print(Currentday);
}
lcd.setCursor(11, 3);
lcd.print("/");
if(Currentmonth < 10){
lcd.setCursor(12, 3);
lcd.print("0");
lcd.print(Currentmonth);
}
else{
lcd.setCursor(12, 3);
lcd.print(Currentmonth);
}
lcd.setCursor(14, 3);
lcd.print("/");
lcd.setCursor(15, 3);
lcd.print(Currentyear);
Previoussecond = Currentsecond;
}
////////// SD Card //////////------------------------------------------------------Ovo uopste ne radi na Arduinu
if(Currenthour != Prevhour){
WattsAvg = TotalWattHours - PrevWattHours;
PrevWattHours = TotalWattHours;
SD.begin(chipSelect);
String dataString = "";
dataString += String(Currenthour);
dataString += ":";
dataString += String(Currentminute);
dataString += ",";
dataString += String(Currentday);
dataString += "/";
dataString += String(Currentmonth);
dataString += ",";
dataString += String(Volts);
dataString += ",";
dataString += String(WattsAvg);
dataString += ",";
dataString += String(TotalWattHours);
dataString += ",";
File dataFile = SD.open("SOLARLOG.txt", FILE_WRITE);
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
Serial.println(dataString);
}
else {
Serial.println("error opening datalog.txt");
}
Previousminute = Currentminute;
Prevhour = Currenthour;
}
////////// Serial //////////
/*
Serial.print("Time: ");
Serial.print(CurrentHour);
Serial.print(":");
Serial.print(Currentminute);
Serial.print(" Date: ");
Serial.print(Currentday);
Serial.print("/");
Serial.print(Currentmonth);
Serial.print("/");
Serial.print(Currentyear);
Serial.print(" Volts: ");
Serial.print(Volts);
Serial.print(" Amps: ");
Serial.print(Amps);
Serial.print(" Watts: ");
Serial.print(Watts);
Serial.println();
*/
delay(20);
}
Inace za test bih koristio Arduino uno, A za gotov projekat, arduino nano
|