সুচিপত্র:

DIY লগিং থার্মোমিটার 2 সেন্সর সহ: 3 টি ধাপ (ছবি সহ)
DIY লগিং থার্মোমিটার 2 সেন্সর সহ: 3 টি ধাপ (ছবি সহ)

ভিডিও: DIY লগিং থার্মোমিটার 2 সেন্সর সহ: 3 টি ধাপ (ছবি সহ)

ভিডিও: DIY লগিং থার্মোমিটার 2 সেন্সর সহ: 3 টি ধাপ (ছবি সহ)
ভিডিও: How To Sign In Gmail Account In Android Phone - Login Google Account 2024, জুলাই
Anonim
2 সেন্সর সহ DIY লগিং থার্মোমিটার
2 সেন্সর সহ DIY লগিং থার্মোমিটার
2 সেন্সর সহ DIY লগিং থার্মোমিটার
2 সেন্সর সহ DIY লগিং থার্মোমিটার

এই প্রকল্পটি আমার আগের প্রকল্প "DIY লগিং থার্মোমিটার" এর একটি বর্ধন। এটি একটি মাইক্রো এসডি কার্ডে তাপমাত্রা পরিমাপ লগ করে।

হার্ডওয়্যার পরিবর্তন

আমি রিয়েল টাইম ক্লক মডিউলে একটি DS18B20 তাপমাত্রা সেন্সর যুক্ত করেছি, যেখানে এই ডিভাইসের জন্য প্রিন্টেড সার্কিট বোর্ডে বিধান রয়েছে; এবং আরটিসির "ডিএস" পিন থেকে আরডুইনো এর ডি 2 তে উপযুক্ত তার যুক্ত করা হয়েছে।

সফটওয়্যার পরিবর্তন

তারপর আমি সফ্টওয়্যার যোগ এবং সংশোধন। প্রধান পরিবর্তনগুলি হল:

এলসিডি ডিসপ্লে দুটি তাপমাত্রা "ইন" এবং "আউট" দেখায়।

এসডি কার্ডে রেকর্ড করা লগ ফাইল দুটি তাপমাত্রা ক্ষেত্র আছে, "তাপমাত্রা ইন" এবং "তাপমাত্রা আউট"।

SD কার্ডে দীর্ঘ রেকর্ডের কারণে, EEPROM এর জন্য কাজ করা বাফারগুলি বড় ছিল এবং এর ফলে আমার স্মৃতি বিরোধের সমস্যা হতে শুরু করে। আমি স্ট্রিং অবজেক্টের পরিবর্তে সমস্ত স্ট্রিংয়ের জন্য অক্ষর অ্যারে ব্যবহার সহ গতিশীল মেমরির ব্যবহার হ্রাস করার লক্ষ্যে বেশ কয়েকটি পরিবর্তন করেছি।

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

আমি যে পরীক্ষা করেছি তা অনুযায়ী, তাপমাত্রা প্রোবের সনাক্তকরণ, এবং SD কার্ড অপসারণ এবং প্রতিস্থাপনের প্রতিক্রিয়া এখনও নির্বিঘ্নে কাজ করে।

ধাপ 1: সফটওয়্যার ডেভেলপমেন্ট

এই পদক্ষেপটি আপনাকে সম্পন্ন প্রকল্পের জন্য সম্পূর্ণ সফটওয়্যার দেয়। আমি এটি Arduino IDE 1.6.12 ব্যবহার করে সংকলিত করেছি। এটি প্রোগ্রাম মেমরির 21, 400 বাইট (69%) এবং গতিশীল মেমরির 1, 278 বাইট (62%) ব্যবহার করে।

আমি কোডে মন্তব্য রেখেছি এই আশায় যে এটি পরিষ্কার হবে যে কি ঘটছে।

ধাপ 2: দুটি তাপমাত্রা সেন্সর দিয়ে কাজ করা - বিস্তারিত

এই সফটওয়্যারটি "ওয়ানওয়্যার" লাইব্রেরি ব্যবহার করে। এটি কোন "ডালাস তাপমাত্রা" বা অনুরূপ লাইব্রেরি ব্যবহার করে না। পরিবর্তে তাপমাত্রা সেন্সর থেকে কমান্ড এবং তথ্য স্কেচ দ্বারা সম্পন্ন করা হয় এবং বেশ সহজেই দেখা যায় এবং বোঝা যায়। আমি OneWire লাইব্রেরি কমান্ডের একটি দরকারী তালিকা খুঁজে পেয়েছি

www.pjrc.com/teensy/td_libs_OneWire.html

যখন দুটি (বা তার বেশি) তাপমাত্রা সেন্সর থাকে, তখন কোনটি কোনটি তা চিহ্নিত করা প্রয়োজন হয়ে পড়ে।

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

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

আমার উদ্দেশ্য ছিল যে সফ্টওয়্যারটি স্বয়ংক্রিয়ভাবে সেন্সরগুলি সনাক্ত করে এবং তাদের সঠিকভাবে "ইন" এবং "আউট" বরাদ্দ করা উচিত। পৃথক Arduino পিন এ তাদের দ্বারা এটি করা যথেষ্ট সহজ। এই প্রকল্পে, A0 থেকে A3 এবং A6 এবং A7 সবই অব্যবহৃত, তাই এগুলির মধ্যে একটি এই ক্ষেত্রে ব্যবহার করা যেতে পারে। যাইহোক আমি একই ওয়ানওয়্যারের বাসে সেন্সর দিয়ে স্বয়ংক্রিয় শনাক্তকরণ কাজ করতে সফল হয়েছি।

এটি এভাবে কাজ করে।

ওয়ান ওয়ায়ার লাইব্রেরির একটি কমান্ড আছে "ওয়ানওয়াইরঅবজেক্ট.সার্চ (অ্যাড্রেস)" যেখানে "অ্যাড্রেস" হল 8 বাইটের একটি অ্যারে এবং "ওয়ানওয়াইরঅবজেক্ট" হল ওয়ান ওয়্যার বস্তুর একটি উদাহরণের নাম যা আগে তৈরি করা হয়েছে। এতে আপনার পছন্দের যে কোন নাম থাকতে পারে। খনিটিকে "ডিএস" বলা হয়। যখন আপনি এই "অনুসন্ধান" কমান্ডটি ইস্যু করেন, ওয়ান ওয়ায়ার লাইব্রেরি ওয়ান ওয়্যার বাসে কিছু সংকেত দেয়। যদি এটি একটি প্রতিক্রিয়াশীল সেন্সর খুঁজে পায়, এটি একটি "TRUE" বুলিয়ান মান প্রদান করে এবং সেন্সরের 8 বাইট অনন্য শনাক্তকারী দিয়ে "ঠিকানা" অ্যারে পূরণ করে। এই শনাক্তকারীটিতে একটি পারিবারিক কোড (শুরুতে) এবং একটি চেকের সমষ্টি (শেষে) অন্তর্ভুক্ত রয়েছে। এর মধ্যে 6 টি বাইট রয়েছে যা স্বতন্ত্রভাবে সেন্সরকে তার পরিবারের মধ্যে চিহ্নিত করে।

ওয়ান ওয়ায়ার বাসে সমস্ত ডিভাইসের মাধ্যমে সাইক্লিং করে প্রতিবার এই কমান্ডটি দেওয়া হলে একটি ফলাফল (ঠিকানা এবং রিটার্ন ট্রু) পাওয়া যায়। একবার প্রতিটি ডিভাইস সাড়া দিলে, পরের বার "অনুসন্ধান" জারি করা হলে, প্রত্যাবর্তন "মিথ্যা", ইঙ্গিত করে যে বাসের প্রতিটি ডিভাইস ইতিমধ্যে সাড়া দিয়েছে। যদি "অনুসন্ধান" আবার জারি করা হয়, প্রথম ডিভাইসটি আবার সাড়া দেয় - এবং তাই অনির্দিষ্টকালের জন্য। ডিভাইসগুলি সর্বদা একই ক্রমে সাড়া দেয়। প্রতিক্রিয়াগুলির ক্রমটি ওয়ানওয়্যারের বাসের ডিভাইসগুলির শনাক্তকারীর উপর ভিত্তি করে। এটি ডিভাইস শনাক্তকারীর ন্যূনতম উল্লেখযোগ্য বিট থেকে শুরু করে একটি বাইনারি অনুসন্ধান বলে মনে হচ্ছে। এই আইডেন্টিফায়ারগুলি খুঁজে পেতে ব্যবহৃত প্রোটোকলটি বেশ জটিল, এবং ডকুমেন্ট "বুক অফ আইবটন স্ট্যান্ডার্ডস" এর 51 - 54 পৃষ্ঠায় বর্ণনা করা হয়েছে যা https://pdfserv.maximintegrated.com/en/an/AN937.pd এ একটি পিডিএফ ডকুমেন্ট …

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

দুটি সেন্সর সহ এই প্রকল্পে, তাদের মধ্যে একটি RTC মডিউলে জায়গায় বিক্রি করা হয়েছে; অন্যটি বোর্ডে পুরুষ হেডার এবং তারের উপর মহিলা হেডার ব্যবহার করে প্লাগ ইন করা হয়। এটি সহজেই বিচ্ছিন্ন করা যায়।

যখন তারের সেন্সর ("আউট" সেন্সর) বিচ্ছিন্ন হয়, তখন "অনুসন্ধান" কমান্ড বিকল্প "সত্য" এবং "মিথ্যা" রিটার্ন তৈরি করে।

যখন তারের সেন্সর সংযুক্ত থাকে, "অনুসন্ধান" কমান্ডটি 3-পর্যায় চক্র তৈরি করে, যার মধ্যে দুটি "সত্য" এবং একটি "মিথ্যা" রিটার্ন থাকে।

আমার পদ্ধতি হল 1, 2 বা 3 "সার্চ" কমান্ড ইস্যু করা, যতক্ষণ না একটি মিথ্যা ফলাফল ফিরে আসে। তারপরে আমি আরও 2 টি "অনুসন্ধান" কমান্ড জারি করি। যদি দ্বিতীয়টি ব্যর্থ হয় (অর্থাত্ মিথ্যা) আমি জানি বাসে একটি মাত্র সেন্সর আছে এবং সেটি হল "ইন" সেন্সর। ডিভাইসের পরিচয় রেকর্ড করা হয় এবং "ইন" সেন্সরে বরাদ্দ করা হয়।

পরবর্তী সময়ে, যদি প্রথম এবং দ্বিতীয় উভয় রিটার্নই সত্য হয়, আমি জানি বাসে দুটি সেন্সর আছে। আমি যাচাই করে দেখেছি তাদের মধ্যে কোনটির "ইন" সেন্সরের সমান পরিচয় আছে এবং অন্যটিকে "আউট" সেন্সর হিসাবে বরাদ্দ করা হয়েছে।

আরেকটি ছোট বিষয় হল যে দুটি সেন্সর থেকে ফলাফল সংগ্রহ করা "রূপান্তর শুরু করুন" পাঠিয়ে যা "স্কিপ রম" কমান্ড হিসাবে পরিচিত। আমাদের একটি একক ডিভাইসে (তার অনন্য শনাক্তকারী ব্যবহার করে) বা বাসের সমস্ত ডিভাইসে (রম বাদ দিন) কমান্ড পাঠানোর বিকল্প রয়েছে। কোড এই মত দেখাচ্ছে:

ds.reset (); //

// "স্কিপ রম" কমান্ড পাঠান (তাই পরবর্তী কমান্ড উভয় সেন্সরে কাজ করে) ds.write (0xCC); // রম কমান্ড ds.write এড়িয়ে যান (0x44, 0); // উভয় প্রোবে তাপমাত্রা_স্টেট = অপেক্ষা_কনভার্টে রূপান্তর শুরু করুন; // বিলম্বিত অবস্থায় যান

যখন প্রয়োজনীয় বিলম্বের সময় অতিক্রান্ত হয়, তাপমাত্রা প্রতিটি সেন্সর থেকে পৃথকভাবে প্রাপ্ত হয়। এখানে দ্বিতীয় সেন্সরের কোড (অর্থাৎ আউট সেন্সর)।

যদি (flag2) {

বর্তমান = ds.reset (); ds.select (DS18B20_addr_out); ds.write (0xBE); // "আউট" প্রোব ডেটার স্ক্র্যাচপ্যাড পড়ুন [0] = ds.read (); ডেটা [1] = ds.read (); temperature_out = (data [1] << 8) + data [0]; temperature_out = (6 * temperature_out) + temperature_out / 4; // গুণ করে 6.25} অন্যথায় {// flag2 না - অর্থাৎ আউট সেন্সর সংযুক্ত নয় তাপমাত্রা_আউট = 30000; // টেম্প সেন্সর কাজ না করলে 300.00 C এ ঠিক করুন} // যদি শেষ (flag2)

LCD, RTC এবং SD কার্ড সাপোর্টের জটিলতা ছাড়াই আমি এই সফটওয়্যারের অধিকাংশই স্ট্যান্ড-অ্যালোন স্কেচে কাজ করেছি যার মধ্যে তাপমাত্রা সেন্সর ছিল। এই ডেভেলপমেন্ট স্কেচ নীচের ফাইলে রয়েছে।

ধাপ 3: প্রাথমিক ফলাফল

প্রাথমিক ফলাফল
প্রাথমিক ফলাফল

এই চার্টটি পড়ার প্রথম দুই খণ্ড-দিনের সমন্বয়।

প্রস্তাবিত: