সুচিপত্র:

BMP280 এবং BME280: 7 ধাপের জন্য লাইব্রেরি
BMP280 এবং BME280: 7 ধাপের জন্য লাইব্রেরি

ভিডিও: BMP280 এবং BME280: 7 ধাপের জন্য লাইব্রেরি

ভিডিও: BMP280 এবং BME280: 7 ধাপের জন্য লাইব্রেরি
ভিডিও: Part 2: Software Build of LoRa Receiver and WiFi Webserver based on Arduino ESP32 (EP13) 2024, জুলাই
Anonim
BMP280 এবং BME280 এর জন্য লাইব্রেরি
BMP280 এবং BME280 এর জন্য লাইব্রেরি
BMP280 এবং BME280 এর জন্য লাইব্রেরি
BMP280 এবং BME280 এর জন্য লাইব্রেরি
BMP280 এবং BME280 এর জন্য লাইব্রেরি
BMP280 এবং BME280 এর জন্য লাইব্রেরি

ভূমিকা

আমি এই লাইব্রেরী লিখতে বের হইনি। এটি একটি প্রকল্পের পার্শ্ব-প্রতিক্রিয়া হিসাবে "ঘটেছে" যা BMP280 ব্যবহার করে। সেই প্রকল্পটি এখনও শেষ হয়নি, কিন্তু আমি মনে করি লাইব্রেরিটি অন্যদের সাথে ভাগ করার জন্য প্রস্তুত। পরবর্তীতে আমার একটি BME280 ব্যবহার করার প্রয়োজন ছিল, যা BMP280 এর চাপ এবং তাপমাত্রার ক্ষমতাতে আর্দ্রতা পরিমাপ যোগ করে। BME280 BMP280 এর সাথে "পশ্চাদপদ -সামঞ্জস্যপূর্ণ" - অর্থাৎ BME280 থেকে চাপ এবং তাপমাত্রা পড়ার জন্য প্রয়োজনীয় সমস্ত রেজিস্টার এবং পদক্ষেপগুলি BMP280- এর জন্য ব্যবহৃত ধাপগুলির সমান। আর্দ্রতা পড়ার জন্য অতিরিক্ত রেজিস্টার এবং পদক্ষেপ প্রয়োজন, শুধুমাত্র BME280 এর জন্য প্রযোজ্য। এটি প্রশ্ন উত্থাপন করে, উভয়ের জন্য একটি গ্রন্থাগার, অথবা দুটি পৃথক গ্রন্থাগার। দুটি ডিভাইসের প্রকারের হার্ডওয়্যার সম্পূর্ণরূপে বিনিময়যোগ্য। এমনকি অনেক মডিউল বিক্রি হচ্ছে (উদাহরণস্বরূপ Ebay এবং AliExpress এ) BME/P280 লেবেলযুক্ত। এটি কোন ধরণের তা জানতে, আপনাকে সেন্সরে নিজেই (মিনিস্কুল) লেখাটি দেখতে হবে, বা ডিভাইস আইডি বাইট পরীক্ষা করতে হবে। আমি একটি একক গ্রন্থাগারে যাওয়ার সিদ্ধান্ত নিয়েছি। এটা ঠিক কাজ করেছে বলে মনে হচ্ছে।

প্রতিক্রিয়া, বিশেষ করে উন্নতির জন্য কোন পরামর্শ, প্রশংসা করা হবে।

লাইব্রেরির বৈশিষ্ট্য এবং ক্ষমতা

লাইব্রেরি হল সফটওয়্যারের একটি অংশ যা একটি প্রোগ্রামারকে ডিভাইসের ক্ষমতা প্রয়োগ করার জন্য একটি অ্যাপ্লিকেশন প্রোগ্রামিং ইন্টারফেস (API) প্রদান করে, অগত্যা সমস্ত সূক্ষ্ম শস্যের বিবরণ মোকাবেলা না করেই। ইচ্ছাকৃতভাবে, এপিআই সহজ হতে হবে একটি শিক্ষানবিসের জন্য সহজ প্রয়োজনীয়তা দিয়ে শুরু করার সময়, ডিভাইসের ক্ষমতাগুলির সম্পূর্ণ শোষণের জন্য। দেশীয়ভাবে লাইব্রেরি ডিভাইস প্রস্তুতকারকের কোন নির্দিষ্ট নির্দেশিকা, সেইসাথে সাধারণ সফ্টওয়্যার ভাল অনুশীলন অনুসরণ করা উচিত। আমি এই সব অর্জন করার চেষ্টা করেছি। BMP280 দিয়ে শুরু করার সময়, আমি এর জন্য 3 টি ভিন্ন লাইব্রেরি পেয়েছি: Adafruit_BMP280; Seeed_BMP280; এবং ডিভাইস প্রস্তুতকারকের কাছ থেকে BMP280 নামে পরিচিত। অ্যাডাফ্রুট বা সীড উভয়ই বর্ধিত ক্ষমতা প্রদান করেনি, যদিও তারা ভাল কাজ করেছিল এবং মৌলিক অ্যাপ্লিকেশনের জন্য ব্যবহার করা সহজ ছিল। আমি ডিভাইস নির্মাতা (Bosch Sensortec) দ্বারা উত্পাদিত একটি কিভাবে ব্যবহার করতে পারি তা বুঝতে পারছিলাম না। এটি আমার অভাব হতে পারে, তাদের চেয়ে। যাইহোক লাইব্রেরিটি অন্য দুটির তুলনায় অনেক বেশি জটিল ছিল, আমি কোন নির্দেশনা বা ব্যবহারের উদাহরণ খুঁজে পাইনি (পরে আমি "bmp280_support.c" ফাইলে উদাহরণ পেয়েছি, তবে এগুলি আমার জন্য বিশেষভাবে সহায়ক ছিল না)।

এই কারণগুলির ফলস্বরূপ, আমি BMP280 এর জন্য আমার নিজের লাইব্রেরি লেখার সিদ্ধান্ত নিয়েছি।

BME280- এর জন্য লাইব্রেরির পরিস্থিতি খুঁজতে গিয়ে, আমি আলাদা লাইব্রেরি Adafruit_BME280, Seed_BME280 এবং আরেকটি BME280_MOD-1022 এমবেডেড অ্যাডভেঞ্চার দ্বারা লেখা খুঁজে পেয়েছি। তাদের কেউ BME280 ব্যবহার করতে সক্ষম একটি লাইব্রেরিতে BMP280 এর জন্য ফাংশনগুলিকে একত্রিত করেনি। ডিভাইস এবং তার নিয়ন্ত্রণকারী মাইক্রোপ্রসেসর যখন ঘুমাচ্ছে তখন তাদের কেউই স্পষ্টভাবে কিছু বিট ডেটা সংরক্ষণ করার ক্ষমতাকে সমর্থন করেনি (এই ক্ষমতাটি ডেটশীটে স্পষ্ট এবং আমি এখানে যে লাইব্রেরি লিখেছি এবং বর্ণনা করেছি তা সমর্থিত)।

