ኮድ ይፈልጉ

ትምህርት 45፡ BME280 እርጥበት፣ ባሮሜትሪክ ግፊት እና የሙቀት ዳሳሽ ከLCD ጋር

ትምህርት 45፡ BME280 እርጥበት፣ ባሮሜትሪክ ግፊት እና የሙቀት ዳሳሽ ከLCD ጋር

ይህ መመሪያ የBME280 ዳሳሽ እና የI2C LCD ማሳያን በመጠቀም አጠቃላይ የአካባቢ ቁጥጥር ጣቢያ እንዴት እንደሚገነቡ ያሳይዎታል። BME280 የባሮሜትሪክ ግፊትን፣ እርጥበትን እና የሙቀት መጠንን በአንድ ጥቅል ውስጥ የሚለካ ሁለገብ እና እጅግ ትክክለኛ ዳሳሽ ነው። ከ16x2 ወይም 20x4 ቁምፊ LCD ጋር በማጣመር ለብዙ ፕሮጀክቶች ራሱን የቻለ፣ የቀጥታ ማሳያ መፍጠር ይችላሉ።

BMP280-ሞዱል-2

የዚህ ግንባታ ዋጋ በቀላልነቱ እና ጠቀሜታው ላይ ነው። የዳሳሽ መረጃን ለማንበብ ኮምፒውተር ከመፈለግ ይልቅ፣ LCD ወዲያውኑ፣ ሁልጊዜ የሚበራ የእይታ ንባብ ይሰጣል። ይህ ለተግባራዊ አፕሊኬሽኖች ተስማሚ ያደርገዋል ለምሳሌ፦

BME280 ከLCD ማሳያ ጋር፡ ግፊት እና ግምታዊ ከፍታ
BME280 ከLCD ማሳያ ጋር፡ ግፊት እና ግምታዊ ከፍታ
  • የዴስክቶፕ የአየር ሁኔታ ጣቢያ መገንባት የቤትዎን የውስጥ የአየር ንብረት ለመከታተል።
  • የባሮሜትሪክ ግፊት መቆጣጠሪያ መፍጠር የአየር ሁኔታ አዝማሚያዎችን ለመከታተል እና የአጭር ጊዜ ለውጦችን ለመተንበይ።
  • ትንሽ የግሪንሀውስ መቆጣጠሪያ ማሳያ ማዘጋጀት ለተክሎችዎ የሙቀት መጠን እና እርጥበት ለማሳየት።
  • የቤት አውቶሜሽን ማዕከል መስራት በክፍሉ ውስጥ ያለውን የአሁኑን የምቾት ደረጃ የሚያሳይ።
  • የትምህርት መሳሪያ መገንባት ስለ I2C ግንኙነት፣ የዳሳሽ ንባብ እና የመረጃ ማሳያ ከአርዱኖ ጋር ለመማር።

ይህ ፕሮጀክት ከአርዱኖ ጋር የተወሰነ ልምድ ላላቸው እና ከመሠረታዊ ብልጭ ድርግም ከሚሉ LEDs ባሻገር መሄድ ለሚፈልጉ ፈጣሪዎች ፍጹም ቀጣይ እርምጃ ነው። የቀረበው ኮድ በልዩ ተግባራት የተዋቀረ ነው፣ ይህም መረጃን በበርካታ ቅርፀቶች (ሴልሺየስ፣ ፋረንሃይት፣ ኬልቪን) እና በተለያዩ አሃዶች ለማሳየት ቀላል ያደርገዋል፣ ይህም በማሳያ ውጤትዎ ላይ ሙሉ ቁጥጥር ይሰጥዎታል።

የሚያስፈልጉ ሃርድዌሮች

ይህን ፕሮጀክት ለማጠናቀቅ የሚከተሉትን ክፍሎች ያስፈልግዎታል። እነዚህ ሁሉ የተለመዱ እና ከኤሌክትሮኒክስ አቅራቢዎች በቀላሉ የሚገኙ ናቸው።

  • አርዱኖ ኡኖ (ወይም እንደ Mega ወይም Nano ያለ ማንኛውም ተኳሃኝ ቦርድ)
  • BME280 ዳሳሽ ሞዱል (I2C ስሪት)
  • LCD1602 (16x2) ወይም LCD2004 (20x4) ከI2C በይነገጽ ሞዱል ጋር
  • ጃምፐር ሽቦዎች (M-M)
  • ብሬድቦርድ (አማራጭ፣ ለቀላል ግንኙነቶች)

ከመጀመርዎ በፊት፣ ለBME280 ዳሳሽ እና ለI2C LCD ሞዱል የተለያዩ ትምህርቶችን እንዲመለከቱ በጣም ይመከራል። ይህ አስፈላጊ ቤተ-መጻሕፍትን እንደጫኑ እና እያንዳንዱን ክፍል በተናጠል መሞከር እንደሚችሉ ያረጋግጣል፣ ይህም ችግሮች ካጋጠሙዎት መላ መፈለግን ቀላል ያደርገዋል። (በቪዲዮ 00:44 ላይ)

የሽቦ አገናኝ መመሪያ

BME280 አርዱኖ ሽቦ ከLCD1602 ወይም LCD204 ጋር

ይህ ፕሮጀክት በሁለት የተለያዩ I2C መሳሪያዎች ላይ የተመሰረተ ነው። የI2C አውቶቡስ ሁለት የውሂብ መስመሮችን (SDA እና SCL) በመጠቀም ብዙ መሳሪያዎችን እንዲያገናኙ ያስችልዎታል በተጨማሪም ኃይል እና መሬት። ይህ ሽቦ ማገናኘት በጣም ቀላል ያደርገዋል።

የBME280 ዳሳሽ ከአርዱኖው 5V እና GND ፒን ጋር ተገናኝቷል። የSDA እና SCL ፒኖች በቅደም ተከተል ከአርዱኖው A4 እና A5 ፒኖች ጋር ተገናኝተዋል። የLCD ሞዱል በተመሳሳይ መንገድ ተገናኝቷል። ሁለቱም መሳሪያዎች በአንድ I2C አውቶቡስ ላይ ስለሆኑ፣ ተመሳሳይ A4 (SDA) እና A5 (SCL) ፒኖችን ይጋራሉ። ይህ የI2C ቁልፍ ጠቀሜታ ነው—በተመሳሳይ ባለ ሁለት ሽቦ አውቶቡስ ላይ እስከ 128 መሳሪያዎችን ማገናኘት ይችላሉ። (በቪዲዮ 03:41 ላይ)

አንድ አስፈላጊ ዝርዝር የBME280 ዳሳሽ VIN ፒን በቀጥታ ከ5V መስመር ጋር አለመገናኘቱ ነው። በምትኩ፣ ከዲጂታል ፒን (በኮዱ ውስጥ ፒን 12) ጋር ተገናኝቷል። ይህ የሚደረገው አርዱኖው ለዳሳሹ ኃይል እንዲቆጣጠር፣ አስፈላጊ ሲሆን ብቻ እንዲያበራው፣ ይህም ለአነስተኛ ኃይል አፕሊኬሽኖች ጠቃሚ ሊሆን ይችላል። ኮዱ ይህን ፒን በሴቲንግ ውስጥ ለዳሳሹ ኃይል ለማቅረብ HIGH ያደርገዋል። (በቪዲዮ 05:48 ላይ)

የግንኙነቶች ማጠቃለያ እነሆ፦

  • BME280 VIN -> አርዱኖ ፒን 12
  • BME280 GND -> አርዱኖ GND
  • BME280 SCL -> አርዱኖ A5
  • BME280 SDA -> አርዱኖ A4
  • LCD VCC -> አርዱኖ 5V
  • LCD GND -> አርዱኖ GND
  • LCD SCL -> አርዱኖ A5
  • LCD SDA -> አርዱኖ A4

ለተለያዩ የአርዱኖ ቦርዶች፣ የI2C ፒኖች ሊለያዩ ይችላሉ። ለምሳሌ፣ በአርዱኖ ሜጋ ላይ፣ SDA ፒን 20 እና SCL ፒን 21 ነው። (በቪዲዮ 03:50 ላይ)

የኮድ ማብራሪያ

የዚህ ፕሮጀክት ኮድ ለተጠቃሚ ምቹ እንዲሆን የተነደፈ ነው፣ መረጃን የማግኘት እና የማሳየት ሂደትን የሚያቃልሉ ሁለት ቁልፍ ተግባራት ያሉት። ሙሉው ፕሮግራም ከጽሑፉ በታች ይገኛል። ከዚህ በታች በተጠቃሚ ሊዋቀሩ በሚችሉ ክፍሎች እና በተሰጡት ብጁ ተግባራት ላይ እናተኩራለን።

በመጀመሪያ፣ ሁለት ቤተ-መጻሕፍትን መጫን ያስፈልግዎታል። የመጀመሪያው Adafruit_BME280 ቤተ-መጻሕፍት ነው፣ እሱም ከዳሳሹ ጋር ያለውን ሁሉንም ዝቅተኛ ደረጃ ግንኙነት ያስተናግዳል። ሁለተኛው LiquidCrystal_I2C ቤተ-መጻሕፍት ነው፣ እሱም LCD ን በቀላሉ እንዲቆጣጠሩ ያስችልዎታል። ሁለቱም በአርዱኖ IDE ቤተ-መጻሕፍት አስተዳዳሪ በኩል ሊጫኑ ይችላሉ። (በቪዲዮ 04:11 ላይ)

በስኬቹ አናት ላይ፣ ለማዋቀርዎ ማስተካከል የሚያስፈልግዎትን ቁልፍ የውቅር መለኪያዎች ያገኛሉ።


#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME280 bme; // I2C
  • SEALEVELPRESSURE_HPA፡ ይህ ቋሚ በባህር ደረጃ ላይ ያለውን መደበኛ የከባቢ አየር ግፊት በሄክቶፓስካል (hPa) ይገልጻል። ይህ እሴት ግምታዊ ከፍታን ለማስላት ወሳኝ ነው። ለተሻለ የከፍታ ትክክለኛነት ይህንን ወደ ትክክለኛ የአካባቢ እሴት ማስተካከል ይፈልጉ ይሆናል።
  • Adafruit_BME280 bme;፡ ይህ መስመር የBME280 ዳሳሽ ነገር ምሳሌ ይፈጥራል፣ ይህም በኮድዎ ውስጥ ከዳሳሹ ጋር ለመገናኘት ይጠቀማሉ።

በመቀጠል፣ ለዳሳሹ ኃይል የሚሆን ፒን እና የኤልሲዲውን I2C አድራሻ ይገልጻሉ። የI2C አድራሻው ወሳኝ ነው። የኤልሲዲ ሞጁልዎን አድራሻ የI2C ስካነር ስኬች በማሄድ ማግኘት ይችላሉ። በቪዲዮው ውስጥ፣ ስካነሩ ሁለት አድራሻዎችን ያሳያል፡ አንዱ ለዳሳሹ (0x76) እና አንዱ ለኤልሲዲው (0x3F)። (በቪዲዮ 06:37)


#define BME_VIN_PIN 12 // ለBME280 VIN ፒን
LiquidCrystal_I2C lcd(0x3F, 16, 2); // የኤልሲዲ አድራሻን ወደ 0x3F ለ16 ቁምፊዎች እና 2 መስመር ማሳያ ያዘጋጁ
  • BME_VIN_PIN፡ ይህ BME280 ዳሳሹን ለማብራት የሚያገለግለውን ዲጂታል ፒን (ፒን 12) ይገልጻል። ይህንን ወደ ሌላ ማንኛውም የሚገኝ ዲጂታል ፒን መቀየር ይችላሉ።
  • LiquidCrystal_I2C lcd(0x3F, 16, 2);፡ ይህ የኤልሲዲ ነገርን ይፈጥራል። የመጀመሪያው መለኪያ በስካነሩ ያገኙት የI2C አድራሻ ነው። ሁለተኛው እና ሦስተኛው መለኪያዎች በኤልሲዲዎ ላይ ያሉትን የአምዶች እና የረድፎች ብዛት ይገልጻሉ። 20x4 ኤልሲዲ እየተጠቀሙ ከሆነ፣ ይህንን ወደ lcd(0x3F, 20, 4); ይቀይሩት። (በቪዲዮ 08:22)

ኮዱ ህይወትዎን ቀላል ለማድረግ ሁለት ብጁ ተግባራትን ይሰጣል። የመጀመሪያው፣ getBME(char type)፣ በእሱ ላይ በሚያስተላልፉት ቁምፊ ላይ በመመስረት አንድ ነጠላ የዳሳሽ ንባብ የሚመልስ ኃይለኛ ተግባር ነው። ይህ ለእያንዳንዱ መለኪያ የተለየ ኮድ የመጻፍን ፍላጎት ያስወግዳል።


float getBME(char type)
{
   // Robojax.com BME280 Code YouTube Watch it here http://robojax.com/L/?id=338
  float value;
    float temp = bme.readTemperature();// የሙቀት መጠን ያንብቡ
    float pressure = bme.readPressure() / 100.0F; // ግፊት ያንብቡ
    float rel_hum = bme.readHumidity();// እርጥበት ያንብቡ
    float alt =bme.readAltitude(SEALEVELPRESSURE_HPA);// ከፍታ ያንብቡ
   if(type =='F')
   {
    value = temp *9/5 + 32;// ወደ ፋራናይት ይቀይሩ
   }else if(type =='K')
   {
    value = temp + 273.15;// ወደ ኬልቪን ይቀይሩ
   }else if(type =='H')
   {
    value = rel_hum;// አንጻራዊ እርጥበት ይመልሱ
   }else if(type =='P')
   {
    value = pressure;// ግፊት ይመልሱ
   }else if(type =='A')
   {
    value = alt;// ግምታዊ ከፍታ ይመልሱ
   }else{
    value = temp;// ሴልሺየስ ይመልሱ
   }
   return value;
    // Robojax.com BME280 Code YouTube Watch it here http://robojax.com/L/?id=338
}//getBME

ይህንን ተግባር ለመጠቀም፣ በተገቢው ቁምፊ ብቻ ይደውሉት። ለምሳሌ፣ የሙቀት መጠንን በፋራናይት ለማግኘት፣ getBME('F') ብለው ይደውሉ። የሚገኙት አማራጮች፡-

  • 'C'፡ የሙቀት መጠንን በሴልሺየስ ይመልሳል (ነባሪ)።
  • 'F'፡ የሙቀት መጠንን በፋራናይት ይመልሳል።
  • 'K'፡ የሙቀት መጠንን በኬልቪን ይመልሳል።
  • 'H'፡ አንጻራዊ እርጥበትን በመቶኛ ይመልሳል።
  • 'P'፡ የባሮሜትሪክ ግፊትን በhPa ይመልሳል።
  • 'A'፡ ግምታዊ ከፍታን በሜትር ይመልሳል።

ይህ ተግባር ለloop() እጅግ ጠቃሚ ነው ምክንያቱም ሁሉንም እሴቶች ወደ Serial Monitor በቀላሉ ለማተም ወይም በሎጂክ መግለጫዎች ውስጥ ለመጠቀም ያስችልዎታል።

የቀጥታ ፕሮጀክት ማሳያ

ኮዱ ከተጫነ በኋላ፣ ኤልሲዲው ዋናውን loop ከመጀመሩ በፊት ለሁለት ሰከንድ የእንኳን ደህና መጡ መልዕክት ያሳያል። ከዚያም ማሳያው በበርካታ ስክሪኖች ውስጥ ይዘዋወራል፣ እያንዳንዱም የተለያዩ የዳሳሽ መረጃዎችን ያሳያል። (በቪዲዮ 09:57)

በማሳያው ውስጥ፣ የሙቀት መጠንን በሴልሺየስ፣ በፋራናይት እና በኬልቪን ታያለህ፣ እያንዳንዱም በትክክለኛው አሃድ እና በሚመለከተው የዲግሪ ምልክት ይታያል። ማሳያው እርጥበትን እንደ መቶኛ፣ የባሮሜትሪክ ግፊትን በሄክቶፓስካል (hPa) እና ግምታዊ ከፍታን በሜትር ያሳያል። ቪዲዮው የ44 ዲግሪ ሴልሺየስ፣ 165 ዲግሪ ፋራናይት እና 20% እርጥበት ንባብ ያሳያል፣ ሁሉም በስክሪኑ ላይ በትክክል እየተዘመኑ። (በቪዲዮ 16:50)

በቪዲዮው ውስጥ የተጠቀሰው አንድ ትንሽ ጉዳይ የከፍታ ንባብ ተጨማሪ አሃዝ ሊኖረው ይችላል፣ ይህም በኤልሲዲው ላይ በተወሰነው ቦታ ላይ እንዲፈስ ሊያደርግ ይችላል። ይህ በማሳያ ተግባር ውስጥ የጽሑፍ መጠንን ወይም ክፍተትን በማስተካከል ሊፈታ የሚችል ትንሽ የመልክ ጉዳይ ነው። (በቪዲዮ 17:04)

ፕሮጀክቱ እንደታሰበው ይሰራል፣ ከBME280 ዳሳሽ የሚገኙ ሁሉንም ቁልፍ የአካባቢ መረጃዎች ግልጽ እና ቀጣይነት ያለው ንባብ ይሰጣል። ይህ ለተለያዩ የአየር ሁኔታ እና የአካባቢ ቁጥጥር ፕሮጀክቶች ጥሩ መሠረት ያደርገዋል።

የቪዲዮ ምዕራፎች

  • [00:00] መግቢያ እና የፕሮጀክት አጠቃላይ እይታ
  • [00:44] ቅድመ ሁኔታዎች እና አስፈላጊ ቤተ-መጻሕፍት
  • [02:19] BME280 እና ኤልሲዲን ከአርዱኖ ጋር ማገናኘት
  • [04:11] አስፈላጊ ቤተ-መጻሕፍትን መጫን
  • [05:06] የኮድ ማብራሪያ፡ የሚካተቱ እና የፒን ትርጓሜዎች
  • [06:37] ለኤልሲዲዎ የI2C አድራሻ ማግኘት
  • [08:32] የኮድ ማብራሪያ፡ የSetup ተግባር
  • [10:22] የኮድ ማብራሪያ፡ ዋና Loop እና የማሳያ አመክንዮ
  • [12:34] የኮድ ማብራሪያ፡ ብጁ getBME() ተግባር
  • [14:52] የኮድ ማብራሪያ፡ ብጁ የኤልሲዲ ማሳያ ተግባር
  • [16:50] የቀጥታ ፕሮጀክት ማሳያ
  • [18:18] መደምደሚያ እና ቀጣይ እርምጃዎች

ምስሎች

BME280 with LCD display: pressure and approximate elevation
BME280 wiht LCD display: pressure and approximate elevation
BMP280-mobule-2
BMP280-mobule-2
BMP280-mobule-1
BMP280-mobule-1
BME280 Arduino wiring with LCD1602 or LCD204
BME280 Arduino wiring with LCD1602 or LCD204
500-Lesson 45: BME280 Humidity, Barometric Pressure, and Temperature Sensor with LCD
ቋንቋ: C++
/***************************************************************************
 * Robojax Arduino Step By Step Course
 * Part 4: Temperature Sensors
 * Lesson 37: BME280 code with two extra functions to display temperature easily
 
* Written and updated by Ahmad Shamshiri on July 25, 2019 at 18:42 
* in Ajax, Ontario, Canada for Robojax.com

  Please watch video instructions here https://youtu.be/zqJRNGECAvw
 This code is available at http://robojax.com/course1/?vid=lecture37
 
With over 100 lectures free on YouTube. Watch it here http://robojax.com/L/?id=338
Get the code for the course: http://robojax.com/L/?id=339  

If you found this tutorial helpful, please support me so I can continue creating.
Make a donation using PayPal http://robojax.com/L/?id=64


  This is a library for the BME280 humidity, temperature & pressure sensor

  Designed specifically to work with the Adafruit BME280 Breakout
  ----> http://www.adafruit.com/products/2650

  These sensors use I2C or SPI to communicate, 2 or 4 pins are required
  to interface. The device's I2C address is either 0x76 or 0x77.

  Adafruit invests time and resources providing this open source code,
  please support Adafruit and open-source hardware by purchasing products
  from Adafruit!

  Written by Limor Fried & Kevin Townsend for Adafruit Industries.
  BSD license, all text above must be included in any redistribution
 ***************************************************************************/

#include <Wire.h>

#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME280 bme; // I2C



void setup() {
    Serial.begin(9600);
    Serial.println(F("BME280 test"));

    bool status;
    
    // default settings
    // (you can also pass in a Wire library object like &Wire2)
    status = bme.begin();  
    if (!status) {
        Serial.println("Could not find a valid BME280 sensor, check wiring!");
        while (1);
    }
    
    Serial.println("-- Robojax Test --");
    delay(2000);

    Serial.println();
}


void loop() { 
    // Robojax.com BME280 Code YouTube Watch it here http://robojax.com/L/?id=338
    Serial.print("Temperature = ");
    Serial.print(getBME('C'));
    printDegree();
    Serial.print("C ");
    Serial.print(getBME('F'));
    printDegree();
    Serial.print("F "); 
    Serial.print(getBME('K'));
    Serial.println("K ");       


    Serial.print("Pressure = ");
    Serial.print(getBME('P'));
    Serial.println(" hPa ");

    Serial.print("Humidity = ");
    Serial.print(getBME('H'));
    Serial.println("% ");
    
    Serial.print("Approx. Altitude = ");
    Serial.print(getBME('A'));
    Serial.println(" m");



    Serial.println();

    // action
    if(getBME('C') <65.2)
    {
     //digitalWrite(5, HIGH); 
    }
    delay(2000);
     // Robojax.com BME280 Code YouTube Watch it here http://robojax.com/L/?id=338
}// loop end



/*
 * @brief returns temperature or relative humidity
 * @param "type" is character
 *     C = Celsius
 *     K = Kelvin
 *     F = Fahrenheit
 *     H = Humidity
 *     P = Pressure
 *     A = Altitude
 * @return returns one of the values above
 * Usage: to get Fahrenheit type: getHTU('F')
 * to print it on serial monitor Serial.println(getBME('F'));
 * Written by Ahmad Shamshiri on July 13, 2019. Updated July 25, 2019
 * in Ajax, Ontario, Canada
 * www.Robojax.com 
 */
float getBME(char type)
{
   // Robojax.com BME280 Code YouTube Watch it here http://robojax.com/L/?id=338
  float value;
    float temp = bme.readTemperature();// read temperature
    float pressure = bme.readPressure() / 100.0F; // read pressure
    float rel_hum = bme.readHumidity();// read humidity
    float alt =bme.readAltitude(SEALEVELPRESSURE_HPA);// read altitude
   if(type =='F')
   {
    value = temp *9/5 + 32;//convert to Fahrenheit 
   }else if(type =='K')
   {
    value = temp + 273.15;//convert to Kelvin
   }else if(type =='H')
   {
    value = rel_hum;//return relative humidity
   }else if(type =='P')
   {
    value = pressure;//return pressure
   }else if(type =='A')
   {
    value = alt;//return approximate altitude
   }else{
    value = temp;// return Celsius
   }
   return value;
    // Robojax.com BME280 Code YouTube Watch it here http://robojax.com/L/?id=338
}//getBME


/*
 * @brief prints degree symbol on serial monitor
 * @param none
 * @return returns nothing
 * Written by Ahmad Shamshiri on July 13, 2019
 * for Robojax Tutorial Robojax.com
 */
 void printDegree()
{
   // Robojax.com Code
    Serial.print("\\xC2"); 
    Serial.print("\\xB0");  
}

እንደሚያስፈልግዎት ይችላል

ምንጮች እና ምንጮች

ፋይሎች📁