Steuerschaltschrank einer Presse


Google-Suche auf MEINE-SCHALTUNG.de :





Online Rechner

Chronik

Dauerkalender


LLL - Wetterstation mit BME280


Anzeige der Wetterstation


LLL-Wetterstation ist eine Schaltung mit dem Sensor BME280. Die drei L-Buchstaben stehen für Lufttemperatur, Luftdruck und Luftfeuchtigkeit, die Messgrößen, die der Sensor liefern kann. Die eigentlichen Komponenten der Schaltung sind neben dem Sensor BME280 der Mikrocontroller Arduino Mega und ein 320x240 LCD-Display. Drei weitere Teilnehmer der Schaltung haben mit der eigentlichen Aufgabe der Schaltung wenig zu tun. Zwei lineare Spannungsregler und ein Levelkonverter haben die Aufgabe, die unterschiedliche Spannungen „kompatibel“ zueinander zu machen. Man könnte sie als Schnittstelle zwischen dem Sensor und Mikrocontroller bezeichnen. Für die Verdrahtung auf einem Steckbrett werden um die zehn Verbindungen benötigt. Die Versorgungsspannung beträgt 9VDC. Die Spannungsregler stellen 3,3 V für den Sensor und 5 V für den Levelkonverter bereit. Auf dem Display werden in einem Takt von 5 Sekunden die gemessen Werte angezeigt.

BME280

BME280

Der Umgebungssensor BME280 besteht aus drei verschiedenen Sensortypen, die in einem Gehäuse untergebracht sind. Man kann den Sensor von dem Sensor BMP280 dadurch unterscheiden, dass er ein quadratisches Gehäuse mit einem kleinen Loch hat. Sensor BMP280 kann lediglich Temperatur und Luftdruck messen. Mit dem BME280 können Temperatur, Luftdruck und die aktuelle Luftfeuchtigkeit gemessen werden.
In dem Beispiel kommt der Sensor als Modul in Form einer Mini-Platine zum Einsatz. Die kleine Platine stellt vier Anschlüsse zur Verfügung. Kontakt mit dem Sensor kann ein Mikrocontroller über den I2C-Bus aufnehmen. Die voreingestellte I2C - Adresse kann den Wert (hexadezimal) 0x76 oder 0x77 aufweisen. Falls man zwei Sensoren gleichzeitig nutzen möchte, muss die Adresse des zweiten Sensors neu eingestellt werden. Dazu werden die drei Pads, die sich auf der kleinen Platine neben dem Sensor befinden, verwendet. Man trennt zunächst die zwei miteinander verbunden Pads. Anschließend verbindet man mit einer Brücke das mittlere Pad mit dem dritten Pad, das bis dahin keine Funktion hatte.
Der einfachste Weg, die Daten aus dem Sensor abzurufen, besteht darin, eine vorgefertigte Bibliothek zu verwenden. Man kann zurzeit zwischen mehreren Bibliotheken wählen. In dem unten aufgeführten Beispiel (Mikrocontroller Arduino MEGA, Arduino DIE 2.3.2) kommt die Bibliothek "Adafruit_BME280" zum Einsatz. Die Bibliotheken können mithilfe des Bibliotheksverwalters (Arduino IDE) installiert werden.

BME280 Rückseite

Technische Daten:

Drucksensor: 250-1250 hPa (±1 hPa)
Feuchtigkeitssensor: 0-100% relative Feuchtigkeit (±3%)
Temperatursensor: -40°C bis +85°C (±0,5°C)
Betriebsspannung: 1,71 ... 3,6 V
Stromaufnahme: < 1 mA
Kommunikation: I2C
Modul-Abmessungen: 10 x 13 mm

Pinbelegung


Arduino

Arduino Mega

Aus der mittlerweile breiten Arduino-Auswahlpalette wählen wir für den Versuch Arduino Mega aus. Seine für uns relevanten Steckleisten sind genauso aufgebaut wie die von Arduino Uno. So kann man das Display, das in dem Versuch zum Einsatz kommt, problemlos und ohne zusätzliche Verdrahtung drauf stecken. Darüber hinaus stehen uns noch weitere Anschlüsse für andere Aufgaben zur Verfügung. Bei unserer LLL-Wetterstation werden allerdings nur noch zwei weitere Anschlüsse verwendet: die für die I2C-Kommunikation. Es sind die Pins 20 (SDA) und 21 (SCL). Die Arduino Platine wird durch den eingebauten Netzteil-Anschluss mit einer Spannung von 9 VDC eingespeist.

Mehr über Arduino

Display

Display

Für die Anzeige der Messergebnisse ist ein TFT LCD_Disply zuständig. Das Display (2,4“) hat eine Auflösung von 320x240 Pixel, völlig ausreichend für unsere Aufgabe. Das Display-Modul kann ein wenig mehr, als in unserer Schaltung verwendet wird. Es ist ein Touch-Display, das es ermöglicht, diverse Aktionen via Fingerdruck auszulösen. In unserem Beispiel werden die Messergebnisse auf dem Bildschirm gleichzeitig angezeigt. Die kleine Display-Platine ist als ein Shield, das man direkt auf Arduino-Platine aufstecken kann, konzipiert.

Display

5V Spannungsregler

Spannungsregler

Damit die Kommunikation zwischen dem Sensor und Mikrocontroller reibungslos verlaufen kann, müssen die Spannungen der beiden Komponenten angepasst werden. Der Sensor BME280 arbeitet mit 3,3V, Arduino erwartet Signale von 5V. Daher wird hier ein Levelkonverter dazwischengeschaltet. Er benötigt auf seiner HV-Seite eine Spannung von 5V, die von dem Spannungsregler L78L05 geliefert wird.

Spannungsregler

HT7333

ht7333-A

Bei der integrierten Schaltung HT7333 handelt es sich um einen dreipoligen, festen Spannungsregler, der am Ausgang 3,3V liefert. Die Serie der Spannungsregler HT73xx besteht aus mehreren Reglern, die jeweils für andere Ausgangsspannung konzipiert wurden. Die Spannungspalette reicht von 1,2V bis 5 VDC:
HT7318 – 1,8V
HT7325 – 2,5 V
HT7327 – 2,7V
HT7330 – 3,0V
HT7333 – 3,3V
HT7335 – 3,5V
HT7341 – 4,1V
HT7350 – 5,0V
Die Regler verfügen über eine Strombegrenzung und können bei entsprechender Beschaltung als Quellen für variable Spannungen und Ströme verwendet werden. Pinbelegung:

Pinbelegung

Technische Daten:

Eingangsspannung : bis zu 12 V
Ausgangsspannung: 3,3 V
Toleranz der Ausgangsspannung: ±3 %
Maximale Ausgangsstrom: 250 mA
Ruhestrom: 3,5 mA


Pegelwandler

Pegelwandler

Mit einem Pegelwandler werden Signale von einem Spannungspegel auf ein anderes gebracht. Auf diese Weise werden Signale von zwei miteinander kommunizierten Quellen angepasst. In unserem Fall werden die 5V Signale von Arduino auf 3,3V gebracht und zu dem Sensor weitergeleitet. Umgekehrt werden die 3,3V Signale von dem Sensor auf den 5V Pegel des Arduino umgewandelt. Der Pegelwandler wird auf der HV-Seite (Hohe Spannung) mit den von dem Spannungsregler L78L05 stammenden 5V eingespeist. Seine LV-Seite (Niedrige Spannung) wird von dem Regler HT73333, der 3,3 V liefert, mit Spannung versorgt.


Schaltplan

Schaltplan


Testschaltung

Testschaltung



Programm

// **********************************************************************************************
// LLL-Wetterstation mit BME280
// Arduino MEGA, Sensor BME280, LCD TFT
// Arduino IDE 2.3.2
// **********************************************************************************************

#include "Wire.h"                                    // BME280 notwendige Bibliotheken einbinden
#include "Adafruit_Sensor.h"
#include "Adafruit_BME280.h"
uint8_t  BME280_Adresse = 0x76;                      // Sensor I2C-Bus Adresse
Adafruit_BME280 my_bme;
#define SDA 20                                       // Sensoranschluß: I2C - Daten
#define SCL 21                                       // Sensoranschluß: I2C - Clock

#include "MCUFRIEND_kbv.h"                           // Bibliothek Display
MCUFRIEND_kbv tft;

#define BLACK 0x0000                                 // Display-Farben zur Auswahl
#define BLUE 0x002F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
#define GRAY 0x8410

String Ausgabe_Zeile [3][2];                         // Variable für Ergebnisse
                                                     // [x][0] - alte Werte
                                                     // [x][1] - neue Werte

// **********************************************************************************************
void Ausgabe() {                                     // Unterprogramm Display Ausgabe

    for (int i=0; i<3; i++) {                        // Alle drei Werte durchlaufen
        tft.setTextColor(BLUE);                      // Textfarbe (blau) zum Löschen
        int PosX = 150;                              // Text X-Position
        int PosY = 87 + (i * 50);                    // Text Y-Position
        tft.setCursor(PosX, PosY);                   // Cursoposition setzen
        tft.print(Ausgabe_Zeile [i][0]);             // Alter Text wird überschrieben (Löschen)
        tft.setTextColor(WHITE);                     // Neue Textfarbe
        if (Ausgabe_Zeile [0][1] == "Stoerung") {
            tft.setTextColor(RED);                   // Textfarbe bei Störung
        } 
        tft.setCursor(PosX, PosY);                   // Cursoposition
        tft.print(Ausgabe_Zeile [i][1]);             // Neue Inhalte schreiben
        Ausgabe_Zeile [i][0] = Ausgabe_Zeile [i][1]; // Neue Inhalte speichern
    }
}

// **********************************************************************************************
void setup() {

    tft.begin(0x9341);
    tft.setRotation(1);                              // Text Ausrichtung
    tft.fillScreen(BLUE);                            // Display Hintergrundfarbe
    tft.drawRect(3, 3, 314, 234, YELLOW);            // Rahmen
    tft.setTextSize(1);                              // Schriftgrösse
    tft.setTextColor(CYAN);                          // Textfarbe
    tft.setCursor(15, 13);                           // Cursoposition
    tft.print("LLL");                                // Text
    tft.setTextSize(3);                              // Schriftgrösse
    tft.setTextColor(GREEN);                         // Textfarbe
    tft.setCursor(39, 25);                           // Cursoposition
    tft.print("Wetterstation");                      // text
    tft.setTextSize(2);                              // Schriftgrösse
    tft.setTextColor(MAGENTA);                       // Textfarbe
    tft.setCursor(10, 65);                           // Cursoposition
    tft.print("Lufttemperatur *C");                  // Text
    tft.setCursor(10, 115);                          // Cursoposition
    tft.print("Luftfeuchtigkeit %");                 // Text
    tft.setCursor(10, 165);                          // Cursoposition
    tft.print("Luftdruck hPa");                      // Text
    tft.setTextSize(3);                              // Schriftgrösse
}

// **********************************************************************************************
void loop() {

    for (int i=0; i<3; i++) {                        // Ausgabetexte mit "Stoerung" vorbelegen
        Ausgabe_Zeile [i][1] = "Stoerung";
    }
    bool check = my_bme.begin(BME280_Adresse);       // Sensor - Prüfung
    if (check) {                                     // Wenn OK, Werte ermitteln
        Ausgabe_Zeile [0][1] = my_bme.readTemperature();           // Temperaturmessung
        Ausgabe_Zeile [1][1] = my_bme.readHumidity();              // Feuchtigkeit
        Ausgabe_Zeile [2][1] = my_bme.readPressure() / 100;        // Luftdruck         
    } 
    Ausgabe();                                       // Unterprogramm aufrufen
    delay(5000);                                     // Wartezeit
}

// **********************************************************************************************  


Kurzvideo zur Schaltung


Weitere Themen:


Google-Suche auf MEINE-SCHALTUNG.de :


Home Impressum Datenschutz