সুচিপত্র:

Arduino স্ক্রোলিং টেক্সট ক্লক: 3 ধাপ
Arduino স্ক্রোলিং টেক্সট ক্লক: 3 ধাপ

ভিডিও: Arduino স্ক্রোলিং টেক্সট ক্লক: 3 ধাপ

ভিডিও: Arduino স্ক্রোলিং টেক্সট ক্লক: 3 ধাপ
ভিডিও: কিভাবে স্ক্রলিং টেক্সট LED ডিসপ্লে তৈরি করবেন (192 LED) 2024, জুলাই
Anonim
Arduino স্ক্রোলিং টেক্সট ক্লক
Arduino স্ক্রোলিং টেক্সট ক্লক

এই প্রকল্পের উদ্দেশ্য হল একটি স্ক্রোলিং টেক্সট ঘড়ি তৈরি করা যা সময়কে যেমন বলা হয় তেমনি প্রদর্শন করে (উদাহরণস্বরূপ, "এটি মধ্যরাত")।

এটি একটি দ্রুত প্রকল্প - আমরা আপনাকে হার্ডওয়্যার এবং স্কেচের সাথে চলার জন্য পর্যাপ্ত পরিমাণ দিই, এবং তারপরে আপনি আপনার প্রয়োজন অনুসারে এটি আরও এগিয়ে নিতে পারেন।

ধাপ 1: হার্ডওয়্যার

হার্ডওয়্যার
হার্ডওয়্যার

আপনার তিনটি প্রধান আইটেম লাগবে -

  • একটি Arduino Uno- সামঞ্জস্যপূর্ণ বোর্ড
  • DS1307 বা DS3231 IC ব্যবহার করে একটি রিয়েল-টাইম ক্লক সার্কিট বা মডিউল
  • এবং একটি একরঙা P10- স্টাইলের LED ডিসপ্লে

আপনি একটি বহিরাগত বিদ্যুৎ সরবরাহ চাইতে পারেন, কিন্তু আমরা পরে এটি পেতে হবে।

প্রথম ধাপ হল আপনার রিয়েল-টাইম ঘড়ির সাথে মানানসই। টিউটোরিয়ালের জন্য এখানে ক্লিক করুন যদি আপনার সাহায্যের প্রয়োজন হয়।

এখন পর্যন্ত আমি আশা করি আপনি ভাবছেন "আপনি কিভাবে সময় নির্ধারণ করবেন?"।

এই প্রশ্নের দুটি উত্তর আছে। যদি আপনি DS3231 ব্যবহার করেন তবে এটি স্কেচে সেট করুন (নীচে দেখুন) যেহেতু নির্ভুলতা খুব ভাল, আপনাকে দিনের আলো সঞ্চয় কভার করতে বছরে কেবল দুবার নতুন সময় দিয়ে স্কেচ আপলোড করতে হবে।

অন্যথায় একটি সহজ ইউজার-ইন্টারফেস যোগ করুন-কয়েকটি বোতাম এটি করতে পারে। অবশেষে আপনাকে শুধু DMD এর পিছনে হার্ডওয়্যার লাগাতে হবে। আপনার নিজের চাহিদা পূরণের প্রচুর সুযোগ রয়েছে, একটি সহজ সমাধান হতে পারে কন্ট্রোল বোর্ডকে সারিবদ্ধ করা যাতে আপনি সহজেই ইউএসবি সকেট অ্যাক্সেস করতে পারেন - এবং তারপরে এটি কিছু সুগ্রু দিয়ে আটকে রাখুন।

ঘড়িকে শক্তি দেওয়ার ক্ষেত্রে - আপনি আরডুইনো থেকে একটি LED ডিসপ্লে চালাতে পারেন এবং এটি অভ্যন্তরীণ ব্যবহারের জন্য একটি ভাল উজ্জ্বলতায় চলে। যদি আপনি চান DMD সম্পূর্ণ, রেটিনা-জ্বলন্ত উজ্জ্বলতায় চলতে পারে তবে আপনাকে একটি পৃথক 5V 4A ডিসি পাওয়ার সাপ্লাই ব্যবহার করতে হবে। আপনি যদি দুটি DMD ব্যবহার করেন - এটি 8A তে যায়, এবং তাই। কেবলমাত্র একটি DMD এর টার্মিনালে বাহ্যিক শক্তিকে সংযুক্ত করুন (এই টার্মিনালে দ্বিতীয় বা তার বেশি DMD সংযুক্ত করুন)।

আপনি যদি আপনার পাওয়ার সাপ্লাই ক্যাবলের শেষটি কাটাতে চান না, তাহলে একটি ডিসি সকেট ব্রেকআউট ব্যবহার করুন।

ধাপ 2: Arduino স্কেচ

আপনাকে নিম্নলিখিত দুটি আরডুইনো লাইব্রেরি ইনস্টল করতে হবে - টাইমারঅন এবং ডিএমডি। তারপর স্কেচ আপলোড করুন:

// RTC এর জন্য #অন্তর্ভুক্ত "Wire.h" #DS1307_I2C_ADDRESS 0x68 // DS1307 RTC হল 0x68

// LED ডিসপ্লের জন্য

#অন্তর্ভুক্ত "SPI.h" #অন্তর্ভুক্ত "DMD.h" #অন্তর্ভুক্ত "TimerOne.h" #অন্তর্ভুক্ত "SystemFont5x7.h" #অন্তর্ভুক্ত "Arial_black_16.h" #সংজ্ঞায়িত DISPLAYS_ACROSS 1 // আপনি একটিতে একাধিক DMD থাকতে পারেন সারি #DisPLAYS_DOWN 1 DMD dmd (DISPLAYS_ACROSS, DISPLAYS_DOWN);

স্ট্রিং finalString; // DMD- এ প্রদর্শনের জন্য চূড়ান্ত বাক্য ধারণ করতে ব্যবহৃত হয়

অকার্যকর ScanDMD () // DMD এর জন্য প্রয়োজন

{dmd.scanDisplayBySPI (); }

অকার্যকর সেটআপ()

{// DMD Timer1.initialize (5000) এর জন্য; Timer1.attachInterrupt (ScanDMD); dmd.clearScreen (সত্য);

// আরটিসির জন্য

Wire.begin (); // I2C বাস বাইট সেকেন্ড, মিনিট, ঘন্টা, ডেঅফ উইক, ডেঅফমোথ, মাস, বছর; // ভেরিয়েবল পরিবর্তন করুন এবং সময় সেট করতে setDateDs1307 অস্বস্তিকর করুন // তারপর ফাংশনটি পুনরায় মন্তব্য করুন এবং স্কেচটি আবার দ্বিতীয় = 0 আপলোড করুন; মিনিট = 13; ঘন্টা = 23; dayOfWeek = 4; dayOfMonth = 19; মাস = 5; বছর = 13; // setDateDs1307 (সেকেন্ড, মিনিট, ঘন্টা, dayOfWeek, dayOfMonth, মাস, বছর); }

// স্বাভাবিক RTC ফাংশন

// সাধারণ দশমিক সংখ্যাগুলিকে বাইনারি কোডেড দশমিক বাইট decToBcd (বাইট ভ্যাল) {রিটার্ন ((val/10*16) + (val%10)) রূপান্তর করুন; }

// বাইনারি কোডেড দশমিককে সাধারণ দশমিক সংখ্যায় রূপান্তর করুন

বাইট bcdToDec (বাইট val) {return ((val/16*10) + (val%16)); }

অকার্যকর setDateDs1307 (বাইট সেকেন্ড, // 0-59

বাইট মিনিট, // 0-59 বাইট ঘন্টা, // 1-23 বাইট দিনঅফ উইক, // 1-7 বাইট দিনঅফমথ, // 1-28/29/বাইট মাস, // 1-12 বাইট বছর) // 0- 99 {Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.write (decToBcd (দ্বিতীয়)); // 0 থেকে বিট 7 ঘড়ি শুরু হয় Wire.write (decToBcd (মিনিট)); Wire.write (decToBcd (ঘন্টা)); Wire.write (decToBcd (dayOfWeek)); Wire.write (decToBcd (dayOfMonth)); Wire.write (decToBcd (মাস)); Wire.write (decToBcd (বছর)); Wire.write (00010000); // রেজিস্টার নিয়ন্ত্রণ করতে 0x10 (হেক্স) 00010000 (বাইনারি) পাঠায় - স্কয়ার ওয়েভ Wire.endTransmission () চালু করে; }

// ds1307 থেকে তারিখ এবং সময় পায়

অকার্যকর getDateDs1307 (বাইট *সেকেন্ড, বাইট *মিনিট, বাইট *ঘন্টা, বাইট *dayOfWeek, বাইট *dayOfMonth, বাইট *মাস, বাইট *বছর) {// রেজিস্টার পয়েন্টার Wire.beginTransmission (DS1307_I2C_ADDRESS) পুনরায় সেট করুন; Wire.write (0); Wire.endTransmission ();

Wire.requestFrom (DS1307_I2C_ADDRESS, 7);

// এর মধ্যে কয়েকটি মাস্কের প্রয়োজন কারণ নির্দিষ্ট বিটগুলি নিয়ন্ত্রণ বিট

*সেকেন্ড = bcdToDec (Wire.read () & 0x7f); *মিনিট = bcdToDec (Wire.read ()); *ঘন্টা = bcdToDec (Wire.read () & 0x3f); // 12 ঘন্টা am/pm *dayOfWeek = bcdToDec (Wire.read ()) হলে এটি পরিবর্তন করতে হবে; *dayOfMonth = bcdToDec (Wire.read ()); *মাস = bcdToDec (Wire.read ()); *বছর = bcdToDec (Wire.read ()); }

অকার্যকর টেক্সট (স্ট্রিং oldString)

{dmd.clearScreen (সত্য); dmd.selectFont (Arial_Black_16); char newString [256]; int sLength = oldString.length (); oldString.toCharArray (newString, sLength+1); dmd.drawMarquee (newString, sLength, (32*DISPLAYS_ACROSS) -1, 0); দীর্ঘ শুরু = মিলিস (); দীর্ঘ টাইমার = শুরু; দীর্ঘ টাইমার 2 = শুরু; বুলিয়ান ret = মিথ্যা; যখন (! ret) {if ((timer+20) <millis ()) {ret = dmd.stepMarquee (-1, 0); টাইমার = মিলিস (); }}}

অকার্যকর createTextTime (int hh, int mm)

// এটি একটি বাক্যে {finalString = "" হিসাবে সব সময় ডেটাকে পাঠ্যে ম্যাসেজ করে; // বিশেষ ক্ষেত্রে (নিচে) finalString = finalString+"It's";

// এখন ঘন্টা যোগ করুন

যদি (hh == 1 || hh == 13) {finalString = finalString+"one"; } যদি (hh == 2 || hh == 14) {finalString = finalString+"two"; } যদি (hh == 3 || hh == 15) {finalString = finalString+"three"; } যদি (hh == 4 || hh == 16) {finalString = finalString+"four"; } যদি (hh == 5 || hh == 17) {finalString = finalString+"five"; } যদি (hh == 6 || hh == 18) {finalString = finalString+"six"; } যদি (hh == 7 || hh == 19) {finalString = finalString+"সাত"; } যদি (hh == 8 || hh == 20) {finalString = finalString+"আট"; } যদি (hh == 9 || hh == 21) {finalString = finalString+"নয়"; } যদি (hh == 10 || hh == 22) {finalString = finalString+"ten"; } যদি (hh == 11 || hh == 23) {finalString = finalString+"এগারো"; }

// এখন মিনিট যোগ করুন

সুইচ (মিমি) {কেস 1: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"ওহ ওয়ান"; বিরতি; কেস 2: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"ওহ টু"; বিরতি; কেস 3: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"ওহ থ্রি"; বিরতি; কেস 4: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"ওহ ফোর"; বিরতি; কেস 5: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"ওহ ফাইভ"; বিরতি; কেস 6: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"ওহ সিক্স"; বিরতি; কেস 7: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"ওহ সেভেন"; বিরতি; কেস 8: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"ওহ এইট"; বিরতি; কেস 9: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"ওহ নাইন"; বিরতি; কেস 10: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"দশ"; বিরতি; কেস 11: finalString = finalString+"এগারো"; বিরতি; কেস 12: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"বারো"; বিরতি; কেস 13: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"তের"; বিরতি; কেস 14: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"চৌদ্দ"; বিরতি; কেস 15: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"পনেরো"; বিরতি; কেস 16: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"ষোলো"; বিরতি; কেস 17: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"সতেরো"; বিরতি; কেস 18: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"আঠারো"; বিরতি; কেস 19: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"উনিশ"; বিরতি; কেস 20: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"বিশ"; বিরতি; কেস 21: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"একুশ"; বিরতি; কেস 22: finalString = finalString+"বাইশ"; বিরতি; কেস 23: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"তেইশ"; বিরতি; কেস 24: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"চব্বিশ"; বিরতি; কেস 25: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"পঁচিশ"; বিরতি; কেস 26: finalString = finalString+"ছাব্বিশ"; বিরতি; কেস 27: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"সাতাশ"; বিরতি; কেস 28: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"আটাশ"; বিরতি; কেস 29: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"উনবিংশ"; বিরতি; কেস 30: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"ত্রিশ"; বিরতি; কেস 31: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"একত্রিশ"; বিরতি; কেস 32: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"বত্রিশ"; বিরতি; কেস 33: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"তেত্রিশ"; বিরতি; কেস 34: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"চৌত্রিশ"; বিরতি; কেস 35: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"পঁয়ত্রিশ"; বিরতি; কেস 36: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"ছত্রিশ"; বিরতি; কেস 37: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"সাতত্রিশ"; বিরতি; কেস 38: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"আটত্রিশ"; বিরতি; কেস 39: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"উনত্রিশ"; বিরতি; কেস 40: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"চল্লিশ"; বিরতি; কেস 41: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"একচল্লিশ"; বিরতি; কেস 42: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"বিয়াল্লিশ"; বিরতি; কেস 43: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"তেতাল্লিশ"; বিরতি; কেস 44: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"চুয়াল্লিশ"; বিরতি; কেস 45: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"পঁয়তাল্লিশ"; বিরতি; কেস 46: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"ছেচল্লিশ"; বিরতি; কেস 47: finalString = finalString+"সাতচল্লিশ"; বিরতি; কেস 48: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"আটচল্লিশ"; বিরতি; কেস 49: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"উনচল্লিশ"; বিরতি; কেস 50: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"পঞ্চাশ"; বিরতি; কেস 51: finalString = finalString+"একান্ন"; বিরতি; কেস 52: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"বাহান্ন"; বিরতি; কেস 53: finalString = finalString+"তেত্রিশ"; বিরতি; কেস 54: finalString = finalString+"চুয়ান্ন"; বিরতি; কেস 55: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"পঞ্চান্ন"; বিরতি; কেস 56: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"ছাপ্পান্ন"; বিরতি; কেস 57: finalString = finalString+"সাতান্ন"; বিরতি; কেস 58: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"আটান্ন"; বিরতি; কেস 59: ফাইনাল স্ট্রিং = ফাইনাল স্ট্রিং+"পঞ্চান্ন"; বিরতি; }

// দুপুর?

যদি (hh == 12 && mm == 0) {finalString = finalString+"midday"; } // মধ্যরাত? যদি (hh == 00 && mm == 0) {finalString = finalString+"midnight"; }

}

অকার্যকর লুপ ()

{// RTC বাইট সেকেন্ড, মিনিট, ঘন্টা, dayOfWeek, dayOfMonth, মাস, বছর থেকে সময় পান; getDateDs1307 (এবং সেকেন্ড, এবং মিনিট, & ঘন্টা, & dayOfWeek, & dayOfMonth, & month, & year);

// সময়কে একটি বাক্যের স্ট্রিংয়ে রূপান্তর করুন

createTextTime (ঘন্টা, মিনিট);

// এখন DMD কে পাঠ্য পাঠান

drawText (finalString); }

DS1307/3232 রিয়েল-টাইম ক্লক আইসি থেকে সময় নির্ধারণ এবং পুনরুদ্ধারের জন্য স্কেচের স্বাভাবিক কাজ রয়েছে, এবং স্বাভাবিকভাবেই আমাদের সমস্ত ঘড়ির সাথে আপনি অকার্যকর সেটআপ () -এ ভেরিয়েবলের মধ্যে সময়ের তথ্য প্রবেশ করতে পারেন, তারপর অসম্পূর্ণ setDateDs1307 (), স্কেচ আপলোড করুন, setDateDs1307 পুনরায় মন্তব্য করুন, তারপর আরো একবার স্কেচ আপলোড করুন। যদি আপনি কোন হার্ডওয়্যার-ভিত্তিক ইউজার ইন্টারফেস যোগ না করেন তবে সময়টি পুনরায় সেট করার জন্য সেই প্রক্রিয়াটি পুনরাবৃত্তি করুন।

ধাপ 3:

একবার অকার্যকর লুপ () এ সময় পুনরুদ্ধার করা হলে, এটি ফাংশন createTextTime () এ প্রেরণ করা হয়। এই ফাংশনটি "এটি" দিয়ে শুরু করে প্রদর্শন করার জন্য টেক্সট স্ট্রিং তৈরি করে, এবং তারপর বর্তমান সময়ের উপর নির্ভর করে কোন শব্দগুলি অনুসরণ করতে হবে তা নির্ধারণ করে। অবশেষে ফাংশন drawText () টেক্সট ধরে থাকা স্ট্রিংটিকে একটি ক্যারেক্টার ভেরিয়েবলে প্রদর্শন করতে রূপান্তরিত করে যা DMD- এ পাঠানো যায়।

প্রস্তাবিত: