সুচিপত্র:

Magicbit (Arduino) ব্যবহার করে স্মার্ট এলার্ম ঘড়ি: 10 টি ধাপ
Magicbit (Arduino) ব্যবহার করে স্মার্ট এলার্ম ঘড়ি: 10 টি ধাপ

ভিডিও: Magicbit (Arduino) ব্যবহার করে স্মার্ট এলার্ম ঘড়ি: 10 টি ধাপ

ভিডিও: Magicbit (Arduino) ব্যবহার করে স্মার্ট এলার্ম ঘড়ি: 10 টি ধাপ
ভিডিও: Connecting with Arduino IDE 2024, জুলাই
Anonim
Image
Image

এই টিউটোরিয়ালটি দেখায় যে কিভাবে কোন RTC মডিউল ব্যবহার না করে ম্যাজিকবিট ডেভ বোর্ডে OLED ডিসপ্লে ব্যবহার করে স্মার্ট এলার্ম ঘড়ি তৈরি করা যায়।

সরবরাহ

  • ম্যাজিকবিট
  • ইউএসবি-এ থেকে মাইক্রো-ইউএসবি কেবল

ধাপ 1: গল্প

এই টিউটোরিয়ালে আমরা শিখব কিভাবে ম্যাজিকবিট ব্যবহার করে স্মার্ট এলার্ম ঘড়ি তৈরি করা যায়।

পদক্ষেপ 2: হার্ডওয়্যার সেটআপ

ইউএসবি কেবল ব্যবহার করে কম্পিউটারে আপনার ম্যাজিকবিট লাগান।

ধাপ 3: সফটওয়্যার সেটআপ

আপনার Arduino IDE খুলুন এবং Arduino IDE দিয়ে বোর্ড সেটআপ করুন। নিম্নলিখিত লিঙ্কটি কীভাবে এটি করতে হবে তা নির্দেশ করে। তাই আমরা আপনাকে সুপারিশ করছি যে প্রথমে লিঙ্কটিতে যান এবং ম্যাজিক বিটের সাথে পরিচিত হন।

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

এখন সঠিক বোর্ড টাইপ এবং পোর্ট নির্বাচন করুন। এক্ষেত্রে বোর্ডের ধরন হল ম্যাজিকবিট। ম্যাজিকবিট লাইব্রেরিতে যখন লাইব্রেরিগুলি ইতিমধ্যেই ইনস্টল করা আছে।

ধাপ 4: তত্ত্ব এবং পদ্ধতি

আপনি যদি প্রথম ভিডিওটি দেখেন, আপনি দেখতে পাবেন ডিসপ্লেতে 2 টি স্ক্রিন রয়েছে।

  • ঘড়ির পর্দা যা সময় বিস্তারিত দেখায়
  • অ্যালার্ম স্ক্রিন যা অ্যালার্মের বিবরণ দেখায়

এই দুটি স্ক্রিনের মধ্যে টগল করার জন্য আমরা ম্যাজিকবিটে দুটি পুশ বোতাম ব্যবহার করেছি। এই বোতামগুলি ম্যাজিকবিটে ESP32 এর 35 (বাম বোতাম) এবং 34 (ডান বোতাম) পিনের সাথে সংযুক্ত। সময় এবং অন্যান্য বিবরণ দেখানোর জন্য আমরা ম্যাজিকবিটে বিল্টইন OLED ডিসপ্লে ব্যবহার করেছি।

এই গ্রাফিক স্ক্রিনগুলি কীভাবে কাজ করে সে সম্পর্কে কথা বলা যাক।

ঘড়ির পর্দায় এনালগ ঘড়ি, ডিজিটাল ঘড়ি, তারিখ, মাস এবং বছরের পাঠ্য রয়েছে।

এনালগ ঘড়ি তৈরির জন্য আমরা কিছু গ্রাফিক্স ফাংশন ব্যবহার করি যা গ্রাফিক্স লাইব্রেরিতে অ্যাডাফ্রিউট জিএফএক্স নামে পাওয়া যায়। সার্কেল ফাংশন এবং লাইন ফাংশন ব্যবহার করে আমরা এনালগ ক্লক ফেস তৈরি করি। পাপ এবং cos নামক সাধারণ জ্যামিতিক ফাংশন ঘড়ির হাতের অবস্থানের জন্য ব্যবহার করা হয়। সুতরাং আমরা কেবল সেই কোণটি ইনপুট করি যা হাত ঘোরানোর জন্য সময়ের সাথে মিলে যায়। তার জন্য আমরা প্রথমে নিম্নরূপ সময়কে কোণে রূপান্তর করি।

  • মিনিট হাতের কোণ = মিনিট*(360/60)
  • ঘন্টার হাতের কোণ = ঘন্টা*(360/12)

ঘড়ির মুখের কেন্দ্র এবং ঘড়ির মুখের 12 নম্বরের মধ্যবর্তী রেখার পরিমাপে কোণ পরিমাপ করা হয়। নীচের ছবিটি বর্ণনা করছে কিভাবে এটি করছে।

স্থানাঙ্ক অনুসারে আমরা ঘন্টা এবং মিনিট হাতে আঁকা রেখা দ্বারা মুদ্রণ করি। অ্যাডাফ্রুট জিএফএক্স লাইব্রেরিতে টেক্সট প্রিন্ট ফাংশন রয়েছে। এটি ডিসপ্লেতে অন্যান্য বিবরণ (তারিখ, মাস এবং সময় প্রদর্শন) মুদ্রণ করতে সাহায্য করে। আপনি কোডের প্যারামিটার পরিবর্তন করে এনালগ ঘড়ির অবস্থান এবং পাঠ্যের অবস্থান পরিবর্তন করতে পারেন।

ঘড়ির স্ক্রিনের মতো আমরা উপযুক্ত জায়গায় OLED ডিসপ্লেতে মুদ্রণ সংখ্যার জন্য Adafruit GFX লাইব্রেরিতে টেক্সট প্রিন্ট ফাংশন ব্যবহার করেছি।

ধাপ 5: স্থানীয় সময় পাওয়া

ঘড়ির সবচেয়ে গুরুত্বপূর্ণ অংশ হল কিভাবে আমরা স্থানীয় সময় সঠিকভাবে পাই। সেই উদ্দেশ্যে আপনি বহিরাগত RTC ঘড়ি মডিউল ব্যবহার করতে পারেন অথবা ম্যাজিকবিটে ESP32 এ অন্তর্নির্মিত RC ঘড়ি ব্যবহার করতে পারেন। এই প্রকল্পে আমরা দ্বিতীয় পদ্ধতি ব্যবহার করেছি। এই পদ্ধতিতে আমরা ইন্টারনেট থেকে স্থানীয় সময় পাওয়ার জন্য NTP (নেটওয়ার্ক টাইম প্রোটোকল) ক্লায়েন্ট ব্যবহার করি। ইন্টারনেট ব্যবহারের জন্য আমরা ESP32 এ অন্তর্নির্মিত ওয়াইফাই সুবিধা ব্যবহার করেছি। তাই প্রথম পর্যায়ে আমরা SSID এবং পাসওয়ার্ড প্রদান করে ইন্টারনেটে প্রবেশের জন্য WIFI ব্যবহার করি। তারপরে আমাদের gmtOffset এবং daylightOffset কে সেকেন্ডের মধ্যে ভেরিয়েবলে কনফিগার করা উচিত। এই ভেরিয়েবলের মানগুলি বিশ্বের অঞ্চলভেদে ভিন্ন। gmtOffset মানে সেকেন্ডের সংখ্যা যা আপনি GMT এর থেকে আলাদা.. বেশিরভাগ ক্ষেত্রে দিনের আলো অফসেট 3600। আপনি এটি ইন্টারনেটে খুঁজে পেতে পারেন। বর্তমান স্থানীয় সময় পাওয়ার পর আমরা আর ওয়াইফাই ব্যবহার করিনি। কারণ তখন আমরা ESP32 এর অন্তর্নির্মিত RC ঘড়ি থেকে স্থানীয় সময় গণনা করি। এটি time.h লাইব্রেরি ব্যবহার করে করা হয়। Arduino (Arduino> Examples> ESP32> Time> simpletime) এর সহজ উদাহরণ আছে যাতে আপনি এটি আরও কিভাবে কাজ করে সে সম্পর্কে জানতে পারেন। এছাড়াও এই লিঙ্কগুলি আপনি এনটিপি ক্লায়েন্ট সম্পর্কে আরও জ্ঞানের জন্য ব্যবহার করতে পারেন।

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

স্থানীয় সময় সঠিকভাবে পাওয়ার পর, আমরা প্রতিটি লুপে সেই সময় তথ্য অনুযায়ী পাঠ্য এবং কোণ দেখিয়ে আমাদের সময় পরিবর্তন করি।

ধাপ 6: অ্যালার্ম সেট করা

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

ধাপ 7: বুজার সেট আপ করা

আমরা কোডে analogCwrite () ফাংশন ব্যবহার করে বাজারের শব্দ তৈরি করতে PWM পালস ব্যবহার করি। সমস্ত লাইব্রেরির ফাংশন ইএসপি 32 -এ থাকায় ম্যাজিকবিটের জন্য বৈধ। আপনি কোডের ফ্রিকোয়েন্সি এবং PWM মান পরিবর্তন থেকে বাজারের বিপ শব্দ পরিবর্তন করতে পারেন।

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

এই পৃষ্ঠাটি ESP32 এর সাথে কিভাবে বুজার কাজ করে সে সম্পর্কে বর্ণনা করে।

ধাপ 8: বোতাম সেট আপ

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

নতুনদের জন্য মৌলিক ফাংশন ব্যবহার করে কোড লেখা হয়। সুতরাং কোডটি বোঝা সহজ এবং আপনি কোডটি উল্লেখ করে এটি কীভাবে কাজ করে তা শিখতে পারেন।

ধাপ 9: সমস্যা সমাধান

কিছু সময় ঘড়ি একটু পরে শুরু হয় বা এটি গ্রাফিক্স সঠিকভাবে প্রদর্শন করে না। নিম্নলিখিত টিপস পরিস্থিতি সমাধান করতে সাহায্য করে।

  • আপনি সঠিক SSID এবং পাসওয়ার্ড দিয়েছেন তা নিশ্চিত করুন
  • এনটিপি সার্ভার পরিবর্তন করুন (আপনি ইন্টারনেট থেকে অনেক সার্ভার খুঁজে পেতে পারেন যা আপনার অঞ্চলের সাথে সম্পর্কিত)।
  • ইন্টারনেট সংযোগ পরিবর্তন করে। (মোবাইল হটস্পটও সম্ভব)।

এছাড়াও আপনি সিরিয়াল মনিটর ব্যবহার করে সবকিছু সমস্যার সমাধান করতে পারেন। OLED ডিসপ্লে সিরিয়াল মনিটর ছাড়াও সময় তথ্য দেখায়।

ধাপ 10: Arduino কোড

// OLED প্রদর্শনের জন্য লাইব্রেরি

#অন্তর্ভুক্ত

#ইনক্লুড #ইনক্লুড #ডিফাইন OLED_RESET 4 #ইনক্লুড // ওয়াইফাই লাইব্রেরি কানেক্ট করার জন্য #ইনক্লুড "টাইম। এইচ" // লাইব্রেরি ব্যবহারের জন্য আরসি ক্লক // ইনপুট এবং আউটপুট পিন নাম নির্ধারণ করুন #ডান বাটন 34 #ডিফাইন লেফট বাটন 35 #ডিফাইন গ্রিন এলইডি 16 #সংজ্ঞায়িত করুন Buzzer 25 int preTime = 0; int গণনা = 0; int currentTime = 0; struct tm timeinfo; const char* ssid = "YOUR SSID"; // wifi details const char* password = "আপনার পাসওয়ার্ড"; int alarmDateTime [5] = {1, 1, 2020, 0, 0}; // এলার্ম পরিবর্তনশীল int dateIndex = 0; int timeIndex = 0; + selectIndex = -1; bool buzzerOn = 0; int rect [6] [4] = {{5, 0, 118, 16}, {1, 22, 30, 22}, {37, 22, 30, 22}, {73, 22, 55, 22}, {31, 44, 30, 20}, {67, 44, 30, 20}}; // নির্বাচন আয়তক্ষেত্র const char* ntpServer = "asia.pool.ntp.org"; // সার্ভার detais const long gmtOffset_sec = 19800; const int daylightOffset_sec = 0; Adafruit_SSD1306 ডিসপ্লে (128, 64); // OLED সাইজ সংজ্ঞায়িত করে বাইট ক্লক সেন্টারওয়াই = (display.height () + 16)/2; বাইট ক্লক রেডিয়াস = 23; বুল স্টেট = 0; // স্ক্রিন চালু বা বন্ধ চার দিন সংখ্যা [3]; চার মাস [10]; চার বছর [5]; চার ঘন্টা [3]; চার মিনিট [3]; চার মাসের সংখ্যা [3]; চার সেকেন্ড [3]; // বোতাম ভেরিয়েবল বুল রাইট স্টেট = 1; বুল বাম রাজ্য = 1; // বুজার ভেরিয়েবল int চ্যানেল = 0; int ফ্রিকোয়েন্সি = 2000; int PWM = 200; int রেজোলিউশন = 8; অকার্যকর সেটআপ () {// সেট ইনপুট এবং আউটপুট পিনমোড (ডান বোতাম, ইনপুট); pinMode (LeftButton, INPUT); pinMode (GreenLED, OUTPUT); পিনমোড (বুজার, আউটপুট); display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // intialize display display.display (); বিলম্ব (3000); display.clearDisplay (); ledcSetup (0, ফ্রিকোয়েন্সি, রেজোলিউশন); // কনফিগার pwm পরামিতি ledcAttachPin (Buzzer, 0); Serial.begin (115200); // সিরিয়াল কমিউনিকেশন intilize // WiFi Serial.printf (" %s এর সাথে সংযোগ করা", ssid) এর সাথে সংযোগ স্থাপন করুন; WiFi.begin (ssid, password); যখন (WiFi.status ()! = WL_CONNECTED) {বিলম্ব (500); সিরিয়াল.প্রিন্ট ("।"); } Serial.println ("CONNECTED"); // init এবং সময় configTime পান (gmtOffset_sec, daylightOffset_sec, ntpServer); সময় পেতে(); // ওয়াইফাই সংযোগ বিচ্ছিন্ন করুন কারণ এটি আর WiFi.disconnect (সত্য) প্রয়োজন নেই; WiFi.mode (WIFI_OFF); display.clearDisplay (); } void loop () {getTime (); // get current time // store right and left pushbutton states RightState = digitalRead (RightButton); LeftState = digitalRead (LeftButton); // চেক করুন বাটনগুলিকে চাপ দেওয়া হয় যদি (RightState == 0 || LeftState == 0) {ledcWrite (0, 200); // যখন বোতাম টিপানো হয় তখন বজার বের করে বীপ সাউন্ড বিলম্ব (100); যদি (state == 0) {// এলার্ম স্ক্রিন ফ্রেমে অবস্থা পরিবর্তন = 1; // অবস্থা পরিবর্তন করে এলার্ম অবস্থায় রাইট স্টেট = LeftState = 1; // আমাদের কেবল পরিবর্তন দৃশ্য প্রয়োজন} গণনা = 0; // রিসেট কাউন্টার} যদি (state == 1 && (counts) <5) {// যদি অ্যালার্ম স্ক্রিনে থাকে এবং কোন সময়সীমা নেই calcAlarm (); // অ্যালার্ম ইনফর্মেটনের showAlarm (); // show মান} এর সময় মান গণনা করুন অন্য {// যদি ঘড়িতে থাকে পর্দার অবস্থা = 0; display.clearDisplay (); clockFace (); // analog clock face printLocalTime (); // প্রিন্ট টাইম ক্লক ফেসে এবং অন্যান্য ডিটেইল প্রিন্ট করুন} onAlarm (); // এলার্ম টাইম তুলনা করুন স্থানীয় সময়ের সাথে এবং অ্যালার্ম বিলম্ব চালু করুন (100); // বিলম্বের জন্য অ্যালার্ম চালু এবং বন্ধ} অকার্যকর ক্লকফেস () {// ক্যালগ ক্লক ফেস ডিসপ্লে। DrawCircle (clockCenterX, clockCenterY, clockRadius, WHITE); selctions.so রিসেট -1 (-1 = অ্যালার্ন চালু বা বন্ধ) SelectIndex = -1; } dateAndTimeSelection (selectIndex); // change selction} void dateAndTimeSelection (int index) {if (index == -1) {// এলার্ম চালু বা বন্ধ যদি (RightState == 0) {// টগল চালু এবং বন্ধের মধ্যে (alarmState == "Alarm ON") {alarmState = "Alarm OFF"; } অন্যথায় {alarmState = "Alarm ON"; }}} অন্য {যদি (RightState == 0) {// অন্যান্য অংশে অ্যারে অ্যালার্ম ডেটেটাইম [সূচক] = এলার্ম ডেটটাইম [সূচক] + 1; // সূচী হল নির্বাচন}} int compare [4] = {12, 2030, 23, 59}; // তারিখ ও বছরের উচ্চ সীমা int comparemonth [12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // মাসের উপরের লিমিটে int resetValue [4] = {1, 2020, 0, 0}; // এর জন্য প্রারম্ভিক মান (int i = 1; i তুলনা [i - 1]) {alarmDateTime = resetValue [i - 1]; }} if (alarmDateTime [0]> comparemonth [alarmDateTime [1] - 1]) {// vlaues রিসেট করুন যদি মাসগুলি তাদের সীমার চেয়ে বড় হয় alarmDateTime [0] = 1; }} অকার্যকর showAlarm () {// মুদ্রণ এলার্ম বিস্তারিত স্ট্রিং alarmDateTime0 = স্ট্রিং (alarmDateTime [0]); // স্ট্রিং alarmDateTime1 = স্ট্রিং (alarmDateTime [1]) দেখাতে রূপান্তর করুন; স্ট্রিং alarmDateTime2 = স্ট্রিং (alarmDateTime [2]); স্ট্রিং alarmDateTime3 = স্ট্রিং (alarmDateTime [3]); স্ট্রিং alarmDateTime4 = স্ট্রিং (alarmDateTime [4]); // যদি মানগুলির একটি 1 ডিজিট থাকে তবে তাদের সাথে "0" যোগ করুন। যদি (alarmDateTime [0]

প্রস্তাবিত: