Expériences simples avec le microcontrôleur STM32F103 (Blue Tablet)

image

Partie 2 <- Partie 1

Continuons à expérimenter avec le microcontrôleur STM32F103C8T6, connectons certains capteurs / écrans I2C à la «tablette bleue».

Prise en charge des écrans I2C populaires:

  • LCD 1602
  • SSD1306

Prise en charge des capteurs suivants:

  • BH1750 - Capteur de lumière
  • BME280 - capteur de température, pression, humidité
  • CCS811 - Capteur de CO2, COV (substances organiques volatiles)

Pour commencer à travailler avec de nouvelles fonctionnalités, vous devez créer un nouveau projet.
Le lien pour télécharger le programme MIOC est donné dans la première partie.

Capteurs


Capteur BH1750


image

BH1750 Capteur de lumière (photomètre) 16 bits avec interface I2C. La photodiode du BH1750 détermine l'intensité de la lumière, qui est convertie en tension de sortie à l'aide d'un amplificateur opérationnel. L'ADC intégré fournit des données numériques 16 bits. La logique interne du BH1750 élimine le besoin de calculs complexes, car il génère directement des données numériques importantes en lux (lux).

Selon la documentation, le capteur BH1750 est sensible à la lumière visible et n'est pratiquement pas affecté par le rayonnement infrarouge, c'est-à-dire réagit approximativement à la même gamme spectrale que l'œil humain.

Pour travailler avec ce capteur, dans l'onglet «Configuration», sélectionnez BH1750.

Les résultats de mesure seront dans la variable globale:
uint32_t BH_L;

Connexion du capteur au bus I2C2:

image

Capteur BME280


image

Ce capteur mesure les paramètres environnementaux: température, pression atmosphérique, ainsi que l'humidité.

Il existe également un capteur similaire - BMP280, qui n'a pas la capacité de mesurer l'humidité. Mais cela coûte beaucoup moins cher.

En plus du fait que le capteur mesure tous les paramètres ci-dessus, il sait également filtrer le bruit, l'étalonnage des lectures y est intégré. De plus, contrairement à d'autres capteurs, ce capteur effectue toutes ces mesures non seulement rapidement, mais également dans des plages plus larges. Par exemple, de nombreux capteurs ne savent pas mesurer l'humidité de l'air inférieure à 20%.

Les caractéristiques déclarées du capteur sont les suivantes:

image
Les capteurs sont connectés au bus I2C2 comme suit:

image

Si BMP280 sera utilisé, alors dans le fichier principal / bme280.c, vous devez mettre en commentaire toutes les lignes marquées // Commentaire pour BMP.

Les résultats des mesures seront en variables globales:

image

Un exemple de programme qui fonctionne avec BH1750, BME280 et 1602 affiche:

#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 ); } } 

Le résultat du programme:

image
Le même programme affichera la température, la pression, l'humidité sur l'écran du SSD1306
(connectez cet écran et sélectionnez-le dans la configuration):

image

Le BME280 peut mesurer la température avec une plus grande précision. Pour ce faire, il doit être calibré. Dans le fichier principal / bme280.h, il existe une définition de macro pour cela:
#define DT 3520

Capteur CCS811


image

L'air qui nous entoure est un mélange de gaz et se compose principalement d'azote (environ 78%) et d'oxygène (environ 21%). Le pourcentage restant est dû à diverses impuretés (gaz inertes, dioxyde de carbone, monoxyde de carbone, substances organiques volatiles (COV), etc.). Malgré le fait que le pourcentage d'impuretés soit faible, un changement de leur concentration peut être très désagréable et même dangereux pour l'homme. La qualité de l'air dans les bureaux et les locaux résidentiels est le plus souvent associée à la teneur en CO2 et en COV.

Les substances organiques volatiles comprennent plus de 5000 composés. L'éducation de la plupart d'entre eux est en quelque sorte liée aux processus de la vie humaine.

Ainsi, même une simple présence humaine dans une pièce fermée entraîne une "pollution" de l'air et un besoin de ventilation. Il est difficile d'estimer la concentration de COV dans l'air. Auparavant, des capteurs de CO2 étaient utilisés pour estimer la concentration de COV. Dans le même temps, il a été tenu compte du fait que dans des conditions normales, les concentrations de COV et de CO2 sont liées. Connaissant le pourcentage de CO2, on peut indirectement déterminer la concentration de COV. Si la teneur en dioxyde de carbone dans l'air a atteint une certaine limite, la ventilation doit être activée.

En pratique, la relation entre les COV et le CO2 n'est pas toujours simple. Par exemple, le tabagisme à l'intérieur provoque une forte augmentation de la teneur en COV, que les capteurs de CO2 n'enregistrent pas, de sorte que la concentration de dioxyde de carbone ne change pas beaucoup. Les capteurs de dioxyde de carbone seront également impuissants si des produits chimiques ménagers, des produits de nettoyage, des peintures et des vernis ou des parfums ordinaires sont utilisés dans la pièce. AMS propose sa solution au problème de la mesure de la concentration en COV - capteurs CCS811.

Caractéristiques des capteurs de qualité de l'air CCS811B:

image

Le capteur possède un algorithme d'étalonnage automatique. Les valeurs mesurées sont automatiquement définies en quelques jours. Pour cette raison, le nouveau capteur a une gigantesque erreur initiale et doit fonctionner pendant au moins trois à quatre jours jusqu'à l'obtention de résultats plus ou moins fiables:

image

L'utilisateur doit également se rappeler qu'à chaque mise en marche, le capteur CCS811 doit «se réchauffer». Le temps d'un tel «échauffement» est supérieur à 30 minutes, pendant lesquelles l'erreur est trop élevée:

image

Cette caractéristique du CCS811 est extrêmement importante à considérer.

Les résultats de mesure des capteurs sont dans des variables globales:
uint32_t CCS_CO2;
uint32_t CCS_TVOC;

Connexion du capteur au bus I2C2:

image

Vous pouvez écrire le programme pour imprimer les résultats de ce capteur en utilisant les exemples ci-dessus et la description de la façon de travailler avec la console dans la première partie vous-même.

Exemples d'autres capteurs



Capteur de mouvement HC-SR501


image

Certains capteurs, tels que les capteurs de mouvement HC-SR501, ne nécessitent pas d'écriture d'extraits supplémentaires.

Pour ce capteur, déclarez une variable, sélectionnez Type = GPIO_Mode_IN_FLOATING, sélectionnez un port.

Générez BSP, compilez, téléchargez sur MK. Ensuite, nous travaillons avec ce capteur de la même manière qu'avec le bouton (pour recevoir les données).

Connexion du capteur HC-SR501:

image

Capteur de température / humidité DHT22


image

Capteur de température / humidité

Connexion du capteur:

image

Le travail avec ce capteur sera comme un exemple d'extrait d'utilisateur (analogue du croquis Arduino).

L'extrait peut être pris ici:
dht22.c
Mettez-le dans le dossier principal
Dans ce fichier, modifiez les lignes:

 #define PORT GPIOA #define PIN GPIO_Pin_5 

par connexion réelle du capteur

Le texte du programme pour travailler avec cet extrait:

 #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" ); } } 

Le résultat du travail:

image

Plus souvent que toutes les 4-5 secondes, le capteur n'a pas de sens à interroger. Raisons: le calcul de la température a lieu entre 800 et 900 mS, deuxième: si vous interrogez plus souvent, le capteur s'échauffe automatiquement.

CLI


Le firmware contient un petit shell qui fonctionne avec la console. Vous pouvez voir quelles commandes se trouvent dans le fichier principal / mx_cli.c

Si vous le souhaitez, vous pouvez ajouter n'importe laquelle de vos équipes.

La CLI commence à fonctionner en mode sans écho, c'est-à-dire que les caractères que vous entrez ne sont pas affichés. Pour afficher les caractères que vous entrez, tapez: echo on.

La commande «sh on» sort deux fois par seconde les valeurs des variables déclarées dans le configurateur et les variables associées aux capteurs. Le numéro en première position correspond au numéro de ligne dans le tableau du configurateur. Cette commande permet de transférer des données vers un système connecté à la console.

Aucun indicateur ni mutex n’analyse l’activité de la console. Par conséquent, lors de l'utilisation simultanée de l'opérateur «print» et «echo on», le mélange des informations de sortie peut se produire. Vous ne devez pas utiliser les deux méthodes en même temps. Pour résoudre ce problème, vous pouvez utiliser deux canaux de sortie. Par exemple, la console est sur UART1 et la sortie des informations utilisateur sur VCP. Ou vice versa.

Utiliser des fonctions:

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

Pour faciliter l'utilisation de ces fonctions, vous pouvez modifier la macro printf dans le fichier gbl.h. Par exemple, les éléments suivants:

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

Exemple de sortie vers la console (écho activé):

image

Balayage du bus I2Cx


Pour scanner le bus I2C1 ou I2C2, il existe des "firmware" * .hex prêts à l'emploi
scanner I2Cx
Sortie d'informations vers UART1, vitesse - 115200.8, N, 1
Après avoir chargé le scanner, appuyez sur le bouton «Réinitialiser».

Le firmware affiche les adresses des appareils trouvés sur le bus.

image

Les trois capteurs connectés décrits ci-dessus.

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


All Articles