সুচিপত্র:

একটি মাইক্রো: বিট ডাইভ-ও-মিটার: 8 টি ধাপ (ছবি সহ)
একটি মাইক্রো: বিট ডাইভ-ও-মিটার: 8 টি ধাপ (ছবি সহ)

ভিডিও: একটি মাইক্রো: বিট ডাইভ-ও-মিটার: 8 টি ধাপ (ছবি সহ)

ভিডিও: একটি মাইক্রো: বিট ডাইভ-ও-মিটার: 8 টি ধাপ (ছবি সহ)
ভিডিও: 👉 গাড়ির ড্যাশবোর্ডের সিগন্যাল লাইট গুলো সম্পর্কে জেনে নিন,কি,(পর্ব ১) Car dashboard warning lights 2024, নভেম্বর
Anonim
একটি মাইক্রো: বিট ডাইভ-ও-মিটার
একটি মাইক্রো: বিট ডাইভ-ও-মিটার
একটি মাইক্রো: বিট ডাইভ-ও-মিটার
একটি মাইক্রো: বিট ডাইভ-ও-মিটার
একটি মাইক্রো: বিট ডাইভ-ও-মিটার
একটি মাইক্রো: বিট ডাইভ-ও-মিটার

গ্রীষ্ম এখানে, তার পুল সময়!

নিজেকে এবং আপনার মাইক্রোকে নেওয়ার একটি ভাল সুযোগ: কিছুটা বাইরে, এবং এই ক্ষেত্রে এমনকি সুইমিং পুলের মধ্যেও।

মাইক্রো: বিট ডাইভ-ও-মিটার এখানে বর্ণিত একটি সাধারণ DIY গভীরতা গেজ যা আপনাকে পরিমাপ করতে দেয় যে আপনি কতটা গভীর, বা ছিলেন, ডাইভিং। এটি কেবল একটি মাইক্রো: বিট, একটি ব্যাটারি প্যাক বা LiPo, মাইক্রো: বিট, একটি BMP280 বা BME280 ব্যারোমেট্রিক প্রেসার সেন্সর এবং কিছু জাম্পার কেবল নিয়ে গঠিত। Pimoroni enviro ব্যবহার করে: বিট জিনিসগুলিকে আরও সহজ করে তোলে। এই সব জলরোধী পরিষ্কার প্লাস্টিক বা সিলিকন ব্যাগ দুটি স্তর মধ্যে বস্তাবন্দী করা হয়, কিছু ওজন সঙ্গে উত্তেজিত শক্তি ক্ষতিপূরণ যোগ করা হয়েছে।

এটি মাইক্রো: বিট প্রেসার সেন্সর ডিভাইসের একটি অ্যাপ্লিকেশন যা আমি পূর্বের নির্দেশে বর্ণনা করেছি।

আপনি ডিভাইসটি ব্যবহার করতে পারেন e। ছ। বন্ধুদের এবং পরিবারের সাথে ডাইভিং প্রতিযোগিতার জন্য, অথবা সেই পুকুরটি কতটা গভীর তা খুঁজে বের করার জন্য। আমি আমার আশেপাশের গভীরতম পুল ব্যবহার করে এটি পরীক্ষা করে দেখেছি যে এটি অন্তত 3.2 মিটার গভীরতায় কাজ করে। প্রায় পাঁচ মিটার তাত্ত্বিক সর্বোচ্চ। এখন পর্যন্ত আমি কোন বিশদভাবে এর নির্ভুলতা পরীক্ষা করিনি, তবে রিপোর্ট করা সংখ্যাগুলি কমপক্ষে প্রত্যাশিত পরিসরে ছিল।

কিছু মন্তব্য: এটি প্রকৃত ডুবুরিদের জন্য একটি হাতিয়ার হিসাবে বোঝানো হয় না। আপনার মাইক্রো: বিট ভেজা হয়ে গেলে ক্ষতিগ্রস্ত হবে। আপনি আপনার নিজের ঝুঁকিতে এই নির্দেশযোগ্য ব্যবহার করুন।

27 মে আপডেট করুন: এখন আপনি একটি মেককোড হেক্স-স্ক্রিপ্ট খুঁজে পেতে পারেন যা আপনি সরাসরি আপনার মাইক্রো: বিটে লোড করতে পারেন। ধাপ 6 দেখুন 13 জুন আপডেট করুন: একটি এনভিরো: বিট এবং একটি কেবল সংস্করণ যোগ করা হয়েছে। ধাপ 7 এবং 8 দেখুন

ধাপ 1: ডিভাইসের পিছনে তত্ত্ব

আমরা বায়ু সমুদ্রের তলায় বাস করছি। এখানে নিচে চাপ প্রায় 1020 hPa (হেক্টোপাস্কাল) কারণ এয়ার কলামের ওজন এখানে মহাকাশে রূপান্তর করে প্রতি বর্গ সেন্টিমিটারে প্রায় 1 কেজি।

পানির ঘনত্ব অনেক বেশি, কারণ এক লিটার বাতাসের ওজন প্রায় 1.2 গ্রাম এবং এক লিটার জল 1 কেজি, অর্থাৎ প্রায় 800 গুণ। তাই ব্যারোমেট্রিক চাপ কমে যাওয়ায় প্রতি 8 মিটার উচ্চতায় প্রায় 1 এইচপিএ, পানির পৃষ্ঠের নীচে প্রতি সেন্টিমিটারের জন্য চাপ বৃদ্ধি 1 এইচপিএ। প্রায় 10 মিটার গভীরতায়, চাপ 2000 এইচপিএ, বা দুটি বায়ুমণ্ডল।

এখানে ব্যবহৃত প্রেসার সেন্সরের পরিমাপ পরিসীমা 750 থেকে 1500 hPa এর মধ্যে প্রায় এক hPa রেজোলিউশনে রয়েছে। এর মানে আমরা প্রায় 1 সেন্টিমিটার রেজোলিউশনে 5 মিটার পর্যন্ত গভীরতা পরিমাপ করতে পারি।

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

ধাপ 2: ডিভাইস ব্যবহার করে

ডিভাইস ব্যবহার করে
ডিভাইস ব্যবহার করে
ডিভাইস ব্যবহার করে
ডিভাইস ব্যবহার করে
ডিভাইস ব্যবহার করে
ডিভাইস ব্যবহার করে
ডিভাইস ব্যবহার করে
ডিভাইস ব্যবহার করে

স্ক্রিপ্ট, পরবর্তী ধাপে বিস্তারিতভাবে দেখানো হয়েছে, একটি স্ক্রিপ্টের একটি বৈচিত্র যা আমি আগে একটি চাপ মিটারের জন্য তৈরি করেছি। ডিভাইসটি পরীক্ষা করার জন্য, আপনি সেখানে বর্ণিত সাধারণ চাপ চেম্বার ব্যবহার করতে পারেন।

ডাইভিংয়ের উদ্দেশ্যে এটি মিটারে গভীরতা দেখায়, যেমন চাপ পরিমাপ থেকে গণনা করা হয়, 20 সেমি ধাপে বার গ্রাফ হিসাবে বা সংখ্যায় অনুরোধের ভিত্তিতে।

মাইক্রো: বিট এ বোতামটি ব্যবহার করে, আপনি বর্তমান চাপকে রেফারেন্স চাপ মান হিসাবে সেট করবেন। প্রবেশ নিশ্চিত করার জন্য, ম্যাট্রিক্স একবার জ্বলজ্বল করে।

আপনি এটি ব্যবহার করতে পারেন হয় আপনি কতটা ডাইভিং করছেন তা দেখতে পারেন, অথবা আপনি কতটা ডাইভিং করছেন তা রেকর্ড করতে পারেন।

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

ধাপ 3: প্রয়োজনীয় উপকরণ

প্রয়োজনীয় সামগ্রী
প্রয়োজনীয় সামগ্রী
প্রয়োজনীয় সামগ্রী
প্রয়োজনীয় সামগ্রী
প্রয়োজনীয় সামগ্রী
প্রয়োজনীয় সামগ্রী

একটি মাইক্রো: বিট। যেমন 13 GBP/16 ইউরোতে Pimoroni UK/DE তে।

একটি প্রান্ত সংযোগকারী (কিট্রনিক বা পিমোরোনি), 5 জিবিপি। আমি কিট্রনিক সংস্করণ ব্যবহার করেছি।

একটি BMP/BME280 সেন্সর। আমি ব্যাংগুড থেকে একটি BMP280 সেন্সর ব্যবহার করেছি, তিন ইউনিটের জন্য 4.33 ইউরো।

সেন্সর এবং প্রান্ত সংযোগকারীকে সংযুক্ত করতে জাম্পার কেবলগুলি।

উপরের প্রান্ত সংযোগকারী/সেন্সর সংমিশ্রণের একটি চমৎকার বিকল্প হতে পারে Pimoroni enviro: bit (এখন পর্যন্ত পরীক্ষা করা হয়নি, শেষ ধাপ দেখুন)।

একটি ব্যাটারি প্যাক বা মাইপোর জন্য LiPo: bit।

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

কিছু ওজন। আমি সীসা ওজনের টুকরা ব্যবহার করেছি যা মাছ ধরার জন্য ব্যবহৃত হয়।

Arduino IDE, এবং বেশ কয়েকটি লাইব্রেরি।

ধাপ 4: সমাবেশ

সমাবেশ
সমাবেশ
সমাবেশ
সমাবেশ
সমাবেশ
সমাবেশ
সমাবেশ
সমাবেশ

Arduino IDE এবং প্রয়োজনীয় লাইব্রেরি ইনস্টল করুন। বিস্তারিত এখানে বর্ণিত হয়েছে।

(মেককোড স্ক্রিপ্টের জন্য প্রয়োজন নেই।) আপনি কিট্রনিক এজ কানেক্টর ব্যবহার করেন, I2C পোর্ট 19 এবং 20 এ সোল্ডার পিন ব্যবহার করেন। পিমোরোনি এজ কানেক্টরের জন্য এটি প্রয়োজন হয় না। সেন্সর ব্রেক আউট শিরোলেখ এবং সেন্সর এবং প্রান্ত সংযোগকারীকে জাম্পার কেবল ব্যবহার করে সংযুক্ত করুন। VCC কে 3V, GND থেকে 0 V, SCL পোর্ট 19 এবং SDA পোর্ট 20 এ সংযুক্ত করুন। একটি USB তারের মাধ্যমে আমাদের কম্পিউটারে মাইক্রো: বিট সংযুক্ত করুন। প্রদত্ত স্ক্রিপ্টটি খুলুন এবং এটিকে মাইক্রো: বিটে ফ্ল্যাশ করুন। সিরিয়াল মনিটর বা প্লটার ব্যবহার করুন, সেন্সর যুক্তিসঙ্গত তথ্য দেয় কিনা তা পরীক্ষা করুন। আপনার কম্পিউটার থেকে মাইক্রো: বিট সংযোগ বিচ্ছিন্ন করুন। ব্যাটারি বা LiPo কে মাইক্রো: বিটে সংযুক্ত করুন। বোতাম টিপুন, মান পড়ুন প্রেস বোতাম এ চাপুন বোতাম, মান পড়ুন। এয়ারটাইট ব্যাগের দুটি স্তরে ডিভাইসটি রাখুন, ব্যাগগুলিতে খুব কম বায়ু রেখে। ক্ষেত্রে, উত্সাহী শক্তি ক্ষতিপূরণ একটি ওজন রাখুন। সবকিছু জলরোধী কিনা তা পরীক্ষা করুন। পুলে গিয়ে খেলো।

ধাপ 5: মাইক্রোপাইথন স্ক্রিপ্ট

স্ক্রিপ্ট সেন্সর থেকে চাপের মান নেয়, রেফারেন্স ভ্যালুর সাথে তুলনা করে এবং তারপর পার্থক্য থেকে গভীরতা গণনা করে। একটি বার গ্রাফ হিসাবে মান প্রদর্শন করার জন্য, গভীরতার মান পূর্ণসংখ্যা এবং অবশিষ্ট অংশ নেওয়া হয়। প্রথমটি লাইনের উচ্চতা নির্ধারণ করে। অবশিষ্টটি পাঁচটি বিন্দুতে বিভক্ত, যা বারগুলির দৈর্ঘ্য নির্ধারণ করে। উপরের স্তর 0 - 1 মিটার, সর্বনিম্ন 4 - 5 মিটার আগে যেমন উল্লেখ করা হয়েছে, বোতাম এ টিপে রেফারেন্স চাপ সেট করে, বোতাম বি মিটারে "আপেক্ষিক গভীরতা" প্রদর্শন করে, একটি সংখ্যাসূচক মান হিসাবে প্রদর্শিত হয়। এখন পর্যন্ত, নেতিবাচক এবং ইতিবাচক মানগুলি একইভাবে LED ম্যাট্রিক্সে বারগ্রাফ হিসাবে উপস্থাপন করা হয়েছে। আপনি Arduino IDE এর সিরিয়াল মনিটর বা প্লটারে মানগুলি উপস্থাপন করার জন্য কিছু লাইন আনমিউট করতে পারেন। ফাংশন অনুকরণ করার জন্য, আপনি পূর্ববর্তী নির্দেশনায় বর্ণিত ডিভাইসটি তৈরি করতে পারেন।

আমি স্ক্রিপ্টের যে অংশটি সেন্সর পড়ে তা লিখিনি। আমি উৎস সম্পর্কে নিশ্চিত নই, কিন্তু আমি লেখকদের ধন্যবাদ জানাতে চাই। অপ্টিমাইজেশনের জন্য কোন সংশোধন বা ইঙ্গিত স্বাগত।

#অন্তর্ভুক্ত

#অন্তর্ভুক্ত Adafruit_Microbit_Matrix microbit; #নির্ধারণ করুন BME280_ADDRESS 0x76 স্বাক্ষরবিহীন দীর্ঘ int hum_raw, temp_raw, pres_raw; স্বাক্ষরিত দীর্ঘ int t_fine; uint16_t dig_T1; int16_t dig_T2; int16_t dig_T3; uint16_t dig_P1; int16_t dig_P2; int16_t dig_P3; int16_t dig_P4; int16_t dig_P5; int16_t dig_P6; int16_t dig_P7; int16_t dig_P8; int16_t dig_P9; int8_t dig_H1; int16_t dig_H2; int8_t dig_H3; int16_t dig_H4; int16_t dig_H5; int8_t dig_H6; ডবল press_norm = 1015; // একটি প্রারম্ভিক মান দ্বিগুণ গভীরতা; // গণনা করা গভীরতা // -------------------------------------------- -------------------------------------------------- ---------------------- অকার্যকর সেটআপ () {uint8_t osrs_t = 1; // তাপমাত্রা oversampling x 1 uint8_t osrs_p = 1; // চাপ oversampling x 1 uint8_t osrs_h = 1; // আর্দ্রতা oversampling x 1 uint8_t মোড = 3; // সাধারণ মোড uint8_t t_sb = 5; // Tstandby 1000ms uint8_t ফিল্টার = 0; // uint8_t spi3w_en = 0 ফিল্টার করুন; // 3-তারের SPI নিষ্ক্রিয় করুন uint8_t ctrl_meas_reg = (osrs_t << 5) | (osrs_p << 2) | মোড; uint8_t config_reg = (t_sb << 5) | (ফিল্টার << 2) | spi3w_en; uint8_t ctrl_hum_reg = osrs_h; pinMode (PIN_BUTTON_A, INPUT); pinMode (PIN_BUTTON_B, INPUT); Serial.begin (9600); // সেট সিরিয়াল পোর্টের গতি Serial.print ("চাপ [hPa]"); // সিরিয়াল আউটপুট Wire.begin () এর হেডার; writeReg (0xF2, ctrl_hum_reg); writeReg (0xF4, ctrl_meas_reg); writeReg (0xF5, config_reg); readTrim (); // microbit.begin (); // microbit.print ("x"); বিলম্ব (1000); } // ----------------------------------------------- ---------------------------------------------- অকার্যকর লুপ () {ডবল temp_act = 0.0, press_act = 0.0, hum_act = 0.0; স্বাক্ষরিত দীর্ঘ int temp_cal; স্বাক্ষরবিহীন দীর্ঘ int press_cal, hum_cal; int এন; int এম; ডাবল প্রেস_ডেল্টা; // আপেক্ষিক চাপ গভীরতা_ মি; // মিটারে গভীরতা, পূর্ণসংখ্যা অংশ দ্বিগুণ গভীরতা_ সেমি; // cm readData () এ অবশিষ্ট; // temp_cal = calibration_T (temp_raw); press_cal = calibration_P (pres_raw); // hum_cal = calibration_H (hum_raw); // temp_act = (ডবল) temp_cal / 100.0; press_act = (ডবল) press_cal / 100.0; // hum_act = (ডবল) hum_cal / 1024.0; microbit.clear (); // রিসেট এলইডি ম্যাট্রিক্স // বোতাম A প্রকৃত মান রেফারেন্স হিসাবে সেট করে (P শূন্য) // বোতাম B বর্তমান মান মিটারে গভীরতা হিসাবে প্রদর্শন করে (চাপের পার্থক্য থেকে গণনা করা হয়) যদি (! digitalRead (PIN_BUTTON_A)) {// স্বাভাবিক বাতাসের চাপ সেট করে শূন্য হিসাবে press_norm = press_act; // microbit.print ("P0:"); // microbit.print (press_norm, 0); // microbit.print ("hPa"); microbit.fillScreen (LED_ON); // বিলম্ব নিশ্চিত করার জন্য একবার ঝলক (100); } অন্যথায় যদি (! digitalRead (PIN_BUTTON_B)) {// ডিসপ্লে গভীরতা মিটারে microbit.print ("m"); // Serial.println (""); } অন্য {// চাপের পার্থক্য থেকে গভীরতার হিসাব করুন press_delta = (press_act - press_norm); // আপেক্ষিক চাপ গভীরতা গণনা = (press_delta/100); // মিটারে গভীরতা deep_m = int (abs (গভীরতা)); // গভীরতা im মিটার deep_cm = (abs (গভীরতা) - গভীরতা_ মি); // অবশিষ্ট /* // উন্নয়নের জন্য ব্যবহৃত Serial.println (গভীরতা); Serial.println (গভীরতা_ মি); Serial.println (গভীরতা_ সেমি); */ // বারগ্রাফের জন্য ধাপগুলি যদি (গভীরতা_ সেমি> 0.8) {// বারের দৈর্ঘ্য সেট (N = 4); } অন্যথায় যদি (depth_cm> 0.6) {(N = 3); } অন্যথায় যদি (depth_cm> 0.4) {(N = 2); } অন্যথায় যদি (depth_cm> 0.2) {(N = 1); } অন্য {(N = 0); }

যদি (গভীরতা_ মি == 4) {// সেট স্তর == মিটার

(এম = 4); } অন্যথায় যদি (গভীরতা_ মি == 3) {(এম = 3); } অন্যথায় যদি (গভীরতা_ মি == 2) {(এম = 2); } অন্যথায় যদি (গভীরতা_ মি == 1) {(এম = 1); } অন্য {(M = 0); // উপরের সারি} /* // উন্নয়নের উদ্দেশ্যে ব্যবহৃত Serial.print ("m:"); Serial.println (গভীরতা_ মি); সিরিয়াল.প্রিন্ট ("সেমি:"); Serial.println (গভীরতা_ সেমি); সিরিয়াল.প্রিন্ট ("এম:"); Serial.println (M); // উন্নয়নের উদ্দেশ্যে Serial.print ("N:"); Serial.println (N); // উন্নয়ন উদ্দেশ্যে বিলম্ব (500); */ // অঙ্কন বারগ্রাফ microbit.drawLine (0, M, N, M, LED_ON); }

// প্লটারের জন্য সিরিয়াল পোর্টে মান পাঠান

Serial.print (press_delta); // নির্দেশক রেখা আঁকুন এবং প্রদর্শিত পরিসীমা ঠিক করুন Serial.print ("\ t"); সিরিয়াল.প্রিন্ট (0); Serial.print ("\ t"); সিরিয়াল.প্রিন্ট (-500); Serial.print ("\ t"); Serial.println (500); বিলম্ব (500); // সেকেন্ডে দুবার পরিমাপ করুন} // ----------------------------------------- -------------------------------------------------- -------------------------------------------------- -------- // bmp/bme280 সেন্সরের জন্য নিম্নলিখিতগুলি প্রয়োজন, এটি অকার্যকর রাখুন readTrim () {uint8_t data [32], i = 0; // Fix 2014/Wire.beginTransmission (BME280_ADDRESS); Wire.write (0x88); Wire.endTransmission (); Wire.requestFrom (BME280_ADDRESS, 24); // Fix 2014/while (Wire.available ()) {data = Wire.read (); আমি ++; } Wire.beginTransmission (BME280_ADDRESS); // 2014/Wire.write যোগ করুন (0xA1); // 2014 যোগ করুন/Wire.endTransmission (); // 2014 যোগ করুন/Wire.requestFrom (BME280_ADDRESS, 1); // 2014/data = Wire.read () যোগ করুন; // 2014/i ++ যোগ করুন; // 2014 যোগ করুন/Wire.beginTransmission (BME280_ADDRESS); Wire.write (0xE1); Wire.endTransmission (); Wire.requestFrom (BME280_ADDRESS, 7); // Fix 2014/while (Wire.available ()) {data = Wire.read (); আমি ++; } dig_T1 = (তথ্য [1] << 8) | ডেটা [0]; dig_P1 = (তথ্য [7] << 8) | তথ্য [6]; dig_P2 = (তথ্য [9] << 8) | তথ্য [8]; dig_P3 = (তথ্য [11] << 8) | তথ্য [10]; dig_P4 = (তথ্য [13] << 8) | তথ্য [12]; dig_P5 = (তথ্য [15] << 8) | তথ্য [14]; dig_P6 = (তথ্য [17] << 8) | তথ্য [16]; dig_P7 = (তথ্য [19] << 8) | তথ্য [18]; dig_T2 = (তথ্য [3] << 8) | তথ্য [2]; dig_T3 = (তথ্য [5] << 8) | তথ্য [4]; dig_P8 = (তথ্য [21] << 8) | তথ্য [20]; dig_P9 = (তথ্য [23] << 8) | তথ্য [22]; dig_H1 = ডেটা [24]; dig_H2 = (তথ্য [26] << 8) | তথ্য [25]; dig_H3 = ডেটা [27]; dig_H4 = (তথ্য [28] << 4) | (0x0F এবং ডেটা [29]); dig_H5 = (ডেটা [30] 4) এবং 0x0F); // ফিক্স 2014/dig_H6 = ডেটা [31]; // 2014/} অকার্যকর writeReg (uint8_t reg_address, uint8_t data) {Wire.beginTransmission (BME280_ADDRESS); Wire.write (reg_address); Wire.write (তথ্য); Wire.endTransmission (); } অকার্যকর readData () {int i = 0; uint32_t ডেটা [8]; Wire.beginTransmission (BME280_ADDRESS); Wire.write (0xF7); Wire.endTransmission (); Wire.requestFrom (BME280_ADDRESS, 8); যখন (Wire.available ()) {data = Wire.read (); আমি ++; } pres_raw = (তথ্য [0] << 12) | (তথ্য [1] 4); temp_raw = (তথ্য [3] << 12) | (তথ্য [4] 4); hum_raw = (তথ্য [6] 3) - ((স্বাক্ষরিত দীর্ঘ int) dig_T1 11; var2 = (((((adc_T >> 4) - ((স্বাক্ষরিত দীর্ঘ int) dig_T1)) * ((adc_T >> 4) - ((স্বাক্ষরিত দীর্ঘ int) dig_T1))) >> 12) * ((স্বাক্ষরিত দীর্ঘ int) dig_T3)) >> 14; t_fine = var1 + var2; } স্বাক্ষরবিহীন দীর্ঘ int calibration_P (স্বাক্ষরিত দীর্ঘ int adc_P) {স্বাক্ষরিত দীর্ঘ int var1, var2; স্বাক্ষরবিহীন দীর্ঘ int P; var1 = (((স্বাক্ষরিত দীর্ঘ int) t_fine) >> 1) - (স্বাক্ষরিত দীর্ঘ int) 64000; var2 = (((var1 >> 2) * (var1 >> 2)) >> 11) * ((স্বাক্ষরিত দীর্ঘ int) dig_P6); var2 = var2 + ((var1 * ((স্বাক্ষরিত দীর্ঘ int) dig_P5)) 2) + (((স্বাক্ষরিত দীর্ঘ int) dig_P4) 2) * (var1 >> 2)) >> 13)) >> 3) + (((স্বাক্ষরিত দীর্ঘ int) dig_P2) * var1) >> 1)) >> 18; var1 = ((((32768+var1))*((স্বাক্ষরিত দীর্ঘ int) dig_P1)) >> 15); যদি (var1 == 0) {return 0; } P = (((স্বাক্ষরবিহীন দীর্ঘ int) (((স্বাক্ষরিত দীর্ঘ int) 1048576) -adc_P)-(var2 >> 12)))*3125; যদি (P <0x80000000) {P = (P << 1) / ((স্বাক্ষরবিহীন দীর্ঘ int) var1); } অন্য {P = (P / (স্বাক্ষরবিহীন দীর্ঘ int) var1) * 2; } var1 = (((স্বাক্ষরিত দীর্ঘ int) dig_P9) * ((স্বাক্ষরিত দীর্ঘ int) (((P >> 3) * (P >> 3)) >> 13)))> 12; var2 = (((স্বাক্ষরিত দীর্ঘ int) (P >> 2)) * ((স্বাক্ষরিত দীর্ঘ int) dig_P8)) >> 13; P = (স্বাক্ষরবিহীন দীর্ঘ int) ((স্বাক্ষরিত দীর্ঘ int) P + ((var1 + var2 + dig_P7) >> 4)); পি ফিরে; } স্বাক্ষরবিহীন দীর্ঘ int calibration_H (স্বাক্ষরিত দীর্ঘ int adc_H) {স্বাক্ষরিত দীর্ঘ int v_x1; v_x1 = (t_fine - ((স্বাক্ষরিত দীর্ঘ int) 76800)); v_x1 = (((((adc_H << 14) -(((স্বাক্ষরিত দীর্ঘ int) dig_H4) 15) * ({ (v_x1 * ((স্বাক্ষরিত দীর্ঘ int) dig_H3)) >> 11) + ((স্বাক্ষরিত দীর্ঘ int) 32768))) >> 10) + ((স্বাক্ষরিত দীর্ঘ int) 2097152) + 8192) >> 14)); v; x1 = (v_x1 419430400?

ধাপ 6: একটি প্রধান সরলীকরণ: মেককোড/জাভাস্ক্রিপ্ট কোড

একটি প্রধান সরলীকরণ: মেককোড/জাভাস্ক্রিপ্ট কোড
একটি প্রধান সরলীকরণ: মেককোড/জাভাস্ক্রিপ্ট কোড
একটি প্রধান সরলীকরণ: মেককোড/জাভাস্ক্রিপ্ট কোড
একটি প্রধান সরলীকরণ: মেককোড/জাভাস্ক্রিপ্ট কোড

2018 সালের মে মাসে, পিমোরোনি পরিবেশ: বিট, যা একটি BME280 চাপ/আর্দ্রতা/তাপমাত্রা সেন্সর, একটি TCS3472 আলো এবং রঙ সেন্সর এবং একটি MEMS মাইক্রোফোন প্রকাশ করেছে। এছাড়াও তারা মেককোড এডিটরের জন্য একটি জাভাস্ক্রিপ্ট লাইব্রেরি এবং এই সেন্সরগুলির জন্য একটি মাইক্রোপিথন লাইব্রেরি অফার করছে।

আমি আমার ডিভাইসের জন্য স্ক্রিপ্ট তৈরি করতে তাদের মেককোড লাইব্রেরি ব্যবহার করছি। সংযুক্ত হেক্স ফাইলগুলি খুঁজে পেয়েছেন, যা আপনি সরাসরি আপনার মাইক্রো: বিটে অনুলিপি করতে পারেন।

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

যাক কলাম = 0

Let Meter = 0 let let = 0 let Row = 0 let Delta = 0 let Ref = 0 let Is = 0 Is = 1012 basic.showLeds (` # # # # # #।। # #। # #। # #। # basic.showLeds (` #। #। #। #। #। # # # # #। #। #। #। #। #`) basic.pause (1000)} অন্যথায় (input.buttonIsPressed (Button. B)) {basic.showString ("" + Row + "।" + stay + "m") basic.pause (200) basic.clearScreen ()} else {Is = envirobit.getPressure () Delta = Is - Ref Meter = Math.abs (ডেল্টা) if (Meter> = 400) {Row = 4} else if (Meter> = 300) {Row = 3} else if (Meter> = 200) {Row = 2} else if (Meter> = 100)) {সারি = 1} অন্য {সারি = 0} অব্যাহত = মিটার - সারি * 100 যদি (থাকে> = 80) {কলাম = 4} অন্যথায় যদি (থাকে> = 60) {কলাম = 3} অন্যথায় যদি (থাকে> = 40) {কলাম = 2} অন্যথায় যদি (থাকে> = 20) {কলাম = 1} অন্য {কলাম = 0} এর জন্য (যাক ColA = 0; ColA <= কলাম; ColA ++) {led.plot (C olA, সারি)} basic.pause (500)}})

ধাপ 7: এনভিরো: বিট সংস্করণ

এনভিরো: বিট সংস্করণ
এনভিরো: বিট সংস্করণ
এনভিরো: বিট সংস্করণ
এনভিরো: বিট সংস্করণ
এনভিরো: বিট সংস্করণ
এনভিরো: বিট সংস্করণ

ইতিমধ্যে আমি এনভিরো পেয়েছি: বিট (20 জিবিপি) এবং শক্তি: বিট (6 জিবিপি), উভয়ই পিমোরোনি থেকে।

আগেই উল্লেখ করা হয়েছে, এনভিরো: বিট BME280 চাপ, আর্দ্রতা এবং তাপমাত্রা সেন্সরের সাথে আসে, কিন্তু একটি হালকা এবং রঙ সেন্সর (এখানে একটি অ্যাপ্লিকেশন দেখুন) এবং একটি MEMS মাইক্রোফোন।

পাওয়ার: বিট মাইক্রো: বিটকে পাওয়ার একটি চমৎকার সমাধান এবং একটি অন/অফ সুইচ দিয়ে আসে।

দুর্দান্ত বিষয় হল এটি উভয়ই কেবল ক্লিক এবং ব্যবহার, কোনও সোল্ডারিং, কেবল, ব্রেডবোর্ড নেই। এনভিরো: বিটকে মাইক্রো: বিটে যোগ করুন, আপনার কোডটি মাইক্রো: বিটে লোড করুন, এটি ব্যবহার করুন।

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

এটি পানিতে পরীক্ষা করা হয়েছে, ভাল কাজ করছে। প্রায় 1.8 মিটার গভীরতায় পরিমাপকৃত মান ছিল প্রায় 1.7 মিটার। দ্রুত এবং সস্তা সমাধানের জন্য খুব খারাপ নয়, তবে নিখুঁত হওয়া থেকে অনেক দূরে।এটি সামঞ্জস্য করতে কিছুটা সময় নেয়, তাই আপনাকে প্রায় 10-15 সেকেন্ডের জন্য একটি নির্দিষ্ট গভীরতায় থাকতে হতে পারে।

ধাপ 8: কেবল এবং সেন্সর প্রোব সংস্করণ

কেবল এবং সেন্সর প্রোব সংস্করণ
কেবল এবং সেন্সর প্রোব সংস্করণ
কেবল এবং সেন্সর প্রোব সংস্করণ
কেবল এবং সেন্সর প্রোব সংস্করণ

এটি আসলে একটি মাইক্রো: বিট ডেপথ মিটারের জন্য প্রথম ধারণা ছিল, যা তৈরি করা শেষ।

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

জাম্পারগুলিকে মাইক্রো: বিট একটি এজ কানেক্টরের মাধ্যমে সংযুক্ত করা হয়েছিল, ডিভাইসটি চালু করা হয়েছিল এবং রেফারেন্স চাপ সেট করা হয়েছিল। তারপর সেন্সর হেড ধীরে ধীরে পুলের নীচে ছেড়ে দেওয়া হয় (10 মিটার জাম্পিং টাওয়ার, প্রায় 4.5 মিটার গভীর)।

ফলাফল:

আমার বিস্ময়ের জন্য, এটি এই দীর্ঘ তারের সাথেও কাজ করেছে। অন্যদিকে, কিন্তু আশ্চর্যজনক নয়, উচ্চ চাপে পরিমাপের ত্রুটি আরও বড় হয়ে উঠেছে এবং আনুমানিক 4 মিটার গভীরতা প্রায় 3 মিটার হিসাবে রিপোর্ট করা হয়েছিল।

সম্ভাব্য অ্যাপ্লিকেশন:

কিছু ত্রুটি সংশোধন করে, ডিভাইসটি প্রায় 4 মিটার গভীরতা পরিমাপ করতে ব্যবহার করা যেতে পারে।

একটি Arduino বা রাস্পবেরি পাই এর সাথে, এটি একটি পুল বা জলের ট্যাঙ্ক, e, g এর ফিলিং পয়েন্ট পরিমাপ এবং নিয়ন্ত্রণ করতে ব্যবহার করা যেতে পারে। যদি পানির স্তর নির্দিষ্ট থ্রেশহোল্ডের উপরে বা নিচে চলে যায় তবে একটি সতর্কতা জারি করা।

আউটডোর ফিটনেস চ্যালেঞ্জ
আউটডোর ফিটনেস চ্যালেঞ্জ
আউটডোর ফিটনেস চ্যালেঞ্জ
আউটডোর ফিটনেস চ্যালেঞ্জ

আউটডোর ফিটনেস চ্যালেঞ্জে রানার আপ

প্রস্তাবিত: