Page 1 of 3

Z-Uno: Probleme mit Luftdrucksensor BMP180

Posted: 27 Mar 2017 09:50
by knobbas
Hallo zusammen,
hat jemand schon einen Z-Uno mit BMP180 in Betrieb ?

Ich wollte mir einen Außensensor mit BMP180 (Luftdruck), BH1750 (Lichtstärke) und AM2320 (Temp/Luftfeuchte) bauen.
Allerdings stürzt mir der Z-Uno immer wieder mal ab und bleibt während der Luftdruckmessung stehen. Kompletter Freeze - da hilft dann nur noch ein Reset.
Ich habe eine Zeit lang gebraucht um den Fehler einigermaßen einzugrenzen.
Es passiert definitiv während der Abfrage des Luftdrucks. Auch werden gelegentlich viel zu hohe/niedrige Luftdruckwerte ausgegeben.
Für den AM2320 und dem BMP180 habe ich die ZUNO Librarys benutzt, den BH1750 frage ich ohne Library ab, da die sich irgendwie mit der BMP180 Library nicht verträgt.
Der Z-Uno stürzt auch ab, wenn ich nur den BMP180 dran habe.
Auf einem Arduino Nano läuft hingegen alles Problemlos mit den selben Sensoren. Dass ein Sensor defekt ist glaube ich also nicht. Habe mir aber trotzdem mal neue BMP180 und BMP280 bestellt.

Hat schon jemand Erfahrungen damit oder einen Hinweis woran es liegen könnte ?

Re: Z-Uno: Probleme mit Luftdrucksensor BMP180

Posted: 07 Apr 2017 22:19
by michap
Gibt es die Probleme noch?
Bei mir funktioniert es... Sorry. War lange nicht im deutschen Forum... :(

Michael

Re: Z-Uno: Probleme mit Luftdrucksensor BMP180

Posted: 08 Apr 2017 10:36
by knobbas
Hallo Michael,
ja, das Problem habe ich noch. Ich warte gerade noch auf die Lieferung der neuen Sensoren vom Chinamann :-)
Mal sehen wie es dann mit nem neuen BMP180 läuft (alternativ dann auch zum Testen mit dem BMP280).
Ich werde auf jeden Fall berichten was dabei herauskommt.
Welche Kombination von Sensoren hast du denn in Betrieb? Könntest du mir vielleicht mal deinen Sketch zukommen lassen?
Wäre toll wenn ich das zum laufen bekomme. Aktuell hängen die Sensoren direkt mit 3m Kabel am Raspberry, das gefällt mir nicht und mit der Positionierung ist das auch so eine Sache ...

Oliver

EDIT:

Hier mal mein Sketch (nur BMP180), da stürzt der Z-Uno hin und wieder bei "bmp.readPressure();" ab

Code: Select all

#include <Wire.h>
#include <ZUNO_BMP180.h>
#include <math.h>

long pressureSend;
word temperatureSend;
int alt = 344;

ZUNO_BMP180 bmp;

// set up channel
ZUNO_SETUP_CHANNELS(
      ZUNO_SENSOR_MULTILEVEL(ZUNO_SENSOR_MULTILEVEL_TYPE_BAROMETRIC_PRESSURE,
                             SENSOR_MULTILEVEL_SCALE_KILOPASCAL,
                             SENSOR_MULTILEVEL_SIZE_FOUR_BYTES, 
                             SENSOR_MULTILEVEL_PRECISION_TWO_DECIMALS, 
                             getterPressure),
      ZUNO_SENSOR_MULTILEVEL(ZUNO_SENSOR_MULTILEVEL_TYPE_TEMPERATURE,
                             SENSOR_MULTILEVEL_SCALE_CELSIUS,  
                             SENSOR_MULTILEVEL_SIZE_TWO_BYTES, 
                             SENSOR_MULTILEVEL_PRECISION_ONE_DECIMAL, 
                             getterTemp)                            
);

ZUNO_SETUP_SLEEPING_MODE(ZUNO_SLEEPING_MODE_SLEEPING); // SLEEPING MODE

void setup() {
  bmp.begin();
}
  
void loop() {
  delay(1000);
  // Auslesen BMP180 I2C
    float temperature = bmp.readTemperature();
    temperatureSend = word(temperature*10);
    zunoSendReport(2);
    
    // Calculate Pressure at Sea level with given altitude
    float pressure = bmp.readPressure();
    float pressureSea = (pressure / pow(1.0 - alt/44330.0, 5.255)/100);
    pressureSend = long(pressureSea*100);
    zunoSendReport(1);

  zunoSendDeviceToSleep();
}


long getterPressure() {
  return pressureSend;
}

word getterTemp() {
  return temperatureSend;
}

Und hier der Sketch mit allen Sensoren:

Code: Select all

#include <Wire.h>
#include <ZUNO_BMP180.h>
#include <ZUNO_AM2320.h>
int BH1750address = 0x23; //setting i2c address

byte buff[2];

long lightLux;
long pressureSend;
word temperatureSend;
word temperatureAM2320Send;
word humidityAM2320Send;
int alt = 344;

ZUNO_BMP180 bmp;
AM2320 am2320;

#define BMP180_DEBUG 1

// set up channel
ZUNO_SETUP_CHANNELS(
      ZUNO_SENSOR_MULTILEVEL(ZUNO_SENSOR_MULTILEVEL_TYPE_LUMINANCE,
                             SENSOR_MULTILEVEL_SCALE_LUX,  
                             SENSOR_MULTILEVEL_SIZE_FOUR_BYTES, 
                             SENSOR_MULTILEVEL_PRECISION_ZERO_DECIMALS, 
                             getterLight),
      ZUNO_SENSOR_MULTILEVEL(ZUNO_SENSOR_MULTILEVEL_TYPE_BAROMETRIC_PRESSURE,
                             SENSOR_MULTILEVEL_SCALE_KILOPASCAL,
                             SENSOR_MULTILEVEL_SIZE_FOUR_BYTES, 
                             SENSOR_MULTILEVEL_PRECISION_TWO_DECIMALS, 
                             getterPressure),
      ZUNO_SENSOR_MULTILEVEL(ZUNO_SENSOR_MULTILEVEL_TYPE_TEMPERATURE,
                             SENSOR_MULTILEVEL_SCALE_CELSIUS,  
                             SENSOR_MULTILEVEL_SIZE_TWO_BYTES, 
                             SENSOR_MULTILEVEL_PRECISION_ONE_DECIMAL, 
                             getterTemp),
      ZUNO_SENSOR_MULTILEVEL(ZUNO_SENSOR_MULTILEVEL_TYPE_TEMPERATURE,
                             SENSOR_MULTILEVEL_SCALE_CELSIUS,  
                             SENSOR_MULTILEVEL_SIZE_TWO_BYTES, 
                             SENSOR_MULTILEVEL_PRECISION_ONE_DECIMAL, 
                             getterTempAM2320),
      ZUNO_SENSOR_MULTILEVEL(ZUNO_SENSOR_MULTILEVEL_TYPE_RELATIVE_HUMIDITY,
                             SENSOR_MULTILEVEL_SCALE_PERCENTAGE_VALUE,  
                             SENSOR_MULTILEVEL_SIZE_TWO_BYTES, 
                             SENSOR_MULTILEVEL_PRECISION_ONE_DECIMAL, 
                             getterHumAM2320)                             
);

//ZUNO_SETUP_SLEEPING_MODE(ZUNO_SLEEPING_MODE_SLEEPING); // SLEEPING MODE
//ZUNO_SETUP_SLEEPING_MODE(ZUNO_SLEEPING_MODE_FREQUENTLY_AWAKE);
  
void setup() {
  Serial.begin(9600);
  Wire.begin();
  am2320.begin();
  if (!bmp.begin()) {
  Serial.println("Could not find a valid BMP180 sensor, check wiring!");
  }
}
  
void loop() {

  delay(1000);
  
  // Auslesen BMP180 I2C
    // Get Temperature
    Serial.print("Temperature = ");
    Serial.print(bmp.readTemperature());
    Serial.print(" *C / ");
        
    // Get Pressure
    Serial.print("Pressure = ");
    Serial.print(bmp.readPressure());
    Serial.print(" Pa / ");

    Serial.print("RealPressure = "); Serial.print((bmp.readPressure() / pow(1.0 - alt/44330.0, 5.255))/100); Serial.print(" hPa / ");  
    

  //Serial.println("Start Messument BM1750");
  // Auslesen BH1750 I2C
    uint16_t val=0;
    BH1750_Init(BH1750address);
    delay(200);
  
    if(2==BH1750_Read(BH1750address))
    {
      val=((buff[0]<<8)|buff[1])/1.2;
      val=val+1;
      lightLux = val;
    }
    Serial.print(lightLux); Serial.print(" Lux / ");

  //Serial.println("Start Messument AM2320");
  // Auslesen AM2320 I2C
    float temp = am2320.getTemperature();
    temperatureAM2320Send = word(temp*10);
    Serial.print(temp); Serial.print(" C / ");

    float hum = am2320.getHumidity();
    humidityAM2320Send = word(hum*10);
    Serial.print(hum);  Serial.println(" %");

  //Serial.println("--------------------");

  /*
  zunoSendReport(1);
  zunoSendReport(2);
  zunoSendReport(3);
  zunoSendReport(4);
  zunoSendReport(5);
  */
  delay(2000);
  //zunoSendDeviceToSleep();
}

int BH1750_Read(int address) //
{
  int i=0;

  Wire.requestFrom(address, 2);
  while(Wire.available()) //
  {
    buff[i] = Wire.read();  // receive one byte
    i++;
  }

  return i;
}

void BH1750_Init(int address)
{
  Wire.beginTransmission(address);
  Wire.write(0x10);//1lx reolution 120ms
  Wire.endTransmission();
} 


long getterLight() {
  return lightLux;
}

long getterPressure() {
  return pressureSend;
}

word getterTemp() {
  return temperatureSend;
}

word getterTempAM2320() {
  return temperatureAM2320Send;
}

word getterHumAM2320() {
  return humidityAM2320Send;
}
Sorry, wenn die Sketches ein wenig wild aussehen. Ich habe einige Codeschnipsel verwendet und immer wieder hin und her umgebaut um die Ursache für den Absturz einzugrenzen.

Re: Z-Uno: Probleme mit Luftdrucksensor BMP180

Posted: 08 Apr 2017 13:56
by michap
Probier mal das hier aus - geht immernoch - habe es gerade mit der Firmware 2.0.9 probiert.
viewtopic.php?f=3427&t=24195&p=65902#p65902

Die Firmware sollte man natürlich immer mal updaten ;)

Michael

Re: Z-Uno: Probleme mit Luftdrucksensor BMP180

Posted: 09 Apr 2017 18:12
by knobbas
Hi Michael,
erst mal Danke für die Infos. Den Thread mit dem BMP280 habe ich bereits gefunden.
Die Firmware hab ich mal von 2.0.8 auf 2.0.9 updated.

Ich muss leider noch warten, mein BMP280 ist noch nicht angekommen. Aber der Chinamann war in der Vergangenheit immer recht zuverlässig :-)

Re: Z-Uno: Probleme mit Luftdrucksensor BMP180

Posted: 09 Apr 2017 20:48
by michap
Die Lib geht auch mit dem BMP180 - sei erkennt automatisch den Sensor ;)

Michael

Re: Z-Uno: Probleme mit Luftdrucksensor BMP180

Posted: 10 Apr 2017 10:25
by knobbas
Ah, ok :-)

Hab die Lib jetzt mal verwendet. Mit dem Ergebnis bin ich allerdings noch nicht wirklich zufrieden.
Muss mich da heute Abend nochmal näher damit auseinander setzen. Bis dahin darf der Z-Uno mal laufen. Mal gucken ob er wieder abschmiert. Die falschen Messwerte sind da ja erst mal irrelevant :-)

Code: Select all

result1
Sensor TypeBMP 280
ChipID 85
Temperature getTemp:-11808.00
-118.08 C
Pressure    getPressure:35743
357 hPa
----------
result1
Sensor TypeBMP 280
ChipID 85
Temperature getTemp:-11808.00
-118.08 C
Pressure    getPressure:36115
361 hPa
----------
result1
Sensor TypeBMP 280
ChipID 85
Temperature getTemp:-11808.00
-118.08 C
Pressure    getPressure:35743
357 hPa
----------

Re: Z-Uno: Probleme mit Luftdrucksensor BMP180

Posted: 10 Apr 2017 10:34
by michap
Sorry,.... *lesen* müsste man können...
Hab' Dich in die Wüste geschickt.

Meine Lib kann nur BMP/BME 280 - nicht 180.

Ich schau heute abend mal - eine funktionierende 180er Lib hatte ich auch irgendwo.

Michael

Re: Z-Uno: Probleme mit Luftdrucksensor BMP180

Posted: 10 Apr 2017 11:10
by knobbas
Macht nichts, der neue Sensor kommt bestimmt die nächsten Tage ;-)

Mach dir kein Stress deswegen :-)

Re: Z-Uno: Probleme mit Luftdrucksensor BMP180

Posted: 12 Apr 2017 17:46
by knobbas
So, kurzer Zwischenbericht.
Der Chinamann hat geliefert. Mit dem BMP280 scheint es jetzt zu laufen.
Mal sehen ob das so bleibt :-)
Nur mit der Stromversorgung bin ich mir noch nicht ganz schlüssig. Momentan hab ich 2x 1,5V AAA dran. Glaub für den Dauerbetrieb wird das nicht ausreichen, da der AM2320 schon 3.1V als Minimum verlangt. Aber mal abwarten ...

Zur Not versuch ich es dann mal mit nem 9V Block oder 2x AAA + DC Step-up Converter. Allerdings befürchte ich, dass der StepUp einen zu hohen Leerlaufstrom zieht ...