Cascade counter voor PV-installatie

Toon hier Uw afgeronde projecten aan anderen.
Berichten: 38
Geregistreerd: 20 Jul 2022, 14:40

Cascade counter voor PV-installatie

Berichtdoor Harm J Seef » 26 Sep 2022, 09:37

Een PV-installatie kan ook opgebouwd zijn met micro-inverters.
Wanneer deze modulair wordt aangelegd, kan met een cascadeteller en schakelkastje het vermogen geregeld worden.
Vooral handig wanneer het elektriciteitsnet vol is en er geen PV-installatie aangelegd kan/mag worden.

Helaas kan ik de omschrijving als pdfje van 500 kB niet uploaden.

Advertisement

Berichten: 38
Geregistreerd: 20 Jul 2022, 14:40

Re: Cascade counter voor PV-installatie

Berichtdoor Harm J Seef » 29 Sep 2022, 10:31

Als work-around de pdf gesplitst en gezipt naar bestanden kleiner dan 256 kb.

Helaas, nog voordat er iets geupload is, verschijnt de melding "Sorry, de forum bijlagequota is bereikt".

hm, ...

Berichten: 38
Geregistreerd: 20 Jul 2022, 14:40

Sketch Cascade counter voor PV-installatie

Berichtdoor Harm J Seef » 16 Dec 2022, 10:35

Zonder aanvullende documentatie;

// IA2109CC mk2 Cascade_Counter, Harm J Seef, The Netherlands
// 2022 Feb 21 HJS - IA2109 Cascade Counter, controlled by RS232-communication.
// 2022 Mrt 22 HJS - IA2210 Proof Of Concept
//
// ========================================================================================
//
String Command = "0123456789"; // a 10 character string to hold incoming data
// "CasReset" resetting the Cascade Counter
// "CasUp" adding/stepping up a cascade level
// "CasDown" stepping down a cascade level
// "VerboseOn" enable verbose mode
// "VerboseOff" disable verbose mode
//
// Input/Output connections...
// 0= Tx // Reserved; Tx on D0
// 1= Rx // Reserved; Rx on D1
const int CasRel1 = 2; // Cascade impulse relay 1 on D2
const int CasRel2 = 3; // 2 on D3
const int CasRel3 = 4; // D4
const int CasRel4 = 5; // D5
const int CasRel5 = 6; // D6
const int CasRel6 = 7; // D7
//
const int CasSen1 = 13; // ac sensor relay 1 on 13 (Remove on board LED)
const int CasSen2 = 8; // 2 on D8
const int CasSen3 = 9; // D9
const int CasSen4 = 10; // D10
const int CasSen5 = 11; // D11
const int CasSen6 = 12; // D12
//
const int CasMax = 6; // Total number of Cascade levels (modules)
//
bool E1 = LOW; // Var storing On/Off Status Relay 1 (AC detected)
bool E2 = LOW; //
bool E3 = LOW; //
bool E4 = LOW; //
bool E5 = LOW; //
bool E6 = LOW; //
//
int UpCounter = 0; // reset UpCounter
int DownCounter = 0; // reset DownCounter
//
int Mode = 0; // Mode;
// 0 = Reset cascade counter
// 1 = Listening to serial input
// 2 = Cascade Up (More)
// 3 = Cascade Down (Less)
//
bool Verbose = false; // Not echoing progress to serial monitor
//
void ReadStatus() // Function for updating ac sensor input status
{ //
E1 = digitalRead(CasSen1); // read status into var
E2 = digitalRead(CasSen2); //
E3 = digitalRead(CasSen3); //
E4 = digitalRead(CasSen4); //
E5 = digitalRead(CasSen5); //
E6 = digitalRead(CasSen6); //
if (Verbose == true) //
{ //
Serial.print("AC sensor input = "); //
Serial.print(E1); //
Serial.print(E2); //
Serial.print(E3); //
Serial.print(" "); //
Serial.print(E4); //
Serial.print(E5); //
Serial.println(E6); //
delay(1); //
} //
} //
//
void DelayHigh(void) // Function for relay switching on time
{ //
delay(500); // Impulse relay uptime
} //
//
void DelayLow(void) // Function for relay wait time
{ //
delay(1000); // wait time (loading 12 VDC main capacitor)
} //
//
void setup() // Initializing...
{ //
Serial.begin(9600); // setup RS232 serial communication at 9600 baud
Command.reserve(10); // reserve 10 bytes for the inputstring
//
pinMode(CasRel1,OUTPUT); // designate Cascade relay output
pinMode(CasRel2,OUTPUT); //
pinMode(CasRel3,OUTPUT); //
pinMode(CasRel4,OUTPUT); //
pinMode(CasRel5,OUTPUT); //
pinMode(CasRel6,OUTPUT); //
//
pinMode(CasSen1,INPUT); // designate Cascade sensor input
pinMode(CasSen2,INPUT); //
pinMode(CasSen3,INPUT); //
pinMode(CasSen4,INPUT); //
pinMode(CasSen5,INPUT); //
pinMode(CasSen6,INPUT); //
//
if (Verbose == true) // whenever verbose mode on
{ //
Serial.println(""); //
Serial.println("IA2109CC mk2"); // Info...
Serial.println("Cascade Counter"); //
Serial.println(""); //
delay(1); //
} //
Mode = 0; // set Reset mode
} //
//
void loop() //
{ // Main programm ...
if (Mode==0) // Reset mode...
{ //
if (Verbose == true) //
{ //
Serial.println("Resetting..."); //
delay(1); //
} //
// Arduino saves last output status if Cascade
// Counter is powered down (switched off)
digitalWrite(CasRel1,LOW); // set all outputs LOW
digitalWrite(CasRel2,LOW); // (no relay should been powered continuously)
digitalWrite(CasRel3,LOW); //
digitalWrite(CasRel4,LOW); //
digitalWrite(CasRel5,LOW); //
digitalWrite(CasRel6,LOW); //
UpCounter = 0; // reset counters
DownCounter = 0; //
Mode = 1; //
} //
//
ReadStatus(); // Update sensor inputs
//
if (Mode==1) // If Listening mode
{ //
if (Verbose == true) //
{ //
Serial.println("Listening..."); //
delay(1); //
} //
Command= Serial.readString(); // read received data as string
if (Verbose == true) //
{ //
Serial.println(Command); // echo received string
delay(1); //
} //
if (Command == "VerboseOn") //
{ //
Verbose = true; //
} //
if (Command == "VerboseOff") //
{ //
Verbose = false; //
} //
if (Command == "Reset") //
{ //
Mode = 1; //
} //
if ((Command == "CasUp") || //
(Command == "cup")) //
{ //
Mode = 2; //
} //
if ((Command == "CasDown") || //
(Command == "cdn")) //
{ //
Mode = 3; //
} //
} //
//
if (Mode== 2) // UPCOUNTER; if more modules should be cascaded
{ //
UpCounter++; // add 1 to counter value
if (UpCounter > CasMax) // roll over when required
{ //
UpCounter = 1; //
} //
if (Verbose == true) //
{ //
Serial.print("UpCounter = "); //
Serial.println(UpCounter); //
delay(1); //
} //
if ((UpCounter == 1) && (E1 == LOW)) //
{ //
if (Verbose == true) //
{ //
Serial.println("Relay 1 On"); //
delay(1); //
} //
digitalWrite(CasRel1, HIGH); //
DelayHigh(); //
digitalWrite(CasRel1, LOW); //
DelayLow(); //
} //
if ((UpCounter == 2) && (E2 == LOW)) //
{ //
if (Verbose == true) //
{ //
Serial.println("Relay 2 On"); //
delay(1); //
} //
digitalWrite(CasRel2, HIGH); //
DelayHigh(); //
digitalWrite(CasRel2, LOW); //
DelayLow(); //
} //
if ((UpCounter == 3) && (E3 == LOW)) //
{ //
if (Verbose == true) //
{ //
Serial.println("Relay 3 On"); //
delay(1); //
} //
digitalWrite(CasRel3, HIGH); //
DelayHigh(); //
digitalWrite(CasRel3, LOW); //
DelayLow(); //
} //
if ((UpCounter == 4) && (E4 == LOW)) //
{ //
if (Verbose == true) //
{ //
Serial.println("Relay 4 On"); //
delay(1); //
} //
digitalWrite(CasRel4, HIGH); //
DelayHigh(); //
digitalWrite(CasRel4, LOW); //
DelayLow(); //
} //
if ((UpCounter == 5) && (E5 == LOW)) //
{ //
if (Verbose == true) //
{ //
Serial.println("Relay 5 On"); //
delay(1); //
} //
digitalWrite(CasRel5, HIGH); //
DelayHigh(); //
digitalWrite(CasRel5, LOW); //
DelayLow(); //
} //
if ((UpCounter == 6) && (E6 == LOW)) //
{ //
if (Verbose == true) //
{ //
Serial.println("Relay 6 On"); //
delay(1); //
} //
digitalWrite(CasRel6, HIGH); //
DelayHigh(); //
digitalWrite(CasRel6, LOW); //
DelayLow(); //
} //
Mode = 1; //
} //
//
if (Mode== 3) // DOWNCOUNTER; if less modules should be cascaded
{ //
DownCounter++; // add 1 to counter value
if (DownCounter > CasMax) // roll over when required
{ //
DownCounter = 1; //
} //
if (Verbose == true) //
{ //
Serial.print("DownCounter = "); //
Serial.println(DownCounter); //
delay(1); //
} //
if ((DownCounter == 1) && (E1 == HIGH)) //
{ //
if (Verbose == true) //
{ //
Serial.println("Relay 1 Off"); //
delay(1); //
} //
digitalWrite(CasRel1, HIGH); //
DelayHigh(); //
digitalWrite(CasRel1, LOW); //
DelayLow(); //
} //
if ((DownCounter == 2) && (E2 == HIGH)) //
{ //
if (Verbose == true) //
{ //
Serial.println("Relay 2 Off"); //
delay(1); //
} //
digitalWrite(CasRel2, HIGH); //
DelayHigh(); //
digitalWrite(CasRel2, LOW); //
DelayLow(); //
} //
if ((DownCounter == 3) && (E3 == HIGH)) //
{ //
if (Verbose == true) //
{ //
Serial.println("Relay 3 Off"); //
delay(1); //
} //
digitalWrite(CasRel3, HIGH); //
DelayHigh(); //
digitalWrite(CasRel3, LOW); //
DelayLow(); //
} //
if ((DownCounter == 4) && (E4 == HIGH)) //
{ //
if (Verbose == true) //
{ //
Serial.println("Relay 4 Off"); //
delay(1); //
} //
digitalWrite(CasRel4, HIGH); //
DelayHigh(); //
digitalWrite(CasRel4, LOW); //
DelayLow(); //
} //
if ((DownCounter == 5) && (E5 == HIGH)) //
{ //
if (Verbose == true) //
{ //
Serial.println("Relay 5 Off"); //
delay(1); //
} //
digitalWrite(CasRel5, HIGH); //
DelayHigh(); //
digitalWrite(CasRel5, LOW); //
DelayLow(); //
} //
if ((DownCounter == 6) && (E6 == HIGH)) //
{ //
if (Verbose == true) //
{ //
Serial.println("Relay 6 Off"); //
delay(1); //
} //
digitalWrite(CasRel6, HIGH); //
DelayHigh(); //
digitalWrite(CasRel6, LOW); //
DelayLow(); //
} //
Mode = 1; //
} //
} //

Terug naar Afgeronde projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 2 gasten