Ruderweg Messung mit Arduino

kalle123

User
Dirk, blöd nicht, aber du bist mit der Verzeichnisstruktur bei Arduino komplett durcheinander.

Die vom Arduino Programm benötigten LIBRARIES gehören in den Unterordner "library"

Das auszuführende Arduino Programm gehört da nicht rein.

So sieht das z.B. bei mir aus. (Ist jetzt Linux, vielleicht nicht sooo hilfreich ...)

XLfz4aXl.png


Von LINKS nach RECHTS

ANWENDUNGEN -> ARDUINO (da ist alles drin, was ich ZUSÄTZLICH installiert habe, also Programme und zusätzliche Libraries. Darunter(eine Zeile tiefer) findest du das eigentliche Arduino IDE Programm im Ordner arduino-1.8.5)

Hoffe, es hilft ein bisschen ...

Gruß KH
 

Maggi

User
Am einfachsten ist es auch, wenn man die librarys per zip direkt im Arduino Programm entsprechend hinzugefügt wird...daher sind links zu den eigentlichen richtigen Quellen wesentlichen besser zum handhaben als diese direkt Date Upload mit Datei Umbenennung.
Wie man librarys importiert gibt es genügend Tutorials in Youtube �� einmal schritt für schritt durch gearbeitet, kommt Mammut Arduino insgesamt schon wesentlich besser zurecht.

Nichts desto trotz ist es hilfreich zu wissen wo die lib eigentlich gespeichert werden, damit man bei Bedarf auch mal falsche Libs wieder sinnvoll löschen kann.
Unter Dokumente/Arduino/librarys/ findet man die entsprechenden librarys die dann auch im Programm angegeben werden
 

kalle123

User
Vielleicht hilft das ja ....

So werden zusätzliche libs am einfachsten installiert.

eqXN5CQl.png


Die werden dann unter Contributed Bibliotheken angezeigt ...

Gruß KH

PS. Vielleicht solltest du die Arduino Geschichte mal komplett raus schmeißen und neu installieren.

Alle zusätzlichen Programme (*.ino) kommen hier rein - Sketchbook Ordner. Musst schauen, wie der Pfad da bei dir aussieht.

zYRulpSl.png


Und zwar kommt z.B. "beispiel.ino" dort hin in einen neuen Unter Ordner "beispiel".
 

whity

User
Ihr seid die besten

Ihr seid die besten

Moin Jungs,

danke Euch für die tolle Hilfe!!!
Ich bin Dank der Hinweise endlich so weit, daß es läuft:):)


IMG_20171213_163227.jpg


Komischerweise hat es gereicht den KeypadShield 5 aufzuspielen.

Wie ist Eure Erfahrung mit dem kalibrieren, habt Ihr deutliche Unterschiede festgestellt, oder sind die Sensoren für die Zwecke genau genug?

Über ein Update für eine Kommastelle würde ich mich sehr freuen, gerade bei Höhenruderausschlägen von kleineren Modellen wäre das sinvoll.
Aber erst einmal geht´s an das Vermessen der Modelle- es steht ein Anlagenwechsel bevor....

Grüße aus Seevetal
Dirk
 

Eckehard

User
Version 5 läuft nun auch im hohen Norden....

Version 5 läuft nun auch im hohen Norden....

Hallo Dirk,

fein das die Version 5 nun auch bei Dir funkt!

Mich würde noch interessieren:

- welches Arduino Board Du einsetzt, und
- wie Du die I2C Verkabelung realisiert hast (Bus, oder Stern, mit oder ohne zusätzliche Pullups)
- wie Du die Stromversorgung realisiert hast.

100 Danl und viel Spaß beim Ausmessen, Dokumentieren und dann später beim Einstellen mit der neuen Funke...

Grüße
Eckehard
 

kalle123

User
Sensor Kalibrierung lohnt auf jeden Fall. Hab da ja irgend wo hier im Thread mal einen recht guten und einfach zu handhabenden sketch und ein paar Bilder dazu gepostet. Falls du das nicht findest, melde dich mal und ich setzt den sketch hier noch mal rein.

Gruß KH
 

whity

User
Moin Eckehard,

* das Board ist ein UNO R3
* die Verkabelung habe ich wie in #122 gelöst, ohne zusätzliche Widerstände
* die Spannungsversorgung will ich einfach über den USB Anschluß und eine Powerbank machen, sowas hat man ja eh liegen...
* die Verkabelung der Sensoren habe ich momentan mit 4 adrigen Kabeln gemacht (Lan Kabel geschlachtet) bin aber noch auf der Suche nach "weicherem" Kabel.
Die Lösung mit einzelnen Leitungen sagt mir nicht so zu. Habt ihr da in der Zwischenzeit eine Bezugsquelle?

Ja das Kalibrieren- werde ich mir später anschauen- da ich ja schon beim Aufspielen von KeypadShield 5 Fehlermeldungen hatte, trau ich mich gar nicht da wieder was neues aufzuspielen. Wer weiß ob ich den jetzt Zustand wieder hinbekomme (meine Frau bringt mich um, wenn ich noch nen Tag am Rechner sitze....).
Habe noch einen Satz bei Ali bestellt, wenn der Da ist, probiere ich weiter....

Danke nochmal!!!

Grüße aus Seevetal
Dirk
 
Kurze Nachfrage

Kurze Nachfrage

Guten Morgen und erstmal frohe Weihnachten,

ich hab jetzt nach langem versuchen hin und her den Arduino mit dem Skript von "Eckehard" bespielt (scheinbar hatten andere Lib´s gestört).
Nun habe ich alles aufgespielt, aber irgendwie funzt mein "down" Button nicht.

Hab mal das "KeypadShield_Button_Values" aufgespielt und festgestellt, dass der Button "down" als "BTNLeft" angezeigt wird.

Kann es sein, dass mein "Shield" kaputt ist?

IMG_0354.jpg

Ich benutze im Moment ein Arduino Uno R3 mit einem KeypadShield von Amazon.

Hoffe es kann mir jemand helfen oder hatte schonmal ähnliche Probleme

Gruß Timo
 
Hab den Fehler gefunden

Hab den Fehler gefunden

Habs gefunden, ich musste nur den Buttonwert um 20 erhöhen und dann klappt es.

if (adc_key_in < 320) return btnDOWN ;


tt.png
 

kalle123

User
Hallo Timo.

Auch dafür gibt es einen sketch ;)

Die Widerstandswerte und damit die Werte für die Tasten sind je nach Hersteller unterschiedlich.

Häng den hier mal an. Dann brauchst du beim nächsten KeypadShield nicht mehr zu probieren ....

Happy Xmas - KH
 

Anhänge

  • KeypadShield_Button_Values.ino.txt
    4,3 KB · Aufrufe: 112

whity

User
Moin Jungs,

wollte heute mal die ADXL345 kalibrieren. Dazu will ich den Sketch ADXL_CAL.ino aufspielen. Dabei bekomme ich die Fehlermeldung:

Arduino: 1.8.3 (Windows 7), Board: "Arduino/Genuino Uno"

C:\Users\Dirk\Documents\Programme Modellflug\arduino-1.8.3\libraries\ADXL345_CAL\SparkFun_ADXL345_Arduino_Library\ADXL354_cal\ADXL354_cal.ino:3:30: fatal error: SparkFun_ADXL345.h: No such file or directory

#include <SparkFun_ADXL345.h>

^

compilation terminated.

exit status 1
Fehler beim Kompilieren für das Board Arduino/Genuino Uno.

Komischerweise kann ich aber ohne Probleme den Sketch Keypad Shield 5 aufspielen. Der greift ja auch auf die ADXL_345h zu. Also muß das ja eigentlich passen.

Wenn ich über C:\Users\Dirk\Documents\Programme Modellflug\arduino-1.8.3\libraries\SparkFun_ADXL345_Arduino_Library\SparkFun_ADXL345_Arduino_Library\examples\SparkFun_ADXL345_Calibration
versuche das Calibrierprogramm zu laden, bekomme ich ebenso die Anzeige:

Arduino: 1.8.3 (Windows 7), Board: "Arduino/Genuino Uno"

C:\Users\Dirk\Documents\Programme Modellflug\arduino-1.8.3\libraries\ADXL345_CAL\SparkFun_ADXL345_Arduino_Library\SparkFun_ADXL345_Arduino_Library\examples\SparkFun_ADXL345_Calibration\SparkFun_ADXL345_Calibration.ino:21:30: fatal error: SparkFun_ADXL345.h: No such file or directory

#include <SparkFun_ADXL345.h>

^

compilation terminated.

exit status 1
Fehler beim Kompilieren für das Board Arduino/Genuino Uno.

Wieso findet Arduino die Datei nicht, obwohl sie im gleichen Ordner steht?

Wäre schön, wenn da noch Mal jemand eine Idee hätte.
Ich habe das Arduino 1.8.3 schon mehrfach komplett gelöscht und neu angelegt und auch schon eine ältere Version probiert, weil ich das in einem Video gesehen hatte. Auf einem alten Windows XP Rechner habe ich auch schon getestet- mit dem gleichen Fehler.

Schöne Weihnachten schon Mal,
Grüße aus Seevetal
Dirk
 

kalle123

User
Ich hab hier zwei Kalibriersketches für den ADXL 345.

ADXL345_calibration.ino

und

SparkFun_ADXL345_Calibration.ino

Beide kompilieren einwandfrei.
TPFZQd4l.png


Was jetzt die von dir genannte "ADXL_CAL.ino" ist und warum die "muckt", kann ich ohne weitere Angaben von dir nicht sagen.

Und versuche mal, das hier
6Qh7EEfl.png
zu benutzen. Mach das lesen deiner Beiträgen dann etwas einfacher.

cu KH
 
Hallo Kollegen,

Ich muss sagen ein geiles Projekt ... habe wieder extrem viel gelernt. (Mann muss, obwohl extrem viel beschrieben ist, trotzdem selbst noch ran ... :-) )

Jetzt nur noch eine Frage zur Bedienung ...

Muss ich bei Chord depth die Flügelteife angeben oder die tiefe des Ruders ??
Sorry bin etwas verwirrt ...

Gruß aus Österreich
Martin
 

stefan1

User
Hallo Mitbastler,

ich habe mich auch mal daran versucht. Leider funktionieren meine I2C-Adapter nicht oder die Displays. China halt, vor Monaten gekauft, aber leider nicht getestet. Ich habe das nicht weiter versucht,da ich da auch schon jede Menge Zeit reingesteckt habe, ohne das es funktionierte. Ist etwas frustrierend. Dann fiel mir ein, das ich aus Multiwii-Tagen noch ein Oled-Display(Crius-Multiwii) mit I2C-Anschluss liegen habe. Den Code habe ich mit Hilfe des Inet umgestrickt, ich bekomme ne Anzeige und die Werte ändern sich, wenn ich den ADXL bewege. Soweit, sogut. Leider funktioniert es noch nicht, wie es soll. Der Startbildschirm wird nicht(oder ganz kurz) angezeigt. Dafür haut er mir in den anderen Bildschirm rein. Den Code lade ich hoch, vielleicht hat ja jemand von den Cracks Erbarmen und kann mal drüberschauen. Ihr findet vielleicht sofort, woran es hakt. Ich habe ein Video gemacht, wenn das jemand sehen möchte, verschicke ich das per Mail. Sind ca. 80MB


Code:
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#include <ADXL345.h>

// OLED display TWI address
#define OLED_ADDR   0x3C

Adafruit_SSD1306 display(-1);
ADXL345 adxl;       // variable adxl is an instance of the ADXL345 library


const int buttonPin1 = 2;       // Chord depth increase
int buttonState1 = 0;           // variable for reading the pushbutton status
const int buttonPin2 = 4;       // Zero angle and throw
int buttonState2 = 0;           // variable for reading the pushbutton status

int count = 1;      // Start chord depth [mm]

int x, y, z;
float xg, yg, zg;
float soh;
float tilt;
int angle;
float rad;
int up;             // 1 -> up, 2 -> down
int relative;       // for zeroing

//uint16_t degree[8]  = {140, 146, 146, 140, 128, 128, 128, 128};      // °
//uint16_t arrowup[8]  = {132, 142, 132, 132, 132, 128, 128, 128};     // Arrow up
//uint16_t arrowdown[8]  = {128, 128, 128, 132, 132, 132, 142, 132,};  // Arrow down

void setup() {
  // initialize and clear display
  display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
  display.clearDisplay();
  display.display();
  
  pinMode(buttonPin1, INPUT);
  pinMode(buttonPin2, INPUT);


  // display a pixel in each corner of the screen
  //display.drawPixel(0, 0, WHITE); //links oben
  //display.drawPixel(127, 0, WHITE); //rechts oben
  //display.drawPixel(0, 63, WHITE); //links unten
 // display.drawPixel(127, 63, WHITE); //rechts unten

  
}

void loop() {
   // 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();
  
  // read the state of the pushbutton value:
  buttonState1 = digitalRead(buttonPin1);
  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState1 == HIGH) {
    count = count + 1;    
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor (0, 0);           // oben links
  display.clearDisplay();
  display.println("Rudertiefe:");
  display.display();
  
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor (70, 0); 
  display.println(count);
  display.display();
  
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor (90, 0);
  display.println("mm");
  display.display();
  delay(100);
  }
   else {
  // read the state of the pushbutton value:
  buttonState2 = digitalRead(buttonPin2);
  // check if the pushbutton is pressed.
  // if it is, the buttonState2 is HIGH:
  if (buttonState2 == HIGH) {
    relative = angle;
  }
  adxl.readAccel(&x, &y, &z);   //read the accelerometer values and store them in variables  x,y,z
  xg = x * 0.0039;
  yg = y * 0.0039;
  zg = z * 0.0039;
  soh = yg / zg;
  tilt = atan(soh) * 57.296;
  angle = int(tilt) * -1;
  display.setCursor (50, 20);         
  display.clearDisplay();
  display.display();
  if ((angle - relative) > 0) {
    up = 1;
  }
  else {
    up = 2;
  }
  if ((angle - relative) == 0) {
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor (10, 0); 
  display.println("Winkel:");
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor (70, 0); 
  display.println(abs(angle - relative));display.write(byte(0));
  display.display();
  }
  else {  
  display.setTextSize(2);
  display.setTextColor(WHITE); 
  display.setCursor (0, 0); 
  display.println("Winkel:");
  
  display.setTextSize(2);
  display.setTextColor(WHITE); 
  display.setCursor (85, 0);
  display.println(abs(angle - relative));
  display.write(byte(0));
  display.write(byte(up));
  
  display.display();
}
  rad = abs(angle - relative) * 0.017453;
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor (0, 30);
  display.println("Weg:");display.print(int(count * sin(rad)));
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor (65, 30);
  display.println("mm");
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor (80, 30);
  display.println(" (");
  
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor (10, 30);
  display.println(count);
  
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor (110, 30);
  display.println(")");
  display.display();
  delay(100);
  }


}
 

kalle123

User
https://forum.arduino.cc/index.php?topic=159851.0Hallo Stefan.

Lad das Video doch bei youtube hoch und poste den Link.

Ist am einfachsten ....

Wegen der I2C Probleme bei dir.

Die Zeile hattest du gesehen !?

Code:
LiquidCrystal_I2C  lcd(0x3F, 2, 1, 0, 4, 5, 6, 7); // PCF8754 - 0x27, PCF8754A - 0x3F !

Die werden mit zwei unterschiedlichen ICs ausgeliefert und haben unterschiedliche Adressen

und die LCD1602, absolut unproblematisch.

Gruß KH"I2C 0.96" 128*64 OLED display

PS. Hab gerade hier mal in meinen Kistchen gekramt. Da findet sich noch so ein OLED Display. "I2C 0.96" 128*64 OLED display"

https://forum.arduino.cc/index.php?topic=159851.0
 

stefan1

User
Hallo Kalle,

das Display(der Adapter) hat die Adresse 0x27, ermittelt mit einem Scanner. Bei mir funktionierte das gar nicht,
habe zwei verschiedene Adapter und auch zwei verschiedene Displays ausprobiert in den verschiedenen Kombinationen,
habe es nicht zum Anzeigen gebracht. Das Display initialisierte, das heißt, ich konnte die Balkenreihe sehen, das war aber
auch schon alles. Das Oled-Display funktioniert soweit, bis auf wahrscheinlich Kleinigkeiten. Ich habe noch komische
Zeichen im Display, die Aufteilung klappt noch nicht sehr gut. Ablesen lässt sich das Display sehr gut,auch wenn es so
klein ist. Wenn du so eins hast, lade doch mal den Code und schau dir an,was es rausschmeißt.
Hier ist der Link zu dem Video: https://youtu.be/zd2ejwgwEbI
 

kalle123

User
Stefan , du hast das CRIUS v1.2, ich hier noch das v1.0.

Erst mal, dein sketch kompiliert einwandfrei, nur ich muss mein OLED wohl noch modifizieren. :rolleyes:

Das v1.0 ist so, wie es ist, "buggy".

Crius co-16 corrected.png

ekY7ulVl.png


Werde jetzt mal den Lötkolben an schmeissen, mal schaun, ob ich das hin kriege.

Gruß KH
 
Ansicht hell / dunkel umschalten
Oben Unten