Სარჩევი:

ტენიანობა, წნევა და ტემპერატურის გამოთვლა BME280- ისა და ფოტონის ინტერფეისის გამოყენებით .: 6 ნაბიჯი
ტენიანობა, წნევა და ტემპერატურის გამოთვლა BME280- ისა და ფოტონის ინტერფეისის გამოყენებით .: 6 ნაბიჯი

ვიდეო: ტენიანობა, წნევა და ტემპერატურის გამოთვლა BME280- ისა და ფოტონის ინტერფეისის გამოყენებით .: 6 ნაბიჯი

ვიდეო: ტენიანობა, წნევა და ტემპერატურის გამოთვლა BME280- ისა და ფოტონის ინტერფეისის გამოყენებით .: 6 ნაბიჯი
ვიდეო: ამპლიტუდა და საშუალო ტემპერატურის გამოთვლა 2024, ივლისი
Anonim
ტენიანობის, წნევისა და ტემპერატურის გამოთვლა BME280- ისა და ფოტონის ინტერფეისის გამოყენებით
ტენიანობის, წნევისა და ტემპერატურის გამოთვლა BME280- ისა და ფოტონის ინტერფეისის გამოყენებით

ჩვენ ვხვდებით სხვადასხვა პროექტს, რომელიც მოითხოვს ტემპერატურის, წნევის და ტენიანობის მონიტორინგს. ამრიგად, ჩვენ ვაცნობიერებთ, რომ ეს პარამეტრები ფაქტობრივად გადამწყვეტ როლს თამაშობენ სისტემის მუშაობის ეფექტურობის შეფასებაში სხვადასხვა ატმოსფერულ პირობებში. როგორც ინდუსტრიულ დონეზე, ასევე პერსონალურ სისტემებში ოპტიმალური ტემპერატურა, ტენიანობა და ბარომეტრიული წნევა აუცილებელია სისტემის ადექვატური მუშაობისთვის.

ამიტომ ჩვენ ვაძლევთ სრულ გაკვეთილს ამ სენსორზე, ამ გაკვეთილში ჩვენ ვაპირებთ ავხსნათ BME280 ტენიანობის, წნევის და ტემპერატურის სენსორის მუშაობა ნაწილაკების ფოტონთან ერთად.

ნაბიჯი 1: BME280 შესწავლა

BME280 საძიებო
BME280 საძიებო

ელექტრონული სექტორი აძლიერებს თამაშს BME280 სენსორთან, გარემოს სენსორთან ტემპერატურის, ბარომეტრული წნევის და ტენიანობის! ეს სენსორი შესანიშნავია ყველანაირი ამინდის/გარემოს აღქმისთვის და მისი გამოყენება შესაძლებელია I2C– შიც კი.

ეს სიზუსტის სენსორი BME280 არის ტენიანობის საზომი solution 3% სიზუსტით, ბარომეტრიული წნევა ± 1 hPa აბსოლუტური სიზუსტით და ტემპერატურა ± 1.0 ° C სიზუსტით. იმის გამო, რომ წნევა იცვლება სიმაღლეზე და წნევის გაზომვები ძალიან კარგია, თქვენ ასევე შეგიძლიათ გამოიყენოთ იგი როგორც ალტიმეტრი ± 1 მეტრით ან უკეთესი სიზუსტით! ტემპერატურის სენსორი ოპტიმიზირებულია ყველაზე დაბალი ხმაურისა და უმაღლესი გარჩევადობისთვის და გამოიყენება ტემპერატურის კომპენსაციისთვის წნევის სენსორი და ასევე შეიძლება გამოყენებულ იქნას გარემოს ტემპერატურის შესაფასებლად. BME280– ით გაზომვები შეიძლება განხორციელდეს მომხმარებლის მიერ ან შესრულდეს რეგულარული ინტერვალებით.

მონაცემთა ცხრილი: დააწკაპუნეთ BME280 სენსორის მონაცემთა ცხრილის გადახედვისათვის ან გადმოსაწერად.

ნაბიჯი 2: აპარატურის მოთხოვნების სია

აპარატურის მოთხოვნების სია
აპარატურის მოთხოვნების სია

ჩვენ მთლიანად გამოვიყენეთ Dcube Store– ის ნაწილები, რადგან მათი გამოყენება ადვილია და ყველაფერი, რაც ლამაზად ჯდება სანტიმეტრის ბადეზე, ნამდვილად გვაიძულებს. თქვენ შეგიძლიათ გამოიყენოთ რაც გსურთ, მაგრამ გაყვანილობის დიაგრამა მიიჩნევს, რომ თქვენ იყენებთ ამ ნაწილებს.

  • BME280 სენსორი I²C მინი მოდული
  • ნაწილაკების ფოტონის I²C ფარი
  • ნაწილაკების ფოტონი
  • I²C კაბელი
  • დენის ადაპტერი

ნაბიჯი 3: ინტერფეისის დამყარება

ინტერფეისი
ინტერფეისი

ინტერფეისის განყოფილება ძირითადად განმარტავს გაყვანილობის კავშირებს, რომლებიც საჭიროა სენსორსა და ნაწილაკ ფოტონს შორის. სწორი კავშირების უზრუნველყოფა არის ძირითადი აუცილებლობა ნებისმიერ სისტემაზე მუშაობისას სასურველი გამომუშავებისთვის. ამრიგად, საჭირო კავშირები შემდეგია:

BME280 იმუშავებს I2C– ზე. აქ არის გაყვანილობის დიაგრამა, რომელიც აჩვენებს, თუ როგორ უნდა დააკავშიროთ სენსორის თითოეული ინტერფეისი. ყუთის გარეშე, დაფა კონფიგურირებულია I2C ინტერფეისისთვის, ამიტომ ჩვენ გირჩევთ გამოიყენოთ ეს ინტერფეისი, თუ სხვაგვარად ხართ აგნოსტიკოსი. ყველაფერი რაც თქვენ გჭირდებათ არის ოთხი მავთული! მხოლოდ ოთხი კავშირია საჭირო Vcc, Gnd, SCL და SDA ქინძისთავები და ეს დაკავშირებულია I2C კაბელის დახმარებით. ეს კავშირები ნაჩვენებია ზემოთ მოცემულ სურათებში.

ნაბიჯი 4: ტემპერატურის, წნევის და ტენიანობის მონიტორინგის კოდი

ტემპერატურის, წნევის და ტენიანობის მონიტორინგის კოდი
ტემპერატურის, წნევის და ტენიანობის მონიტორინგის კოდი
ტემპერატურის, წნევისა და ტენიანობის მონიტორინგის კოდი
ტემპერატურის, წნევისა და ტენიანობის მონიტორინგის კოდი

კოდის სუფთა ვერსია, რომელსაც ჩვენ გამოვიყენებთ ამის გასაშვებად, არის აქ.

Arduino– სთან ერთად სენსორული მოდულის გამოყენებისას ჩვენ ვიყენებთ application.h და spark_wiring_i2c.h ბიბლიოთეკას. "application.h" და spark_wiring_i2c.h ბიბლიოთეკა შეიცავს ფუნქციებს, რომლებიც ხელს უწყობს სენსორსა და ნაწილაკს შორის i2c კომუნიკაციას.

დააწკაპუნეთ აქ, რომ გახსნათ ვებ გვერდი მოწყობილობის მონიტორინგისთვის

ატვირთეთ კოდი თქვენს დაფაზე და ის უნდა დაიწყოს მუშაობა! ყველა მონაცემი შეგიძლიათ მიიღოთ ვებგვერდზე, როგორც ეს ნაჩვენებია სურათზე.

კოდი მოცემულია ქვემოთ:

// განაწილებულია თავისუფალი ნების ლიცენზიით.// გამოიყენეთ როგორც გინდათ, მოგებით თუ უფასოდ, იმ პირობით, რომ იგი ჯდება მისი ასოცირებული ნაწარმოებების ლიცენზიებში. // BME280 // ეს კოდი შექმნილია BME280_I2CS I2C მინი მოდულთან მუშაობისთვის, რომელიც ხელმისაწვდომია ControlEverything.com– დან. #მოიცავს #მოიცავს // BME280 I2C მისამართი არის 0x76 (108) #განსაზღვრეთ Addr 0x76 ორმაგი cTemp = 0, fTemp = 0, წნევა = 0, ტენიანობა = 0; void setup () {// ცვლადის დაყენება Particle.variable ("i2cdevice", "BME280"); სტატია. ცვლადი ("cTemp", cTemp); ნაწილაკი. ცვლადი ("fTemp", fTemp); ნაწილაკი. ცვალებადი ("წნევა", წნევა); ნაწილაკი. ცვალებადი ("ტენიანობა", ტენიანობა); // I2C კომუნიკაციის ინიციალიზაცია როგორც MASTER Wire.begin (); // სერიული კომუნიკაციის ინიციალიზაცია, დაყენებული baud rate = 9600 Serial.begin (9600); დაგვიანება (300); } void loop () {ხელმოუწერელი int b1 [24]; ხელმოუწერელი int მონაცემები [8]; int dig_H1 = 0; for (int i = 0; i <24; i ++) {// დაწყება I2C გადამცემი მავთული. beginTransmission (Addr); // მონაცემთა რეგისტრაციის არჩევა Wire.write ((136+i)); // შეაჩერე I2C გადამცემი Wire.endTransmission (); // მოითხოვეთ მონაცემთა 1 ბაიტი Wire.requestFrom (Addr, 1); // წაიკითხეთ მონაცემების 24 ბაიტი თუ (Wire.available () == 1) {b1 = Wire.read (); }} // მონაცემების გადაკეთება // temp კოეფიციენტები int dig_T1 = (b1 [0] & 0xff) + ((b1 [1] & 0xff) * 256); int dig_T2 = b1 [2] + (b1 [3] * 256); int dig_T3 = b1 [4] + (b1 [5] * 256); // წნევის კოეფიციენტები int dig_P1 = (b1 [6] & 0xff) + ((b1 [7] & 0xff) * 256); int dig_P2 = b1 [8] + (b1 [9] * 256); int dig_P3 = b1 [10] + (b1 [11] * 256); int dig_P4 = b1 [12] + (b1 [13] * 256); int dig_P5 = b1 [14] + (b1 [15] * 256); int dig_P6 = b1 [16] + (b1 [17] * 256); int dig_P7 = b1 [18] + (b1 [19] * 256); int dig_P8 = b1 [20] + (b1 [21] * 256); int dig_P9 = b1 [22] + (b1 [23] * 256); for (int i = 0; i <7; i ++) {// დაწყება I2C გადამცემი მავთული. beginTransmission (Addr); // მონაცემთა რეგისტრაციის არჩევა Wire.write ((225+i)); // შეაჩერე I2C გადამცემი Wire.endTransmission (); // მოითხოვეთ მონაცემთა 1 ბაიტი Wire.requestFrom (Addr, 1); // წაიკითხეთ მონაცემთა 7 ბაიტი, თუ (Wire.available () == 1) {b1 = Wire.read (); }} // მონაცემების გარდაქმნა // ტენიანობის კოეფიციენტები int dig_H2 = b1 [0] + (b1 [1] * 256); int dig_H3 = b1 [2] & 0xFF; int dig_H4 = (b1 [3] * 16) + (b1 [4] & 0xF); int dig_H5 = (b1 [4] / 16) + (b1 [5] * 16); int dig_H6 = b1 [6]; // დაწყება I2C გადამცემი მავთული. BeginTransmission (Addr); // მონაცემთა რეგისტრაციის არჩევა Wire.write (161); // შეაჩერე I2C გადამცემი Wire.endTransmission (); // მოითხოვეთ მონაცემთა 1 ბაიტი Wire.requestFrom (Addr, 1); // წაიკითხეთ 1 ბაიტი მონაცემები if (Wire.available () == 1) {dig_H1 = Wire.read (); } // I2C Transmission Wire.beginTransmission (Addr) დაწყება; // შეარჩიეთ კონტროლის ტენიანობის რეგისტრატორი Wire.write (0xF2); // სინესტე შერჩევის მაჩვენებელზე = 1 Wire.write (0x01); // შეაჩერე I2C გადამცემი Wire.endTransmission (); // დაწყება I2C გადამცემი მავთული. BeginTransmission (Addr); // საკონტროლო გაზომვის რეგისტრის არჩევა Wire.write (0xF4); // ნორმალური რეჟიმი, ტემპერატურა და წნევა შერჩევის მაჩვენებელზე = 1 Wire.write (0x27); // შეაჩერე I2C გადამცემი Wire.endTransmission (); // დაწყება I2C გადამცემი მავთული. BeginTransmission (Addr); // კონფიგურაციის რეგისტრაციის არჩევა Wire.write (0xF5); // ლოდინის დრო = 1000ms Wire.write (0xA0); // შეაჩერე I2C გადამცემი Wire.endTransmission (); for (int i = 0; i <8; i ++) {// დაწყება I2C გადამცემი მავთული. beginTransmission (Addr); // მონაცემთა რეგისტრაციის არჩევა Wire.write ((247+i)); // შეაჩერე I2C გადამცემი Wire.endTransmission (); // მოითხოვეთ მონაცემთა 1 ბაიტი Wire.requestFrom (Addr, 1); // წაიკითხეთ მონაცემთა 8 ბაიტი თუ (Wire.available () == 1) {data = Wire.read (); }} // წნევისა და ტემპერატურის მონაცემების 19 ბიტიანი სიგრძის გადაყვანა adc_p = (((გრძელი) (მონაცემები [0] & 0xFF) * 65536) + ((გრძელი) (მონაცემები [1] & 0xFF) * 256) + (გრძელი) (მონაცემები [2] & 0xF0)) / 16; ხანგრძლივი adc_t = (((გრძელი) (მონაცემები [3] & 0xFF) * 65536) + ((გრძელი) (მონაცემები [4] & 0xFF) * 256) + (გრძელი) (მონაცემები [5] & 0xF0)) / 16; // ტენიანობის მონაცემების ხანგრძლივად გარდაქმნა adc_h = ((გრძელი) (მონაცემები [6] & 0xFF) * 256 + (გრძელი) (მონაცემები [7] & 0xFF)); // ტემპერატურის ოფსეტური გათვლები ორმაგი var1 = (((ორმაგი) adc_t) / 16384.0 - ((ორმაგი) dig_T1) / 1024.0) * ((ორმაგი) dig_T2); ორმაგი var2 = ((((ორმაგი) adc_t) / 131072.0 - ((ორმაგი) dig_T1) / 8192.0) * (((ორმაგი) adc_t) /131072.0 - ((ორმაგი) dig_T1) /8192.0)) * ((ორმაგი) dig_T3); ორმაგი t_fine = (გრძელი) (var1 + var2); ორმაგი cTemp = (var1 + var2) / 5120.0; ორმაგი fTemp = cTemp * 1.8 + 32; // წნევის ოფსეტური გათვლები var1 = ((ორმაგი) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((ორმაგი) dig_P6) / 32768.0; var2 = var2 + var1 * ((ორმაგი) dig_P5) * 2.0; var2 = (var2 / 4.0) + (((ორმაგი) dig_P4) * 65536.0); var1 = (((ორმაგი) dig_P3) * var1 * var1 / 524288.0 + ((ორმაგი) dig_P2) * var1) / 524288.0; var1 = (1.0 + var1 / 32768.0) * ((ორმაგი) dig_P1); ორმაგი p = 1048576.0 - (ორმაგი) adc_p; p = (p - (var2 / 4096.0)) * 6250.0 / var1; var1 = ((ორმაგი) dig_P9) * p * p / 2147483648.0; var2 = p * ((ორმაგი) dig_P8) / 32768.0; ორმაგი წნევა = (p + (var1 + var2 + ((ორმაგი) dig_P7)) / 16.0) / 100; // ტენიანობის ოფსეტური გათვლები ორმაგი var_H = (((ორმაგი) t_fine) - 76800.0); var_H = (adc_h - (dig_H4 * 64.0 + dig_H5 / 16384.0 * var_H)) * (dig_H2 / 65536.0 * (1.0 + dig_H6 / 67108864.0 * var_H * (1.0 + dig_H3 / 67108864.0 * var_H))); ორმაგი ტენიანობა = var_H * (1.0 - dig_H1 * var_H / 524288.0); if (ტენიანობა> 100.0) {ტენიანობა = 100.0; } else if (ტენიანობა <0.0) {ტენიანობა = 0.0; } // მონაცემების გამოტანა დაფაზე Particle.publish ("ტემპერატურა ცელსიუსში:", სიმებიანი (cTemp)); Particle.publish ("ტემპერატურა ფარენჰეიტში:", სიმებიანი (fTemp)); Particle.publish ("წნევა:", სიმებიანი (წნევა)); Particle.publish ("ფარდობითი ტენიანობა:", სიმებიანი (ტენიანობა)); დაგვიანება (1000); }

ნაბიჯი 5: პროგრამები:

პროგრამები
პროგრამები

BME280 ტემპერატურის, წნევისა და ფარდობითი ტენიანობის სენსორს აქვს სხვადასხვა სამრეწველო პროგრამა, როგორიცაა ტემპერატურის მონიტორინგი, კომპიუტერული პერიფერიული თერმული დაცვა, წნევის მონიტორინგი ინდუსტრიაში. ჩვენ ასევე გამოვიყენეთ ეს სენსორი ამინდის სადგურების პროგრამებში, ასევე სათბურის მონიტორინგის სისტემაში.

სხვა განაცხადები შეიძლება შეიცავდეს:

  1. კონტექსტის ცნობიერება, მაგ. კანის გამოვლენა, ოთახის შეცვლის გამოვლენა.
  2. ფიტნეს მონიტორინგი / კეთილდღეობა - გაფრთხილება სიმშრალის ან მაღალი ტემპერატურის შესახებ.
  3. მოცულობისა და ჰაერის ნაკადის გაზომვა.
  4. სახლის ავტომატიზაციის კონტროლი.
  5. აკონტროლეთ გათბობა, ვენტილაცია, კონდიცირება (HVAC).
  6. ნივთების ინტერნეტი.
  7. GPS- ის გაუმჯობესება (მაგ., დროთა განმავლობაში გაუმჯობესების გაუმჯობესება, მკვდარი ანგარიშსწორება, ფერდობის გამოვლენა).
  8. შიდა ნავიგაცია (იატაკის გამოვლენის შეცვლა, ლიფტის გამოვლენა).
  9. გარე ნავიგაცია, დასვენება და სპორტული პროგრამები.
  10. Ამინდის პროგნოზი.
  11. სიჩქარის ვერტიკალური მაჩვენებელი (აწევის/ჩაძირვის სიჩქარე)..

ნაბიჯი 6: ვიდეო გაკვეთილი

უყურეთ ჩვენს ვიდეო გაკვეთილს, რომ გაიაროთ ყველა ნაბიჯი პროექტის ინტერფეისის და დასრულების პროცესში.

დაელოდეთ სხვა სენსორების ინტერფეისსა და მუშა ბლოგს.

გირჩევთ: