विषयसूची:

मैजिकबिट (Arduino) का उपयोग करके स्मार्ट अलार्म घड़ी: 10 कदम
मैजिकबिट (Arduino) का उपयोग करके स्मार्ट अलार्म घड़ी: 10 कदम

वीडियो: मैजिकबिट (Arduino) का उपयोग करके स्मार्ट अलार्म घड़ी: 10 कदम

वीडियो: मैजिकबिट (Arduino) का उपयोग करके स्मार्ट अलार्म घड़ी: 10 कदम
वीडियो: DIY Smart Table Clock: Arduino-Powered Multi-Color Clock | How to make a smart clock using Arduino 2024, नवंबर
Anonim
Image
Image

यह ट्यूटोरियल दिखाता है कि बिना किसी आरटीसी मॉड्यूल का उपयोग किए मैजिकबिट देव बोर्ड में ओएलईडी डिस्प्ले का उपयोग करके एक स्मार्ट अलार्म घड़ी कैसे बनाई जाती है।

आपूर्ति

  • मैजिकबिट
  • यूएसबी-ए से माइक्रो-यूएसबी केबल

चरण 1: कहानी

इस ट्यूटोरियल में हम सीखेंगे कि मैजिकबिट का उपयोग करके स्मार्ट अलार्म घड़ी कैसे बनाई जाती है।

चरण 2: हार्डवेयर सेटअप

USB केबल का उपयोग करके अपने Magicbit को कंप्यूटर से प्लग करें।

चरण 3: सॉफ़्टवेयर सेटअप

अपना Arduino IDE खोलें और बोर्ड को Arduino IDE के साथ सेटअप करें। निम्नलिखित लिंक संदर्भित करता है कि यह कैसे करना है। इसलिए हम आपको सलाह देते हैं कि पहले लिंक पर जाएं और मैजिक बिट से परिचित हों।

magicbit-arduino.readthedocs.io/en/latest/…

अब सही बोर्ड प्रकार और पोर्ट चुनें। इस मामले में बोर्ड का प्रकार मैजिकबिट है। पुस्तकालय पहले से ही स्थापित हैं जब मैजिकबिट पुस्तकालयों में।

चरण 4: सिद्धांत और कार्यप्रणाली

यदि आप पहले वीडियो को देखते हैं, तो आप देख सकते हैं कि डिस्प्ले में 2 स्क्रीन हैं।

  • घड़ी की स्क्रीन जो समय विवरण दिखा रही है
  • अलार्म स्क्रीन जो अलार्म विवरण दिखा रही है

इन दोनों स्क्रीन के बीच टॉगल करने के लिए हमने मैजिकबिट में दो में से किसी भी पुश बटन का इस्तेमाल किया। ये बटन मैजिकबिट में ESP32 के 35 (बाएं बटन) और 34 (दाएं बटन) पिन से जुड़े हैं। समय और अन्य विवरण दिखाने के लिए हमने मैजिकबिट में बिल्ट ओएलईडी डिस्प्ले का इस्तेमाल किया।

आइए बात करते हैं कि ये ग्राफिक स्क्रीन कैसे काम करती हैं।

क्लॉक स्क्रीन में एनालॉग क्लॉक, डिजिटल क्लॉक, तारीख, महीने और साल के टेक्स्ट होते हैं।

एनालॉग घड़ी बनाने के लिए हम कुछ ग्राफ़िक्स फ़ंक्शंस का उपयोग करते हैं जो Adafriut GFX नामक ग्राफिक्स लाइब्रेरी में उपलब्ध हैं। सर्कल फंक्शन और लाइन फंक्शन का उपयोग करके हम एनालॉग क्लॉक फेस बनाते हैं। सरल ज्यामितीय कार्य जिन्हें sin और cos कहा जाता है, का उपयोग घड़ी की सूई की स्थिति के लिए किया जाता है। इसलिए हम केवल उस कोण को इनपुट करते हैं जो हाथों को घुमाने के लिए समय के अनुरूप होता है। उसके लिए हम पहले समय को कोण में इस प्रकार बदलते हैं।

  • मिनट की सुई का कोण = मिनट*(360/60)
  • घंटे का कोण = घंटे*(360/12)

घड़ी के फलक के केंद्र और घड़ी के फलक में संख्या 12 के बीच की रेखा के संबंध में मापा गया कोण। sin और cos फ़ंक्शन का उपयोग करके हम घंटे और मिनट की रेखाओं के अंत के x और y निर्देशांक की गणना कर सकते हैं। नीचे दी गई तस्वीर बताती है कि यह कैसे कर रहा है।

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

क्लॉक स्क्रीन की तरह हमने उपयुक्त स्थानों पर OLED डिस्प्ले पर प्रिंट नंबरों के लिए Adafruit GFX लाइब्रेरी में टेक्स्ट प्रिंट फ़ंक्शन का उपयोग किया।

चरण 5: स्थानीय समय प्राप्त करना

घड़ी का सबसे महत्वपूर्ण हिस्सा यह है कि हम स्थानीय समय को सही तरीके से कैसे प्राप्त करते हैं। उस उद्देश्य के लिए आप मैजिकबिट में बाहरी आरटीसी घड़ी मॉड्यूल या ईएसपी 32 में इनबिल्ट आरसी घड़ी का उपयोग कर सकते हैं। इस परियोजना में हमने दूसरी विधि का इस्तेमाल किया। इस पद्धति में हम इंटरनेट से स्थानीय समय प्राप्त करने के लिए एनटीपी (नेटवर्क टाइम प्रोटोकॉल) क्लाइंट का उपयोग करते हैं। इंटरनेट एक्सेस करने के लिए हमने ESP32 में इनबिल्ट वाई-फाई सुविधा का इस्तेमाल किया। इसलिए पहले चरण में हम SSID और पासवर्ड प्रदान करके इंटरनेट एक्सेस करने के लिए WIFI का उपयोग करते हैं। फिर हमें gmtOffset और daylightOffset को सेकंड में वेरिएबल में कॉन्फ़िगर करना चाहिए। इन चरों के मूल्य दुनिया में एक क्षेत्र से दूसरे क्षेत्र में भिन्न होते हैं। gmtOffset का अर्थ है कि आप GMT से कितने सेकंड अलग हैं। अधिकांश क्षेत्रों के लिए डेलाइट ऑफ़सेट 3600 है। आप इसे इंटरनेट पर पा सकते हैं। वर्तमान स्थानीय समय मिलने के बाद हमने वाईफ़ाई का उपयोग नहीं किया। क्योंकि तब हम ESP32 में इनबिल्ट RC क्लॉक से स्थानीय समय की गणना करते हैं। यह time.h पुस्तकालय का उपयोग करके किया जाता है। Arduino (Arduino> उदाहरण> ESP32> समय> सरल समय) में आपके लिए यह जानने के लिए सरल उदाहरण है कि यह आगे कैसे काम करता है। इसके अलावा ये लिंक हैं जिनका उपयोग आप एनटीपी क्लाइंट के बारे में अधिक जानकारी के लिए कर सकते हैं।

  • https://dronebotworkshop.com/esp32-intro/
  • https://lastminuteengineers.com/esp32-ntp-server-d…

स्थानीय समय को सही ढंग से प्राप्त करने के बाद, हम प्रत्येक लूप में उस समय की जानकारी के अनुसार टेक्स्ट और कोण दिखाते हुए अपना समय बदलते हैं।

चरण 6: अलार्म सेट करना

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

चरण 7: बजर सेट करना

हम कोड में analogCwrite () फ़ंक्शन का उपयोग करके बजर ध्वनि बनाने के लिए PWM पल्स का उपयोग करते हैं। सभी पुस्तकालय कार्यों के कारण ESP32 मैजिकबिट के लिए मान्य है। आप बजर की बीप ध्वनि को कोड में इसकी आवृत्ति और पीडब्लूएम मान में परिवर्तन से बदल सकते हैं।

techtutorialsx.com/2017/06/15/esp32-arduin…

यह पेज बताता है कि बजर ESP32 के साथ कैसे काम करता है।

चरण 8: बटन सेट करना

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

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

चरण 9: समस्या निवारण

कभी-कभी घड़ी थोड़ी देर बाद शुरू होती है या यह ग्राफिक्स को ठीक से प्रदर्शित नहीं करती है। निम्नलिखित युक्तियाँ स्थिति को हल करने में मदद करती हैं।

  • सुनिश्चित करें कि आपने सही SSID और पासवर्ड दिया है
  • एनटीपी सर्वर बदलें (आप इंटरनेट से कई सर्वर पा सकते हैं जो आपके क्षेत्र से संबंधित हैं)।
  • इंटरनेट कनेक्शन बदलता है। (मोबाइल हॉटस्पॉट भी संभव हो सकता है)।

साथ ही आप सीरियल मॉनीटर का उपयोग करके हर चीज का निवारण कर सकते हैं। OLED डिस्प्ले के अलावा सीरियल मॉनिटर समय की जानकारी दिखाता है।

चरण 10: Arduino कोड

// OLED डिस्प्ले के लिए लाइब्रेरी

#शामिल

#शामिल करें #शामिल करें #OLED_RESET 4 परिभाषित करें # परिभाषित बजर 25 इंट प्रीटाइम = 0; इंट काउंट्स = 0; इंट करंटटाइम = 0; स्ट्रक्चर टीएम टाइमइन्फो; कॉन्स्ट चार* एसएसआईडी = "आपका एसएसआईडी";//वाईफाई विवरण कॉन्स्ट चार* पासवर्ड = "आपका पासवर्ड"; इंट अलार्मडेटटाइम [५] = {१, १, २०२०, ०, ०};//अलार्म वैरिएबल इंट डेटइंडेक्स = ०; इंट टाइमइंडेक्स = 0; इंट सिलेक्टइंडेक्स = -1; बूल बजरऑन = 0; इंट रेक्ट[6][4] = {{5, 0, 118, 16}, {1, 22, 30, 22}, {37, 22, 30, 22}, {73, 22, 55, 22}, {३१, ४४, ३०, २०}, {६७, ४४, ३०, २०}};//चयन आयत कास्ट चार* ntpServer = "asia.pool.ntp.org";//सर्वर विवरण कॉन्स्ट लॉन्ग gmtOffset_sec = 19800; कॉन्स्ट इंट डेलाइटऑफसेट_सेक = 0; Adafruit_SSD1306 डिस्प्ले(128, 64);//OLED आकार परिभाषित बाइट घड़ीCenterY = (display.height() + 16) / 2;//एनालॉग घड़ी चेहरा विवरण बाइट घड़ीCenterX = (display.height() - 16) / 2; बाइट घड़ीत्रिज्या = 23; बूल राज्य = 0;//स्क्रीन चालू या बंद बूलियन अलार्म = 0;//अलार्म वर्तमान स्थिति स्ट्रिंग अलार्मस्टेट = "अलार्म चालू";//अलार्म चालू या बंद // चर संग्रहीत समय डेटा चार दिननाम [10]; चार दिन संख्या [3]; चार महीने [10]; चार साल [5]; चार घंटे [3]; चार मिनट [3]; चार महीने की संख्या [3]; चार सेकंड [3]; // बटन चर बूल राइटस्टेट = 1; बूल लेफ्टस्टेट = 1; // बजर चर इंट चैनल = 0; इंट फ़्रीक्वेंसी = २०००; इंट पीडब्लूएम = २००; इंट रिज़ॉल्यूशन = 8; शून्य सेटअप () {// सेट इनपुट और आउटपुट पिनमोड (राइटबटन, इनपुट); पिनमोड (बाएं बटन, इनपुट); पिनमोड (ग्रीनएलईडी, आउटपुट); पिनमोड (बजर, आउटपुट); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // डिस्प्ले डिस्प्ले को इनिशियलाइज़ करें। डिस्प्ले (); देरी (3000); डिस्प्ले.क्लियरडिस्प्ले (); LEDcSetup(0, फ़्रीक्वेंसी, रिज़ॉल्यूशन); // pwm पैरामीटर्स को कॉन्फ़िगर करें ledcAttachPin (बज़र, 0); Serial.begin(११५२००);//धारावाहिक संचार//वाईफाई से कनेक्ट करें Serial.printf("%s से कनेक्ट हो रहा है", ssid); वाईफाई.बेगिन (एसएसआईडी, पासवर्ड); जबकि (WiFi.status() != WL_CONNECTED) {देरी (500); सीरियल.प्रिंट ("।"); } सीरियल.प्रिंट्लन ("कनेक्टेड"); // init और समय प्राप्त करें configTime (gmtOffset_sec, daylightOffset_sec, ntpServer); समय निकालो(); // वाईफाई को डिस्कनेक्ट करें क्योंकि अब वाईफाई की जरूरत नहीं है। डिस्कनेक्ट (सच); वाईफाई.मोड (WIFI_OFF); डिस्प्ले.क्लियरडिस्प्ले (); } शून्य लूप () {getTime (); // वर्तमान समय प्राप्त करें // दाएं और बाएं पुशबटन को स्टोर करें राइटस्टेट = डिजिटलरेड (राइटबटन); लेफ्टस्टेट = डिजिटलरेड (लेफ्टबटन); // चाक बटन दबाए जाते हैं यदि (राइटस्टेट == 0 || लेफ्टस्टेट == 0) {ledcWrite (0, 200); // जब बटन दबाया जाता है तो बजर बीप ध्वनि विलंब (100) उत्सर्जित करता है; अगर (राज्य == 0) {// अलार्म स्क्रीन फ्रेम स्थिति में बदलें = 1; // राज्य को अलार्म राज्य में बदलें राइटस्टेट = वामस्टेट = 1; // हमें केवल परिवर्तन की आवश्यकता है} मायने रखता है = 0; // रीसेट काउंटर} अगर (राज्य == 1 && (गणना) <५) {// अगर अलार्म स्क्रीन में है और कोई टाइमआउट कैलकुलेट नहीं है अलार्म (); // अलार्म सूचना के समय मूल्यों की गणना करें शोअलार्म (); // मान दिखाएं} और {// अगर घड़ी में स्क्रीन स्थिति = 0; डिस्प्ले.क्लियरडिस्प्ले (); क्लॉकफेस (); // एनालॉग क्लॉक फेस प्रिंटलोकलटाइम (); // क्लॉक फेस में प्रिंट टाइम और अन्य विवरण प्रिंट करें} ऑनअलार्म (); // अलार्म टाइम की स्थानीय समय से तुलना करें और अलार्म डिले (100) चालू करें; // देरी के लिए अलार्म ऑन और ऑफ} शून्य घड़ीफेस () {//कैलॉग क्लॉक फेस डिस्प्ले। ड्रा सर्कल (क्लॉकसेंटरएक्स, क्लॉकसेंटर, क्लॉकरेडियस, व्हाइट);//प्रिंट वॉच सर्कल फॉर (इंट डिजिट = 0; डिजिट = 5) {// केवल 5 है selctions.so -1 पर रीसेट करें (-1 = चालू या बंद है) selectIndex = -1; } dateAndTimeSelection (selectIndex); // चयन बदलें } शून्य तिथि और समय चयन (int अनुक्रमणिका) {अगर (सूचकांक == -1) {//अलार्म चालू या बंद अगर (RightState == 0) {// चालू और बंद अलार्म के बीच टॉगल करें यदि (अलार्मस्टेट == "अलार्म ऑन") {अलार्मस्टेट = "अलार्म ऑफ"; } और {अलार्मस्टेट = "अलार्म चालू"; } } } और { अगर (राइटस्टेट == 0) {// अन्य चयनों में संबंधित तिथि या समय सरणी अलार्मडेटटाइम [इंडेक्स] = अलार्मडेटटाइम [इंडेक्स] + 1; // अनुक्रमणिका चयन है } } int तुलना [4] = {12, 2030, 23, 59}; // तारीखों और वर्षों की ऊपरी सीमा की तुलना महीने [12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // महीनों की ऊपरी सीमा int resetValue[4] = {1, 2020, 0, 0}; // के लिए प्रारंभिक मान (int i = 1; मैं तुलना करता हूं [i - 1]) {अलार्मडेटटाइम = रीसेटवैल्यू [i - 1]; } } अगर (अलार्मडेटटाइम [0]> तुलना महीने [अलार्मडेटटाइम [1] - 1]) {// रीसेट vlaues अगर महीने उनकी सीमा से बड़े हैं अलार्मडेटटाइम [0] = 1; } } शून्य शो अलार्म () {// प्रिंट अलार्म विवरण स्ट्रिंग अलार्मडेटटाइम 0 = स्ट्रिंग (अलार्मडेटटाइम [0]); // स्ट्रिंग अलार्मडेटटाइम 1 = स्ट्रिंग (अलार्मडेटटाइम [1]) दिखाने के लिए स्टिंग को कन्वर्ट करें; स्ट्रिंग अलार्मडेटटाइम 2 = स्ट्रिंग (अलार्मडेटटाइम [2]); स्ट्रिंग अलार्मडेटटाइम ३ = स्ट्रिंग (अलार्मडेटटाइम [३]); स्ट्रिंग अलार्मडेटटाइम 4 = स्ट्रिंग (अलार्मडेटटाइम [4]); // यदि मानों में एक 1 अंक है तो उनमें "0" जोड़ें। अगर (अलार्मडेटटाइम [0]

सिफारिश की: