สารบัญ:

การคำนวณความชื้น ความดัน และอุณหภูมิโดยใช้การเชื่อมต่อ BME280 และโฟตอน: 6 ขั้นตอน
การคำนวณความชื้น ความดัน และอุณหภูมิโดยใช้การเชื่อมต่อ BME280 และโฟตอน: 6 ขั้นตอน

วีดีโอ: การคำนวณความชื้น ความดัน และอุณหภูมิโดยใช้การเชื่อมต่อ BME280 และโฟตอน: 6 ขั้นตอน

วีดีโอ: การคำนวณความชื้น ความดัน และอุณหภูมิโดยใช้การเชื่อมต่อ BME280 และโฟตอน: 6 ขั้นตอน
วีดีโอ: 🏠 ทำเซนเซอร์ DIY ใช้กับ Home Assistant | Home Automation วันศุกร์ #6 2024, กรกฎาคม
Anonim
การคำนวณความชื้น ความดัน และอุณหภูมิโดยใช้ BME280 และการเชื่อมต่อโฟตอน
การคำนวณความชื้น ความดัน และอุณหภูมิโดยใช้ BME280 และการเชื่อมต่อโฟตอน

เราเจอโครงการต่างๆ ที่ต้องการการตรวจสอบอุณหภูมิ ความดัน และความชื้น ดังนั้นเราจึงตระหนักดีว่าพารามิเตอร์เหล่านี้มีบทบาทสำคัญในการประมาณประสิทธิภาพการทำงานของระบบในสภาวะบรรยากาศต่างๆ ทั้งในระดับอุตสาหกรรมและระบบส่วนบุคคล อุณหภูมิ ความชื้น และระดับความกดอากาศที่เหมาะสมเป็นสิ่งจำเป็นสำหรับประสิทธิภาพของระบบที่เพียงพอ

นี่คือเหตุผลที่เราจัดทำบทแนะนำที่สมบูรณ์เกี่ยวกับเซ็นเซอร์นี้ ในบทช่วยสอนนี้ เราจะอธิบายการทำงานของเซ็นเซอร์ความชื้น ความดัน และอุณหภูมิ BME280 พร้อมโฟตอนอนุภาค

ขั้นตอนที่ 1: การสำรวจ BME280

การสำรวจ BME280
การสำรวจ BME280

ภาคอิเล็กทรอนิกส์ได้ก้าวไปอีกขั้นด้วยเซ็นเซอร์ BME280 เซ็นเซอร์สิ่งแวดล้อมพร้อมอุณหภูมิ ความดันบรรยากาศ และความชื้น! เซ็นเซอร์นี้เหมาะอย่างยิ่งสำหรับการตรวจจับสภาพอากาศ/สิ่งแวดล้อมทุกประเภท และยังใช้ใน I2C ได้อีกด้วย

เซ็นเซอร์ความเที่ยงตรงสูง BME280 นี้เป็นโซลูชันการตรวจจับที่ดีที่สุดสำหรับการวัดความชื้นด้วยความแม่นยำ ±3% ความดันบรรยากาศที่มีความแม่นยำสัมบูรณ์ ±1 hPa และอุณหภูมิที่มีความแม่นยำ ±1.0°C เนื่องจากความดันเปลี่ยนแปลงไปตามระดับความสูง และการวัดความดันนั้นดีมาก คุณจึงสามารถใช้เป็นเครื่องวัดระยะสูงที่มีความแม่นยำ ±1 เมตรหรือดีกว่าได้! เซ็นเซอร์อุณหภูมิได้รับการปรับให้เหมาะสมสำหรับเสียงรบกวนต่ำสุดและความละเอียดสูงสุด และใช้สำหรับชดเชยอุณหภูมิของ เซ็นเซอร์ความดันและยังสามารถใช้สำหรับการประมาณอุณหภูมิแวดล้อม การวัดด้วย BME280 สามารถทำได้โดยผู้ใช้หรือดำเนินการเป็นระยะๆ

เอกสารข้อมูล: คลิกเพื่อดูตัวอย่างหรือดาวน์โหลดเอกสารข้อมูลของเซ็นเซอร์ BME280

ขั้นตอนที่ 2: รายการข้อกำหนดฮาร์ดแวร์

รายการข้อกำหนดฮาร์ดแวร์
รายการข้อกำหนดฮาร์ดแวร์

เราใช้ Dcube Store Parts ทั้งหมดเพราะว่ามันใช้งานง่าย และบางอย่างเกี่ยวกับทุกสิ่งที่ลงตัวพอดีบนตารางเซนติเมตรก็ทำให้เราก้าวต่อไปได้จริงๆ คุณสามารถใช้อะไรก็ได้ที่คุณต้องการ แต่แผนภาพการเดินสายจะถือว่าคุณกำลังใช้ชิ้นส่วนเหล่านี้

  • BME280 เซนเซอร์ I²C โมดูลขนาดเล็ก
  • I²C Shield สำหรับอนุภาคโฟตอน
  • อนุภาคโฟตอน
  • สายเคเบิล 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 Mini Module ที่มีจำหน่ายจาก ControlEverything.com #include #include // ที่อยู่ BME280 I2C คือ 0x76 (108) #define Addr 0x76 double cTemp = 0, fTemp = 0, ความดัน = 0, ความชื้น = 0; การตั้งค่าเป็นโมฆะ () {// ตั้งค่าตัวแปร Particle.variable ("i2cdevice", "BME280"); บทความ.ตัวแปร("cTemp", cTemp); Particle.variable("fTemp", fTemp); Particle.variable("ความดัน", ความดัน); Particle.variable("ความชื้น", ความชื้น); // เริ่มต้นการสื่อสาร I2C เป็น MASTER Wire.begin(); // เริ่มต้นการสื่อสารแบบอนุกรม ตั้งค่าอัตรารับส่งข้อมูล = 9600 Serial.begin(9600); ล่าช้า (300); } วงเป็นโมฆะ () { unsigned int b1 [24]; ข้อมูล int ที่ไม่ได้ลงนาม[8]; int dig_H1 = 0; สำหรับ (int i = 0; i <24; i ++) { // เริ่ม I2C Transmission Wire.beginTransmission (Addr); // เลือก data register Wire.write((136+i)); // หยุด I2C Transmission Wire.endTransmission(); // ขอข้อมูล 1 ไบต์ Wire.requestFrom(Addr, 1); // อ่านข้อมูล 24 ไบต์ if(Wire.available() == 1) { b1 = Wire.read(); } } // แปลงข้อมูล // ค่าสัมประสิทธิ์อุณหภูมิ 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); สำหรับ (int i = 0; i <7; i ++) { // เริ่ม I2C Transmission Wire.beginTransmission (Addr); // เลือก data register Wire.write((225+i)); // หยุด I2C Transmission Wire.endTransmission(); // ขอข้อมูล 1 ไบต์ Wire.requestFrom(Addr, 1); // อ่านข้อมูล 7 ไบต์ if(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 Transmission Wire.beginTransmission(Addr); // เลือกการลงทะเบียนข้อมูล Wire.write(161); // หยุด I2C Transmission 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 Transmission Wire.endTransmission(); // เริ่ม I2C Transmission Wire.beginTransmission(Addr); // เลือกการลงทะเบียนการวัดการควบคุม Wire.write(0xF4); // โหมดปกติ อุณหภูมิ และความดันเหนืออัตราการสุ่มตัวอย่าง = 1 Wire.write(0x27); // หยุด I2C Transmission Wire.endTransmission(); // เริ่ม I2C Transmission Wire.beginTransmission(Addr); // เลือก config register Wire.write(0xF5); // เวลาสแตนด์บาย = 1000ms Wire.write (0xA0); // หยุด I2C Transmission Wire.endTransmission(); สำหรับ (int i = 0; i <8; i ++) { // เริ่ม I2C Transmission Wire.beginTransmission (Addr); // เลือก data register Wire.write((247+i)); // หยุด I2C Transmission Wire.endTransmission(); // ขอข้อมูล 1 ไบต์ Wire.requestFrom(Addr, 1); // อ่านข้อมูล 8 ไบต์ if(Wire.available() == 1) { data = Wire.read(); } } // แปลงข้อมูลความดันและอุณหภูมิเป็นแบบยาว 19 บิต adc_p = (((long)(data[0] & 0xFF) * 65536) + ((long)(data[1] & 0xFF) * 256) + (ยาว)(ข้อมูล[2] & 0xF0)) / 16; adc_t แบบยาว = (((long)(data[3] & 0xFF) * 65536) + ((long)(data[4] & 0xFF) * 256) + (long)(data[5] & 0xF0)) / 16; // แปลงข้อมูลความชื้นแบบยาว adc_h = ((long)(data[6] & 0xFF) * 256 + (long)(data[7] & 0xFF)); // การคำนวณออฟเซ็ตอุณหภูมิ double var1 = (((double)adc_t) / 16384.0 - ((double)dig_T1) / 1024.0) * ((double)dig_T2); double var2 = ((((double)adc_t) / 131072.0 - ((double)dig_T1) / 8192.0) * (((double)adc_t)/131072.0 - ((double)dig_T1)/8192.0)) * ((สองเท่า) dig_T3); double 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; // การคำนวณชดเชยความชื้น double var_H = (((double)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); ถ้า (ความชื้น> 100.0) { ความชื้น = 100.0; } อื่น ๆ ถ้า (ความชื้น < 0.0) { ความชื้น = 0.0; } // ส่งออกข้อมูลไปยังแดชบอร์ด Particle.publish("Temperature in Celsius: ", String(cTemp)); Particle.publish("อุณหภูมิในฟาเรนไฮต์: ", สตริง (fTemp)); Particle.publish("Pressure: ", String(pressure)); Particle.publish("ความชื้นสัมพัทธ์: ", สตริง(ความชื้น)); ล่าช้า (1000); }

ขั้นตอนที่ 5: การใช้งาน:

การใช้งาน
การใช้งาน

BME280 เซ็นเซอร์อุณหภูมิ ความดัน และความชื้นสัมพัทธ์มีการใช้งานในอุตสาหกรรมต่างๆ เช่น การตรวจสอบอุณหภูมิ การป้องกันความร้อนต่อพ่วงคอมพิวเตอร์ การตรวจสอบความดันในอุตสาหกรรม เรายังได้นำเซ็นเซอร์นี้ไปใช้กับการใช้งานสถานีตรวจอากาศ และระบบตรวจสอบเรือนกระจกด้วย

แอปพลิเคชันอื่นอาจรวมถึง:

  1. การรับรู้บริบทเช่น การตรวจจับผิวหนัง การตรวจจับการเปลี่ยนแปลงห้อง
  2. การตรวจสอบสมรรถภาพทางกาย / ความเป็นอยู่ที่ดี - คำเตือนเกี่ยวกับความแห้งหรืออุณหภูมิสูง
  3. การวัดปริมาตรและการไหลของอากาศ
  4. ระบบควบคุมอัตโนมัติภายในบ้าน
  5. ควบคุมความร้อน การระบายอากาศ เครื่องปรับอากาศ (HVAC)
  6. อินเทอร์เน็ตของสิ่งต่างๆ
  7. การเพิ่มประสิทธิภาพของ GPS (เช่น การปรับปรุงเวลาในการแก้ไข การคำนวณที่เสียไป การตรวจจับความชัน)
  8. ระบบนำทางในร่ม (เปลี่ยนการตรวจจับพื้น, การตรวจจับลิฟต์)
  9. การใช้งานการนำทางกลางแจ้ง สันทนาการ และกีฬา
  10. พยากรณ์อากาศ.
  11. ตัวบ่งชี้ความเร็วแนวตั้ง (ความเร็วขึ้น/จม)..

ขั้นตอนที่ 6: วิดีโอสอน

ดูวิดีโอบทแนะนำของเราเพื่อทำตามขั้นตอนทั้งหมดในการเชื่อมต่อและทำโปรเจ็กต์ให้เสร็จ

คอยติดตามการเชื่อมต่อและบล็อกการทำงานของเซ็นเซอร์อื่น ๆ

แนะนำ: