সুচিপত্র:

Arduino 3-in-1 সময় এবং আবহাওয়া প্রদর্শন: 11 টি ধাপ
Arduino 3-in-1 সময় এবং আবহাওয়া প্রদর্শন: 11 টি ধাপ

ভিডিও: Arduino 3-in-1 সময় এবং আবহাওয়া প্রদর্শন: 11 টি ধাপ

ভিডিও: Arduino 3-in-1 সময় এবং আবহাওয়া প্রদর্শন: 11 টি ধাপ
ভিডিও: ELF/EMBARC Bronchiectasis conference 2023 with subtitles 2024, নভেম্বর
Anonim

লেখক দ্বারা আরো অনুসরণ করুন:

ATtiny85 ব্যবহার করে
ATtiny85 ব্যবহার করে
ATtiny85 ব্যবহার করে
ATtiny85 ব্যবহার করে
পাই চালিত পাই পার্টিশন এবং বহুভুজ ছাঁটাই সরঞ্জাম
পাই চালিত পাই পার্টিশন এবং বহুভুজ ছাঁটাই সরঞ্জাম
পাই চালিত পাই পার্টিশন এবং বহুভুজ ছাঁটাই সরঞ্জাম
পাই চালিত পাই পার্টিশন এবং বহুভুজ ছাঁটাই সরঞ্জাম
একটি ম্যানুয়াল অডিও এম্পের জন্য ডিজিটাল নিয়ন্ত্রণ
একটি ম্যানুয়াল অডিও এম্পের জন্য ডিজিটাল নিয়ন্ত্রণ
একটি ম্যানুয়াল অডিও এম্পের জন্য ডিজিটাল নিয়ন্ত্রণ
একটি ম্যানুয়াল অডিও এম্পের জন্য ডিজিটাল নিয়ন্ত্রণ

আমি PIC মাইক্রোকন্ট্রোলার পছন্দ করি এবং আমি সমাবেশ ভাষায় প্রোগ্রামিং পছন্দ করি। আসলে, গত কয়েক বছর ধরে, আমি সেই সংমিশ্রণের উপর ভিত্তি করে আমার ওয়েবসাইটে প্রায় 40 টি প্রকল্প পোস্ট করেছি। সম্প্রতি আমি আমার পছন্দের ইউএস বিক্রেতাদের থেকে কিছু অংশ অর্ডার করছিলাম এবং আমি একটি প্রোগ্রামিং কেবল সহ একটি আরডুইনো ন্যানো দেখেছি, একটি খালি ATMEGA328 প্রসেসর চিপের চেয়ে মাত্র $ 1.20 বেশি। তাই আমি তাদের একটি দম্পতি কিনেছি। তারপরে আমি আরডুইনো আইডিই ডাউনলোড করেছি এবং আমার 'সি ++' প্রোগ্রামিংয়ের স্মৃতি মুছে ফেলেছি।

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

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

ধাপ 1: আবহাওয়া সেন্সর

আবহাওয়া সেন্সর
আবহাওয়া সেন্সর
আবহাওয়া সেন্সর
আবহাওয়া সেন্সর
আবহাওয়া সেন্সর
আবহাওয়া সেন্সর

এখানে ব্যবহৃত AcuRite আবহাওয়া সেন্সর প্রতি 16 সেকেন্ডে তাপমাত্রা এবং আর্দ্রতার তথ্য পাঠায়। পিছনে এটি 000592TXR এর একটি মডেল নম্বর দেখায় কিন্তু এটি সাধারণত 06002M মডেল হিসাবে বিজ্ঞাপিত হয়। এই সেন্সরটি বিভিন্ন আবহাওয়া কেন্দ্রের মডেল দ্বারা ব্যবহৃত হয় যাতে এটি খুঁজে পাওয়া সহজ হয় এবং আমি তাদের 20 ডলারের নিচে ইবেতে পেতে সক্ষম হয়েছি। AcuRite তাদের কিছু আবহাওয়া কেন্দ্রের জন্য একই রকম সেন্সর বিক্রি করে কিন্তু তারা একই যোগাযোগ প্রোটোকল মেনে চলতে পারে বা নাও পারে। ওয়েবে কিছু ইঙ্গিত আছে যে 00606 তাপমাত্রা শুধুমাত্র সেন্সর একই বার্তা বিন্যাস ব্যবহার করে কিন্তু একটি অবৈধ আর্দ্রতা বাইট সহ।

উপরে দেখানো প্রথম তরঙ্গরূপে দেখা যায়, আবহাওয়ার বার্তাগুলি ক্রমাগত বার্তাগুলির মধ্যে 2ms ব্যবধানের সাথে বিস্ফোরণে পাঠানো হয়। উপরে দেখানো দ্বিতীয় তরঙ্গাকৃতি বিট সময়কাল এবং নিদর্শন দেখতে একটি বার্তার অংশ প্রসারিত করে। চারটি সিঙ্ক বিট রয়েছে যা প্রায় 600us উচ্চ এবং 600us কম। ডেটা বিট 400us উচ্চ দ্বারা প্রতিনিধিত্ব করা হয় 200us নিম্ন (1) বা 200us উচ্চ তারপর 400us নিম্ন (0) দ্বারা প্রতিনিধিত্ব করা হয়।

বার্তার বিন্যাসে 7 বাইট ডেটা থাকে। প্রথম দুটি বাইট হল সেন্সর আইডি এবং এগুলি পরিবর্তন হয় না (যেমন: এটি একটি রোলিং কোড ব্যবহার করে না)। শেষ বাইট হল প্রথম ছয় বাইটের একটি সহজ সংযোজনীয় চেকসাম। তৃতীয় বাইট হল একটি ব্যাটারি স্তর নির্দেশক এবং ব্যাটারি ভাল হলে সর্বদা 44 হেক্স হওয়া উচিত। চতুর্থ বাইট হল আর্দ্রতা এবং এটি 0 এবং 99 এর মধ্যে একটি অ-স্কেল মান। এটি মনে রাখা গুরুত্বপূর্ণ যে বাইট 4, 5 এবং 6 এর সবচেয়ে উল্লেখযোগ্য বিট একটি প্যারিটি বিট এবং পরিমাপের অংশ নয় মান বাইট 5 এবং 6 হল স্কেল করা তাপমাত্রা (সেলসিয়াস) যার সাথে বাইট 5 এর নিচের 4 বিটগুলি বাইট 6 এর নিচের 7 বিটের সাথে একত্রিত হয়ে 11-বিট মান তৈরি করে। তাপমাত্রা সর্বদা একটি ধনাত্মক সংখ্যা হিসাবে উপস্থাপন করা হয় এবং স্কেলিং প্রয়োগ করা হলেই কেবল নেতিবাচক হয়ে যায়। স্কেলিং হল (C / 10) - 100 বিয়োগের প্রয়োজন হয় কারণ প্রেরিত মানকে ইতিবাচক রাখার জন্য সেন্সর দ্বারা 100 যোগ করা হয়।

ধাপ 2: আরএফ রিসিভার

আরএফ রিসিভার
আরএফ রিসিভার
আরএফ রিসিভার
আরএফ রিসিভার

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

ধাপ 3: আরএফ অ্যান্টেনা

আরএফ অ্যান্টেনা
আরএফ অ্যান্টেনা

আরএক্সবি 6 অ্যান্টেনা নিয়ে আসে না। আপনি কিছু হেলিক্যাল কিনতে পারেন বেশ সস্তায় কিন্তু আপনার নিজের অ্যান্টেনা তৈরি করাও সহজ। প্রকৃতপক্ষে, যদি আপনি খুব অভিনব হতে না চান তবে মডিউলের অ্যান্টেনা পিনের উপর একটি ব্রেডবোর্ড জাম্পার কেবল স্লিপ করা যেতে পারে। আদর্শভাবে, একটি সোজা তারের অ্যান্টেনা 1/4 তরঙ্গদৈর্ঘ্য হবে যা প্রায় 6.8 ইঞ্চি পর্যন্ত কাজ করে। আমি প্রাথমিকভাবে জাম্পার তারের কাজটি করেছি এবং আমার বাইরের সেন্সরটি তুলতে কোন সমস্যা হয়নি যদিও আমার ইলেকট্রনিক্স ওয়ার্কশপটি আমার বেসমেন্টে রয়েছে।

আরেকটি সম্ভাবনা হল আপনার নিজের হেলিকাল অ্যান্টেনা তৈরি করা। ওয়েবে এর জন্য বিভিন্ন ধরণের পরিকল্পনা রয়েছে তবে উপরের ছবিতে দেখানো পরিকল্পনাটি আমি তৈরি করেছি। আমি ইথারনেট তারের স্ক্র্যাপ টুকরা থেকে কিছু শক্ত কোর তার ব্যবহার করেছি এবং এটি 5/32 ইঞ্চি ড্রিল বিটের মসৃণ শাঁকের চারপাশে জখম করেছি। আরএফ বোর্ডের কাছে বিক্রি হওয়া টিপ ছাড়া ইনসুলেশন ছেড়ে দিন। আপনার 20 টি পালা লাগবে। আপনি একটি 7/32 ইঞ্চি ড্রিল বিট ব্যবহার করতে পারেন এবং পরিবর্তে 17 টি মোড় মোড়াতে পারেন। আপনার সেন্সরগুলির জন্য আপনার সম্ভবত যে রেঞ্জগুলি রয়েছে তার জন্য এইগুলির মধ্যে কোনওটি সম্ভবত ঠিক কাজ করবে। আসল কী হল একটি ভাল আরএফ রিসিভার দিয়ে শুরু করা। অ্যাকুরাইট সেন্সরগুলিরও বেশ শক্তিশালী ট্রান্সমিটার রয়েছে।

ধাপ 4: আরএফ কমিউনিকেশন প্রোটোকল

ডেটা প্রেরণের জন্য কয়েকটি ভিন্ন মডুলেশন কৌশল রয়েছে কিন্তু এই সেন্সরগুলি সবচেয়ে সহজ ব্যবহার করে যা OOK (অন-অফ-কী) বা ASK (প্রশস্ততা-শিফট-কী)। যেহেতু আমরা এই উদাহরণে 0/1 ডেটা বিট নিয়ে কাজ করছি, তাই প্রশস্ততা পূর্ণ বা সম্পূর্ণ বন্ধ। সুতরাং, আমাদের উদ্দেশ্যে, OOK এবং ASK একই কারণ OOK এর অর্থ হল RF ক্যারিয়ার হয় পূর্ণ বা সম্পূর্ণ বন্ধ। মেসেজ ফরম্যাটটি সাধারণত ট্রান্সমিটিং ডিভাইসের নির্মাতা দ্বারা সংজ্ঞায়িত করা হয় এবং তারা যে কোন ট্রান্সমিশন রেট, যেকোনো বিট ফরম্যাটিং স্টাইল এবং যেকোন বার্তার দৈর্ঘ্য ব্যবহার করতে পারে। 433-মেগাহার্টজ ব্যান্ডটি স্মার্ট মিটার ইত্যাদির জন্য ট্রান্সমিশনে পরিপূর্ণ, তাই আমরা যে মেসেজ ফরম্যাটটি ব্যবহার করতে চাই তার জন্য সফ্টওয়্যারটি ফিল্টার করতে হবে।

ধাপ 5: সময় ডেটা

সময় ডেটা
সময় ডেটা

সঠিক সময় ডেটা পাওয়ার জন্য আমি একটি সস্তা জিপিএস ইউনিট ব্যবহার করি যা বিদ্যুৎ বিভ্রাটের পর স্বয়ংক্রিয়ভাবে পুনরায় চালু হবে। আমার বেশ কয়েকটি জিপিএস ইউনিট আছে (ডিসপ্লে ছাড়াই) যেগুলি আদর্শ NMEA বাক্য আউটপুট করে কিন্তু আমার কাছে থাকা ইউনিটগুলির মধ্যে সবচেয়ে ছোট এবং সস্তা হল NEO-6M। NEO-6M মডিউলটি Arduino তে ইন্টারফেস করা সহজ কারণ এটি একটি TTL- স্তরের সিরিয়াল পোর্ট ব্যবহার করে। একমাত্র আসল পার্থক্য হল যে NMEA স্ট্যান্ডার্ড 4800 এর একটি সিরিয়াল বড রেট নির্দিষ্ট করে কিন্তু NEO-6M ডিফল্ট হয়ে 9600 বাউড হয়। আপনি বড রেট পরিবর্তন করতে বিনামূল্যে "ইউ-সেন্টার" প্রোগ্রামটি চালাতে পারেন কিন্তু আমি এটিকে ফ্যাক্টরি ডিফল্টে রেখে দিয়েছি। জিপিএস ইনফো (গ্লোবালস্যাট দ্বারা প্রকাশিত) নামে একটি বিনামূল্যে ইউটিলিটি প্রোগ্রাম রয়েছে যা পিসিতে জিপিএস তথ্য দেখার জন্য খুব সুবিধাজনক। আপনি জিপিএস ইউনিটটি একটি স্ট্যান্ডার্ড ইউএসবি থেকে টিটিএল তারের সাথে সংযুক্ত করতে পারেন এটি পরীক্ষা করার জন্য বা পিসি ব্যবহার করে এটি সেট আপ করার জন্য। মনে রাখবেন যে মডিউলের জিপিএস চিপ আসলে 3.3 ভোল্টে (অন-বোর্ড ভোল্টেজ রেগুলেটরের মাধ্যমে) চলে তাই আপনি যদি তার আরএক্সডি পোর্টের সাথে সংযোগ করতে চান তাহলে আপনাকে 5 ভোল্ট থেকে স্তরের নিচে স্থানান্তর করতে হবে। TXD পোর্টটি সরাসরি Arduino বা PC এর সাথে সংযুক্ত হতে পারে।

ধাপ 6: সময় অঞ্চল

জিপিএস সময় প্রদর্শন করা একটি সহজ জিনিস যতক্ষণ আপনি কেবল ইউটিসি (ইউনিভার্সাল টাইম কোঅর্ডিনেটেড) প্রদর্শন করতে চান। NMEA বাক্যগুলি ASCII অক্ষর দিয়ে গঠিত যা সরাসরি LCD তে আউটপুট হতে পারে। সময়ের অংশটি HHMMSS. FF (ঘন্টা, মিনিট, সেকেন্ড এবং ভগ্নাংশ সেকেন্ড) বিন্যাসে রয়েছে। আমাদের ঘড়ির জন্য ভগ্নাংশ অংশটি দরকারী নয় তাই আমাদের ছয়টি অক্ষর মোকাবেলা করতে হবে। সমস্যা হল যে তারপর আপনি আপনার স্থানীয় সময় এবং 12 ঘন্টার AM/PM ফরম্যাটে রূপান্তর করতে চান যদি আপনি চান। তবে কখনও কখনও সমস্যাগুলি যা জীবনকে আকর্ষণীয় করে তোলে তাই সফ্টওয়্যারের সেই অংশটিই আসলে।

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

ধাপ 7: পরিকল্পিত

পরিকল্পিত
পরিকল্পিত

পরিকল্পিত উপরে দেখানো হয়েছে এবং একটি 4-বিট 1602 LCD ইন্টারফেসের জন্য সংযোগগুলি অন্তর্ভুক্ত করে। আরএফ রিসিভার থেকে সিরিয়াল ডেটা ডিজিটাল লজিক লেভেলে থাকে তাই এটি সরাসরি Arduino ডেটা ইনপুট পিনের একটিতে সংযুক্ত থাকে। পিনটি সফ্টওয়্যারে কনফিগার করা হয় যাতে একটি ইন্টারাপ্ট-অন-চেঞ্জ ফাংশন করা যায় যাতে আমরা নাড়ির প্রস্থ পরিমাপ করতে পারি। জিপিএস TXD আউটপুট সরাসরি Arduino RX ইনপুটের সাথে সংযুক্ত।

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

দ্বিতীয় সুইচ একটি সহজ চালু/বন্ধ সুইচ। "বন্ধ" অবস্থানে সময়টি 12-ঘন্টা বিন্যাসে (AM/PM) এবং "চালু" অবস্থানে সময়টি 24-ঘন্টা বিন্যাসে প্রদর্শিত হবে। ফরম্যাটের মধ্যে টগল করার জন্য যে কোন সময় এই সুইচ পরিবর্তন করা যেতে পারে।

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

ধাপ 8: LCD সফটওয়্যার

আমি দুই ধরনের LCD ইন্টারফেস ব্যবহার করতে চাই। একটি হল স্ট্যান্ডার্ড 4-বিট ইন্টারফেস এবং অন্যটি একটি 3-ওয়্যার ইন্টারফেস যা একটি শিফট রেজিস্টার ব্যবহার করে। আমি সেই ইন্টারফেসটি ডিজাইন করেছি যখন আমি ছোট PIC মাইক্রোকন্ট্রোলারগুলির সাথে কাজ করছিলাম যার সীমিত সংখ্যক I/O পিন ছিল। আমি এই প্রকল্পের জন্য 4-বিট ইন্টারফেস ব্যবহার করেছি কিন্তু জেনেরিক আরডুইনো এলসিডি লাইব্রেরি ব্যবহারের পরিবর্তে আমার নিজের এলসিডি ফাইল রয়েছে। এটি মেমরির খরচ এবং কোড জটিলতা হ্রাস করে এবং আমাকে এই ধরনের নির্দিষ্ট প্রকল্পগুলির জন্য কোডটি টুইক করার অনুমতি দেয়।

ধাপ 9: ক্লক সফটওয়্যার

জিপিএস ইউনিট স্ট্যান্ডার্ড NMEA-0183 বাক্য আউটপুট করে যা ASCII স্ট্রিং যা বিভিন্ন ধরনের তথ্য ধারণ করে। এই অ্যাপ্লিকেশনের জন্য আমি সময় তথ্য পেতে GGA বাক্যটি বেছে নিলাম কারণ এটি সেই বাক্য যা আমি আগের জিপিএস প্রকল্পের জন্য ব্যবহার করেছি। NMEA বাক্যে তথ্যের ক্ষেত্রগুলি কমা দ্বারা পৃথক করা হয়, তাই GGA বাক্য শিরোনাম সনাক্ত হওয়ার পরে, সফ্টওয়্যারটি সাধারণত কমা গণনা করে এবং GPS তথ্যের প্রতিটি পছন্দসই ক্ষেত্রের জন্য উপযুক্ত রুটিন কল করে। এখানে শুধুমাত্র সময়ের তথ্য প্রয়োজন এবং এটি প্রথম কমা পরে মাঠে তাই কোন গণনার প্রয়োজন নেই।

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

যদি সফ্টওয়্যারটি শুধুমাত্র সময় প্রদর্শন করার জন্য কনফিগার করা হয়, তাহলে LCD এর প্রথম লাইনটি স্থানীয় সময় এবং দ্বিতীয় লাইনটি UTC প্রদর্শন করবে। UTC- র জন্য সফটওয়্যারটি শুধু ASCII অক্ষরগুলিকে সরাসরি ডিসপ্লে রুটিনে পাঠায়, যাতে কোলন (:) যথাযথভাবে োকানো হয়।

ইউটিসিকে স্থানীয় সময়ে রূপান্তর করার জন্য, ইউটিসি অফসেট (টাইম জোন) প্রয়োগ করতে হবে। যেহেতু GPS থেকে UTC সময় ASCII ফরম্যাটে থাকে, সফটওয়্যারটি ASCII ঘন্টার অক্ষরকে দশমিক রূপান্তর করে এবং তারপর UTC অফসেট যোগ করে। ইউটিসি অফসেট একটি সাইন বিট সহ একটি ধনাত্মক BCD মান হিসাবে সংরক্ষণ করা হয় তাই এটি প্রথমে একটি পূর্ণসংখ্যা মান রূপান্তরিত হয় এবং তারপর সাইন বিট সেট করা হলে নেগেটিভ হয়। একবার স্থানীয় সময় ঘন্টা মান গণনা করা হলে, এটি একটি BCD তে রূপান্তর করার জন্য একটি লুকআপ টেবিল ব্যবহার করা হয়, এবং তারপর BCD আবার প্রদর্শনের জন্য ASCII তে রূপান্তরিত হয়। সন্ধানের টেবিলে 24 ঘন্টা UTC বিন্যাসের পাশাপাশি +/- 12 সময় অঞ্চলগুলি পরিচালনা করতে হবে। এটি করার জন্য, 0000 থেকে 2300 পর্যন্ত ইউটিসি সময়গুলি টেবিলের মধ্যবর্তী 24 টি এন্ট্রি দখল করে 12 টি এন্ট্রি আগে এবং 12 টি এন্ট্রি পরে টাইম জোনের জন্য। একটি টেবিল 12 ঘন্টার ফর্ম্যাটে আছে তাই আমি ডিসপ্লের AM/PM অংশের জন্য একটি লুকআপ টেবিলও যোগ করেছি। অন্য টেবিলটি 24-ঘন্টা বিন্যাসে রয়েছে। পূর্বে উল্লিখিত হিসাবে, একটি চালু/বন্ধ সুইচ 12-ঘন্টা বা 24-ঘন্টা বিন্যাস নির্বাচন করার অনুমতি দেয়।

টাইম জোনটি EEPROM থেকে আরম্ভের সময় পুনরুদ্ধার করা হয় এবং সংক্ষিপ্তভাবে প্রদর্শিত হয়। যদি এটি অন্তত একবার সেট করা না থাকে তাহলে সেটিং রুটিন বলা হয়। ক্ষণস্থায়ী যোগাযোগ সুইচ টিপে যে কোন সময় সেটিং রুটিন বলা যেতে পারে। সেটিং রুটিন ডিসপ্লেকে "ইউটিসি অফসেট +77" এ শুরু করবে। সুইচটির একটি সংক্ষিপ্ত চাপ মানটিকে "-00" এ পরিবর্তন করবে। যদি একটি ইতিবাচক টাইম জোন প্রয়োজন হয়, তাহলে আরেকটি ছোট প্রেস মানটিকে "+00" এ পরিবর্তন করবে। একটি দীর্ঘ প্রেস (> 1 সেকেন্ড) সেটিং মোডকে পরবর্তী ধাপে নিয়ে যাবে। এই মুহুর্তে প্রতিটি ছোট প্রেস সর্বোচ্চ 12 পর্যন্ত সময় মান বৃদ্ধি করবে। পছন্দসই সময় অঞ্চলে পৌঁছানোর পর, 1 সেকেন্ডের বেশি সময় ধরে সুইচ টিপুন এবং ধরে রাখুন। সফটওয়্যারটি তখন EEPROM- এ UTC মান সংরক্ষণ করবে এবং সংক্ষেপে "অফসেট সংরক্ষিত" প্রদর্শন করবে। যদি আপনি প্রবেশের সময় ভুল করেন, তবে কেবল প্রস্থান করুন এবং তারপরে এটি পুনরায় সেট করতে আবার সুইচ টিপুন।

NEO-6M টাইম আউটপুট করার জন্য একটি ভাল পজিশন ফিক্সের প্রয়োজন হয় না তাই এটি একটি স্যাটেলাইট পাওয়ার সাথে সাথে মেসেজ আউটপুট করা উচিত। ততক্ষণ পর্যন্ত ডিসপ্লেতে "NO DATA" লেখা থাকবে।

ধাপ 10: আবহাওয়া সফটওয়্যার

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

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

ইন্টারাপ্ট হ্যান্ডলার নির্ধারণ করে যে ক্যাপচার করা কাউন্টটি স্টার্ট পালস হওয়ার জন্য যথেষ্ট দীর্ঘ কিনা। আগেই উল্লেখ করা হয়েছে, একাধিক বার্তার মধ্যে ব্যবধান 2ms তাই সফটওয়্যারটি সেটাই খুঁজছে। সমস্ত 433-মেগাহার্টজ ট্র্যাফিকের কারণে, সফ্টওয়্যারটিতে প্রাথমিক স্ক্রিনিং নিশ্চিত করে যে পরিমাপ করা সময় কমপক্ষে 1.8ms কিন্তু 2.4ms এর বেশি নয়। শুরু শনাক্ত হওয়ার পরে সফটওয়্যারটি সিঙ্ক বিট (600us) খোঁজে এবং চারটি প্রাপ্ত হয়েছে কিনা তা নিশ্চিত করার জন্য গণনা করে। একবার এই পরীক্ষাগুলি পাস হয়ে গেলে, সফ্টওয়্যারটি 200us এবং 400us এর সঠিক বিট সময়গুলি সন্ধান করে।

প্রাপ্ত বিটগুলি বাইটে গঠিত হয় এবং প্রতিটি বাইট সংরক্ষিত হয়। সাতটি বাইট পাওয়ার পর মেসেজ চেকসাম যাচাই করা হয় আরও প্রক্রিয়া করার আগে। যদি কাঁচা বাইট আউটপুট (ডিবাগ মোড) হয়, তাহলে বাইটগুলি ASCII অক্ষরে রূপান্তরিত হয় এবং LCD- এ পাঠানো হয়। যদি আর্দ্রতা এবং তাপমাত্রা আউটপুট পছন্দসই হয়, তাহলে উপযুক্ত রূপান্তর সঞ্চালিত হয়।

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

পিআইসিতে আরডুইনো বনাম অ্যাসেম্বলি ল্যাঙ্গুয়েজে সি ++ ব্যবহারের একটি বড় সুবিধা হল যে এটি গণিতের গণনাকে সহজ করে। আগেই উল্লেখ করা হয়েছে যে সেন্টিগ্রেড রূপান্তর হল (C / 10) -100। ফলাফলটি স্ট্রিংয়ে রূপান্তরিত হয় এবং ডিসপ্লের জন্য LCD- এ পাঠানো হয়। ফারেনহাইট গণনা হল (C * 1.8) + 32. ফলাফলটি আবার একটি স্ট্রিংয়ে রূপান্তরিত হয় এবং ডিসপ্লের জন্য LCD- এ পাঠানো হয়। উভয় ক্ষেত্রে, স্ট্রিং রূপান্তর নেতিবাচক চিহ্ন (যদি উপযুক্ত হয়) এবং দশমিক বিন্দু অন্তর্ভুক্ত করে। দশমিকের জন্য একটি চেক করা হয় যাতে নিশ্চিত করা যায় যে দশমিকের পরে শুধুমাত্র একটি অক্ষর প্রদর্শনে পাঠানো হয়েছে। সেই চেকের প্রয়োজন কারণ স্ট্রিংটির দৈর্ঘ্য 3 থেকে 5 অক্ষরের মধ্যে হতে পারে।

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

সফটওয়্যারটি ব্যাটারির অবস্থা পর্যবেক্ষণ করে (বাইট 3) এবং একটি বার্তা প্রদর্শন করে যদি এটি একটি কম ব্যাটারি নির্দেশ করে। এই বার্তাটি সেই সেন্সরের জন্য অন্যান্য সমস্ত ডেটা ওভাররাইট করে।

ধাপ 11: প্রদর্শন

প্রদর্শন করে
প্রদর্শন করে
প্রদর্শন করে
প্রদর্শন করে
প্রদর্শন করে
প্রদর্শন করে

বিভিন্ন ফাংশনের জন্য এখানে কিছু উদাহরণ প্রদর্শন করা হল। আমার আরও কয়েকটি নির্দেশিকা আছে কিন্তু আমার বেশিরভাগ PIC মাইক্রোকন্ট্রোলার প্রকল্প আমার ওয়েবসাইটে পাওয়া যাবে: www.boomerrules.wordpress.com

প্রস্তাবিত: