সুচিপত্র:

Arduino সঙ্গে বাস্তব সময় ঘড়ি: 3 ধাপ
Arduino সঙ্গে বাস্তব সময় ঘড়ি: 3 ধাপ

ভিডিও: Arduino সঙ্গে বাস্তব সময় ঘড়ি: 3 ধাপ

ভিডিও: Arduino সঙ্গে বাস্তব সময় ঘড়ি: 3 ধাপ
ভিডিও: ELF/EMBARC Bronchiectasis conference 2023 with subtitles 2024, নভেম্বর
Anonim
Arduino সঙ্গে রিয়েল টাইম ঘড়ি
Arduino সঙ্গে রিয়েল টাইম ঘড়ি

এই প্রকল্পে, আমরা Arduino এবং RTC মডিউলের সাহায্যে একটি ঘড়ি তৈরি করব। যেহেতু আমরা জানি Arduino প্রকৃত সময় প্রদর্শন করতে পারে না তাই আমরা LCD- তে সঠিক সময় প্রদর্শন করতে RTC মডিউল ব্যবহার করব। সমস্ত ধাপ সাবধানে পড়ুন এটি আপনাকে ঘড়ির কাজ করতে অনেক সাহায্য করবে।

DS3231 Arduino কোডটি DS1307 কোডের মত এবং এটি উভয় RTC চিপের সাথে কাজ করে।

নীচের Arduino কোডটি DS3231 RTC এর জন্য কোন লাইব্রেরি ব্যবহার করে না, ওয়্যার লাইব্রেরি হল Arduino এবং DS3231 এর মধ্যে I2C কনভেনশন ব্যবহার করে চিঠিপত্রের জন্য।

হ্যাঁ! অনেক ইলেকট্রনিক্স ইঞ্জিনিয়ার তাদের সময় ভিত্তিক প্রকল্পের জন্য এর উপর নির্ভর করে কিন্তু RTC সম্পূর্ণ নির্ভরযোগ্য নয়। এটি ব্যাটারি চালিত এবং শীঘ্রই বা পরে প্রতিস্থাপন করতে হবে। আইওটি প্রকল্পে আসছে এটি মূল্যবান এসপিআই (সিরিয়াল পেরিফেরাল ইন্টারফেস) পিন দখল করে এবং চারপাশে জড়িয়ে থাকা তারের সাথে নোংরা হয়ে যায়। সমাধান …. এখানে আমাদের নায়ক এনটিপি (নেটওয়ার্ক টাইম প্রোটোকল) আসে। আমরা একটি ক্লায়েন্ট-সার্ভার মোড ব্যবহার করে এই প্রোটোকলটি পরিচালনা করতে যাচ্ছি। প্রক্রিয়াটি এত সহজ যে আমাদের Nodemcu ক্লায়েন্ট হিসাবে কাজ করে এবং UDP ব্যবহার করে সার্ভার থেকে একটি NTP প্যাকেট অনুরোধ করে। বিনিময়ে, সার্ভার ক্লায়েন্টকে একটি প্যাকেট পাঠায় যা ডেটা পার্স করে। এনটিপি হল সার্বজনীন সময় সিঙ্ক্রোনাইজেশন প্রোটোকল। এখন আমাদের ল্যাব ওয়ার্ক স্টেশনটি আলোকিত করা যাক

ধাপ 1: প্রয়োজনীয় উপাদান

  • আরডুইনো বোর্ড
  • DS3231 RTC বোর্ড
  • 16x2 LCD স্ক্রিন
  • 2 এক্স পুশ বোতাম
  • 10K ওহম পরিবর্তনশীল প্রতিরোধক (বা potentiometer)
  • 330-ওহম প্রতিরোধক
  • 3V কয়েন সেল ব্যাটারি
  • ব্রেডবোর্ড
  • জাম্পার তার

RTC mocule DS3231

মানুষের এই দ্রুতগতির বিশ্বে সময় একটি প্রয়োজনীয় অনুভূতি। রিয়েলটাইম প্রকল্পে

আমরা RTC (A. K. A রিয়েল-টাইম ঘড়ি) ব্যবহার করি

আরটিসি রিয়েল-টাইম-ক্লক (আরটিসি) হল একটি ইন্টিগ্রেটেড সার্কিট (আইসি) যা বর্তমান সময়ের উপর নজর রাখে। আরটিসি রিয়েল মোডে সময়ের যত্ন নেয়। আরটিসি সাধারণত কম্পিউটার মাদারবোর্ড এবং এমবেডেড সিস্টেমে পাওয়া যায় যাতে সময়মত অ্যাক্সেস প্রয়োজন হয়।

ধাপ 2: Arduino ঘড়ি সংযোগ

Arduino ঘড়ি সংযোগ
Arduino ঘড়ি সংযোগ
  • আরসিইউ পিনকে আরটিসি মডিউলে আরডুইনো এ 5 এর সাথে সংযুক্ত করুন
  • Arduino A4 এর সাথে RTC মডিউলে SDA পিন সংযুক্ত করুন
  • VCC থেকে 5v এবং GND থেকে GND সংযোগ করুন
  • একটি pushbutton পিন 8 সংযুক্ত করুন
  • পিন 9 এর সাথে আরেকটি পুশ বাটন সংযুক্ত করুন
  • Arduino এর 2 পিন করতে LCD এর RS সংযুক্ত করুন
  • Arduino এর 3 পিন করতে LCD এর E সংযোগ করুন
  • LCD এর D7 কে Arduino এর 7 পিনে সংযুক্ত করুন
  • Arduino এর 6 পিন করতে LCD এর D6 সংযোগ করুন
  • Arduino এর 5 পিন করতে LCD এর D5 সংযোগ করুন
  • Arduino এর 4 পিন করতে LCD এর D4 সংযোগ করুন
  • VSS & K কে GND এর সাথে সংযুক্ত করুন
  • VDD & A কে 5v এর সাথে সংযুক্ত করুন
  • Vo কে potentiometer আউটপুট পিনের সাথে সংযুক্ত করুন

ধাপ 3: আরটিসির সাথে আরডুইনো ক্লকের কোড

আরটিসির সাথে আরডুইনো ঘড়ির কোড
আরটিসির সাথে আরডুইনো ঘড়ির কোড

DS3231 শুধুমাত্র BCD ফরম্যাটের সাথে কাজ করে এবং BCD কে দশমিক রূপে রূপান্তর করতে এবং এর বিপরীতে আমি নিচের 2 লাইন ব্যবহার করেছি (উদাহরণস্বরূপ মিনিটের জন্য): // BCD কে দশমিক মিনিটে রূপান্তর করুন = (মিনিট >> 4) * 10 + (মিনিট এবং 0x0F);

// দশমিককে BCD মিনিটে রূপান্তর করুন = ((মিনিট / 10) << 4) + (মিনিট % 10); void DS3231_display (): সময় এবং ক্যালেন্ডার প্রদর্শন করে, সময় প্রদর্শনের আগে এবং ক্যালেন্ডার ডেটা BCD থেকে দশমিক বিন্যাসে রূপান্তরিত হয়।

// DS3231 এবং Arduino ব্যবহার করে সেট বোতাম সহ রিয়েল টাইম ক্লক এবং ক্যালেন্ডার // এলসিডি লাইব্রেরি কোড অন্তর্ভুক্ত করুন #অন্তর্ভুক্ত // ওয়্যার লাইব্রেরি কোড অন্তর্ভুক্ত করুন (I2C প্রোটোকল ডিভাইসের জন্য প্রয়োজন) #অন্তর্ভুক্ত // এলসিডি মডিউল সংযোগ (RS, E, D4, D5, D6, D7) LiquidCrystal lcd (2, 3, 4, 5, 6, 7); অকার্যকর সেটআপ () {পিনমোড (8, INPUT_PULLUP); // button1 পিন 8 pinMode (9, INPUT_PULLUP) এর সাথে সংযুক্ত; // button2 পিন 9 এর সাথে সংযুক্ত আছে // LCD এর কলাম এবং সারির সংখ্যা lcd.begin (16, 2) সেট আপ করুন; Wire.begin (); // যোগ দিন i2c bus} char Time = "TIME:::"; char Calendar = "DATE: / / 20"; বাইট i, সেকেন্ড, মিনিট, ঘন্টা, তারিখ, মাস, বছর; অকার্যকর DS3231_display () {// BCD কে দশমিক সেকেন্ডে রূপান্তর করুন = (দ্বিতীয় >> 4) * 10 + (দ্বিতীয় এবং 0x0F); মিনিট = (মিনিট >> 4) * 10 + (মিনিট এবং 0x0F); ঘন্টা = (ঘন্টা >> 4) * 10 + (ঘন্টা & 0x0F); তারিখ = (তারিখ >> 4) * 10 + (তারিখ এবং 0x0F); মাস = (মাস >> 4) * 10 + (মাস & 0x0F); বছর = (বছর >> 4) * 10 + (বছর এবং 0x0F); // শেষ রূপান্তর সময় [12] = দ্বিতীয় % 10 + 48; সময় [11] = সেকেন্ড / 10 + 48; সময় [9] = মিনিট % 10 + 48; সময় [8] = মিনিট / 10 + 48; সময় [6] = ঘন্টা % 10 + 48; সময় [5] = ঘন্টা / 10 + 48; ক্যালেন্ডার [14] = বছর % 10 + 48; ক্যালেন্ডার [13] = বছর / 10 + 48; ক্যালেন্ডার [9] = মাস % 10 + 48; ক্যালেন্ডার [8] = মাস / 10 + 48; ক্যালেন্ডার [6] = তারিখ % 10 + 48; ক্যালেন্ডার [5] = তারিখ / 10 + 48; lcd.setCursor (0, 0); lcd.print (সময়); // ডিসপ্লে টাইম lcd.setCursor (0, 1); lcd.print (ক্যালেন্ডার); // প্রদর্শন ক্যালেন্ডার} অকার্যকর blink_parameter () {বাইট j = 0; যখন (j 23) // যদি ঘন্টা> 23 ==> ঘন্টা = 0 প্যারামিটার = 0; যদি (i == 1 && প্যারামিটার> 59) // যদি মিনিট> 59 ==> মিনিট = 0 প্যারামিটার = 0; যদি (i == 2 && প্যারামিটার> 31) // যদি তারিখ> 31 ==> তারিখ = 1 প্যারামিটার = 1; যদি (i == 3 && প্যারামিটার> 12) // যদি মাস> 12 ==> মাস = 1 প্যারামিটার = 1; যদি (i == 4 && প্যারামিটার> 99) // যদি বছর> 99 ==> বছর = 0 প্যারামিটার = 0; sprintf (টেক্সট, "%02u", প্যারামিটার); lcd.setCursor (x, y); lcd.print (টেক্সট); বিলম্ব (200); // অপেক্ষা করুন 200ms} lcd.setCursor (x, y); lcd.print (""); // দুটি স্পেস blink_parameter () প্রদর্শন করুন; sprintf (টেক্সট, "%02u", প্যারামিটার); lcd.setCursor (x, y); lcd.print (টেক্সট); blink_parameter (); if (! digitalRead (8)) {// if বাটন (পিন #8) চাপলে i ++; // পরবর্তী প্যারামিটার রিটার্ন প্যারামিটারের জন্য 'i' বৃদ্ধি; // রিটার্ন প্যারামিটার মান এবং প্রস্থান করুন}}} অকার্যকর লুপ () {যদি (! DigitalRead (8)) {// যদি বোতাম (পিন #8) টিপানো হয় i = 0; ঘন্টা = সম্পাদনা (5, 0, ঘন্টা); মিনিট = সম্পাদনা (8, 0, মিনিট); তারিখ = সম্পাদনা (5, 1, তারিখ); মাস = সম্পাদনা (8, 1, মাস); বছর = সম্পাদনা (13, 1, বছর); // দশমিককে BCD মিনিটে রূপান্তর করুন = ((মিনিট / 10) << 4) + (মিনিট % 10); ঘন্টা = ((ঘন্টা / 10) << 4) + (ঘন্টা % 10); তারিখ = ((তারিখ / 10) << 4) + (তারিখ % 10); মাস = ((মাস / 10) << 4) + (মাস % 10); বছর = ((বছর / 10) << 4) + (বছর % 10); // শেষ রূপান্তর // DS3231 RTC Wire.beginTransmission (0x68) এ ডেটা লিখুন; // DS3231 ঠিকানা Wire.write (0) দিয়ে I2C প্রোটোকল শুরু করুন; // নিবন্ধন ঠিকানা পাঠান Wire.write (0); // sesonds রিসেট করুন এবং অসিলেটর Wire.write (মিনিট) শুরু করুন; // মিনিট Wire.write (ঘন্টা) লিখুন; // লিখুন ঘন্টা Wire.write (1); // দিন লিখুন (ব্যবহৃত নয়) Wire.write (তারিখ); // তারিখ লিখুন Wire.write (মাস); // লিখুন মাস Wire.write (বছর); // লিখুন বছর Wire.endTransmission (); // সংক্রমণ বন্ধ করুন এবং I2C বাস বিলম্ব (200) ছেড়ে দিন; // অপেক্ষা করুন 200ms} Wire.beginTransmission (0x68); // DS3231 ঠিকানা Wire.write (0) দিয়ে I2C প্রোটোকল শুরু করুন; // নিবন্ধন ঠিকানা পাঠান Wire.endTransmission (মিথ্যা); // I2C Wire.requestFrom (0x68, 7) থেকে পুনরায় চালু করুন; // DS3231 থেকে 7 বাইটের অনুরোধ করুন এবং দ্বিতীয় পড়ার শেষে I2C বাস ছেড়ে দিন = Wire.read (); // রেজিস্টার 0 মিনিট = Wire.read () থেকে সেকেন্ড পড়ুন; // রেজিস্টার থেকে মিনিট পড়ুন 1 ঘন্টা = Wire.read (); // রেজিস্টার 2 Wire.read () থেকে ঘন্টা পড়ুন; // রেজিস্টার 3 থেকে দিন পড়ুন (ব্যবহার করা হয়নি) তারিখ = Wire.read (); // রেজিস্টার থেকে পড়ার তারিখ 4 মাস = Wire.read (); // রেজিস্টার থেকে পড়ার মাস 5 বছর = Wire.read (); // রেজিস্টার থেকে পড়ার বছর 6 DS3231_display (); // ডায়প্লে সময় এবং ক্যালেন্ডার বিলম্ব (50); // 50ms অপেক্ষা করুন}

প্রস্তাবিত: