Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Estação meteorológica V 2.0

Meça a temperatura, pressão e umidade em seu sala.


História

Neste projeto, usaremos o Adafruit Starter Pack para Windows 10 IoT Core em componentes do kit Raspberry Pi 2 para criar um projeto que usa um sensor para ler a temperatura, pressão , umidade e altitude.

NOTA:existem duas versões do kit, uma inclui o sensor BMP280 e a outra o BME280. Se você tiver o BMP280, vá para o projeto Weather Station v1 https://www.hackster.io/windows-iot/weather-station

Hardware

Conecte o Raspberry Pi2 à placa de ensaio e aos outros componentes de acordo com o diagrama de Fritzing na seção “Esquemas” abaixo.

Software

Você pode baixar o projeto de início de código em https://github.com/ms-iot/adafruitsample e nós o guiaremos pela adição do código necessário para conversar para o serviço da web e coloque seu PIN no mapa. Qual mapa?

Abra “Lesson_203v2 \ StartSolution \ Activity_203v2.sln“ e abra o arquivo mainpage.xaml.cs.

Incluímos alguns métodos como ponto de partida para você nesta solução. Se quiser avançar, você pode encontrar uma solução com todo o código concluído em:“Lesson_203v2 \ FullSolution \ Lesson_203v2.sln”

MainPage.xaml.cs

Abra o arquivo MainPage.xaml.cs.

Adicione uma referência à classe do sensor (BME280).

 classe parcial selada pública MainPage:Página {// Crie um novo objeto para nossa classe de sensor BME280 BME280; 

Agora adicionamos o código no método OnNavigatedTo que criará um novo objeto BME280 para o sensor e inicializará o objeto.

 // Criar um novo objeto para nosso sensor classBME280 =new BME280Sensor (); // Inicializar o sensorawait BME280.Initialize (); 

Em seguida, adicionamos o código para fazer o seguinte:

 // Inicialize-os para 0.float temp =0; float pressure =0; float altitude =0; float umidade =0; // Crie uma constante para a pressão ao nível do mar. // Isso é baseado em sua pressão local ao nível do mar (Unidade:Hectopascal) const float seaLevelPressure =1022.00f; // Leia 10 amostras dos dados para (int i =0; i <10; i ++) {temp =await BME280.ReadTemperature (); pressão =espera BME280.ReadPreasure (); altitude =espera BME280.ReadAltitude (seaLevelPressure); umidade =aguardar BME280.ReadHumidity (); // Grave os valores em seu console de depuração Debug.WriteLine ("Temperature:" + temp.ToString () + "deg C"); Debug.WriteLine ("Umidade:" + umidade.ToString () + "%"); Debug.WriteLine ("Pressão:" + pressure.ToString () + "Pa"); Debug.WriteLine ("Altitude:" + altitude.ToString () + "m"); Debug.WriteLine ("");} 

BME280.cs

Abra o arquivo BME280.cs.

A primeira parte do código é fazer uma lista dos endereços dos diferentes registros no BME280. Esses valores podem ser encontrados na folha de dados do BMP280.

Na classe BME280, adicione o seguinte após o enum para endereços de registro.

 // String para o nome amigável do busconst I2C string I2CControllerName ="I2C1"; // Criar um dispositivo I2C privado I2cDevice bme280 =null; // Criar novos dados de calibração para o sensorBME280_CalibrationData CalibrationData; / / Variável para verificar se o dispositivo foi inicializado; bool init =false; 

Em seguida, adicione o seguinte código na função Initialize para:

 // Método para inicializar o BME280 sensorpublic assíncrono Tarefa Initialize () {Debug.WriteLine ("BME280 ::Initialize"); try {// Instancie o I2CConnectionSettings usando o endereço do dispositivo do BME280 I2cConnectionSettings settings =new I2cConnectionSettings (BME280_Address); // Defina a velocidade do barramento I2C de conexão para as configurações de modo rápido.BusSpeed ​​=I2cBusSpeed.FastMode; // Use o seletor de dispositivo I2CBus para criar uma string de sintaxe de consulta avançada string aqs =I2cDevice.GetDeviceSelector (I2CControllerName); // Use a classe Windows.Devices.Enumeration.DeviceInformation para criar uma coleção usando a sintaxe de consulta avançada string DeviceInformationCollection dis =await DeviceInformation.FindAllAsync (aqs); // Instancie o dispositivo BME280 I2C usando a id do dispositivo I2CBus e I2CConnectionSettings bme280 =await I2cDevice.FromIdAsync (dis [0] .Id, settings); // Verifique se o dispositivo foi encontrado if (bme280 ==null) {Debug.WriteLine ("Dispositivo não encontrado"); }} catch (Exception e) {Debug.WriteLine ("Exception:" + e.Message + "\ n" + e.StackTrace); lançar; }} 

Adicione o seguinte código na função Begin para:

 tarefa assíncrona privada Begin () {Debug.WriteLine ("BME280 ::Begin"); byte [] WriteBuffer =novo byte [] {(byte) eRegisters.BMP280_REGISTER_CHIPID}; byte [] ReadBuffer =novo byte [] {0xFF}; // Lê a assinatura do dispositivo bmp280.WriteRead (WriteBuffer, ReadBuffer); Debug.WriteLine ("Assinatura BME280:" + ReadBuffer [0] .ToString ()); // Verifique a assinatura do dispositivo if (ReadBuffer [0]! =BMP280_Signature) {Debug.WriteLine ("BMP280 ::Begin Signature Mismatch."); Retorna; } // Defina a variável initalize para true init =true; // Lê a tabela de coeficientes CalibrationData =await ReadCoefficeints (); // Registro de controle de gravação aguarda WriteControlRegister (); // Grava o registro de controle de umidade e aguarda WriteControlRegisterHumidity ();} 

Adicione o seguinte código às próximas 2 funções para gravar nos registradores de controle.

 tarefa assíncrona privada WriteControlRegisterHumidity () {byte [] WriteBuffer =novo byte [] {(byte) eRegisters.BMP280_REGISTER_CONTROLHUMID, 0x03}; bmp280.Write (WriteBuffer); aguardar Task.Delay (1); return;} // Método para gravar 0x3F no registro de controle privado assíncrono Tarefa WriteControlRegister () {byte [] WriteBuffer =new byte [] {(byte) eRegisters.BMP280_REGISTER_CONTROL, 0x3F}; bmp280.Write (WriteBuffer); aguardar Task.Delay (1); return;} 

Adicione o seguinte código à função ReadUInt16_LittleEndian para:

 // Método para ler um valor de 16 bits de um registro e retorná-lo no formato little endianprivate UInt16 ReadUInt16_LittleEndian (registro de byte) {UInt16 value =0; byte [] writeBuffer =novo byte [] {0x00}; byte [] readBuffer =novo 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;} 

Adicione o seguinte código à função ReadByte para ler dados de 8 bits de um registro.

 // Método para ler um valor de 8 bits de um registro privado byte ReadByte (registro de byte) {valor do byte =0; byte [] writeBuffer =novo byte [] {0x00}; byte [] readBuffer =novo byte [] {0x00}; writeBuffer [0] =registro; bmp280.WriteRead (writeBuffer, readBuffer); valor =readBuffer [0]; valor de retorno;} 

As próximas 3 funções são feitas para você. As informações necessárias para escrever essas funções podem ser encontradas na ficha técnica.

ReadCoefficeints:Esta é a função onde todos os dados de calibração são lidos dos endereços de registro.

BMP280_compensate_T_double:Nesta função, a temperatura em ºC é calculada usando a fórmula de compensação na folha de dados BMP280.

BMP280_compensate_P_Int64:nesta função, a pressão em Pa é calculada usando a fórmula de compensação na folha de dados BMP280.

Adicione o seguinte código para completar a função ReadTemperature.

 public assíncrono Tarefa  ReadTemperature () {// Certifique-se de que o dispositivo I2C seja inicializado if (! init) await Begin (); // Lê o MSB, LSB e os bits 7:4 (XLSB) da temperatura dos registradores BMP280 byte 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 os valores em um inteiro de 32 bits Int32 t =(tmsb <<12) + (tlsb <<4) + (txlsb>> 4); // Converte o valor bruto para a temperatura em degC double temp =BMP280_compensate_T_double (t); // Retorna a temperatura como um valor flutuante return (float) temp;} 

Repita as mesmas etapas para concluir a função ReadPressure.

 public assíncrono Tarefa  ReadPreasure () {// Certifique-se de que o dispositivo I2C seja inicializado if (! init) await Begin (); // Leia a temperatura primeiro para carregar o valor t_fine para compensação if (t_fine ==Int32.MinValue) {await ReadTemperature (); } // Lê o MSB, LSB e bits 7:4 (XLSB) da pressão dos registradores BMP280 byte 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 os valores em um inteiro de 32 bits Int32 t =(tmsb <<12) + (tlsb <<4) + (txlsb>> 4); // Converta o valor bruto para a pressão em Pa Int64 pres =BMP280_compensate_P_Int64 (t); // Retorna a temperatura como um valor flutuante return ((float) pres) / 256;} 

Por fim, conclua a função ReadAltitude:

 // Método para tomar a pressão ao nível do mar em Hectopascals (hPa) como um parâmetro e calcular a altitude usando a pressão atual. Tarefa assíncrona pública  ReadAltitude (float seaLevel) {// Certifique-se o dispositivo I2C é inicializado se (! init) await Begin (); // Lê a pressão primeiro float pressure =await ReadPreasure (); // Converte a pressão em Hectopascals (hPa) pressure / =100; // Calcule e retorne a altitude usando a fórmula barométrica internacional return 44330.0f * (1.0f - (float) Math.Pow ((pressure / seaLevel), 0.1903f));} 

Seu projeto agora está pronto para ser implantado!

Saída esperada

Temperatura:24,46189 graus C

Umidade:54,372%

Pressão:99738,73 Pa

Altitude:205,1726 m

Fonte: Estação meteorológica V 2.0

Processo de manufatura

  1. Estação meteorológica baseada no Raspberry Pi
  2. Estação meteorológica Raspberry Pi 2
  3. Estação meteorológica Raspberry Pi
  4. Monitoramento remoto do clima usando Raspberry Pi
  5. Junte-se ao IOT com sua estação meteorológica - CWOP
  6. Monitor de clima
  7. Arduino + ESP Weather Box
  8. $ 10 Estação meteorológica portátil Arduino (AWS)
  9. eDOT - Relógio de precisão baseado em Arduino e estação meteorológica
  10. Estação meteorológica ThingSpeak Arduino