สารบัญ:

สถานีตรวจอากาศส่วนบุคคลโดยใช้ Raspberry Pi กับ BME280 ใน Java: 6 ขั้นตอน
สถานีตรวจอากาศส่วนบุคคลโดยใช้ Raspberry Pi กับ BME280 ใน Java: 6 ขั้นตอน

วีดีโอ: สถานีตรวจอากาศส่วนบุคคลโดยใช้ Raspberry Pi กับ BME280 ใน Java: 6 ขั้นตอน

วีดีโอ: สถานีตรวจอากาศส่วนบุคคลโดยใช้ Raspberry Pi กับ BME280 ใน Java: 6 ขั้นตอน
วีดีโอ: What Is Raspberry Pi Zero? | How To Use Raspberry Pi Zero | Raspberry Pi Zero Tutorial | Simplilearn 2024, กรกฎาคม
Anonim
Image
Image
รายการอุปกรณ์ที่จำเป็น
รายการอุปกรณ์ที่จำเป็น

สภาพอากาศเลวร้ายมักจะดูแย่เมื่อมองผ่านหน้าต่าง

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

ขั้นตอนที่ 1: รายการอุปกรณ์ที่จำเป็น

รายการอุปกรณ์ที่จำเป็น
รายการอุปกรณ์ที่จำเป็น
รายการอุปกรณ์ที่จำเป็น
รายการอุปกรณ์ที่จำเป็น
รายการอุปกรณ์ที่จำเป็น
รายการอุปกรณ์ที่จำเป็น

1. พายราสเบอร์รี่

ขั้นตอนแรกคือการจับมือกับบอร์ด Raspberry Pi Raspberry Pi เป็นคอมพิวเตอร์บอร์ดเดี่ยวที่ขับเคลื่อนโดย Linux เป้าหมายของมันคือการพัฒนาทักษะการเขียนโปรแกรมและความเข้าใจฮาร์ดแวร์ ได้รับการยอมรับอย่างรวดเร็วโดยมือสมัครเล่นและผู้ชื่นชอบอุปกรณ์อิเล็กทรอนิกส์สำหรับโครงการที่เป็นนวัตกรรมใหม่

2. I²C Shield สำหรับ Raspberry Pi

INPI2 (อะแดปเตอร์ I2C) มีพอร์ต I²C ของ Raspberry Pi 2/3 สำหรับใช้กับอุปกรณ์I²Cหลายเครื่อง มีจำหน่ายแล้วที่ Dcube Store

3. เซ็นเซอร์ความชื้น ความดัน และอุณหภูมิแบบดิจิตอล BME280

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

4. สายเคเบิลเชื่อมต่อ I²C

เรามีสายเชื่อมต่อ I²C ที่ Dcube Store

5. สายไมโคร USB

แหล่งจ่ายไฟสาย micro USB เป็นตัวเลือกที่เหมาะสำหรับการจ่ายไฟให้กับ Raspberry Pi

6. ตีความการเข้าถึงอินเทอร์เน็ตผ่าน EthernetCable/WiFi Adapter

สิ่งแรกที่คุณจะต้องทำคือเชื่อมต่อ Raspberry Pi กับอินเทอร์เน็ต เราสามารถเชื่อมต่อโดยใช้สายอีเทอร์เน็ต ความเป็นไปได้อีกประการหนึ่งคือ คุณสามารถเชื่อมต่อกับเครือข่ายไร้สายโดยใช้อะแดปเตอร์ไร้สาย USB

7. สาย HDMI (สายแสดงผลและสายเชื่อมต่อ)

จอภาพ HDMI/DVI และทีวีใดๆ ควรทำงานเป็นจอแสดงผลสำหรับ Pi แต่มันเป็นทางเลือก ความเป็นไปได้ในการเข้าถึงระยะไกล (like-SSH) ก็ไม่สามารถตัดออกได้เช่นกัน คุณยังสามารถเข้าถึงได้ด้วยซอฟต์แวร์ PUTTY

ขั้นตอนที่ 2: การเชื่อมต่อฮาร์ดแวร์สำหรับการตั้งค่า

การเชื่อมต่อฮาร์ดแวร์สำหรับการตั้งค่า
การเชื่อมต่อฮาร์ดแวร์สำหรับการตั้งค่า
การเชื่อมต่อฮาร์ดแวร์สำหรับการตั้งค่า
การเชื่อมต่อฮาร์ดแวร์สำหรับการตั้งค่า

ทำวงจรตามแผนผังที่แสดง

ในขณะที่เรียนรู้ เราได้ทำความเข้าใจเกี่ยวกับพื้นฐานของอุปกรณ์อิเล็กทรอนิกส์เกี่ยวกับความรู้ด้านฮาร์ดแวร์และซอฟต์แวร์อย่างละเอียดถี่ถ้วน เราต้องการวาดแผนผังอิเล็กทรอนิกส์อย่างง่ายสำหรับโครงการนี้ แผนผังอิเล็กทรอนิกส์เป็นเหมือนพิมพ์เขียวสำหรับอุปกรณ์อิเล็กทรอนิกส์ วาดพิมพ์เขียวและทำตามการออกแบบอย่างระมัดระวัง เราได้นำพื้นฐานของอุปกรณ์อิเล็กทรอนิกส์มาประยุกต์ใช้ที่นี่ ตรรกะพาคุณจาก A ไป B จินตนาการจะพาคุณไปทุกที่ !

การเชื่อมต่อ Raspberry Pi และI²C Shield

ก่อนอื่นให้นำ Raspberry Pi มาวาง I²C Shield (พร้อม Inward Facing I²C Port) ลงไป กดโล่เบา ๆ เหนือพิน GPIO ของ Pi และเราทำขั้นตอนนี้ง่ายเหมือนพาย (ดูรูป)

การเชื่อมต่อของเซนเซอร์และ Raspberry Pi

นำเซ็นเซอร์และต่อสายI²Cด้วย ตรวจสอบให้แน่ใจว่าเอาต์พุตI²Cเชื่อมต่อกับอินพุตI²Cเสมอ ต้องปฏิบัติตามเช่นเดียวกันสำหรับ Raspberry Pi ที่มีแผงป้องกัน I²C ติดอยู่เหนือหมุด GPIO เรามี I²C Shield และสายเชื่อมต่อที่ด้านข้างของเราซึ่งเป็นการบรรเทาครั้งใหญ่และได้เปรียบอย่างมากเนื่องจากเราเหลือเพียง ตัวเลือกแบบพลักแอนด์เพลย์ ไม่มีปัญหาพินและสายไฟอีกต่อไป ความสับสนจึงหายไป ลองนึกภาพตัวเองในเว็บของสายไฟและเข้าสู่สิ่งนั้น โล่งใจจากสิ่งนั้น ทำให้สิ่งต่าง ๆ ไม่ซับซ้อน

หมายเหตุ: สายสีน้ำตาลควรเป็นไปตามการเชื่อมต่อกราวด์ (GND) ระหว่างเอาต์พุตของอุปกรณ์หนึ่งกับอินพุตของอุปกรณ์อื่นเสมอ

การเชื่อมต่ออินเทอร์เน็ตเป็นสิ่งที่จำเป็น

คุณมีทางเลือกที่นี่จริง คุณสามารถเชื่อมต่อ Raspberry Pi กับสาย LAN หรืออะแดปเตอร์ Nano USB ไร้สายสำหรับการเชื่อมต่อ WIFI ไม่ว่าจะด้วยวิธีใด ไฟล์ Manifest คือการเชื่อมต่ออินเทอร์เน็ตซึ่งทำได้สำเร็จ

กำลังของวงจร

เสียบสาย Micro USB เข้ากับแจ็คไฟของ Raspberry Pi ชกแล้วโว้ย! ทุกอย่างพร้อมและเราจะเริ่มทันที

การเชื่อมต่อกับจอแสดงผล

เราสามารถต่อสาย HDMI เข้ากับจอภาพหรือทีวีก็ได้ เราสามารถเข้าถึง Raspberry Pi ได้โดยไม่ต้องเชื่อมต่อกับจอภาพโดยใช้ -SSH (เข้าถึงบรรทัดคำสั่งของ Pi จากคอมพิวเตอร์เครื่องอื่น) คุณยังสามารถใช้ซอฟต์แวร์ PUTTY สำหรับสิ่งนั้นได้ ตัวเลือกนี้มีไว้สำหรับผู้ใช้ขั้นสูง ดังนั้นเราจะไม่กล่าวถึงรายละเอียดที่นี่

ฉันได้ยินมาว่าจะเกิดภาวะถดถอย ฉันตัดสินใจไม่เข้าร่วม

ขั้นตอนที่ 3: การเขียนโปรแกรม Raspberry Pi ใน Java

การเขียนโปรแกรม Raspberry Pi ใน Java
การเขียนโปรแกรม Raspberry Pi ใน Java

รหัส Java สำหรับเซ็นเซอร์ Raspberry Pi และ BME280 มีอยู่ในที่เก็บ Github ของเรา

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

รหัสอยู่ในรูปแบบที่ง่ายที่สุดที่คุณสามารถจินตนาการได้และคุณไม่ควรมีปัญหากับมัน แต่ถามว่าคุณมีหรือไม่ แม้จะรู้เป็นพันสิ่ง แต่ก็ยังถามผู้รู้

คุณสามารถคัดลอกโค้ดจาวาที่ใช้งานได้สำหรับเซ็นเซอร์นี้จากที่นี่เช่นกัน

// เผยแพร่โดยให้สิทธิ์ใช้งานตามเจตจำนงเสรี// ใช้แบบใดก็ได้ที่คุณต้องการ ไม่ว่าจะมีกำไรหรือให้เปล่า โดยให้เหมาะสมกับใบอนุญาตของงานที่เกี่ยวข้อง // BME280 // รหัสนี้ออกแบบมาเพื่อทำงานกับ BME280_I2CS I2C Mini Module ที่มีจำหน่ายจาก ControlEverything.com //

นำเข้า com.pi4j.io.i2c. I2CBus;

นำเข้า com.pi4j.io.i2c. I2CDevice; นำเข้า com.pi4j.io.i2c. I2CFactory; นำเข้า java.io. IOException;

คลาสสาธารณะ BME280

{ โมฆะคงที่สาธารณะหลัก (สตริง args ) พ่นข้อยกเว้น { // สร้างบัส I2C I2CBus บัส = I2CFactory.getInstance (I2CBus. BUS_1); // รับอุปกรณ์ I2C ที่อยู่ BME280 I2C คือ 0x76 (108) อุปกรณ์ I2CDevice = bus.getDevice(0x76); // อ่านข้อมูล 24 ไบต์จากที่อยู่ 0x88(136) ไบต์ b1 = ไบต์ใหม่[24]; อุปกรณ์อ่าน (0x88, b1, 0, 24); // แปลงข้อมูล // ค่าสัมประสิทธิ์อุณหภูมิ int dig_T1 = (b1[0] & 0xFF) + ((b1[1] & 0xFF) * 256); int dig_T2 = (b1[2] & 0xFF) + ((b1[3] & 0xFF) * 256); ถ้า (dig_T2 > 32767) { dig_T2 -= 65536; } int dig_T3 = (b1[4] & 0xFF) + ((b1[5] & 0xFF) * 256); ถ้า (dig_T3 > 32767) { dig_T3 -= 65536; } // ค่าสัมประสิทธิ์แรงดัน int dig_P1 = (b1[6] & 0xFF) + ((b1[7] & 0xFF) * 256); int dig_P2 = (b1[8] & 0xFF) + ((b1[9] & 0xFF) * 256); ถ้า (dig_P2 > 32767) { dig_P2 -= 65536; } int dig_P3 = (b1 [10] & 0xFF) + ((b1 [11] & 0xFF) * 256); ถ้า (dig_P3 > 32767) { dig_P3 -= 65536; } int dig_P4 = (b1 [12] & 0xFF) + ((b1 [13] & 0xFF) * 256); ถ้า (dig_P4 > 32767) { dig_P4 -= 65536; } int dig_P5 = (b1 [14] & 0xFF) + ((b1 [15] & 0xFF) * 256); ถ้า (dig_P5 > 32767) { dig_P5 -= 65536; } int dig_P6 = (b1 [16] & 0xFF) + ((b1 [17] & 0xFF) * 256); ถ้า (dig_P6 > 32767) { dig_P6 -= 65536; } int dig_P7 = (b1 [18] & 0xFF) + ((b1 [19] & 0xFF) * 256); ถ้า (dig_P7 > 32767) { dig_P7 -= 65536; } int dig_P8 = (b1 [20] & 0xFF) + ((b1 [21] & 0xFF) * 256); ถ้า (dig_P8 > 32767) { dig_P8 -= 65536; } int dig_P9 = (b1[22] & 0xFF) + ((b1[23] & 0xFF) * 256); ถ้า (dig_P9 > 32767) { dig_P9 -= 65536; } // อ่านข้อมูล 1 ไบต์จากที่อยู่ 0xA1(161) int dig_H1 = ((byte)device.read(0xA1) & 0xFF); // อ่านข้อมูล 7 ไบต์จากที่อยู่ 0xE1(225) device.read(0xE1, b1, 0, 7); // แปลงข้อมูล // ค่าสัมประสิทธิ์ความชื้น int dig_H2 = (b1[0] & 0xFF) + (b1[1] * 256); ถ้า (dig_H2 > 32767) { dig_H2 -= 65536; } int dig_H3 = b1[2] & 0xFF; int dig_H4 = ((b1[3] & 0xFF) * 16) + (b1[4] & 0xF); ถ้า (dig_H4 > 32767) { dig_H4 -= 65536; } int dig_H5 = ((b1[4] & 0xFF) / 16) + ((b1[5] & 0xFF) * 16); ถ้า (dig_H5 > 32767) { dig_H5 -= 65536; } int dig_H6 = b1[6] & 0xFF; ถ้า (dig_H6 > 127) { dig_H6 -= 256; } // เลือกการลงทะเบียนความชื้นควบคุม // ความชื้นเหนืออัตราการสุ่มตัวอย่าง = 1 device.write(0xF2, (ไบต์)0x01); // เลือกการลงทะเบียนการวัดการควบคุม // โหมดปกติ อุณหภูมิ และความดันเหนืออัตราการสุ่มตัวอย่าง = 1 device.write(0xF4, (byte)0x27); // เลือก config register // เวลาสแตนด์บาย = 1000 ms device.write(0xF5, (byte)0xA0); // อ่านข้อมูล 8 ไบต์จากที่อยู่ 0xF7 (247) // ความดัน msb1, msb ความดัน, ความดัน lsb, temp msb1, msb ชั่วคราว, lsb อุณหภูมิ, lsb ความชื้น, msb ความชื้น ไบต์ data = ไบต์ใหม่[8]; อุปกรณ์อ่าน (0xF7, ข้อมูล, 0, 8); // แปลงข้อมูลความดันและอุณหภูมิเป็นแบบยาว 19 บิต adc_p = (((long)(data[0] & 0xFF) * 65536) + ((long)(data[1] & 0xFF) * 256) + (long) (ข้อมูล[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; } // ส่งออกข้อมูลไปยังหน้าจอ System.out.printf("อุณหภูมิในเซลเซียส: %.2f C %n", cTemp); System.out.printf("อุณหภูมิเป็นฟาเรนไฮต์: %.2f F %n", fTemp); System.out.printf("ความดัน: %.2f hPa %n", ความดัน); System.out.printf("ความชื้นสัมพัทธ์: %.2f %% RH %n", ความชื้น); } }

ขั้นตอนที่ 4: การปฏิบัติจริงของรหัส

การปฏิบัติจริงของรหัส
การปฏิบัติจริงของรหัส

ตอนนี้ดาวน์โหลด (หรือ git pull) รหัสแล้วเปิดใน Raspberry Pi

รันคำสั่งเพื่อคอมไพล์และอัพโหลดโค้ดบนเทอร์มินัลและดูผลลัพธ์บนมอนิเตอร์ หลังจากนั้นครู่หนึ่ง มันจะคัดกรองพารามิเตอร์ทั้งหมด ทำให้แน่ใจว่าคุณมีการเปลี่ยนรหัสที่ราบรื่นและผลลัพธ์ที่สงบ (ish) คุณคิดถึงแนวคิดเพิ่มเติมในการแก้ไขเพิ่มเติม (ทุกโครงการเริ่มต้นด้วยเรื่องราว)

ขั้นตอนที่ 5: การใช้ประโยชน์ในโลกสร้างสรรค์

BME280 ให้ประสิทธิภาพสูงในทุกการใช้งานที่ต้องการการวัดความชื้นและความดัน แอปพลิเคชันที่เกิดขึ้นใหม่เหล่านี้ ได้แก่ Context Awareness เช่น การตรวจจับผิวหนัง, การตรวจจับการเปลี่ยนแปลงในห้อง, การตรวจสอบสมรรถภาพ / ความเป็นอยู่ที่ดี, คำเตือนเกี่ยวกับความแห้งหรืออุณหภูมิสูง, การวัดปริมาตรและการไหลของอากาศ, การควบคุมอัตโนมัติในบ้าน, การควบคุมความร้อน, การระบายอากาศ, เครื่องปรับอากาศ (HVAC), อินเทอร์เน็ตของสิ่งต่าง ๆ (IoT), การเพิ่มประสิทธิภาพของ GPS (เช่น การปรับปรุงเวลาเป็นอันดับแรก การคำนวณ Dead Reckoning การตรวจจับความชัน) การนำทางในร่ม (การเปลี่ยนแปลงของการตรวจจับพื้น การตรวจจับลิฟต์) การนำทางกลางแจ้ง การใช้งานเพื่อการพักผ่อนและกีฬา การพยากรณ์อากาศ และการแสดงความเร็วในแนวตั้ง (ขึ้น/จม) ความเร็ว).

ขั้นตอนที่ 6: บทสรุป

อย่างที่คุณเห็น โครงการนี้เป็นการสาธิตที่ดีว่าฮาร์ดแวร์และซอฟต์แวร์มีความสามารถใดบ้าง ในระยะเวลาอันสั้น เราสามารถสร้างโครงการที่น่าประทับใจได้! แน่นอนว่านี่เป็นเพียงจุดเริ่มต้นเท่านั้น การสร้างสถานีตรวจอากาศส่วนบุคคลที่ซับซ้อนยิ่งขึ้น เช่น สถานีตรวจอากาศส่วนบุคคลในสนามบินอัตโนมัติ อาจเกี่ยวข้องกับเซ็นเซอร์เพิ่มเติม เช่น เครื่องวัดความเร็วลม (ความเร็วลม) เครื่องวัดการส่งผ่าน (การมองเห็น) เครื่องวัดพีระมิด (รังสีแสงอาทิตย์) เป็นต้น เรามีวิดีโอสอนการใช้งานบน Youtube ที่มีการทำงานพื้นฐานของ เซ็นเซอร์I²Cพร้อม Rasp Pi เป็นเรื่องน่าทึ่งมากที่ได้เห็นผลลัพธ์และการทำงานของการสื่อสาร I²C ตรวจสอบเช่นกัน ขอให้สนุกกับการสร้างและเรียนรู้! โปรดแจ้งให้เราทราบว่าคุณคิดอย่างไรกับคำแนะนำนี้ เราชอบที่จะทำการปรับปรุงบางอย่างหากจำเป็น

แนะนำ: