विषयसूची:

डोरमैट के साथ ट्रैफिक रिपोर्ट चेक (एनएल): 6 कदम
डोरमैट के साथ ट्रैफिक रिपोर्ट चेक (एनएल): 6 कदम

वीडियो: डोरमैट के साथ ट्रैफिक रिपोर्ट चेक (एनएल): 6 कदम

वीडियो: डोरमैट के साथ ट्रैफिक रिपोर्ट चेक (एनएल): 6 कदम
वीडियो: Flutter & Firebase Bootcamp 🔥 | User Authentication via email & password 2024, जुलाई
Anonim
डोरमैट के साथ ट्रैफिक रिपोर्ट चेक (एनएल)
डोरमैट के साथ ट्रैफिक रिपोर्ट चेक (एनएल)

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

मैं एक NodeMCU 1.0 (ESP0-12E मॉड्यूल) पर काम करूंगा। इस परियोजना के लिए कोड अन्य उपकरणों (जैसे Arduino बोर्ड) पर भी काम कर सकता है। यह परियोजना यातायात रिपोर्ट, ANWB के लिए एक डच स्रोत पर आधारित है।

इस परियोजना के लिए हमें क्या चाहिए:

- नोडएमसीयू - जम्पर वायर - एलईडी लाइट या स्ट्रिप - एनालॉग सेंसर (एल्यूमिनियूम फॉयल, स्पंज) - वाई-फाई कनेक्शन - डोरमैट

हमें जो कदम उठाने होंगे:

1. NodeMCu को वाई-फाई से कनेक्ट करें 2. ANWB.nl से HTTPS के माध्यम से डेटा का अनुरोध करें 3. डेटा को प्रयोग करने योग्य जानकारी में बदलें 4. ट्रिगर स्थापित करें 5. डिज़ाइन फीडबैक

चरण 1: NodeMCU को वाई-फाई से कनेक्ट करें

यह चरण दिखाएगा कि एक सफल HTTPSRequest कैसे करें यह देखने के लिए कि डिवाइस इंटरनेट से जुड़ा है या नहीं।

सबसे पहले, Arduino IDE में ESP8266 लाइब्रेरी स्थापित करें। उदाहरणों से ESP8266> HTTPSRequest खोलें।

अपने कोड के शीर्ष पर अपने वाई-फाई क्रेडेंशियल भरें, जैसा कि नीचे दिखाया गया है:

कॉन्स्ट चार * एसएसआईडी = "आपका_एसएसआईडी";

कॉन्स्ट चार * पासवर्ड = "आपका_पास";

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

चरण 2: HTTPS से ANWB.nl. से डेटा का अनुरोध करें

इस दूसरे चरण में, आप डेटा स्रोत को डिफ़ॉल्ट से इस प्रोजेक्ट के लिए आवश्यक स्रोत में बदलते हैं: ANWB.nl।

अपने कोड के शीर्ष पर, char* होस्ट को www.anwb.nl (या किसी अन्य स्रोत से आप अपना डेटा प्राप्त करना चाहते हैं) में बदलें:

कास्ट चार* होस्ट = "www.anwb.nl";!! यदि आप किसी अन्य स्रोत का उपयोग करते हैं, तो चरण 3 मेरे कोड से भिन्न होगा। प्रयोग योग्य जानकारी प्राप्त करने के लिए चरण 3 को विशिष्ट कोडिंग की आवश्यकता है!

इसके बाद, फ़ंक्शन सेटअप में स्ट्रिंग url को "/feeds/gethf" में बदलें, जिस पथ से जानकारी ली गई है:

स्ट्रिंग url = "/फ़ीड्स/गेथफ़";!! यदि आप किसी अन्य स्रोत का उपयोग करते हैं तो अपने स्रोत के पथ का उपयोग करें!

जब आप कोड अपलोड करते हैं तो आपको www.anwb.nl/feeds/gethf से सभी डेटा के साथ प्रतिक्रिया मिलनी चाहिए। यह कोड लाइन नामक स्ट्रिंग में सहेजा जाता है।

चरण 3: डेटा को उपयोगी जानकारी में बदलें

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

एक्सट्रैक्टडाटा () {

}

सेटअप फ़ंक्शन से कोड के भाग को ExtractData() में कॉपी करें। सेटअप फ़ंक्शन के अंत तक निम्न पंक्ति से प्रारंभ करें:

अगर (! क्लाइंट। कनेक्ट (होस्ट, कोड अब आपके नए फ़ंक्शन में है, इसलिए कॉपी किए गए कोड को सेटअप फ़ंक्शन से हटा दें।

इसके बाद, लूप फ़ंक्शन में एक्स्ट्रेक्टडेटा फ़ंक्शन को कॉल करें और नोडएमसीयू को आराम करने का समय देने के लिए कुछ देरी जोड़ें:

शून्य लूप () {

एक्सट्रैक्टडाटा (); देरी (30000); // इसे बाद में हटा दिया जाएगा जब हमारे पास एक एनालॉग सेंसर होगा}

चूंकि आपको प्राप्त होने वाला डेटा एक स्ट्रिंग में संग्रहीत होता है और इस स्ट्रिंग के केवल कुछ हिस्सों की आवश्यकता होती है, इसलिए आपको कुछ लूप के लिए लिखना होगा।

सबसे पहले, 'सड़क' शब्द के सभी पदों की जाँच करें। 'सड़क' शब्द के बाद सड़क का नाम (A1, A2, आदि) आएगा।

लूप के लिए लिखना शुरू करने से पहले, आपको कुछ वेरिएबल घोषित करने होंगे जिनका आप उपयोग करने जा रहे हैं:

int noOfPos = 0;

बूलियन hasRunOnce = झूठा; इंट = 0 से; इंट रोडअरे [20];

अब कुछ लूप लिखने का समय आ गया है। मैंने ExtractData फ़ंक्शन के निचले भाग में लूप के लिए लिखा है। मैंने इसे अलग-अलग कार्यों में विभाजित करने की कोशिश की, लेकिन मैं इसे काम नहीं कर सका।

लूप नंबर 1 के लिए: स्ट्रिंग लाइन में रोड शब्द की स्थिति खोजें:

for(int i = 0; i <line.length(); i++){ int pos = line.indexOf("road\":", from); RoadArray[noOfPos] = pos; noOfPos += 1; from = pos + 1; अगर(hasRunOnce == true && pos == line.indexOf("road\":")){ i = line.length(); } hasRunOnce = सच; }

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

अब हम सरणी नामOfRoadArray को परिभाषित करते हैं, जो अगले लूप के लिए भरने जा रहा है:

स्ट्रिंग नामऑफरोडअरे [20];

लूप नंबर 2 के लिए: लूप नंबर 2 के इनपुट के साथ सड़कों के सभी नाम खोजें। 1

for(int k = 0; k <20; k++){ int pos = RoadArray[k]; int positionOfRoadName = pos + 7; int endOfPositionOfRoadName = pos + 10; nameOfRoadArray[k] = line.substring(positionOfRoadName, endOfPositionOfRoadName); }

सरणी nameOfRoudArray संकेतित सभी ट्रैफिक जाम से भरा होना चाहिए।

इसके बाद, आप यह जांचने जा रहे हैं कि क्या आपकी सड़क ट्रैफिक जाम के साथ सड़कों की श्रेणी में है। डेटा में सड़कों को प्राप्त करने के लिए nameOfRoadArray प्रिंट करें। Serial.println(nameOfRoadArray[k]) जोड़कर ऐसा करें; लूप के लिए दूसरे में जैसे:

for(int k = 0; k <20; k++){ int pos = RoadArray[k]; int positionOfRoadName = pos + 7; int endOfPositionOfRoadName = pos + 10; nameOfRoadArray[k] = line.substring(positionOfRoadName, endOfPositionOfRoadName); Serial.println (nameOfRoadArray [k]); }

यदि यह सही है तो आप सीरियल मॉनीटर में ट्रैफिक जाम के साथ सभी सड़कों को देखेंगे।

अंतिम फॉर लूप लिखने से पहले, आपको एक बूलियन को वैश्विक चर के रूप में घोषित करना होगा। बूलियन, जिसे ट्रैफिकजैम कहा जाता है, डिफ़ॉल्ट रूप से गलत है और यदि फ़ंक्शन एक्सट्रैक्टडेटा ट्रैफ़िक जाम के लिए सही वापस आएगा तो यह बदल जाएगा। निम्न कोड.ino फ़ाइल के शीर्ष पर जाता है:

बूलियन ट्रैफिकजैम = झूठा;

लूप नंबर 3 के लिए जाँच करें कि क्या सड़क, इस मामले में A1, ट्रैफिक जाम की सूची में है।

for(int l=0; l <20; l++){ if(nameOfRoadArray[l] == "A1\""){//A1 को अपने पक्ष की सड़क पर बदलें trafficJam = true; }

यदि आप सीरियल मॉनिटर में ट्रैफिक जाम प्रिंट करते हैं, तो आप जानते हैं कि ए 1 पर ट्रैफिक जाम है या नहीं।

इस कोड को ExtractData फ़ंक्शन के नीचे रखें:

Serial.println (ट्रैफिकजैम); // देखें कि क्या ट्रैफिक जाम है

इस जानकारी के साथ हम चरण 5 में सिस्टम के फीडबैक पर आगे काम करने जा रहे हैं।

चरण 4: ट्रिगर स्थापित करें

ट्रिगर स्थापित करें
ट्रिगर स्थापित करें
ट्रिगर स्थापित करें
ट्रिगर स्थापित करें
ट्रिगर स्थापित करें
ट्रिगर स्थापित करें

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

एनालॉग सेंसर का निर्माण

मैंने एल्यूमीनियम पन्नी के 2 टुकड़े, दो जम्पर तार और एक स्पंज का इस्तेमाल किया।

स्पंज में एक छेद ड्रिल करें, यह वह जगह है जहां एल्युमिनियम फॉयल संपर्क बनाएगी। स्पंज के दोनों किनारों पर एल्यूमीनियम पन्नी को गोंद करें। जम्पर तारों को एल्युमिनियम फॉयल से कनेक्ट करें। जम्पर तारों को नोडएमसीयू से कनेक्ट करें। एक तरफ ए0-पिन और दूसरी तरफ वी3-पिन। स्पंज को अपने डोरमैट के नीचे रखें और आपने अपने डोरमैट को सेंसर में बदल दिया है। बहुत बढ़िया!

यह देखने के लिए कि क्या कोई डोरमैट पर खड़ा है, सेंसर से मूल्य पढ़ने के लिए कोड:

इंट सेंसरवैल्यू = एनालॉगरेड (A0);

अगर (सेंसरवैल्यू == 1024) {extractData (); }

जब एल्युमिनियम फ़ॉइल संपर्क बना रहा हो (जब कोई चटाई पर खड़ा हो), तो सेंसर वैल्यू 1024 है। इसके परिणामस्वरूप फ़ंक्शन एक्सट्रैक्टडेटा () फायरिंग होता है। और ठीक यही हम चाहते हैं कि सिस्टम करे।

चरण 5: डिज़ाइन फीडबैक

मैंने उपयोगकर्ता को प्रतिक्रिया देने के लिए एक LEDstrip का उपयोग किया। ट्रैफिक जाम होने पर बत्ती का रंग लाल हो जाएगा। जब सड़क अच्छी होगी तो हरी-भरी हो जाएगी। मैंने अपने LEDstrip को नियंत्रित करने के लिए adafruit neopixel लाइब्रेरी का उपयोग किया।

यह सुनिश्चित करने के लिए कि LEDstrip परिभाषित है, इस कोड को अपनी फ़ाइल के शीर्ष पर लिखें:

#शामिल

#define PIXEL_PIN D5 #define PIXEL_COUNT 10 #define PIXEL_TYPE NEO_GRB + NEO_KHZ800 Adafruit_NeoPixel पिक्सल = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE);

सेटअप फ़ंक्शन में अगला कोड लिखें:

// नियोपिक्सल

पिक्सल। शुरू (); पिक्सल.शो ();

और लूप फ़ंक्शन में निम्न कोड:

अगर (ट्रैफिकजैम == सच) {

for(int i; i < PIXEL_COUNT; i++){ pixels.setPixelColor(i, 255, 0, 0); // लाल पिक्सल। शो (); देरी (200); } } और { के लिए (int i; i < PIXEL_COUNT; i++){ pixels.setPixelColor(i, 0, 255, 0); // हरा पिक्सल। शो (); देरी (200); }

उपरोक्त कोड में एक if/else फ़ंक्शन है। जब फ़ंक्शन एक्सट्रैक्टडेटा ट्रैफ़िक जाम की उपस्थिति लौटाता है तो एलईडीस्ट्रिप लाल हो जाएगा। यदि नहीं, तो एलईडी पट्टी हरी हो जाएगी।

चरण 6: कोड चलाएँ

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

सुरक्षित यात्रा करें और पढ़ने के लिए धन्यवाद। मुझे आशा है कि आपको कुछ प्रेरणा या जानकारी मिली होगी। अगर आपको कुछ प्रतिक्रिया मिली है, तो बेझिझक प्रतिक्रिया दें!

सिफारिश की: