विषयसूची:

एक और स्मार्ट मौसम स्टेशन, लेकिन: 6 कदम (चित्रों के साथ)
एक और स्मार्ट मौसम स्टेशन, लेकिन: 6 कदम (चित्रों के साथ)

वीडियो: एक और स्मार्ट मौसम स्टेशन, लेकिन: 6 कदम (चित्रों के साथ)

वीडियो: एक और स्मार्ट मौसम स्टेशन, लेकिन: 6 कदम (चित्रों के साथ)
वीडियो: जानिए मौसम का मिजाज 2024, जून
Anonim
Image
Image
एक और स्मार्ट वेदर स्टेशन, लेकिन…
एक और स्मार्ट वेदर स्टेशन, लेकिन…
एक और स्मार्ट वेदर स्टेशन, लेकिन…
एक और स्मार्ट वेदर स्टेशन, लेकिन…
एक और स्मार्ट वेदर स्टेशन, लेकिन…
एक और स्मार्ट वेदर स्टेशन, लेकिन…

ठीक है, मुझे पता है कि ऐसे कई मौसम स्टेशन हर जगह उपलब्ध हैं, लेकिन अंतर देखने के लिए कुछ मिनट का समय लें…

  • कम बिजली
  • 2 ई-पेपर डिस्प्ले…
  • लेकिन 10 अलग स्क्रीन!
  • ESP32 आधारित
  • एक्सेलेरोमीटर और तापमान / आर्द्रता सेंसर
  • वाईफाई अपडेट
  • 3डी प्रिंटेड केस

और कई अन्य उपयोगी तरकीबें…

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

आपूर्ति

जैसा कि आप देख सकते हैं, सिस्टम में 2 ई-पेपर स्क्रीन और एक 3डी प्रिंटेड बॉक्स होता है। लेकिन इसमें बहुत कुछ है:

  • एक ESP32
  • एक MPU6050 एक्सेलेरोमीटर
  • एक DHT22 सेंसर
  • एक लीपो बैटरी
  • पूरी चीज को जोड़ने के लिए एक पीसीबी
  • घर का बना ड्यूपॉन्ट धागे

और एक वाई-फाई कनेक्शन। वास्तव में 3 नेटवर्क घोषित किए जाते हैं, सिस्टम उन्हें एक-एक करके तब तक परीक्षण करता है जब तक कि वह कनेक्ट करने में सफल न हो जाए।

चरण 1: एक और मौसम स्टेशन क्यों?

एक और मौसम स्टेशन क्यों?
एक और मौसम स्टेशन क्यों?
एक और मौसम स्टेशन क्यों?
एक और मौसम स्टेशन क्यों?
एक और मौसम स्टेशन क्यों?
एक और मौसम स्टेशन क्यों?
एक और मौसम स्टेशन क्यों?
एक और मौसम स्टेशन क्यों?

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

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

ऊर्जा बचाने के लिए, मैंने ई-पेपर स्क्रीन (नीचे संदर्भ देखें) को चुना, जो डिस्प्ले को बनाए रखती हैं, भले ही वे अब संचालित न हों। इसी तरह ESP32 के लिए, मैंने Lolin32 मॉड्यूल (इसकी मितव्ययिता के लिए प्रसिद्ध) को चुना और मुझे यह सीखना था कि गहरी नींद का प्रबंधन कैसे किया जाए, और एक्सेलेरोमीटर द्वारा उत्पन्न रुकावट पर जाग्रत किया जाए।

स्क्रीन SPI के माध्यम से जुड़ी हुई हैं, मैंने उन्हें ESP32 से जोड़ने के लिए सही पिन खोजने से पहले काफी खोज की, यह जानते हुए कि मुझे एक्सेलेरोमीटर के लिए I2C, DHT22 को पढ़ने के लिए एक पिन और बैटरी वोल्टेज माप के लिए 2 अन्य की भी आवश्यकता है। ESP32 लगभग पूरी तरह चार्ज है! यह जानते हुए कि कुछ पिन केवल पढ़ने के लिए हैं (मैंने उन्हें डीएचटी सेंसर के लिए उपयोग किया है), अन्य को वाईफ़ाई के साथ उपयोग नहीं किया जा सकता है, यह सही कॉन्फ़िगरेशन खोजने के लिए थोड़ा जटिल था।

बॉक्स को 4 दिशाओं में उन्मुख किया जा सकता है, साथ ही फ्लैट भी। कुल मिलाकर यह 4*2+2 = 10 संभावित प्रकार की जानकारी को केवल 2 स्क्रीन के साथ प्रदर्शित करता है। तो यह आपको बहुत सी चीजें प्रदर्शित करने की अनुमति देता है:

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

चरण 2: आपको क्या चाहिए?

तुम्हें किस चीज की आवश्यकता है ?
तुम्हें किस चीज की आवश्यकता है ?
तुम्हें किस चीज की आवश्यकता है ?
तुम्हें किस चीज की आवश्यकता है ?
तुम्हें किस चीज की आवश्यकता है ?
तुम्हें किस चीज की आवश्यकता है ?
  • ESP32: Lolin32 मॉड्यूल (बहुत कम शक्ति, बैटरी कनेक्टर से लैस, USB प्लस के माध्यम से बैटरी को चार्ज कर सकता है)
  • 2 एपपेपर डिस्प्ले: 4.2 इंच और 2.9 इंच। मैंने गुड डिस्प्ले स्टोर से मॉडल चुने।
  • DHT22 सेंसर
  • MCU6050 एक्सेलेरोमीटर - जायरोमीटर I2C सेंसर
  • एक लीपो बैटरी
  • बैटरी वोल्टेज माप के लिए: 2 10k रेसिस्टर्स, 1 100k रेसिस्टर, 1 100nF कैपेसिटर, 1 MOSFET ट्रांजिस्टर
  • सोल्डर और सोल्डरिंग आयरन, प्रिंटेड सर्किट बोर्ड
  • केस के लिए 3D प्रिंटर तक पहुंच

संलग्न छवि पीसीबी पर सभी घटकों की स्थिति दिखाती है: मुझे मामले में फिट होने के लिए जगह बचानी पड़ी, जो बहुत बड़ी नहीं होनी चाहिए।

मौसम डेटा प्राप्त करने के लिए, आपको मौसम एपीआई पर पंजीकरण करना होगा और अपनी चाबियों को 'वेरिएबल्स.एच' फ़ाइल में सही स्थानों पर रखना होगा (नीचे देखें)।

मौसम वेबसाइटें:

  • अपिक्सु
  • एक्यूवेदर

चरण 3: इस परियोजना ने मुझे बहुत कुछ सोचने और सीखने के लिए प्रेरित किया…

इस परियोजना ने मुझे बहुत कुछ सोचने और सीखने के लिए…
इस परियोजना ने मुझे बहुत कुछ सोचने और सीखने के लिए…
इस परियोजना ने मुझे बहुत कुछ सोचने और सीखने के लिए…
इस परियोजना ने मुझे बहुत कुछ सोचने और सीखने के लिए…
इस परियोजना ने मुझे बहुत कुछ सोचने और सीखने के लिए…
इस परियोजना ने मुझे बहुत कुछ सोचने और सीखने के लिए…

इस सिस्टम को लो-पावर वाला माना जाता था, ताकि आपको हर रात बैटरी चार्ज करने की जरूरत न पड़े… ऊर्जा बचाने के लिए, मैंने ई-पेपर स्क्रीन्स को चुना जो डिस्प्ले को बनाए रखती हैं, भले ही वे अब पावर्ड न हों। इसी तरह ESP32 के लिए, मैंने Lolin32 मॉड्यूल (इसकी मितव्ययिता के लिए प्रसिद्ध) को चुना और मुझे यह सीखना था कि गहरी नींद को कैसे प्रबंधित किया जाए, और एक्सेलेरोमीटर द्वारा उत्पन्न रुकावट पर वेक-अप कॉल।

बॉक्स को 4 दिशाओं में उन्मुख किया जा सकता है, अधिक सपाट। कुल मिलाकर जो 4*2+2 = 10 संभावित प्रकार की जानकारी प्रदर्शित करता है। तो यह आपको बहुत सी चीजें करने की अनुमति देता है: तिथि, और दिन का संत, समय, आज का मौसम पूर्वानुमान, आने वाले घंटों या दिनों के लिए मौसम पूर्वानुमान, बैटरी चार्ज स्तर और एक विशेष वेबसाइट से एक यादृच्छिक उद्धरण।

यह इंटरनेट पर देखने के लिए बहुत कुछ है, और जैसा कि आप जानते हैं: वाईफाई ऊर्जा की बचत का दुश्मन है…

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

तो स्वायत्तता (इंटरनेट कनेक्शन की आवृत्ति) और प्रदर्शित जानकारी की सटीकता के बीच एक व्यापार बंद है।

हल करने के लिए एक और समस्या स्मृति है। जब ESP32 गहरी नींद में होता है, तो RTC RAM कहलाने वाले को छोड़कर, स्मृति खो जाती है। यह मेमोरी 4MB चौड़ी है, जिसमें से केवल 2 का ही प्रोग्राम के लिए उपयोग किया जा सकता है। इस मेमोरी में, मुझे विभिन्न प्रोग्राम वेरिएबल्स को स्टोर करना होगा जिन्हें स्लीप चरण के बाद एक निष्पादन से अगले तक रखा जाना चाहिए: मौसम पूर्वानुमान, समय और दिनांक, आइकन फ़ाइल नाम, उद्धरण इत्यादि। मुझे इससे निपटना सीखना था।.

आइकनों की बात करें तो, वे SPIFFS, ESP32 फाइल सिस्टम में संग्रहीत हैं। मुफ्त वंडरग्राउंड मौसम एपीआई के बंद होने के बाद, मुझे अन्य मुफ्त मौसम डेटा प्रदाताओं की तलाश करनी पड़ी। मैंने दो का चयन किया: एक वर्तमान दिन के मौसम के लिए, 12 घंटे के पूर्वानुमान के साथ, और दूसरा बहु-दिवसीय पूर्वानुमानों के लिए। आइकन समान नहीं हैं, इसलिए इससे मुझे दो नई समस्याएं हुईं:

  • एक आइकन सेट चुनें
  • इन आइकनों का मिलान 2 साइटों के पूर्वानुमान कोड से करें

इस पत्राचार को आरटीसी रैम में भी संग्रहीत किया गया है ताकि इसे हर बार पुनः लोड न करना पड़े।

आइकन के साथ अंतिम समस्या। उन सभी को SPIFFS में संग्रहीत करना असंभव है। मेरी सभी फाइलों के लिए स्थान बहुत छोटा है। छवि संपीड़न करना आवश्यक था। मैंने पायथन में एक स्क्रिप्ट लिखी है जो मेरी आइकन फ़ाइलों को पढ़ती है और उन्हें आरएलई में संपीड़ित करती है, और फिर संपीड़ित फ़ाइलों को SPIFFS में संग्रहीत करती है। वहीं आयोजित किया।

लेकिन ई-पेपर डिस्प्ले लाइब्रेरी केवल बीएमपी-प्रकार की फाइलें लेती है, कंप्रेस्ड इमेज नहीं। इसलिए मुझे इन संपीड़ित फ़ाइलों से अपने आइकन प्रदर्शित करने में सक्षम होने के लिए एक अतिरिक्त फ़ंक्शन लिखना पड़ा।

इंटरनेट पर पढ़ा जाने वाला डेटा अक्सर जेसन प्रारूप में होता है: मौसम डेटा, दिन का संत। मैं इसके लिए (महान) arduinoJson लाइब्रेरी का उपयोग करता हूं। लेकिन उद्धरण ऐसे नहीं हैं। मैं उन्हें एक समर्पित साइट से लेता हूं, इसलिए मुझे सीधे वेब पेज की सामग्री को देखकर उन्हें पढ़ना होगा। मुझे उसके लिए एक विशिष्ट कोड लिखना था। हर दिन, आधी रात के आसपास, कार्यक्रम इस साइट पर जाता है और लगभग दस यादृच्छिक उद्धरण पढ़ता है, और उन्हें आरटीसी रैम में संग्रहीत करता है। उनमें से एक को यादृच्छिक रूप से प्रदर्शित किया जाता है जब आवास बड़ी स्क्रीन को ऊपर की ओर उन्मुख किया जाता है।

मैं आपको उच्चारण वर्णों के प्रदर्शन की समस्या से अवगत कराता हूं (क्षमा करें, लेकिन उद्धरण फ्रेंच में हैं)…।

जब छोटी स्क्रीन ऊपर होती है, तो बैटरी वोल्टेज प्रदर्शित होता है, शेष स्तर को बेहतर ढंग से देखने के लिए ड्राइंग के साथ। बैटरी वोल्टेज को पढ़ने के लिए इलेक्ट्रॉनिक असेंबली बनाना जरूरी था। चूंकि माप को बैटरी का निर्वहन नहीं करना चाहिए, मैंने इंटरनेट पर पाए गए एक आरेख का उपयोग किया, जो एक MOSFET ट्रांजिस्टर का उपयोग स्विच के रूप में करता है ताकि माप किए जाने पर ही करंट का उपभोग किया जा सके।

इस सर्किट को बनाने और बॉक्स में सब कुछ फिट करने में सक्षम होने के लिए, मुझे सबसे छोटा संभव चाहिए, मुझे सिस्टम के सभी घटकों को जोड़ने के लिए एक पीसीबी बनाना पड़ा। यह मेरा पहला पीसीबी है। मैं भाग्यशाली था क्योंकि इस तरफ पहली बार सब कुछ ठीक काम कर रहा था …

इम्प्लांटेशन मैप देखें: "निषिद्ध क्षेत्र" एक ऐसा क्षेत्र है जो यूएसबी केबल को जोड़ने के लिए आरक्षित है। लोलिन 32 मॉड्यूल आपको यूएसबी के माध्यम से बैटरी रिचार्ज करने की अनुमति देता है: यूएसबी केबल कनेक्ट होने पर बैटरी चार्ज की जाती है, और मॉड्यूल एक ही समय में काम करता है।

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

सुनिश्चित करें कि आपने चयन किया है:

  • पूर्वावलोकन प्रदर्शन: टीएफटी 2.4"
  • पुस्तकालय संस्करण: एडफ्रूट जीएफएक्स फ़ॉन्ट

तो संक्षेप में: एक बड़ी परियोजना, जिसने मुझे बहुत सी चीजें सीखने की अनुमति दी।

चरण 4: ई-पेपर डिस्प्ले का उपयोग करना

ई-पेपर डिस्प्ले का उपयोग करना
ई-पेपर डिस्प्ले का उपयोग करना

इन स्क्रीन का मुख्य नुकसान वीडियो पर स्पष्ट रूप से दिखाई देता है: डिस्प्ले के अपडेट में एक या दो सेकंड लगते हैं और फ्लैशिंग (दो स्क्रीन के सामान्य और उल्टे संस्करणों का वैकल्पिक प्रदर्शन) द्वारा किया जाता है। यह मौसम की जानकारी के लिए स्वीकार्य है क्योंकि मैं इसे बहुत बार अपडेट नहीं करता (बॉक्स के उन्मुखीकरण में बदलाव को छोड़कर हर घंटे)। लेकिन समय के लिए नहीं। इसलिए (और खपत को सीमित करने के लिए) मैं अभी भी एचएच: एमएम डिस्प्ले (सेकंड नहीं) का उपयोग करता हूं।

इसलिए मुझे डिस्प्ले को अपडेट करने का दूसरा तरीका तलाशना पड़ा। ये स्क्रीन (उनमें से कुछ) आंशिक अपडेट का समर्थन करती हैं (या तो स्क्रीन के एक क्षेत्र पर या पूरी स्क्रीन पर लागू होती हैं…) जिन्हें बदला जाता है। उदाहरण के लिए, 10:12 से 10:13 तक गुजरते समय, '3' के अंदर '2' थोड़ा दिखाई देता है, और यह '4', '5' आदि के बाद और भी अधिक दिखाई देता है। मैं चाहूंगा यह इंगित करने के लिए कि यह मेरी स्क्रीन का मामला है: मैंने ई-पेपर डिस्प्ले लाइब्रेरी GxEPD2 के लेखक के साथ इस पर चर्चा की, जिन्होंने मुझे बताया कि उन्होंने इस घटना को अपनी स्क्रीन से नहीं देखा। हमने भूतों का शिकार करने में सफल हुए बिना मापदंडों को बदलने की कोशिश की।

तो हमें एक और समाधान खोजना पड़ा: मैंने आंशिक डबल रिफ्रेशमेंट करने का प्रस्ताव दिया, जिससे समस्या हल हो गई (कम से कम यह मेरे लिए संतोषजनक है)। स्क्रीन फ्लैश किए बिना घंटे बीत जाते हैं और कोई भूत नहीं होते हैं। हालांकि, बदलाव तत्काल नहीं है: समय बदलने में एक सेकंड से थोड़ा अधिक समय लगता है।

चरण 5: इसे बनाना

इसे बना रहे हैं
इसे बना रहे हैं
इसे बना रहे हैं
इसे बना रहे हैं
इसे बना रहे हैं
इसे बना रहे हैं
इसे बना रहे हैं
इसे बना रहे हैं

यह सुनिश्चित करने के लिए कि जब ओरिएंटेशन बदलता है तो कुछ भी अंदर नहीं जाता है, विभिन्न घटकों (डिस्प्ले, इलेक्ट्रॉनिक मॉड्यूल, पीसीबी, बैटरी) को गोंद बंदूक से चिपकाया जाता है। पीसीबी के नीचे तारों को रूट करने के लिए, मैंने इसे स्पेसर से बने पैरों पर स्थापित किया, वही बैटरी के लिए जाता है।

जल्द ही मैं एक बाहरी यूएसबी माइक्रोफोन कनेक्टर स्थापित करूंगा ताकि मुझे बैटरी रिचार्ज करने के लिए केस को खोलना न पड़े।

हो सकता है कि मुझे ओटीए द्वारा अपडेट करने में भी दिलचस्पी होगी ताकि यह सब सही हो सके…।

चरण 6: कोड और फ़ाइलें

Image
Image

तीन संग्रह फ़ाइलें प्रदान की जाती हैं:

  • Weather Station.zip: Arduino IDE का उपयोग करके अपलोड करने के लिए Arduino कोड
  • Boite ecran.zip: केस के लिए CAD और 3D प्रिंटर फ़ाइलें
  • data.zip: ESP32 के SPIFFS में अपलोड की जाने वाली फाइलें।

यदि आप नहीं जानते कि ESP32 के SPIFFS में फ़ाइलें कैसे अपलोड करें, तो बस इस ट्यूटोरियल को पढ़ें, जो एक बहुत ही उपयोगी प्लगइन प्रस्तुत करता है और Arduino IDE में इसका उपयोग कैसे करें।

गहरी नींद की प्रोग्रामिंग एक Arduino के मानक प्रोग्रामिंग से काफी अलग है। ESP32 के लिए, इसका मतलब है कि ESP32 जागता है और सेटअप निष्पादित करता है, फिर सो जाता है। तो, लूप फ़ंक्शन खाली है, और इसे कभी निष्पादित नहीं किया जाता है।

कुछ इनिशियलाइज़ेशन चरण को पहले निष्पादन पर केवल एक बार चलाया जाना चाहिए (जैसे कि समय, मौसम डेटा, उद्धरण, आदि प्राप्त करना), इसलिए ESP32 को यह जानने की आवश्यकता है कि वर्तमान वेक अप पहला है या नहीं: उसके लिए, समाधान आरटीसी रैम में एक चर को स्टोर करना है (जो गहरी नींद के चरणों के दौरान भी सक्रिय रहता है) जो प्रत्येक जागने पर बढ़ाया जाता है। यदि यह 1 के बराबर है तो यह पहला निष्पादन है और ESP32 आरंभीकरण चरण चलाता है, अन्यथा यह चरण छोड़ दिया जाता है।

ESP32 को जगाने के लिए, कई संभावनाएं हैं:

  • टाइमर वेक-अप: कोड सोने से पहले गहरी नींद की अवधि की गणना करता है। इसका उपयोग समय (हर 1, 2, 3, या 5 मिनट) या मौसम डेटा (हर 3 या 4 घंटे) को दिन के उद्धरण और संत (हर 24 घंटे) को अपडेट करने के लिए किया जाता है।
  • इंटरप्ट वेक-अप: एक्सेलेरोमीटर एक संकेत भेजता है जिसका उपयोग ESP32 को जगाने के लिए किया जाता है। इसका उपयोग अभिविन्यास परिवर्तन का पता लगाने और डिस्प्ले को अपडेट करने के लिए किया जाता है
  • टच सेंसर वेक-अप: ESP32 टच सेंसर के रूप में कार्य करने वाले कई पिनों से लैस है, लेकिन उनका उपयोग टाइमर वेकअप के साथ नहीं किया जा सकता है, इसलिए मैंने इसका उपयोग नहीं किया।

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

इस निर्देश को पढ़ने के लिए धन्यवाद (मेरा पहला वाला)। मुझे आशा है कि आप इसे पसंद करेंगे और इस मौसम स्टेशन को बनाने में आनंद लेंगे।

सेंसर प्रतियोगिता
सेंसर प्रतियोगिता

सेंसर प्रतियोगिता में उपविजेता

सिफारिश की: