Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Weather Station V 2.0

Mide la temperatura, la presión y la humedad en tu habitación.

Historia

En este proyecto usaremos Adafruit Starter Pack para Windows 10 IoT Core en componentes del kit Raspberry Pi 2 para crear un proyecto que usa un sensor para leer la temperatura, presión , humedad y altitud.

NOTA:hay dos versiones del kit, una incluye el sensor BMP280 y la otra el BME280. Si tiene el BMP280, querrá ir al proyecto Weather Station v1 https://www.hackster.io/windows-iot/weather-station

Hardware

Conecte la Raspberry Pi2 a la placa de pruebas y los otros componentes según el diagrama de Fritzing en la sección "Esquemas" a continuación.

Software

Puede descargar el proyecto de inicio de código desde https://github.com/ms-iot/adafruitsample y lo guiaremos a través de la adición del código necesario para hablar al servicio web y obtenga su PIN en el mapa. ¿Qué mapa?

Abra "Lesson_203v2 \ StartSolution \ Lesson_203v2.sln" y abra el archivo mainpage.xaml.cs.

Hemos completado algunos métodos como punto de partida para usted en esta solución. Si desea avanzar, puede encontrar una solución con todo el código completado en:"Lesson_203v2 \ FullSolution \ Lesson_203v2.sln"

MainPage.xaml.cs

Abra el archivo MainPage.xaml.cs.

Agregue una referencia a la clase del sensor (BME280).

 clase parcial sellada pública MainPage:Page {// Crea un nuevo objeto para nuestra clase de sensor BME280 BME280; 

Ahora agregamos código en el método OnNavigatedTo que creará un nuevo objeto BME280 para el sensor e inicializará el objeto.

 // Crea un nuevo objeto para nuestro sensor classBME280 =new BME280Sensor (); // Inicializa el sensorawait BME280.Initialize (); 

Luego agregamos código para hacer lo siguiente:

 // Inicializarlos a 0.float temp =0; presión de flotación =0; altitud de flotación =0; humedad de flotación =0; // Crear una constante para la presión al nivel del mar. // Esto se basa en su presión local al nivel del mar (Unidad:Hectopascal) const float seaLevelPressure =1022.00f; // Lea 10 muestras de los datos para (int i =0; i <10; i ++) {temp =await BME280.ReadTemperature (); presión =espera BME280.ReadPreasure (); altitud =espera BME280.ReadAltitude (seaLevelPressure); humedad =espera BME280.ReadHumidity (); // Escribe los valores en tu consola de depuración Debug.WriteLine ("Temperature:" + temp.ToString () + "deg C"); Debug.WriteLine ("Humedad:" + humedad.ToString () + "%"); Debug.WriteLine ("Presión:" + presión.ToString () + "Pa"); Debug.WriteLine ("Altitud:" + altitud.ToString () + "m"); Debug.WriteLine ("");} 

BME280.cs

Abra el archivo BME280.cs.

La primera parte del código es hacer una lista de las direcciones de los diferentes registros del BME280. Estos valores se pueden encontrar en la hoja de datos BMP280.

En la clase BME280, agregue lo siguiente después de la enumeración para direcciones de registro.

 // Cadena para el nombre descriptivo del busconst I2C cadena I2CControllerName ="I2C1"; // Crear un dispositivo I2C privado I2cDevice bme280 =null; // Crear nuevos datos de calibración para el sensorBME280_CalibrationData CalibrationData; / / Variable para comprobar si el dispositivo está inicializado bool init =false; 

Luego agregue el siguiente código en la función Initialize para:

 // Método para inicializar BME280 sensorpublic async Task Initialize () {Debug.WriteLine ("BME280 ::Initialize"); try {// Cree una instancia de I2CConnectionSettings utilizando la dirección de dispositivo de BME280 I2cConnectionSettings settings =new I2cConnectionSettings (BME280_Address); // Establezca la velocidad de conexión del bus I2C en la configuración de modo rápido.BusSpeed ​​=I2cBusSpeed.FastMode; // Utilice el selector de dispositivo I2CBus para crear una cadena de sintaxis de consulta avanzada string aqs =I2cDevice.GetDeviceSelector (I2CControllerName); // Utilice la clase Windows.Devices.Enumeration.DeviceInformation para crear una colección utilizando la cadena de sintaxis de consulta avanzada DeviceInformationCollection dis =await DeviceInformation.FindAllAsync (aqs); // Cree una instancia del dispositivo BME280 I2C utilizando el ID de dispositivo de I2CBus y I2CConnectionSettings bme280 =await I2cDevice.FromIdAsync (dis [0] .Id, settings); // Compruebe si se encontró el dispositivo if (bme280 ==null) {Debug.WriteLine ("Dispositivo no encontrado"); }} catch (Excepción e) {Debug.WriteLine ("Excepción:" + e.Message + "\ n" + e.StackTrace); lanzar; }} 

Agregue el siguiente código en la función Begin para:

 Tarea asíncrona privada Begin () {Debug.WriteLine ("BME280 ::Begin"); byte [] WriteBuffer =nuevo byte [] {(byte) eRegisters.BMP280_REGISTER_CHIPID}; byte [] ReadBuffer =nuevo byte [] {0xFF}; // Leer la firma del dispositivo bmp280.WriteRead (WriteBuffer, ReadBuffer); Debug.WriteLine ("Firma BME280:" + ReadBuffer [0] .ToString ()); // Verifique la firma del dispositivo if (ReadBuffer [0]! =BMP280_Signature) {Debug.WriteLine ("BMP280 ::Begin Signature Mismatch."); regreso; } // Establece la variable initalize en true init =true; // Leer la tabla de coeficientes CalibrationData =await ReadCoefficeints (); // Escribir registro de control await WriteControlRegister (); // Escribe el registro de control de humedad en espera de WriteControlRegisterHumidity ();} 

Agregue el siguiente código a las siguientes 2 funciones para escribir en los registros de control.

 tarea asincrónica privada WriteControlRegisterHumidity () {byte [] WriteBuffer =new byte [] {(byte) eRegisters.BMP280_REGISTER_CONTROLHUMID, 0x03}; bmp280.Write (WriteBuffer); espera Task.Delay (1); return;} // Método para escribir 0x3F en el control registerprivate async Tarea WriteControlRegister () {byte [] WriteBuffer =new byte [] {(byte) eRegisters.BMP280_REGISTER_CONTROL, 0x3F}; bmp280.Write (WriteBuffer); espera Task.Delay (1); volver;} 

Agregue el siguiente código a la función ReadUInt16_LittleEndian para:

 // Método para leer un valor de 16 bits de un registro y devolverlo en formato little endianprivate UInt16 ReadUInt16_LittleEndian (registro de bytes) {UInt16 value =0; byte [] writeBuffer =nuevo byte [] {0x00}; byte [] readBuffer =nuevo byte [] {0x00, 0x00}; writeBuffer [0] =registro; bmp280.WriteRead (writeBuffer, readBuffer); int h =readBuffer [1] <<8; int l =readBuffer [0]; valor =(UInt16) (h + l); valor de retorno;} 

Agregue el siguiente código a la función ReadByte para leer datos de 8 bits de un registro.

 // Método para leer un valor de 8 bits de un byte de registro privado ReadByte (registro de bytes) {valor de byte =0; byte [] writeBuffer =nuevo byte [] {0x00}; byte [] readBuffer =nuevo byte [] {0x00}; writeBuffer [0] =registro; bmp280.WriteRead (writeBuffer, readBuffer); valor =readBuffer [0]; valor de retorno;} 

Las siguientes 3 funciones están listas para usted. La información necesaria para escribir estas funciones se puede encontrar en la hoja de datos.

ReadCoefficeints:Esta es la función donde se leen todos los datos de calibración de las direcciones de registro.

BMP280_compensate_T_double:En esta función, la temperatura en ºC se calcula usando la fórmula de compensación en la hoja de datos BMP280.

BMP280_compensate_P_Int64:En esta función, la presión en Pa se calcula usando la fórmula de compensación en la hoja de datos BMP280.

Agregue el siguiente código para completar la función ReadTemperature.

 public async Task  ReadTemperature () {// Asegúrese de que el dispositivo I2C esté inicializado si (! init) await Begin (); // Leer el MSB, LSB y los bits 7:4 (XLSB) de la temperatura del byte de registros BMP280 tmsb =ReadByte ((byte) eRegisters.BMP280_REGISTER_TEMPDATA_MSB); byte tlsb =ReadByte ((byte) eRegisters.BMP280_REGISTER_TEMPDATA_LSB); byte txlsb =ReadByte ((byte) eRegisters.BMP280_REGISTER_TEMPDATA_XLSB); // bits 7:4 // Combina los valores en un entero de 32 bits Int32 t =(tmsb <<12) + (tlsb <<4) + (txlsb>> 4); // Convertir el valor bruto a la temperatura en grados C double temp =BMP280_compensate_T_double (t); // Devuelve la temperatura como un valor flotante return (float) temp;} 

Repita los mismos pasos para completar la función ReadPressure.

 public async Task  ReadPreasure () {// Asegúrese de que el dispositivo I2C esté inicializado si (! init) await Begin (); // Lea primero la temperatura para cargar el valor t_fine para la compensación if (t_fine ==Int32.MinValue) {await ReadTemperature (); } // Leer el MSB, LSB y los bits 7:4 (XLSB) de la presión del byte de registros BMP280 tmsb =ReadByte ((byte) eRegisters.BMP280_REGISTER_PRESSUREDATA_MSB); byte tlsb =ReadByte ((byte) eRegisters.BMP280_REGISTER_PRESSUREDATA_LSB); byte txlsb =ReadByte ((byte) eRegisters.BMP280_REGISTER_PRESSUREDATA_XLSB); // bits 7:4 // Combina los valores en un entero de 32 bits Int32 t =(tmsb <<12) + (tlsb <<4) + (txlsb>> 4); // Convertir el valor bruto a la presión en Pa Int64 pres =BMP280_compensate_P_Int64 (t); // Devuelve la temperatura como valor flotante return ((float) pres) / 256;} 

Finalmente completa la función ReadAltitude:

 // Método para tomar la presión a nivel del mar en Hectopascales (hPa) como parámetro y calcular la altitud usando la presión actual. Tarea asíncrona pública  ReadAltitude (float seaLevel) {// Asegúrese el dispositivo I2C se inicializa si (! init) aguarda Begin (); // Leer la primera presión de flotación presión =esperar ReadPreasure (); // Convierta la presión a Hectopascales (hPa) presión / =100; // Calcula y devuelve la altitud usando la fórmula barométrica internacional return 44330.0f * (1.0f - (float) Math.Pow ((pressure / seaLevel), 0.1903f));} 

¡Su proyecto ya está listo para implementarse!

Resultado esperado

Temperatura:24,46189 grados C

Humedad:54,372%

Presión:99738,73 Pa

Altitud:205,1726 m

Fuente: Estación meteorológica V 2.0


Proceso de manufactura

  1. Estación meteorológica basada en Raspberry Pi
  2. Estación meteorológica Raspberry Pi 2
  3. Estación meteorológica Raspberry Pi
  4. Monitoreo remoto del clima usando Raspberry Pi
  5. Únase al IOT con su estación meteorológica - CWOP
  6. Monitor del tiempo
  7. Arduino + ESP Weather Box
  8. $ 10 Estación meteorológica portátil Arduino (AWS)
  9. eDOT - Reloj de precisión y estación meteorológica basados ​​en Arduino
  10. Estación meteorológica ThingSpeak Arduino
  11. Estación meteorológica local