विषयसूची:

अपने माइक्रो: बिट के साथ दबाव मापें: 5 कदम (चित्रों के साथ)
अपने माइक्रो: बिट के साथ दबाव मापें: 5 कदम (चित्रों के साथ)

वीडियो: अपने माइक्रो: बिट के साथ दबाव मापें: 5 कदम (चित्रों के साथ)

वीडियो: अपने माइक्रो: बिट के साथ दबाव मापें: 5 कदम (चित्रों के साथ)
वीडियो: वास्तविक जीवन में $456,000 स्क्विड गेम! 2024, जुलाई
Anonim
अपने माइक्रो: बिट. के साथ दबाव मापें
अपने माइक्रो: बिट. के साथ दबाव मापें
अपने माइक्रो: बिट. के साथ दबाव मापें
अपने माइक्रो: बिट. के साथ दबाव मापें

निम्नलिखित निर्देशयोग्य दबाव माप करने के लिए एक आसान निर्माण और सस्ती डिवाइस का वर्णन करता है और BMP280 दबाव / तापमान सेंसर के संयोजन में माइक्रो: बिट का उपयोग करके बॉयल के नियम को प्रदर्शित करता है।

जबकि इस सिरिंज / प्रेशर सेंसर संयोजन का वर्णन मेरे पिछले निर्देशों में से एक में किया जा चुका है, माइक्रो: बिट के साथ संयोजन नए अवसर प्रदान कर रहा है, उदा। कक्षा कक्ष परियोजनाओं के लिए।

इसके अलावा, उन अनुप्रयोगों के विवरणों की संख्या जिनमें माइक्रो: बिट का उपयोग I2C संचालित सेंसर के साथ संयोजन में किया जाता है, अब तक सीमित हैं। मुझे आशा है कि यह निर्देश अन्य परियोजनाओं के लिए एक प्रारंभिक बिंदु हो सकता है।

डिवाइस मात्रात्मक वायु दाब मापन करने की अनुमति देता है, और बाद में Arduino IDE के सीरियल मॉनिटर या सीरियल प्लॉटर फ़ंक्शंस का उपयोग करने के लिए माइक्रो: बिट एलईडी सरणी या कनेक्टेड कंप्यूटर पर परिणाम प्रदर्शित करने की अनुमति देता है। इसके अलावा, आपके पास एक हैप्टीक फीडबैक है, क्योंकि आप सिरिंज के प्लंजर को स्वयं धक्का देंगे या खींचेंगे, और इसके द्वारा आवश्यक शक्ति को महसूस करेंगे।

डिफ़ॉल्ट रूप से, डिस्प्ले आपको एलईडी मैट्रिक्स पर दिखाए गए स्तर संकेतक द्वारा दबाव का अनुमान लगाने की अनुमति देता है। Arduino IDE का सीरियल प्लॉटर ऐसा ही करने की अनुमति देता है, लेकिन बहुत बेहतर रिज़ॉल्यूशन के साथ (वीडियो देखें)। अधिक विस्तृत समाधान भी उपलब्ध हैं, उदा। प्रसंस्करण भाषा में। आप क्रमशः ए या बी बटन दबाने के बाद एलईडी मैट्रिक्स पर दबाव और तापमान के सटीक मापा मूल्यों को प्रदर्शित कर सकते हैं, लेकिन Arduino IDE का सीरियल मॉनिटर बहुत तेज है, जिससे वास्तविक समय में मूल्यों को प्रदर्शित करने की अनुमति मिलती है।

उपकरण बनाने के लिए आवश्यक कुल लागत और तकनीकी कौशल काफी कम हैं, इसलिए यह एक शिक्षक की देखरेख में एक अच्छी कक्षा परियोजना हो सकती है। इसके अलावा डिवाइस भौतिक विज्ञान पर ध्यान देने के साथ एसटीईएम परियोजनाओं के लिए एक उपकरण हो सकता है या अन्य परियोजनाओं में उपयोग किया जा सकता है जहां एक बल या वजन डिजिटल मूल्य में परिवर्तित हो जाएगा।

सिद्धांत का उपयोग एक बहुत ही सरल माइक्रो: बिट डाइव-ओ-मीटर के निर्माण के लिए किया गया था, यह मापने के लिए एक उपकरण है कि आप कितना गहरा गोता लगा रहे हैं।

परिशिष्ट 27-मई-2018:

जैसा कि पिमोरोनी ने बीएमपी२८० सेंसर के लिए मेककोड लाइब्रेरी विकसित की है, इसने मुझे यहां वर्णित डिवाइस के लिए उपयोग की जाने वाली स्क्रिप्ट विकसित करने का अवसर दिया। स्क्रिप्ट और संबंधित HEX- फ़ाइल इस निर्देश के अंतिम चरण में पाई जा सकती है। इसका उपयोग करने के लिए, बस HEX फ़ाइल को अपने माइक्रो: बिट में लोड करें। विशेष सॉफ़्टवेयर की कोई आवश्यकता नहीं है, और आप स्क्रिप्ट संपादित करने के लिए ऑनलाइन मेककोड संपादक का उपयोग कर सकते हैं।

चरण 1: प्रयुक्त सामग्री

प्रयुक्त सामग्री
प्रयुक्त सामग्री
प्रयुक्त सामग्री
प्रयुक्त सामग्री
प्रयुक्त सामग्री
प्रयुक्त सामग्री
प्रयुक्त सामग्री
प्रयुक्त सामग्री
  • एक माइक्रो: बिट, पिमोरोनी से मेरा प्राप्त हुआ - 13.50 GBP
  • माइक्रो: बिट के लिए किट्रोनिक एज कनेक्टर - पिमोरोनी के माध्यम से - 5 जीबीपी, टिप्पणी: पिमोरिनी अब ब्रेडबोर्ड के अनुकूल एज कनेक्टर प्रदान करता है जिसे पिन: बिट कहा जाता है I2C पोर्ट पर पिन के साथ।
  • 2 x 2 पिन हैडर स्ट्रिप्स
  • माइक्रो के लिए बैटरी या लीपो: बिट (आवश्यक नहीं, लेकिन सहायक), स्विच के साथ बैटरी केबल (डिटो) - पिमोरोनी
  • एज कनेक्टर से सेंसर के कनेक्शन के लिए जम्पर केबल
  • सेंसर के लिए लंबी (!) जम्पर केबल, कम से कम सिरिंज जितनी लंबी,, f/f या f/m
  • BMP280 दबाव और तापमान सेंसर - बैंगगूड - तीन इकाइयों के लिए 5 US$इस सेंसर की माप सीमा 550 और 1537 hPa के बीच है।
  • रबर गैसकेट के साथ 150 मिलीलीटर प्लास्टिक कैथेटर सिरिंज - अमेज़ॅन या हार्डवेयर और बगीचे की दुकानें - लगभग 2 - 3 यूएस$
  • गर्म गोंद/गर्म गोंद पिस्तौल
  • सोल्डरिंग आयरन
  • Arduino IDE वाला कंप्यूटर स्थापित

चरण 2: विधानसभा निर्देश

एकत्र करने के लिए निर्देश
एकत्र करने के लिए निर्देश
एकत्र करने के लिए निर्देश
एकत्र करने के लिए निर्देश
एकत्र करने के लिए निर्देश
एकत्र करने के लिए निर्देश

BMP280 सेंसर ब्रेकआउट के लिए सोल्डर हेडर।

दो 2 पिन हेडर को पिन 19 से मिलाएं और एज कनेक्टर के 20 कनेक्टर को पिन करें (चित्र देखें)।

माइक्रो: बिट को एज कनेक्टर और अपने कंप्यूटर से कनेक्ट करें।

सॉफ्टवेयर और माइक्रो: बिट तैयार करें जैसा कि एडफ्रूट माइक्रो: बिट निर्देशों में वर्णित है। उन्हें अच्छी तरह पढ़ लें।

Arduino IDE में आवश्यक लाइब्रेरी स्थापित करें।

बाद के चरण में संलग्न BMP280 स्क्रिप्ट खोलें।

सेंसर को एज कनेक्टर से कनेक्ट करें। GND से 0V, VCC से 3V, SCL से पिन 19, SDA से पिन 20।

स्क्रिप्ट को माइक्रो: बिट पर अपलोड करें।

जाँच करें कि सेंसर उचित डेटा देता है, दबाव मान लगभग १०२० hPa होना चाहिए, जो सीरियल मॉनीटर पर प्रदर्शित होता है। मामले में, पहले केबल और कनेक्शन की जांच करें, फिर सॉफ़्टवेयर इंस्टॉलेशन, और सही करें।

माइक्रो: बिट बंद करें, सेंसर हटा दें।

सिरिंज के आउटलेट के माध्यम से लंबी जम्पर केबल चलाएं। मामले में आपको उद्घाटन को चौड़ा करना पड़ सकता है। केबल क्षतिग्रस्त होने से बचने के लिए सावधान रहें।

सेंसर को जम्पर केबल से कनेक्ट करें। जांचें कि कनेक्शन सही और अच्छे हैं। माइक्रो से कनेक्ट करें: बिट।

जांचें कि सेंसर सही ढंग से चल रहा है। केबलों को सावधानी से खींचकर, सेंसर को सिरिंज के शीर्ष पर ले जाएं।

प्लंजर डालें और इसे आराम की वांछित स्थिति (100 मिली) से थोड़ा आगे ले जाएं।

सिरिंज आउटलेट के अंत में गर्म गोंद जोड़ें और प्लंजर को थोड़ा पीछे ले जाएं। जांचें कि क्या सिरिंज एयर टाइट बंद है, अन्यथा अधिक गर्म गोंद जोड़ें। गर्म गोंद को ठंडा होने दें।

फिर से जांचें कि सेंसर काम कर रहा है। यदि आप प्लंजर को हिलाते हैं, तो सीरियल मॉनिटर और माइक्रो: बिट के डिस्प्ले में नंबर बदल जाने चाहिए।

यदि आवश्यक हो तो आप सिरिंज में मात्रा को गैस्केट के पास निचोड़कर और सवार को घुमाकर समायोजित कर सकते हैं।

चरण 3: थोड़ा सा सिद्धांत और कुछ व्यावहारिक माप

थोड़ा सा सिद्धांत और कुछ व्यावहारिक माप
थोड़ा सा सिद्धांत और कुछ व्यावहारिक माप
थोड़ा सा सिद्धांत और कुछ व्यावहारिक माप
थोड़ा सा सिद्धांत और कुछ व्यावहारिक माप

यहां वर्णित डिवाइस के साथ, आप सरल भौतिकी प्रयोगों में संपीड़न और दबाव के सहसंबंध को प्रदर्शित कर सकते हैं। चूंकि सिरिंज पर "एमएल" -स्केल होता है, यहां तक कि मात्रात्मक प्रयोग भी करना आसान होता है।

इसके पीछे का सिद्धांत: बॉयल के नियम के अनुसार, [वॉल्यूम * प्रेशर] किसी दिए गए तापमान पर गैस के लिए एक स्थिर मान है।

इसका अर्थ यह है कि यदि आप गैस के किसी दिए गए आयतन को N-गुना संकुचित करते हैं, अर्थात अंतिम आयतन मूल का 1/N गुना है, तो इसका दबाव N-गुना बढ़ जाएगा, जैसे: P0*V0=P1*V1= विपक्ष t। अधिक जानकारी के लिए, कृपया गैस कानूनों पर विकिपीडिया लेख देखें। समुद्र तल पर, बैरोमीटर का दबाव आमतौर पर 1010 hPa (हेक्टो पास्कल) की सीमा में होता है।

तो उदा। के विश्राम बिंदुओं से शुरू करना। V0=100 मिली और P0=1000 hPa, हवा का लगभग 66 मिली (यानी V1 = 2/3 * V0) तक संपीड़न के परिणामस्वरूप लगभग 1500 hPa (P1 = P0 का 3/2) का दबाव होगा। प्लंजर को 125 मिली (5/4 गुना आयतन) तक खींचने से लगभग 800 hPa (4/5 दबाव) का दबाव होता है। इस तरह के एक साधारण उपकरण के लिए माप आश्चर्यजनक रूप से सटीक हैं।

डिवाइस आपको सीधे हैप्टिक इंप्रेशन देने की अनुमति देता है कि सिरिंज में अपेक्षाकृत कम मात्रा में हवा को संपीड़ित या विस्तारित करने के लिए कितना बल आवश्यक है।

लेकिन हम कुछ गणनाएँ भी कर सकते हैं और उन्हें प्रयोगात्मक रूप से जाँच सकते हैं। मान लें कि हम १००० hPa के बेसल बैरोमीटर के दबाव पर हवा को १५०० hPa तक संपीड़ित करते हैं। तो दबाव अंतर ५०० hPa, या ५०,००० Pa है। मेरी सिरिंज के लिए, पिस्टन का व्यास (d) लगभग ४ सेमी या ०.०४ मीटर है।

अब आप पिस्टन को उस स्थिति में रखने के लिए आवश्यक बल की गणना कर सकते हैं। दिया गया P = F/A (दबाव क्षेत्र द्वारा विभाजित बल है), या रूपांतरित F = P*A । बल के लिए SI इकाई "न्यूटन" N है, लंबाई "मीटर" m के लिए, और 1 Pa 1N प्रति वर्ग मीटर है। एक गोल पिस्टन के लिए, क्षेत्र की गणना A = ((d/2)^2)*pi का उपयोग करके की जा सकती है, जो मेरे सिरिंज के लिए 0.00125 वर्ग मीटर देता है। इसलिए

५०, ००० पा * ०.००१२५ मीटर ^ २ = ६३ एन।

पृथ्वी पर, 1 एन 100 ग्राम के वजन से संबंधित है, इसलिए 63 एन 6.3 किलो वजन रखने के बराबर है।

इसे एक पैमाने का उपयोग करके आसानी से जांचा जा सकता है। प्लंजर के साथ सिरिंज को स्केल पर पुश करें, जब तक कि लगभग १५०० hPa का दबाव न पहुंच जाए, तब स्केल को पढ़ें। या तब तक धक्का दें जब तक कि स्केल लगभग 6-7 किग्रा न दिखा दे, फिर "ए" बटन दबाएं और माइक्रो: बिट के एलईडी मैट्रिक्स पर प्रदर्शित मान पढ़ें। जैसा कि यह निकला, उपरोक्त गणनाओं के आधार पर अनुमान खराब नहीं थे। १५०० एचपीए से थोड़ा ऊपर का दबाव शरीर के पैमाने पर लगभग ७ किलो के प्रदर्शित "वजन" से संबंधित होता है (चित्र देखें)। आप इस अवधारणा को बदल सकते हैं और दबाव माप के आधार पर एक साधारण डिजिटल स्केल बनाने के लिए डिवाइस का उपयोग कर सकते हैं।

कृपया ध्यान रखें कि सेंसर की ऊपरी सीमा लगभग 1540 hPa है, इसलिए इससे ऊपर के किसी भी दबाव को मापा नहीं जा सकता है और सेंसर को नुकसान हो सकता है।

शैक्षिक उद्देश्यों के अलावा, कोई भी वास्तविक दुनिया के कुछ अनुप्रयोगों के लिए सिस्टम का उपयोग कर सकता है, क्योंकि यह मात्रात्मक रूप से उन बलों को मापने की अनुमति देता है जो प्लंजर को एक तरफ या दूसरे स्थानांतरित करने की कोशिश कर रहे हैं। तो आप प्लंजर पर रखे वजन या प्लंजर पर टकराने वाले प्रभाव बल को माप सकते हैं। या एक स्विच का निर्माण करें जो एक निश्चित थ्रेशोल्ड मान तक पहुंचने के बाद एक प्रकाश या बजर को सक्रिय करता है या ध्वनि बजाता है। या आप एक संगीत वाद्ययंत्र का निर्माण कर सकते हैं जो सवार पर लागू बल की ताकत के आधार पर आवृत्ति को बदलता है। या इसे गेम कंट्रोलर के रूप में उपयोग करें। अपनी कल्पना का प्रयोग करें और खेलें!

चरण 4: माइक्रोपायथन स्क्रिप्ट

संलग्न आप माइक्रो: बिट के लिए मेरी BMP280 स्क्रिप्ट ढूंढते हैं। यह एक BMP/BME280 स्क्रिप्ट का व्युत्पन्न है जिसे मैंने कहीं बैंगगूड वेबसाइट पर पाया है, जो एडफ्रूट की माइक्रोबिट लाइब्रेरी के साथ संयुक्त है। पहला आपको बैंगगूड सेंसर का उपयोग करने की अनुमति देता है, दूसरा 5x5 एलईडी डिस्प्ले के संचालन को सरल करता है। मेरा धन्यवाद दोनों के डेवलपर्स को जाता है।

डिफ़ॉल्ट रूप से, स्क्रिप्ट माइक्रो: बिट के 5x5 एलईडी डिस्प्ले पर 5 चरणों में दबाव माप के परिणाम प्रदर्शित करती है, जिससे थोड़ी देरी के साथ परिवर्तन देखने की अनुमति मिलती है। सटीक मान Arduino IDE सीरियल मॉनिटर पर समानांतर में प्रदर्शित किए जा सकते हैं, या अधिक विस्तृत ग्राफ Arduino IDE के सीरियल प्लॉटर को प्रदर्शित किया जा सकता है।

यदि आप ए बटन दबाते हैं, तो मापा दबाव मान माइक्रो: बिट के 5x5 एलईडी सरणी पर प्रदर्शित होते हैं। यदि आप B बटन दबाते हैं, तो तापमान मान प्रदर्शित होते हैं। हालांकि यह सटीक डेटा को पढ़ने की अनुमति देता है, माप चक्र को काफी धीमा कर देता है।

मुझे यकीन है कि कार्यों को प्रोग्राम करने और स्क्रिप्ट में सुधार करने के लिए और अधिक शानदार तरीके हैं। किसी भी मदद का स्वागत है।

#xxx शामिल करें

#include 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; // मापा मूल्यों के लिए कंटेनर int value0; इंट वैल्यू1; इंट वैल्यू २; इंट वैल्यू3; इंट वैल्यू4; //------------------------------------------------ -------------------------------------------------- ------------------ शून्य सेटअप () {uint8_t osrs_t = 1; // तापमान निरीक्षण x 1 uint8_t osrs_p = 1; // प्रेशर ओवरसैंपलिंग x 1 uint8_t osrs_h = 1; // ह्यूमिडिटी ओवरसैंपलिंग x 1 uint8_t मोड = 3; // सामान्य मोड uint8_t t_sb = 5; // स्टैंडबाय 1000ms uint8_t फ़िल्टर = 0; // uint8_t spi3w_en = 0 को फ़िल्टर करें; //-तार 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; पिनमोड (पिन_बटन_ए, इनपुट); पिनमोड (पिन_बटन_बी, इनपुट); सीरियल.बेगिन (९६००); // Serial.println ("तापमान [डिग्री सी]"); // सीरियल.प्रिंट ("\ t"); सीरियल.प्रिंट ("दबाव [एचपीए]"); // हेडर वायर.बेगिन (); राइटरेग (0xF2, ctrl_hum_reg); राइटरेग (0xF4, ctrl_meas_reg); राइटरेग (0xF5, config_reg); रीडट्रिम (); // माइक्रोबिट.बेगिन (); // माइक्रोबिट.प्रिंट ("एक्स"); देरी (1000); }//------------------------------------------- -------------------------------------------------- -------- शून्य लूप () {डबल टेम्प_एक्ट = ०.०, प्रेस_एक्ट = ०.०, hum_act = ०.०; लंबे int temp_cal पर हस्ताक्षर किए; अहस्ताक्षरित लंबा int press_cal, hum_cal; इंट एन; // एचपीए डबल मैक्स_0 = 1100 में एलईडी मैट्रिक्स डिस्प्ले के लिए थ्रेसहोल्ड मान सेट करें; डबल मैक्स_1 = 1230; डबल अधिकतम_2 = १३६०; डबल मैक्स_3 = १४९०; रीडडेटा (); temp_cal = अंशांकन_T (temp_raw); प्रेस_काल = अंशांकन_पी (pres_raw); hum_cal = अंशांकन_एच (hum_raw); temp_act = (डबल) temp_cal / १००.०; प्रेस_एक्ट = (डबल)press_cal / १००.०; hum_act = (डबल)hum_cal / १०२४.०; माइक्रोबिट.क्लियर (); // रीसेट एलईडी मैट्रिक्स / * सीरियल.प्रिंट ("प्रेस:"); सीरियल.प्रिंट्लन (प्रेस_एक्ट); सीरियल.प्रिंट ("एचपीए"); सीरियल.प्रिंट ("टीईएमपी:"); सीरियल.प्रिंट ("\ t"); सीरियल.प्रिंट्लन (temp_act); */ अगर (! digitalRead(PIN_BUTTON_B)) {// संख्याओं में मानों को प्रदर्शित करने से वृत्तों को मापने में देरी होती है microbit.print("T:"); माइक्रोबिट.प्रिंट (temp_act, 1); माइक्रोबिट.प्रिंट ("'सी"); // सीरियल.प्रिंट्लन (""); }else if (! digitalRead(PIN_BUTTON_A)) { microbit.print("P:"); माइक्रोबिट.प्रिंट (प्रेस_एक्ट, 0); माइक्रोबिट.प्रिंट ("एचपीए"); }else{// एक निश्चित स्तर में पिक्सेल या लाइनों के रूप में दबाव मान प्रदर्शित करना // 5 चरण: 1490 hPa // थ्रेसहोल्ड को max_n मानों द्वारा परिभाषित किया गया है अगर (press_act> max_3) { (N = 0); // ऊपरी पंक्ति} और अगर (press_act> max_2){ (N=1); } और अगर (प्रेस_एक्ट> मैक्स_1) {(एन = 2); } और अगर (प्रेस_एक्ट> मैक्स_0) {(एन = 3); } और {(एन = 4); // आधार पंक्ति} // Serial.println (N); // विकास के उद्देश्यों के लिए // microbit.print(N); // लाइन के रूप में // microbit.drawLine (N, 0, 0, 4, LED_ON); // मानों को अगली पंक्ति में स्थानांतरित करें value4 = value3; मान ३ = मान २; मान २ = मान १; मान १ = मान ०; मान 0 = एन; // ड्रा इमेज, कॉलम बाय कॉलम microbit.drawPixel(0, value0, LED_ON); // पिक्सेल के रूप में: स्तंभ, पंक्ति। 0, 0 बाएं ऊपरी कोने microbit.drawPixel(1, value1, LED_ON); microbit.drawPixel(2, value2, LED_ON); microbit.drawPixel(3, value3, LED_ON); microbit.drawPixel(4, value4, LED_ON); } // सीरियल मॉनिटर और सीरियल प्लॉटर को डेटा भेजें // Serial.println (press_act); // संख्यात्मक प्रदर्शन के लिए सीरियल पोर्ट पर मूल्य भेजें, वैकल्पिक

सीरियल.प्रिंट (प्रेस_एक्ट); // प्लॉटर के सीरियल पोर्ट को वैल्यू भेजें

// संकेतक रेखाएं बनाएं और प्रदर्शित सीमा को ठीक करें Serial.print("\t"); सीरियल.प्रिंट (600); सीरियल.प्रिंट ("\ t"); सीरियल.प्रिंट (1100), सीरियल.प्रिंट ("\ t"); सीरियल.प्रिंट्लन (1600); देरी (200); // एक सेकंड में तीन बार मापें } //------------------------------------------ -------------------------------------------------- -------------------------------------------------- -- // bmp/bme280 सेंसर के लिए निम्नलिखित आवश्यक है, इसे शून्य रीडट्रिम () {uint8_t डेटा [32], i=0 के रूप में रखें; // फिक्स 2014/वायर.बेगिनट्रांसमिशन (BME280_ADDRESS); वायर.राइट (0x88); वायर.एंडट्रांसमिशन (); Wire.requestFrom (BME280_ADDRESS, 24); // फिक्स 2014/जबकि (वायर.उपलब्ध ()) {डेटा = वायर.रीड (); मैं++; } Wire.beginTransmission(BME280_ADDRESS); // 2014 जोड़ें/वायर.राइट (0xA1); // 2014 जोड़ें/वायर.एंडट्रांसमिशन (); // 2014/Wire.requestFrom (BME280_ADDRESS, 1) जोड़ें; // 2014/डेटा जोड़ें = वायर.रीड (); // 2014/i++ जोड़ें; // 2014/Wire.beginTransmission (BME280_ADDRESS) जोड़ें; वायर.राइट (0xE1); वायर.एंडट्रांसमिशन (); Wire.requestFrom (BME280_ADDRESS, 7); // फिक्स 2014/जबकि (वायर.उपलब्ध ()) {डेटा = वायर.रीड (); मैं++; } 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 = डेटा [२४]; dig_H2 = (डेटा [26] << 8) | डेटा [25]; dig_H3 = डेटा [27]; dig_H4 = (डेटा [२८]<< ४) | (0x0F और डेटा [29]); dig_H5 = (डेटा [30] 4) और 0x0F); // फिक्स २०१४/dig_H6 = डेटा [३१]; // फिक्स 2014/} शून्य राइटरेग (uint8_t reg_address, uint8_t डेटा) { Wire.beginTransmission (BME280_ADDRESS); वायर.राइट (reg_address); वायर.राइट (डेटा); वायर.एंडट्रांसमिशन (); }

शून्य रीडडेटा ()

{इंट मैं = 0; uint32_t डेटा [8]; Wire.beginTransmission (BME280_ADDRESS); वायर.राइट (0xF7); वायर.एंडट्रांसमिशन (); Wire.requestFrom (BME280_ADDRESS, 8); जबकि (वायर.उपलब्ध ()) {डेटा = वायर.रीड (); मैं++; } pres_raw = (डेटा [0] << 12) | (डेटा [1] 4); temp_raw = (डेटा [3] << 12) | (डेटा [4] 4); hum_raw = (डेटा [6] << 8) | डेटा [7]; }

लंबे इंट कैलिब्रेशन_टी पर हस्ताक्षर किए (हस्ताक्षरित लंबे इंट adc_T)

{ लंबे int var1, var2, T पर हस्ताक्षर किए; var1 = ((((adc_T >> 3) - (((लंबे इंट पर हस्ताक्षर किए गए) dig_T1 11; var2 = ((((adc_T >> 4) - ((लंबे इंट पर हस्ताक्षर किए गए) dig_T1)) * ((adc_T>>4) - ((लांग इंट पर हस्ताक्षर किए गए) dig_T1))) >> 12) * (((लॉन्ग इंट पर हस्ताक्षर किए गए) dig_T3)) >> 14; t_fine = var1 + var2; T = (t_fine * 5 + 128) >> 8; वापसी टी; } अहस्ताक्षरित लंबी इंट कैलिब्रेशन_पी (हस्ताक्षरित लंबी इंट एडीसी_पी) { लंबे इंट var1, var2 पर हस्ताक्षर किए; अहस्ताक्षरित लंबे इंट पी; var1 = (((((((((हस्ताक्षरित लंबे इंट) t_fine))>> 1) - (हस्ताक्षरित लंबे इंट) 64000; var2 = (((var1>>2) * (var1>>2)) >> 11) * (((लांग इंट पर हस्ताक्षर किए गए) dig_P6); var2 = var2 + ((var1*((long int पर हस्ताक्षर किए)dig_P5))2) +(((((लंबे इंट पर हस्ताक्षर किए गए) dig_P4)2)*(var1>>2)) >> 13)) >>3) + ((((((लंबे इंट पर हस्ताक्षर किए गए)) dig_P2) * var1)>>1))>> १८; var1 = ((((32768+var1))*(((लंबे इंट पर हस्ताक्षर किए गए) dig_P1))>>15); अगर (var1 == 0) {वापसी 0; } पी = (((अहस्ताक्षरित लंबी इंट) (((((((हस्ताक्षरित लंबे इंट) 1048576) -adc_P)-(var2>>12)) * 3125; अगर (पी <0x80000000) {पी = (पी <<1) / ((अहस्ताक्षरित लंबी इंट) var1); } और { पी = (पी / (अहस्ताक्षरित लंबी इंट) var1) * 2; } var1 = ((((लंबे इंट पर हस्ताक्षर किए गए) dig_P9) * (((लंबे इंट पर हस्ताक्षर किए) (((पी>> 3) * (पी>> 3))>> 13))>>12; var2 = ((((लंबे इंट पर हस्ताक्षर किए गए) (पी>> 2)) * ((लंबे इंट पर हस्ताक्षर किए गए) dig_P8))>>13; पी = (अहस्ताक्षरित लंबी इंट) ((हस्ताक्षरित लंबी इंट) पी + ((var1 + var2 + dig_P7) >> 4)); वापसी पी; } अहस्ताक्षरित लंबी इंट कैलिब्रेशन_एच (हस्ताक्षरित लंबी इंट adc_H) { लंबे इंट v_x1 पर हस्ताक्षर किए; v_x1 = (t_fine - ((हस्ताक्षरित लंबी इंट) 76800)); v_x1 = (((((adc_H << 14) -((((((लंबे इंट पर हस्ताक्षर किए गए) dig_H4) 15) * ((((((v_x1 * ((लंबे इंट पर हस्ताक्षर किए) dig_H6)) >> 10) * (((v_x1 * (((लांग इंट पर हस्ताक्षर किए गए) dig_H3)) >> 11) + (((लांग इंट पर हस्ताक्षर किए गए) ३२७६८)) >> १०) + ((लांग इंट पर हस्ताक्षर किए) २०९७१५२)) * ((लांग इंट पर हस्ताक्षर किए गए) dig_H2) + 8192) >> 14)); v_x1 = (v_x1 - (((((v_x1 >> 15) * (v_x1 >> 15)) >> 7) * ((लांग इंट पर हस्ताक्षर किए गए) dig_H1)) >> 4)); v_x1 = (v_x1 419430400? 419430400: v_x1); वापसी (अहस्ताक्षरित लंबी इंट) (v_x1 >> 12); }

चरण 5: मेककोड/जावास्क्रिप्ट स्क्रिप्ट्स

मेककोड/जावास्क्रिप्ट स्क्रिप्ट
मेककोड/जावास्क्रिप्ट स्क्रिप्ट

Pimoroni ने हाल ही में Enviro:bit जारी किया है, जो BMP280 प्रेशर सेंसर, एक लाइट/कलर सेंसर और एक MEMS माइक्रोफोन के साथ आता है।वे एक माइक्रोपायथन और मेककोड/जावास्क्रिप्ट लाइब्रेरी भी प्रदान करते हैं।

मैंने बाद में प्रेशर सेंसर के लिए मेककोड स्क्रिप्ट लिखने के लिए इस्तेमाल किया। संबंधित हेक्स फ़ाइल को सीधे आपके माइक्रो: बिट में कॉपी किया जा सकता है। कोड नीचे प्रदर्शित किया गया है और ऑनलाइन मेककोड संपादक का उपयोग करके संशोधित किया जा सकता है।

यह माइक्रो: बिट डाइव-ओ-मीटर के लिए स्क्रिप्ट का एक रूपांतर है। डिफ़ॉल्ट रूप से यह दबाव अंतर को बार ग्राफ के रूप में प्रदर्शित करता है। बटन A दबाने से संदर्भ दबाव सेट होता है, बटन B दबाने पर hPa में वास्तविक और संदर्भ दबाव के बीच का अंतर प्रदर्शित होता है।

मूल बारकोड संस्करण के अलावा आपको एक "X", क्रॉसहेयर संस्करण और एक "L" संस्करण भी मिलता है, जिसका उद्देश्य पढ़ना आसान बनाना है।

मान लीजिए कॉलम = 0

लेट स्टे = 0 लेट रो = 0 लेट मीटर = 0 लेट डेल्टा = 0 लेट रेफ = 0 लेट आईएस = 0 आईएस = 1012 बेसिक। शोलेड्स (` # # # # # #। । # # # # # # `) रेफरी = ११८० बेसिक। क्लियरस्क्रीन () बेसिक। फॉरएवर (() => {बेसिक.क्लियरस्क्रीन () अगर (इनपुट। बटनIsPressed (बटन। ए)) { रेफरी = envirobit.getPressure () basic.showLeds(`#.#.#.#.#.####.#.#.#.#.#`) basic.pause(1000) } और अगर (input.buttonIsPressed(Button. B)) {basic.showString("" + Delta + "hPa") basic.pause(200) basic.clearScreen() } else { Is = envirobit.getPressure() Delta = Is - Ref Meter = Math.abs(Delta) अगर (मीटर>= 400) {पंक्ति = 4} और अगर (मीटर>= 300) {पंक्ति = 3} और अगर (मीटर>= 200) {पंक्ति = 2} और अगर (मीटर>= 100) {पंक्ति = 1} अन्य {पंक्ति = 0} बने रहना = मीटर - पंक्ति * १०० यदि (रहना> = ८०) {स्तंभ = ४} और यदि (रहना> = ६०) {स्तंभ = ३} और यदि (रहना> = ४०) {स्तंभ = २ } और अगर (रहने> = 20) {कॉलम = 1} और {कॉलम = 0} के लिए (कोला = 0; कोला <= कॉलम; कोला ++) {led.प्लॉट (कोला, रो)} बेसिक.पॉज (500)}})

सिफारिश की: