Luftdrucksensor LPS25H

Gepostet von am 7. März 2018, 07:02

Der Luftdruck gibt Aufschluss über das zukünftige Wettergeschehen. Außerdem kann er zum Messen der Meereshöhe verwendet werden. Mittlerweile gibt es günstige MEMS-Sensoren, mit denen der Luftdruck einfach gemessen werden kann. Einer davon ist der LPS25H von ST.

LPS25H von ST

Der LPS25H von ST ist ein Sensor, der den absoluten Luftdruck im Bereich von 260 -1260 hPA (bzw. mbar) messen kann. Außerdem ist im gleichen Gehäuse noch ein Temperatursensor verbaut, der ebenfalls ausgelesen werden kann.

Der Sensor kann über I2C oder SPI angesteuert und ausgelesen werden. Wir beschränken uns hier auf die Ansteuerung über I2C.

Der elektrische Anschluss ist sehr einfach. Er benötigt nur einen zusätzlichen 100 nF Filterkondensator.

Auslesen über I2C

Der HTS221 hat die I2C-Adresse 0×5c. Bevor der Sensor Werte liefert, muss man ihn aktivieren und zum Beispiel in einen continous mode mit einer Update-Rate von 1 Hz setzen. Dies geschieht, indem man den Wert 0×90 in das Register 0×20 schreibt. Außerdem kann man den resolution mode im Register 0×10 ändern.

Die gelieferten Messwerte muss man auch bei diesem Sensor umrechnen, allerdings geht das mit sehr einfachen Formeln. Weitere Kalibrierungswerte muss man nicht auslesen.

temp=42.5+(float)temp_out/480.0;
pressure=42.5+(float)press_out/4096.0;

Programm zum Auslesen des Sensors

Hier ist ein Programm, mit dem man den Sensor auf einem Raspberry Pi oder BeagleBone auslesen kann.

#include <stdio.h>
#include <stdlib.h>
#include <linux/i2c-dev.h>
#include <fcntl.h>
#include <unistd.h>

int main(void)
{
	int file;
	int addr=0x5c;		// adress of LPS25H
	char a=0;

	signed short int temp_out=0; // output registers
	int press_out=0;

	float temp;	// calculated values for temperature and pressure
	float pressure;

	printf("LPS25H\n");
	if((file=open("/dev/i2c-1",O_RDWR))<0)	// open i2c-bus
	{
		perror("cannot open i2c-1");
		exit(1);
	}
	if(ioctl(file, I2C_SLAVE, addr)<0)	// open slave
	{
		perror("cannot open slave address");
		exit(1);
	}

	a=i2c_smbus_read_byte_data(file,0x0f);	// read WHO_AM_I
	printf("WHO_AM_I:     %02X\n",a);
	i2c_smbus_write_byte_data(file,0x10,0x05);	// setting resolution mode
	a=i2c_smbus_read_byte_data(file,0x10);	// read RES_CONF
	printf("RES_CONF:     %02X\n",a);
	a=i2c_smbus_read_byte_data(file,0x20);	// read CTRL_REG1
	printf("CTRL_REG1:    %02X\n",a);
	if(a!=0x90)	// check if device active
	{
		printf("setting device to active and continous mode\n");
		i2c_smbus_write_byte_data(file,0x20,0x90);	// setting device to active and 1 hz update rate
		a=i2c_smbus_read_byte_data(file,0x20);	// read CTRL_REG1
		printf("CTRL_REG1:    %02X\n",a);
	}
	a=i2c_smbus_read_byte_data(file,0x27);	// read STATUS_REG
	printf("STATUS_REG:   %02X\n",a);

	temp_out=i2c_smbus_read_word_data(file, 0xab);	// read TEMP_OUT
	printf("TEMP_OUT:    0x%04X = %i\n",(unsigned short)temp_out,temp_out);
	press_out=i2c_smbus_read_word_data(file, 0xa9)<<16;	// read PRESS_OUT high 16 bit
	press_out|=i2c_smbus_read_word_data(file, 0x28)<<8;	// read PRESS_OUT lowest 8 bit
	press_out/=256;		// align data correct
	printf("PRESS_OUT:   0x%08X = %i\n",(unsigned)press_out,press_out);

	temp=42.5+(float)temp_out/480.0;	// calculate actual temperature value
	printf("temp = %f C\n",temp);

	pressure=42.5+(float)press_out/4096.0;	// calculate actual pressure value
	printf("pressure = %f hPa\n",pressure);

	close(file);

	return 0;
}

Bei mir wurden dann folgende Werte ausgelesen:

Werte vom LPS25H

Verfügbarkeit und Evalboards.

Der LPS25H ist auf dem Sense HAT von Raspberry Pi verbaut. Außerdem ist der Sensor auf dem Motion MEMS and environmental sensor expansion board for STM32 Nucleo von ST verbaut, allerdings nur auf der ersten Version: X-NUCLEO-IKS01A1

Probleme

Bei meinen Versuchen mit je einem Sensor an einem Raspberry Pi und einem ESP8266 lieferten die Sensoren Werte, die etwa 40 hPa zu hoch waren. Den Grund dafür habe ich noch nicht gefunden. Über Kommentare dazu würde ich mich freuen.


Kategorien ,

Stichworte LPS25H,Luftdruck,Temperatur,Raspberry Pi,Sense HAT,I2C,MEMS,Sensor


Kommentare

Kommentarfunktion für diesen Artikel geschlossen.