Wetterstation (Arduino Pro Mini, BME280, LCD1602)

Einführung

Was kann auf einem zweizeiligen Bildschirm angezeigt werden, außer "Hallo Welt!"? Warum nicht Temperatur, Luftfeuchtigkeit und Druck anzeigen?

Die als Trainingshilfe für Arduino angebotenen Sensoren (DHT11, DHT22) zeigen Temperatur und Luftfeuchtigkeit an. Für Bildungszwecke (für die Universität) war es notwendig, den Druck auf die gleiche Weise zu beobachten. Natürlich hat die Abteilung ein Barometer, aber warum nicht Ihr eigenes sammeln? Darüber hinaus können Sie im automatischen Modus weitere Messwerte sammeln. Dies ist eine gute Erfahrung beim Erlernen von Arduino.

Auf die eine oder andere Weise wurden Komponenten aus China bestellt und dieses Gerät zusammengebaut.

Notwendige Komponenten

Arduino Pro Mini
I2C für LCD (es war möglich, sofort montiert zu bestellen, aber es stellte sich heraus, ein bisschen billiger)
LCD 1602
BME280

USB-UART wurde verwendet, um die Skizze an Arduino zu senden. Es war auch möglich, einen Raspberry Pi oder einen Computer mit einem COM-Anschluss zu verwenden.

Anschlussplan für Firmware und Programmcode

USB-UART aus China wurde mit einer Reihe von Kabeln geliefert:

Bild

Sie waren genug. Ich habe den Jumper bei 3,3 Volt belassen, obwohl meine Version des Arduino mit 5 Volt betrieben wird.

UART - Arduino
5v - VCC
TXD - RXD
RXD - TXD
GND - GND
CTS - DTR (optional, es hat bei mir nicht funktioniert, möglicherweise weil die Signalspannung 3,3 V blieb)

Wenn Sie den DTR nicht anschließen, müssen Sie nach dem Senden der Arduino-Firmware, die Sie mit der integrierten Taste neu starten müssen, auf beiden Seiten einen aktiven Datenaustausch beginnen (wie durch die USB-UART-LEDs angezeigt). Nachdem die Firmware erfolgreich heruntergeladen wurde, startet sie sich selbst neu.

Erforderliche Bibliotheken von Drittanbietern:

SparkFunBME280
LiquidCrystal I2C

Direkt der Code mit Kommentaren aus den Beispielen (falls jemand etwas ändern muss).

Code
#include <stdint.h> #include "SparkFunBME280.h" #include "Wire.h" #include "SPI.h" #include <LiquidCrystal_I2C.h> //Global sensor object BME280 mySensor; LiquidCrystal_I2C lcd(0x3F,16,2); // ,    0x3F void setup() { lcd.init(); lcd.backlight(); //***Driver settings********************************// //commInterface can be I2C_MODE or SPI_MODE //specify chipSelectPin using arduino pin names //specify I2C address. Can be 0x77(default) or 0x76 //For I2C, enable the following and disable the SPI section mySensor.settings.commInterface = I2C_MODE; mySensor.settings.I2CAddress = 0x76; // ,      //For SPI enable the following and dissable the I2C section //mySensor.settings.commInterface = SPI_MODE; //mySensor.settings.chipSelectPin = 10; //***Operation settings*****************************// //renMode can be: // 0, Sleep mode // 1 or 2, Forced mode // 3, Normal mode mySensor.settings.runMode = 3; //    Forced mode,        Normal mode //tStandby can be: // 0, 0.5ms // 1, 62.5ms // 2, 125ms // 3, 250ms // 4, 500ms // 5, 1000ms // 6, 10ms // 7, 20ms mySensor.settings.tStandby = 5; //    //filter can be off or number of FIR coefficients to use: // 0, filter off // 1, coefficients = 2 // 2, coefficients = 4 // 3, coefficients = 8 // 4, coefficients = 16 mySensor.settings.filter = 0; //tempOverSample can be: // 0, skipped // 1 through 5, oversampling *1, *2, *4, *8, *16 respectively mySensor.settings.tempOverSample = 1; //pressOverSample can be: // 0, skipped // 1 through 5, oversampling *1, *2, *4, *8, *16 respectively mySensor.settings.pressOverSample = 1; //humidOverSample can be: // 0, skipped // 1 through 5, oversampling *1, *2, *4, *8, *16 respectively mySensor.settings.humidOverSample = 1; //Calling .begin() causes the settings to be loaded mySensor.begin(); } void loop() { //    ,    ,          . lcd.setCursor(0,0); lcd.print("H="); lcd.print((uint8_t)mySensor.readFloatHumidity()); lcd.print("%"); lcd.print(" T="); lcd.print(mySensor.readTempC()); lcd.setCursor(13,0); lcd.print(" P:"); lcd.setCursor(0,1); int mmH=mySensor.readFloatPressure()/133; lcd.print(mmH); lcd.print("mmH "); lcd.print(mySensor.readFloatPressure()); lcd.setCursor(14,1); lcd.print("Pa"); delay(1000); } 


Die Sensoradresse kann erraten werden, es gibt nur zwei davon.

Wie Sie die Adresse Ihres Displays herausfinden, erfahren Sie hier . Je nach Chip gibt es zwei Platten.

In diesem Fall:

Bild

Und die Adresse wird seitdem 0x3F sein A0 - A2 offen:

Bild

Die im Oval eingekreiste LED ist besser zu verdampfen.

Schaltplan

Der Widerstand wurde als die Hälfte des Sensorwiderstands (zwischen VVC und GND) gewählt, so dass der Spannungsabfall an ihm 1,7 Volt betrug. Die Schaltung kann auch über den Eingang von RAW, eine andere Spannung (zum Beispiel von der Krone) mit Strom versorgt werden.

Bild

Das Foto zeigt, dass Sie aus Gründen der Kompaktheit den Sensor und die Anzeige von einem anderen Pin aus mit Strom versorgen können. Es zeigt auch einen Zweig eines orange-gelben Kabelpaares, an dem ein Widerstand von 100 Ohm hängt, um die Helligkeit der Hintergrundbeleuchtung zu verringern (Sie können den Jumper verlassen, aber er schneidet Ihnen die Augen).

Bild

In meinem Fall wird alles von einem alten Computer-Netzteil gespeist. Kann über USB mit Strom versorgt werden. Alle Komponenten wurden mit dem vorhandenen Momentkleber verklebt.

Zusammenfassung

Am Arbeitsplatz erschien 1602 mit dem Tisch verschraubt, der Druck, Luftfeuchtigkeit, Temperatur anzeigt. Arduino kann erneut entfernt werden, ohne es zu entfernen ( es kann zu einer Kriechlinie werden).

Foto
Bild

Arbeitsplatz, Gesamtansicht.

Bild

Vorderansicht.

Bild

Rückansicht.

Source: https://habr.com/ru/post/de406693/


All Articles