[ EHF @ 11.09.2020. 13:54 ] @
Pozdrav svima, zeleo bih napraviti data loger za struju da bih mogao da pratim proizvodnju energije preko solarnih panela. Imam problem pri kodu za arduino. Naime hteo bih da pomocu senzora za napon i struju da pratim koja je proizvodnja struje bila, koji napon, koliko wati, Amper casova, wat casova. Usustini sve parametre oko jednosmerne struje. posto imam solarni panel od 50w hocu da vidim, to jest da izmerim na vise lokacija (krov, pod...) koja je uokvirno proizvodnja u toku jednog dana. i da imam te podatkr na sd kartici koje bi arduino upisao. da bi kasnije mogao da ih ubacim u excel i napravim gragikon proizvodnje u odnosu na jutro, podne, predvece.
Jedini problem koji imam jeste kod koji ne razumem bas najbolje, imam senzore imam arduino i imam lcd ekran. kod sam skinuo sa neta medjutim taj kod je pisan za tenesy 3.6 koji na sebi ima sd citac kartice.
Posto je tenesy ploca skuplja od arduina i to dosta nisam bas voljan da je kupim sobzirom da imam arduino uno, ekran bih koristio 2x16 umesto 4x20 karaktera. Ali ne znam kako da prepravim kod da bih moga oda koristim arduino sa SD card modulom i kako da informacije koje se ispisuju odjednom na lcd ekranu prebacim da se smenjuju na ovom manjem. kod imate u opisu i sliku diagrama kako bi se to povezalo stim da bih ja ubacio arduino i manji ekran jer to imam.
[ EHF @ 11.09.2020. 17:43 ] @
Hvala, nisam znao da forum mikrokontroleri
[ ZAS011 @ 11.09.2020. 19:56 ] @
S obzirom koliko se podataka prikazuje na displeju, teško da će sve da ti stane na 2x16.

[ scoolptor @ 11.09.2020. 20:08 ] @
Mozes namestiti da naizmenicno menja dva prikaza
[ EHF @ 11.09.2020. 20:17 ] @
Znam, i hteo sam da stavim da se naizmenicno menja displej to jest prikaz na njemu, Problem mi je kod. Kako da ispravim kod da radi sa arduinom i manjim ekranom
[ ZAS011 @ 12.09.2020. 00:07 ] @
Napiši gde ti je problem u kodu.
Pomoćićemo ti savetima da se izboriš sa tim čudom.

BTW koji Arduino bi ti koristio?
[ EHF @ 13.09.2020. 11:50 ] @
#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
[ veselinovic @ 13.09.2020. 14:22 ] @
na primjer
https://randomnerdtutorials.co...ta-logger-with-sd-card-module/

ili

https://electronicshobbyists.c...-tutorial-arduino-data-logger/

ima toga bas mnogo po netu
[ ZAS011 @ 13.09.2020. 15:46 ] @
Kao prvo, nisi mi odgovorio na pitanje koji bi Arduino koristio.

Za početak ćeš morati da se upoznaš sa Teensy arduinom (pošto je program pisan za taj arduino), da vidiš koji je procesor u pitanju (180 MHz Cortex-M4F), da pretreseš Time biblioteku da bi se naučio kako ista funkcioniše.

Za SD karticu, prouči SD biblioteku, Sve piše u istoj
Ja koristim ove biblioteke:
Code:
#include <SPI.h>
#include <SdFat.h>

#define CS_PIN SS

SdFat sd;
File file;


Code:
//LiquidCrystal_I2C lcd(0x27,20, 4);
LiquidCrystal_I2C lcd(0x27,16, 2);
bi trebalo da normalno radi
[ EHF @ 13.09.2020. 18:03 ] @
Napisao sam na dnu poruke koji arduino bih koristio
[ ZAS011 @ 13.09.2020. 19:26 ] @
Izvini, bio veliki razmak

Da bi koristio Uno/Nano, što je isti par rukava, moraćeš da odradiš izmene u hardveru (da dodaš RTC) i ozbiljne promene u programu.
[ EHF @ 14.09.2020. 18:47 ] @
To je ono sto mene buni, to ne znam kako bih uradio, pokusavao, trazio po netu. Nista konkretno nisam uspeo da uradim.