সুচিপত্র:

আরডুইনো আরএফ সেন্সর ডিকোডার: 5 টি ধাপ
আরডুইনো আরএফ সেন্সর ডিকোডার: 5 টি ধাপ
Anonim
আরডুইনো আরএফ সেন্সর ডিকোডার
আরডুইনো আরএফ সেন্সর ডিকোডার

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

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

ধাপ 1: সেন্সর মডিউল

সেন্সর মডিউল
সেন্সর মডিউল
সেন্সর মডিউল
সেন্সর মডিউল
সেন্সর মডিউল
সেন্সর মডিউল
সেন্সর মডিউল
সেন্সর মডিউল

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

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

ধাপ 2: হার্ডওয়্যার

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

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

আপনি যদি "3-ইন -1 টাইম এবং ওয়েদার ডিসপ্লে" -এ আমার নির্দেশনাটি পড়েন তবে আপনি দেখতে পাবেন যে আমি একটি সাধারণ RXB6, 433-MHz রিসিভার ব্যবহার করি। আপনি এই প্রকল্পের জন্য প্রয়োজনীয় স্বল্প পরিসরে কাজ করার জন্য সত্যিই সস্তা রিসিভার পেতে সক্ষম হতে পারেন কিন্তু আমি এখনও সুপার-হিটারোডাইন রিসিভার ব্যবহার করার সুপারিশ করছি।

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

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

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

ইন্টারাপ্ট হ্যান্ডলার প্রথমে নির্ধারণ করে যে ক্যাপচার করা গণনা স্টার্ট/সিঙ্ক পালস হওয়ার জন্য যথেষ্ট দীর্ঘ কিনা। আমার কাছে থাকা বিভিন্ন ডিভাইস 4, 9, 10, এবং 14 মিলিসেকেন্ডের সিঙ্ক ডাল ব্যবহার করে। ন্যূনতম/সর্বাধিক অনুমোদিত সিঙ্কের মানগুলির জন্য সংজ্ঞায়িত বিবৃতি সফটওয়্যারের সামনে এবং বর্তমানে 3 এবং 16 মিলিসেকেন্ডের জন্য সেট করা আছে। বিট সময়গুলি সেন্সরের মধ্যেও পরিবর্তিত হয় তাই ডিকোডিং বিটগুলির জন্য অ্যালগরিদমকে এটি বিবেচনায় নেওয়া দরকার। প্রথম বিটের বিট সময় সংরক্ষিত হয় যেমন পরবর্তী বিটের সময় যা প্রথম বিট থেকে উল্লেখযোগ্য পার্থক্য রাখে। পরবর্তী বিট সময়ের সরাসরি তুলনা সম্ভব নয় তাই একটি "ফজ ফ্যাক্টর" সংজ্ঞায়িত ("বৈচিত্র") ব্যবহার করা হয়। বিট ডিকোডিং শুরু করে অনুমান করে যে প্রথম ডেটা বিট সর্বদা যুক্তি হিসাবে রেকর্ড করা হয়। সেই মানটি সংরক্ষণ করা হয় এবং তারপর পরবর্তী বিটগুলি পরীক্ষা করার জন্য ব্যবহার করা হয়। যদি পরবর্তী ডেটা বিট গণনা সংরক্ষিত মানের বৈচিত্র্য উইন্ডোর মধ্যে থাকে তবে এটি একটি যুক্তি হিসাবেও রেকর্ড করা হয় 1. যদি এটি সংরক্ষিত মানের বৈকল্পিক উইন্ডোর বাইরে থাকে তবে এটি একটি যুক্তি হিসাবে রেকর্ড করা হয় 0. যদি যুক্তি 0 বিট সময় প্রথম বিট সময়ের চেয়ে ছোট হয় তারপর একটি পতাকা সেট করা হয় যে সফ্টওয়্যারকে বলার জন্য যে বাইটগুলি প্রদর্শনের আগে উল্টানো দরকার। একমাত্র ক্ষেত্রে যেখানে এই অ্যালগরিদম ব্যর্থ হয় যখন একটি বার্তার বিট সব 0 এর হয়। আমরা সেই সীমাবদ্ধতা গ্রহণ করতে পারি কারণ এই ধরনের বার্তা অর্থহীন।

আমি যেসব সেন্সরগুলিতে আগ্রহী সেগুলির একটি বার্তার দৈর্ঘ্য ২ data টি ডেটা বিট কিন্তু সফ্টওয়্যারটি সেই দৈর্ঘ্যের মধ্যে সীমাবদ্ধ নয়। সাতটি বাইট পর্যন্ত একটি বাফার রয়েছে (আরও যোগ করা যেতে পারে) এবং বাইটে সর্বনিম্ন এবং সর্বাধিক বার্তার দৈর্ঘ্যের জন্য সংজ্ঞায়িত করে। সফটওয়্যারটি বিট সংগ্রহ করতে, সেগুলোকে বাইটে রূপান্তর করতে, সাময়িকভাবে সংরক্ষণ করতে এবং তারপর সিরিয়াল পোর্টের মাধ্যমে ASCII ফরম্যাটে আউটপুট করার জন্য সেট আপ করা হয়েছে। যে ঘটনাটি বার্তার আউটপুটকে ট্রিগার করে তা হল একটি নতুন স্টার্ট/সিঙ্ক পালস প্রাপ্তি।

ধাপ 4: ডেটা লগিং

তথ্য লগিং
তথ্য লগিং

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

ধাপ 5: নমুনা রিসিভার সফটওয়্যার

নমুনা রিসিভার সফটওয়্যার
নমুনা রিসিভার সফটওয়্যার

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

প্রস্তাবিত: