PrésentationQue peut-on afficher sur un écran à deux lignes, sauf «Bonjour tout le monde!»? Pourquoi ne pas afficher la température, l'humidité et la pression?
Les capteurs proposés comme aide à la formation pour l'arduino (DHT11, DHT22) affichent la température et l'humidité. À des fins pédagogiques (pour l'université), il était nécessaire d'observer la pression de la même manière. Naturellement, le département dispose d'un baromètre, mais pourquoi ne pas récupérer le vôtre? De plus, vous pouvez encore accumuler des lectures en mode automatique, et c'est une bonne expérience d'apprentissage de l'arduino.
D'une manière ou d'une autre, des composants ont été commandés en Chine et cet appareil a été assemblé.
Composants nécessairesArduino Pro MiniI2C pour LCD (il était possible de commander immédiatement assemblé, mais il s'est avéré un peu moins cher)
LCD 1602BME280USB-UART a été utilisé pour envoyer le croquis à Arduino. Il était également possible d'utiliser un Raspberry Pi ou un ordinateur avec un port COM.
Schéma de connexion du firmware et du code de programmeDe Chine, USB-UART est venu avec un ensemble de câblage:

Ils étaient bien assez. J'ai laissé le cavalier à 3,3 volts, malgré le fait que ma version de l'arduino soit alimentée par 5 volts.
UART - Arduino
5v - VCC
TXD - RXD
RXD - TXD
GND - GND
CTS - DTR (facultatif, cela n'a pas fonctionné pour moi, peut-être parce que la tension du signal est restée 3,3 V)
Si vous ne connectez pas le DTR, après avoir envoyé le firmware Arduino, vous devez redémarrer avec le bouton intégré, l'échange de données actif commencera des deux côtés (comme indiqué par les LED USB-UART), après le téléchargement réussi du firmware, il redémarrera lui-même.
Bibliothèques tierces nécessaires:
SparkFunBME280LiquidCrystal I2CDirectement le code, avec les commentaires des exemples (au cas où quelqu'un aurait besoin de changer quelque chose).
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); }
L'adresse du capteur peut être devinée, il n'y en a que deux.
Comment trouver l'adresse de votre écran, vous pouvez voir
ici . Selon la puce, il y a deux plaques.
Dans ce cas:
Et l'adresse sera 0x3F puisque A0 - A2 ouvert:

La LED qui est encerclée dans l'ovale est
préférable de s'évaporer.
Schéma de câblageLa résistance a été choisie comme la moitié de la résistance du capteur (entre VVC et GND), de sorte que la chute de tension sur elle était de 1,7 volts. En outre, le circuit peut être alimenté à partir de l'entrée RAW, d'une autre tension (par exemple à partir de la couronne).

La photo montre que pour la compacité, vous pouvez alimenter le capteur et afficher à partir d'une autre broche. Il montre également une branche d'une paire de fils orange-jaune, une résistance de 100 Ohms y est accrochée pour réduire la luminosité du rétroéclairage (vous pouvez laisser le cavalier, mais cela vous coupera les yeux).

Dans mon cas, tout est alimenté par une ancienne alimentation d'ordinateur. Peut être alimenté par USB. Tous les composants ont été collés avec de la colle Moment, qui était à portée de main.
RésuméDans le lieu de travail est apparu 1602 boulonné à la table, qui montre la pression, l'humidité, la température. Arduino peut être reflasher sans le retirer (
il peut devenir une ligne rampante ).
La photo
Lieu de travail, vue générale.

Vue de face.

Vue arrière.