nachdem ich schon eine Ewigkeit nichts mehr mit Arduino gemacht habe, brauche ich etwas Unterstützung...
Mein Zugkraftmesswagen ist nun vom mechanischen und elektrischen Aufbau fast fertig, so dass nun die Arduino-Ansteuerung ansteht.
Die Schaltung sieht mit Fritzing momentan so aus, wobei der Taster noch nicht im Sketch drin ist. Das wird dann wohl meine nächste Frage sein.
Durch googeln habe ich das OLED 128x32 und die Wägezelle (HX711) soweit zum laufen gebracht. Zum Testen habe ich mir eine Waage gebastelt, wo ich die einzelnen Schritte durchtesten kann.
Ich bin eigentlich ganz zufrieden, ich konnte die Waage kalibrieren und die zeigt nun den Wert auf beiden OLED's an (Now:___gr).
Ich hänge nun an etwas - vermutlich - ganz Banalem. Ich will den maximalen Wert (MaxWeight) gleich dem aktuellen Gewicht (NowWeight) setzen wenn dieses größer ist. Aber irgendwie nimmt der Sketch meine variable MaxWeight nicht an. Beim Kompilieren kommt kein Fehler, aber MaxWeight ist immer gleich 0. Das zeigt auch die Ausgabe am Seriellen Monitor:
float calibration_factor = 2110; //2110 worked for me (1kg) max scale setup const byte buttonResetMax = 12; //Reset button an D12 const long NowWeight = 0; //NowWeight auf 0 setzen (aktuelles Gewicht) const long MaxWeight = 0; //MaxWeight auf 0 setzen (Maximales Gewicht)
void setup() { Serial.begin(9600); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.display(); delay(3000); display.clearDisplay(); Serial.println("HX711 calibration sketch"); Serial.println("Remove all weight from scale"); Serial.println("After readings begin, place known weight on scale"); Serial.println("Press + or a to increase calibration factor"); Serial.println("Press - or z to decrease calibration factor");
scale.begin(DOUT, CLK); scale.set_scale(); scale.tare(); //Reset the scale to 0
long zero_factor = scale.read_average(); //Get a baseline reading Serial.print("Zero factor: "); //This can be used to remove the need to tare the scale. Useful in permanent scale projects. Serial.println(zero_factor); }
void loop() {
scale.set_scale(calibration_factor); //Adjust to this calibration factor Serial.print("Reading: "); Serial.print(scale.get_units(), 1); Serial.print(" gr"); //Change this to kg and re-adjust the calibration factor if you follow SI units like a sane person Serial.print(" calibration_factor: "); Serial.print(calibration_factor); Serial.print(" MaxWeight: "); Serial.print(MaxWeight); Serial.println(); long NowWeight = scale.get_units();
if(NowWeight > MaxWeight) { long MaxWeight = NowWeight; }
}
Es geht um diesen Ausdruck ziemlich weit unten:
1 2 3 4
if(NowWeight > MaxWeight) { long MaxWeight = NowWeight; }
Irgendwas mache ich da falsch.
Gruss Frank --------------------------------------------------------------------------------------------------------------------- MobaLedLib Wiki Projekt "Bahnpark Augsburg" Stummitreff BB: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen
Ich habe mal am seriellen Monitor noch mein NowWeight auch ausgegeben. Dieser ist dort genauso 0 wie der MaxWeight. Beim OLED verwende ich aber diese Variable und es wird das Gewicht angezeigt. Grübel...
Gruss Frank --------------------------------------------------------------------------------------------------------------------- MobaLedLib Wiki Projekt "Bahnpark Augsburg" Stummitreff BB: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen
const long MaxWeight = 0; //MaxWeight auf 0 setzen (Maximales Gewicht)
Konstanten kann nur einmal ein Wert zugewiesen werden, das Ganze sollte also ohne "const" funktionieren. OK, ich habe das Programm nicht komplett analysiert, aber die Zeile oben ist schon mal ein guter Kandidat...
Du hast Deine Variablen als Konstante deklariert: const long NowWeight = 0; //NowWeight auf 0 setzen (aktuelles Gewicht) const long MaxWeight = 0; //MaxWeight auf 0 setzen (Maximales Gewicht)
Ihr habt Recht, const definiert eine Konstante und ich will ja eine Variable haben. Ich bin nicht so der Programmierer, sondern versuche erstmal an Hand von den bisherigen Sketchen mir das passende zusammen zu suchen.
Ich habe den Sketch angepasst und nur die 2 const entfernt.
float calibration_factor = 2110; //2110 worked for me (1kg) max scale setup const byte buttonResetMax = 12; //Reset button an D12 long NowWeight = 0; //NowWeight auf 0 setzen (aktuelles Gewicht) long MaxWeight = 0; //MaxWeight auf 0 setzen (Maximales Gewicht)
void setup() { Serial.begin(9600); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.display(); delay(3000); display.clearDisplay(); Serial.println("HX711 calibration sketch"); Serial.println("Remove all weight from scale"); Serial.println("After readings begin, place known weight on scale"); Serial.println("Press + or a to increase calibration factor"); Serial.println("Press - or z to decrease calibration factor");
scale.begin(DOUT, CLK); scale.set_scale(); scale.tare(); //Reset the scale to 0
long zero_factor = scale.read_average(); //Get a baseline reading Serial.print("Zero factor: "); //This can be used to remove the need to tare the scale. Useful in permanent scale projects. Serial.println(zero_factor); }
void loop() {
scale.set_scale(calibration_factor); //Adjust to this calibration factor Serial.print("Reading: "); Serial.print(scale.get_units(), 1); Serial.print(" gr"); //Change this to kg and re-adjust the calibration factor if you follow SI units like a sane person Serial.print(" calibration_factor: "); Serial.print(calibration_factor); Serial.print(" NowWeight: "); Serial.print(NowWeight); Serial.print(" MaxWeight: "); Serial.print(MaxWeight); Serial.println(); long NowWeight = scale.get_units();
if(NowWeight > MaxWeight) { long MaxWeight = NowWeight; }
}
Der serielle Monitor zeigt allerdings immer noch bei beiden 0 an:
1 2 3
Reading: 0.1 gr calibration_factor: 2110.00 NowWeight: 0 MaxWeight: 0 Reading: 0.2 gr calibration_factor: 2110.00 NowWeight: 0 MaxWeight: 0 Reading: 0.2 gr calibration_factor: 2110.00 NowWeight: 0 MaxWeight: 0
Ich habe also irgendwo noch einen Gedankenfehler drin.
Gruss Frank --------------------------------------------------------------------------------------------------------------------- MobaLedLib Wiki Projekt "Bahnpark Augsburg" Stummitreff BB: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen
die Definition von "long MaxWeight = NowWeight;" führt dazu, daß bei jedem Durchlauf von loop die Variable im if-Block neu angelegt wird. Lösung: Definition als globale Variable bzw. als static in der loop()-Funktion.
ich habe etwas gegoogelt. Zu globaler Variable habe ich nichts gefunden was ich verstanden hätte. Static habe ich dann mal probiert mit dem Ergebnis dass gar nichts mehr funktioniert hat. Also wieder zurück auf den vorherigen Stand.
Und dann bog Deine Antwort
Zitat ... "long MaxWeight = NowWeight;" führt dazu, daß bei jedem Durchlauf von loop die Variable im if-Block neu angelegt wird.
irgendwelche Gehirnwindungen bei mir wieder gerade.
Ich habe das "long" entfernt und nun funktioniert dieser Schritt. Im seriellen Monitor wird zwar NowWeight immer noch mit 0 angezeigt, aber MaxWeight hat dort einen Wert bekommen und vor allem das OLED zeigt den Wert an:
1 2 3 4
eading: 225.3 gr calibration_factor: 2110.00 NowWeight: 0 MaxWeight: 806 Reading: 225.3 gr calibration_factor: 2110.00 NowWeight: 0 MaxWeight: 806 Reading: 225.2 gr calibration_factor: 2110.00 NowWeight: 0 MaxWeight: 806
Das OLED zeigt bei diesem Beispiel nun an: Max:806gr Now:225gr
float calibration_factor = 2110; //2110 worked for me (1kg) max scale setup const byte buttonResetMax = 12; //Reset button an D12 long NowWeight = 0; //NowWeight auf 0 setzen (aktuelles Gewicht) long MaxWeight = 0; //MaxWeight auf 0 setzen (Maximales Gewicht)
void setup() { Serial.begin(9600); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.display(); delay(3000); display.clearDisplay(); Serial.println("HX711 calibration sketch"); Serial.println("Remove all weight from scale"); Serial.println("After readings begin, place known weight on scale"); Serial.println("Press + or a to increase calibration factor"); Serial.println("Press - or z to decrease calibration factor");
scale.begin(DOUT, CLK); scale.set_scale(); scale.tare(); //Reset the scale to 0
long zero_factor = scale.read_average(); //Get a baseline reading Serial.print("Zero factor: "); //This can be used to remove the need to tare the scale. Useful in permanent scale projects. Serial.println(zero_factor); }
void loop() {
scale.set_scale(calibration_factor); //Adjust to this calibration factor Serial.print("Reading: "); Serial.print(scale.get_units(), 1); Serial.print(" gr"); //Change this to kg and re-adjust the calibration factor if you follow SI units like a sane person Serial.print(" calibration_factor: "); Serial.print(calibration_factor); Serial.print(" NowWeight: "); Serial.print(NowWeight); Serial.print(" MaxWeight: "); Serial.print(MaxWeight); Serial.println(); long NowWeight = scale.get_units();
Als nächstes kommt der Taster ins Spiel. D.h. eine Abfrage im Loop ob der Taster gedrückt wurde. Falls ja soll MaxWeight wieder auf 0 gesetzt werden. Aber das tue ich mir heute Abend nicht mehr an.
Gruss Frank --------------------------------------------------------------------------------------------------------------------- MobaLedLib Wiki Projekt "Bahnpark Augsburg" Stummitreff BB: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen
Wenn Du eine Variable vor setup und loop definierst, wird sie global, d.h. sie gilt ueberall im Programm und wird auch nicht bei jedem loop Durchlauf neu angelegt. Wenn Du im Programm long xxxxx definierst, wird eine neue Variable mit diesem Namen angelegt. (long)xxxxx laesst die Variable stehen, aber das Ergebnis der Zuweisung wird in "long" gewandelt. Da Deine Variablen schon "long" sind, schmeisse all "long" im Programm aus und lasse sie nur dort stehen, wo die Variable definiert wird. Um Dich nicht zu verwirren, deklariere alle Variablen am Anfang ausserhalb setup und loop.
Zitat Wenn Du eine Variable vor setup und loop definierst, wird sie global, d.h. sie gilt ueberall im Programm und wird auch nicht bei jedem loop Durchlauf neu angelegt. Wenn Du im Programm long xxxxx definierst, wird eine neue Variable mit diesem Namen angelegt. (long)xxxxx laesst die Variable stehen, aber das Ergebnis der Zuweisung wird in "long" gewandelt. Da Deine Variablen schon "long" sind, schmeisse all "long" im Programm aus und lasse sie nur dort stehen, wo die Variable definiert wird. Um Dich nicht zu verwirren, deklariere alle Variablen am Anfang ausserhalb setup und loop.
Danke Henner,
das habe ich jetzt mal gemacht und siehe da, der NowWeight ist nun auch im seriellen Monitor mit seinem Wert zu sehen:
1 2 3 4 5
Reading: 113.5 gr calibration_factor: 2110.00 NowWeight: 113 MaxWeight: 225 Reading: 113.5 gr calibration_factor: 2110.00 NowWeight: 113 MaxWeight: 225 Reading: 113.5 gr calibration_factor: 2110.00 NowWeight: 113 MaxWeight: 225
float calibration_factor = 2110; //2110 worked for me (1kg) max scale setup const byte buttonResetMax = 12; //Reset button an D12 long NowWeight = 0; //NowWeight auf 0 setzen (aktuelles Gewicht) long MaxWeight = 0; //MaxWeight auf 0 setzen (Maximales Gewicht)
void setup() { Serial.begin(9600); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.display(); delay(3000); display.clearDisplay(); Serial.println("HX711 calibration sketch"); Serial.println("Remove all weight from scale"); Serial.println("After readings begin, place known weight on scale"); Serial.println("Press + or a to increase calibration factor"); Serial.println("Press - or z to decrease calibration factor");
scale.begin(DOUT, CLK); scale.set_scale(); scale.tare(); //Reset the scale to 0
long zero_factor = scale.read_average(); //Get a baseline reading Serial.print("Zero factor: "); //This can be used to remove the need to tare the scale. Useful in permanent scale projects. Serial.println(zero_factor); }
void loop() {
scale.set_scale(calibration_factor); //Adjust to this calibration factor Serial.print("Reading: "); Serial.print(scale.get_units(), 1); Serial.print(" gr"); //Change this to kg and re-adjust the calibration factor if you follow SI units like a sane person Serial.print(" calibration_factor: "); Serial.print(calibration_factor); Serial.print(" NowWeight: "); Serial.print(NowWeight); Serial.print(" MaxWeight: "); Serial.print(MaxWeight); Serial.println(); // long NowWeight = scale.get_units(); NowWeight = scale.get_units();
Gruss Frank --------------------------------------------------------------------------------------------------------------------- MobaLedLib Wiki Projekt "Bahnpark Augsburg" Stummitreff BB: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen
Nochwas: Deine Variable "zero_factor" ist in setup definiert und nur dort gueltig. Wenn Du sie spaeter in der Schleife (loop) verwenden willst, ist sie dort unbekannt. Mache sie auch "global", auch wenn das bei C-Programmierern verpoent ist.
Zitat Nochwas: Deine Variable "zero_factor" ist in setup definiert und nur dort gueltig. Wenn Du sie spaeter in der Schleife (loop) verwenden willst, ist sie dort unbekannt. Mache sie auch "global", auch wenn das bei C-Programmierern verpoent ist.
Danke Henner, werde ich mir vormerken. Den Teil habe ich vom Internet kopiert und nach dem Motto "Never touch a running System" lasse ich die Finger erstmal davon, solange alles funktioniert.
Zitat Ein Vorschlag für den Taster:
In setup folgende Zeile einfügen: pinMode(buttonResetMax,INPUT);
Am Ende von loop folgende Zeile einfügen: if(digitalRead(buttonResetMax)){MaxWeight=0;}
Danke Anton, ich habe jetzt erst Deine Antwort gesehen, allerdings kurz zuvor den Taster selber zum laufen gebracht.
Vermutlich habe ich es ziemlich umständlich gemacht. Zusammengefasst ist mein Weg:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
int buttonResetMaxState = 0; // Variable for Tasterstatus
void setup() pinMode(buttonResetMaxPin, INPUT); //initialize Resettaster as input
void loop() buttonResetMaxState = digitalRead(buttonResetMaxPin); //Status vom Resettaster lesen // wenn Resettaster gedrueckt, dann MaxWeight=0 setzen if (buttonResetMaxState == HIGH) { MaxWeight = 0; }
Da sieht das bei Dir wesentlich einfacher aus.
Eigentlich habe ich nun alles was ich brauche. Für die Waegezelle sind eigentlich 2 Sketche vorgegeben: 1. zum Kalibrieren über den seriellen Monitor um eben den Kalibrierungsfaktor zu bestimmen. Hier kann man über den seriellen Monitor bequem den Kalender.-Faktor einstellen. Z.B. bei meiner Testwaage 2110 und beim Messwagen 1720. 2. einer wo dann fest der Kalibrierungsfaktor eingetragen wird und damit dann im täglichen Leben das Gewicht bestimmt wird.
Ich sehe eigentlich keinen Grund nun zum 2ten Sketch zu wechseln und würde einfach mit dem bisherigen arbeiten. Oder gibt es da Nachteile wenn da z.B. die Ausgaben an den seriellen Monitor aktiv sind?
pinMode(buttonResetMaxPin, INPUT); //initialize Resettaster as input
Serial.println("HX711 calibration sketch"); Serial.println("Remove all weight from scale"); Serial.println("After readings begin, place known weight on scale"); Serial.println("Press + or a to increase calibration factor"); Serial.println("Press - or z to decrease calibration factor");
scale.begin(DOUT, CLK); scale.set_scale(); scale.tare(); //Reset the scale to 0
long zero_factor = scale.read_average(); //Get a baseline reading Serial.print("Zero factor: "); //This can be used to remove the need to tare the scale. Useful in permanent scale projects. Serial.println(zero_factor); }
void loop() {
scale.set_scale(calibration_factor); //Adjust to this calibration factor Serial.print("Reading: "); Serial.print(scale.get_units(), 1); Serial.print(" gr"); //Change this to kg and re-adjust the calibration factor if you follow SI units like a sane person Serial.print(" calibration_factor: "); Serial.print(calibration_factor); Serial.print(" NowWeight: "); Serial.print(NowWeight); Serial.print(" MaxWeight: "); Serial.print(MaxWeight); Serial.print(" Reset-Taster: "); Serial.print(buttonResetMaxState); Serial.println(); // long NowWeight = scale.get_units(); NowWeight = scale.get_units();
Gruss Frank --------------------------------------------------------------------------------------------------------------------- MobaLedLib Wiki Projekt "Bahnpark Augsburg" Stummitreff BB: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen
Zitat .... Oder gibt es da Nachteile wenn da z.B. die Ausgaben an den seriellen Monitor aktiv sind? ....
Praktisch: Nein. Theoretisch: Der Programmablauf geht geringfügig langsamer.
Was du aber überlegen könntest: Du hast die Möglichkeit vorgesehen, seriell den Kalibrierungsfaktor zu ändern. Da bietet es sich doch an, den ermittelten Wert im EEPROM zu speichern.
Zitat .... Oder gibt es da Nachteile wenn da z.B. die Ausgaben an den seriellen Monitor aktiv sind? ....
Praktisch: Nein. Theoretisch: Der Programmablauf geht geringfügig langsamer.
Hallo Anton,
Danke, gut zu wissen. Damit kann ich gut leben.
Zitat Was du aber überlegen könntest: Du hast die Möglichkeit vorgesehen, seriell den Kalibrierungsfaktor zu ändern. Da bietet es sich doch an, den ermittelten Wert im EEPROM zu speichern.
Bei den Weichen- und Entkuppler-Servos für meinen TimeWaster habe ich (natürlich nur mit Hilfe von Franz-Peter und anderen im Forum) die Positionen im EEPROM abgelegt. Beim Zugkraftmesswagen sehe ich da noch keinen Sinn dies zu tun. Die Kalibrierung macht man eigenlich nur einmal und der Kal.-faktor bleibt dann gleich.
Am Sonntag war ich mal wieder bei Hardy (BigDiesel) zu Besuch. Da ist uns aufgefallen, dass die LiPo-Batterie nicht zum Arduino durchkommt. Erst dachten wir es liegt an dem Akku, aber dann haben wir festgestellt, dass die Ladeeinheit anscheinend die Spannung nicht zum Verbraucher durchschaltet
Ich verwende den unteren, der noch zusätzliche Elektronik drauf hat. Hardy hat mir dann einen seiner Ladeeinheiten zum Testen mitgegeben.
Hier etwas größer:
Vielleicht weiß ein Elektronik-Experte was da faul sein könnte.
Zum Testen des anderen Ladereglers bin ich noch nicht gekommen, ich habe aber eine interessante Entdeckung gemacht. Offiziell möchte der Arduino Nano mit 5V Vin versorgt werden. Ich habe am Sonntagabend aber mal direkt meinen alten 208mAh LiPo angeschlossen. Und siehe da: Die Spannung von ca. 4V reicht aus um alles zu betreiben - Arduino, OLED's und die Wägezelle. Inzwischen habe ich getestet dass der LiPo locker 5 Stunden das ganze mit Strom versorgen kann.
Ich bin echt am überlegen, ob ich auf die ganze Ladeschaltung verzichte und einfach den LiPo bei Gebrauch direkt anschließe...
Gruss Frank --------------------------------------------------------------------------------------------------------------------- MobaLedLib Wiki Projekt "Bahnpark Augsburg" Stummitreff BB: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen
Zitat Offiziell möchte der Arduino Nano mit 5V Vin versorgt werden.
Ich weis jetzt nicht, ob Du das nur ungenau geschrieben hast, oder wirklich so meinst. Der Nano hat einen Vin Anschluß. Da möchte er aber mindestens knapp 7V haben. Wenn Du ihn mit 5V versorgen willst, musst Du an den 5V Anschluß gehen. Wobei der 328P grundsätzlich auch mit weniger auskommt. Die maximale Betriebsfrequenz hängt allerdings von der Spannung ab. Je niedriger die Sapnnung, desto weniger schafft er. 16MHz sollte er lt Datenblatt bis ca 3,8V schaffen. Problematischer könnte der USB-Seriall Wandler sein. Aber wenn USB angeschlossen ist, hast Du ja eh eine höhere Spannung.
die zusätzlichen Bauteile sind ein Batterie Protection Unit, https://www.ic-fortune.com/upload/Downlo...-G-DS-10_EN.pdf und ein Doppel FET. So wie es aussieht verhindert die Überwachung das Anlaufen der Schaltung, bzw. die Freigabe der Batterie.
Zitat Ich bin echt am überlegen, ob ich auf die ganze Ladeschaltung verzichte und einfach den LiPo bei Gebrauch direkt anschließe...
Lohnt es sich überhaupt LiPo zu nutzen? Bei meiner messwagen, nutzen ich zwei AAA batterien und en DC-DC wandler wer kann mit 5 Volt geben für Arduino nano und Display.
Zitat von fbstr im Beitrag #15 Offiziell möchte der Arduino Nano mit 5V Vin versorgt werden.
Ich weis jetzt nicht, ob Du das nur ungenau geschrieben hast, oder wirklich so meinst. Der Nano hat einen Vin Anschluß. Da möchte er aber mindestens knapp 7V haben. Wenn Du ihn mit 5V versorgen willst, musst Du an den 5V Anschluß gehen.
Oh Mann. Franz-Peter, ich habe gerade ein déjà vu.
Also der LiPo hängt direkt am Vin und bei meiner Test-Waage und beim Messwagen funktioniert es. Gut, im Gegensatz zum TimeWaster sind zwar keine Servo angeschlossen (damals hatte ich Phänomene), aber jetzt erstaunt es mich umso mehr dass es so funktioniert.
Zitat von fbstr im Beitrag #15 Ich bin echt am überlegen, ob ich auf die ganze Ladeschaltung verzichte und einfach den LiPo bei Gebrauch direkt anschließe...
Bei meinen messwagen, nutze ich zwei AAA batterien und ein DC-DC wandler der kann 5 Volt geben für Arduino nano und Display.
Hallo Klaus, an welchen Pins speist Du denn dann die 5V ein? Auf den Bildern in Deinem Thread sehe ich, dass Du nicht den USB-Anschluß zur Stromversorgung verwendest. Franz-Peter hat ja Recht dass Vin eigentlich 7 - 12 V erwartet.
Nun, erst durch dieses zwangsweise Testen habe ich gemerkt dass die Einheit so wenig Strom verbraucht. Vielleicht einfach 2 LiPo's in Serie schalten und dann mit ca. 8V in Vin rein? Es ist halt eine 10er Packung 200mAh LiPo's unterwegs zu mir. Irgendwo will ich die dann auch verwenden...
Gruss Frank --------------------------------------------------------------------------------------------------------------------- MobaLedLib Wiki Projekt "Bahnpark Augsburg" Stummitreff BB: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen
Zitat Also der LiPo hängt direkt am Vin und bei meiner Test-Waage und beim Messwagen funktioniert es.
Das dürfte am niedrigen Stromverbrauch liegen. Der On-Board Regler regelt dann zwar nichts mehr, lässt aber genügend Spannung durch, dass der Nano noch funktioniert. Du kannst den Nano aber auch direkt am 5V Anschluß versorgen:
ZitatPower The Arduino Nano can be powered via the Mini-B USB connection, 6-20V unregulated external power supply (pin 30), or 5V regulated external power supply (pin 27). The power source is automatically selected to the highest voltage source.
Zitat an welchen Pins speist Du denn dann die 5V ein? Auf den Bildern in Deinem Thread sehe ich, dass Du nicht den USB-Anschluß zur Stromversorgung verwendest. Franz-Peter hat ja Recht dass Vin eigentlich 7 - 12 V erwartet.
Also, ich habe heute mal den LiPo an Pin 30, an Pin 27, mit und ohne 5V Booster gehängt und extra 5 OLED's angeschlossen. Jede Kombo funktioniert:
:
Nur meine Ladeschaltung zickt herum. Ich dachte erst ich hätte einen Trick gefunden (eingesetzt als normaler Lader mussten wir das USB-Netzteil kurz trennen und danach hat die Ladeeinheit wieder den Akku geladen) und zwar die Stromversorgung des Ladereglers zu unterbrechen - hat aber auch nichts gebracht.
Was ich sonst noch gemacht habe: Die Widerstände von 5 Ladeeinheiten ausgetauscht, damit statt 1A mit 250mAh geladen wird.
SMD löten ist einfach nicht mein Ding....
Nächster Schritt wird sein den Laderegler von Hardy (BigDiesel) zu testen.
Gruss Frank --------------------------------------------------------------------------------------------------------------------- MobaLedLib Wiki Projekt "Bahnpark Augsburg" Stummitreff BB: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen
Zitat Nächster Schritt wird sein den Laderegler von Hardy (BigDiesel) zu testen.
Gesagt getan.
Und was soll ich schreiben - es tut.
Aus-, ein-, aus-, ein-, aus-, einschalten - so oft ich will und die Schaltung, sprich der Arduino springt an.
Das heißt: 1. Hardy wird seinen Laderegler nicht mehr zurückbekommen 2. Ich habe demnächst 15-20 von meinen Ladereglern herumliegen
-------------------------
Beim Testen seit gestern mußte ich feststellen, dass ein Reset-Taster am Gehäuse unpraktisch ist, da man ja den Messwagen berührt und meistens gleich wieder die Max-Anzeige größer 0 ist. Deshalb heute einen Reed-Kontakt im Dach eingebaut und mittels Magnet läßt sich das nun berührungslos erledigen.
Was ich auch feststellen mußte, eine Tare-Funktion wäre auch nicht schlecht. Dies wird beim Einschalten gemacht und ich dachte das reicht mir. Aber es wäre trotzdem vielleicht ganz gut dies während dem Betrieb mal schnell bequem machen zu können. Momentan muß ich den Akku abschalten (Schiebeschalter auf der Stirnseite) und den Waggon kurz vom Gleis heben, da er ja nun (weil nun Hardy's Laderegler dort drin seinen Dienst tut) auch über DCC versorgt wird.
Einen zweiten Taster oder Reed-Kontakt will ich aber nicht einbauen. Mein Gedanke ist den "Reset-Reed-Kontakt-Taster" dafür zu verwenden. Sprich: - Magnet kurz ranhalten: Max-Wert auf 0 setzen - Magnet länger als 3 Sekunden ranhalten: Tare ausführen
Franz-Peter hatte mir schon damals bei der Drehscheiben-Steuerung geholfen und ich denke das Prinzip kann ich hier auch anwenden. Falls jemand schneller eine Lösung für mich hat als ich hirneln werde, wäre ich demjenigen auch nicht böse...
Gruss Frank --------------------------------------------------------------------------------------------------------------------- MobaLedLib Wiki Projekt "Bahnpark Augsburg" Stummitreff BB: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen
Hallo Frank, der damalige Ansatz war blockierend, d.h. der Arduino tut nichts mehr, solange der Taster/Reedkokntakt geschlossen ist. Kannst Du dir das hier auch leisten? Dann geht der damalige Ansatz. Ansonsten brauchst Du eine Flankenauswertung des Reed-Kontakts. Kontakt schließt -> nur Zeit starten. Kontakt öffnet: Zeit seit schließen < 3sec: Max rücksetzen, Zeit > 3sec: Tare ausführen.
Zitat ...der damalige Ansatz war blockierend, d.h. der Arduino tut nichts mehr, solange der Taster/Reedkokntakt geschlossen ist. Kannst Du dir das hier auch leisten? Dann geht der damalige Ansatz.
Seufz, das war mir nicht mehr bewußt. Du hast natürlich vollkommen Recht. Sprich - solange ich den Taster betätige wird die Zugkraft nicht mehr gemessen. Das wäre hier unschön.
Zitat Ansonsten brauchst Du eine Flankenauswertung des Reed-Kontakts. Kontakt schließt -> nur Zeit starten. Kontakt öffnet: Zeit seit schließen < 3sec: Max rücksetzen, Zeit > 3sec: Tare ausführen.
[Tief durchatmen] Also was brauchen wir? Die Moba-Tools!
Erster Entwurf (ohne Arduino IDE). Macht das Sinn?
#include <MobaTools.h> ... ... EggTimer myTimer3sec; // 3 Sekunden Timer für den ResetTaster ... void setup() ... ... void loop() ... ... if (buttonResetMaxState == HIGH) // wenn Resettaster gedrueckt, dann... myTimer3sec.setTime(3000) ; // Timer auf 3 Sekunden setzen if (myTimer3sec.running()==false) // Wenn die 3 Sekunden abgelaufen { MaxWeight = 0; // MaxWeight auf Null setzen. } else { scale.tare(); //Reset the scale to 0 } ... ...
Gruss Frank --------------------------------------------------------------------------------------------------------------------- MobaLedLib Wiki Projekt "Bahnpark Augsburg" Stummitreff BB: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen