Wie kann ich Temperatur und Feuchtigkeit Sensor und den Drucksensor des Nano 33BLE Rev2 in einem Programm gleichzeitig nutzen
Zeige doch mal einen Link deiner verwendeten Sensor.
Dann können wir evtl. schreiben ob und wie es funktionieren kann.
Solange wir nicht wissen, was du einsetzen möchtest, können wir nur raten.
Und das wird dir wohl nicht helfen.
Bei den Sensoren werden folgende Bibliotheken verwendet:
Temperatur und Feuchtigkeit: Arduino HST221 und beim Druck:
Arduino LPS22HB
Hier ein Codeschnipsel:
#include <Arduino_LPS22HB.h>
#include <Arduino_HTS221.h>
//local height above sealevel
float height = 408; // meine Höhe am Standort
void setup() {
Serial.begin(9600);
while (!Serial);
}
void loop() {
// Start pressure sebsor
if (!BARO.begin()) {
Serial.println("Failed to initialize pressure sensor!");
while (1);
}
// read the sensor value from pressure sensor
float pressure = BARO.readPressure();
//print the pressure
Serial.print("Pressure is ");
Serial.print(pressure);
Serial.print(" kPa in ");
Serial.print(height);
Serial.println(" m");
BARO.end();
//intialize humidity temperatur sensor
if (!HTS.begin()) {
Serial.println("Failed to initialize humidity temperature sensor!");
while (1);
}
float temperature = HTS.readTemperature();
float humidity = HTS.readHumidity();
// print the temperature
Serial.print("Temperature is ");
Serial.print(temperature);
Serial.println(" °C");
// print Humidity
Serial.print("Humidity is ");
Serial.print(humidity);
Serial.println(" %");
//calculate Pressure at Sealevel
HTS.end();
// print an empty line
Serial.println();
// wait 1 second to print again
delay(5000);
}
Beim Einschalten des Sensors für Temperatur und Feuchtigkeit bekomme ich die Meldung der
Sensor wäre nicht aktivierbar
Wie kann ich das ermöglichen?
Es fehlt dann noch die Umrechnung des aktuellen Druckes mit der Temperatur auf den Druck bei
Meereshöhe
vy73 de DF9TW
Thomas
Es handelt sich um die auf dem Arduino nano 33 BLE Rev2 verbauten Sensoren
Der Druck Sensor ist der LPS22HB https://content.arduino.cc/assets/Nano_BLE_Sense_lps22hb.pdf und der
Temperatur und Feuchtigkeitssensor ist der HTS221 https://content.arduino.cc/assets/Nano_BLE_Sense_HTS221.pdf
Die beiden Beispielprogramme bei der Dokumentation des Nano 33 BLE laufen. Da wird aber jeder Sensor alleine abgefragt. Ich möchte aber die gemessene Temperatur benutzen um den Druck an meinem Standort mit Hilfe der barometrischen Höhenformel auf Meeresniveau umzurechnen, dazu brauche ich beide Sensoren in einem Programm und das hab ich noch nicht hingekriegt
vy73 de DF9TW
Thomas
Hallo OM df9tw
Schnapp dir die passenden Tutorials zu den Sensoren und spiele diese durch. Wenn alle Tutorial laufen, dann kannst du diese zum Gesamtprojekt zusammenlöten.
73
Das Problem liegt daran, wenn der eine Sensor wie in den Beispielen beschrieben verwendet wird kann der zweite so nicht initialisiert werden. Darum meine Frage die die Beispiele nicht beantworten ist wie lassen sich beide Sensoren gleichzeitig abfragen
Kannst du bitte auch die genaue Meldung posten.
Und setze deinen Sketch bitte in Code-Tags, dann ist der besser lesbar.
In der IDE mit rechter Maustaste für Forum kopieren und anschließend hier einfügen.
/*
LPS22HB - Read Pressure Temperature and Humidity
This example reads data from the on-board LPS22HB sensor of the Nano 33 BLE Sense,
converts the atmospheric pressure sensor values to pressure at sea level,
and prints them to the Serial Monitor every 5 second.
The circuit:
- Arduino Nano 33 BLE Sense
This example code is in the public domain.
*/
#include <Arduino_LPS22HB.h>
#include <Arduino_HTS221.h>
//local height above sealevel
float height = 408; // meine Höhe am Standort
void setup() {
Serial.begin(9600);
while (!Serial);
// Start pressure sensor
if (!BARO.begin()) {
Serial.println("Failed to initialize pressure sensor!");
while (1);
}
//intialize humidity temperatur sensor
if (!HTS.begin()) {
Serial.println("Failed to initialize humidity temperature sensor!");
while (1);
}
}
void loop() {
// read the sensor value from pressure sensor
float pressure = BARO.readPressure();
//print the pressure
Serial.print("Pressure is ");
Serial.print(pressure);
Serial.print(" kPa in ");
Serial.print(height);
Serial.println(" m");
// float altitude = 44330 * ( 1 - pow(pressure/101.325, 1/5.255) );
float temperature = HTS.readTemperature();
float humidity = HTS.readHumidity();
// print te temperature
Serial.print("Temperature is ");
Serial.print(temperature);
Serial.println(" °C");
// print Humidity
Serial.print("Humidity is ");
Serial.print(humidity);
Serial.println(" %");
//calculate Pressure at Sealevel
HTS.end();
// print an empty line
Serial.println();
// wait 5 second to print again
delay(5000);
}n
Das Programm stoppt bei der Ausführung schon im Setup Teil mit der Meldung:
"Failed to initialize humidity temperature sensor!"
Ich nehme an die Sensoren werden über eine Serielle Leitung abgefragt und das geht so nicht. Ich finde in der Doku für den Nano 33 BLE Rev2 aber kein Beispiel wie das für mehr als ein Sensor nacheinander geschehen kann
vy 73 de DF9TW, Thomas
Was ich erkennen kann, werden die Sensoren richtig angesprochen.
Ich habe den Nano 33 BLE nicht und der wird hier auch rel. selten verwendet.
Evtl. fragst du im englishen Teil des Forum mal nach.
Du musst doch wissen, wo Du sie angeschlossen hast. Wieso nimmst Du da an?
Verwendest Du den nackten Sensor oder ein Modul? Dann wäre der Link zum Modul sinnvoller.
Gruß Tommy
Edit: Druck und Temperatur kann der LBS22HB auch allein. Beispiel
So wie ich es verstehe, sind die Sensoren fest verbaut.
Edit:
Was mir aber grad aufgefallen ist, dem TO (@df9tw) fehlt die
"BARO.end()"
Anweisung im Sketch.
Ok das ist ne Lösung, aber um die Luftfeuchtigkeit zu bestimmen brauche ich den HTS221 und den gleichzeitig mit dem LPS22HB auszulesen ist mir bisher nicht gelungen. Beide Sensoren sind auf dem Nano Board fest verbaut.
Beide Libs initialisieren Wire. Als Versuch:
kommentiere mal die Zeile 49 in der HTS.cpp aus:
// _wire->begin();
Ist nur als Idee, ich kann es nicht testen. Beide Libs gehen von I2C aus. Wie es auf Deinem Modul real angeschlossen ist, wissen wir nicht.
Gruß Tommy
Macht das nicht der Compiler eh schon ?
Zudem sollte der TO auch auf gegebene Hinweise reagieren. ![]()
Warum sollte er das tun?
Gruß Tommy
Weil er erkennt, das zwei identische initialisierungen vorhanden sind und damit eine unnötig ist.
Ich habe selbst die wire.h schon includiert obwohl das in einer Library vorhanden ist.
Es hat zumindest nicht gestört, also keine Fehlermeldung erzeugt und auch funktioniert.
Daher die Vermutung
Es geht hier aber nicht ums Includieren, sondern um einen Funktions-/Methodenaufruf. ( _wire->begin();). Dann müsste ja nach Deiner Betrachtung der Compiler jeden weiteren Aufruf einer Funktion/Methode weg optimieren, was er zum Glück nicht tut, denn dann wären Funktionen/Methoden sinnlos.
Gruß Tommy
Das habe ich so nicht gesagt.
Nur wenn er doppelt bzw. überflüssig ist.
Aber ok...ich habe es nicht gelernt und bin über alles was ich dazu lerne auch dankbar.
Das kann bei Aufrufen (es sei denn die Funktion/Methode hat keinen Inhalt) vom Compiler nicht entschieden werden.
Ansonsten hast Du #include mit Aufruf verwechselt.
Gruß Tommy
Vielen Dank an alle für die Infos und Ideen
Problem ist gelöst habe nur zu kompliziert gedacht
Hier der funktionierende Code
"
/*
LPS22HB - Read Pressure
HS300x. - Read Temperature and Humidity
This example reads data from the on-board LPS22HB sensor of the Nano 33 BLE Sense Rev2,
converts the atmospheric pressure sensor values to pressure at sea level, and reads the
temperature and humidity from HS300x sensor
and prints them to the Serial Monitor every 5 second.
The circuit:
- Arduino Nano 33 BLE Sense Rev2
This example code is in the public domain.
*/
#include <Arduino_LPS22HB.h>
#include <Arduino_HS300x.h>
//local altitude above sealevel
float myalt = 408; // my altitude at home
void setup() {
Serial.begin(9600);
while (!Serial);
// Check if pressure sensor is started
if (!BARO.begin()) {
Serial.println("Failed to initialize pressure sensor!");
while (1);
}
// Check if Temperature and Humidity sensor is started
if (!HS300x.begin()) {
Serial.println("Failed to initialize humidity temperature sensor!");
while (1);
}
}
void loop() {
// read the sensor value from pressure sensor in hPa
float pressure = BARO.readPressure() * 10;
//print the pressure
Serial.print("Pressure is ");
Serial.print(pressure);
Serial.print(" hPa at ");
Serial.print(myalt);
Serial.println(" m");
// float temperature = BARO.readTemperature();
float temperature = HS300x.readTemperature();
// print te temperature
Serial.print("Temperature is ");
Serial.print(temperature);
Serial.println(" °C");
//calculate Temperature at sealevel
float temp0 = (temperature + 273.15) + (0.0065 * myalt);
//calculate pressure at sealevel
float temph = temperature + 273.15;
float press0 = pressure * pow(temph/temp0, -5.225);
//print pressure at sealevel
Serial.print("Pressure is ");
Serial.print(press0);
Serial.print(" hPa ");
Serial.println("at sealevel");
//calculate altitude with the pressure at sealevel
float altitude = 44330 * ( 1 - pow(pressure/press0, 1/5.255) );
//print calculated altitude
Serial.print("alt. calc is ");
Serial.print(altitude);
Serial.println(" m");
float humidity = HS300x.readHumidity();
// print humidity
Serial.print("Humidity ");
Serial.print(humidity);
Serial.println(" %");
// print an empty line
Serial.println();
// wait 5 second to print again
delay(5000);
}
"