การเชื่อมต่อบารอมิเตอร์ bmp180 เข้ากับ Arduino การเชื่อมต่อเซ็นเซอร์ BMP180 เข้ากับ Arduino ข้อผิดพลาดในการเชื่อมต่อที่เป็นไปได้และการกำจัด

เซ็นเซอร์ความดันและอุณหภูมิสัมบูรณ์ (อย่างหลังจะไม่ทำให้ใครแปลกใจในวันนี้) Bosch BMP180 เซ็นเซอร์ไม่ใช่ของใหม่และเป็นที่รู้จัก มีการศึกษาเอกสารข้อมูลอย่างกว้างขวางและมีห้องสมุดมากมาย

ข้อมูลจำเพาะ:
  • ช่วงการวัดความดัน: 300 – 1100 hPa
  • แรงดันไฟฟ้า: จาก 1.8 – 3.3 และ 5V (หากมีตัวปรับแรงดันไฟฟ้าบนบอร์ด)
  • การใช้พลังงานต่ำ: 3uA (โหมดพลังงานต่ำพิเศษ)
  • ความแม่นยำ: โหมดพลังงานต่ำความละเอียด 0.06hPa (0.5 ม.)
  • โหมดเชิงเส้นสูงที่มีความละเอียด 0.02hPa (0.17 ม.)
  • การเชื่อมต่อ: อินเตอร์เฟซ ไอทูซี.
  • สามารถวัดอุณหภูมิได้ในช่วง -40 … +85 ° C
  • เวลาตอบสนอง: 5ms - 7.5ms (โหมดมาตรฐาน)
  • กระแสไฟขณะสแตนด์บาย: 0.1 µA
หลักการทำงานของเซ็นเซอร์ BMP180:

เซ็นเซอร์มีห้องปิดผนึก ซึ่งผนังด้านหนึ่งเป็นเมมเบรนยืดหยุ่นพร้อมสเตรนเกจติดตั้งอยู่ เมมเบรนจะโค้งงอตามสัดส่วนของความแตกต่างของความดันภายในและภายนอกห้อง ซึ่งส่งผลต่อการเปลี่ยนแปลงความต้านทานของสเตรนเกจต่อกระแสไฟฟ้า นอกจากนี้ยังมีเซ็นเซอร์วัดอุณหภูมิซึ่งความต้านทานจะแตกต่างกันไปตามสัดส่วนของอุณหภูมิ ADC (ตัวแปลงอนาล็อกเป็นดิจิทัล) แปลงผลลัพธ์ของการเปลี่ยนแปลงเซ็นเซอร์เป็นข้อมูลดิจิทัล " ผลลัพธ์ที่ไม่ได้รับการชดเชย" ซึ่งมีให้อ่านได้จากรีจิสเตอร์เซ็นเซอร์: "Out MSB", "Out LSB" และ "Out xLSB" เพื่อชดเชยผลลัพธ์ที่ระบุ (การชดเชยออฟเซ็ต การพึ่งพาอุณหภูมิ ข้อผิดพลาดในการผลิต ความไม่สอดคล้องกันของวัสดุ ฯลฯ) เซ็นเซอร์แต่ละตัวจะถูกปรับเทียบที่โรงงาน และค่าแต่ละค่าสำหรับเซ็นเซอร์แต่ละตัวจะถูกบันทึกใน EEPROM 11 ปัจจัยการสอบเทียบ
(176 บิต) ซึ่งพร้อมสำหรับการอ่านจากรีจิสเตอร์เซ็นเซอร์: “AC1”, “AC2”, “AC3”, “AC4”, “AC5”, “AC6”, “B1”, “B2”, “MB” , “ เอ็มซี”, “นพ.”.

อย่าให้เซ็นเซอร์โดนความชื้นหรือแสงแดดโดยตรง

อัลกอริทึมในการรับข้อมูล:
  • อ่านค่าสัมประสิทธิ์การสอบเทียบ:

การอ่านค่าจากรีจิสเตอร์ที่มีชื่อเดียวกัน:
สั้น AC1, AC2, AC3, B1, B2, MB, MC, MD;
AC4, AC5, AC6 สั้นที่ไม่ได้ลงนาม;

  • การอ่านอุณหภูมิ: (ค่าที่ไม่มีการชดเชย)

เขียนค่าลงในรีจิสเตอร์ "การควบคุมการวัด": 0x2E;

เราอ่านผลลัพธ์จากการลงทะเบียน "Out MSB" และ "Out LSB"

  • การอ่านค่าความดัน: (ค่าที่ไม่มีการชดเชย)

เขียนค่าลงในรีจิสเตอร์ "การควบคุมการวัด": 0x34 + (OSS<<6);
เราคาดว่าสถานะสถานะ "CSO" จะลดลงเหลือ "0"
เราอ่านผลลัพธ์จากการลงทะเบียน "Out MSB", "Out LSB" และ "Out xLSB"
ยาวขึ้น = ("ออก MSB"<<16 + «Out LSB»<<8 + «Out xLSB») >> (8-OSS);

  • การคำนวณมูลค่าที่แท้จริง

รหัสและการเชื่อมต่อ

เซ็นเซอร์ค่อนข้างเป็นที่นิยม ส่วนใหญ่มักจะมาพร้อมกับสายรัดในรูปแบบของโมดูลสำเร็จรูป คุณสามารถค้นหาห้องสมุดสำเร็จรูปที่แตกต่างกันมากมายได้อย่างง่ายดาย ฉันหยุดที่ BMP180_Breakout_Arduino_Library. คุณสามารถดาวน์โหลดได้จาก GitHub หรือจากของเรา เว็บไซต์.

การเชื่อมต่ออธิบายไว้ในห้องสมุด แต่ฉันจะทำซ้ำในกรณี:

SCL(นาฬิกา)

  • อูโน่ นาโน โปร สำหรับ A5
  • เมก้า เนื่องจากวันที่ 21
  • เลโอนาร์โดถึง 3

SDA(ข้อมูล)

  • Uno, Nano, Pro ถึง A4
  • เมก้า เนื่องจากวันที่ 20
  • เลโอนาร์โดถึง 2

วิน- ถึง +5 โวลต์

ไอโอ— พินนี้มีอยู่ในบอร์ดบางตัว แหล่งจ่ายไฟข้ามโคลง ไม่เกิน 3.3 โวลต์.

จีเอ็นดี- เชื่อมต่อกับลบ

นี่คือโค้ดตัวอย่างพร้อมคำอธิบาย:

#รวม #รวม //ประกาศตัวแปรเพื่อเข้าถึง SFE_BMP180: แรงกดดัน SFE_BMP180; #define ALTITUDE 203.0 // ความสูงเหนือระดับน้ำทะเล หน่วยเป็นเมตร การตั้งค่าเป็นโมฆะ () ( Serial.begin (9600); Serial.println ("REBOOT"); // การเริ่มต้นถ้า (pressure.begin ()) Serial.println ("BMP180 init ok"); else ( // ถ้าเราเป็น ที่นี่มีบางอย่างไม่ได้ผล ตามกฎแล้วมีปัญหากับการเชื่อมต่อ Serial.println("BMP180 init failed\n\n"); // hang ) ) void loop() ( char status; double T, P, p0,a; // หากคุณต้องการทราบความกดอากาศที่ปรับให้เข้ากับระดับน้ำทะเล ซึ่งมักใช้ในการพยากรณ์อากาศ // คุณต้องทราบระดับน้ำทะเลในพื้นที่ของคุณที่ทำการวัด // สิ่งนี้ควร ระบุไว้ในค่าคงที่ ALTITUDE ที่จุดเริ่มต้นของรหัสซีเรียล .println(); Serial.print("ระดับน้ำทะเล: "); Serial.print(ALTITUDE,0); Serial.print(" เมตร, "); "); // หากคุณต้องการทราบความสูงเหนือระดับน้ำทะเล แต่คุณทราบความดัน // คุณต้องระบุความกดอากาศในปัจจุบัน วิธีทำเขียนไว้ท้ายโค้ด // หากทุกอย่างเป็น ราบรื่น pressure.startTemperature จะคืนค่าสถานะเป็นมิลลิวินาที // ซึ่งคุณต้องรอเพื่อวัดอุณหภูมิ // หากมีข้อผิดพลาดก็จะคืนค่า 0 status = pressure.startTemperature(); 750064.2);

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

บารอมิเตอร์เป็นอุปกรณ์ที่ใช้วัดความดันบรรยากาศ บารอมิเตอร์อิเล็กทรอนิกส์ใช้ในหุ่นยนต์และอุปกรณ์อิเล็กทรอนิกส์ต่างๆ เซ็นเซอร์ความดันที่พบมากที่สุดและราคาไม่แพงจาก BOSH ได้แก่ BMP085, BMP180, BMP280 และอื่น ๆ สองอันแรกมีความคล้ายคลึงกันมาก BMP280 เป็นเซ็นเซอร์ที่ใหม่กว่าและได้รับการปรับปรุง

เซ็นเซอร์วัดแรงดันทำงานโดยการแปลงแรงดันให้เป็นการเคลื่อนที่ของชิ้นส่วนทางกล เซ็นเซอร์ความดันประกอบด้วยทรานสดิวเซอร์ที่มีองค์ประกอบตรวจจับ ตัวเรือน องค์ประกอบทางกล (ไดอะแฟรม สปริง) และวงจรอิเล็กทรอนิกส์

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

  • ขนาด 2 x 2.5 x 0.95 มม.
  • ความดัน 300-1100 เฮกโตพาสคาล;
  • อุณหภูมิตั้งแต่ 0C ถึง 65C;
  • รองรับอินเทอร์เฟซ I2C และ SPI;
  • แรงดันไฟฟ้า 1.7V – 3.6V;
  • กระแสไฟฟ้าเฉลี่ย 2.7 µA;
  • โหมดการทำงาน 3 โหมด - โหมดสลีป, โหมด FORCED (ทำการวัด, อ่านค่า, เข้าสู่โหมดสลีป), โหมดปกติ (เปลี่ยนเซ็นเซอร์เป็นการทำงานแบบวน - นั่นคืออุปกรณ์จะออกจากโหมดสลีปโดยอัตโนมัติหลังจากเวลาที่กำหนด ทำการวัด อ่านค่าที่อ่านได้ บันทึกค่าที่วัดได้ และกลับสู่โหมดสลีป)

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

ลักษณะทางเทคนิคของเซ็นเซอร์ BMP180:

  • ขีดจำกัดของความดันที่วัดได้คือ 225-825 มม. ปรอท ศิลปะ.
  • แรงดันไฟฟ้า 3.3 – 5V;
  • ปัจจุบัน 0.5mA;
  • รองรับอินเทอร์เฟซ I2C;
  • เวลาตอบสนอง 4.5ms;
  • ขนาด 15 x 14 มม.

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

ลักษณะทางเทคนิคของเซ็นเซอร์ bme280:

  • ขนาด 2.5 x 2.5 x 0.93 มม.
  • เคสโลหะ LGA พร้อมเอาต์พุต 8 ช่อง;
  • แรงดันไฟฟ้า 1.7 – 3.6V;
  • ความพร้อมใช้งานของอินเทอร์เฟซ I2C และ SPI
  • ปริมาณการใช้กระแสไฟขณะสแตนด์บาย 0.1 µA

หากเปรียบเทียบอุปกรณ์ทั้งหมดเข้าด้วยกันเซ็นเซอร์จะคล้ายกันมาก เมื่อเทียบกับรุ่นก่อน BMP180 เซ็นเซอร์ BMP280 รุ่นใหม่มีขนาดเล็กลงอย่างเห็นได้ชัด ตัวเรือนขนาดเล็กแปดพินต้องได้รับการดูแลระหว่างการติดตั้ง อุปกรณ์ยังรองรับอินเทอร์เฟซ I2C และ SPI ซึ่งแตกต่างจากรุ่นก่อนซึ่งรองรับเฉพาะ I2C เท่านั้น ในทางปฏิบัติแล้วไม่มีการเปลี่ยนแปลงในตรรกะการทำงานของเซ็นเซอร์ มีเพียงความเสถียรของอุณหภูมิเท่านั้นที่ได้รับการปรับปรุงและเพิ่มความละเอียดของ ADC เซ็นเซอร์ BME280 ซึ่งวัดอุณหภูมิ ความชื้น และความดัน ก็คล้ายกับ BMP280 เช่นกัน ความแตกต่างอยู่ที่ขนาดของเคสเนื่องจาก BME280 มีเซ็นเซอร์ความชื้นซึ่งเพิ่มขนาดเล็กน้อย จำนวนผู้ติดต่อและตำแหน่งบนร่างกายเท่ากัน

ตัวเลือกการเชื่อมต่อสำหรับ Arduino

การเชื่อมต่อเซ็นเซอร์ BMP180 เข้ากับ Arduino ในการเชื่อมต่อ คุณจะต้องมีเซ็นเซอร์ BMP180 บอร์ด Arduino UNO และสายเชื่อมต่อ แผนภาพการเชื่อมต่อแสดงในรูปด้านล่าง

กราวด์จาก Arduino จำเป็นต้องเชื่อมต่อกับกราวด์บนเซ็นเซอร์ แรงดันไฟฟ้าคือ 3.3 V, SDA คือพิน A4, SCL คือพิน A5 พิน A4 และ A5 ถูกเลือกตามการรองรับอินเทอร์เฟซ I2C เซ็นเซอร์ทำงานที่แรงดันไฟฟ้า 3.3 V และ Arduino ทำงานที่ 5 V ดังนั้นจึงติดตั้งตัวปรับแรงดันไฟฟ้าบนโมดูลพร้อมเซ็นเซอร์

การเชื่อมต่อ BMP 280 กับ Arduino pinout และมุมมองด้านบนของบอร์ดจะแสดงในรูป

โมดูลเซ็นเซอร์ความดันนั้นมีลักษณะดังนี้:

ในการเชื่อมต่อกับ Arduino คุณต้องเชื่อมต่อเอาต์พุตดังนี้: เชื่อมต่อกราวด์กับ Arduino และบนเซ็นเซอร์, VCC - ถึง 3.3V, SCL / SCK - ไปยังพินอะนาล็อก A5, SDA / SDI - ถึง A4

การเชื่อมต่อเซ็นเซอร์ BME280 ตำแหน่งของหน้าสัมผัสและ pinout ของเซ็นเซอร์ BME280 จะเหมือนกับตำแหน่งของ BMP280

เนื่องจากเซ็นเซอร์สามารถทำงานผ่าน I2C และ SPI การเชื่อมต่อจึงสามารถทำได้สองวิธี

เมื่อเชื่อมต่อผ่าน I2C คุณจะต้องเชื่อมต่อพิน SDA และ SCL

เมื่อเชื่อมต่อผ่าน SPI คุณจะต้องเชื่อมต่อ SCL จากโมดูลและ SCK (พินที่ 13 บน Arduino), SDO จากโมดูลไปยังพิน 12 ของ Arduino, SDA ไปยังพิน 11, CSB (CS) เข้ากับพินดิจิทัลใด ๆ ในกรณีนี้ พิน 10 บน Arduino ในทั้งสองกรณี แรงดันไฟฟ้าจะเชื่อมต่อกับ 3.3V บน Arduino

คำอธิบายของไลบรารีสำหรับการทำงานกับเซ็นเซอร์ ตัวอย่างร่าง

ในการทำงานกับเซนเซอร์ BMP180 นั้นมีไลบรารี่ต่างๆ ที่ทำให้งานง่ายขึ้น ซึ่งรวมถึง SFE_BMP180, Adafruit_BMP085 ไลบรารีเดียวกันนี้เหมาะสำหรับการทำงานกับเซ็นเซอร์ BMP080 เซ็นเซอร์ bmp280 ใช้ไลบรารีที่คล้ายกัน Adafruit_BMP280

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

Status = pressure.startTemperature();// อ่านข้อมูลอุณหภูมิจากเซ็นเซอร์ if(status!=0)( Delay(status); // Waiting status = pressure.getTemperature(T); // บันทึกข้อมูลอุณหภูมิที่ได้รับ if( status !=0)( Serial.print("Temperature: "); // แสดงคำว่า "อุณหภูมิ" Serial.print(T,2); // แสดงค่าอุณหภูมิ Serial.println("deg C, "); //พิมพ์สัญลักษณ์เซลเซียส

จากนั้นคุณจะต้องได้รับข้อมูลเกี่ยวกับความกดอากาศ

สถานะ = ความดัน.startPressure (3); // ความดันถูกอ่าน if(status!=0)( Delay(status); // Waiting status = pressure.getPressure(P,T); // ได้รับความดันแล้ว บันทึก if(status!=0)( Serial.print ( "ความดันสัมบูรณ์: "); // แสดงคำว่า "ความดันบรรยากาศ" Serial.print(P,2); // แสดงค่าของตัวแปร mBar Serial.print(" mbar, "); print(P*0.7500637554192,2); // แสดงค่าเป็น mmHg (mmHg) Serial.println(" mmHg");) // แสดงหน่วยความดัน "mmHg" " (mm.Hg)

หลังจากโหลดแบบร่างแล้ว ข้อมูลเกี่ยวกับอุณหภูมิและความดันบรรยากาศจะปรากฏในหน้าต่างการตรวจสอบพอร์ต

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

รหัสคล้ายกับที่อธิบายไว้ข้างต้นมีเพียงบรรทัดสำหรับกำหนดความชื้นเท่านั้นที่จะถูกเพิ่มเข้าไป

โมฆะ printValues() ( Serial.print("Temperature = "); Serial.print(bme.readTemperature()); Serial.println(" C"); // กำหนดอุณหภูมิโดยแสดงบนหน้าจอเป็นหน่วยองศาเซลเซียส Serial.print("Pressure = "); Serial.print(bme.readPressure() / 100.0F); Serial.println(" hPa"); // กำหนดความดันโดยแสดงบนหน้าจอ Serial.print ("Humidity = "); Serial.print(bme.readHumidity()); Serial.println(" %"); // กำหนดความชื้นเป็นเปอร์เซ็นต์โดยแสดงค่าที่วัดได้ Serial.println();

ข้อผิดพลาดในการเชื่อมต่อที่เป็นไปได้และการกำจัด

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

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

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

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

บทสรุป

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

การเชื่อมต่อเซ็นเซอร์ไม่ได้ทำให้เกิดปัญหาใดๆ เนื่องจาก ใช้การเชื่อมต่อ i2C หรือ SPI มาตรฐาน สำหรับการเขียนโปรแกรมคุณสามารถใช้หนึ่งในโปรแกรมสำเร็จรูปได้

โปรแกรมสำหรับ Arduino พร้อมความคิดเห็น:

/* ร่างตัวอย่างไลบรารี SFE_BMP180

ภาพร่างนี้แสดงวิธีใช้ไลบรารี SFE_BMP180 เพื่ออ่าน
เซ็นเซอร์ความดันบรรยากาศ Bosch BMP180
https://www.sparkfun.com/products/11824
เช่นเดียวกับเซ็นเซอร์ความดันส่วนใหญ่ BMP180 วัดความดันสัมบูรณ์
นี่คือความดันบรรยากาศจริงที่อุปกรณ์มองเห็น ซึ่งจะ
แปรผันตามความสูงและสภาพอากาศ
ก่อนที่จะอ่านค่าความดัน คุณต้องอ่านค่าอุณหภูมิก่อน
ทำได้โดยใช้ startTemperature() และ getTemperature()
ผลลัพธ์เป็นองศา C
เมื่อคุณอ่านค่าอุณหภูมิได้แล้ว คุณสามารถอ่านค่าความดันได้
ทำได้โดยใช้ startPressure() และ getPressure()
ผลลัพธ์จะมีหน่วยเป็นมิลลิบาร์ (mb) หรือที่เรียกว่าเฮกโตปาสคาล (hPa)
หากคุณกำลังจะติดตามรูปแบบสภาพอากาศ คุณอาจต้องการ
ลบผลกระทบของระดับความสูง สิ่งนี้จะทำให้เกิดการอ่านที่สามารถ
นำไปเปรียบเทียบกับการอ่านค่าความกดดันที่เผยแพร่จากสถานที่อื่น
เมื่อต้องการทำเช่นนี้ ให้ใช้ฟังก์ชัน sealevel() คุณจะต้องจัดเตรียม
ระดับความสูงที่ทราบซึ่งวัดความดัน
ถ้าจะวัดความสูงก็ต้องรู้ความดันด้วย
ที่ระดับความสูงพื้นฐาน นี่อาจเป็นแรงดันระดับน้ำทะเลเฉลี่ยหรือ
การอ่านค่าความดันก่อนหน้าที่ระดับความสูงของคุณ ในกรณีนี้
การอ่านระดับความสูงที่ตามมาจะเป็น + หรือ - เส้นพื้นฐานเริ่มต้น
ทำได้โดยใช้ฟังก์ชัน altitude()

การเชื่อมต่อฮาร์ดแวร์:
- (GND) ถึง GND
+ (วิน) ถึง 5V
คุณจะต้องเชื่อมต่อพิน I2C (SCL และ SDA) เข้ากับของคุณ
อาร์ดูโน่. พินนั้นแตกต่างกันใน Arduinos ที่แตกต่างกัน:
หมุด Arduino ใด ๆ ที่มีป้ายกำกับ: SDA SCL
อูโน่, เรดบอร์ด, โปร: A4 A5
Mega2560 ครบกำหนด: 20 21
เลโอนาร์โด: 2 3

ไลบรารี SFE_BMP180 ใช้สมการจุดลอยตัวที่พัฒนาโดย
โครงการเครื่องบันทึกข้อมูลสถานีอากาศ: http://wmrx00.sourceforge.net/

V10 ไมค์ กรูซิน, SparkFun Electronics 24/10/2013
อัปเดต V1.1.2 สำหรับ Arduino 1.6.4 5/2015
*/

// ภาพร่างของคุณต้อง #รวมไลบรารีนี้ และไลบรารี Wire
// (Wire เป็นไลบรารีมาตรฐานที่มาพร้อมกับ Arduino):

#รวม
#รวม
#รวม

const int rs = 12, เอน = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
จอแอลซีดี LiquidCrystal (rs, en, d4, d5, d6, d7);

// คุณจะต้องสร้างวัตถุ SFE_BMP180 ซึ่งเรียกว่า "ความดัน":
ความดัน SFE_BMP180;

การตั้งค่าเป็นโมฆะ ()
{
จอแอลซีดี. เริ่มต้น (16, 2);
// เริ่มต้นเซ็นเซอร์ (สิ่งสำคัญคือต้องรับค่าการสอบเทียบที่จัดเก็บไว้ในอุปกรณ์)
ความดันเริ่มต้น();
}

เป็นโมฆะวน()
{
สถานะถ่าน;
สองเท่า T,P,p0=1,013.0,a;// 1,013.0 - ความดันเป็น hPa ที่ระดับน้ำทะเล

// คุณต้องได้รับการวัดอุณหภูมิก่อนจึงจะอ่านค่าความดันได้
// เริ่มการวัดอุณหภูมิ:

สถานะ = ความดัน startTemperature ();
ถ้า (สถานะ != 0)
{
ล่าช้า (สถานะ);

// เรียกข้อมูลการวัดอุณหภูมิที่เสร็จสมบูรณ์:
// โปรดทราบว่าการวัดจะถูกเก็บไว้ในตัวแปร T

สถานะ = pressure.getTemperature (T);
ถ้า (สถานะ != 0)
{
จอแอลซีดี setCursor (0, 0);
จอแอลซีดีพิมพ์("ชั่วคราว=");
จอแอลซีดีพิมพ์(T,2);
จอแอลซีดีพิมพ์("C");
// เริ่มการวัดความดัน:
// พารามิเตอร์คือการตั้งค่าการสุ่มตัวอย่างเกินจาก 0 ถึง 3 (ความละเอียดสูงสุด, รอนานที่สุด)
// หากคำขอสำเร็จ จำนวน ms ที่ต้องรอจะถูกส่งกลับ
// หากคำขอไม่สำเร็จ 0 จะถูกส่งกลับ

สถานะ = ความดัน.startPressure (3);
ถ้า (สถานะ != 0)
{
// รอให้การวัดเสร็จสิ้น:
ล่าช้า (สถานะ);

// ดึงข้อมูลการวัดความดันที่เสร็จสมบูรณ์:
// โปรดทราบว่าการวัดจะถูกเก็บไว้ในตัวแปร P
// โปรดทราบด้วยว่าฟังก์ชันนี้จำเป็นต้องมีการวัดอุณหภูมิก่อนหน้า (T)
// (หากอุณหภูมิคงที่ คุณสามารถวัดอุณหภูมิหนึ่งครั้งสำหรับการวัดความดันจำนวนหนึ่งได้)
// ฟังก์ชันคืนค่า 1 ถ้าสำเร็จ, 0 ถ้าล้มเหลว

สถานะ = pressure.getPressure (P, T);
ถ้า (สถานะ != 0)
{
// พิมพ์การวัด:
จอแอลซีดี setCursor (0, 1);
จอแอลซีดีพิมพ์("P =");
จอแอลซีดีพิมพ์(P/1.333,0); // ค่าสัมประสิทธิ์ 1.333 - การแปลง hPa เป็น mmHg

// หากคุณต้องการกำหนดระดับความสูงจากการอ่านค่าความดัน
// ใช้ฟังก์ชันระดับความสูงร่วมกับความดันพื้นฐาน (ระดับน้ำทะเลหรืออื่นๆ)
// พารามิเตอร์: P = ความดันสัมบูรณ์ในหน่วย mb, p0 = 1,013 ความดันพื้นฐานในหน่วย mb
// ผลลัพธ์: a = ระดับความสูงเป็นม.

a = ความดัน.ระดับความสูง(P,p0);
จอแอลซีดีพิมพ์("H =");
จอแอลซีดีพิมพ์(a,2);
จอแอลซีดีพิมพ์("m");
}
อย่างอื่น lcd.print("ข้อผิดพลาด ");
}
อย่างอื่น lcd.print("ข้อผิดพลาด ");
}
อย่างอื่น lcd.print("ข้อผิดพลาด ");
}
อย่างอื่น lcd.print("ข้อผิดพลาด ");
ล่าช้า (5,000); // หยุดชั่วคราวเป็นเวลา 5 วินาที

#รวม #รวม //ประกาศตัวแปรเพื่อเข้าถึง SFE_BMP180: แรงกดดัน SFE_BMP180; #define ALTITUDE 1655.0 // ระดับความสูงเหนือระดับน้ำทะเลเพื่อความสนุกในหน่วยเมตร การตั้งค่าเป็นโมฆะ() ( Serial.begin(9600); Serial.println("REBOOT"); // การเริ่มต้น if (pressure.begin()) Serial.println( "BMP180 init ok"); else ( // ถ้าเราอยู่ที่นี่ มีบางอย่างไม่ได้ผล ตามกฎแล้ว มีปัญหาในการเชื่อมต่อ Serial.println("BMP180 init failed\n\n"); ในขณะที่(1) ; // freeze ) ) void loop() ( char status; double T,P,p0,a; // หากคุณต้องการทราบความกดอากาศที่แก้ไขระดับน้ำทะเล ซึ่งมักใช้ในการพยากรณ์อากาศ // คุณต้องรู้ ระดับน้ำทะเลในการวัดพื้นที่ของคุณ // จะต้องระบุในค่าคงที่ ALTITUDE ที่จุดเริ่มต้นของโค้ด Serial.print("Sea Level: "); .print(ALTITUDE*3.28084,0); ); // หากคุณต้องการทราบระดับความสูงเหนือระดับน้ำทะเล แต่คุณทราบความดัน // คุณต้องระบุความกดอากาศในปัจจุบัน วิธีการเขียนอยู่ที่ส่วนท้ายของโค้ด ขึ้นอยู่กับอุณหภูมิไม่ทางใดก็ทางหนึ่ง คุณต้องรู้อุณหภูมิก่อน // BMP180 มีเทอร์โมมิเตอร์ในตัว การวัดอุณหภูมิต้องใช้เวลาพอสมควร 0295333727.2);