- 3D-Druck Einstieg und Tipps         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 20 von 20

Thema: Wasserwaage

  1. #11
    Benutzer Stammmitglied
    Registriert seit
    03.10.2007
    Beiträge
    68
    Anzeige

    E-Bike
    Hey,

    @BMS, ja so was hatte ich gedacht.

    Der Nunchuck würde verm. auch gehen. Aber hat der nicht analoge Ausgänge.

    Ehrlich gesagt hatte ich gehofft, sowas schon in annähernd fertig zu bekommen.

    Das Problem ist die Messung findet ca. 5-8m entfernt statt.
    Zuerst hatte ich angedacht einen kleinen AVR mit der Messung zu betrauen
    und dessen Werte dann an einen weiteren AVR mit Anzeige und Umrechnung zu senden.

    Da die Module ja I2C haben sollte das aber gehen ohne den ersten Controller.

    Gibt es den z.B. für den Arduino LIBs die aus den g-Werten schon Winkel berechnen.
    Ist ja für so einen 8-Bitter schon aufwendig solche trigonometrische funktionen zu berechnen.

  2. #12
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    Ich habe das mal schnell mit einem ADXL345 mit +-2g (10 Bit Auflösung) implementiert.
    Beim ADXL345 ist die Auflösung nicht besser.
    2g - 10Bit
    4g - 11Bit
    8g - 12Bit
    16g - 13Bit

    Mit einer Kreditkarte (0,75mm) unter dem Breadboard (85mm) ist die Änderung grade mal 2-3 mal so Groß wie das Sensorrauschen.
    Die "----------------" Linien sind nachträglich eingefügt.
    Erster Abschnitt, eine Seite 0,75mm erhöht
    Zweiter Abschnitt, Beim Rausziehen der Karte
    Dritter Abschnitt, Breadboard liegt eben auf dem Tisch
    (Ob der Tisch im Wasser steht habe ich nicht geprüft)
    Code:
    h = 0.75mm
    Hypotenuse = ca. 85mm
    
    6,3,251
    5,3,253
    7,3,253
    6,3,252
    6,2,252
    7,3,254
    6,3,252
    6,4,252
    6,3,252
    7,3,253
    6,3,253
    6,4,252
    6,4,252
    5,4,253
    6,5,252
    7,4,253
    7,4,253
    7,4,254
    7,4,252
    8,3,254
    6,4,252
    6,4,252
    6,3,252
    5,5,252
    6,3,252
    7,4,253
    7,3,252
    7,3,253
    6,5,252
    ------------------
    6,1,254
    10,6,252
    3,7,250
    5,16,243
    8,-4,259
    4,7,251
    13,-3,258
    -27,-27,214
    3,11,252
    4,16,252
    5,8,252
    4,2,254
    5,8,254
    5,1,251
    5,55,252
    6,5,255
    2,1,251
    1,-1,254
    3,3,252
    -------------------
    4,4,252
    5,2,252
    4,4,252
    4,3,252
    3,4,252
    4,4,253
    4,3,253
    4,3,253
    3,4,253
    3,4,253
    3,3,251
    4,4,253
    5,3,253
    4,4,252
    4,4,253
    3,4,253
    4,3,252
    5,4,252
    3,5,253
    4,4,252
    3,4,254
    3,4,253
    3,3,253
    4,3,253
    2,4,252
    4,3,252
    Damit wäre eine maximale Auflösung von 3-4mm auf 1 Meter möglich (nahe der Waagerechten).
    Klicke auf die Grafik für eine größere Ansicht

Name:	ADXL345_h0.75-85.jpg
Hits:	10
Größe:	8,9 KB
ID:	32179
    Und Noch mal der Serial Plott vom Arduino.

    Und zum Nachvollziehen:
    Code:
    //Zielplatform Arduino Nano v3
    //ADXL345 Modul mit I2C 5V
    //I2C SCL ist A5 bei Arduino Nano
    //I2C SDA itt A4 bei Arduino Nano
    // http://forum.arduino.cc/index.php?topic=100287.0
    
    #include <Wire.h>
    
    byte DEVICE_ADDRESS = 0x53; //This address is fixed for the board we use because pin 12 is fixed to GND
    
    byte POWER_CTRL = 0x2D;    //Power Control Register
    // byte BW_RATE = 0x30 // Data Rate Register
    byte DATA_FORMAT = 0x31;   //Data Format & Measurement Range Register
    
    
    byte DATAX0 = 0x32;        //X-Axis Data 0
    byte DATAX1 = 0x33;        //X-Axis Data 1
    byte DATAY0 = 0x34;        //Y-Axis Data 0
    byte DATAY1 = 0x35;        //Y-Axis Data 1
    byte DATAZ0 = 0x36;        //Z-Axis Data 0
    byte DATAZ1 = 0x37;        //Z-Axis Data 1
    
    byte values[10];
    int x,y,z;
    
    unsigned long prev1micros = 0; //Blink LED time
    int togglestate = LOW; //Blink LED State
    
    void setup() {
      
    pinMode(13, OUTPUT); //Blink LED für Funktionskontrolle
    
      Wire.begin();    //Initiate the Wire library and join the I2C bus as a master. This is called only once.
      Serial.begin(9600);
    //  writeRegister(DEVICE_ADDRESS, BW_RATE, 0x1100); //Put the ADXL345 Output Datarate to 400Hz
      writeRegister(DEVICE_ADDRESS, DATA_FORMAT, 0x00); //Put the ADXL345 into +/- 2G range by writing the value 0x00 to the register.
    //  writeRegister(DEVICE_ADDRESS, DATA_FORMAT, 0x01); //Put the ADXL345 into +/- 4G range by writing the value 0x01 to the register.
    //  writeRegister(DEVICE_ADDRESS, DATA_FORMAT, 0x10); //Put the ADXL345 into +/- 8G range by writing the value 0x10 to the register.
    //  writeRegister(DEVICE_ADDRESS, DATA_FORMAT, 0x11); //Put the ADXL345 into +/- 16G range by writing the value 0x11 to the register.
      writeRegister(DEVICE_ADDRESS, POWER_CTRL, 0x08); //Put the ADXL345 into Measurement Mode by writing the value 0x08 to the register.
    
    /*
      Serial.print("Text - ");  
      readRegister(0x53, 0x32, 4, values);
      Serial.println(values[0]);
      Serial.println(values[1]);
      Serial.println(values[2]);
      Serial.println(values[3]);
    */  
    }
    
    void loop() {
      readRegister(DEVICE_ADDRESS, DATAX0, 6, values);
    
      //The ADXL345 gives 10-bit acceleration values, but they are stored as bytes (8-bits). To get the full value, two bytes must be combined for each axis.
      //The X value is stored in values[0] and values[1].
      x = ((int)values[1]<<8)|(int)values[0];
      //The Y value is stored in values[2] and values[3].
      y = ((int)values[3]<<8)|(int)values[2];
      //The Z value is stored in values[4] and values[5].
      z = ((int)values[5]<<8)|(int)values[4];
    
      //Below is an optional section, it maps the raw output to a different range.
      //  x = map(x, -150, 150, 0, 255);
      //  y = map(y, -150, 150, 0, 255);
      //  z = map(z, -150, 150, 0, 255);
      //End of optional section.
    
    
      Serial.print(x, DEC);
      Serial.print(',');
      Serial.print(y, DEC);
      Serial.print(',');
      Serial.println(z, DEC);
    //  Serial.print(',');
    //  Serial.println(millis());
     
      //Blink LED für Funktionskkontrolle
      unsigned long cur1micros = millis();
      if (cur1micros - prev1micros >= 200) {
        prev1micros = cur1micros;
        if (togglestate == LOW){
          togglestate = HIGH;
        }else{ 
          togglestate = LOW;
        }
      }  
      digitalWrite(13, togglestate);
    
    }
    
    void writeRegister(byte device, byte registerAddress, byte value) {
      Wire.beginTransmission(device);    //Start transmission to device
      Wire.write(registerAddress);       //Specify the address of the register to be written to
      Wire.write(value);                 //Send the value to be writen to the register
      Wire.endTransmission();            //End transmission
    }
    
    void readRegister(byte device, byte registerAddress, int numBytes, byte *values) {
    
      byte address = 0x80|registerAddress;
      if (numBytes > 1) address = address|0x40;
    
      Wire.beginTransmission(device);
      Wire.write(address);
      Wire.endTransmission();
    
      Wire.beginTransmission(device);    
      Wire.requestFrom(device, numBytes);  //Request 6 bytes from device
    
      int i = 0;
      while (Wire.available()) {          //Device may send less than requested
        values[i] = Wire.read();          //Receive a byte from device and put it into the buffer
        i++;
      }
      Wire.endTransmission();
    }
    Geändert von i_make_it (05.11.2016 um 08:24 Uhr)

  3. #13
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    33
    Beiträge
    1.192
    @i_make_it:
    Damit lässt sich doch schon einiges anfangen.
    Damit wäre eine maximale Auflösung von 3-4mm auf 1 Meter möglich (nahe der Waagerechten).
    Das sind etwa 0,23° (Rechnung: Winkel=arctan(4mm/1000mm) ).
    Frage an gummi_ente: Welche Genauigkeit und Auflösung sind denn notwendig?

    Und noch ein Kommentar zu I2C:
    Dieser Bus wurde von den Entwicklern nur für kurze Übertragungsstrecken entworfen,
    und war eigentlich für die Übertragung zwischen ICs auf der gleichen Platine gedacht.
    Für lange Übertragungsstrecken wird I2C störanfällig, bei 5-8 Metern würde ich es nicht einsetzen.
    Dann doch lieber die Übertragung mit zwei Arduinos, z.B. über RS232...
    Mit RS232 hat man dann auch die Option, das an einem PC auszulesen (über USB-RS232 Adapter).

    Oder wie wäre es kabellos über Bluetooth? Dafür gibt es günstige Module...

    Grüße,
    Bernhard
    Geändert von BMS (05.11.2016 um 09:08 Uhr)
    "Im Leben geht es nicht darum, gute Karten zu haben, sondern auch mit einem schlechten Blatt gut zu spielen." R.L. Stevenson

  4. #14
    Benutzer Stammmitglied
    Registriert seit
    03.10.2007
    Beiträge
    68
    i_make_it,
    toll. Danke.
    Deine Messung ergeben ja eine Genauigkeit von 4mm. 1Grad wären bei 1000mm eine Höhe von 17mm.
    Also wäre die Auflösung ja etwa 20-30 zehntel Grad.
    Was hat so eine Standardwasserwaage für eine Auflösung wenn die Libelle an den markierten Rand stößt?

    Würde man den mit I2C im Fahrzeug ( Motor läuft evtl.) so 5 -8 m überbrücken können?

  5. #15
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.687
    .. mal schnell mit einem ADXL345 mit +-2g (10 Bit Auflösung) implementiert .. Damit wäre eine maximale Auflösung von 3-4mm auf 1 Meter möglich ..
    Alle Achtung - das ist viel besser als ich für möglich gehalten hätte, da lag ich ja mit meiner Erfahrung (BMA020) reichlich neben dem Machbaren, sorry. Das dürfte auch nicht allzu weit von einer (durchschnittlich abgelesenen) Wasserwaage sein, mit der man mit guter Sorgfalt 1°/oo gerade noch ablesen kann. Wenn jetzt neben der Präzision noch die Genauigkeit stimmt dann ist das ja ne prima Lösung! Es ist halt wie so oft - probieren geht über . . . da war ja was *gg*
    Ciao sagt der JoeamBerg

  6. #16
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.09.2011
    Ort
    Hessen
    Beiträge
    707
    Hallo,

    da sollte dann eigentlich noch ein wenig mehr drin sein, es gibt mittlerweile auch günstige Beschleunigungssensoren mit 14 Bit oder 16 Bit Auflösung, sowas z.B.
    http://www.st.com/content/st_com/en/...-mki164v1.html
    hier die IC-Daten
    http://www.st.com/content/st_com/en/.../lis2hh12.html

    Es gibt auch Mikrocontrollerboards mit bereits integrierten Sensor, z.B. den Arduino 101 oder bei ARM das FRDM-K64F.

    @gummi_ente
    Ich denke im Fahrzeug bei laufendem Motor kommen bei 8m nur CAN, RS485 oder Ethernet in Frage.

    [Edit]
    Vorschläge, ohne Display und störsichere (!) Stromversorgung

    Für RS485 z.B. 2 Arduino Micro, mit Transceiver IC MAX485 an Serial1, ordentliches Kabel z.B. für Profibus.

    Für CAN z.B. zwei Teensy 3.2 mit Transceiver IC SN65HVD230, gutes CAN Kabel, z.b. Fa. Lapp.

    Für Ethernet zwei FRDM-K64F Boards (14 Bit Beschleunigungssensor on Board), ein gekreuztes Ethernetkabel.
    Geändert von Mxt (05.11.2016 um 09:56 Uhr) Grund: Vorschläge ergänzt

  7. #17
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    I2C habe ich genommen, da bei den ADXL345 Modulen die ich habe, das am schnellsten hingefrickelt war.
    Ich selbst will 6 Stück per SPI ansteuern Aber auch unter 200mm Abstand.
    Ggf. müsste man überlegen ob man einen Nano an der Meßstelle hat und über den per Zigbee, BT, etc. funken lässt.

    Dieser erste Test gibt natürlich nur eine Richtung an. man müsste schon ein ordentlichen Test mit verschiedenen Messreihen durchführen und sehen welche Enflüsse sich wie auswirken.

    Die digitalen Wasserwaagen, mit denen ich beruflich arbeite, haben 0,001mm auf 1000mm. Liegen beim Preis aber pro Stück im vierstelligen Bereich.

  8. #18
    Benutzer Stammmitglied
    Registriert seit
    03.10.2007
    Beiträge
    68
    Hey,
    ja ich denke auch Messung und Auswertung vor Ort und mittels Rs485 auf ein Anzeigemodul.

    By the way, kennt jemand den MPU 6050. Von den Daten her scheint der nicht schlecht.

    Werde mal ein paar dieser Sensoren testen und sehen was sich am besten eignet.

    Grüße
    Jürgen

  9. #19
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Wenn man es richtig macht, sollten auch 5-8m mit I2C realisierbar sein. In jedem DVI/HDMI Kabel lauft ein I2C Bus und das funktioniert millionenfach auch mit 5m Kabeln. Mir stellt sich nur die Frage, warum das nötig ist? Den Neigungswinkel kann ich doch überall messen, der Ort des Sensors spielt doch keine Rolle.

    Wenn man auf einfache Art den I2C Bus verlängern will, läßt sich der Bus auf 12V hochsetzen.

    Klicke auf die Grafik für eine größere Ansicht

Name:	LondDistanceI2C.jpg
Hits:	6
Größe:	38,3 KB
ID:	32183

    Dazu kann man den P82B96 oder den PCA9600 verwenden. Aus den 12V kann man dann leicht auch die Versorgung des Sensor machen, Das spart einem eine eine mehrfache Protokollumsetzung mit den Problemen, bis alles läuft.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  10. #20
    Benutzer Stammmitglied
    Registriert seit
    03.10.2007
    Beiträge
    68
    Hallo zusammen,
    kurzes Update. Der MPU 6050 funktioniert tadelos.
    Da man die Abtastzeit einstellen kann ist das Rauschen äußerst gering.
    Der Sensor liefert einige zusätzliche Werte (Temperatur, usw.)
    Hab den an einen Arduino abgeschlossen. Die Lib liefert dann direkt Winkel bis aufs 100stel Grad.
    Ich habe mir noch ein paar Bluetoothmodule geordert.
    Werden damit versuchen die Daten direkt aufs Handy Tablett zu senden, im Fahrerhaus.
    Was für einen App-Builder kann man dafür nutzen?

    Grüße
    Jürgen

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Elektronische Wasserwaage (2D) oder "Libelle"
    Von zackareli im Forum Sensoren / Sensorik
    Antworten: 11
    Letzter Beitrag: 07.09.2005, 21:35

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests