» Électronique » Arduino »Station météo domestique sur le GY-BMP280-3.3 et Ds18b20

Station météo domestique sur GY-BMP280-3.3 et Ds18b20


Je veux collectionner fais-le toi-même instrument qui mesurera la pression atmosphérique et la température. Le capteur de température doit être éloigné et étanche, car il doit mesurer la température à une certaine distance de l'appareil. J'aimerais avoir un tel appareil portable avec une plage de travail de -30 ° C à 50 ° C. Mais cela nécessite que tous les composants puissent fonctionner dans cette plage de température. Les composants pouvant fonctionner dans une plage de températures étendue sont plus chers et il est plus difficile de les acheter.
Pour réaliser mon rêve en réalité, je serai aidé par le conseil d'administration, que j'ai décrit dans l'article «Carte GY-BMP280-3.3 pour mesurer la pression barométrique et la température».

De la pratique, on sait que lors de l'assemblage et de la configuration électronique avant sa fabrication, vous devez vérifier séparément l’entretien de tous les matériaux et composants de chacun. Sinon, vous risquez de vous perdre plus tard et, par conséquent, le produit électronique ne fonctionnera pas et il sera très difficile de trouver la cause du dysfonctionnement.

Commençons.

Première étape. Installez un shell logiciel gratuit sur votre ordinateur Arduino IDE pour écrire des programmes (croquis), les compiler puis les écrire sur le microcontrôleur Mega328P installé sur la carte. Je vous recommande de télécharger la version shell d'ARDUINO 1.6.5. Pourquoi? Initialement, le projet ARDUINO en était un, maintenant les développeurs se sont dispersés et continuent de développer le système ARDUINO, mais chacun à sa manière, avec de petites nuances. J'ai utilisé la version ARDUINO 1.6.5. Il doit être installé et testé pour la collaboration avec la carte Arduino Uno en utilisant les exemples les plus simples.

Deuxième étape. Nous vérifions la carte GY-BMP280-3.3 pour mesurer la pression barométrique et la température. Nous prenons 4 fils, nous les connectons GY-BMP280-3.3 et Arduino Uno, comme indiqué sur la photo et le schéma. Les courbes fines lignes multicolores sont conductrices.



Commençons par vérifier la carte GY-BMP280-3.3. Pour ce faire, vous devez installer la bibliothèque dans l'IDE Arduino, écrite par des programmeurs travaillant sur le site. En règle générale, après avoir installé la bibliothèque dans l'IDE Arduino, des exemples (exemples) de code apparaissent. En modifiant légèrement l'exemple de code, nous pouvons le compiler en données que le microcontrôleur comprend, puis l'envoyer dans la mémoire du microcontrôleur. Vous pouvez trouver un exemple (exemple) en faisant attention aux deux photos d'écran ci-dessous.


Après avoir écrit des données sur le microcontrôleur de la carte Arduino Uno, il commence immédiatement à exécuter le programme (code) et envoie les données via un câble USB à l'ordinateur auquel la carte Arduino Uno est connectée.Et nous pouvons voir le résultat de la mesure de la carte GY-BMP280-3.3 dans la fenêtre Arduino IDE, appelée «moniteur de port série».


Nous pouvons voir le résultat des mesures sur la carte GY-BMP280-3.3 dans le programme Windows Hyper Terminal standard, après avoir fermé le shell Arduino Uno et mis en place une session dans le programme Hyper Terminal. Autrement dit, nous pouvons obtenir les résultats de la carte GY-BMP280-3.3 en connectant l'Arduino Uno à n'importe quel ordinateur avec un câble USB sur lequel le pilote de la carte Arduino Uno est installé. Il existe plusieurs bibliothèques pour travailler avec GY-BMP280-3.3. Tout a fonctionné pour moi avec la bibliothèque. Le fichier que vous téléchargez à partir de ce site ressemblera à ceci: bd7e4a37c1f4dba2ebde9b9cd49f45ce.zip. Il doit être renommé comme: iarduino_Pressure_BMP.zip. Maintenant, nous devons installer la bibliothèque iarduino_Pressure_BMP dans le shell Arduino IDE.


Lancez Arduino IDE, allez dans le menu Sketch / Include Librari / Add.ZIP Library ... puis sélectionnez le fichier iarduino_Pressure_BMP.zip et cliquez sur le bouton Ouvrir. Vous devez également installer les bibliothèques:,. Après avoir installé les bibliothèques, nous redémarrons le shell Arduino IDE, c'est-à-dire le fermons et le redémarrons. Sélectionnez ensuite le menu Fichier / Échantillons / Pression iarduino BMP (capteurs de pression) / exemple.

Nous voyons le code dans la fenêtre.

Le code devra être légèrement modifié.

À la cinquième ligne, supprimez deux barres obliques «//» et ajoutez (0x76) ou (0x77) à la onzième ligne. (0x76) est l'adresse de la carte baromètre. Ma carte GY-BMP280-3.3 connectée au bus I2C s'est avérée avoir la même adresse (0x76). Comment connaître le numéro de l'appareil connecté au bus I2C? Vous obtiendrez la réponse à cette question en lisant l'article complet.

Nous avons donc corrigé le code dans la fenêtre, maintenant nous commençons à vérifier et à compiler le code dans le menu Sketch / Check / Compile. Si la vérification et la compilation du code réussissent, dans le menu Sketch / Load, nous démarrons l'enregistrement du programme dans Arduino Uno.

Si le téléchargement réussit, en ouvrant le moniteur de port série dans le menu: Outils / Moniteur de port série, nous verrons les données envoyées par la carte GY-BMP280-3.3.

Dans la capture d'écran suivante, le résultat de la carte GY-BMP280-3.3 fonctionnant sur un ordinateur sur lequel le shell Arduino IDE n'est pas installé. Les données sont reçues par le programme PuTTY.

Au même moment, un baromètre anéroïde de laboratoire a été photographié, qui était situé à côté de la carte GY-BMP280-3.3. En comparant les lectures de l'instrument, vous pouvez vous-même tirer des conclusions sur la précision de la carte GY-BMP280-3.3. Baromètre anéroïde certifié par un laboratoire d'État.


Troisième étape. Vérification de l'écran LCD avec le module d'interface I2C. Nous trouvons un écran LDC avec un module d'interface qui se connecte via le bus I2C à l'Arduino UNO.
Station météo domestique sur GY-BMP280-3.3 et Ds18b20

Nous vérifions son fonctionnement en utilisant des exemples du shell Arduino IDE. Mais avant cela, nous déterminons l'adresse du module d'interface. Mon module d'interface a une adresse 0x3F. J'ai inséré cette adresse dans la ligne d'esquisse: LiquidCrystal_I2C lcd (0x3F, 16.2);
J'ai déterminé cette adresse à l'aide du croquis «Scanner d'adresse de périphérique I2C» décrit dans.
J'ai lancé le shell Arduino IDE, à partir de l'article, j'ai copié le code du programme et collé sa fenêtre Arduino IDE.

J'ai commencé la compilation, puis j'ai écrit le code sur la carte Arduino UNO, à laquelle la carte GY-BMP280-3.3 et l'écran LDC avec le module d'interface I2C étaient connectés. Ensuite, dans le moniteur de port série, j'ai obtenu le résultat suivant. Mon module d'interface a une adresse 0x3F.

Quatrième étape. Vérification du capteur de température DS18b20. Nous le connectons comme suit.

La bibliothèque OneWire Arduino pour travailler avec le capteur de température DS18b20 est déjà installée.

Ouvrez l'échantillon DS18x20_Température, compilez, chargez, regardez le résultat de la mesure dans le moniteur du port série. Si tout fonctionne, passez à l'étape suivante.

Cinquième étape. Assemblage la maison stations météorologiques sur le GY-BMP280-3.3 et Ds18b20.
Nous assemblons l'appareil selon le schéma:

J'ai reçu le code de l'appareil en combinant tous les exemples en un seul et en définissant la sortie sur l'écran d'affichage LDC. Voici ce que j'ai obtenu:

// Décommentation pour une implémentation logicielle du bus I2C: //
// #define pin_SW_SDA 3 // Attribuez n'importe quelle broche Arduino pour qu'elle fonctionne comme une ligne SDA du bus logiciel I2C.
// #define pin_SW_SCL 9 // Affectez n'importe quelle broche Arduino à fonctionner comme une ligne SCL au bus logiciel I2C.
// Décommentez pour la compatibilité avec la plupart des cartes: //
#include
#include // La bibliothèque iarduino utilisera les méthodes et fonctions de la bibliothèque Wire.
#include // Bibliothèque pour travailler le LDC type 1602 sur le bus I2C

                                                            //
#include // Connectez la bibliothèque iarduino_Pressure_BMP pour travailler avec BMP180 ou BMP280.
capteur iarduino_Pressure_BMP (0x76); // Déclarez un objet capteur pour travailler avec un capteur de pression en utilisant les fonctions et méthodes de la bibliothèque iarduino_Pressure_BMP.
Écran LCD LiquidCrystal_I2C (0x3F, 16.2);
OneWire ds (10);
void setup () {
    lcd.init ();
    lcd.backlight ();
    Serial.begin (9600); // Lancer le transfert de données vers le moniteur du port série à 9600 bauds.
    retard (1000); // Nous attendons l'achèvement des transitoires lors de l'application de la puissance
    sensor.begin (73); // Lancer le travail avec le capteur. L'altitude actuelle sera prise à 73 m - la hauteur de la ville de Buzuluk au dessus du niveau de la mer
} //
boucle vide () {
// Lire les données et afficher: température en ° C, pression en mm. rt., changement de hauteur par rapport à la valeur spécifiée dans la fonction de début (par défaut 0 mètre).
lcd.setCursor (0,0); // définir le point de sortie "P =" sur le LDC
lcd.print ("P =");
lcd.print (sensor.pressure / 1000.3); // divise la valeur de P émise par BMP280 par 1000 et définit la sortie à 3 décimales
lcd.setCursor (12.0); // définir le point de sortie "kPa" sur le LDC
lcd.print ("kPa");
lcd.setCursor (0,1);
lcd.print ("T =");
lcd.print (sensor.temperature, 1); // définit la sortie à 1 décimale
lcd.setCursor (6.1);
// lcd.print ("C");
// lcd.setCursor (9,1);
// lcd.print ("H =");
// lcd.print (sensor.altitude, 1);
    if (sensor.read (1)) {Serial.println ((String) "CEHCOP BMP" + sensor.type + ": \ t P =" + sensor.pressure + "\ tMM.PT.CT, \ t T = "+ sensor.temperature +" * C, \ t \ t B = "+ sensor.altitude +" M. ");}
    else {Serial.println ("HET OTBETA OT CEHCOPA");}
// Lire les données et afficher: température en ° C et pression en Pa, pression en mm. rt., changement de hauteur par rapport à la valeur spécifiée dans la fonction de début (par défaut 0 mètre).
    if (sensor.read (2)) {Serial.println ((String) "CEHCOP BMP" + sensor.type + ": \ t P =" + sensor.pressure + "\ tPa, \ t \ t T =" + sensor.temperature + "* C, \ t \ t B =" + sensor.altitude + "M.");}
    else {Serial.println ("HET OTBETA OT CEHCOPA");}
    octet i;
  octet présent = 0;
  byte type_s;
  données d'octets [12];
  octet addr [8];
  flotter celsius, fahrenheit;
  if (! ds.search (addr)) {
    Serial.println ("Plus d'adresses.");
    Serial.println ();
    ds.reset_search ();
    retard (250);
    retour
  }
  Serial.print ("ROM =");
  pour (i = 0; i & lt; 8; i ++) {
    Serial.write ('');
    Serial.print (addr [i], HEX);
  }
  if (OneWire :: crc8 (addr, 7)! = addr [7]) {
      Serial.println ("CRC n'est pas valide!");
      retour
  }
  Serial.println ();
  // le premier octet ROM indique quelle puce
  switch (addr [0]) {
    cas 0x10:
      Serial.println ("Chip = DS18S20"); // ou ancien DS1820
      type_s = 1;
      casser;
    cas 0x28:
      Serial.println ("Chip = DS18B20");
      type_s = 0;
      casser;
    cas 0x22:
      Serial.println ("Chip = DS1822");
      type_s = 0;
      casser;
    par défaut:
      Serial.println ("Le périphérique n'est pas un périphérique de la famille DS18x20.");
      retour
  }
  ds.reset ();
  ds.select (addr);
  ds.write (0x44, 1); // démarre la conversion, le parasite étant sous tension à la fin
  
  retard (1000); // peut-être que 750 ms suffisent, peut-être pas
  // nous pourrions faire un ds.depower () ici, mais la réinitialisation s'en occupera.
  présent = ds.reset ();
  ds.select (addr);
  ds.write (0xBE); // Lire le bloc-notes
  Serial.print ("Data =");
  Serial.print (présent, HEX);
  Serial.print ("");
  pour (i = 0; i & lt; 9; i ++) {// nous avons besoin de 9 octets
    data [i] = ds.read ();
    Serial.print (données [i], HEX);
    Serial.print ("");
  }
  Serial.print ("CRC =");
  Serial.print (OneWire :: crc8 (données, 8), HEX);
  Serial.println ();
  // Convertit les données en température réelle
  // parce que le résultat est un entier signé 16 bits, il devrait
  // être stocké dans un type "int16_t", qui est toujours 16 bits
  // même lorsqu'il est compilé sur un processeur 32 bits.
  int16_t raw = (données [1] & lt; & lt; 8) | données [0];
  if (type_s) {
    raw = raw & lt; & lt; 3; // Résolution 9 bits par défaut
    if (données [7] == 0x10) {
      // "count count" donne une résolution complète de 12 bits
      raw = (raw & amp; 0xFFF0) + 12 - data [6];
    }
  } else {
    octet cfg = (données [4] & amp; 0x60);
    // à une résolution inférieure, les bits bas ne sont pas définis, alors mettons-les à zéro
    if (cfg == 0x00) raw = raw & amp; ~ 7; // Résolution 9 bits, 93,75 ms
    sinon si (cfg == 0x20) raw = raw & amp; ~ 3; // 10 bits res, 187,5 ms
    sinon si (cfg == 0x40) raw = raw & amp; ~ 1; // résolution 11 bits, 375 ms
    //// la valeur par défaut est une résolution de 12 bits, un temps de conversion de 750 ms
  }
  celsius = (float) raw / 16.0;
  fahrenheit = celsius * 1,8 + 32,0;
  Serial.print ("Température =");
  Serial.print (celsius);
  Serial.print ("Celsius");
  Serial.print (fahrenheit);
  Serial.println ("Fahrenheit");
lcd.setCursor (8.1); // définir le point de sortie "Tds =" sur le LDC
lcd.print ("Tds =");
lcd.print (celsius, 1);
    retard (3000);
}


Voici ce que j'ai obtenu:


La carte GY-BMP280-3.3 émet une pression en pascals, ce qui n'est pas très pratique. Je n'ai pas pu résoudre le problème de la façon de créer les données de pression de sortie de la carte GY-BMP280-3.3 en kilopascals. J'ai résolu ce problème dans la ligne de sortie de l'écran LDC.

lcd.print (sensor.pressure / 1000.3); // divise la valeur de P émise par BMP280 par 1000 et définit la sortie à 3 décimales
La carte GY-BMP280-3.3 fournit également des valeurs d'altitude.

sensor.begin (73); // Lancer le travail avec le capteur. L'altitude actuelle sera prise à 73 m - la hauteur de la ville de Buzuluk au dessus du niveau de la mer
Si vous vous détendez en mer et changez «sensor.begin (73);» sur "sensor.begin (0);" dans le code, puis compilez et enregistrez le programme sur la station météo domestique sur le GY-BMP280-3.3 et Ds18b20, et effectuez une sortie de hauteur sur l'affichage LDC, vous obtiendrez également un altimètre.
// lcd.setCursor (9,1);
// lcd.print ("H =");
// lcd.print (sensor.altitude, 1); // Imprimer les valeurs de hauteur en mètres avec une décimale
L'alimentation est fournie au circuit dans ma version via un câble USB. Vous pouvez utiliser un convertisseur d'impulsions de suralimentation basse tension 5V / 600 mA et votre station météo deviendra portable. Ce type d'alimentation est bien décrit dans article.

Compilation réussie!
5
8.8
6.3

Ajoutez un commentaire

    • souriresouritxaxaokne sais pasYahoonea
      patronse gratterfououioui-ouiagressifsecret
      désolédansedanse2danse3pardonaiderles boissons
      arrêteramisbonbonsifflerévanouirla langue
      fumerapplaudircraydéclarermoqueurdon-t_mentiontélécharger
      chaleurirritérire1mdaréunionmasquagenégatif
      not_ipop-cornpunirlireeffrayerfait peurrecherche
      railleriemerci_vousçato_clueumnikaigud'accord
      mauvaisabeilleblack_eyeblum3rougirse vanterennui
      censuréplaisanteriesecret2menacervictoireyusun_bespectacled
      shokrespektlolprévalubienvenuekrutoyya_za
      ya_dobryiaidene_huliganne_othodifludinterdirefermer

Nous vous conseillons de lire:

Donnez-le au smartphone ...