विषयसूची:

Arduino स्क्रॉलिंग टेक्स्ट क्लॉक: ३ चरण
Arduino स्क्रॉलिंग टेक्स्ट क्लॉक: ३ चरण

वीडियो: Arduino स्क्रॉलिंग टेक्स्ट क्लॉक: ३ चरण

वीडियो: Arduino स्क्रॉलिंग टेक्स्ट क्लॉक: ३ चरण
वीडियो: Arduino text scrolling display | Arduino text scrolling display max7219 dot matrix 4 in 1 2024, जुलाई
Anonim
Arduino स्क्रॉलिंग टेक्स्ट क्लॉक
Arduino स्क्रॉलिंग टेक्स्ट क्लॉक

इस प्रोजेक्ट का उद्देश्य एक स्क्रॉलिंग टेक्स्ट क्लॉक बनाना है जो बोले जाने वाले समय को प्रदर्शित करता है (उदाहरण के लिए, "यह आधी रात है")।

यह एक त्वरित परियोजना है - हम आपको हार्डवेयर और स्केच के साथ जाने के लिए पर्याप्त देते हैं, और फिर आप इसे अपनी आवश्यकताओं के अनुरूप आगे ले जा सकते हैं।

चरण 1: हार्डवेयर

हार्डवेयर
हार्डवेयर

आपको तीन प्रमुख वस्तुओं की आवश्यकता होगी -

  • एक Arduino Uno-संगत बोर्ड
  • DS1307 या DS3231 IC. का उपयोग करके रीयल-टाइम क्लॉक सर्किट या मॉड्यूल
  • और एक मोनोक्रोम P10-शैली एलईडी डिस्प्ले

आप बाहरी बिजली की आपूर्ति चाहते हैं, लेकिन हम इसे बाद में प्राप्त करेंगे।

पहला चरण आपकी रीयल-टाइम घड़ी में फ़िट होना है। यदि आपको इसके लिए सहायता चाहिए तो ट्यूटोरियल के लिए यहां क्लिक करें।

अब तक मुझे आशा है कि आप सोच रहे होंगे कि "आप समय कैसे निर्धारित करते हैं?"।

उस प्रश्न के दो उत्तर हैं। यदि आप DS3231 का उपयोग कर रहे हैं तो इसे केवल स्केच में सेट करें (नीचे देखें) क्योंकि सटीकता बहुत अच्छी है, आपको दिन के उजाले की बचत को कवर करने के लिए केवल वर्ष में दो बार नए समय के साथ स्केच अपलोड करने की आवश्यकता है।

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

घड़ी को पावर देने के संबंध में - आप Arduino से ONE LED डिस्प्ले चला सकते हैं, और यह इनडोर उपयोग के लिए अच्छी चमक पर चलता है। यदि आप चाहते हैं कि DMD पूरी तरह से चले, तो रेटिना-बर्निंग ब्राइटनेस आपको एक अलग 5V 4A DC बिजली की आपूर्ति का उपयोग करने की आवश्यकता है। यदि आप दो DMD का उपयोग कर रहे हैं - जो 8A पर जाता है, और इसी तरह। बस बाहरी शक्ति को एक डीएमडी के टर्मिनलों से कनेक्ट करें (दूसरे या अधिक डीएमडी को इन टर्मिनलों से कनेक्ट करें)।

यदि आप अपने बिजली आपूर्ति केबल के अंत को काटना पसंद नहीं करते हैं, तो डीसी सॉकेट ब्रेकआउट का उपयोग करें।

चरण 2: Arduino स्केच

आपको निम्नलिखित दो Arduino लाइब्रेरी - TimerOne और DMD स्थापित करने की आवश्यकता होगी। फिर स्केच अपलोड करें:

// आरटीसी के लिए # "वायर.एच" शामिल करें # DS1307_I2C_ADDRESS 0x68 परिभाषित करें // DS1307 RTC 0x68 है

// एलईडी डिस्प्ले के लिए

#include "SPI.h" #include "DMD.h" #include "TimerOne.h" #include "SystemFont5x7.h" #include "Arial_black_16.h" #define DISPLAYS_ACROSS 1 // आप एक में एक से ज्यादा DMD रख सकते हैं पंक्ति #परिभाषित DISPLAYS_DOWN 1 DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);

स्ट्रिंग फाइनलस्ट्रिंग; // डीएमडी पर प्रदर्शित करने के लिए अंतिम वाक्य धारण करने के लिए प्रयोग किया जाता है

शून्य स्कैनडीएमडी () // डीएमडी के लिए आवश्यक

{ dmd.scanDisplayBySPI (); }

व्यर्थ व्यवस्था()

{// DMD Timer1.initialize (5000) के लिए; Timer1.attachInterrupt (स्कैनडीएमडी); डीएमडी.क्लियरस्क्रीन (सच);

// आरटीसी. के लिए

वायर.बेगिन (); // I2C बस बाइट सेकंड, मिनट, घंटा, दिनऑफवीक, डेऑफमंथ, महीना, वर्ष फायर अप करें; // वेरिएबल्स को बदलें और समय निर्धारित करने के लिए setDateDs1307 को अनकम्मेंट करें // फिर फंक्शन पर फिर से कमेंट करें और स्केच को फिर से सेकेंड = 0 अपलोड करें; मिनट = 13; घंटा = 23; डेऑफवीक = 4; दिन का महीना = 19; महीना = 5; वर्ष = 13; // setDateDs1307 (दूसरा, मिनट, घंटा, दिनऑफवीक, दिनऑफ़मंथ, महीना, वर्ष); }

// सामान्य आरटीसी कार्य

// सामान्य दशमलव संख्याओं को बाइनरी कोडेड दशमलव बाइट decToBcd (बाइट वैल) में बदलें {रिटर्न ((वैल/10 * 16) + (वैल% 10)); }

// बाइनरी कोडेड दशमलव को सामान्य दशमलव संख्याओं में बदलें

बाइट bcdToDec(बाइट वैल) {रिटर्न ((वैल/16*10) + (वैल%16)); }

शून्य setDateDs1307(बाइट सेकंड, // 0-59

बाइट मिनट, // 0-59 बाइट घंटा, // 1-23 बाइट डेऑफवीक, // 1-7 बाइट डेऑफ़मंथ, // 1-28/29/बाइट महीना, // 1-12 बाइट वर्ष) // 0- 99 { वायर.बेगिनट्रांसमिशन (DS1307_I2C_ADDRESS); वायर.राइट (0); वायर.राइट (decToBcd (सेकंड)); // 0 से बिट 7 घड़ी शुरू करता है Wire.write(decToBcd(मिनट)); Wire.write (decToBcd (घंटा)); Wire.write (decToBcd (dayOfWeek)); Wire.write (decToBcd (dayOfMonth)); वायर.राइट (decToBcd (माह)); वायर.राइट (decToBcd (वर्ष)); वायर.राइट (00010000); // रजिस्टर को नियंत्रित करने के लिए 0x10 (हेक्स) 00010000 (बाइनरी) भेजता है - स्क्वायर वेव वायर चालू करता है। एंडट्रांसमिशन (); }

// ds1307. से दिनांक और समय प्राप्त करें

शून्य getDateDs1307 (बाइट * दूसरा, बाइट * मिनट, बाइट * घंटा, बाइट * दिनऑफवीक, बाइट * दिनऑफमंथ, बाइट * महीना, बाइट * वर्ष) {// रजिस्टर पॉइंटर रीसेट करें Wire.beginTransmission(DS1307_I2C_ADDRESS); वायर.राइट (0); वायर.एंडट्रांसमिशन ();

Wire.requestFrom (DS1307_I2C_ADDRESS, 7);

// इनमें से कुछ को मास्क की जरूरत होती है क्योंकि कुछ बिट्स कंट्रोल बिट्स होते हैं

* दूसरा = bcdToDec (वायर.रीड () और 0x7f); *मिनट = bcdToDec(वायर.रीड ()); * घंटा = bcdToDec (वायर.रीड () और 0x3f); // इसे बदलने की जरूरत है अगर 12 घंटे पूर्वाह्न/अपराह्न *dayOfWeek = bcdToDec(Wire.read()); *dayOfMonth = bcdToDec (वायर.रीड ()); *माह = bcdToDec (वायर.रीड ()); *वर्ष = bcdToDec (वायर.रीड ()); }

शून्य ड्रॉटेक्स्ट (स्ट्रिंग ओल्डस्ट्रिंग)

{ dmd.clearScreen (सच); dmd.selectFont (एरियल_ब्लैक_16); चार न्यूस्ट्रिंग [256]; int sLength = oldString.length (); OldString.toCharArray(newString, sLength+1); dmd.drawMarquee(newString, sLength, (32*DISPLAYS_ACROSS)-1, 0); लंबी शुरुआत = मिली (); लंबा टाइमर = प्रारंभ; लंबा टाइमर 2 = प्रारंभ; बूलियन रेट = झूठा; जबकि (! रिट) { अगर ((टाइमर + 20) < मिली ()) { रिट = डीएमडी। स्टेप मार्की (-1, 0); टाइमर = मिली (); } } }

शून्य createTextTime (int hh, int mm)

// यह टेक्स्ट में हर समय डेटा को एक वाक्य के रूप में मैश करता है { finalString = ""; // विशेष मामलों के लिए वाक्य मिटा दें (नीचे) finalString= finalString+"It's";

// अब घंटा जोड़ें

अगर (एचएच == 1 || एचएच == 13) {फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "वन"; } अगर (एचएच == 2 || एचएच == 14) {फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "दो"; } अगर (hh==3 || hh==15) { finalString= finalString+"three"; } अगर (एचएच==4 ||एचएच==16) {फाइनलस्ट्रिंग=फाइनलस्ट्रिंग+"फोर"; } अगर (hh==5 || hh==17) { finalString= finalString+"five"; } अगर (एचएच == 6 || एचएच == 18) {फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "छः"; } अगर (एचएच == 7 || एचएच == 19) {फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "सात"; } अगर (एचएच==8 ||एचएच==20) {फाइनलस्ट्रिंग=फाइनलस्ट्रिंग+"आठ"; } अगर (hh==9 || hh==21) { finalString= finalString+"nine"; } अगर (hh==10 || hh==22) { finalString= finalString+"ten"; } अगर (एचएच == 11 || एचएच == 23) {फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "ग्यारह"; }

// अब मिनट जोड़ें

स्विच (मिमी) {केस 1: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "ओह वन"; टूटना; केस 2: फ़ाइनलस्ट्रिंग = फ़ाइनलस्ट्रिंग + "ओह टू"; टूटना; केस 3: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "ओह थ्री"; टूटना; केस 4: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "ओह फोर"; टूटना; केस 5: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "ओह फाइव"; टूटना; केस 6: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "ओह सिक्स"; टूटना; केस 7: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "ओह सात"; टूटना; केस 8: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "ओह आठ"; टूटना; केस 9: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "ओह नौ"; टूटना; केस 10: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "दस"; टूटना; केस 11: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "ग्यारह"; टूटना; केस 12: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "बारह"; टूटना; केस 13: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "तेरह"; टूटना; केस 14: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "चौदह"; टूटना; केस 15: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "पंद्रह"; टूटना; केस 16: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "सोलह"; टूटना; केस 17: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "सत्रह"; टूटना; केस 18: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "अठारह"; टूटना; केस 19: फ़ाइनलस्ट्रिंग = फ़ाइनलस्ट्रिंग + "उन्नीस"; टूटना; केस 20: फ़ाइनलस्ट्रिंग = फ़ाइनलस्ट्रिंग + "ट्वेंटी"; टूटना; केस 21: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "ट्वेंटी वन"; टूटना; केस 22: फ़ाइनलस्ट्रिंग = फ़ाइनलस्ट्रिंग + "बीस टू"; टूटना; केस 23: फ़ाइनलस्ट्रिंग = फ़ाइनलस्ट्रिंग + "ट्वेंटी थ्री"; टूटना; केस 24: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "चौबीस"; टूटना; केस 25: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "पच्चीस"; टूटना; केस 26: फ़ाइनलस्ट्रिंग = फ़ाइनलस्ट्रिंग + "छब्बीस"; टूटना; केस 27: फ़ाइनलस्ट्रिंग = फ़ाइनलस्ट्रिंग + "बीस सात"; टूटना; केस 28: फ़ाइनलस्ट्रिंग = फ़ाइनलस्ट्रिंग + "अट्ठाईस"; टूटना; केस 29: फ़ाइनलस्ट्रिंग = फ़ाइनलस्ट्रिंग + "उनतीस"; टूटना; केस 30: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "तीस"; टूटना; केस 31: फ़ाइनलस्ट्रिंग = फ़ाइनलस्ट्रिंग + "इक्कीस"; टूटना; केस 32: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "बत्तीस"; टूटना; केस 33: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "तीस तीन"; टूटना; केस 34: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "चौंतीस"; टूटना; केस 35: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "पैंतीस"; टूटना; केस 36: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "छत्तीस"; टूटना; केस 37: फ़ाइनलस्ट्रिंग = फ़ाइनलस्ट्रिंग + "सैंतीस"; टूटना; केस 38: फ़ाइनलस्ट्रिंग = फ़ाइनलस्ट्रिंग + "अड़तीस"; टूटना; केस 39: फ़ाइनलस्ट्रिंग = फ़ाइनलस्ट्रिंग + "उनतीस"; टूटना; केस 40: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "चालीस"; टूटना; केस 41: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "चालीस वन"; टूटना; केस 42: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "बयालीस"; टूटना; केस 43: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "तैंतालीस"; टूटना; केस 44: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "चालीस चार"; टूटना; केस 45: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "पैंतालीस"; टूटना; केस 46: फ़ाइनलस्ट्रिंग = फ़ाइनलस्ट्रिंग + "छियालीस"; टूटना; केस 47: फ़ाइनलस्ट्रिंग = फ़ाइनलस्ट्रिंग + "सैंतालीस"; टूटना; केस 48: फ़ाइनलस्ट्रिंग = फ़ाइनलस्ट्रिंग + "अड़तालीस"; टूटना; केस 49: फ़ाइनलस्ट्रिंग = फ़ाइनलस्ट्रिंग + "उनतालीस"; टूटना; केस 50: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "फिफ्टी"; टूटना; केस 51: फ़ाइनलस्ट्रिंग = फ़ाइनलस्ट्रिंग + "इवन्टीवन"; टूटना; केस 52: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "बावन दो"; टूटना; केस 53: फ़ाइनलस्ट्रिंग = फ़ाइनलस्ट्रिंग + "फिफ्टी थ्री"; टूटना; केस 54: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "फिफ्टी फोर"; टूटना; केस 55: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "पचास"; टूटना; केस 56: फ़ाइनलस्ट्रिंग = फ़ाइनलस्ट्रिंग + "छह छप्पन"; टूटना; केस 57: फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "पचास सात"; टूटना; केस 58: फ़ाइनलस्ट्रिंग = फ़ाइनलस्ट्रिंग + "अट्ठाईस"; टूटना; केस 59: फ़ाइनलस्ट्रिंग = फ़ाइनलस्ट्रिंग + "उनपनीस"; टूटना; }

// दोपहर?

अगर (एचएच == 12 && मिमी == 0) {फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "दोपहर"; } // आधी रात? अगर (एचएच == 00 && मिमी == 0) {फाइनलस्ट्रिंग = फाइनलस्ट्रिंग + "मध्यरात्रि"; }

}

शून्य लूप ()

{// आरटीसी बाइट सेकेंड, मिनट, घंटा, डेऑफवीक, डेऑफमोन्थ, महीना, साल से समय प्राप्त करें; getDateDs1307 (और सेकंड, और मिनट, और घंटा, और दिनऑफवीक, और दिनऑफ़माह, और महीना, और वर्ष);

// समय को वाक्य स्ट्रिंग में बदलें

createTextTime (घंटा, मिनट);

// अब डीएमडी को टेक्स्ट भेजें

ड्राटेक्स्ट (फाइनलस्ट्रिंग); }

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

चरण 3:

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

सिफारिश की: