Einfache Experimente mit dem Mikrocontroller STM32F103 (Blue Tablet)

Bild

Teil 2 <- Teil 1

Lassen Sie uns weiter mit dem Mikrocontroller STM32F103C8T6 experimentieren und einige I2C-Sensoren / -Displays an das „blaue Tablet“ anschließen.

Unterstützung für beliebte I2C-Displays implementiert:

  • LCD 1602
  • SSD1306

Unterstützung für folgende Sensoren implementiert:

  • BH1750 - Lichtsensor
  • BME280 - Temperatur-, Druck-, Feuchtigkeitssensor
  • CCS811 - CO2-Sensor, VOC (flüchtige organische Substanzen)

Um mit neuen Funktionen arbeiten zu können, müssen Sie ein neues Projekt erstellen.
Der Link zum Herunterladen des MIOC-Programms befindet sich im ersten Teil.

Sensoren


BH1750 Sensor


Bild

BH1750 16-Bit-Lichtsensor (Belichtungsmesser) mit I2C-Schnittstelle. Die Fotodiode am BH1750 bestimmt die Intensität des Lichts, das mit einem Operationsverstärker in die Ausgangsspannung umgewandelt wird. Der eingebaute ADC erzeugt digitale 16-Bit-Daten. Die interne Logik des BH1750 macht komplexe Berechnungen überflüssig, da wichtige digitale Daten direkt in Lux (Lux) ausgegeben werden.

Gemäß der Dokumentation ist der BH1750-Sensor empfindlich gegenüber sichtbarem Licht und wird praktisch nicht durch Infrarotstrahlung beeinflusst, d.h. reagiert auf ungefähr den gleichen Spektralbereich wie das menschliche Auge.

Um mit diesem Sensor zu arbeiten, wählen Sie auf der Registerkarte „Konfiguration“ die Option BH1750.

Die Messergebnisse werden in der globalen Variablen angezeigt:
uint32_t BH_L;

Anschließen des Sensors an den I2C2-Bus:

Bild

BME280 Sensor


Bild

Dieser Sensor misst die Umgebungsparameter: Temperatur, Luftdruck sowie Luftfeuchtigkeit.

Es gibt auch einen ähnlichen Sensor - BMP280, dem die Messung der Luftfeuchtigkeit fehlt. Aber es kostet viel weniger.

Neben der Tatsache, dass der Sensor alle oben genannten Parameter misst, weiß er auch, wie Rauschen gefiltert wird, und die Kalibrierung der Messwerte ist integriert. Im Gegensatz zu anderen Sensoren führt dieser Sensor all diese Messungen nicht nur schnell, sondern auch in größeren Bereichen durch. Beispielsweise wissen viele Sensoren nicht, wie eine Luftfeuchtigkeit von weniger als 20 Prozent gemessen werden soll.

Die deklarierten Eigenschaften des Sensors sind wie folgt:

Bild
Die Sensoren sind wie folgt an den I2C2-Bus angeschlossen:

Bild

Wenn BMP280 verwendet wird, müssen Sie in der Datei main / bme280.c alle mit // Kommentar für BMP gekennzeichneten Zeilen auskommentieren.

Die Messergebnisse werden in globalen Variablen angegeben:

Bild

Ein Beispiel für ein Programm, das mit den Anzeigen BH1750, BME280 und 1602 funktioniert:

#include "mx_init_hw.c" int main() { char s[64]; float t=0, p=0, h=0; Init_HW(); // --------------------- // The main program loop // --------------------- while( TRUE ) { delay_ms( 300 ); t = BME_T / 10.0; p = BME_P / 100.0; h = BME_H / 10.0; sprintf( s, "t=%-7.1fC", t ); SSD1306_write_string( 1, s ); sprintf( s, "p=%-7.1fPa", p ); SSD1306_write_string( 2, s ); sprintf( s, "h=%-7.1f%% ", h ); SSD1306_write_string( 3, s ); sprintf( s, "T=%-7.1fH=%.1f", t, h ); LCD_write_string( 1, s ); sprintf( s, "P=%-7.1fL=%u", p, BH_L ); LCD_write_string( 2, s ); } } 

Das Ergebnis des Programms:

Bild
Das gleiche Programm zeigt Temperatur, Druck und Luftfeuchtigkeit auf dem Display der SSD1306 an
(Schließen Sie dieses Display an und wählen Sie es in der Konfiguration aus.):

Bild

Der BME280 kann die Temperatur genauer messen. Dazu muss es kalibriert werden. In der Hauptdatei / bme280.h gibt es eine Makrodefinition dafür:
# DT 3520 definieren

CCS811 Sensor


Bild

Die Luft um uns herum ist ein Gasgemisch und besteht hauptsächlich aus Stickstoff (ca. 78%) und Sauerstoff (ca. 21%). Der verbleibende Prozentsatz entfällt auf verschiedene Verunreinigungen (Inertgase, Kohlendioxid, Kohlenmonoxid, organische flüchtige Substanzen (VOC) usw.). Trotz der Tatsache, dass der Prozentsatz an Verunreinigungen gering ist, kann eine Änderung ihrer Konzentration für den Menschen sehr unangenehm und sogar gefährlich sein. Die Luftqualität in Büro- und Wohngebäuden hängt am häufigsten mit dem Gehalt an CO2 und VOC zusammen.

Organische flüchtige Substanzen umfassen mehr als 5000 Verbindungen. Die Erziehung der meisten von ihnen ist irgendwie mit den Prozessen des menschlichen Lebens verbunden.

Selbst eine einfache Anwesenheit von Menschen in einem geschlossenen Raum führt somit zu einer "Verschmutzung" der Luft und der Notwendigkeit einer Belüftung. Die Abschätzung der Konzentration von VOC in der Luft ist schwierig. Bisher wurden CO2-Sensoren verwendet, um die Konzentration von VOC abzuschätzen. Gleichzeitig wurde berücksichtigt, dass unter normalen Bedingungen die Konzentrationen von VOC und CO2 gebunden sind. Wenn man den Prozentsatz an CO2 kennt, kann man indirekt die Konzentration von VOC bestimmen. Wenn der Kohlendioxidgehalt in der Luft einen bestimmten Grenzwert erreicht hat, muss die Belüftung eingeschaltet werden.

In der Praxis ist die Beziehung zwischen VOC und CO2 nicht immer einfach. Beispielsweise führt das Rauchen in Innenräumen zu einem starken Anstieg des VOC-Gehalts, den CO2-Sensoren nicht aufzeichnen, sodass sich die Kohlendioxidkonzentration nicht wesentlich ändert. Kohlendioxidsensoren sind auch dann machtlos, wenn Haushaltschemikalien, Reinigungsmittel, Farben und Lacke oder gewöhnliche Parfums im Raum verwendet werden. AMS bietet seine Lösung für das Problem der Messung der VOC-Konzentration - CCS811-Sensoren.

Merkmale der Luftqualitätssensoren CCS811B:

Bild

Der Sensor verfügt über einen automatischen Kalibrierungsalgorithmus. Messwerte werden innerhalb weniger Tage automatisch eingestellt. Aus diesem Grund weist der neue Sensor einen gigantischen Anfangsfehler auf und muss mindestens drei bis vier Tage lang funktionieren, bis mehr oder weniger zuverlässige Ergebnisse erzielt werden:

Bild

Der Benutzer muss sich auch daran erinnern, dass der CCS811-Sensor jedes Mal nach dem Einschalten „warmlaufen“ muss. Die Zeit eines solchen „Aufwärmens“ beträgt mehr als 30 Minuten, in denen der Fehler unannehmbar groß ist:

Bild

Diese Funktion von CCS811 ist äußerst wichtig.

Die Ergebnisse der Sensormessung sind in globalen Variablen angegeben:
uint32_t CCS_CO2;
uint32_t CCS_TVOC;

Anschließen des Sensors an den I2C2-Bus:

Bild

Sie können das Programm zum Drucken der Ergebnisse dieses Sensors anhand der obigen Beispiele und der Beschreibung der Arbeit mit der Konsole im ersten Teil selbst schreiben.

Beispiele für andere Sensoren



Bewegungssensor HC-SR501


Bild

Einige Sensoren, wie z. B. die Bewegungssensoren HC-SR501, erfordern kein Schreiben zusätzlicher Schnipsel.

Deklarieren Sie für diesen Sensor eine Variable, wählen Sie Type = GPIO_Mode_IN_FLOATING und wählen Sie einen Port aus.

BSP generieren, kompilieren, auf MK hochladen. Als nächstes arbeiten wir mit diesem Sensor genauso wie mit der Taste (um Daten zu empfangen).

HC-SR501 Sensoranschluss:

Bild

Temperatur- / Feuchtigkeitssensor DHT22


Bild

Temperatur- / Feuchtigkeitssensor

Sensoranschluss:

Bild

Die Arbeit mit diesem Sensor dient als Beispiel für ein Benutzer-Snippet (analog zur Arduino-Skizze).

Snippet kann hier genommen werden:
dht22.c
Legen Sie es in den Hauptordner
Bearbeiten Sie in dieser Datei die Zeilen:

 #define PORT GPIOA #define PIN GPIO_Pin_5 

durch tatsächlichen Sensoranschluss

Der Text des Programms für die Arbeit mit diesem Snippet:

 #include "mx_init_hw.c" #include "dht_22.c" int main() { int16_t dht_t, dht_h; Init_HW(); dht_init(); // --------------------- // The main program loop // --------------------- while( TRUE ) { delay_ms( 5000 ); if( !get_dht_data( &dht_t, &dht_h ) ) print( "t=%.1f h=%.1f\r\n", (float)dht_t / 10.0, (float)dht_h / 10.0 ) else print( "DHT 22 - ERR\r\n" ); } } 

Das Ergebnis der Arbeit:

Bild

Meistens als alle 4-5 Sekunden ist es nicht sinnvoll, den Sensor abzufragen. Gründe: Die Temperaturberechnung erfolgt innerhalb von 800-900 mS, zweitens: Wenn Sie häufiger interviewen, erwärmt sich der Sensor selbst.

CLI


Die Firmware enthält eine kleine Shell, die mit der Konsole funktioniert. Sie können sehen, welche Befehle in der Hauptdatei / mx_cli.c enthalten sind

Auf Wunsch können Sie jedes Ihrer Teams hinzufügen.

Die CLI beginnt im No Echo-Modus zu arbeiten, dh die von Ihnen eingegebenen Zeichen werden nicht angezeigt. Geben Sie Folgendes ein, um die eingegebenen Zeichen anzuzeigen: echo on.

Der Befehl „sh on“ gibt zweimal pro Sekunde die Werte der im Konfigurator deklarierten Variablen und der den Sensoren zugeordneten Variablen aus. Die Nummer an der ersten Position entspricht der Zeilennummer in der Konfigurationstabelle. Mit diesem Befehl werden Daten an ein mit der Konsole verbundenes System übertragen.

Es gibt keine Flags und Mutexe, die die Geschäftigkeit der Konsole analysieren. Wenn Sie den Operator "Drucken" und "Echo ein" zusammen verwenden, kann es daher zu einer Vermischung der Ausgabeinformationen kommen. Sie sollten nicht beide Methoden gleichzeitig verwenden. Um dieses Problem zu lösen, können Sie zwei Ausgangskanäle verwenden. Die Konsole befindet sich beispielsweise in UART1 und die Ausgabe von Benutzerinformationen in VCP. Oder umgekehrt.

Funktionen verwenden:

 send_uart1( char *data, int len ) send_usb( char *data, int len ) 

Um die Verwendung dieser Funktionen zu erleichtern, können Sie das Makro printf in der Datei gbl.h ändern. Zum Beispiel Folgendes:

 #define printf(fmt,argv...){char s[128];sprintf(s,fmt,##argv);send_usb(s,strlen(s));} //   VCP 

Beispielausgabe an die Konsole (Echo ein):

Bild

I2Cx-Bus-Scan


Zum Scannen des I2C1- oder I2C2-Busses gibt es eine vorgefertigte "Firmware" * .hex
Scanner I2Cx
Informationsausgabe an UART1, Geschwindigkeit - 115200.8, N, 1
Drücken Sie nach dem Laden des Scanners die Taste „Zurücksetzen“.

Die Firmware zeigt die Adressen der am Bus gefundenen Geräte an.

Bild

Alle drei oben beschriebenen angeschlossenen Sensoren.

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


All Articles