সুচিপত্র:

মিলিসের সাথে আরডুইনো টাইমিং পদ্ধতি (): 4 টি ধাপ
মিলিসের সাথে আরডুইনো টাইমিং পদ্ধতি (): 4 টি ধাপ

ভিডিও: মিলিসের সাথে আরডুইনো টাইমিং পদ্ধতি (): 4 টি ধাপ

ভিডিও: মিলিসের সাথে আরডুইনো টাইমিং পদ্ধতি (): 4 টি ধাপ
ভিডিও: Himalaya baby massage oil honest review||আয়ুর্বেদিক বেবি ম্যাসাজ অয়েল||Ritan Home & kitchen 2024, নভেম্বর
Anonim
মিলিসের সাথে আরডুইনো টাইমিং পদ্ধতি ()
মিলিসের সাথে আরডুইনো টাইমিং পদ্ধতি ()

এই নিবন্ধে আমরা মিলিস () পরিচয় করিয়েছি; ফাংশন এবং বিভিন্ন টাইমিং উদাহরণ তৈরি করতে এটি ব্যবহার করুন।

মিলিস? লিপ-সিঙ্কারের সাথে কিছুই করার নেই … আশা করি আপনি মিলিকে এক হাজারতমের সংখ্যাসূচক উপসর্গ হিসেবে স্বীকৃতি দিয়েছেন; যেটি পরিমাপের একককে 0.001 (বা দশটি negativeণাত্মক 3) দ্বারা গুণ করছে।

মজার বিষয় হল আমাদের Arduino সিস্টেমগুলি স্কেচ চলার শুরু থেকে মিলিসেকেন্ড (হাজার হাজার সেকেন্ড) সংখ্যা গণনা করবে যতক্ষণ না গণনাটি ভেরিয়েবল টাইপ স্বাক্ষরবিহীন লম্বা (একটি 32-বিট [চার বাইট] পূর্ণসংখ্যায় সঞ্চয় করতে সক্ষম সর্বাধিক সংখ্যায় পৌঁছায়। -যেটি শূন্য থেকে (2^32) -1। (2^32) -1, বা 4294967295 মিলিসেকেন্ড 49.71027-বিজোড় দিনে রূপান্তরিত হয়

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

শুরু = মিলিস ();

যেখানে শুরু একটি স্বাক্ষরবিহীন দীর্ঘ পরিবর্তনশীল। আপনাকে মিলিস () ক্রিয়ায় দেখানোর জন্য এখানে একটি খুব সহজ উদাহরণ:

/ * মিলিস () বিক্ষোভ */

স্বাক্ষরবিহীন দীর্ঘ শুরু, সমাপ্ত, অতিবাহিত;

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

{Serial.begin (9600); }

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

{Serial.println ("Start…"); শুরু = মিলিস (); বিলম্ব (1000); সমাপ্ত = মিলিস (); Serial.println ("সমাপ্ত"); শেষ হয়ে যাওয়া = সমাপ্ত-শুরু; সিরিয়াল.প্রিন্ট (অতিবাহিত); Serial.println ("মিলিসেকেন্ড অতিবাহিত"); Serial.println (); বিলম্ব (500); }

স্কেচ শুরুতে বর্তমান মিলিস গণনা সঞ্চয় করে, তারপর এক সেকেন্ড অপেক্ষা করে, তারপর মিলিসের মান আবার সমাপ্তিতে সঞ্চয় করে। অবশেষে এটি বিলম্বের অতিবাহিত সময় গণনা করে। সিরিয়াল মনিটরের নিম্নলিখিত স্ক্রিন ডাম্পে, আপনি দেখতে পারেন যে সময়কালটি ঠিক 1000 মিলিসেকেন্ড ছিল না, যেমনটি ছবিতে দেখানো হয়েছে।

ধাপ 1:

ছবি
ছবি

সহজভাবে বলতে গেলে, মিলিস ফাংশন আপনার Arduino এর হৃদয়ে ATmega মাইক্রোকন্ট্রোলারের অভ্যন্তরীণ কাউন্টার ব্যবহার করে। এই কাউন্টারটি প্রতিটি ঘড়ির চক্র বৃদ্ধি করে - যা 16 মেগাহার্টজ ঘড়ির গতিতে (স্ট্যান্ডার্ড আরডুইনো এবং সামঞ্জস্যপূর্ণ) ঘটে। এই গতিটি Arduino বোর্ডে স্ফটিক দ্বারা নিয়ন্ত্রিত হয় (T16.000 এর সাথে রৌপ্য জিনিসটি এতে স্ট্যাম্পযুক্ত)।

ধাপ ২:

ছবি
ছবি

স্ফটিক নির্ভুলতা বাইরের তাপমাত্রার উপর নির্ভর করে, এবং স্ফটিকের সহনশীলতার উপর নির্ভর করে। এটি আপনার মিলিস ফলাফলের নির্ভুলতাকে প্রভাবিত করবে। বাস্তব অভিজ্ঞতা রিপোর্ট করেছে যে সময়ের নির্ভুলতার প্রবাহ প্রতি চব্বিশ ঘন্টার মধ্যে তিন বা চার সেকেন্ড হতে পারে।

যদি আপনি একটি বোর্ড বা আপনার নিজস্ব সংস্করণ ব্যবহার করেন যা একটি স্ফটিকের পরিবর্তে একটি সিরামিক রেজোনেটর ব্যবহার করে, মনে রাখবেন যে এগুলি সঠিক নয় এবং উচ্চতর ড্রিফট স্তরের সম্ভাবনা প্রবর্তন করবে। যদি আপনার সময়সীমার যথার্থতার উচ্চতর স্তরের প্রয়োজন হয় তবে নির্দিষ্ট টাইমার আইসি যেমন ম্যাক্সিম DS3231 বিবেচনা করুন।

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

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

/* মিলিস () ব্যবহার করে সুপার-বেসিক স্টপওয়াচ; */

স্বাক্ষরবিহীন দীর্ঘ শুরু, সমাপ্ত, অতিবাহিত;

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

{Serial.begin (9600); পিনমোড (2, ইনপুট); // স্টার্ট বাটন পিনমোড (3, ইনপুট); // স্টপ বাটন Serial.println ("শুরু/পুনরায় সেট করার জন্য 1 টিপুন, অতিবাহিত সময়ের জন্য 2"); }

অকার্যকর প্রদর্শন ফলাফল ()

{ফ্লোট h, m, s, ms; স্বাক্ষরিত দীর্ঘ সময়; শেষ হয়ে যাওয়া = সমাপ্ত-শুরু; h = int (অতিবাহিত/3600000); ওভার = অতিবাহিত%3600000; m = int (60000 এর বেশি); over = over%60000; s = int (1000/এর বেশি); ms =%1000 এর উপরে; সিরিয়াল.প্রিন্ট ("কাঁচা অতিবাহিত সময়:"); Serial.println (অতিবাহিত); সিরিয়াল.প্রিন্ট ("অতিবাহিত সময়:"); Serial.print (h, 0); Serial.print ("h"); সিরিয়াল.প্রিন্ট (মি, 0); সিরিয়াল.প্রিন্ট ("মি"); সিরিয়াল.প্রিন্ট (গুলি, 0); সিরিয়াল.প্রিন্ট ("গুলি"); Serial.print (ms, 0); Serial.println ("ms"); Serial.println (); }

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

{if (digitalRead (2) == HIGH) {start = millis (); বিলম্ব (200); // debounce Serial.println ("শুরু হয়েছে …"); } if (digitalRead (3) == HIGH) {সমাপ্ত = মিলিস (); বিলম্ব (200); // debounce displayResult () এর জন্য; }}

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

ধাপ 3: স্পিডোমিটার …

Image
Image

যদি আপনার একটি নির্দিষ্ট দূরত্বের শুরু এবং শেষে একটি সেন্সর থাকে, তাহলে গতি গণনা করা যেতে পারে: গতি = দূরত্ব ÷ সময়।

আপনি একটি চাকা আকারের গতির জন্য একটি স্পিডোমিটারও তৈরি করতে পারেন, উদাহরণস্বরূপ একটি সাইকেল। বর্তমান সময়ে আমাদের কাছে গন্ডগোল করার মতো সাইকেল নেই, তবে আমরা এটি করার প্রক্রিয়াটি বর্ণনা করতে পারি - এটি বেশ সহজ। (অস্বীকৃতি - আপনার নিজের ঝুঁকিতে ইত্যাদি করুন)

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

অন্যরা হল-ইফেক্ট সেন্সর ব্যবহার করতে পারে-প্রতিটি তাদের নিজস্ব)। পরিধি গণনা করতে গণিত শ্রেণী থেকে মনে রাখবেন - সূত্রটি ব্যবহার করুন: পরিধি = 2πr যেখানে r বৃত্তের ব্যাসার্ধ।

এখন যেহেতু আপনার চাকার পরিধি আছে, এই মানটিকে আমাদের 'নির্দিষ্ট দূরত্ব' হিসাবে বিবেচনা করা যেতে পারে, এবং সেইজন্য একটি পূর্ণ ঘূর্ণনের মধ্য দিয়ে অতিবাহিত সময় পরিমাপ করে গতি গণনা করা যেতে পারে।

আপনার সেন্সর-একবার লাগানো-একই পদ্ধতিতে স্বাভাবিকভাবে খোলা বোতাম হিসাবে কাজ করা উচিত যা প্রতিটি ঘূর্ণনকে ধাক্কা দেয়। আমাদের স্কেচ সেন্সর থেকে প্রতিটি নাড়ির মধ্যে অতিবাহিত সময় পরিমাপ করবে।

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

এখানে আপনার পর্যবেক্ষণের জন্য স্কেচ:

/*মিলিস () ব্যবহার করে বেসিক স্পিডোমিটার; */

#I2C বাস LCD এর জন্য "Wire.h" // অন্তর্ভুক্ত করুন

#I2C বাস LCD মডিউলের জন্য "LiquidCrystal_I2C.h" // অন্তর্ভুক্ত করুন - https://bit.ly/m7K5wt LiquidCrystal_I2C lcd (0x27, 16, 2); // 16 অক্ষর এবং 2 লাইন প্রদর্শনের জন্য LCD ঠিকানা 0x27 এ সেট করুন

ভাসা শুরু, সমাপ্ত;

ভাসমান সময়, সময়; ফ্লোট সার্কমেট্রিক = 1.2; // সেন্সরের অবস্থান (মিটারে) সাপেক্ষে চাকার পরিধি ফ্লোট সার্ক ইম্পেরিয়াল; // 1 কিলোমিটার ব্যবহার করে = 0.621371192 মাইল ফ্লোট স্পিডক, স্পিডম; // মেট্রিক এবং ইম্পেরিয়ালে গণনা করা গতি ভেল ধরে

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

{attachInterrupt (0, speedCalc, RISING); // বাধা বলা হয় যখন সেন্সর ডিজিটাল 2 উচ্চ (প্রতিটি চাকা ঘূর্ণন) প্রারম্ভ = মিলিস () পাঠায়; // সেটআপ এলসিডি lcd.init (); // এলসিডি শুরু করুন lcd.backlight (); // এলসিডি ব্যাকলাইট চালু করুন lcd.clear (); lcd.println ("হেলমেট পরুন!"); বিলম্ব (3000); lcd.clear (); Serial.begin (115200); circImperial = circMetric*.62137; // এমপিএইচ গণনার জন্য মেট্রিককে ইম্পেরিয়াল রূপান্তর করুন}

অকার্যকর speedCalc ()

{অতিবাহিত = মিলিস ()-শুরু; শুরু = মিলিস (); speedk = (3600*circMetric)/অতিবাহিত; // km/h speedm = (3600*circImperial)/অতিবাহিত; // প্রতি ঘন্টায় মাইল }

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

{lcd.setCursor (0, 0); lcd.print (int (speedk)); lcd.print ("km/h"); lcd.print (int (speedm)); lcd.print ("MPH"); lcd.setCursor (0, 1); lcd.print (int (অতিবাহিত)); lcd.print ("ms/rev"); বিলম্ব (1000); // ঝলকানি কমানোর জন্য ব্যক্তিগত পছন্দের জন্য সামঞ্জস্য করুন}

সেখানে খুব বেশি কিছু হচ্ছে না - প্রতিবার চাকা একটি বিপ্লব সম্পন্ন করলে সেন্সর থেকে সংকেত নিম্ন থেকে উঁচুতে যাবে - একটি বাধা সৃষ্টি করবে যা ফাংশনকে স্পিডক্যালক () বলে।

এটি মিলিস () এর একটি রিডিং নেয় এবং তারপরে বর্তমান রিডিং এবং আগের রিডিংয়ের মধ্যে পার্থক্য গণনা করে - এই মানটি দূরত্ব (যা সেন্সরের তুলনায় চাকার পরিধি - এটি সঞ্চিত

ফ্লোট সার্কমেট্রিক = 1.2;

এবং মিটারে পরিমাপ করা হয়)। এটি অবশেষে কিমি/ঘন্টা এবং এমপিএইচ গতি গণনা করে। বিরতির মাঝে স্কেচ এলসিডি -তে আপডেট করা স্পিড ডেটার পাশাপাশি কৌতূহলের জন্য প্রতিটি বিপ্লবের জন্য কাঁচা সময় মান প্রদর্শন করে। বাস্তব জীবনে আমি মনে করি না যে কেউ সাইকেলে এলসিডি লাগাবে, সম্ভবত একটি এলইডি ডিসপ্লে আরও প্রাসঙ্গিক হবে।

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

ধাপ 4:

এটি আপাতত মিলিস () ব্যবহারের সমষ্টি। এছাড়াও আছে মাইক্রো (); ফাংশন যা মাইক্রোসেকেন্ড গণনা করে।

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

এই পোস্টটি আপনার জন্য নিয়ে এসেছে pmdway.com - নির্মাতারা এবং ইলেকট্রনিক্স উত্সাহীদের জন্য সবকিছু, বিশ্বব্যাপী বিনামূল্যে বিতরণ সহ।

প্রস্তাবিত: