সুচিপত্র:

সুপার সিম্পল রাস্পবেরি পাই 433MHz হোম অটোমেশন: 7 টি ধাপ
সুপার সিম্পল রাস্পবেরি পাই 433MHz হোম অটোমেশন: 7 টি ধাপ

ভিডিও: সুপার সিম্পল রাস্পবেরি পাই 433MHz হোম অটোমেশন: 7 টি ধাপ

ভিডিও: সুপার সিম্পল রাস্পবেরি পাই 433MHz হোম অটোমেশন: 7 টি ধাপ
ভিডিও: [2K] Satisfying Cooking Videos -14 Fruit Desserts Recipes | NO BGM | ASMR Cooking 2024, নভেম্বর
Anonim
সুপার সিম্পল রাস্পবেরি পাই 433MHz হোম অটোমেশন
সুপার সিম্পল রাস্পবেরি পাই 433MHz হোম অটোমেশন

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

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

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

এই প্রকল্পের জন্য আপনার প্রয়োজন হবে:

একটি রাস্পবেরি পাই। যে কোনও মডেলের কাজ করা উচিত, আমি অল-ইন-ওয়ান স্টার্টার কিট ব্যবহার করেছি, তবে সম্ভবত আপনার কেবল কেন্দ্রীয় ইউনিট দরকার।

একটি 433MHz ট্রান্সমিটার/রিসিভার জোড়া। এই ধরনের প্রজেক্টে যেগুলো সবচেয়ে বেশি ব্যবহৃত হয় সেগুলোই মনে হয়। লিঙ্ক করা পাঁচটির মতো একটি প্যাক কেনা নিশ্চিত করে যে আপনার কাছে কিছু অতিরিক্ত জিনিস রয়েছে।

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

কিছু সার্কিট-বিল্ডিং আনুষাঙ্গিক। সার্কিট বিল্ডিং প্রক্রিয়াকে যতটা সম্ভব সহজ করার জন্য আমি একটি ব্রেডবোর্ড এবং কিছু জাম্পার কেবল ব্যবহার করার পরামর্শ দিচ্ছি।

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

ধাপ 1: রিসিভার ইউনিট সেট আপ করা

রিসিভার ইউনিট সেট আপ
রিসিভার ইউনিট সেট আপ

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

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

আপনার সকেটগুলি কীভাবে হ্যান্ডসেটের সাথে ইন্টারঅ্যাক্ট করে তা বের করার পরে, আপনাকে হ্যান্ডসেট দ্বারা পাঠানো কোডগুলি 'স্নিফ' করার জন্য আপনার 433MHz রিসিভার ইউনিট (উপরে চিত্র) ব্যবহার করতে হবে। একবার আপনি এই কোডগুলির তরঙ্গাকৃতি রেকর্ড করে নিলে, আপনি পাইথন ব্যবহার করে তাদের প্রতিলিপি করতে পারেন এবং ট্রান্সমিটার ইউনিট ব্যবহার করে তাদের পাঠাতে পারেন।

এখানে প্রথম জিনিসটি হল আপনার রিসিভারের পিনগুলিকে পাই -তে সঠিক জিপিআইও পিনের সাথে যুক্ত করা। রিসিভার ইউনিটে চারটি পিন আছে, কিন্তু তাদের মধ্যে মাত্র তিনটি প্রয়োজন। আমি মনে করি উভয় কেন্দ্রীয় পিন একই আউটপুট দেয়, তাই আপনাকে কেবল তাদের একটির সাথে সংযোগ করতে হবে (যদি না আপনি দুটি পৃথক GPIO পিনে প্রাপ্ত সংকেতগুলি প্রবাহিত করতে চান)।

উপরের চিত্রটি তারের সংক্ষিপ্তসার সংক্ষিপ্ত করে। রিসিভারের প্রতিটি পিন সরাসরি পাইতে সংশ্লিষ্ট পিনের সাথে যুক্ত করা যেতে পারে। প্রক্রিয়াটিকে আরও মার্জিত করতে আমি একটি ব্রেডবোর্ড এবং জাম্পার কেবল ব্যবহার করি। মনে রাখবেন যে কেন্দ্রীয় রিসিভার পিনের সাথে সংযোগ করতে আপনি যেকোনো GPIO ডেটা পিন চয়ন করতে পারেন। আমি আমার পাই হেডারে '23' হিসেবে চিহ্নিত পিন ব্যবহার করেছি।

গুরুত্বপূর্ণ: যদি আপনি উপরের ছবিতে '3v3' চিহ্নিত পিনটিকে Pi (যেমন 5v) এর একটি উচ্চ ভোল্টেজ পিনের সাথে সংযুক্ত করেন, তাহলে আপনি সম্ভবত Pi কে ক্ষতিগ্রস্ত করবেন কারণ GPIO পিনগুলি 3v3 এর উপরে ভোল্টেজ সহ্য করতে পারে না। বিকল্পভাবে, আপনি এটি 5v দিয়ে পাওয়ার করতে পারেন এবং DATA পিনে একটি নিরাপদ ভোল্টেজ পাঠানোর জন্য একটি ভোল্টেজ ডিভাইডার স্থাপন করতে পারেন।

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

ধাপ 2: হ্যান্ডসেট কোড শুকনো

হ্যান্ডসেট কোড শুকনো
হ্যান্ডসেট কোড শুকনো

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

আপনি এই প্রক্রিয়াটি শুরু করার আগে, আপনাকে নিশ্চিত করতে হবে যে আপনার স্নাইফার স্ক্রিপ্ট চালানোর জন্য প্রয়োজনীয় পাইথন লাইব্রেরি আছে। তারা স্ক্রিপ্টের শীর্ষে তালিকাভুক্ত:

তারিখ থেকে আমদানি তারিখ সময়

pyplot হিসাবে matplotlib.pyplot আমদানি করুন RPi. GPIO GPIO হিসাবে আমদানি করুন

RPi. GPIO এবং ডেটটাইম লাইব্রেরিগুলি আমার রাস্পবিয়ান বিতরণের সাথে অন্তর্ভুক্ত ছিল, কিন্তু আমাকে নিম্নরূপ matplotlib লাইব্রেরি ইনস্টল করতে হয়েছিল:

sudo apt-get python-matplotlib ইনস্টল করুন

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

যখন এটি চালানো হয় ('python ReceiveRF.py' কমান্ড ব্যবহার করে), এটি সংজ্ঞায়িত GPIO পিনকে একটি ডেটা ইনপুট হিসাবে কনফিগার করবে (ডিফল্টভাবে 23 পিন)। তারপর এটি ক্রমাগত পিনের নমুনা দেবে এবং লগ করবে যে এটি ডিজিটাল 1 বা 0 পাচ্ছে কিনা। যখন এই সময়সীমা পৌঁছে যায়, স্ক্রিপ্ট ডেটা রেকর্ড করা বন্ধ করে দেয় এবং GPIO ইনপুট বন্ধ করে দেয়। এটি তখন একটু পোস্ট-প্রসেসিং করে এবং সময়ের বিপরীতে প্রাপ্ত ইনপুট মানকে প্লট করে। আবার, স্ক্রিপ্টটি কী করছে সে সম্পর্কে আপনার যদি প্রশ্ন থাকে তবে আপনি কীভাবে এটি কাজ করে তা দেখার পরে আপনি সম্ভবত সেগুলির উত্তর দিতে পারেন। আমি কোডটি যতটা সম্ভব পাঠযোগ্য এবং সহজ করার চেষ্টা করেছি।

আপনাকে যা করতে হবে তা দেখতে হবে যখন স্ক্রিপ্ট ইঙ্গিত দেয় যে এটিতে ** রেকর্ডিং শুরু হয়েছে **। একবার এই বার্তাটি উপস্থিত হলে, আপনার হ্যান্ডসেটের একটি বোতাম প্রায় এক সেকেন্ডের জন্য টিপে ধরে রাখা উচিত। এটি রিসিভারের কাছাকাছি ধরে রাখতে ভুলবেন না। একবার স্ক্রিপ্ট রেকর্ডিং শেষ হয়ে গেলে, এটি রেকর্ডিং ব্যবধানের সময় প্রাপ্ত সংকেতের একটি গ্রাফিকাল তরঙ্গাকৃতি চক্রান্ত করতে matplotlib ব্যবহার করবে। অনুগ্রহ করে মনে রাখবেন, যদি আপনি আপনার SSI ক্লায়েন্ট যেমন PuTTY ব্যবহার করে আপনার Pi- এর সাথে সংযুক্ত থাকেন, তাহলে তরঙ্গাকৃতি প্রদর্শন করার জন্য আপনাকে একটি X11 অ্যাপ্লিকেশনও খুলতে হবে। আমি এর জন্য xMing ব্যবহার করি (এবং অন্যান্য জিনিস যেমন আমার Pi- এ রিমোট-ডেস্কটপিং)। প্লটটি প্রদর্শনের অনুমতি দেওয়ার জন্য, আপনি স্ক্রিপ্ট চালানোর আগে কেবল xMing শুরু করুন এবং ফলাফলগুলি প্রদর্শিত হওয়ার জন্য অপেক্ষা করুন।

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

ধাপ 3: ফলাফল সংকেত প্রতিলিপি করা

ফলাফল সংকেত প্রতিলিপি করা
ফলাফল সংকেত প্রতিলিপি করা

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

1 = short_on + long_off0 = long_on + short_off

লেবেলযুক্ত তরঙ্গাকৃতির দিকে আবার তাকান, এবং আপনি দেখতে পাবেন আমি কি বোঝাতে চাইছি। একবার আপনি আপনার সংকেত সমতুল্য নিদর্শন সনাক্ত করা হয়, আপনি কি করতে হবে 1 এবং 0 ক্রম তৈরি করতে হয়। যখন প্রতিলিপি করা হয়, উপরের সংকেতটি নিম্নরূপ লেখা যেতে পারে:

1111111111111010101011101

আপনার হ্যান্ডসেটের অন্যান্য বোতামগুলির সাথে সম্পর্কিত সংকেতগুলি রেকর্ড এবং প্রতিলিপি করার জন্য আপনাকে কেবল এই প্রক্রিয়াটি পুনরাবৃত্তি করতে হবে এবং আপনি প্রক্রিয়াটির প্রথম অংশটি সম্পন্ন করেছেন!

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

  • একটি 'সংক্ষিপ্ত' ব্যবধানের সময়কাল, যেমন 1 এর শুরু বা 0 এর শেষ।
  • একটি 'দীর্ঘ' ব্যবধানের সময়কাল, যেমন 1 এর শেষ বা 0 এর শুরু।
  • একটি 'বর্ধিত' ব্যবধানের সময়কাল। আমি লক্ষ্য করেছি যে যখন আমি হ্যান্ডসেটে একটি বোতাম চেপে ধরেছিলাম, সিগন্যাল ব্লকের প্রতিটি পুনরাবৃত্তির উদাহরণের মধ্যে একটি 'বর্ধিত_অফ' সময় ছিল। এই বিলম্ব সিঙ্ক্রোনাইজেশনের জন্য ব্যবহৃত হয় এবং এর একটি নির্দিষ্ট সময়কাল থাকে।

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

  • short_delay = 0.00045
  • long_delay = 0.00090 (একটি 'ছোট' হিসাবে দ্বিগুণ দীর্ঘ)
  • সম্প্রসারিত_ বিলম্ব = 0.0096

ধাপ 4: ট্রান্সমিটার ইউনিট সেট আপ করা

ট্রান্সমিটার ইউনিট সেট আপ করা হচ্ছে
ট্রান্সমিটার ইউনিট সেট আপ করা হচ্ছে

একবার আপনি আপনার কোড এবং টাইমিং ডেটা সংগ্রহ করলে, আপনি আপনার রিসিভার ইউনিটটি সংযোগ বিচ্ছিন্ন করতে পারেন কারণ আপনার আর এটির প্রয়োজন হবে না। তারপরে আপনি উপরের ছবিতে দেখানো হিসাবে সরাসরি প্রাসঙ্গিক পাই GPIO পিনগুলিতে ট্রান্সমিটারটি সংযুক্ত করতে পারেন। আমি দেখেছি যে ট্রান্সমিটার ইউনিটের পিনগুলি লেবেলযুক্ত, যা প্রক্রিয়াটিকে সহজ করে তোলে।

এই ক্ষেত্রে, পাই থেকে 5v সরবরাহ ব্যবহার করে ইউনিটকে শক্তি দেওয়া ঠিক আছে কারণ ডাটা পিন পাইকে সংকেত পাঠাবে না, কেবল সেগুলি গ্রহণ করবে। এছাড়াও, একটি 5v পাওয়ার সাপ্লাই 3v3 সাপ্লাই ব্যবহারের চেয়ে বেশি ট্রান্সমিশন পরিসীমা প্রদান করবে। আবার, আপনি Pi- এর যেকোনো উপযুক্ত পিনের সাথে DATA পিন সংযুক্ত করতে পারেন। আমি পিন 23 ব্যবহার করেছি (রিসিভারের জন্য একই)।

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

একবার ট্রান্সমিটার তারযুক্ত হয়ে গেলে, এটি সমস্ত হার্ডওয়্যার সেটআপ সম্পন্ন! এখন শুধু বাকি আছে আপনার সকেটগুলি বাড়ির চারপাশে সেট করুন এবং ট্রান্সমিটার প্রোগ্রামটি দেখুন।

ধাপ 5: পাই ব্যবহার করে সংকেত প্রেরণ

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

এই স্ক্রিপ্টটি চালানোর জন্য যেসব লাইব্রেরি দরকার ছিল সেগুলি সবই আমার পাই-তে ইনস্টল করা ছিল, তাই আর কোনও ইনস্টলেশনের প্রয়োজন হয়নি। তারা স্ক্রিপ্টের শীর্ষে তালিকাভুক্ত:

আমদানির সময়

আমদানি sys আমদানি RPi. GPIO GPIO হিসাবে

লাইব্রেরি আমদানির নীচে যে তথ্য আপনাকে সম্পাদনা করতে হবে। এটি ডিফল্টরূপে কেমন দেখায় তা এখানে (ধাপ 3 ব্যবহার করে নির্ধারিত হিসাবে আমার সকেটের সাথে সম্পর্কিত তথ্য):

a_on = '1111111111111010101011101'

a_off = '1111111111111010101010111' b_on = '1111111111101110101011101' b_off = '1111111111101110101010111' c_on = '1111111111101011101011101' c_off = '1111111111101011101010111' d_on = '1111111111101010111011101' d_off = '1111111111101010111010111' short_delay = 0,00045 long_delay = 0,00090 extended_delay = 0,0096

এখানে আমাদের আটটি কোড স্ট্রিং আছে (আমার হ্যান্ডসেটে প্রতিটি বোতাম অন/অফ বোতামের জন্য দুটি - আপনার কম বা কম কোড থাকতে পারে) এবং তারপরে টাইমিং তথ্যের তিনটি টুকরাও ধাপ 3 এ নির্ধারিত হয়। এই তথ্যটি সঠিকভাবে প্রবেশ করান।

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

স্ক্রিপ্ট চালানোর জন্য, আপনি নিম্নলিখিত কমান্ড সিনট্যাক্স ব্যবহার করতে পারেন:

পাইথন TransmitRF.py code_1 code_2…

আপনি স্ক্রিপ্টের একক রান দিয়ে একাধিক কোড স্ট্রিং প্রেরণ করতে পারেন। উদাহরণস্বরূপ, সকেট (a) এবং (b) চালু করতে এবং সকেট (c) বন্ধ করতে, নিচের কমান্ড দিয়ে স্ক্রিপ্টটি চালান:

পাইথন TransmitRF.py a_on b_on c_off

ধাপ 6: সময় সঠিকতার একটি নোট

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

কোড পাঠানোর সময় আমার ব্যক্তিগতভাবে time.sleep () সমস্যা নেই। তবে আমি জানি যে আমার time.sleep () প্রায় 0.1ms এর একটি ত্রুটি আছে। আমি সংযুক্ত SleepTest.py স্ক্রিপ্ট ব্যবহার করে এটি নির্ধারণ করেছি যা আপনার Pi এর time.sleep () ফাংশন কতটা সঠিক তা অনুমান করতে ব্যবহার করা যেতে পারে। আমার বিশেষ রিমোট-নিয়ন্ত্রিত সকেটের জন্য, আমার বাস্তবায়নের জন্য সবচেয়ে কম বিলম্ব ছিল 0.45ms। আমি যেমন বলেছি, আমার নন-রেসপনসিভ সকেটের সমস্যা হয়নি, তাই মনে হচ্ছে 0.45 ± 0.1ms যথেষ্ট ভাল।

বিলম্ব আরও সঠিক কিনা তা নিশ্চিত করার জন্য অন্যান্য পদ্ধতি রয়েছে; উদাহরণস্বরূপ, আপনি কোড তৈরি করতে একটি নিবেদিত PIC চিপ ব্যবহার করতে পারেন, কিন্তু এই ধরনের জিনিস এই টিউটোরিয়ালের আওতার বাইরে।

ধাপ 7: উপসংহার

উপসংহার
উপসংহার

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

  • আমার অ্যালার্ম বন্ধ হওয়ার আধ ঘন্টা আগে আমার বিছানার পাশে একটি বৈদ্যুতিক হিটার চালু করুন।
  • আমি ঘুমাতে যাওয়ার এক ঘণ্টা পর হিটার বন্ধ করে দেই।
  • আমার অ্যালার্ম বন্ধ হয়ে গেলে আমার বিছানার আলো জ্বালান যাতে আমি আবার ঘুমাতে না পারি।
  • এবং আরো অনেক…

এই বেশিরভাগ কাজের জন্য, আমি লিনাক্সের মধ্যে ক্রন্টাব ফাংশন ব্যবহার করি। এটি আপনাকে নির্দিষ্ট সময়ে TransmitRF.py স্ক্রিপ্ট চালানোর জন্য স্বয়ংক্রিয় নির্ধারিত কাজগুলি সেট করতে দেয়। আপনি লিনাক্স এ কমান্ড ব্যবহার করতে পারেন একক কাজগুলি চালানোর জন্য (যা আমার জন্য, 'sudo apt-get install at' ব্যবহার করে আলাদাভাবে ইনস্টল করা প্রয়োজন)। উদাহরণস্বরূপ, পরের দিন সকালে আমার অ্যালার্ম বন্ধ হওয়ার আধ ঘন্টা আগে আমার হিটার চালু করতে, আমাকে যা করতে হবে তা হল:

05:30 এ

পাইথন TransmitRF.py c_on

আপনি ইন্টারনেটে যন্ত্রপাতি নিয়ন্ত্রণ করতে আমার ড্রপবক্স হোম মনিটরিং সিস্টেমের সাথে এই প্রকল্পটি ব্যবহার করতে পারেন! পড়ার জন্য ধন্যবাদ, এবং যদি আপনি কিছু স্পষ্ট করতে চান বা আপনার মতামত শেয়ার করতে চান, দয়া করে একটি মন্তব্য পোস্ট করুন!

প্রস্তাবিত: