Ruderweg Messung mit Arduino

whity

User
Moin Kalle,

danke für die prompte Rückmeldung trotz Weihnachten, hoffe Du hattest ruhige Tage...

Die von Dir in #193 genannten Kalibriersketche habe ich auch beide versucht, immer mit der Meldung das ADXL_h nicht gefunden wird.

Habe jetzt einfach die ADXL345_raw.ino genutzt um mir die Werte über den seriellen Monitor anzuschauen und habe dann mit deiner Anleitung aus #117 die Kalibrierung in das Keypad_Shield_5 eingetragen.

Hat, wie Du schon geschrieben hast, eine deutlich genauere Angabe der Werte zur Folge- Ich bin happy, daß jetzt alles klappt:)

Danke nochmal, vielleicht mache ich mich auch noch an die Serwerpunktwaage...

Grüße aus Seevetal
Dirk
 

kalle123

User
Dank dir Dirk für die Rückmeldung. ;)
Meldung das ADXL_h nicht gefunden

Da stimmt was nicht mit den Libraries, meistens.

Das sind die, die ich momentan in Benutzung hab und brauche.

eDAKCQDl.png


Und da sind 3 !!unterschiedliche!! ADXL345 libs bei.

Der eine Code braucht die, der andere sketch ne andere lib. Muss man probieren.
Eine google Suche nach "Arduino lib adxl345" spuckt sicher noch mehrere aus.

Ja, an der CG scale bastle ich momentan rum.

Grüße KH
 

Eckehard

User
Arduino Sketches und libraries

Arduino Sketches und libraries

Hallo Zusammen,

fein das hier immerwieder an dem Ruderweg Sketch gebaut wird....

Zu den Problemen mit verschiedenen Arduino Projekten, welche u.U. verschiedene Versionen einer Bibliothek benötigen, habe ich mir folgendes angewöhnt. Vielleicht hilft es ja dem Einen oder Anderen beim Lösen von Kompiler Problemen:

Die "speziellen" Bibliotheken werden nicht über die IDE installiert, sondern im Sketchverzeichnis, also im gleichen Ordner wie das *.ino File abgelegt (hierher kopiert).
Diese "speziellen" Bibliotheken werden dann über "spezielleBibliothek.h" im Sketch/ino File eingebunden, wichtig sind hier die " " statt dem <>!

Beim allerersten Kompilieren (sofort nach dem Start der IDE) eines Sketches zeigen sich dann z.B. folgende Kompiler Meldungen (mit Datei/Voreinstellungen: Ausführliche Ausgabe während Kompilieren aktiviert):
...
Detecting libraries used...
"C:\Program Files (x86)\arduino-1.8.5\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10805 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\variants\standard" "C:\Users\Eckehard\AppData\Local\Temp\arduino_build_433088\sketch\RC_ANGLE_THROW_KeypadShield_5.ino.cpp" -o "nul"
"C:\Program Files (x86)\arduino-1.8.5\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10805 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\variants\standard" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\Wire\src" "C:\Users\Eckehard\AppData\Local\Temp\arduino_build_433088\sketch\RC_ANGLE_THROW_KeypadShield_5.ino.cpp" -o "nul"
"C:\Program Files (x86)\arduino-1.8.5\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10805 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\variants\standard" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\Wire\src" "-IC:\Program Files (x86)\arduino-1.8.5\libraries\LiquidCrystal\src" "C:\Users\Eckehard\AppData\Local\Temp\arduino_build_433088\sketch\RC_ANGLE_THROW_KeypadShield_5.ino.cpp" -o "nul"
"C:\Program Files (x86)\arduino-1.8.5\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10805 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\variants\standard" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\Wire\src" "-IC:\Program Files (x86)\arduino-1.8.5\libraries\LiquidCrystal\src" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\EEPROM\src" "C:\Users\Eckehard\AppData\Local\Temp\arduino_build_433088\sketch\RC_ANGLE_THROW_KeypadShield_5.ino.cpp" -o "nul"
"C:\Program Files (x86)\arduino-1.8.5\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10805 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\variants\standard" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\Wire\src" "-IC:\Program Files (x86)\arduino-1.8.5\libraries\LiquidCrystal\src" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\EEPROM\src" "C:\Users\Eckehard\AppData\Local\Temp\arduino_build_433088\sketch\ADXL345.cpp" -o "nul"
"C:\Program Files (x86)\arduino-1.8.5\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10805 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\variants\standard" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\Wire\src" "-IC:\Program Files (x86)\arduino-1.8.5\libraries\LiquidCrystal\src" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\EEPROM\src" "C:\Users\Eckehard\AppData\Local\Temp\arduino_build_433088\sketch\I2Cdev.cpp" -o "nul"
"C:\Program Files (x86)\arduino-1.8.5\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10805 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\variants\standard" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\Wire\src" "-IC:\Program Files (x86)\arduino-1.8.5\libraries\LiquidCrystal\src" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\EEPROM\src" "C:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\Wire\src\Wire.cpp" -o "nul"
"C:\Program Files (x86)\arduino-1.8.5\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10805 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\variants\standard" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\Wire\src" "-IC:\Program Files (x86)\arduino-1.8.5\libraries\LiquidCrystal\src" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\EEPROM\src" "C:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\Wire\src\utility\twi.c" -o "nul"
"C:\Program Files (x86)\arduino-1.8.5\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10805 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\variants\standard" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\Wire\src" "-IC:\Program Files (x86)\arduino-1.8.5\libraries\LiquidCrystal\src" "-IC:\Program Files (x86)\arduino-1.8.5\hardware\arduino\avr\libraries\EEPROM\src" "C:\Program Files (x86)\arduino-1.8.5\libraries\LiquidCrystal\src\LiquidCrystal.cpp" -o "nul"
...
Hier sieht man genau, welche Bibliotheken verwendet werden (Pfade) !


Hier der entsprechende Auszug aus der Version 5.2 meines Sketches "RC_ANGLE_THROW_KeypadShield_5.ino"

Code:
/*
  STATUS OK
  Version */
  int ino_version = 52;
  long ino_date = 171230;
  /*
  Kompiliert unter Arduino 1.8.5

  1. Unter Verwendung der mit Arduino 1.8.5 mitglieferten libraries:
  Wire
  ...\arduino-1.8.5\hardware\arduino\avr\libraries\Wire\src\Wire.cpp
  ...\arduino-1.8.5\hardware\arduino\avr\libraries\Wire\src\Wire.h
  LiquidCrystal:
  ...\arduino-1.8.5\libraries\LiquidCrystal\src\LiquidCrystal.cpp
  ...\arduino-1.8.5\libraries\LiquidCrystal\src\LiquidCrystal.h
  EEPROM:
  ...\arduino-1.8.5\hardware\arduino\avr\libraries\EEPROM\src\

  2. Zusaetzliche Libraries (https://www.i2cdevlib.com) im Sketch Verzeichnis:
  
  ADXL345.cpp
  ADXL345.h
  I2Cdev.cpp
  I2Cdev.h

  3. Verwendete Hardware, die bei mir funktioniert
  3.1 LCD KeypadShield
  3.2 Arduino UNO R3
  3.3 ADXL345 BreakoutBoard, GY-291

  -Fixes: Help Screen kommt nun zuverlaessiger, switch/case statt if/else
  -Fixes: SerialDebug Schnittstelle, Ausgabe "Initialize Serial Port..." wird nun ausgegeben
  -Verbesserung: Button RIGHT zeigt HELP Screen an
  -Verbesserung: Ausgabe der Version und Datum
  -Erweitert: Wert CHORD wird mit Button SELECT im EEPROM gespeichert
  -Maximalwert CHORD 999mm begrenzt
  -Ausgabe der Prefixe ANG und THR reduzuiert, damit konfigurierter Wert CHRORD angezeigt werden kann
  -Sensor2 (rechter Sensor): Orientierung angepasst, Sensor um 180Grad gegenüber Sensor1 gedreht eingesetzt wird
  -Code Review, Vereinfachung der Programmstruktur, LCD Ausgabe und Aktion in einem switch/case/.../default vereint
  -Sensor Kalibrierung: offset und gain angepasst
  -Libraries in das Sketch Verzeichnis verschoben, wo auch das RC_ANGLE_THROW_KeypadShield_*.ino liegt, 
    (dann #include "ADXL345.h" statt #include <ADXL345.h>!)
  
*/
/*******************************************************************************************/
// fuer den Betrieb von zwei ADXL Sensoren an einem Arduino eignet sich diese Library, zusammen mit I2Cdev
// https://www.i2cdevlib.com

// https://www.i2cdevlib.com/usage
// Arduino Wire library is required if I2Cdev I2CDEV_ARDUINO_WIRE implementation
// is used in I2Cdev.h
#include <Wire.h>

// https://www.i2cdevlib.com/usage
// I2Cdev and ADXL345 must be installed as libraries, or else the .cpp/.h files
// for both classes must be in the include path of your project
#include "ADXL345.h"
ADXL345 adxl1(0x53);  // Default I2C Adresse, mit Pin SDO nicht beschaltet, interner PullDown
ADXL345 adxl2(0x1D);  // Zweite  I2C Adresse, mit Pin SDO an VCC
/*******************************************************************************************/
//Fuer das LCD KeyPad-Shield
#include <LiquidCrystal.h>    // für das LCD
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
/*******************************************************************************************/
//Fuer das speichern von Werten
#include <EEPROM.h>
/*******************************************************************************************/
...

Und hier die Verzeichnisstruktur meines Sketch Verzeichnisses:
lib_ino.jpg

Das Verzeichnis libraries im Sketch Verzeichnis ist leer.

libraries.jpg

Möchte man den Code des Sektches nicht ändern, so muss man die Bibliotheken in diesem libraries Verzeichnis ablegen.
Ich starte neue Projekt immer mit einem leeren libraries Verzeichnis. Mein Verzeichnis sieht dann folgendermaßen aus:
all_libraries.jpg

Zum Aktivieren des gerade benötigten Verzeichnis bennennt man es in "libraries" um.
Zum Deaktivieren des gerade nicht benötigten Verzeichnis bennennt man es in "libraries_<Projektname>" um.

Grüße
Eckehard
 

Eckehard

User
Start Screen Anziege nur kurz....

Start Screen Anziege nur kurz....

Hallo Stefan (stefan1),

hats Du dein blinkendes OLEd Problem lösen können?

ich denke Du must des Code:

Code:
   // display text
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(15,20);
  display.println("RC-Meter");
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(20,40);
  display.println("Winkel & Weg");
  delay(1000);
  display.display();

aus der void(loop) in den void(setup) Teil verschieben.....denn der Start Screen soll ja nur einmal für die Dauer von delay(1000) angezeigt werden...

Grüße
Eckehard
 

kalle123

User
Viele Wege führen nach Rom, Eckehard ;)

Meist ist halt das Problem, erst mal die passende lib zu finden, wenn der Programmierer des sketches die lib nicht explizit angegeben hat.

Aber mit der Zeit kommt die Übung.

Allen hier einen guten Rutsch!

Gruß KH
 

stefan1

User
Hallo Stefan (stefan1),
aus der void(loop) in den void(setup) Teil verschieben.....denn der Start Screen soll ja nur einmal für die Dauer von delay(1000) angezeigt werden...
Grüße
Eckehard

Hallo Eckehard, habe noch nicht wieder dran weiter probiert, war etwas hektisch hier bei mir.
Du könntest mit deiner Vermutung recht haben, werde das morgen einmal probieren.
 

kalle123

User
Hallo Stefan.

Dank dir für die Zusendung des OLEDs und des 1602 + I2C Modules. 1602 und I2C, wie schon per PM gesagt, beide, wie du auch schon vermutet hattest, Schrott.

Das OLED hab ich mal schnell mit deinem sketch zusammen gesteckt.

05zMkY0l.png


Nur, ich krieg da "Augenkrebs". Bin auch zeitlich momentan ziemlich zu und will auf der Schiene nicht weitermachen.

Vielleicht setzt du doch noch mal auf Eckehards oder meinen Ansatz und versuchst es noch mal. Lohnt sich m.E.

dUzS6INl.png


Ev. kannst du ja auch auf ein LCD2004 verwenden, wenn du die Anzeige umgestalten willst. Halt anstatt 32 Zeichen sind damit 80 Zeichen möglich.

tquYZeQl.png


Gruß KH
 

stefan1

User
Hallo Karl-Heinz und andere,

ich habe ja auch nochmal was bestellt in der Richtung, aber wie du schon sagtest, dauert das so ca. 4 Wochen. So lange muss ich wohl warten.
Wieso ist bei dem OLED die Schrift so groß? Du kannst die mit folgendem Befehl kleiner(oder auch größer):

display.setTextSize(2);
Ich glaube, es geht 1,2,3.

display.setTextColor(BLACK, WHITE); setzt den Text auf invers. Zum Beispiel hier nachzulesen

https://startingelectronics.org/tutorials/arduino/modules/OLED-128x64-I2C-display/
oder hier

https://diyprojects.io/using-i2c-128x64-0-96-ssd1306-oled-display-arduino/
Gibt sicher noch mehr Seiten....

Ich finde das OLED trotzdem immer noch gut, habe aber leider auch gerade nicht soviel Zeit, mich darum zu kümmern. Bin beruflich ziemlich eingespannt. Kommen noch wieder bessere Tage......

Gruß Stefan
 

josch

User
Ruderwegmessung

Ruderwegmessung

Hallo zusammen,

habe mir auch gleich 2 Ruderwegmessung "gebaut".
Vielen Dank an die Entwickler und allen beteiligten, tolle Sache die Ruderwegmessung.

Bei meiner Anzeige springen öfters die Messwerte (Grad und mm) um etwa 1 Grad hin oder her,
meine Frage ist das bei Euch genauso ?

Verwendete SW: RC_ANGLE_THROW_KeypadShield_5.zip.txt
HW: Arduino Uno und Keypad Shield
Schaltung nach Beitrag #122


Viele Grüße
Josef

Suche: Lubach F-16 für 90 Impeller (Bausatz, Einzelteile, fertig oder Crash)
 

kalle123

User
Hallo Josef. Das ist denn wohl Eckehards Version.

Ich würde das "Springen" nicht so kritisch sehen. Darstellung ja nur ganzzahlig, intern wird aber mit Nachkommastellen gerechnet. Und wenn du da halt 25° in der Anzeige siehst, intern der Sensor aber zwischen 25.1° und 24.9° misst, kommt so was vor.

Könnte man intern im sketch "dämpfen", aber in Eckehards sketch "fummel" ich nicht rum ;)

Gruß KH
 

Eckehard

User
Hallo Karl-Heinz und andere,

aber in Eckehards sketch "fummel" ich nicht rum

Ihr könnt da gerne den Code anpassen, dann aber bitte unter einer neuen "Version" speichern/kennzeichnen und hier veröffentlichen...

Viel Spaß!

Eckehard
 

WalterH

Fördermitglied
GND bei Uno R3

GND bei Uno R3

Dumme Frage von Arduino Neuling.
Die GND Anschlüsse auf den beiden Seiten des Uno auf den Digital ports und auf den Power Ports sind identisch?
Also keine separaten GND ? Wäre ja auch eher nur für GND bei analogen inputs nötig? Und so aufwändig wird Arduino vermutlich nicht aufgebaut sein.

Ich frage weil ich ein LCD Keypad shield huckepack auf dem UNO verwenden will und dann nur noch auf der unteren Seite bei PWR ein GND nicht abgedeckt ist.
Das würde sich dann mit 5V in direkter Nähe für den ADXL 345 anbieten.

Weitere Frage zur Verkabelung:
Die Daten kommen ja digital über den Bus - kann ich da bei 2m Kabel zum Querruder auf Abschirmung verzichten?
 

whity

User
Weitere Frage zur Verkabelung:
Die Daten kommen ja digital über den Bus - kann ich da bei 2m Kabel zum Querruder auf Abschirmung verzichten?
Moin Walter,

bei mir sind 2m Kabel (Alarmanlagenkabel 4x0,14) im Einsatz. Wenn ich das Kabel sehr dicht an der 2,4 GHz Antenne vom Sender habe, pendeln die Werte etwas stärker, genauso bei Servos die knurren. Ob das mit kurzen Leitungen besser wäre hab ich bisher nicht getestet, glaub ich aber nicht. Eigentlich gibt es bei digitalen Signalen ja nur geht, oder geht nicht.....

Grüße
Dirk
 

kalle123

User
Ich hab für meine Konfiguration (1 x Arduino pro mini, 1 x ADXL 345 und 1 x LCD1602 I2C) das Programm etwas umgeschrieben.

Wie bei Eckehardt schon drin, die Klappenbreite jetzt im eeprom. War blöd, jedes mal die Breite neu eingeben zu müssen. ;)

Wichtig ist halt die Möglichkeit, eine Nullstellung durchführen zu können, die Klappenbreite zu variieren und den Wert der Klappenbreite abzuspeichern. Die Umschaltung der Auswertemethode, "normale" und Messung der Sekante ist eigentlich (für mich witzlos. Genauigkeit der Anzeigewerte 1° und 1 mm. Genauer will ich es nicht haben.

Auf jeden Fall, einen Sensorabgleich der 3 Messachsen machen. Lohnt auf jeden Fall.

cu KH
 

WalterH

Fördermitglied
Dirk und KH ich hab mal googled aber es gibt wohl sehr unterschiedliche Erfahrungen.
Also erst mal mit kurzem Kabel zum laufen bringen und dann ausprobieren.
Zumindest sind 2 m nicht aussichtslos.
Danke erstmal.

Jetzt muss ich mal der Sensor Lib hinterherlaufen. "ADXL_h nicht gefunden"... den Fehler hatten ja schon andere.

Wie lange braucht man eigentlich um ne vernünftige Arbeitsumgebung zu erstellen?
Ist ja ätzend so ganz ohne. Allein wie ein Print aussieht aus Arduino Software.:cry:
Editor Darstellung auf einem Monitor mit hoher Auflösung ist ja gräßlich. Und wer hat die "elegante" Schrift-Darstellung in dezentem grau auf hellem Grund erfunden?
Finde auch nicht wo ich das einstellen kann.
Da war ja Turbo Pascal vor 35 Jahren besser. ;)
Vielleicht ist das unter Linux besser als unter Win10?
 
Ansicht hell / dunkel umschalten
Oben Unten