সুচিপত্র:

একটি সসীম রাজ্য মেশিন ব্যবহার করে আরডুইনোতে ডিজিটাল ওয়াচ: 6 টি ধাপ
একটি সসীম রাজ্য মেশিন ব্যবহার করে আরডুইনোতে ডিজিটাল ওয়াচ: 6 টি ধাপ

ভিডিও: একটি সসীম রাজ্য মেশিন ব্যবহার করে আরডুইনোতে ডিজিটাল ওয়াচ: 6 টি ধাপ

ভিডিও: একটি সসীম রাজ্য মেশিন ব্যবহার করে আরডুইনোতে ডিজিটাল ওয়াচ: 6 টি ধাপ
ভিডিও: হাই টেনশন লাইন কিভাবে কাজ করে || How Transmission Power Line Works 2024, নভেম্বর
Anonim
একটি সীমাবদ্ধ রাজ্য মেশিন ব্যবহার করে আরডুইনোতে ডিজিটাল ওয়াচ
একটি সীমাবদ্ধ রাজ্য মেশিন ব্যবহার করে আরডুইনোতে ডিজিটাল ওয়াচ

আরে, আমি আপনাকে দেখাবো কিভাবে YAKINDU স্টেটচার্ট টুল দিয়ে একটি ডিজিটাল ঘড়ি তৈরি করা যায় এবং একটি Arduino তে চালানো যায়, যা একটি LCD কীপ্যাড শিল্ড ব্যবহার করে।

ডিজিটাল ঘড়ির আসল মডেল ডেভিড হারেল থেকে নেওয়া হয়েছিল। সে সম্পর্কে একটি গবেষণাপত্র প্রকাশ করেছে

"[…] রাষ্ট্রীয় মেশিন এবং রাষ্ট্রীয় চিত্রের প্রচলিত আনুষ্ঠানিকতার বিস্তৃত বিস্তার।"

এই গবেষণাপত্রে তিনি তার গবেষণার জন্য ডিজিটাল ঘড়ির উদাহরণ ব্যবহার করেছেন। আমি এটিকে অনুপ্রেরণা হিসেবে ব্যবহার করেছি এবং YAKINDU স্টেটচার্ট টুলস (রাষ্ট্রযন্ত্রের গ্রাফিক্যাল মডেল তৈরির একটি সরঞ্জাম এবং এর সাথে C/C ++ কোড তৈরি করার জন্য একটি ঘড়ি) এবং পুনর্নির্মাণ করেছি এবং এটি একটি আরডুইনোতে পুনরায় জীবিত করেছি।

সরবরাহ

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

  • আরডুইনো উনো বা মেগা
  • এলসিডি কিপ্যাড শিল্ড

সফটওয়্যার:

  • YAKINDU স্টেটচার্ট টুলস
  • Arduino এর জন্য Eclipse C ++ IDE

ধাপ 1: ডিজিটাল ওয়াচ কিভাবে কাজ করে

Image
Image

ডিজিটাল ঘড়ি কীভাবে কাজ করা উচিত তা নির্ধারণ করে শুরু করা যাক। আপনার কি মনে আছে এগুলো… চলুন বলা যাক… “অতিশয়” ডিজিটাল ঘড়িগুলি সবাই 90 এর দশকে ফিরে পেয়েছিল? একটি ইন্টিগ্রেটেড স্টপওয়াচ, বিভিন্ন অ্যালার্ম এবং এর বিরক্তিকর বিপ প্রতি ঘণ্টায়। যদি না হয়, তাহলে দেখুন: 90 এর ডিজিটাল ঘড়ি।

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

  • সময় প্রদর্শন করুন (ঘড়ি)
  • তারিখ প্রদর্শন করুন (তারিখ)
  • অ্যালার্ম সেট করুন (অ্যালার্ম 1, অ্যালার্ম 2)
  • চিম সক্ষম করুন/নিষ্ক্রিয় করুন (চিম সেট করুন)
  • স্টপওয়াচ ব্যবহার করুন (স্টপ ওয়াচ)

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

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

ধাপ 2: রাষ্ট্রীয় যন্ত্র

এলসিডি কিপ্যাড শিল্ড
এলসিডি কিপ্যাড শিল্ড

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

মডেলটি দুটি ভাগে বিভক্ত - একটি গ্রাফিকাল এবং একটি টেক্সচুয়াল। পাঠ্য অংশে ঘটনা, পরিবর্তনশীল ইত্যাদি সংজ্ঞায়িত করা হবে। গ্রাফিক্যাল অংশে - স্টেট ডায়াগ্রাম - মডেলের লজিক্যাল এক্সিকিউশন নির্দিষ্ট করা আছে। একটি স্টেট মেশিন তৈরি করতে, যা নির্দিষ্ট আচরণ পূরণ করে, কিছু ইনপুট ইভেন্ট প্রয়োজন, যা মডেলটিতে ব্যবহার করা যেতে পারে: অনঅফ, সেট, মোড, লাইট এবং লাইট_আর। সংজ্ঞা বিভাগে একটি অভ্যন্তরীণ ইভেন্ট ব্যবহার করা হয়, যা প্রতি 100 ms সময় বৃদ্ধি করে:

প্রতি 100 ms / সময় += 1

100 ms ধাপের উপর ভিত্তি করে বর্তমান সময় HH: MM: SS ফরম্যাটে গণনা করা হবে:

display.first = (সময় / 36000) % 24;

display.second = (সময় / 600) % 60; display.third = (সময় / 10) % 60;

অপারেশন আপডেট এলসিডি ব্যবহার করে প্রতিবার স্টেট মেশিনকে ডাকা হলে মানগুলি এলসিডি ডিসপ্লেতে যুক্ত হবে:

display.updateLCD (display.first, display.second, display.third, display.text)

ডিজিটাল ওয়াচ কিভাবে কাজ করে সে বিভাগে স্টেট মেশিনের মৌলিক এক্সিকিউশন ইতিমধ্যে সংজ্ঞায়িত করা হয়েছে। টুলের মধ্যে আমি কিছু "বিশেষ" মডেলিং উপাদান যেমন কম্পোজিট স্টেট, হিস্ট্রি, সাব-ডায়াগ্রামস, এক্সিটনোডস ইত্যাদি ব্যবহার করেছি। ইউজার গাইডে বিস্তারিত বর্ণনা পাওয়া যাবে।

ধাপ 3: এলসিডি কীপ্যাড শিল্ড

এলসিডি কীপ্যাড শিল্ডটি সাধারণ প্রকল্পগুলির জন্য বেশ শীতল, যার জন্য ভিজ্যুয়ালাইজেশনের জন্য একটি স্ক্রিন এবং ইনপুট হিসাবে কিছু বোতাম প্রয়োজন - একটি সাধারণ, সাধারণ এইচএমআই (হিউম্যান মেশিন ইন্টারফেস)। এলসিডি কীপ্যাড শিল্ডটিতে পাঁচটি ব্যবহারকারী বোতাম এবং অন্যটি রিসেট করার জন্য রয়েছে। পাঁচটি বোতাম একসাথে Arduino এর A0 পিনের সাথে সংযুক্ত। তাদের প্রত্যেকটি একটি ভোল্টেজ ডিভাইডারের সাথে সংযুক্ত, যা বোতামগুলির মধ্যে পার্থক্য করতে দেয়।

আপনি নির্দিষ্ট মান খুঁজে পেতে analogRead (0) ব্যবহার করতে পারেন, যা অবশ্যই নির্মাতার দ্বারা ভিন্ন হতে পারে। এই সহজ প্রকল্পটি LCD- তে বর্তমান মান প্রদর্শন করে:

#অন্তর্ভুক্ত "Arduino.h"

#অন্তর্ভুক্ত "LiquidCrystal.h" LiquidCrystal lcd (8, 9, 4, 5, 6, 7); অকার্যকর সেটআপ () {lcd.begin (16, 2); lcd.setCursor (0, 0); lcd.write ("পরিমাপ মূল্য"); } অকার্যকর লুপ () {lcd.setCursor (0, 1); lcd.print (""); lcd.setCursor (0, 1); lcd.print (analogRead (0)); বিলম্ব (200); }

এগুলি আমার পরিমাপ করা ফলাফল:

  • কোনটি নয়: 1023
  • নির্বাচন করুন: 640
  • বাম: 411
  • ডাউন: 257
  • উপরে: 100
  • ডান: 0

এই থ্রেশহোল্ডগুলির সাহায্যে বোতামগুলি পড়া সম্ভব:

#ডিফাইন নন 0 #ডিফাইন SELECT 1 #ডিফাইন লেফট 2 #ডিফাইন ডাইন 3 #ডিফাইন ইউপি 4 #ডিফাইন রাইট 5 স্ট্যাটিক int readButton () {int result = 0; ফলাফল = analogRead (0); যদি (ফলাফল <50) {রিটার্ন ডান; } যদি (ফলাফল <150) {রিটার্ন ইউপি; } যদি (ফলাফল <300) {রিটার্ন ডাউন; } যদি (ফলাফল <550) {বাম ফেরত; } if (result <850) {return SELECT; } ফিরে না; }

ধাপ 4: স্টেট মেশিনকে ইন্টারফেস করা

স্টেট মেশিন ইন্টারফেসিং
স্টেট মেশিন ইন্টারফেসিং

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

আমার বাস্তবায়নে, আমি একটি পতনশীল প্রান্ত সনাক্ত করি (বোতামটি ছেড়ে দেওয়া)। আমি বোতামের মান পড়ি, 80 ms এর জন্য অপেক্ষা করি (50 এর পরিবর্তে 80 এর সাথে ভাল ফলাফল পেয়েছি), ফলাফল সংরক্ষণ করুন এবং নতুন মান পড়ুন। যদি OldResult NONE (unpressed) না হয় এবং নতুন রেজাল্ট NONE না হয়, আমি জানি, বোতামটি আগেও টিপানো হয়েছে এবং এখন প্রকাশ করা হয়েছে। তারপরে, আমি রাষ্ট্রীয় মেশিনের ইনপুট ইভেন্টটি উত্থাপন করি।

int oldState = NONE; static void raiseEvents () {int buttonPressed = readButton (); বিলম্ব (80); oldState = buttonPressed; যদি (oldState! = NONE && readButton () == NONE) {switch (oldState) {case SELECT: {stateMachine-> getSCI_Button ()-> raise_mode (); বিরতি; } কেস বাম: {stateMachine-> getSCI_Button ()-> raise_set (); বিরতি; } কেস ডাউন: {stateMachine-> getSCI_Button ()-> raise_light (); বিরতি; } কেস ইউপি: {stateMachine-> getSCI_Button ()-> raise_light_r (); বিরতি; } ক্ষেত্রে অধিকার: {stateMachine-> getSCI_Button ()-> raise_onoff (); বিরতি; } ডিফল্ট: {বিরতি; }}}}

ধাপ 5: একসঙ্গে ওয়্যারিং জিনিস

প্রধান প্রোগ্রাম তিনটি অংশ ব্যবহার করে:

  • রাষ্ট্রীয় যন্ত্র
  • একটি টাইমার
  • একটি ডিসপ্লে হ্যান্ডলার (সাধারণ lcd.print (…))

DigitalWatch* stateMachine = নতুন DigitalWatch (); CPPTimerInterface* timer_sct = new CPPTimerInterface (); DisplayHandler* displayHandler = নতুন DisplayHandler ();

স্টেট মেশিন একটি ডিসপ্লে হ্যান্ডলার ব্যবহার করে এবং একটি টাইমার পেয়েছে, যা সময়োপযোগী ইভেন্টগুলি নিয়ন্ত্রণ করতে আপডেট করা হবে। এর পরে, রাষ্ট্রীয় মেশিনটি শুরু হয় এবং প্রবেশ করে।

অকার্যকর সেটআপ () {stateMachine-> setSCI_Display_OCB (displayHandler); stateMachine-> setTimer (timer_sct); stateMachine-> init (); stateMachine-> এন্টার (); }লুপ তিনটি কাজ করে:

  • ইনপুট ইভেন্টগুলি উত্থাপন করুন
  • অতিবাহিত সময় গণনা করুন এবং টাইমার আপডেট করুন
  • রাষ্ট্রযন্ত্রকে কল করুন

দীর্ঘ current_time = 0; দীর্ঘ last_cycle_time = 0; অকার্যকর লুপ () {raiseEvents (); last_cycle_time = current_time; current_time = মিলিস (); timer_sct-> updateActiveTimer (stateMachine, current_time - last_cycle_time); stateMachine-> runCycle (); }

ধাপ 6: উদাহরণ পান

এটাই. সম্ভবত, আমি বাস্তবায়নের প্রতিটি বিবরণ উল্লেখ করিনি, তবে আপনি উদাহরণটি দেখতে পারেন বা একটি মন্তব্য করতে পারেন।

একটি চলমান আইডিইতে উদাহরণ যোগ করুন: ফাইল -> নতুন -> উদাহরণ -> ইয়াকিন্ডু স্টেটচার্ট উদাহরণ -> পরবর্তী -> আরডুইনো -ডিজিটাল ওয়াচ (সি ++)

> আপনি এখানে IDE ডাউনলোড করতে পারেন <<

আপনি 30 দিনের ট্রায়াল দিয়ে শুরু করতে পারেন। পরে, আপনাকে অবশ্যই একটি লাইসেন্স পেতে হবে, যা অ-বাণিজ্যিক ব্যবহারের জন্য বিনামূল্যে!

প্রস্তাবিত: