• .
  • Willkommen im Forum!
  • Alles beim Alten...
  • Du hast kaum etwas verpasst ;-)
  • Jetzt noch sicherer mit HTTPS
Hallo, Gast! Anmelden Registrieren


Sensor , zb Temperatur ..usw.
#21
(12.07.2018, 12:05 PM)kahlo schrieb: China hat mir ein paar BMP280 gebracht. Nun muss ich
- das erstemal mit 3,3V hantieren (der µC nimmt 3,3V oder 5V, das LCD-Display 5V, das kann ja heiter werden...)
- Datenblatt studieren
- Datentransferprotokolle wälzen

Strand ist auch eine Option...

ich hatte einfach nen nano auf 3.3 umgestrickt : die "5V" vom USB aufgetrennt und VCC mit den 3.3V , die der CH341 liefert, verbunden.
für ne reine Anzeige, erste Tests usw hatte ich die Ausgabe einfach seriell -> auf den Monitor/terminal ....  Wink
    Don't worry about getting older.  You're still gonna do dump stuff...only slower
 
Reply
#22
Ich probiere es hiermit - nach den Ferien (geht bald gleich los mit Flachland und Wasser Sonne...)

Schrank durchsucht und das gefunden:
[Bild: 2771-07.jpg]

Das Board kann vom USB-Port mit 5V laufen. Oder auch von einem 3,7V LiPo-Akku, den es auch laden kann via USB-Power. 3V für den Sensor gibt es auch, wird von einem internen Wandler im µC bereitgestellt und ist mit ein paar mA belastbar. Auf dem Board sind die 3V auch wunderbar direkt neben dem Experimentierarray herausgeführt.

Das kleine Ding wird sicher auch nützlich sein:
[Bild: 757-03.jpg]

Nun brauch ich nur noch ein praktisches LCD-Display, was I2C kann und wenig drumherum hat. Heute scheint es nur noch negative Displays mit Hintergrundbeleuchtung zu geben. Ich hätt gern das Gegenteil - positives Display ohne Beleuchtung...
 
Reply
#23
Naja nu, Beleuchtung musst du ja nicht anschliessen.

Bittesehr:

https://www.ebay.de/itm/Yellow-LCD-I2C-M...2493454719
 
Reply
#24
Ja, dick, fett, mit Beleuchtung. Dünn, leicht, ohne Licht ist nicht zu bekommen.

Aber ich hab so ein Ding da (negatives Display, blau). Probieren kann ich es ja mal...
 
Reply
#25
Ich habe dünne ohne Licht noch rumliegen, aus den 1980ern, HD44780 - braucht also noch den I2C Adapter.

Sonst:

https://www.seeedstudio.com/Tiny-I2C-Cha...-1783.html

Auswahl TME:
https://www.tme.eu/de/katalog/alphanumer...h_stock=on

https://www.ebay.de/itm/mccog21605b6w-fp...2078036929
 
Reply
#26
1602 LCD , 3.3 V , ohne backlight 
https://de.aliexpress.com/item/1pcs-Gopr...72660.html

Tongue

+5V

https://de.aliexpress.com/item/1pcs-162-...67262.html

wobei: dünn, I2C Ansteuerung...eigentlich ein OLED perfekt wäre:

https://de.aliexpress.com/item/0-91-Inch...02750.html

[Bild: HTB1DGfkthGYBuNjy0Fnq6x5lpXam.jpg]

der "standard" is natürlich am billigsten.... Blau, 5V, I2C für 1,70

https://de.aliexpress.com/item/1602-16-x...10828.html

[Bild: HTB1ICX5aL6H8KJjy0Fjq6yXepXaB.jpg?size=2...a33d399cb6]
    Don't worry about getting older.  You're still gonna do dump stuff...only slower
 
Reply
#27
Die OLEDs sind schon interessant. Kaufen, Libraries suchen zur Ansteuerung. Mal sehn.
 
Reply
#28
Brauchen halt "viel" Strom. Schöne Effekte ergeben sich, wenn man die Refreshrate soweit herunterdreht, dass es aussieht, als hätte man einen Elektronenstrahl auf Phosphor. Big Grin

Die obigen Links zu COG (chip on glas) I2C 16x2 Displays sind teilweise mit Licht und nicht dicker als das Glassubstrat.
 
Reply
#29
Ich verzweifle gerade über der Billigware aus China. Der bløde Sensor wird zwar über I2C als existierend erkannt, gibt aber nichts aus. Sowohl Registerabfragen per Hand als auch vorgefertigte Routinen für den BME280 produzieren nix oder konstante Zahlen (Nullen). Hab es mit 2 Sensoren probiert. Sowohl I2C als auch SPI.

Vielleicht war es zu billig. Leider sieht man an diesen winzigen Sensoren nicht mehr, was man da genau hat. Die Bezeichnungen darauf haben nichts mit dem Inhalt zu tun. Nur das Luftloch ist nicht an der gleichen Stelle wie bei einem originalen BME.

Muss wohl doch ein teureres Original besorgen...
 
Reply
#30
Anscheinend haben sich die Billiganbieter darauf eingeschossen, ihr Produkt mit "BME280" zu labeln, egal, was auch immer sie verkaufen. Inzwischen weiss ich, dass ich BMP280 bekommen habe. Also schon mal keine Luftfeuchtigkeit, sondern nur Druck und Temperatur.
Wahrscheinlich zum Spass der Entwickler wurde die Platine so gebaut, dass nicht die Standard-I2C-Adresse, sondern die alternative benutzt wird.

Na ja, geht jetzt.
   

Ich les grad im Datenblatt etwas über "Oversampling". Da wird mit etwas mehr Stellen hinterm Komma hantiert...
 
Reply
#31
Dann komm ich mal zu den Nachteilen dieses Sensors.

   

Die Temperaturmessung in unbewegter Luft (was ja die Regel ist) ist unheimlich träge. Das liegt anscheinend an der Konstruktion. Der Sensor sitzt auf einer dicken Platine mit viel Kupfer und dicken Beinen. So wird die Temperatur des Gesamtpaketes gemessen. Das kann schon mal 15 Minuten dauern, bis sich das eingepegelt hat. Eigentlich braucht man eine extrem dünne Platine und feinste Anschlussdrähtchen, am besten noch separat von der Aussenbeschaltung.

Die Druckmessungen sind allerdings nicht zu beanstanden - wenn ich in den Keller geh, seh ich das deutlich auf dem Display  Confused .
 
Reply
#32
Bin grad beim Software-"Oversampling" für Arme. Das geht erstaunlich gut.

Temperaturmessung auf Tausendstel Grad  Big Grin :
   

Inclusive eingebauten Delay schätze ich, dass etwa 10 Messungen pro Sekunde zusammenkommen. Das Zappeln der letzten Stelle hält sich in Grenzen.
Aufgrund der Floating point Berechnungen gibt es die Limitierung auf insgesamt 6 Stellen, da bin ich schon fast dran. Obwohl... Zehntausendstel Grad gehen dann auch Weih .
.
.
.

Test:
   

Hilft aber nicht wirklich weiter  Wink .

Der Arduino-Code:
Code:
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#include <LiquidCrystal.h>

float temperature = 20.0;
float pressure = 100000.0;
float tempCorrection = -0.5; // absolute sensor error correction

Adafruit_BMP280 bme; // I2C

const int rs = 5, en = 6, d4 = 9, d5 = 10, d6 = 11, d7 = 12; // Arduino pin connection
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {

 lcd.begin(16, 2);
 
 bool status;
 status = bme.begin(0x76);  //The I2C address of the sensor is 0x76
 if (!status) {
     lcd.clear();
     lcd.print("Error. Check");
     lcd.setCursor(0,1);
     lcd.print("connections");
     while (1);
 }
 delay(500);
 lcd.clear();
}

void loop() {

getPressure();
getTemperature();

//Printing Temperature
lcd.setCursor(0,0);
lcd.print("T: ");
lcd.print(temperature + tempCorrection,3);
lcd.print(" ");
lcd.print((char)223);
lcd.print("C ");
 
//Printing Pressure
lcd.setCursor(0,1);
lcd.print("P: ");
lcd.print(pressure/100.0); // display in hPa
lcd.print(" hPa ");
delay(80);
}

float getTemperature()
{
 temperature = (15.0*temperature + bme.readTemperature())/16.0; // limited by accuracy of floating point variables
}


float getPressure()
{
 pressure = (8.0*pressure + bme.readPressure())/9.0;
}

Ansonsten kann ich Alfsch's Beobachtung bestätigen: Man muss nur scharf hinsehen, dann steigt die Temperatur (Strahlungswärme des Körpers).
 
Reply
#33
Die 3. NachkommaStelle bei der Temperaturanzeige läßt Änderungen schnell erkennen, insofern finde ich das garnicht akademisch.
...mit der Lizenz zum Löten!
 
Reply
#34
Die dritte ist wirklich nett, aber die vierte ist zuviel des Guten. Ich habe es bei 3 Stellen belassen.
Theoretisch müsste ich nochmal ans Oversampling. Funktioniert zwar gut, aber ist barbarisch Wink.
 
Reply
#35
Oversampling oder/und Decimation?
 
Reply
#36
Sowas habe ich früher mit einem gleitenden Mittelwertfilter gelöst.
...mit der Lizenz zum Löten!
 
Reply
#37
Je nach Blickwinkel. Der Sensor liefert 2 Nachkommastellen mit einer Frequenz, die ich nicht brauche. Dafür liegt ein gewisses Rauschen auf dem Signal. Durch meine (zugegeben brachiale und verbesserungswürdige) Berechnung wird der angezeigte Temperaturwert geglättet und gewinnt aus dem Zittern der 2. Stelle nach dem Komma eine dritte...

Wenn ich die letzten 15 Messungen in einen Stack schieben und direkt verwenden würde, wäre es noch besser.
--
Edit: voltwide hat den Fachbegriff Wink
 
Reply
#38
So, jetzt aber hoffentlich sauberer Code, mit gleitendem Mittelwert. Das braucht mehr Variablen, deshalb wollte ich mich drücken  Wink . Noch Vorschläge?

Code:
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#include <LiquidCrystal.h>

float temperatureArray[16];
float temperatureSum;
float temperature;
float pressureArray[9];
float pressureSum;
float pressure;
float tempCorrection = -0.5; // absolute sensor error correction
byte x; // array index

Adafruit_BMP280 bme; // I2C

const int rs = 5, en = 6, d4 = 9, d5 = 10, d6 = 11, d7 = 12; // Arduino pin connection
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
 lcd.begin(16, 2);
 bme.begin(0x76);
 delay(100);
 lcd.clear();
}

void loop() {
getTemperature();
getPressure();
printTemperature();
printPressure();
delay(50);
}

float getTemperature()
{
 temperatureSum -= temperatureArray[0]; //oldest temperature reading removed
 for(x=0;x<15;x++) temperatureArray[x] = temperatureArray[x+1]; // shift array and lose [0]
 temperatureArray[15] = bme.readTemperature(); // new value in array at highest position
 temperatureSum += temperatureArray[15]; //newest temperature reading added
 temperature = temperatureSum/16.0; // moving average
}

float getPressure()
{
 pressureSum -= pressureArray[0]; //oldest pressure reading removed
 for(x=0;x<8;x++) pressureArray[x] = pressureArray[x+1]; // shift array and lose [0]
 pressureArray[8] = bme.readPressure(); // new value in array at highest position
 pressureSum += pressureArray[8]; //newest pressure reading added
 pressure = pressureSum/9.0; // moving average
}

void printTemperature() {
lcd.setCursor(0,0);
lcd.print("T: ");
lcd.print(temperature + tempCorrection,3);
lcd.print(" ");
lcd.print((char)223);
lcd.print("C ");
}

void printPressure() {
lcd.setCursor(0,1);
lcd.print("P: ");
lcd.print(pressure/100.0); // display in hPa
lcd.print(" hPa ");
}
 
Reply
#39
2-Punkt-Korrektur braucht es nicht?
 
Reply
#40
Ich weiss nicht genau, was du meinst...

Die Messungen erfolgen natürlich in konstanten Abständen, so dass jeder Messwert das gleiche Gewicht hat. Meiner Meinung nach muss nichts weiter korrigiert werden.
Oder doch? misstrau
 
Reply