Hallo Gemeinde,
ich bin neu hier und benötige eure Hilfe! Ich studiere Erneuerbare
Energien und habe ein kleines Projekt in der Speichertechnik angefangen.
Leider lassen sich die Messungen hierbei nur schlecht manuell
anfertigen. Also automatisieren!
Mein Projekt besteht darin, dass ich an verschiedenen Stellen Spannung
und Strom messen und zwei Mosfets schalten möchte. Hierfür nutze ich ein
Arduino Nano v.3 und 4 ACS712, die an den Eingängen A0, A2, A4 und A6
liegen. Des Weiteren habe ich 4 Spannungsteiler angefertigt, die an den
Eingängen A1, A3, A5 und A7 liegen. Die Mosfets werden durch die
digitalen Eingänge 2 und 4 geschaltet.
Die Verschaltung ist somit komplett.
Jetzt zur Programmierung, die mir etwas Kopfzerbrechen bereitet hat. Ich
habe dafür einige Beispiele aus dem Netz gefunden. Leider funktionieren
weder die Bsp. noch meine eigene Programmierung. Ich bekomme nur
komische Werte im Seriellen Monitor sowie im Plot.
Bsp. einer sich wiederholenden Anzeige aus dem Monitor:
"$GPGSV,1,1,01,17,,,,,,,,,,,,,,,*7E
$GPGLL,,,,,000103.000,V,N*78
$GPGGA,,,,,,0,0,,,M,,,,*1B
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGST,000103.000,,,,0,,,*7B
$GPRMC,000103.000,V,,,,,,,,,,N*4F
"
Meine Programmierung sieht wie folgt aus:
1 | #include "floatToString.h"
|
2 | char command;
|
3 | String string;
|
4 |
|
5 | int strom_StationNetzPulser = A0;
|
6 | int Spannung_StationNetzPulser = A1;
|
7 | int strom_StationPulserAkku = A2;
|
8 | int Spannung_StationPulserAkku = A3;
|
9 | int strom_StationAkkuWandler = A4;
|
10 | int Spannung_StationAkkuWandler = A5;
|
11 | int strom_StationWandlerLast = A6;
|
12 | int Spannung_StationWandlerLast = A7;
|
13 |
|
14 | int sensorValueA0 = 0;
|
15 | int sensorValueA1 = 0;
|
16 | int sensorValueA2 = 0;
|
17 | int sensorValueA3 = 0;
|
18 | int sensorValueA4 = 0;
|
19 | int sensorValueA5 = 0;
|
20 | int sensorValueA6 = 0;
|
21 | int sensorValueA7 = 0;
|
22 | float messA0 = 0;
|
23 | float messA1 = 0;
|
24 | float messA2 = 0;
|
25 | float messA3 = 0;
|
26 | float messA4 = 0;
|
27 | float messA5 = 0;
|
28 | float messA6 = 0;
|
29 | float messA7 = 0;
|
30 |
|
31 | int U = 13.8;
|
32 | int Umin = 13.5;
|
33 |
|
34 | int M1 = 2; // legt Mosfet1 auf Digital Pin2
|
35 | int M2 = 4; // legt Mosfet1 auf Digital Pin2
|
36 |
|
37 | void setup() {
|
38 | // Serielle Schnittstelle für Ausgabe öffnen
|
39 | Serial.begin(9600);
|
40 | Serial.println("Messwerte");
|
41 | pinMode(M1, OUTPUT); //legt M1 als Ausgang fest
|
42 | pinMode(M2, OUTPUT); //legt M1 als Ausgang fest
|
43 |
|
44 | }
|
45 |
|
46 | void loop() {
|
47 | // StationNetzPulser
|
48 |
|
49 | // Strom
|
50 | sensorValueA0 = analogRead(strom_StationNetzPulser); //Hole Wert
|
51 | //510=0A
|
52 | sensorValueA0 = sensorValueA0 - 510;//510=0Ampere 0=-30A 1023=30A
|
53 | //springen um 0 reduzieren
|
54 | if (sensorValueA0 == 1)sensorValueA0 = 0;
|
55 | if (sensorValueA0 == -1)sensorValueA0 = 0;
|
56 | //Umwandeln um einen Wert zuwischen -30 und +30 zu erhalten
|
57 | messA0 = (float)30 / 512 * sensorValueA0;
|
58 | //über Serielle Schnittstelle ausgeben
|
59 | Serial.println("Strom an Station 1");
|
60 | Serial.print(floatToString(buffer, messA0, 2));
|
61 | Serial.print("A");
|
62 | Serial.print("\t");
|
63 |
|
64 | // Spannung
|
65 | sensorValueA1 = analogRead(Spannung_StationNetzPulser); //Hole Wert
|
66 | //Wert umwandeln für Anzeige 0..12.0 Volt
|
67 | messA1 = (float)12 / 1023 * sensorValueA1;
|
68 | //über Serielle Schnitstelle ausgeben
|
69 | Serial.println("Spannung an Station 1");
|
70 | Serial.print(floatToString(buffer, messA1, 2));
|
71 | Serial.println("V"); //\n
|
72 |
|
73 | // Ende StationNetzPulser
|
74 |
|
75 | // StationPulserAkku
|
76 |
|
77 | // Strom
|
78 | sensorValueA2 = analogRead(strom_StationPulserAkku); //Hole Wert
|
79 | //510=0A
|
80 | sensorValueA2 = sensorValueA2 - 510;//510=0Ampere 0=-30A 1023=30A
|
81 | //springen um 0 reduzieren
|
82 | if (sensorValueA2 == 1)sensorValueA2 = 0;
|
83 | if (sensorValueA2 == -1)sensorValueA2 = 0;
|
84 | //Umwandeln um einen Wert zuwischen -30 und +30 zu erhalten
|
85 | messA2 = (float)30 / 512 * sensorValueA2;
|
86 | //über Serielle Schnittstelle ausgeben
|
87 | Serial.println("Strom an Station 2");
|
88 | Serial.print(floatToString(buffer, messA2, 2));
|
89 | Serial.print("A");
|
90 | Serial.print("\t");
|
91 |
|
92 | // Spannung
|
93 | sensorValueA3 = analogRead(Spannung_StationPulserAkku); //Hole Wert
|
94 | //Wert umwandeln für Anzeige 0..12.0 Volt
|
95 | messA3 = (float)12 / 1023 * sensorValueA3;
|
96 | //über Serielle Schnitstelle ausgeben
|
97 | Serial.println("Spannung an Station 2");
|
98 | Serial.print(floatToString(buffer, messA3, 2));
|
99 | Serial.println("V"); //\n
|
100 |
|
101 | // Ende StationPulserAkku
|
102 |
|
103 | // StationAkkuWandler
|
104 |
|
105 | // Strom
|
106 | sensorValueA4 = analogRead(strom_StationAkkuWandler); //Hole Wert
|
107 | //510=0A
|
108 | sensorValueA4 = sensorValueA4 - 510;//510=0Ampere 0=-30A 1023=30A
|
109 | //springen um 0 reduzieren
|
110 | if (sensorValueA4 == 1)sensorValueA4 = 0;
|
111 | if (sensorValueA4 == -1)sensorValueA4 = 0;
|
112 | //Umwandeln um einen Wert zuwischen -30 und +30 zu erhalten
|
113 | messA4 = (float)30 / 512 * sensorValueA4;
|
114 | //über Serielle Schnittstelle ausgeben
|
115 | Serial.println("Strom an Station 3");
|
116 | Serial.print(floatToString(buffer, messA4, 2));
|
117 | Serial.print("A");
|
118 | Serial.print("\t");
|
119 |
|
120 | // Spannung
|
121 | sensorValueA5 = analogRead(Spannung_StationAkkuWandler); //Hole Wert
|
122 | //Wert umwandeln für Anzeige 0..12.0 Volt
|
123 | messA5 = (float)12 / 1023 * sensorValueA5;
|
124 | //über Serielle Schnitstelle ausgeben
|
125 | Serial.println("Spannung an Station 3");
|
126 | Serial.print(floatToString(buffer, messA5, 2));
|
127 | Serial.println("V"); //\n
|
128 |
|
129 | // Ende StationAkkuWandler
|
130 |
|
131 | // StationWandlerLast
|
132 |
|
133 | // Strom
|
134 | sensorValueA6 = analogRead(strom_StationWandlerLast); //Hole Wert
|
135 | //510=0A
|
136 | sensorValueA6 = sensorValueA6 - 510;//510=0Ampere 0=-30A 1023=30A
|
137 | //springen um 0 reduzieren
|
138 | if (sensorValueA6 == 1)sensorValueA6 = 0;
|
139 | if (sensorValueA6 == -1)sensorValueA6 = 0;
|
140 | //Umwandeln um einen Wert zuwischen -30 und +30 zu erhalten
|
141 | messA6 = (float)30 / 512 * sensorValueA6;
|
142 | //über Serielle Schnittstelle ausgeben
|
143 | Serial.println("Strom an Station 4");
|
144 | Serial.print(floatToString(buffer, messA6, 2));
|
145 | Serial.print("A");
|
146 | Serial.print("\t");
|
147 |
|
148 | // Spannung
|
149 | sensorValueA7 = analogRead(Spannung_StationWandlerLast); //Hole Wert
|
150 | //Wert umwandeln für Anzeige 0..12.0 Volt
|
151 | messA7 = (float)12 / 1023 * sensorValueA7;
|
152 | //über Serielle Schnitstelle ausgeben
|
153 | Serial.println("Spannung an Station 4");
|
154 | Serial.print(floatToString(buffer, messA7, 2));
|
155 | Serial.print("V"); //\n
|
156 |
|
157 | // Ende StationAkkuWandler
|
158 |
|
159 | //***********Start Pulsung**************
|
160 | if (messA3 < Umin)
|
161 | {
|
162 | while (messA2 > 0.2)
|
163 | {
|
164 | digitalWrite(M1, HIGH);
|
165 | }
|
166 | }
|
167 | else
|
168 | {
|
169 | digitalWrite(M1, LOW);
|
170 | delay(300000);
|
171 | }
|
172 | //*************Ende Pulsung*************
|
173 |
|
174 | //****Start Kapazitätsmessung***********
|
175 | if (messA5 > Umin)
|
176 | {
|
177 | while (messA5 > 11.0)
|
178 | {
|
179 | digitalWrite(M2, HIGH);
|
180 | }
|
181 | }
|
182 | else
|
183 | {
|
184 | digitalWrite(M2, LOW);
|
185 | delay(6000);
|
186 | }
|
187 |
|
188 | }
|
Im Grunde soll der erste Mosfet bei Start geschaltet werden. Dieser ist
solange aktiv, bis an der StationPulserAkku ein gewisser Strom
unterschritten wird. Nach einer kurzen Pause schaltet dann der zweite
Mosfet bis die Spannung an StationPulserAkku bzw. StationAkkuWandler auf
11V gesunken ist. Dies soll sich dann wiederholen.
Ich hoffe ihr könnt mir helfen......