Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Weather Station V 2.0

Mesurer la température, la pression et l'humidité dans votre chambre.

Histoire

Dans ce projet, nous utiliserons le pack de démarrage Adafruit pour Windows 10 IoT Core sur les composants du kit Raspberry Pi 2 pour créer un projet qui utilise un capteur pour lire la température, la pression , humidité et altitude.

REMARQUE :il existe deux versions du kit, l'une comprend le capteur BMP280 l'autre le BME280. Si vous avez le BMP280, vous voudrez vous rendre sur le projet Weather Station v1 https://www.hackster.io/windows-iot/weather-station

Matériel

Connectez le Raspberry Pi2 à la maquette et aux autres composants selon le schéma de Fritzing dans la section "Schémas" ci-dessous.

Logiciel

Vous pouvez télécharger le code de démarrage du projet sur https://github.com/ms-iot/adafruitsample et nous vous guiderons tout au long de l'ajout du code nécessaire pour parler au service Web et obtenez votre code PIN sur la carte. Quelle carte ?

Ouvrez "Lesson_203v2\StartSolution\lesson_203v2.sln" et ouvrez le fichier mainpage.xaml.cs.

Nous avons rempli quelques méthodes comme point de départ pour vous dans cette solution. Si vous voulez aller de l'avant, vous pouvez trouver une solution avec tout le code complété à : " Lesson_203v2\FullSolution\lesson_203v2.sln"

Page principale.xaml.cs

Ouvrez le fichier MainPage.xaml.cs.

Ajouter une référence à la classe du capteur (BME280).

classe partielle scellée publique MainPage :Page{ // Crée un nouvel objet pour notre classe de capteur BME280 BME280 ;

Nous ajoutons maintenant du code dans la méthode OnNavigatedTo qui créera un nouvel objet BME280 pour le capteur et initialisera l'objet.

// Créer un nouvel objet pour notre capteur classBME280 =new BME280Sensor();//Initialize the sensorawait BME280.Initialize();

Ensuite, nous ajoutons du code pour effectuer les opérations suivantes :

 //Initialisez-les à 0.float temp =0;float pressure =0;float altitude =0;float humidity =0;//Créez une constante pour la pression au niveau de la mer. // Ceci est basé sur votre pression locale au niveau de la mer (Unité :Hectopascal) const float seaLevelPressure =1022.00f ; // Lecture de 10 échantillons de données pour (int i =0 ; i <10 ; i++) { temp =wait BME280.ReadTemperature (); pression =attend BME280.ReadPreasure(); altitude =attendre BME280.ReadAltitude(seaLevelPressure); humidité =attendre BME280.ReadHumidity(); //Écrivez les valeurs dans votre console de débogage Debug.WriteLine("Temperature:" + temp.ToString() + " deg C"); Debug.WriteLine("Humidity:" + humidité.ToString() + " %"); Debug.WriteLine("Pressure:" + pressure.ToString() + " Pa"); Debug.WriteLine("Altitude :" + altitude.ToString() + " m"); Debug.WriteLine("");}

BME280.cs

Ouvrez le fichier BME280.cs.

La première partie du code fait une liste des adresses des différents registres du BME280. Ces valeurs peuvent être trouvées dans la fiche technique du BMP280.

Dans la classe BME280, ajoutez ce qui suit après l'énumération des adresses de registre.

 //Chaîne pour le nom convivial de la chaîne de bus I2C I2CControllerName ="I2C1";//Créer un périphérique I2Cprivate I2cDevice bme280 =null;//Créer de nouvelles données d'étalonnage pour le capteurBME280_CalibrationData CalibrationData;/ /Variable pour vérifier si le périphérique est initialisébool init =false ;

Ensuite, ajoutez le code suivant dans la fonction Initialize à :

//Méthode pour initialiser le BME280 sensorpublic async Task Initialize(){ Debug.WriteLine("BME280::Initialize"); try { //Instancier les paramètres I2CConnectionSettings à l'aide de l'adresse de périphérique du BME280 I2cConnectionSettings settings =new I2cConnectionSettings(BME280_Address); //Définir la vitesse de connexion du bus I2C sur les paramètres du mode rapide.BusSpeed ​​=I2cBusSpeed.FastMode; //Utilisez le sélecteur de périphérique I2CBus pour créer une chaîne de syntaxe de requête avancée string aqs =I2cDevice.GetDeviceSelector(I2CControllerName); //Utilisez la classe Windows.Devices.Enumeration.DeviceInformation pour créer une collection à l'aide de la chaîne de syntaxe de requête avancée DeviceInformationCollection dis =wait DeviceInformation.FindAllAsync(aqs); //Instancier le périphérique BME280 I2C à l'aide de l'identifiant de périphérique du I2CBus et des paramètres I2CConnectionSettings bme280 =wait I2cDevice.FromIdAsync(dis[0].Id, settings); //Vérifiez si le périphérique a été trouvé if (bme280 ==null) { Debug.WriteLine("Périphérique non trouvé"); } } catch (Exception e) { Debug.WriteLine("Exception :" + e.Message + "\n" + e.StackTrace); jeter; }}

Ajoutez le code suivant dans la fonction Begin à :

Début de tâche asynchrone privée(){ Debug.WriteLine("BME280::Begin"); octet[] WriteBuffer =nouvel octet[] { (octet)eRegisters.BMP280_REGISTER_CHIPID } ; byte[] ReadBuffer =new byte[] { 0xFF } ; //Lire la signature du périphérique bmp280.WriteRead(WriteBuffer, ReadBuffer); Debug.WriteLine("BME280 Signature :" + ReadBuffer[0].ToString()); //Vérifiez la signature du périphérique if (ReadBuffer[0] !=BMP280_Signature) { Debug.WriteLine("BMP280::Begin Signature Mismatch."); retourner; } //Définir la variable d'initialisation sur true init =true; //Lire la table des coefficients CalibrationData =wait ReadCoefficeints(); //Le registre de contrôle d'écriture attend WriteControlRegister(); //Ecrire le registre de contrôle d'humidité wait WriteControlRegisterHumidity();}

Ajoutez le code suivant aux 2 fonctions suivantes pour écrire dans les registres de contrôle.

Tâche asynchrone privée WriteControlRegisterHumidity(){ octet[] WriteBuffer =nouvel octet[] { (octet)eRegisters.BMP280_REGISTER_CONTROLHUMID, 0x03 } ; bmp280.Write(WriteBuffer); attendre Task.Delay(1) ; return;}//Méthode pour écrire 0x3F dans le registre de contrôleprivate async Tâche WriteControlRegister(){ byte[] WriteBuffer =new byte[] { (byte)eRegisters.BMP280_REGISTER_CONTROL, 0x3F } ; bmp280.Write(WriteBuffer); attendre Task.Delay(1) ; retour ;}

Ajoutez le code suivant à la fonction ReadUInt16_LittleEndian à :

//Méthode pour lire une valeur 16 bits à partir d'un registre et la retourner au format little endianprivate UInt16 ReadUInt16_LittleEndian(byte register){ UInt16 value =0; byte[] writeBuffer =new byte[] { 0x00 } ; byte[] readBuffer =new byte[] { 0x00, 0x00 } ; writeBuffer[0] =registre ; bmp280.WriteRead(writeBuffer, readBuffer); int h =readBuffer[1] <<8; int l =readBuffer[0]; valeur =(UInt16)(h + l); valeur de retour ;}

Ajoutez le code suivant à la fonction ReadByte pour lire les données 8 bits à partir d'un registre.

//Méthode pour lire une valeur de 8 bits à partir d'un octet registerprivate ReadByte(byte register){ byte value =0; byte[] writeBuffer =new byte[] { 0x00 } ; byte[] readBuffer =new byte[] { 0x00 } ; writeBuffer[0] =registre ; bmp280.WriteRead(writeBuffer, readBuffer); valeur =readBuffer[0] ; valeur de retour ;}

Les 3 fonctions suivantes sont faites pour vous. Les informations nécessaires à l'écriture de ces fonctions se trouvent dans la fiche technique.

ReadCoefficeints : C'est la fonction où toutes les données d'étalonnage sont lues à partir des adresses de registre.

BMP280_compensate_T_double :dans cette fonction, la température en °C est calculée à l'aide de la formule de compensation de la fiche technique BMP280.

BMP280_compensate_P_Int64 : Dans cette fonction, la pression en Pa est calculée à l'aide de la formule de compensation de la fiche technique BMP280.

Ajoutez le code suivant pour terminer la fonction ReadTemperature.

tâche asynchrone publique ReadTemperature(){ // Assurez-vous que le périphérique I2C est initialisé si (!init) wait Begin(); //Lire le MSB, le LSB et les bits 7:4 (XLSB) de la température à partir des registres BMP280 byte tmsb =ReadByte((byte)eRegisters.BMP280_REGISTER_TEMPDATA_MSB); octet tlsb =ReadByte((octet)eRegisters.BMP280_REGISTER_TEMPDATA_LSB); octet txlsb =ReadByte((octet)eRegisters.BMP280_REGISTER_TEMPDATA_XLSB); // bits 7:4 //Combine les valeurs dans un entier de 32 bits Int32 t =(tmsb <<12) + (tlsb <<4) + (txlsb>> 4); //Convertir la valeur brute en température en degC double temp =BMP280_compensate_T_double(t); //Renvoyer la température sous forme de valeur flottante return (float)temp;}

Répétez les mêmes étapes pour terminer la fonction ReadPressure.

 public async Task ReadPreasure() { // Assurez-vous que le périphérique I2C est initialisé si (!init) wait Begin(); //Lisez d'abord la température pour charger la valeur t_fine pour la compensation if (t_fine ==Int32.MinValue) { wait ReadTemperature(); } //Lire le MSB, le LSB et les bits 7:4 (XLSB) de la pression des registres BMP280 byte tmsb =ReadByte((byte)eRegisters.BMP280_REGISTER_PRESSUREDATA_MSB); octet tlsb =ReadByte((octet)eRegisters.BMP280_REGISTER_PRESSUREDATA_LSB); octet txlsb =ReadByte((octet)eRegisters.BMP280_REGISTER_PRESSUREDATA_XLSB); // bits 7:4 //Combine les valeurs dans un entier de 32 bits Int32 t =(tmsb <<12) + (tlsb <<4) + (txlsb>> 4); //Convertir la valeur brute en pression en Pa Int64 pres =BMP280_compensate_P_Int64(t); //Renvoi de la température sous forme de valeur flottante return ((float)pres) / 256;}

Terminez enfin la fonction ReadAltitude :

//Méthode pour prendre la pression au niveau de la mer en hectopascals(hPa) comme paramètre et calculer l'altitude en utilisant la pression actuelle.public async Task ReadAltitude(float seaLevel){ //Assurez-vous le périphérique I2C est initialisé si (!init) wait Begin(); //Lire la pression d'abord float pressure =wait ReadPreasure(); //Convertir la pression en Hectopascals(hPa) pression /=100; //Calculez et renvoyez l'altitude à l'aide de la formule barométrique internationale return 44330.0f * (1.0f - (float)Math.Pow((pressure / seaLevel), 0.1903f));}

Votre projet est maintenant prêt à être déployé !

Résultat attendu

Température :24,46189 deg C

Humidité :54,372 %

Pression :99738.73 Pa

Altitude :205,1726 m

Source :  Station météo V 2.0


Processus de fabrication

  1. Station météo basée sur Raspberry Pi
  2. Station météo Raspberry Pi 2
  3. Station météo Raspberry Pi
  4. Surveillance à distance de la météo à l'aide de Raspberry Pi
  5. Rejoignez l'IOT avec votre station météo – CWOP
  6. Weather Monitor
  7. Boîte météo Arduino + ESP
  8. Station météo portable Arduino (AWS) à 10 $
  9. eDOT - Horloge de précision et station météo basée sur Arduino