একটি সম্মিলিত লাইব্রেরির BME280 এর সমস্ত ক্ষমতার জন্য সমর্থন থাকা উচিত, কিন্তু যখন BMP280 এর সাথে ব্যবহার করা হয় তখন এটি অব্যবহৃত ফাংশন থেকে কোন ওভারহেড আরোপ করা উচিত নয়। একটি মিলিত লাইব্রেরির সুবিধাগুলির মধ্যে রয়েছে কম লাইব্রেরি ফাইলগুলি পরিচালনা করা, একই প্রকল্পে বিভিন্ন ডিভাইসের সহজ মিশ্রণ এবং মিল, এবং রক্ষণাবেক্ষণ বা আপগ্রেডের জন্য সরলীকৃত পরিবর্তন যা কেবল দুটি পরিবর্তে এক জায়গায় করতে হবে। এগুলি সম্ভবত বেশ ছোট, এমনকি তুচ্ছ, কিন্তু…

ডিভাইসের ক্ষমতা

BMP280 এবং BME280 প্রায় 5 মিমি বর্গ এবং 1 মিমি উঁচু সারফেস-মাউন্ট ডিভাইস। 8 টি ইন্টারফেস প্যাড রয়েছে, যার মধ্যে 2 টি পৃথক পাওয়ার ইনপুট প্যাড এবং দুটি গ্রাউন্ড প্যাড রয়েছে। এগুলি মডিউল হিসাবে ইবেতে পাওয়া যায় 4 বা 6 টি পিনের সাথে। 4-পিন মডিউলের একটি নির্দিষ্ট I2C ঠিকানা আছে এবং SPI প্রোটোকল ব্যবহার করার জন্য কনফিগার করা যাবে না।

6-পিন মডিউল বা বেয়ার ডিভাইস I2C বা SPI প্রোটোকলের সাথে ব্যবহার করা যেতে পারে। I2C মোডে এটির দুটি ভিন্ন ঠিকানা থাকতে পারে, যা SDO পিনকে গ্রাউন্ড (বেস অ্যাড্রেস = 0x76) অথবা Vdd (বেস অ্যাড্রেস +1 = 0x77) এর সাথে সংযুক্ত করে অর্জন করা যায়। SPI মোডে এটির স্বাভাবিক ব্যবস্থা 1 ঘড়ি, 2 ডেটা (প্রতিটি দিকের জন্য একটি) এবং একটি ডিভাইস সিলেক্ট পিন (CS)।

আমি এখানে যে লাইব্রেরি লিখেছি এবং বর্ণনা করেছি তা শুধুমাত্র I2C সমর্থন করে। Adafruit_BMP280 এবং BME_MOD-1022 লাইব্রেরিতে i2C এবং SPI উভয়ের জন্য সমর্থন রয়েছে।

গ্রন্থাগারটি এখানে ডাউনলোড করা যাবে:

github.com/farmerkeith/BMP280-library

ধাপ 1: হার্ডওয়্যার সেট আপ

হার্ডওয়্যার সেট আপ
হার্ডওয়্যার সেট আপ

লাইব্রেরি কাজে লাগার আগে BMP280 (অথবা আপনি চাইলে দুজনের সাথে) একটি মাইক্রোকন্ট্রোলার সংযুক্ত করতে পারেন।

আমি একটি WeMos D1 মিনি প্রো ব্যবহার করেছি, তাই আমি এর সংযোগগুলি দেখাব। অন্যান্য মাইক্রোকন্ট্রোলারগুলি একই রকম হবে, আপনাকে কেবল এসডিএ এবং এসসিএল পিনগুলি সঠিকভাবে সংযুক্ত করতে হবে।

WeMos D1 মিনি প্রো এর ক্ষেত্রে, সংযোগগুলি হল:

ফাংশন WeMos পিন BMP280 পিন নোট

SDA D2 SDA SCL D1 SCL Vdd 3V3 Vin Nominal 3.3V Ground GND ঠিকানা নিয়ন্ত্রণ SDO Ground অথবা Vdd I2C সিলেক্ট CSB Vdd (GND সিলেক্ট করে SPI)

মনে রাখবেন যে MP280 মডিউলের কিছুতে SDO পিনটি SDD লেবেলযুক্ত, এবং Vdd পিনটি VCC লেবেলযুক্ত হতে পারে। দ্রষ্টব্য: এসডিএ এবং এসসিএল লাইনে লাইন এবং ভিন পিনের মধ্যে পুল-আপ প্রতিরোধক থাকা উচিত। সাধারণত 4.7K এর মান ঠিক থাকা উচিত। কিছু BMP280 এবং BME280 মডিউলে মডিউলের অন্তর্ভুক্ত 10K পুল-আপ প্রতিরোধক রয়েছে (যা ভাল অভ্যাস নয়, যেহেতু I2C বাসে একাধিক ডিভাইস লাগালে এটি অতিরিক্ত লোড হতে পারে)। যাইহোক, 10K রোধকারী সহ 2 BME/P280 মডিউল ব্যবহার করা অনুশীলনে সমস্যা হওয়া উচিত নয় যতক্ষণ না একই বাসে পুল-আপ প্রতিরোধক সহ অন্যান্য অনেক ডিভাইস নেই।

একবার আপনার হার্ডওয়্যার সংযুক্ত হয়ে গেলে, আপনি সহজেই চেক করতে পারেন যে আপনার ডিভাইসটি BMP280 নাকি BME280 স্কেচ I2CScan_ID চালানোর মাধ্যমে যা আপনি এখানে পেতে পারেন:

আপনি ডিভাইসটি দেখে আপনার BMP280 বা BME280 আছে কিনা তাও পরীক্ষা করতে পারেন। আমি এটি করার জন্য একটি ডিজিটাল মাইক্রোস্কোপ ব্যবহার করা প্রয়োজন বলে মনে করেছি, কিন্তু যদি আপনার দৃষ্টিশক্তি খুব ভাল হয় তবে আপনি কোন সাহায্য ছাড়াই এটি করতে সক্ষম হতে পারেন। ডিভাইসের আবরণে মুদ্রণের দুটি লাইন রয়েছে। দ্বিতীয় লাইনের প্রথম অক্ষরটি কী, যা BMP280 ডিভাইসের ক্ষেত্রে একটি "K" এবং BME280 ডিভাইসের ক্ষেত্রে একটি "U"।

ধাপ 2: লাইব্রেরি কর্তৃক প্রদত্ত API

লাইব্রেরি কর্তৃক প্রদত্ত API
লাইব্রেরি কর্তৃক প্রদত্ত API
লাইব্রেরি দ্বারা প্রদত্ত API
লাইব্রেরি দ্বারা প্রদত্ত API

একটি স্কেচে লাইব্রেরী সহ

স্টেটমেন্ট ব্যবহার করে স্ট্যান্ডার্ড পদ্ধতিতে লাইব্রেরিটি একটি স্কেচে অন্তর্ভুক্ত করা হয়েছে

#অন্তর্ভুক্ত করুন "Farmerskeith_BMP280.h"

এই বিবৃতিটি সেটআপ () ফাংশন শুরুর আগে স্কেচের প্রাথমিক অংশে অন্তর্ভুক্ত করা প্রয়োজন।

একটি BME বা BMP সফটওয়্যার অবজেক্ট তৈরি করা

BMP280 সফটওয়্যার অবজেক্ট তৈরির জন্য 3 টি লেভেল আছে। সবচেয়ে সহজ হল ন্যায্য

bme280 অবজেক্ট নাম; অথবা bmp280 objectName;

উদাহরণস্বরূপ, BMP280 bmp0;

এটি 0x76 এর ডিফল্ট ঠিকানা সহ একটি সফ্টওয়্যার অবজেক্ট তৈরি করে (যেমন মাটিতে সংযুক্ত SDO এর জন্য)।

একটি BME280 বা BMP280 সফটওয়্যার অবজেক্ট তৈরির জন্য পরবর্তী স্তরে 0 বা 1 এর একটি প্যারামিটার রয়েছে, নিম্নরূপ:

bme280 objectNameA (0);

bmp280 objectNameB (1);

I2C বেস অ্যাড্রেসে প্যারামিটার (0 বা 1) যোগ করা হয়েছে, যাতে একই I2C বাসে (প্রত্যেকটির একটি সহ) দুটি BME280 বা BMP280 ডিভাইস ব্যবহার করা যায়।

BME বা BMP280 সফটওয়্যার অবজেক্ট তৈরির জন্য তৃতীয় স্তরের দুটি প্যারামিটার রয়েছে। প্রথম প্যারামিটার, যা হয় 0 বা 1, ঠিকানার জন্য, যেমন আগের কেস। দ্বিতীয় প্যারামিটার ডিবাগ প্রিন্টিং নিয়ন্ত্রণ করে। যদি এটি 1 তে সেট করা হয়, সফ্টওয়্যার অবজেক্টের সাথে প্রতিটি লেনদেনের ফলাফল সিরিয়াল.প্রিন্ট আউটপুট হয় যা প্রোগ্রামারকে লেনদেনের বিস্তারিত দেখতে সক্ষম করে। উদাহরণ স্বরূপ:

bmp280 objectNameB (1, 1);

ডিবাগ প্রিন্টিং প্যারামিটার 0 এ সেট করা হলে, সফ্টওয়্যার অবজেক্ট স্বাভাবিক আচরণে ফিরে আসে (প্রিন্টিং নেই)।

এই বিবৃতি বা বিবৃতিগুলি #অন্তর্ভুক্তির পরে এবং সেটআপ () ফাংশনের আগে অন্তর্ভুক্ত করা প্রয়োজন।

BME বা BMP সফটওয়্যার বস্তুর সূচনা

ব্যবহার করার আগে, ডিভাইস থেকে ক্রমাঙ্কন প্যারামিটারগুলি পড়া প্রয়োজন এবং যে কোনও পরিমাপ মোড, ওভারস্যাম্পলিং এবং ফিল্টার সেটিংসের জন্য এটি কনফিগার করা প্রয়োজন।

একটি সাধারণ, সাধারণ উদ্দেশ্য প্রারম্ভিকতার জন্য, বিবৃতিটি হল:

objectName.begin ();

এই সংস্করণটি () ডিভাইস থেকে ক্রমাঙ্কন পরামিতি পড়ে এবং osrs_t = 7 (16 তাপমাত্রা পরিমাপ), osrs_p = 7 (16 চাপ পরিমাপ), মোড = 3 (ক্রমাগত, স্বাভাবিক), t_sb = 0 (0.5 ms ঘুমের মধ্যে পরিমাপ সেট), ফিল্টার = 0 (K = 1, তাই কোন ফিল্টারিং নেই) এবং spiw_en = 0 (SPI অক্ষম, তাই I2C ব্যবহার করুন)। BME280 এর ক্ষেত্রে, 16 আর্দ্রতা পরিমাপের জন্য একটি অতিরিক্ত প্যারামিটার osrs_h = 7 আছে।

শুরু () এর আরেকটি সংস্করণ রয়েছে যা সমস্ত ছয় (বা 7) পরামিতি নেয়। উপরের বিবৃতির সমতুল্য

objectName.begin (7, 7, 3, 0, 0, 0); // osrs_t, osrs_p, মোড, t_sb, ফিল্টার, spiw_en

অথবা objectName.begin (7, 7, 3, 0, 0, 0, 7); // osrs_t, osrs_p, মোড, t_sb, ফিল্টার, spiw_en, osrs_h

কোডগুলির সম্পূর্ণ তালিকা এবং তাদের অর্থ BME280 এবং BMP280 ডেটা শীটে, এবং লাইব্রেরিতে.cpp ফাইলের মন্তব্যগুলিতেও রয়েছে।

সহজ তাপমাত্রা এবং চাপ পরিমাপ

একটি তাপমাত্রা পরিমাপ করার সবচেয়ে সহজ উপায়

দ্বিগুণ তাপমাত্রা = objectName.readTemperature (); // পরিমাপ তাপমাত্রা

একটি চাপ পরিমাপ পেতে সবচেয়ে সহজ উপায়

ডবল চাপ = objectName.readPressure (); // চাপ পরিমাপ

আর্দ্রতা পরিমাপ করার সবচেয়ে সহজ উপায়

দ্বিগুণ আর্দ্রতা = objectName.readHumidity (); // আর্দ্রতা পরিমাপ (শুধুমাত্র BME280)

তাপমাত্রা এবং চাপ উভয়ই পেতে উপরের দুটি বিবৃতি একের পর এক ব্যবহার করা যেতে পারে, তবে আরেকটি বিকল্প রয়েছে, যা হল:

দ্বিগুণ তাপমাত্রা;

ডবল চাপ = objectName.readPressure (তাপমাত্রা); // চাপ এবং তাপমাত্রা পরিমাপ করুন

এই বিবৃতিটি শুধুমাত্র একবার BME280 বা BMP280 ডিভাইস থেকে তথ্য পড়ে এবং তাপমাত্রা এবং চাপ উভয়ই ফেরত দেয়। এটি I2C বাসের একটু বেশি দক্ষ ব্যবহার এবং নিশ্চিত করে যে দুটি রিডিং একই পরিমাপ চক্রের সাথে সামঞ্জস্যপূর্ণ।

BME 280 এর জন্য, একটি সম্মিলিত বিবৃতি যা তিনটি মান (আর্দ্রতা, তাপমাত্রা এবং চাপ) পায়:

দ্বিগুণ তাপমাত্রা, চাপ; দ্বিগুণ আর্দ্রতা = objectName.readHumidity (তাপমাত্রা, চাপ); // আর্দ্রতা, চাপ এবং তাপমাত্রা পরিমাপ করুন

এই বিবৃতিটি শুধুমাত্র একবার BMP280 ডিভাইস থেকে তথ্য পড়ে, এবং তিনটি মান প্রদান করে। এটি I2C বাসের একটু বেশি দক্ষ ব্যবহার এবং নিশ্চিত করে যে তিনটি রিডিং একই পরিমাপ চক্রের সাথে সামঞ্জস্যপূর্ণ। লক্ষ্য করুন যে ভেরিয়েবলের নাম ব্যবহারকারীর পছন্দের যেকোনো কিছুতে পরিবর্তন করা যেতে পারে, কিন্তু তাদের অর্ডার স্থির - তাপমাত্রা প্রথমে আসে, এবং চাপ দ্বিতীয় আসে।

এই ব্যবহারের ক্ষেত্রে লাইব্রেরি দিয়ে দেওয়া উদাহরণ স্কেচগুলি অন্তর্ভুক্ত করা হয়েছে, basicTemperature.ino, basicPressure.ino, basicHumidity.ino, basicTemperatureAndPressure.ino এবং basicHumidityAndTemperatureAndPressure.ino।

আরো পরিশীলিত তাপমাত্রা এবং চাপ পরিমাপ

যদিও উপরোক্ত সিরিজের বিবৃতিগুলি সমস্যা ছাড়াই কাজ করবে, তবে কয়েকটি সমস্যা রয়েছে:

  1. ডিভাইসটি ক্রমাগত চলছে, এবং সেইজন্য তার সর্বোচ্চ স্তরে শক্তি খরচ করছে। যদি একটি ব্যাটারি থেকে শক্তি আসছে, তাহলে এটি কমানোর প্রয়োজন হতে পারে।
  2. বিদ্যুৎ খরচ হওয়ার কারণে, ডিভাইসটি উষ্ণতা অনুভব করবে, এবং তাই পরিমাপ করা তাপমাত্রা পরিবেষ্টিত তাপমাত্রার চেয়ে বেশি হবে। আমি পরবর্তী ধাপে এটিকে আরও কভার করব।

একটি ফলাফল যা কম শক্তি ব্যবহার করে, এবং একটি তাপমাত্রা দেয় যা পরিবেষ্টিত কাছাকাছি, এটি শুরু () ব্যবহার করে প্যারামিটার দিয়ে পাওয়া যেতে পারে যা এটি ঘুমাতে দেয় (যেমন মোড = 0)। উদাহরণ স্বরূপ:

objectName.begin (1, 1, 0, 0, 0, 0 [, 1]); // osrs_t, osrs_p, মোড, t_sb, ফিল্টার, spiw_en [, osrs_h]

তারপর, যখন একটি পরিমাপ চাওয়া হয়, F2 (যদি প্রয়োজন হয়) এবং F4 নিবন্ধন করার জন্য একটি কনফিগারেশন কমান্ড দিয়ে ডিভাইসটি জাগিয়ে তুলুন যা osrs_h, osrs_t এবং osrs_p, প্লাস মোড = 1 (একক শট মোড) এর উপযুক্ত মান সেট করে। উদাহরণ স্বরূপ:

[objectName.updateF2Control (1);] // osrs_h - BMP280 এর জন্য কখনো প্রয়োজন হয় না, // এবং BME280 এর জন্য প্রয়োজন হয় না যদি পরিমাপের সংখ্যা পরিবর্তন করা না হয় // শুরুতে দেওয়া মান থেকে। objectName.updateF4Control (1, 1, 1); // osrs_t, osrs_p, মোড

ডিভাইসটি জেগে উঠলে, এটি পরিমাপ করা শুরু করবে, তবে ফলাফলটি কিছু মিলিসেকেন্ডের জন্য উপলব্ধ হবে না - কমপক্ষে 4 এমএস, সম্ভবত 70 এমএস বা তারও বেশি, নির্দিষ্ট করা পরিমাপের সংখ্যার উপর নির্ভর করে। যদি রিড কমান্ড অবিলম্বে পাঠানো হয়, ডিভাইসটি আগের পরিমাপ থেকে মানগুলি ফিরিয়ে দেবে - যা কিছু অ্যাপ্লিকেশনে গ্রহণযোগ্য হতে পারে, তবে বেশিরভাগ ক্ষেত্রে নতুন পরিমাপ না পাওয়া পর্যন্ত বিলম্ব করা ভাল।

এই বিলম্বটি বিভিন্ন উপায়ে করা যেতে পারে।

  1. দীর্ঘতম প্রত্যাশিত বিলম্ব কভার করার জন্য নির্দিষ্ট সময় অপেক্ষা করুন
  2. পরিমাপের সর্বোচ্চ পরিমাপের সময় থেকে গণনা করা সময়ের পরিমাণ অপেক্ষা করুন (যেমন 2.3ms) পরিমাপের সংখ্যা, প্লাস ওভারহেড, প্লাস একটি মার্জিন।
  3. উপরের হিসাবে গণনা করা একটি কম পরিমাণ সময় অপেক্ষা করুন, কিন্তু নামমাত্র পরিমাপের সময় (অর্থাৎ 2 ms) প্লাস ওভারহেড ব্যবহার করে, এবং তারপর স্ট্যাটাস রেজিস্টারে "আমি পরিমাপ করছি" বিট পরীক্ষা শুরু করুন। যখন স্ট্যাটাস বিট 0 পড়ে (অর্থাৎ, পরিমাপ করা হয় না), তাপমাত্রা এবং চাপ রিডিং পান।
  4. অবিলম্বে স্ট্যাটাস রেজিস্টার চেক করা শুরু করুন, এবং স্ট্যাটাস বিট 0 পড়লে তাপমাত্রা এবং চাপ রিডিং পান,

আমি একটু পরে এটি করার একটি উপায় একটি উদাহরণ দেখাব।

কনফিগারেশন রেজিস্টার অপারেশন

এই সব ঘটানোর জন্য, আমাদের বেশ কয়েকটি সরঞ্জাম দরকার যা আমি এখনও চালু করি নি। তারা হল:

বাইট রিড রেজিস্টার (reg)

অকার্যকর আপডেট রেজিস্টার (রেজ, মান)

এগুলির প্রত্যেকটির লাইব্রেরিতে বেশ কয়েকটি ডাইরেক্টেড কমান্ড রয়েছে, যা নির্দিষ্ট কর্মের জন্য সফ্টওয়্যারটিকে কিছুটা সহজ করে তোলে।

উদাহরণ powerSaverPressureAndTemperature.ino পদ্ধতি নং 3 ব্যবহার করে।

যখন (bmp0.readRegister (0xF3) >> 3); // লুপ untl F3bit 3 == 0

মনে রাখবেন যে এই স্কেচটি একটি ESP8266 মাইক্রোকন্ট্রোলারের জন্য। আমি একটি WeMos D1 মিনি প্রো ব্যবহার করেছি। স্কেচ Atmega মাইক্রোকন্ট্রোলারগুলির সাথে কাজ করবে না, যার ঘুমের জন্য বিভিন্ন নির্দেশনা রয়েছে। এই স্কেচটি অন্যান্য বেশ কয়েকটি কমান্ড ব্যবহার করে, তাই আমি সেই স্কেচটি আরও বিস্তারিতভাবে বর্ণনা করার আগে তাদের সবাইকে পরিচয় করিয়ে দেব।

যখন মাইক্রোকন্টোলার BMP280 সেন্সরের সাথে সমান্তরালে ঘুমায়, তখন প্রয়োজনীয় পরিমাপের জন্য সেন্সরের কনফিগারেশন 6 টি প্যারামিটার ব্যবহার করে start () কমান্ডে করা যেতে পারে। তবে যদি মাইক্রোকন্ট্রোলার ঘুমিয়ে না থাকে, কিন্তু সেন্সর হয়, তাহলে পরিমাপের সময় সেন্সরকে জেগে উঠতে হবে এবং তার পরিমাপের কনফিগারেশন বলতে হবে। এটি সরাসরি দিয়ে করা যেতে পারে

updateRegister (reg, value)

কিন্তু নিম্নলিখিত তিনটি কমান্ড দিয়ে একটু সহজ:

updateF2Control (osrs_h); // শুধুমাত্র BME280

আপডেট F4Control (osrs_t, osrs_p, mode); updateF5Config (t_sb, ফিল্টার, spi3W_en);

পরিমাপ সম্পন্ন হওয়ার পরে, যদি ব্যবহৃত মোডটি একক শট (জোরপূর্বক মোড) হয়, তাহলে ডিভাইসটি স্বয়ংক্রিয়ভাবে ঘুমে ফিরে যাবে। যাইহোক, যদি পরিমাপ সেটে ক্রমাগত (সাধারণ) মোড ব্যবহার করে একাধিক পরিমাপ জড়িত থাকে তবে BMP280 কে আবার ঘুমাতে হবে। এটি নিম্নলিখিত দুটি কমান্ডের যেকোন একটি দিয়ে করা যেতে পারে:

updateF4Control16xSleep ();

updateF4ControlSleep (মান);

এই দুটিই মোড বিটগুলিকে 00 (অর্থাৎ স্লিপ মোড) এ সেট করে। যাইহোক প্রথমটি osrs_t এবং osrs_p কে 111 (অর্থাৎ 16 পরিমাপ) সেট করে যখন দ্বিতীয়টি 0xF4 রেজিস্টারের 7: 2 বিটে "মান" থেকে কম 6 বিট সঞ্চয় করে।

একইভাবে নিম্নোক্ত বিবৃতিটি 0xF5 রেজিস্টারের 7: 2 বিটগুলিতে "মান" এর নিম্ন ছয়টি বিট সঞ্চয় করে।

updateF5ConfigSleep (মান);

এই পরবর্তী কমান্ডগুলির ব্যবহার BMP280 রেজিস্টার F4 এবং F5 তে 12 বিট তথ্য সংরক্ষণ করতে সক্ষম করে। কমপক্ষে ESP8266 এর ক্ষেত্রে, যখন মাইক্রোকন্ট্রোলার ঘুমের কিছু সময় পরে জেগে ওঠে, স্লিপের শুরুতে স্লিপ কমান্ডের পূর্বে তার অবস্থা সম্পর্কে কোন জ্ঞান নেই। স্লিপ কমান্ডের পূর্বে এর অবস্থা সম্পর্কে জ্ঞান সঞ্চয় করতে, EEPROM ফাংশন ব্যবহার করে অথবা SPIFFS ব্যবহার করে একটি ফাইল লিখে ডেটা ফ্ল্যাশ মেমরিতে সংরক্ষণ করা যেতে পারে। তবে ফ্ল্যাশ মেমোরিতে 10, 000 থেকে 100, 000 ক্রম লেখার চক্রের একটি সীমাবদ্ধতা রয়েছে। এর অর্থ হল মাইক্রোকন্ট্রোলার যদি প্রতি কয়েক সেকেন্ডে ঘুম-জাগ্রত চক্রের মধ্য দিয়ে যাচ্ছে, তবে এটি অনুমোদিত মেমরি লেখার অতিক্রম করতে পারে কয়েক মাসের মধ্যে সীমা। BMP280- এ কয়েকটি বিট ডেটা সংরক্ষণের তেমন কোনো সীমাবদ্ধতা নেই।

কমান্ড ব্যবহার করে মাইক্রোকন্ট্রোলার জেগে উঠলে রেজিস্টার এফ 4 এবং এফ 5 তে সংরক্ষিত ডেটা পুনরুদ্ধার করা যায়

readF4Sleep ();

readF5Sleep ();

এই ফাংশনগুলি সংশ্লিষ্ট রেজিস্টারটি পড়ে, 2 টি এলএসবি অপসারণের জন্য বিষয়বস্তু স্থানান্তর করে এবং বাকি 6 টি বিট ফেরত দেয়। এই ফাংশনগুলি উদাহরণস্বরূপ স্কেচ পাওয়ার ব্যবহার করা হয়।

// bmp0 থেকে EventCounter এর মান পড়ুন

বাইট bmp0F4value = bmp0.readF4Sleep (); // 0 থেকে 63 বাইট bmp0F5value = bmp0.readF5Sleep (); // 0 থেকে 63 eventCounter = bmp0F5value*64+bmp0F4value; // 0 থেকে 4095

এই ফাংশনগুলি সংশ্লিষ্ট রেজিস্টারটি পড়ে, 2 টি এলএসবি অপসারণের জন্য বিষয়বস্তু স্থানান্তর করে এবং বাকি 6 টি বিট ফেরত দেয়। এই ফাংশনগুলি উদাহরণস্বরূপ স্কেচ পাওয়ার ব্যবহার করা হয়।

// bmp1 থেকে EventCounter এর মান পড়ুন

বাইট bmp1F4value = bmp1.readF4Sleep (); // 0 থেকে 63 বাইট bmp1F5value = bmp1.readF5Sleep (); // 0 থেকে 63 eventCounter = bmp1F5value*64+bmp1F4value; // 0 থেকে 4095

কাঁচা তাপমাত্রা এবং চাপের কাজ

মৌলিক রিড টেম্পারেচার, রিড প্রেসার এবং রিডহমিডিটি ফাংশনের দুটি উপাদান থাকে। প্রথমে কাঁচা 20-বিট তাপমাত্রা এবং চাপের মান BME/P280 থেকে পাওয়া যায়, অথবা কাঁচা 16-বিট আর্দ্রতার মান BME280 থেকে পাওয়া যায়। তারপর ক্ষতিপূরণ অ্যালগরিদম ডিগ্রী সেলসিয়াস, এইচপিএ বা %আরএইচ আউটপুট মান তৈরি করতে ব্যবহৃত হয়।

লাইব্রেরি এই উপাদানগুলির জন্য পৃথক ফাংশন সরবরাহ করে, যাতে কাঁচা তাপমাত্রা, চাপ এবং আর্দ্রতার তথ্য পাওয়া যায় এবং সম্ভবত কোনোভাবে ম্যানিপুলেট করা যায়। এই কাঁচা মান থেকে তাপমাত্রা, চাপ এবং আর্দ্রতা অর্জনের অ্যালগরিদমও প্রদান করা হয়। লাইব্রেরিতে এই অ্যালগরিদমগুলি ডাবল লেন্থ ফ্লোটিং পয়েন্ট এ্যারিথমেটিক ব্যবহার করে প্রয়োগ করা হয়। এটি ESP8266 তে ভালভাবে কাজ করে যা একটি 32-বিট প্রসেসর এবং "ডবল" ফ্লোট ভেরিয়েবলের জন্য 64 বিট ব্যবহার করে। এই ফাংশনগুলিকে অ্যাক্সেসযোগ্য করা মূল্যায়ন এবং সম্ভবত অন্যান্য প্ল্যাটফর্মের জন্য হিসাব পরিবর্তনের জন্য দরকারী হতে পারে।

এই ফাংশনগুলি হল:

ReadRawPressure (rawTemperature); // BME/P280readRawHumidity (rawTemperature, rawPressure) থেকে কাঁচা চাপ এবং তাপমাত্রার তথ্য পড়ে; // BME280 calcTemperature (rawTemperature, t_fine) থেকে কাঁচা আর্দ্রতা, তাপমাত্রা এবং চাপের তথ্য পড়ে; calcPressure (rawPressure, t_fine); calcHumidity (কাঁচা আর্দ্রতা, t_fine)

এই ফাংশনগুলির জন্য "টি-ফাইন" যুক্তি কিছুটা ব্যাখ্যা করার যোগ্য। উভয় চাপ এবং আর্দ্রতা ক্ষতিপূরণ অ্যালগরিদম একটি তাপমাত্রা নির্ভর উপাদান যা t_fine পরিবর্তনশীল মাধ্যমে অর্জন করা হয় অন্তর্ভুক্ত। CalcTemperature ফাংশন তাপমাত্রা ক্ষতিপূরণ অ্যালগরিদম লজিকের উপর ভিত্তি করে t_fine- এ একটি মান লিখে, যা তারপর calcPressure এবং calcHumidity উভয় ক্ষেত্রেই ইনপুট হিসেবে ব্যবহৃত হয়।

এই ফাংশনগুলির ব্যবহারের একটি উদাহরণ উদাহরণস্বরূপ পাওয়া যেতে পারে।

উচ্চতা এবং সমুদ্রপৃষ্ঠের চাপ

বায়ুমণ্ডলীয় চাপ এবং উচ্চতার মধ্যে একটি পরিচিত সম্পর্ক রয়েছে। আবহাওয়া চাপকেও প্রভাবিত করে। যখন আবহাওয়া সংস্থাগুলি বায়ুমণ্ডলীয় চাপের তথ্য প্রকাশ করে, তারা সাধারণত এটিকে উচ্চতার জন্য সামঞ্জস্য করে এবং তাই "সিনোপটিক চার্ট" সমুদ্রপৃষ্ঠ বোঝানোর জন্য মানসম্পন্ন আইসোবার (ধ্রুব চাপের রেখা) দেখায়। তাই সত্যিই এই সম্পর্কের মধ্যে 3 টি মান আছে, এবং তাদের মধ্যে দুটি জানা তৃতীয়টির উৎপত্তি সক্ষম করে। 3 টি মান হল:

  • সমুদ্রপৃষ্ঠ থেকে উচ্চতা
  • সেই উচ্চতায় প্রকৃত বায়ুচাপ
  • সমুদ্রপৃষ্ঠে সমান বায়ুচাপ (আরো কঠোরভাবে, সমুদ্রপৃষ্ঠের মানে, কারণ তাত্ক্ষণিক সমুদ্রপৃষ্ঠ ক্রমাগত পরিবর্তিত হয়)

এই লাইব্রেরি এই সম্পর্কের জন্য দুটি ফাংশন প্রদান করে, নিম্নরূপ:

calcAltitude (চাপ, seaLevelhPa);

calcNormalised Pressure (চাপ, উচ্চতা);

একটি সরলীকৃত সংস্করণও রয়েছে, যা 1013.15 hPa এর মানসম্মত সমুদ্রপৃষ্ঠের চাপ অনুমান করে।

calcAltitude (চাপ); // স্ট্যান্ডার্ড সি লেভেল প্রেসার ধরে নেওয়া হয়েছে

ধাপ 3: BMP280 ডিভাইসের বিবরণ

BMP280 ডিভাইসের বিবরণ
BMP280 ডিভাইসের বিবরণ

হার্ডওয়্যার ক্ষমতা

BMP280 এর 2 বাইট কনফিগারেশন ডেটা আছে (রেজিস্টার ঠিকানা 0xF4 এবং 0xF5 এ) যা একাধিক পরিমাপ এবং ডেটা আউটপুট অপশন নিয়ন্ত্রণ করতে ব্যবহৃত হয়। এটি 2 বিট স্থিতি তথ্য এবং 24 বাইট ক্রমাঙ্কন পরামিতি সরবরাহ করে যা কাঁচা তাপমাত্রা এবং চাপের মানকে প্রচলিত তাপমাত্রা এবং চাপ ইউনিটে রূপান্তর করতে ব্যবহৃত হয়। BME280 এর অতিরিক্ত ডেটা নিম্নরূপ:

  • একাধিক আর্দ্রতা পরিমাপ নিয়ন্ত্রণ করতে ব্যবহৃত রেজিস্টার ঠিকানা 0xF2 এ কনফিগারেশন ডেটার 1 অতিরিক্ত বাইট;
  • 8 অতিরিক্ত বাইট ক্রমাঙ্কন পরামিতি কাঁচা আর্দ্রতা মান আপেক্ষিক আর্দ্রতা শতাংশ রূপান্তর ব্যবহৃত।

BME280 এর জন্য তাপমাত্রা, চাপ এবং স্থিতি রেজিস্টারগুলি BMP280 এর মতই ছোটখাটো ব্যতিক্রমগুলি নিম্নরূপ:

  • BME280 এর "ID" বিট 0x60 এ সেট করা আছে, তাই এটি BMP280 থেকে আলাদা করা যায় যা 0x56, 0x57 বা 0x58 হতে পারে
  • ঘুমের সময় নিয়ন্ত্রণ (t_sb) পরিবর্তিত হয় যাতে BMP280 (2000 ms এবং 4000 ms) এ দুটি দীর্ঘ সময় BME280 এ 10 ms এবং 20 ms এর সংক্ষিপ্ত সময়ের সাথে প্রতিস্থাপিত হয়। BME280 এ সর্বোচ্চ ঘুমের সময় 1000 ms।
  • BME280 তে তাপমাত্রা এবং চাপের কাঁচা মান সর্বদা 20 বিট থাকে যদি ফিল্টারিং প্রয়োগ করা হয়। 16 থেকে 19 বিট মান ব্যবহার ফিল্টারিং ছাড়া ক্ষেত্রে সীমাবদ্ধ (যেমন ফিল্টার = 0)।

তাপমাত্রা এবং চাপ প্রতিটি 20 বিট মান, যা তাপমাত্রার জন্য 3 16 বিট ক্যালিব্রেশন পরামিতি এবং 9 16 বিট ক্রমাঙ্কন পরামিতি এবং চাপের জন্য তাপমাত্রা ব্যবহার করে একটি জটিল অ্যালগরিদমের মাধ্যমে প্রচলিত তাপমাত্রা এবং চাপে রূপান্তরিত করা প্রয়োজন। তাপমাত্রা পরিমাপের গ্রানুলিটিটি 0.0003 ডিগ্রি সেলসিয়াস কমপক্ষে উল্লেখযোগ্য বিট পরিবর্তনের জন্য (20 বিট রিডআউট), 16 বিট রিডআউট ব্যবহার করা হলে 0.0046 ডিগ্রি সেলসিয়াসে বৃদ্ধি পায়।

আর্দ্রতা একটি 16 বিট মান যা অন্য জটিল অ্যালগরিদমের মাধ্যমে আপেক্ষিক আর্দ্রতায় রূপান্তর করতে হবে যা 6 ক্রমাঙ্কন পরামিতি ব্যবহার করে যা 8, 12 এবং 16 বিটের মিশ্রণ।

ডেটা শীট তাপমাত্রা রিডআউটের পরম নির্ভুলতা দেখায় +0.5 সে 25 ডিগ্রি সেলসিয়াস এবং 0 -1 থেকে 65 ডিগ্রি সেলসিয়াসে +-1 সি।

চাপ পরিমাপের গ্রানুলারিটি হল 20 বিট রেজোলিউশনে 0.15 পাস্কাল (অর্থাৎ 0.0015 হেক্টরপাস্কাল), অথবা 16 বিট রেজোলিউশনে 2.5 প্যাসকেল। কাঁচা চাপের মান তাপমাত্রা দ্বারা প্রভাবিত হয়, যাতে প্রায় 25 ডিগ্রি সেলসিয়াস তাপমাত্রা বৃদ্ধি পায় 24 টি পাস্কাল দ্বারা পরিমাপ করা চাপ হ্রাস পায়। তাপমাত্রা সংবেদনশীলতা ক্রমাঙ্কন অ্যালগরিদমে হিসাব করা হয়, তাই বিতরণ করা চাপের মানগুলি বিভিন্ন তাপমাত্রায় সঠিক হওয়া উচিত।

ডাটা শীট 0 সি থেকে 65 ডিগ্রি তাপমাত্রার জন্য +-1 এইচপিএ হিসাবে চাপ পড়ার সম্পূর্ণ নির্ভুলতা দেখায়।

আর্দ্রতার নির্ভুলতা ডাটা শীটে +-3% RH এবং +-1% হিস্টেরেসিস হিসাবে দেওয়া হয়।

কিভাবে এটা কাজ করে

24 বাইট তাপমাত্রা এবং চাপ ক্রমাঙ্কন ডেটা, এবং BME280 এর ক্ষেত্রে 8 বাইট আর্দ্রতা ক্রমাঙ্কন ডেটা, ডিভাইস থেকে পড়তে হবে এবং ভেরিয়েবলে সংরক্ষণ করতে হবে। এই ডেটাগুলি পৃথকভাবে কারখানার ডিভাইসে প্রোগ্রাম করা হয়েছে, তাই বিভিন্ন ডিভাইসের বিভিন্ন মান রয়েছে - অন্তত কিছু প্যারামিটারের জন্য। একটি BME/P280 দুটি রাজ্যের একটিতে হতে পারে। এক রাজ্যে এটি পরিমাপ করা হয়। অন্য অবস্থায় এটি অপেক্ষা করছে (ঘুমাচ্ছে)।

এটি কোন অবস্থায় আছে তা 0xF3 রেজিস্টারের বিট 3 দেখে চেক করা যায়।

সাম্প্রতিকতম পরিমাপের ফলাফলগুলি যে কোনও সময় সংশ্লিষ্ট ডেটা মান পড়ার মাধ্যমে পাওয়া যেতে পারে, নির্বিশেষে ডিভাইসটি ঘুমাচ্ছে বা পরিমাপ করছে।

BME/P280 পরিচালনার দুটি উপায় রয়েছে। একটি হলো কন্টিনিউয়াস মোড (যাকে ডাটা শীটে নরমাল মোড বলা হয়) যা বারবার পরিমাপ এবং ঘুমের অবস্থার মধ্যে চক্র। এই মোডে ডিভাইসটি পরিমাপের একটি সেট সম্পাদন করে, তারপর ঘুমিয়ে যায়, তারপর অন্য একটি পরিমাপের জন্য জেগে ওঠে, ইত্যাদি। পৃথক পরিমাপের সংখ্যা এবং চক্রের ঘুম অংশের সময়কাল সবকিছু কনফিগারেশন রেজিস্টারের মাধ্যমে নিয়ন্ত্রণ করা যায়।

BME/P280 পরিচালনার অন্য উপায় হল একক শট মোড (ডেটা শীটে ফোর্সড মোড বলা হয়)। এই মোডে ডিভাইসটি ঘুম থেকে জাগ্রত হয় একটি পরিমাপের আদেশ দ্বারা, এটি পরিমাপের একটি সেট করে, তারপর আবার ঘুমাতে যায়। সেটে পৃথক পরিমাপের সংখ্যা কনফিগারেশন কমান্ড দ্বারা নিয়ন্ত্রিত হয় যা ডিভাইসটিকে জাগিয়ে তোলে।

বিএমপি ২80০ -এ, যদি একটি একক পরিমাপ করা হয়, তাহলে মূল্যের ১ most টি সবচেয়ে উল্লেখযোগ্য বিট পপুলেটেড, এবং ভ্যালু রিডআউটের চারটি সর্বনিম্ন উল্লেখযোগ্য বিট সবই শূন্য। পরিমাপের সংখ্যা 1, 2, 4, 8 বা 16 এ সেট করা যেতে পারে এবং পরিমাপের সংখ্যা বাড়ার সাথে সাথে ডেটার সাথে জনসংখ্যার বিট সংখ্যা বৃদ্ধি পায়, যাতে 16 পরিমাপের সাথে সমস্ত 20 বিট পরিমাপের ডেটা দিয়ে পপুলেটেড হয়। ডেটা শীট এই প্রক্রিয়াটিকে ওভারস্যাম্পলিং হিসাবে উল্লেখ করে।

BME280 তে, একই ব্যবস্থা ততক্ষণ প্রযোজ্য যতক্ষণ পর্যন্ত ফলাফল ফিল্টার করা হচ্ছে না। যদি ফিল্টারিং ব্যবহার করা হয়, মানগুলি সর্বদা 20 বিট হয়, নির্বিশেষে প্রতিটি পরিমাপ চক্রের মধ্যে কতগুলি পরিমাপ নেওয়া হয়।

প্রতিটি পৃথক পরিমাপ প্রায় 2 মিলিসেকেন্ড লাগে (সাধারণ মান; সর্বোচ্চ মান 2.3 ms) এটিতে প্রায় 2 এমএসের একটি নির্দিষ্ট ওভারহেড যুক্ত করুন (সাধারণত কিছুটা কম) এর মানে হল যে একটি পরিমাপ ক্রম, যা 1 থেকে 32 পৃথক পরিমাপের সমন্বয়ে গঠিত হতে পারে, 4 ms থেকে 66 ms পর্যন্ত নিতে পারে।

ডাটা শীট বিভিন্ন অ্যাপ্লিকেশনের জন্য তাপমাত্রা এবং চাপ ওভারসাম্পলিংয়ের প্রস্তাবিত সমন্বয়গুলির একটি সেট সরবরাহ করে।

কনফিগারেশন কন্ট্রোল রেজিস্টার

BMP280 এ দুটি কনফিগারেশন কন্ট্রোল রেজিস্টার রেজিস্টার ঠিকানা 0xF4 এবং 0xF5 এ রয়েছে এবং 6 টি পৃথক কনফিগারেশন কন্ট্রোল ভ্যালুতে ম্যাপ করা হয়েছে। 0xF4 গঠিত:

  • 3 বিট osrs_t (তাপমাত্রা 0, 1, 2, 4, 8 বা 16 বার পরিমাপ);
  • 3 বিট osrs_p (চাপ 0, 1, 2, 4, 8 বা 16 বার পরিমাপ করুন); এবং
  • 2 বিট মোড (স্লিপ, ফোর্সড (অর্থাৎ সিঙ্গেল শট), নরমাল (অর্থাৎ একটানা)।

0xF5 গঠিত:

  • 3 বিট t_sb (স্ট্যান্ডবাই টাইম, 0.5ms থেকে 4000 ms);
  • 3 বিট ফিল্টার (নিচে দেখুন); এবং
  • 1 বিট spiw_en যা SPI বা I2C নির্বাচন করে।

ফিল্টার প্যারামিটারটি এক ধরনের সূচকীয় ক্ষয় অ্যালগরিদম নিয়ন্ত্রণ করে, অথবা অসীম ইমপালস রেসপন্স (IIR) ফিল্টার, যা কাঁচা চাপ এবং তাপমাত্রা পরিমাপের মানগুলিতে প্রয়োগ করা হয় (কিন্তু আর্দ্রতার মান নয়)। ডেটা শীটে সমীকরণ দেওয়া আছে। আরেকটি উপস্থাপনা হল:

মান (n) = মান (n-1) * (K-1) / K + পরিমাপ (n) / K

যেখানে (n) সাম্প্রতিক পরিমাপ এবং আউটপুট মান নির্দেশ করে; এবং K হল ফিল্টার প্যারামিটার। ফিল্টার প্যারামিটার কে এবং 1, 2, 4, 8 বা 16 এ সেট করা যেতে পারে। ফিল্টার প্যারামিটারের কোডিং হল:

  • ফিল্টার = 000, কে = 1
  • ফিল্টার = 001, কে = 2
  • ফিল্টার = 010, কে = 4
  • ফিল্টার = 011, কে = 8
  • ফিল্টার = 1xx, কে = 16

BME 280 একটি 3-বিট প্যারামিটার osrs_h (0, 1, 2, 4, 8 বা 16 বার পরিমাপ) সহ 0xF2, "ctrl_hum" ঠিকানায় আরও কনফিগারেশন কন্ট্রোল রেজিস্টার যোগ করে।

ধাপ 4: পরিমাপ এবং রিডআউট টাইমিং

আমি কমান্ড এবং পরিমাপের প্রতিক্রিয়াগুলির সময় দেখিয়ে এটি পরে যোগ করার পরিকল্পনা করছি।

Iddt - তাপমাত্রা পরিমাপে বর্তমান। সাধারণ মান 325 ইউএ

আইডিডিপি - চাপ পরিমাপে বর্তমান। সাধারণ মান 720 ইউএ, সর্বোচ্চ 1120 ইউএ

Iddsb - স্ট্যান্ডবাই মোডে বর্তমান। সাধারণ মান 0.2 ইউএ, সর্বোচ্চ 0.5 ইউএ

Iddsl - স্লিপ মোডে কারেন্ট। সাধারণ মান 0.1 ইউএ, সর্বোচ্চ 0.3 ইউএ

পদক্ষেপ 5: সফ্টওয়্যার নির্দেশিকা

সফটওয়্যার নির্দেশিকা
সফটওয়্যার নির্দেশিকা
সফটওয়্যার নির্দেশিকা
সফটওয়্যার নির্দেশিকা

I2C Burst মোড

BMP280 ডেটা শীট ডেটা রিডআউট (বিভাগ 3.9) সম্পর্কে নির্দেশিকা প্রদান করে। এতে বলা হয়েছে, "একটি ব্রাস্ট রিড ব্যবহার করা এবং প্রতিটি রেজিস্টারকে পৃথকভাবে সম্বোধন না করার জন্য এটি দৃ strongly়ভাবে সুপারিশ করা হয়। এটি বিভিন্ন পরিমাপের বাইটের সম্ভাব্য মিশ্রণ রোধ করবে এবং ইন্টারফেস ট্র্যাফিক হ্রাস করবে।" ক্ষতিপূরণ/ক্রমাঙ্কন পরামিতি পড়ার বিষয়ে কোন নির্দেশনা দেওয়া হয় না। সম্ভবত এগুলি কোনও সমস্যা নয় কারণ এগুলি স্থির এবং পরিবর্তন হয় না।

এই লাইব্রেরীটি একক রিড অপারেশনে সমস্ত সংলগ্ন মানগুলি পড়ে - তাপমাত্রা এবং চাপের ক্ষতিপূরণ পরামিতিগুলির ক্ষেত্রে 24 বাইট, তাপমাত্রা এবং চাপের জন্য 6 বাইট এবং মিলিত আর্দ্রতা, তাপমাত্রা এবং চাপের জন্য 8 বাইট। যখন শুধুমাত্র তাপমাত্রা পরীক্ষা করা হয়, তখন মাত্র 3 বাইট পড়া হয়।

ম্যাক্রোর ব্যবহার (#সংজ্ঞায়িত ইত্যাদি)

এই লাইব্রেরিতে সাধারণ লাইব্রেরী ছাড়া অন্য কোন ম্যাক্রো নেই "গার্ড অন্তর্ভুক্ত করুন" ম্যাক্রো যা নকল রোধ করে।

সমস্ত ধ্রুবকগুলি const কীওয়ার্ড ব্যবহার করে সংজ্ঞায়িত করা হয় এবং ডিবাগ প্রিন্টিং স্ট্যান্ডার্ড সি ফাংশন দ্বারা নিয়ন্ত্রিত হয়।

এটি আমার জন্য কিছু অনিশ্চয়তার উৎস হয়েছে, কিন্তু এই বিষয়ে অনেক পোস্ট পড়ার থেকে আমি যে পরামর্শটি পাই তা হল #স্থির (কমপক্ষে) এবং (সম্ভবত) ডিবাগ প্রিন্টিং কন্ট্রোল ঘোষণার জন্য সংজ্ঞায়িত করা অপ্রয়োজনীয় এবং অনাকাঙ্ক্ষিত।

#Define এর পরিবর্তে const ব্যবহারের ক্ষেত্রে ব্যাপারটা বেশ স্পষ্ট - const #define (অর্থাৎ শূন্য) এর মতোই সম্পদ ব্যবহার করে এবং ফলস্বরূপ মানগুলি স্কোপিং নিয়ম অনুসরণ করে, যার ফলে ত্রুটির সম্ভাবনা হ্রাস পায়।

ডিবাগ প্রিন্টিং কন্ট্রোলের ক্ষেত্রে ব্যাপারটা একটু কম স্পষ্ট, কারণ আমি যেভাবে এটা করেছি তার মানে হল যে চূড়ান্ত কোডটিতে ডিবাগ প্রিন্টিং স্টেটমেন্টের যুক্তি রয়েছে, যদিও সেগুলো কখনোই ব্যবহার করা হয় না। যদি খুব সীমিত মেমরির একটি মাইক্রোকন্ট্রোলারে একটি বড় প্রকল্পে লাইব্রেরি ব্যবহার করা হয়, তাহলে এটি একটি সমস্যা হয়ে উঠতে পারে। যেহেতু আমার বিকাশ একটি বড় ফ্ল্যাশ মেমরির সাথে একটি ESP8266 তে ছিল, তাই এটি আমার জন্য একটি সমস্যা বলে মনে হচ্ছে না।

ধাপ 6: তাপমাত্রা কর্মক্ষমতা

আমি এটি পরে যোগ করার পরিকল্পনা করছি।

ধাপ 7: চাপ কর্মক্ষমতা

আমি এটি পরে যোগ করার পরিকল্পনা করছি।

প্রস্তাবিত: