अंदर आना
भाषण चिकित्सा पोर्टल
  • जहां हत्यारे रहते थे। क्या हत्यारे हैं? हत्यारा - यह कौन है? इतिहास में एक संक्षिप्त भ्रमण
  • देवदार रैपिड्स - आयोवा में स्थित है अगर आप जल गए हैं तो सनबर्न से कैसे निपटें
  • महिलाओं के कपड़ों में पुरुषों को दिखाया गया है कि द्वितीय विश्व युद्ध के दौरान सैनिकों ने कैसे मज़ा किया था। द्वितीय विश्व युद्ध के दौरान सैनिकों ने कैसे मज़ा किया था
  • उच्च आत्मसम्मान के पेशेवरों और विपक्ष
  • ऑर्गेनोसिलिकॉन जीवन रूप
  • आप दूरबीन के माध्यम से क्या देख सकते हैं?
  • वायुमंडलीय दबाव सेंसर BMP085 और Arduino। प्रेशर सेंसर Arduino bmp280, bmp180, bme280 arduino से bmp180 कनेक्ट करें

    वायुमंडलीय दबाव सेंसर BMP085 और Arduino। प्रेशर सेंसर Arduino bmp280, bmp180, bme280 arduino से bmp180 कनेक्ट करें

    शुभ दिन सभी, अच्छी तरह से ... बस शुरू करो !!! यह लेख बैरोमीटर के प्रेशर सेंसर को जोड़ने के बारे में है BMP180 एक बोर्ड कंप्यूटर के लिए अरुडिनो उनो , लेकिन इतना आसान नहीं है क्योंकि हम पहली नज़र में चाहेंगे। हम ड्राइवर पर आधारित 7-सेगमेंट डिस्प्ले पर मापा और परिवर्तित तापमान मान प्रदर्शित करेंगे MAX7219 ... और उन्हें माप की दो परिवर्तित इकाइयों से रेंगने वाली रेखा के रूप में प्रदर्शित किया जाएगा - ये डिग्री सेल्सियस और डिग्री फ़ारेनहाइट हैं।

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

    • आपूर्ति वोल्टेज 3.3 वोल्ट
    • 1 हर्ट्ज के नमूने की दर से वर्तमान खपत 5 एमकेए
    • कनेक्शन इंटरफ़ेस - I2C
    • मापा दबाव में फैलाव + -0.12 hPa (ऊंचाई में -1 मीटर)
    • तापमान माप -40 * C से + 85 * C तक होता है
    • दबाव मापने की सीमा: 300 से 1100 hPa तक

    सेंसर को बोर्ड से जोड़ने का समय आ गया है अरुडिनो उनो , लेकिन जब से हमारे मापा और परिवर्तित मूल्यों को 7-खंड के डिस्प्ले पर प्रदर्शित किया जाएगा, निम्नलिखित चित्र में हम सभी उपकरणों का पूरा कनेक्शन, साथ ही सेंसर का पिनआउट दिखाएंगे BMP180 :

    सामान्य तौर पर, कनेक्शन आरेख में कुछ भी जटिल नहीं है, सब कुछ दिखाई और समझ में आता है, अगला कदम एक स्केच लिखने के लिए आगे बढ़ना है। कुछ महत्वपूर्ण बिंदु मापा और परिवर्तित मूल्यों के दृश्य के कार्यान्वयन में:

    • केवल परिवर्तित तापमान मान प्रदर्शित करें (नीचे देखें क्यों)
    • तापमान मानों को डिग्री के दसवें भाग में लागू किया जाना चाहिए (जैसा कि पूर्वावलोकन चित्र में देखा गया है)
    • रेंगना प्रतिपादन लागू करें
    • पावर-अप और आरंभीकरण के दौरान सेंसर की स्थिति के बारे में नैदानिक \u200b\u200bसंदेशों की उपस्थिति अनिवार्य है
    • हम सेंसर के साथ काम करने के लिए पुस्तकालय का उपयोग करते हैं

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

    नतीजतन, निम्नलिखित स्केच बनाया गया था, डेवलपर की टिप्पणियों के साथ:

    #include "SFE_BMP180.h" #include "Wire.h" #include "LedControl.h" // संदेश को स्क्रॉल करने के लिए फ़ंक्शन का प्रोटोटाइप msgScrolling () void msgSrolling (बाइट संदेश, int msgSize, int dScroll); // तापमान डेटा के प्रसंस्करण के लिए फ़ंक्शन का प्रोटोटाइप // और एक संदेश शून्य TmsgPreparation (डबल मान, बूल डिग्री) तैयार करना; // DisplayCControl LC \u003d LedControl (12, 11, 10, 8) के साथ काम करने के लिए LedControl वर्ग का एक LC ऑब्जेक्ट बनाएँ; // SFE_BMP180 BMP180Sensor के साथ काम करने के लिए SFE_BMP180 वर्ग का BMP180Sensor ऑब्जेक्ट बनाएँ; // स्क्रॉलिंग वर्णों के लिए समय विलंब जब कॉन्स्टेंस इंट देरी विलंब \u003d 300; // संदेश "सेंसर आरंभीकरण सफल" बाइट msgInitSuccess \u003d (91, 79, 21, 91, 29, 5, 16, 21, 16, 15, 0, 91, 28, 13, 79, 91, 91); // संदेश "सेंसर आरंभीकरण विफल" बाइट msgInitFail \u003d (91, 79, 21, 91, 29, 5, 16, 21, 16, 15, 0, 71, 119, 48, 14); // एक डॉट बाइट के बिना संख्यात्मक वर्णों की सरणी \u003d (126, 48, 109, 121, 51, 91, 95, 112, 123); // एक डॉट बाइट के साथ संख्यात्मक वर्णों की सरणी pDigit \u003d (254, 176, 237, 249, 179, 219, 223, 240, 255, 251); // प्रतीक बाइट deg \u003d 99; // "डिग्री" बाइट सी \u003d 78 के लिए प्रतीक; // प्रतीक "सी" - सेल्सियस बाइट एफ \u003d 71; // प्रतीक "एफ" - फारेनहाइट बाइट S \u003d 1; // "-" प्रतीक एक शून्य चिह्न है (यदि मापा मूल्य शून्य से नीचे है) शून्य सेटअप () (// डिवाइस (7-खंड प्रदर्शन) नींद मोड LC.shutdown (0, गलत) से बाहर ले जाया जाता है; // डिस्प्ले ब्राइटनेस को 8 पर सेट करें। 0 से 15 एलसी से कुल संभव ब्राइटनेस मोड। सेटिस्फेन्सिटी (0, 8); // स्पष्ट डिस्प्ले एलसी।क्लेयरडिसप्ले (0); // I2C बस पर सेंसर का इनिशियलाइज़ेशन यदि BMP180Sensor.begin ()) (// स्क्रॉल करने के लिए संदेश - सेंसर इनिशियलाइज़ेशन सफल रहा , sizeof (msgInitFail), delayScrolling;))) शून्य लूप () (चार दर्जे; डबल T, tC सेल्सियस, tFahrenheit; // तापमान माप // कार्य प्रारंभ करें () मिलिसेकंड की संख्या // की शुरुआत से देता है) माप प्रक्रिया, यदि माप प्रक्रिया सही थी, // इस मान को स्थिति चर में सहेजें // यदि फ़ंक्शन 0 देता है तो माप प्रक्रिया है गलत स्थिति \u003d BMP180Sensor.startTemper (); अगर (स्थिति! \u003d 0) (// मिलिसेकंड विलंब (स्थिति) की एक ही संख्या के लिए प्रतीक्षा करें; // डिग्री सेल्सियस में मापा और संसाधित तापमान मान // प्राप्त करें, और इसे टी चर // गेटटेंस () फ़ंक्शन में संग्रहीत करें 1 रिटर्न अगर यह कॉलिंग // सफलतापूर्वक पारित हो गया, और 0 अगर फ़ंक्शन प्रारंभ नहीं कर सका / तो मापा मूल्य स्थिति \u003d BMP180Sensor.getTemper (T) के साथ टी चर नहीं; अगर (स्थिति) \u003d 0) (// वेरिएबल्स के लिए एक मान असाइन करना // और फ़ारेनहाइट स्केल के लिए स्नातक स्तर की पढ़ाई के लिए तापमान \u003d टी; tFahrenheit \u003d (9.0 / 5.0) * टी + 32.0;)) // मूल्य को संसाधित करना और // संदेश तैयार करना। - तापमान TmsgPreparation (tC सेल्सियस, गलत); TmsgPreparation (tFahrenheit, true); ) // यहां तैयार संदेशों को स्क्रॉल करने का वास्तविक कार्य है // दाएं से बाएं / * पैरामीटर: * बाइट संदेश - चरित्र डेटा की एक सरणी के लिए सूचक * int msgSize - चरित्र डेटा के सरणी का आकार * int dScroll - विलंब स्क्रॉल करना (संदेश को बाईं ओर शिफ्ट करना) * मिलीसेकंड में * / void msgScrolling (बाइट संदेश, int msgSize, int dScroll) (के लिए (int i \u003d 0 ;?)< 8 + msgSize; i ++) { for(int n = i, j = 0; n >\u003d 0, जे< msgSize; n --, j ++) { LC.setRow(0, n, msg[j]); LC.setRow(0, n - 1, B00000000); } delay(dScroll); } } /* * Здесь функция подготовки сообщения, прежде чем оно будет выведено * для прокрутки на дисплее. Параметры: * double value - значение температуры двойной степени точности * bool degree - флаг для определения шкалы градуирования * если false - значит градусы Цельсия * если true - значит градусы Фаренгейта */ void TmsgPreparation(double value, bool degree) { //Приводим к абсолютному значению и сохраняем в переменной T //Это унифицирует значение и сократит код функции вдвое double T = abs(value); //Здесь значение фильтруется, если есть отклонение на пол градуса //от нуля то всё равно формировать сообщение что температура равна 0 //Итак, если замеренная температура меньше 0.5 то ставим 0 if(T < 0.5) { //Резервируем символьный массив на три символа byte preMsg; //Первый символ - это естественно 0 preMsg = Digit; //Второй символ - это сгенерированный символ "градус" preMsg = deg; //Проверка флага градуировки if(degree) { //Если true - то это градусы Фаренгейта //и третий символ в массиве будет содержать //сгенерированный символ F(код 71) preMsg = F; } else { //Иначе, если true - то это градусы Цельсия //и третий символ в массиве будет содержать //сгенерированный символ С(код 78) preMsg = C; } //Отправляем указатель на проинициализированный символьный массив preMsg //в качестве первого параметра функции для прокрутки сообщений //второй параметр - это размер символьного массива preMsg //третий параметр - задержка сдвига(прокрутки влево) в миллисекундах msgScrolling(preMsg, sizeof(preMsg), delayScrolling); //После прокрутки сообщения покинуть тело функции return; } //Если больше 0.5 но меньше 1 if(T < 1) { byte preMsg; preMsg = pDigit; preMsg = Digit; preMsg = deg; if(degree) { preMsg = F; } else { preMsg = C; } //Здесь нужно знать показания температуры //Отрицательные или положительные, //если отрицательные - добавить отрисовку знака минус if(value < 0) { byte rdyMsg; //В первый байт массива символов сообщения //записываем знак rdyMsg = S; //Далее - слияние массивов в готовое сообщение for(int i = 1; i < sizeof(rdyMsg); i ++) { // rdyMsg[i] = preMsg; } msgScrolling(rdyMsg, sizeof(rdyMsg), delayScrolling); return; } else { msgScrolling(preMsg, sizeof(preMsg), delayScrolling); return; } } //Если больше 1 но меньше 10 if(T < 10) { byte preMsg; preMsg = pDigit; preMsg = Digit; preMsg = deg; if(degree) { preMsg = F; } else { preMsg = C; } if(value < 0) { byte rdyMsg; //В первый байт массива символов сообщения //записываем знак rdyMsg = S; //Далее - слияние массивов в готовое сообщение for(int i = 1; i < sizeof(rdyMsg); i ++) { // rdyMsg[i] = preMsg; } msgScrolling(rdyMsg, sizeof(rdyMsg), delayScrolling); return; } else { msgScrolling(preMsg, sizeof(preMsg), delayScrolling); return; } } //Если больше 10 но меньше 100 if(T < 100) { byte preMsg; preMsg = Digit; preMsg = pDigit; preMsg = Digit; preMsg = deg; if(degree) { preMsg = F; } else { preMsg = C; } if(value < 0) { byte rdyMsg; //В первый байт массива символов сообщения //записываем знак rdyMsg = S; //Далее - слияние массивов в готовое сообщение for(int i = 1; i < sizeof(rdyMsg); i ++) { // rdyMsg[i] = preMsg; } msgScrolling(rdyMsg, sizeof(rdyMsg), delayScrolling); return; } else { msgScrolling(preMsg, sizeof(preMsg), delayScrolling); return; } } //Если больше 100 но меньше 1000 if(T < 1000) { byte preMsg; preMsg = Digit; preMsg = Digit; preMsg = pDigit; preMsg = Digit; preMsg = deg; if(degree) { preMsg = F; } else { preMsg = C; } if(value < 0) { byte rdyMsg; //В первый байт массива символов сообщения //записываем знак rdyMsg = S; //Далее - слияние массивов в готовое сообщение for(int i = 1; i < sizeof(rdyMsg); i ++) { // rdyMsg[i] = preMsg; } msgScrolling(rdyMsg, sizeof(rdyMsg), delayScrolling); return; } else { msgScrolling(preMsg, sizeof(preMsg), delayScrolling); return; } } }

    मैं यह भी कहना चाहूंगा कि लेडकंट्रोल स्टैंडर्ड लाइब्रेरी में कोई स्क्रॉलिंग फंक्शन नहीं मिला, हो सकता है कि हम वही होंगे जो इस लाइब्रेरी को जोड़ते हैं? खैर, यह सब हमारे आगंतुकों की इच्छाओं पर निर्भर करता है, टिप्पणी करें, प्रयास करें, प्रश्न पूछें ... हम आपकी प्रतिक्रिया की प्रतीक्षा कर रहे हैं। स्केच का एक वीडियो भी इस लेख से जुड़ा है, स्केच के परिणाम देखें:


    टिप्पणियों के लिए कार्य करने के लिए कृपया जावास्क्रिप्ट सक्षम करें।

    टिप्पणियों के साथ Arduino कार्यक्रम:

    / * SFE_BMP180 पुस्तकालय उदाहरण स्केच

    यह स्केच दिखाता है कि SFE_BMP180 लाइब्रेरी का उपयोग कैसे करें
    बॉश BMP180 बैरोमीटर का प्रेशर सेंसर।
    https://www.sparkfun.com/products/11824
    अधिकांश दबाव सेंसर की तरह, BMP180 पूर्ण दबाव को मापता है।
    यह डिवाइस द्वारा देखा जाने वाला वास्तविक परिवेश दबाव है, जो होगा
    ऊंचाई और मौसम दोनों के साथ बदलती हैं।
    प्रेशर रीडिंग लेने से पहले आपको एक टेंपरेचर रीडिंग लेनी चाहिए।
    यह स्टार्टटेंस () और गेटटैन्स () के साथ किया जाता है।
    परिणाम डिग्री सी में है।
    एक बार जब आपका तापमान रीडिंग हो जाता है, तो आप एक दबाव रीडिंग ले सकते हैं।
    यह startPressure () और getPressure () के साथ किया जाता है।
    इसका परिणाम मिलीबार (mb) उर्फ \u200b\u200bहेक्टोपास्कल (hPa) में होता है।
    यदि आप मौसम के पैटर्न की निगरानी करेंगे, तो आप शायद करना चाहेंगे
    ऊंचाई के प्रभाव को हटा दें। यह रीडिंग पैदा करेगा जो कर सकता है
    अन्य स्थानों से प्रकाशित दबाव रीडिंग की तुलना करें।
    ऐसा करने के लिए, सीवेल () फ़ंक्शन का उपयोग करें। आपको प्रदान करने की आवश्यकता होगी
    ज्ञात ऊंचाई जिस पर दबाव मापा गया था।
    यदि आप ऊंचाई को मापना चाहते हैं, तो आपको दबाव को जानना होगा
    एक आधारभूत ऊंचाई पर। यह औसत समुद्री जल दबाव हो सकता है, या
    आपके दबाव में पिछले दबाव, जिस स्थिति में
    बाद की ऊंचाई रीडिंग प्रारंभिक आधार रेखा + या - होगी।
    यह पूरा हो गया साथ ऊँचाई () फ़ंक्शन।

    हार्डवेयर कनेक्शन:
    - (GND) जीएनडी को
    + (विन) से 5 वी
    आपको I2C पिन (SCL और SDA) को भी अपने से जोड़ना होगा
    Arduino। पिन अलग-अलग Arduinos पर अलग हैं:
    कोई भी Arduino पिन लेबल: SDA SCL
    ऊनो, रेडबोर्ड, प्रो: ए 4 ए 5
    Mega2560, देय: 20 21
    लियोनार्डो: 2 3

    SFE_BMP180 लाइब्रेरी द्वारा विकसित फ्लोटिंग-पॉइंट समीकरणों का उपयोग करता है
    मौसम स्टेशन डेटा लकड़हारा परियोजना: http://wmrx00.sourceforge.net/

    वी 10 माइक ग्रूसिन, स्पार्कफुन इलेक्ट्रॉनिक्स 10/24/2013
    V1.1.2 Arduino के लिए अपडेट 1.6.4 5/2015
    */

    // आपका स्केच इस लाइब्रेरी और वायर लाइब्रेरी को #include करना चाहिए।
    // (वायर एक मानक पुस्तकालय है जो Arduino के साथ शामिल है।):

    #शामिल
    #शामिल
    #शामिल

    const int rs \u003d 12, en \u003d 11, d4 \u003d 5, d5 \u003d 4, d6 \u003d 3, d7 \u003d 2;
    लिक्विड क्रिस्टल एलसीडी (आरएस, एन, डी 4, डी 5, डी 6, डी 7);

    // आपको एक SFE_BMP180 ऑब्जेक्ट बनाना होगा, जिसे "दबाव" कहा जाता है:
    SFE_BMP180 दबाव;

    व्यर्थ व्यवस्था ()
    {
    lcd.begin (16, 2);
    // सेंसर को इनिशियलाइज़ करें (डिवाइस पर संग्रहीत कैलिब्रेशन वैल्यू प्राप्त करना महत्वपूर्ण है)।
    दबाव .begin ();
    }

    शून्य लूप ()
    {
    चार अवस्था;
    डबल टी, पी, पी 0 \u003d 1013.0, ए; // 1013.0 - समुद्र के स्तर पर एचपीए में दबाव

    // प्रेशर रीडिंग करने के लिए आपको पहले तापमान मापना होगा।
    // तापमान माप शुरू करें:

    स्थिति \u003d दबाव.स्टार्टटेन्स ();
    अगर (स्थिति! \u003d 0)
    {
    देरी (स्थिति);

    // पूर्ण तापमान माप प्राप्त करें:
    // ध्यान दें कि माप को चर T में संग्रहित किया जाता है।

    स्थिति \u003d दबाव.जगह (टी);
    अगर (स्थिति! \u003d 0)
    {
    lcd.setCursor (0, 0);
    lcd.print ("Temp \u003d");
    lcd.print (टी, 2);
    lcd.print ("C");
    // एक दबाव माप शुरू करें:
    // पैरामीटर ओवरसमलिंग सेटिंग है, 0 से 3 तक (उच्चतम Res, सबसे लंबे समय तक प्रतीक्षा)।
    // यदि अनुरोध सफल होता है, तो प्रतीक्षा करने के लिए एमएस की संख्या वापस आ जाती है।
    // यदि अनुरोध असफल है, तो 0 लौटा दिया जाता है।

    स्थिति \u003d दबाव.स्टार्टप्रेस (3);
    अगर (स्थिति! \u003d 0)
    {
    // माप को पूरा करने के लिए प्रतीक्षा करें:
    देरी (स्थिति);

    // पूरा दबाव माप लिया:
    // ध्यान दें कि माप चर P में संग्रहीत है।
    // यह भी ध्यान दें कि फ़ंक्शन को पिछले तापमान माप (टी) की आवश्यकता है।
    // (यदि तापमान स्थिर है, तो आप कई दबाव माप के लिए एक तापमान माप कर सकते हैं।)
    // फंक्शन रिटर्न 1 सफल होने पर, 0 अगर फेल होता है।

    स्टेटस \u003d प्रेशर.गेटप्रेस (पी, टी);
    अगर (स्थिति! \u003d 0)
    {
    // माप को प्रिंट करें:
    lcd.setCursor (0, 1);
    lcd.print ("P \u003d");
    lcd.print (P / 1.333,0); // कोएफ़ 1.333 - hPa का मिमी Hg में रूपांतरण

    // यदि आप दबाव पढ़ने से अपनी ऊंचाई निर्धारित करना चाहते हैं,
    // बेसलाइन प्रेशर (समुद्र-स्तर या अन्य) के साथ ऊंचाई समारोह का उपयोग करें।
    // पैरामीटर: P \u003d mb में पूर्ण दबाव, m0 में p0 \u003d 1013 आधारभूत दबाव।
    // परिणाम: मी में ऊंचाई \u003d।

    a \u003d pressure.altitude (P, p0);
    lcd.print ("H \u003d");
    lcd.print (a, 2);
    lcd.print ("m");
    }
    और lcd.print ("त्रुटि");
    }
    और lcd.print ("त्रुटि");
    }
    और lcd.print ("त्रुटि");
    }
    और lcd.print ("त्रुटि");
    देरी (5000); // 5 सेकंड के लिए रुकें।

    #शामिल #शामिल // SFE_BMP180 तक पहुंचने के लिए एक चर घोषित करें: SFE_BMP180 दबाव; #define ALTITUDE 1655.0 // मीटर की ऊँचाई पर समुद्र तल से ऊँचाई मीटर में शून्य सेटअप () (Serial.begin (9600); Serial.println ("REBOOT"); // आरंभीकरण अगर (दबाव .begin ()) Serial। Println ("BMP180 init ok"); बाकी (// अगर कुछ यहां एक साथ नहीं बढ़ा है। एक नियम के रूप में, कनेक्शन के साथ जाम हो जाता है Serial.println ("BMP180 init विफल \\ n \\ n"); जबकि; (1); // हैंग)) शून्य लूप () (चार दर्जे का; दोहरा T, P, p0, a; // अगर आप समुद्र के स्तर को ठीक करना चाहते हैं तो हवा का दबाव, जो आमतौर पर मौसम के पूर्वानुमान में उपयोग किया जाता है। // आपको समुद्र के स्तर को जानना होगा अपने क्षेत्र में जहाँ माप // यह कोड सीरियल की शुरुआत में ALTITUDE स्थिरांक में निर्दिष्ट होना चाहिए। Serial.printn (), Serial.print ("Sea level:"); Serial.print (ALTITUDE, 0); Serial.print ("मीटर,"); सीरियल .प्रिंट (ALTITUDE * 3.28084,0); Serial.println ("फीट"); // यदि आप इसके विपरीत समुद्र स्तर से ऊपर की ऊंचाई जानना चाहते हैं, लेकिन आप दबाव को जानते हैं। आपको वर्तमान वायुमंडलीय दबाव को निर्दिष्ट करने की आवश्यकता है। यह कैसे करना है यह कोड के अंत में लिखा गया है ... // चूंकि दबाव किसी तरह तापमान पर निर्भर करता है, इसलिए आपको पहले तापमान का पता लगाना होगा। BMP180 में बिल्ट-इन थर्मामीटर है। तापमान को मापने में कुछ समय लगता है। // यदि सब कुछ सुचारू है, तो प्रेशर.स्टार्टटेन्सेस की स्थिति में मिलिसेकंड की संख्या वापस आ जाएगी // आपको तापमान को मापने के लिए प्रतीक्षा करने की आवश्यकता है // अगर तारों के साथ एक जंब है, तो यह 0 स्थिति \u003d दबाव \u003d स्टार्सटेन्स () लौटेगा if (स्थिति! \u003d 0) (// प्रतीक्षा: विलंब (स्थिति); // तापमान प्राप्त करें, इसे T चर में डालें: // फ़ंक्शन 1 वापस आ जाएगा यदि सबकुछ ठीक है, 0 तो ठीक स्थिति नहीं \u003d दबाव। getTemper (T); यदि (स्थिति! \u003d 0) (// तापमान लिखें: Serial.print ("तापमान:"); Serial.print (T, 2); Serial.print ("डिग्री C,"); /; / सेल्सियस सेल्सियस में सीरियल सीरियल ((9.0 / 5.0) * टी + 32.0,2); सीरियलियलप्रिंट ("डिग्री एफ"); // फ़ारेनहाइट में // एटम निर्धारित करें दबाव: // पैरामीटर रिज़ॉल्यूशन इंगित करता है। 0 से 3 तक (उच्च रिज़ॉल्यूशन, उच्च सटीकता, लंबा इंतजार)। // अगर सब कुछ सुचारू है, तो दबाव ।startPressure स्थिति में वापस मिल जाएगा। मिलीसेकंड की संख्या // जिसे आपको एटीएम को मापने के लिए इंतजार करना होगा। .pressure // अगर कुछ समस्या है, तो यह 0 स्थिति \u003d दबाव .startPressure (3) लौटाएगा, अगर (स्थिति! \u003d 0) (// माप के अंत की प्रतीक्षा करें: विलंब (स्थिति); // अब आप चर में दबाव प्राप्त कर सकते हैं। पी। // फ़ंक्शन 1 वापस आ जाएगा यदि सब कुछ ठीक है, तो 0 नहीं तो ठीक है। स्टैटस \u003d दबाव। गेटपर्योर (पी, टी); यदि (स्थिति! \u003d 0) (// सब कुछ प्रिंट करें: सेरी अल.प्रिंट ("पूर्ण दबाव:"); सीरियल.प्रिंट (पी, 2); सिरियल.प्रिंट ("मिलिबार,"); सीरियल.प्रिंट (पी * 0)। 0295333727.2); सिरियल.प्रिंट्लन ("पारा का इंच"); // सेंसर रिटर्न। दबाव जो सेंसर की ऊंचाई के साथ बदलता रहता है। // अगर हम इसे मौसम के पूर्वानुमान की तरह चाहते हैं, तो हमें संदिग्ध गणना करने की आवश्यकता है। पैरामीटर: P \u003d मिलीबार में सेंसर से दबाव, मीटर में ALTITUDE \u003d समुद्र तल से ऊंचाई। // परिणाम: p0 \u003d समुद्र तल से दाब p0 \u003d pressure.sealevel (P, ALTITUDE); सीरियल (प्रिंट स्तर पर "दबाव:"); सिरियल.प्रिंट (p0,2); सिरियल.प्रिंट ("मिलिबार,"); सीरियल.प्रिंट (p0 * 0.0295333727.2); सिरियल.प्रिंट्लन ("पारा का इंच"); // या यदि आप इसके विपरीत करना चाहते हैं और ज्ञात दबाव से ऊँचाई निर्धारित करना चाहते हैं, तो पैरामीटर: P \u003d मिलिबारों में सेंसर से दबाव, p0 \u003d समुद्र के स्तर के लिए सही किया गया दबाव। // परिणाम: मीटर में समुद्र तल से एक \u003d ऊँचाई। a \u003d pressure.altitude (P, p0); Serial.print ("समुद्र तल से ऊपर की गणना की ऊंचाई:"); सीरीयल प्रिंट (ए, 0); सिरियल.प्रिंट ("मीटर,"); सीरियल.प्रिंट (एक * 3.28084,0); सिरियल.प्रिंट ("पैर"); ) और Serial.println ("त्रुटि हो रही दबाव \\ n"); ) और Serial.println ("दबाव \\ n" प्राप्त करने के लिए शुरू होने वाली त्रुटि); ) और भी सीरियल। प्रिंट ("तापमान हो रही त्रुटि \\ n"); ) और Serial.println ("तापमान \\ n" प्राप्त करने के लिए शुरू होने वाली त्रुटि); देरी (5000); // 5 सेकंड के लिए रुकें। )

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

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

    हमें बैरोमीटर की आवश्यकता क्यों है? सबसे अधिक बार, इस उपकरण का उपयोग विमान पर उड़ान की ऊंचाई निर्धारित करने के लिए किया जाता है। उच्च वाहन समुद्र तल से ऊपर उठता है, कम दबाव जहाज पर बैरोमीटर का अनुभव करता है। इस रिश्ते को जानने के बाद, ऊंचाई निर्धारित करना आसान है।


    एक और आम उपयोग का मामला एक घर का मौसम स्टेशन है। इस मामले में, हम वायुमंडलीय दबाव पर आने वाले मौसम की ज्ञात निर्भरता का उपयोग कर सकते हैं। बैरोमीटर के अलावा, ऐसे स्टेशनों पर आर्द्रता और तापमान सेंसर स्थापित होते हैं।

    इलेक्ट्रॉनिक बैरोमीटर

    हम रोबोटिक्स में इस तरह के भारी बैरोमीटर का उपयोग नहीं कर सकते हैं। हमें एक लघु और ऊर्जा कुशल उपकरण की आवश्यकता है जो आसानी से एक ही Arduino Uno से जुड़ जाए। अधिकांश आधुनिक बैरोमीटर एमईएमएस प्रौद्योगिकी के साथ-साथ एक्सेलेरोमीटर के साथ गायरोटेकोमीटर भी बनाए जाते हैं। एमईएमएस बैरोमीटर एक पीज़ोरेसिस्टिव या स्ट्रेन गेज विधि पर आधारित होते हैं, जो विकृत करने वाली शक्तियों की कार्रवाई के तहत किसी सामग्री के प्रतिरोध को बदलने के प्रभाव का उपयोग करता है।

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


    BMP085 और BMP180 सेंसर

    सबसे सस्ती दबाव सेंसर, जो अक्सर उड़ान नियंत्रकों द्वारा उपयोग किए जाते हैं और सभी प्रकार के होममेड इलेक्ट्रॉनिक उपकरणों में बीओएसएच: बीएमपी 085 और बीएमपी 180 से सेंसर शामिल हैं। दूसरा बैरोमीटर नया है, लेकिन पुराने संस्करण के साथ पूरी तरह से संगत है।


    BMP180 की कुछ महत्वपूर्ण विशेषताएं:

    • मापा मूल्यों की सीमा: 300 hPa से 1100 hPa (समुद्र तल से + 9000 मीटर से -500 मी);
    • आपूर्ति वोल्टेज: 3.3 से 5 वोल्ट तक;
      वर्तमान ताकत: 1 हर्ट्ज के एक मतदान दर पर 5 μA;
    • शोर स्तर: मोटे मोड (अल्ट्रा लो पावर मोड) में 0.06 hPa (0.5m) और उन्नत रिज़ॉल्यूशन मोड में 0.02 hPa (0.17m)।

    अब इस सेंसर को नियंत्रक से जोड़ते हैं और वायुमंडलीय दबाव का अनुमान लगाने की कोशिश करते हैं।

    BMP180 कनेक्शन

    दोनों सेंसर में एक I2C इंटरफ़ेस है, इसलिए वे आसानी से Arduino परिवार के किसी भी प्लेटफ़ॉर्म से कनेक्ट हो सकते हैं। यह वही है जो Arduino Uno के लिए कनेक्शन तालिका जैसा दिखता है।

    बीएमपी 180GNDवीसीसीएसडीएएससीएल
    अरुडिनो उनोGND+ 5 वीए 4A5

    योजनाबद्ध आरेख

    लेआउट उपस्थिति


    कार्यक्रम

    सेंसर के साथ काम करने के लिए, हमें एक लाइब्रेरी चाहिए: BMP180_Breakout_Arduino_Library

    इसे रिपॉजिटरी से डाउनलोड करें और इसे Arduino IDE में इंस्टॉल करें। अब आप अपना पहला कार्यक्रम लिखने के लिए तैयार हैं। चलो सेंसर से कच्चा डेटा प्राप्त करने की कोशिश करते हैं और इसे COM पोर्ट मॉनिटर पर आउटपुट करते हैं।

    #शामिल #शामिल SFE_BMP180 दबाव; शून्य सेटअप () (Serial.begin (9600); दबाव ।begin ();) शून्य लूप () (डबल पी; पी \u003d getPressure) (); Serial.println (पी, 4); विलंब (100); डबल getPressure () (चार दर्जे का; दोहरा T, P, p0; a; स्थिति \u003d दबाव.स्टार्टटेन्स्) (), अगर (स्थिति! \u003d ०) (// तापमान माप में देरी के लिए प्रतीक्षा की जा रही है (स्थिति); स्थिति \u003d दबाव.संस्थान (T) , अगर (स्थिति! \u003d 0) (स्थिति \u003d दबाव.स्टार्टप्रेस (3); यदि स्थिति (! 0)) (/ दबाव माप देरी (स्थिति) के लिए प्रतीक्षा कर रहा है; स्थिति \u003d दबाव ।getPressure (पी, टी); यदि; स्थिति! \u003d 0) (वापसी (पी);)))))

    सेंसर से प्रतिष्ठित दबाव प्राप्त करने की प्रक्रिया इतनी तुच्छ नहीं है, और इसमें कई चरण शामिल हैं। सरलीकृत रूप में, एल्गोरिथ्म इस तरह दिखता है:

    1. हम बैरोमीटर से अंतर्निहित तापमान सेंसर की रीडिंग का अनुरोध करते हैं;
    2. समय का इंतजार करें जबकि सेंसर तापमान का मूल्यांकन करता है;
    3. हमें तापमान मिलता है;
    4. दबाव के लिए बैरोमीटर से पूछें;
    5. प्रतीक्षा समय बी जबकि सेंसर दबाव का मूल्यांकन करता है;
    6. दबाव मान प्राप्त करें;
    7. फ़ंक्शन से दबाव मान लौटाएं।

    समय बी माप सटीकता पर निर्भर करता है, जो फ़ंक्शन में सेट किया गया है शुरुआत... इस फ़ंक्शन का एकमात्र तर्क 0 से 3 तक मान ले सकता है, जहां 0 सबसे मोटे और सबसे तेज़ अनुमान है, और 3 सबसे अधिक दबाव का अनुमान है।

    हम Arduino Uno पर कार्यक्रम लोड करते हैं, और वायुमंडलीय दबाव के माप के प्रवाह का निरीक्षण करते हैं। आइए हमारे सिर के ऊपर सेंसर को ऊपर उठाने की कोशिश करें और इसे फर्श के स्तर तक कम करें। रीडिंग थोड़ी अलग होगी। यह केवल यह पता लगाने के लिए बनी हुई है कि हम इन अतुलनीय संख्याओं को समुद्र तल से ऊँचाई में कैसे बदल सकते हैं।

    दबाव को ऊँचाई में बदलें

    BMP180 सेंसर हेक्टोपास्कल (hPa) में दबाव लौटाता है। यह इन इकाइयों में है कि यह वायुमंडलीय दबाव को मापने के लिए प्रथागत है। 1 एचपीए \u003d 100 पास्कल। यह ज्ञात है कि समुद्र के स्तर पर औसत दबाव 1013 hPa है, और समुद्र के स्तर से ऊपर प्रत्येक अतिरिक्त मीटर केवल 0.11 hPa (लगभग) द्वारा इस दबाव को कम करेगा।

    इस प्रकार, यदि हम फ़ंक्शन के परिणाम से घटाते हैं मिलता है संख्या 1013, और शेष अंतर को 0.11 से विभाजित करें, फिर हमें मीटर में समुद्र के स्तर से ऊपर की ऊंचाई का मूल्य मिलता है। इस तरह से हमारा कार्यक्रम बदल जाएगा:

    शून्य लूप () (डबल पी, Alt; P \u003d getPressure) (); Alt \u003d (P - 1013) /0.11; Serial.println (Alt, 2); देरी (100);)

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

    यहाँ p इस बिंदु पर मापा गया दबाव है, p0 वह दबाव है जिसके सापेक्ष ऊँचाई मापी जाती है।

    SFE_BMP180 लाइब्रेरी में पहले से ही एक फ़ंक्शन है जो निर्दिष्ट एक का उपयोग करता है। सटीक ऊंचाई प्राप्त करने का सूत्र। हम इसे अपने कार्यक्रम में उपयोग करते हैं।

    #शामिल #शामिल SFE_BMP180 दबाव; डबल P0 \u003d 0; void सेटअप () (Serial.begin (9600); pressure.begin (); P0 \u003d pressure.getPressure ();) void लूप () (डबल P, Alt; P \u003d getPressure (); Alt \u003d दबाव) (P) , P0) Serial.println (Alt, 2); देरी (100);) दोहरा getPressure () (...)

    मैंने पाठ को पठनीय रखने के लिए गेटप्रेस फ़ंक्शन को पूरी तरह से कॉपी नहीं किया।

    एक और चर P0 कार्यक्रम में दिखाई दिया है - यह वह दबाव है जिसे हम कार्यक्रम की शुरुआत में मापेंगे। एक विमान के मामले में, P0 टेक-ऑफ साइट पर दबाव होगा जहां से हम चढ़ाई करना शुरू करेंगे।

    दृश्य

    अब चलो कार्यक्रम में दबाव रीडिंग प्रदर्शित करने का प्रयास करें SFMonitor, और देखते हैं कि सेंसर 2 मीटर की ऊँचाई तक जाने पर दबाव कैसे बदलता है।

    स्टेटिक कॉन्स्ट बाइट PACKET_SIZE \u003d 1; स्थिर कॉन्स्ट बाइट VALUE_SIZE \u003d 2; स्थिर कास्ट बूलियन SEPARATE_VALUES \u003d true; #शामिल #शामिल #शामिल SFE_BMP180 दबाव; SerialFlow rd (और सीरियल); डबल P0 \u003d 0; void setup () (rd.setPacketFormat (VALUE_SIZE, PACKET_SIZE, SEPARATE_VALUES); rd.begin (9600); pressure.begin (); P0 \u003d getPressure ();) void loop () (double P; p \u003d getPressure) ()। rd.setPacketValue (100 + int ((P - P0) * 100)); rd.sendPacket (), देरी (100);) डबल गेटप्रेस () (...)

    कार्यक्रम के परिणामस्वरूप, हमें पास्कल्स में एक दबाव ग्राफ मिलता है:


    निष्कर्ष

    जैसा कि हमने पाठ से सीखा, समुद्र तल से ऊँचाई का निर्धारण करना इतना तुच्छ कार्य नहीं है। न केवल दबाव बिना ऊंचाई के ऊंचाई पर निर्भर करता है, बल्कि विभिन्न बाहरी कारकों से भी तस्वीर खराब होती है। उदाहरण के लिए, हमारे घर में दबाव समय के साथ लगातार बदल रहा है। यहां तक \u200b\u200bकि कुछ ही मिनटों में, हमारे डिवाइस द्वारा मापी जाने वाली ऊंचाई 0.5 - 1 मीटर की सीमा में भिन्न हो सकती है। तापमान भी माप की गुणवत्ता को बहुत प्रभावित करता है, इसलिए हमें दबाव की गणना करते समय इसे ध्यान में रखना होगा।

    विमान के लिए, MS5611 जैसे उन्नत सटीक सेंसर का उपयोग करने की सिफारिश की जाती है। यह बैरोमीटर 0.012 hPa तक माप सकता है, जो BMP180 से 5 गुना बेहतर है। इसके अलावा, उड़ान के बैरोमीटर की ऊंचाई को स्पष्ट करने के लिए जीपीएस निर्देशांक का उपयोग किया जाता है।

    माहौल को देखने में शुभकामनाएँ! 🙂

    २ अप्रैल २०१५

    बॉश से BMP180 वायुमंडलीय दबाव सेंसर अधिक ऊर्जा कुशल और अपने पूर्ववर्ती की तुलना में अधिक सटीक है।

    BMP180 सेंसर

    BMP180 सेंसर की मुख्य विशेषताएं:

    • दबाव मापने की सीमा: 300 - 1100hPa
    • आपूर्ति वोल्टेज: 3.3 और 5 वी
    • कम बिजली की खपत: 3 μA (अल्ट्रा-लो पावर मोड)
    • सटीकता: कम पावर मोड, रिज़ॉल्यूशन 0.06hPa (0.5m)
    • 0.02hPa रिज़ॉल्यूशन के साथ उच्च रैखिक मोड
    • कनेक्शन: I2C संचार प्रोटोकॉल
    • रेंज में तापमान माप -40 ... +85 डिग्री सेल्सियस
    • प्रतिक्रिया समय: 5ms
    • स्टैंडबाय वर्तमान: 0.1 μA

    • वीसीसी - 5 वी बिजली आपूर्ति को जोड़ने के लिए
    • GND - माइनस (GND) से जुड़ने के लिए
    • SCL और SDA - I2C बस के कनेक्शन के लिए
    • 3.3 - 3.3 वी बिजली की आपूर्ति को जोड़ने के लिए

    BMP180 सेंसर खरीदें:

    BMP180 सेंसर के लिए पुस्तकालय:

    BMP180 सेंसर के साथ काम करने के लिए, पुस्तकालयों का उपयोग किया जाता है जो BMP085 सेंसर के लिए अभिप्रेत हैं।

    प्रवेश BMP085 वायुमंडलीय दबाव सेंसर लाइब्रेरी

    BMP085 प्रेशर सेंसर के साथ काम करने के लिए लाइब्रेरी

    सेंसर के साथ काम करने के लिए किस लाइब्रेरी का उपयोग करना है। मैंने लेख में पहले BMP085 पुस्तकालय की समीक्षा की

    उदाहरण के लिए, मैं Adafruit से पुस्तकालय का उपयोग करूंगा। सबसे पहले, लाइब्रेरी से एक परीक्षण स्केच चलाएं और पोर्ट मॉनिटर खोलें ...

    जैसा कि हम देख सकते हैं:

    • तापमान \u003d 27.40 * C - डिग्री सेल्सियस में तापमान
    • दबाव \u003d 97726 पा - पास्कल्स में वायुमंडलीय दबाव
    • ऊंचाई \u003d 303.19 मीटर - मीटर में ऊँचाई
    • सीवेल पर दबाव (गणना) \u003d 97735 Pa - पास्कल में वायुमंडलीय दबाव (समुद्र तल (गणना) के सापेक्ष)
    • वास्तविक ऊँचाई \u003d 317.47 मीटर - वास्तविक ऊँचाई (अनुमानित)

    BMP180 सेंसर की स्थापना और जांचना

    मैं इस तथ्य पर आपका ध्यान आकर्षित करना चाहूंगा कि गणना किए गए डेटा सटीक नहीं हैं, और वे स्केच में सेट हैं।

    जानकारी

    हम अधिक सटीक ऊंचाई माप प्राप्त कर सकते हैं। यदि हम अपने निर्देशांक के लिए समुद्र के स्तर से ऊपर मौजूदा दबाव को जानते हैं, तो यह मौसम की स्थिति और इस तरह के आधार पर बदल जाएगा। यदि यह 1015 मिलीबार है, तो मान 101 500 पा है।

    अब हम Google से नक्शे का उपयोग करके समुद्र तल से ऊपर अपनी वास्तविक ऊंचाई का पता लगाते हैं, इसके लिए हम लिंक का अनुसरण करते हैं। Google से नक्शे के साथ विंडो में, हम अपना निवास स्थान ढूंढते हैं और नक्शे पर एक निशान सेट करने के लिए बाईं माउस बटन के साथ क्लिक करते हैं।

    ऊंचाई के मूल्यों के साथ मेरे स्थान के निर्देशांक

    जैसा कि आप देख सकते हैं, समुद्र तल से ऊंचाई 203 मीटर है, लेकिन मैं 3 मंजिल पर हूं, जिसका मतलब है कि हम एक और 7 मीटर जोड़ते हैं और 210 मीटर (लगभग) की ऊंचाई प्राप्त करते हैं और इसे याद करते हैं। अब हम स्केच पर जाते हैं और पा में वायुमंडलीय दबाव डेटा के प्रदर्शन के साथ मूल्य मिमी एचजी (मूल्य 133.3 से विभाजित होता है) में बदल जाता है और हम "पा" के प्रदर्शन को "मिमी" में बदल देते हैं।

    कोड

    Arduino

    सीरियल.प्रिंट ("दबाव \u003d"); Serial.print (bmp.readPressure () / 133.3); सीरीयल.प्रिंट ("मिमी");

    धारावाहिक। प्रिंट ("दबाव \u003d");

    धारावाहिक। प्रिंट (bmp। readPressure () / 133.3);

    धारावाहिक। प्रिंट्लन ("मिमी");

    और अभी भी यहाँ है

    कोड

    Arduino

    धारावाहिक.प्रदर्शन ("सीवेल पर दबाव (गणना) \u003d"); Serial.print (bmp.readSealevelPressure () / 133.3); सीरीयल.प्रिंट ("मिमी");

    धारावाहिक। प्रिंट करें ( "सीवेल पर दबाव (गणना) \u003d") ;

    धारावाहिक। प्रिंट (bmp। readSealevelPressure () / 133.3);

    धारावाहिक। प्रिंट्लन ("मिमी");

    हमारे स्केच को फिर से बोर्ड पर अपलोड करें और देखें कि हमारे पास पोर्ट मॉनीटर में क्या है