» Electrònica » Arduino »Estació meteorològica domèstica als GY-BMP280-3.3 i Ds18b20

Estació meteorològica domèstica a GY-BMP280-3.3 i Ds18b20


Vull recollir fes-ho tu mateix instrument per mesurar la pressió atmosfèrica i la temperatura. El sensor de temperatura ha de ser remot i ajustat, ja que ha de mesurar la temperatura a una certa distància del dispositiu. M'agradaria tenir un dispositiu tan portàtil amb un rang de treball de -30 ° C a 50 ° C. Però això requereix que tots els components puguin treballar en aquest interval de temperatura. Els components que poden funcionar en un interval de temperatures estès són més cars i és més difícil comprar-los.
Per complir el meu somni a la realitat, se’m ajudarà el consell, que vaig descriure a l’article “Placa GY-BMP280-3.3 per a la mesura de la pressió i la temperatura baromètriques».

Des de la pràctica, se sap que durant el muntatge i la configuració electrònica abans de la seva fabricació, heu de comprovar la rendibilitat de tots els materials i components de cadascun per separat. En cas contrari, podreu confondre més tard i, per tant, el producte electrònic no funcionarà i serà molt difícil trobar la causa del mal funcionament.

Comencem

Primera etapa. Instal·leu un shell de programari gratuït al vostre ordinador Arduino IDE per escriure programes (esbossos), compilar-los i després escriure-los al microcontrolador Mega328P instal·lat al tauler. Us recomano que descarregueu la versió shell de ARDUINO 1.6.5. Per què? Inicialment, el projecte ARDUINO era un, ara els desenvolupadors s’han dispersat i continuen desenvolupant el sistema ARDUINO, però cadascun a la seva manera, amb petits matisos. He utilitzat la versió ARDUINO 1.6.5. S'hauria d'instal·lar i provar per col·laborar amb la placa Arduino Uno utilitzant els exemples més senzills.

Segona etapa. Comprovem la placa GY-BMP280-3.3 per mesurar la pressió baromètrica i la temperatura. Agafem 4 fils, els connectem GY-BMP280-3.3 i Arduino Uno, tal com es mostra a la foto i diagrama. Les corbes de línies primes i multicolors són conductors.



Comencem a comprovar la placa GY-BMP280-3.3. Per fer-ho, cal instal·lar la biblioteca a l’ID Arduino, escrita pels programadors que treballen al lloc. Per regla general, després d’instal·lar la biblioteca a l’ID Arduino, apareixen exemples (mostres) de codi. Si canviem lleugerament el codi de mostra, podem compilar-lo en dades que el microcontrolador entén i, després, enviar-lo a la memòria del microcontrolador. Podeu trobar un exemple (mostra) posant atenció a les dues fotos de pantalla que hi ha a continuació.


Després d’escriure dades al microcontrolador de la placa Arduino Uno, comença immediatament a executar el programa (codi) i envia les dades mitjançant un cable USB a l’ordinador al qual està connectada la placa Arduino Uno.I podem veure el resultat de la mesura de la placa GY-BMP280-3.3 a la finestra IDE d'Arduino, anomenada "monitor de port sèrie".


Podem veure el resultat de les mesures a la placa GY-BMP280-3.3 al programa estàndard de Windows Hyper Terminal, després de tancar el shell Arduino Uno i configurar una sessió al programa Hyper Terminal. És a dir, podem obtenir els resultats de la placa GY-BMP280-3.3 connectant Arduino Uno a qualsevol ordinador amb un cable USB on estigui instal·lat el controlador de la placa Arduino Uno. Hi ha diverses biblioteques per treballar amb GY-BMP280-3.3. Tot funcionava per a mi amb la biblioteca. El fitxer que descarregueu des d'aquest lloc serà el següent: bd7e4a37c1f4dba2ebde9b9cd49f45ce.zip. Ha de canviar el nom de: iarduino_Pressure_BMP.zip. Ara hem d’instal·lar la biblioteca iarduino_Pressure_BMP al shell IDE d’Arduino.


Inicieu l'ID Arduino, aneu al menú Sketch / Include Librari / Add.ZIP ... i després seleccioneu el fitxer iarduino_Pressure_BMP.zip i feu clic al botó Obrir. També cal instal·lar les biblioteques:,. Després d’instal·lar les biblioteques, reiniciem el shell IDE d’Arduino, és a dir, el tanquem i el tornem a iniciar. A continuació, seleccioneu el menú Fitxer / Samples / iarduino Pression BMP (sensors de pressió) / exemple.

Veiem el codi a la finestra.

El codi haurà de ser lleugerament modificat.

A la cinquena línia, traieu dos ratlles “//” i afegiu-hi (0x76) o (0x77) a l’onzena línia. (0x76) és l’adreça de la placa del baròmetre. La meva placa GY-BMP280-3.3 connectada al bus I2C va tenir la mateixa adreça (0x76). Com esbrinar el nombre del dispositiu connectat al bus I2C? Obtindreu la resposta a aquesta pregunta llegint l'article complet.

Així doncs, hem corregit el codi a la finestra, ara comencem a comprovar i recopilar el codi al menú Dibuixar / Comprovar / Recopilar. Si la verificació i la compilació del codi tenen èxit, aleshores, al menú Esbós / Càrrega, iniciem la gravació del programa a Arduino Uno.

Si la baixada té èxit, llavors obrint el monitor de port sèrie al menú: Eines / Serial Port Monitor, veurem les dades enviades per la placa GY-BMP280-3.3.

A la captura de pantalla següent, el resultat de la placa GY-BMP280-3.3 que funciona en un ordinador en el qual no està instal·lat el shell IDE Arduino. Les dades són rebudes pel programa PuTTY.

Al mateix temps, es va fotografiar un baròmetre aneroide del laboratori, situat al costat de la placa GY-BMP280-3.3. Si compareu les lectures de l'instrument, podeu treure conclusions sobre la precisió de la placa GY-BMP280-3.3. Baròmetre aneroide certificat per laboratori estatal.


Tercera etapa. Comprovació de la pantalla LCD amb el mòdul d'interfície I2C. Trobem una pantalla LDC amb un mòdul d’interfície que es connecta mitjançant el bus I2C a la UNU d’Arduino.
Estació meteorològica domèstica a GY-BMP280-3.3 i Ds18b20

Comprovem el seu funcionament mitjançant exemples del shell IDE Arduino. Però abans d’això, determinem l’adreça del mòdul d’interfície. El meu mòdul d'interfície té una adreça de 0x3F. Vaig inserir aquesta adreça a la línia d'esbós: LiquidCrystal_I2C lcd (0x3F, 16.2);
Vaig determinar aquesta adreça mitjançant l'esbós "escàner d'adreces del dispositiu I2C" descrit a.
Vaig llançar el shell IDE d'Arduino, a partir de l'article vaig copiar el codi del programa i vaig enganxar la finestra IDE d'Arduino.

Vaig començar la compilació, després vaig escriure el codi a la placa Arduino UNO, a la qual es van connectar la placa GY-BMP280-3.3 i la pantalla LDC amb el mòdul d'interfície I2C. Al monitor de port sèrie vaig obtenir el següent resultat. El meu mòdul d'interfície té una adreça de 0x3F.

Quarta etapa. Comprovació del sensor de temperatura DS18b20. La connectem de la següent manera.

La biblioteca OneWire Arduino per treballar amb el sensor de temperatura DS18b20 ja està instal·lada.

Obriu l'exemple DS18x20_Temperature, compileu, carregueu, observeu el resultat de la mesura al monitor de port sèrie. Si tot funciona, passeu al següent pas.

Cinquena etapa. Muntatge a casa estacions meteorològiques als GY-BMP280-3.3 i Ds18b20.
Muntem el dispositiu segons l’esquema:

Vaig rebre el codi del dispositiu combinant tots els exemples en un mateix i configurant la sortida a la pantalla de visualització LDC. Aquí teniu el que tinc:

// Compromís per a una implementació de programari del bus I2C: //
// #define pin_SW_SDA 3 // Assigna qualsevol passador Arduino perquè funcioni com a línia SDA del bus de programari I2C.
// #define pin_SW_SCL 9 // Assigna qualsevol passador Arduino perquè funcioni com a línia SCL al bus de programari I2C.
// Compromís per a la compatibilitat amb la majoria de taulers: //
#incloure
#include // La biblioteca iarduino utilitzarà els mètodes i les funcions de la biblioteca Wire.
#include // Biblioteca per treballar el tipus LDC 1602 al bus I2C

                                                            //
#include // Connecta la biblioteca iarduino_Pressure_BMP per treballar amb BMP180 o BMP280.
sensor iarduino_Pressure_BMP (0x76); // Declareu un objecte del sensor per treballar amb un sensor de pressió mitjançant les funcions i mètodes de la biblioteca iarduino_Pressure_BMP.
LiquidCrystal_I2C lcd (0x3F, 16.2);
OneWire ds (10);
void setup () {
    lcd.init ();
    lcd.backlight ();
    Serial.begin (9600); // Iniciar la transferència de dades al monitor de port sèrie a 9600 baud.
    retard (1000); // Estem esperant la finalització dels transitoris quan s'apliqui energia
    sensor.begin (73); // Iniciar el treball amb el sensor. L'altitud actual tindrà una superfície de 73 m. - l'alçada de la ciutat de Buzuluk sobre el nivell del mar
} //
void loop () {
// Llegiu les dades i visualitzeu: temperatura en ° C, pressió en mm. rt., canvi d'altura en relació amb l'especificat a la funció inicial (predeterminat 0 metres).
lcd.setCursor (0,0); // definiu el punt de sortida "P =" al LDC
lcd.print ("P =");
lcd.print (sensor.pressure / 1000.3); // divideix el valor de P emès per BMP280 per 1000 i estableix la sortida de 3 xifres decimals
lcd.setCursor (12.0); // definiu el punt de sortida "kPa" al LDC
lcd.print ("kPa");
lcd.setCursor (0,1);
lcd.print ("T =");
lcd.print (sensor.temperature, 1); // estableix la sortida d'1 punt decimal
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 ((Cadena) "CEHCOP BMP" + sensor.type + ": \ t P =" + sensor.pressure + "\ tMM.PT.CT, \ t T = "+ sensor.temperature +" * C, \ t \ t B = "+ sensor.altitud +" M. ");}
    else {Serial.println ("HET OTBETA OT CEHCOPA");}
// Llegiu les dades i visualització: temperatura en ° C i pressió en Pa, pressió en mm. rt., canvi d'altura en relació amb l'especificat a la funció inicial (predeterminat 0 metres).
    if (sensor.read (2)) {Serial.println ((Cadena) "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");}
    byte i;
  byte present = 0;
  tipus de byte;
  dades de bytes [12];
  byte addr [8];
  float celsius, fahrenheit;
  if (! ds.search (addr)) {
    Serial.println ("No hi ha més adreces.");
    Serial.println ();
    ds.reset_search ();
    retard (250);
    tornar
  }
  Serial.print ("ROM =");
  per a (i = 0; i & lt; 8; i ++) {
    Serial.write ('');
    Serial.print (addr [i], HEX);
  }
  if (OneWire :: crc8 (addr, 7)! = addr [7]) {
      Serial.println ("El CRC no és vàlid!");
      tornar
  }
  Serial.println ();
  // el primer byte ROM indica quin xip
  switch (addr [0]) {
    estoig 0x10:
      Serial.println ("Xip = DS18S20"); // o DS1820 antic
      tipus_s = 1;
      trencar;
    estoig 0x28:
      Serial.println ("Xip = DS18B20");
      type_s = 0;
      trencar;
    caixa 0x22:
      Serial.println ("Xip = DS1822");
      type_s = 0;
      trencar;
    predeterminat:
      Serial.println ("El dispositiu no és un dispositiu familiar DS18x20.");
      tornar
  }
  ds.reset ();
  ds.select (addr);
  ds.write (0x44, 1); // iniciar la conversió, amb la presa de paràsit encesa al final
  
  retard (1000); // Potser 750ms és suficient, potser no
  // aquí podríem fer un ds.depower (), però el restabliment tindrà cura.
  present = ds.reset ();
  ds.select (addr);
  ds.write (0xBE); // Llegiu Scratchpad
  Serial.print ("Dades =");
  Serial.print (present, HEX);
  Serial.print ("");
  per (i = 0; i & lt; 9; i ++) {// necessitem 9 bytes
    data [i] = ds.read ();
    Serial.print (dades [i], HEX);
    Serial.print ("");
  }
  Serial.print ("CRC =");
  Serial.print (OneWire :: crc8 (dades, 8), HEX);
  Serial.println ();
  // Convertiu les dades a la temperatura real
  // perquè el resultat és un nombre enter signat de 16 bits, hauria de ser
  // es desa en un tipus "int16_t", que sempre és de 16 bits
  // fins i tot quan es compila en un processador de 32 bits.
  int16_t cru = (dades [1] & lt; & lt; 8) | dades [0];
  if (type_s) {
    cru = cru & lt; & lt; 3; // Resolució predeterminada de 9 bits
    if (dades [7] == 0x10) {
      // "Count rest" dóna una resolució completa de 12 bits
      raw = (raw & amp; 0xFFF0) + 12 - dades [6];
    }
  } més {
    byte cfg = (dades [4] & amp; 0x60);
    // a menys res, els bits baixos no estan definits, així que anem a zero
    if (cfg == 0x00) cru = cru & amp; ~ 7; // Resolució de 9 bits, 93,75 ms
    else if (cfg == 0x20) raw = raw & amp; ~ 3; // Res de 10 bits, 187,5 ms
    else if (cfg == 0x40) raw = raw & amp; ~ 1; // 11 bits res, 375 ms
    //// El predeterminat és una resolució de 12 bits, un temps de conversió de 750 ms
  }
  celsius = (flotador) cru / 16,0;
  fahrenheit = celsius * 1,8 + 32,0;
  Serial.print ("Temperatura =");
  Serial.print (celsius);
  Serial.print ("Celsius");
  Serial.print (fahrenheit);
  Serial.println ("Fahrenheit");
lcd.setCursor (8,1); // definiu el punt de sortida "Tds =" del LDC
lcd.print ("Tds =");
lcd.print (celsius, 1);
    retard (3000);
}


Aquí teniu el que tinc:


La placa GY-BMP280-3.3 proporciona pressió a les passcals, cosa poc convenient. No he pogut resoldre el problema de com fer les dades de pressió de sortida de la placa GY-BMP280-3.3 en quilopascals. He solucionat aquest problema a la línia de sortida de la pantalla LDC.

lcd.print (sensor.pressure / 1000.3); // divideix el valor de P emès per BMP280 per 1000 i estableix la sortida de 3 xifres decimals
La placa GY-BMP280-3.3 també proporciona valors d’altitud.

sensor.begin (73); // Iniciar el treball amb el sensor. L'altitud actual tindrà una superfície de 73 m. - l'alçada de la ciutat de Buzuluk sobre el nivell del mar
Si us relaxareu al mar i canvieu de "sensor.begin (73);" a "sensor.begin (0);" al codi, i després compilar i guardar el programa a l’estació meteorològica domèstica als GY-BMP280-3.3 i Ds18b20 i fer una sortida d’alçada a la pantalla LDC, també obtindreu un altímetre.
// lcd.setCursor (9,1);
// lcd.print ("H =");
// lcd.print (sensor.altitude, 1); // Imprimeix els valors d'altura en metres amb un punt decimal
L'alimentació es subministra al circuit de la meva versió mitjançant un cable USB. Podeu utilitzar un convertidor d’impulsos de baix voltatge de 5V / 600 mA i la vostra estació meteorològica es convertirà en portàtil. Aquest tipus d’alimentació està ben descrit a article.

Recopilació exitosa!
5
8.8
6.3

Afegeix un comentari

    • somriuresomriuxaxad'acordno ho séyahoonea
      capratllarximplesísí-síagressiusecret
      ho sentoballarballar2ballar3perdóajudarbegudes
      pararamicsbébondatxiuletswoonllengua
      fumaraplaudintcranideclararderisiudon-t_mentiondescarregar
      calorirritariure1mdareuniómosquitnegatiu
      no_icrispetescastigarllegirporespantosbuscar
      burlargràcies_youaixòto_clueumnikagutd'acord
      dolentbeeeblack_eyeblum3ruborpresumirl'avorriment
      censuradaplaersecret2amenaçarvictòriatusun_bespectacled
      xocrespectlolpreveurebenvingudaKrutoyja_za
      ja_dobryiajudantne_huliganne_othodifludprohibicióa prop

Us aconsellem que llegiu:

Doneu-lo al telèfon intel·ligent ...