সুচিপত্র:

ইউনিভার্সাল টিভি রিমোট - Ardiuino, ইনফ্রারেড: 5 টি ধাপ
ইউনিভার্সাল টিভি রিমোট - Ardiuino, ইনফ্রারেড: 5 টি ধাপ

ভিডিও: ইউনিভার্সাল টিভি রিমোট - Ardiuino, ইনফ্রারেড: 5 টি ধাপ

ভিডিও: ইউনিভার্সাল টিভি রিমোট - Ardiuino, ইনফ্রারেড: 5 টি ধাপ
ভিডিও: L336 Universal Smart IR Learning Remote Controller with Copy Function | Learning Remote Price In BD 2024, জুলাই
Anonim
ইউনিভার্সাল টিভি রিমোট - আরডুইনো, ইনফ্রারেড
ইউনিভার্সাল টিভি রিমোট - আরডুইনো, ইনফ্রারেড

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

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

সরবরাহ

আপনার যা প্রয়োজন হবে: -আরডুইনো ইউএনও বা ন্যানো - মাইলেজ অন্যান্য বোর্ডের সাথে পরিবর্তিত হতে পারে

-সোল্ডারলেস ব্রেডবোর্ড (অথবা বিক্রয়যোগ্য স্ট্রিপবোর্ড যদি আপনি এটিকে আরো স্থায়ী করতে চান)

-বিভিন্ন রং এবং দৈর্ঘ্যের জাম্পারওয়্যার

স্মারক ধাক্কা বোতাম (5) (আপনি আরও বোতাম যোগ করতে পারেন, কিন্তু আপনাকে ডিজিটাল পিন ব্যবহার করতে হবে, যেহেতু 1 টি এনালগ পিন ব্যবহার করা হয় - আপনাকে নিশ্চিত করতে হবে যে আপনি সঠিকভাবে টান আপ প্রতিরোধক ব্যবহার করছেন, বা প্রতিরোধক টানুন, এবং ধাক্কা বোতাম debounce)

-10 কে ওহম রোধকারী (5) (যদি আপনি আরও পুশ বোতাম চান, তাহলে আপনাকে এর আরও প্রয়োজন হবে)

-470 ওহম প্রতিরোধক (2)

-ইনফ্রারেড LED

-লাল LED

-ইনফ্রারেড সেন্সর (আমি পার্ট নম্বর VS1838B ব্যবহার করেছি, আপনি অন্যটি ব্যবহার করতে পারেন, শুধু পিন-আউট চেক করুন)

(Alচ্ছিক) সোল্ডারিং আয়রন, সোল্ডার, সোল্ডার ফ্লাক্স।

ধাপ 1: সার্কিট নির্মাণ:

সার্কিট নির্মাণ
সার্কিট নির্মাণ

1)। আমি সর্বদা আমার উপাদানগুলি বিছিয়ে দিয়ে শুরু করতে পছন্দ করি, কারণ এটি সর্বদা রুটিবোর্ডে লেআউট চালায়।

-বোতাম টিপুন

-LEDS: লাল LED এবং IR LED একসাথে তারযুক্ত, তাই আপনি দেখতে পারেন IR LED কি করছে।

-সেন্সর

2)। প্রতিরোধক

- আমরা পুশ বোতামগুলির সাথে যে পাঁচটি 10K প্রতিরোধক সংযুক্ত করেছি সেগুলিকে "পুল ডাউন" প্রতিরোধক বলা হয়। প্রতিরোধকারীদের নিচে টানুন নিশ্চিত করুন যে যখন একটি ধাক্কা বোতাম চাপানো হয় না, তখন সংশ্লিষ্ট Arduino পিন 0 ভোল্ট (বা কমপক্ষে এটির কাছাকাছি) পায়। টান ডাউন (বা টান আপ) প্রতিরোধক সম্পর্কে আরও তথ্যের জন্য এখানে একটি গভীর নির্দেশিকা রয়েছে:

www.electronics-tutorials.ws/logic/pull-up…

এই প্রতিরোধকগুলি সম্পূর্ণরূপে প্রয়োজনীয় নাও হতে পারে, কিন্তু যদি আপনি "ভূত" ধাক্কা পান, তবে এটি সম্ভবত ক্যাপাসিটিভ কাপলিং দ্বারা সৃষ্ট এবং প্রতিরোধকারীদের টানতে এটি প্রতিরোধ করে।

3)। সার্কিট তারের

4)। 5V এবং গ্রাউন্ড ওয়্যার

রেফারেন্সের জন্য প্রদত্ত ছবি ব্যবহার করুন! যদিও আপনার প্রয়োজনে এটি পরিবর্তন করতে ভয় পাবেন না!

ধাপ 2: কোড:

#অন্তর্ভুক্ত const int RECV_PIN = 7; // আইআর সেন্সর রিড পিন int বাটন 1 = A4; // দূরতম বাম int বাটন 2 = A3; // বাম int থেকে Button3 = A2; // মধ্য int বাটন 4 = A1; // ডানদিকে ২ য় int Button5 = A0; // ডানদিকের সবচেয়ে দূরবর্তী LED = 3; // IR LED & Red LED int val = 0; // মান পরিবর্তন IRsend irsend; IRrecv irrecv (RECV_PIN); decode_results ফলাফল;

অকার্যকর সেটআপ () {পিনমোড (বাটন 1, ইনপুট); pinMode (Button2, INPUT); pinMode (Button3, INPUT); pinMode (Button4, INPUT); pinMode (Button5, INPUT); পিনমোড (LED, আউটপুট); Serial.begin (9600); irrecv.enableIRIn (); irrecv.blink13 (true);} void loop () {{{if (analogRead (Button1)> 900) irsend.sendNEC (0xFF02FD, 32); // বন্দী ক্যাপাসিট্যান্স সমস্যা এড়াতে ডিজিটাল পড়ার পরিবর্তে এনালগ রিড ব্যবহার করা। এছাড়াও, বোতামগুলি ডিবাউন্স করতে সাহায্য করে। // 900 এ এনালগ পড়ার ফলে মানগুলির মধ্যে কিছু ভিগল রুমের অনুমতি দেয়, অর্থাত্, পিনে সম্পূর্ণ 5V না লাগলেও ইনফ্রা সংকেত পাঠানো হবে। / // "i <3" এর মান পরিবর্তন করলে সংকেতটি অবিলম্বে পুনরাবৃত্তি হওয়ার সংখ্যা পরিবর্তন হবে। তাই "i <2" সিগন্যাল দুবার পুনরাবৃত্তি করবে। // আপনার টিভি সাড়া না দিলে আপনাকে এই নম্বরটি নিয়ে খেলা করতে হতে পারে, সাধারণত, 1 বা 3 সবচেয়ে বেশি কাজ করে, যদি সেগুলি না হয় তবে বিজোড় সংখ্যার চেষ্টা করুন। // আপনাকে হয়তো ইন্ট্রা সিগন্যাল বিলম্ব টাইমিং মানগুলির সাথে খেলতে হবে, উদাহরণস্বরূপ, আমার টিভি 10 কাজের জন্য, কিন্তু 30 টি নয়। {irsend.sendSony (0xa90, 12); // সনি টিভি পাওয়ার কোড, আমার টিভির জন্য, কোডটি 3x3 পাঠাতে হবে, তাই 3 টি ডাল, তিনটি পৃথক বার বিলম্ব (10); // (int i = 0; i <3; i ++) {irsend.sendSony (0xa90, 12); // "12" হল বিট সংখ্যা, বিভিন্ন প্রোটোকল বিভিন্ন বিট সংখ্যার জন্য কল করে। এনইসি 32, সনি 12, আপনি অন্যদের বিলম্ব দেখতে পারেন (10); জন্য (int i = 0; i 900) {for (int i = 0; i 900) {for (int i = 0; i 900) {for (int i = 0; i <3; i ++) {irsend.sendSony (0xc90, 12); // সনি টিভি পাওয়ার ভলিউম ডাউন বিলম্ব (100);}}} বিলম্ব (100);} যদি (irrecv.decode (& results)) // কোডের নিচের অংশটি আপনাকে বিভিন্ন রিমোট থেকে ইনফ্রা রেড সিগন্যাল ব্যাখ্যা করতে সক্ষম করে। {Serial.println (results.value, HEX); // এটি "NEC, Sony, ইত্যাদি.." এবং একটি টিভি কোড "c90, a90, FF02FD" পদ্ধতি তৈরি করবে, আপনাকে টিভি কোড সুইচের সামনে 0x যোগ করতে হবে (results.decode_type) {case DENON: Serial.println ("DENON"); বিরতি; case NEC: Serial.println ("NEC"); বিরতি; ক্ষেত্রে PANASONIC: Serial.println ("PANASONIC"); বিরতি; কেস SONY: Serial.println ("SONY"); বিরতি; কেস RC5: Serial.println ("RC5"); বিরতি; কেস JVC: Serial.println ("JVC"); বিরতি; কেস SANYO: Serial.println ("SANYO"); বিরতি; কেস মিত্সুবিশি: Serial.println ("মিতসুবিশি"); বিরতি; কেস স্যামসাং: Serial.println ("SAMSUNG"); বিরতি; কেস এলজি: সিরিয়াল.প্রিন্টলন ("এলজি"); বিরতি; কেস RC6: Serial.println ("RC6"); বিরতি; কেস DISH: Serial.println ("DISH"); বিরতি; কেস শার্প: Serial.println ("SHARP"); বিরতি; কেস হোয়াইটার: Serial.println ("WHYNTER"); বিরতি; কেস AIWA_RC_T501: Serial.println ("AIWA_RC_T501"); বিরতি; ডিফল্ট: কেস UNKNOWN: Serial.println ("UNKNOWN"); বিরতি;} irrecv.resume ();}}

ধাপ 3: গভীরতার কোড: আইআর সিগন্যাল পাঠানো

আমি তাদের লাইন নম্বর দ্বারা কোডের লাইন উল্লেখ করব - অনুসরণ করতে, এই লিঙ্কটি ব্যবহার করুন:

pastebin.com/AQr0fBLg

প্রথমত, আমাদের z3t0 দ্বারা IR দূরবর্তী লাইব্রেরি অন্তর্ভুক্ত করতে হবে।

এখানে লাইব্রেরির একটি লিঙ্ক দেওয়া হল:

github.com/z3t0/Arduino-IRremote

লাইব্রেরি কিভাবে সঠিকভাবে ডাউনলোড করে আইডিইতে ইনস্টল করবেন সে সম্পর্কে আপনার যদি গাইডের প্রয়োজন হয়:

www.arduino.cc/en/guide/libraries

লাইন 1 লাইব্রেরি অন্তর্ভুক্ত।

পরবর্তী, আমাদের কয়েকটি ভেরিয়েবল ঘোষণা করতে হবে, লাইন 2-12 এটি করে।

আমরা এই ভেরিয়েবলের সংজ্ঞা দিতে "cost int" ব্যবহার করি যা পরিবর্তিত হবে না, সবই এই শ্রেণীতে পড়ে।

আমরা পরিবর্তনশীল সংজ্ঞায়িত করতে "int" ব্যবহার করি।

আমাদের LED পিনের জন্য আমাদের অবশ্যই পালস সহ মডুলেশন (PWM) সহ একটি পিন ব্যবহার করতে হবে - যে কোন পিনের পাশে "~" থাকবে, আমার কোডে যথেষ্ট হবে - আমরা ডিজিটাল পিন 3 ব্যবহার করি।

পরবর্তীতে, আমাদের কিছু সেটআপ করতে হবে - এই কোডটি শুধুমাত্র একবার চালানো হবে যখন Arduino চালিত হবে বা পুনরায় সেট হবে।

লক্ষ্য করুন যে আমরা আমাদের ইনপুট এবং আউটপুট (15-20) সংজ্ঞায়িত করছি, সিরিয়াল মনিটর (21) গুলি চালাচ্ছি, আইআর সেন্সর (22) সক্ষম করছি, এবং আরডুইনোকে বলছি যে কোন সময় আমরা সেন্সরে সিগন্যাল পাই 23)।

এরপরে, আমরা আমাদের লুপ তৈরি করব - এই কোডটি বারবার চলবে, উপরে থেকে নীচে এক সেকেন্ডে মুষ্টিমেয় বার।

লাইন 25 এ, আমরা একটি if স্টেটমেন্ট ব্যবহার করি, এটি Arduino কে বলে "এই নির্দিষ্ট মানদণ্ডের সন্ধান করুন, যদি সেই মানদণ্ড পূরণ হয়, তাহলে এই নির্দিষ্ট কাজটি করুন"। এই ক্ষেত্রে, মানদণ্ড হল analogRead (Button1)> 900, অথবা অন্য কথায় - "Arduino, বাটন 1 দেখুন, যা আমরা আগে পিন A4 হিসাবে সংজ্ঞায়িত করেছি, যদি প্রাপ্ত এনালগ সিগন্যাল 900 এর বেশি হয়, দয়া করে আমাদের পরবর্তী নির্দেশাবলীতে এগিয়ে যান, যদি না হয়, দয়া করে এগিয়ে যান "। এখানে আনপ্যাক করার জন্য কিছুটা আছে, তাই ডুব দিন: Arduino এ একটি এনালগ সংকেত হল 5V এর সমান বা কম মান, 5V সমান 1023 এবং 0V সমান 0। একটি সংখ্যা, এবং কিছুটা গণিতের সাহায্যে, আমরা সেই সংখ্যাটি বের করতে পারি, অথবা বিপরীতভাবে, একটি ভোল্টেজ। 1024 (আমরা 0 কে একক হিসাবে অন্তর্ভুক্ত করি) 5 দ্বারা ভাগ করুন, যা আমাদের 204.8 দেয়। উদাহরণস্বরূপ, আমরা 900 নম্বরটি ব্যবহার করি, এটিকে ভোল্টেজে অনুবাদ করার জন্য, আমরা কেবল 900 কে 204.8 দিয়ে ভাগ করি, আমাদের ~ 4.4V প্রদান করে। আমরা Arduino কে বলছি ~ 4.4 ভোল্টের চেয়ে বেশি ভোল্টেজ খুঁজতে, এবং যদি তা হয়, আমাদের পরবর্তী নির্দেশনাটি করুন।

পরবর্তী নির্দেশাবলীর কথা বললে (লাইন 25), আমরা irsend.sendNEC (0xFF02FD, 32) দেখি। এটি বলে "Arduino, একটি মডুলেটেড পালস পাঠান যা NEC প্রোটোকল অনুসরণ করে, বিশেষ করে FF02FD সংকেত, এবং নিশ্চিত করুন যে এটি 32 বিট লম্বা"। এটি আমাদের IR LED ফ্লিকারকে এমনভাবে তৈরি করবে যা অন্যান্য ডিভাইস বুঝতে পারে। এটিকে একটু মোর্স কোডের মতো মনে করুন, তবে কেবল অদৃশ্য আলো দিয়ে! সেখানে অনেকগুলি বিভিন্ন প্রোটোকল রয়েছে, যার মধ্যে শত শত নয় যদি হাজার হাজার পৃথক সংকেত থাকে এবং প্রতিটি তাদের নির্দিষ্ট বিট সংখ্যার সাথে - আমাদের ডিভাইস এই সংকেতগুলির একটি বড় পরিমাণ চিনতে সক্ষম হবে, তবে আমরা পরে এটিতে ডুব দেব!

28 তম লাইনে, আমাদের প্রথম বিলম্ব আছে - এটি এখানে অনিচ্ছাকৃত পুনরাবৃত্তি সংকেত রোধ করার জন্য, একবার বোতাম চাপলে এবং আইআর সংকেত পাঠানো হলে, আমাদের বোতামটি বন্ধ করার জন্য আমাদের 100 মিলিসেকেন্ড আছে। এটি অনেক সময়ের মতো শোনাচ্ছে না, তবে অনুশীলনে এটি ঠিক কাজ করছে বলে মনে হচ্ছে। বিলম্ব ফাংশনটি Arduino কে বলে "X মিলিসেকেন্ডের জন্য কিছুই করবেন না" এবং রেফারেন্সের জন্য, সেগুলি এক সেকেন্ডে 1000 মিলিসেকেন্ড।

লাইন 29, বাটন 5 এ আমাদের পরবর্তী বোতামে অগ্রসর হওয়া এটি, আত্মায়, বোতাম 1 এর মতো একই জিনিস, তবে কয়েকটি মূল পার্থক্য সহ। আপনি যে প্রথম পার্থক্যটি দেখবেন তা হল একটি বিবৃতির জন্য - এটি মূলত আরেকটি লুপ - আরেকটি বড় লুপ, লুপসেপশন সহ একটি লুপ। বিশেষ করে আমাদের কাছে "int (i = 0; i <3; i ++)" আছে, এটি "Arduino, 0 থেকে শুরু করা যাক, 3 বার না হওয়া পর্যন্ত নিম্নলিখিত নির্দেশাবলী পুনরাবৃত্তি করুন"। ফাংশনের জন্য ব্যবহার করা হয় কারণ অনেক ডিভাইস বারবার সিগন্যাল খুঁজতে প্রোগ্রাম করা হয় এবং আমাদের ক্ষেত্রে এখানে times বার। যদি আপনার ডিভাইস একটি ভিন্ন পুনরাবৃত্তির সময়সূচীর জন্য কল করে তবে আপনি কেবল 3 নম্বরটিকে একটি ভিন্ন নম্বরে পরিবর্তন করতে পারেন। বাটন 5 এর সাথে আরেকটি মূল পার্থক্য হল এটি আবার, 3 বার বা 3x3 পুনরাবৃত্তি হয়। অন্য কথায়, আমরা 3 বার সিগন্যাল পাঠাই, 10 মিলিসেকেন্ড অপেক্ষা করি, আবার 3 বার পাঠাই, আরো 10 মিলিসেকেন্ড অপেক্ষা করি, এবং তারপর আবার 3 বার পাঠাই। এই ধরণের যোগাযোগ ডিভাইসগুলিকে চালু এবং বন্ধ করার জন্য সাধারণ এবং আপনার টিভি বা ডিভাইসের জন্য যা হতে পারে তা হতে পারে - এর চাবিকাঠি হল সমস্ত ভেরিয়েবলের সাথে খেলা করা যতক্ষণ না আপনি কাঙ্ক্ষিত ফলাফল পান। সংক্ষিপ্ত বিলম্বের মান পরিবর্তন করুন, পুনরাবৃত্তির মান পরিবর্তন করুন, 3 এর পরিবর্তে 6 টি ব্যাচ প্রেরণ করুন, ইত্যাদি ডিভাইসগুলি ইচ্ছাকৃতভাবে ইচ্ছাকৃতভাবে সংকেত বিধি দ্বারা প্রোগ্রাম করা হয়, কল্পনা করুন আপনার টিভি রিমোট যদি আপনার সাউন্ড বারের মতো একই ধরণের সংকেত পাঠায়; প্রতিবার যখন আপনি আপনার টিভিতে চ্যানেল পরিবর্তন করেন, আপনার সাউন্ড বার বন্ধ হয়ে যায় - এজন্যই বিভিন্ন সংকেত নিয়ম রয়েছে।

পরের তিনটি বোতাম একই অধ্যক্ষের সাথে প্রোগ্রাম করা হয়েছে, কমপক্ষে আংশিকভাবে, উপরে বর্ণিত হয়েছে - তাই আমরা 55 নম্বরে নেমে যেতে পারি।

ধাপ 4: গভীরতার কোড: IR সিগন্যাল গ্রহণ করা

গভীরতার কোড: IR সংকেত গ্রহণ
গভীরতার কোড: IR সংকেত গ্রহণ

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

56 নং লাইনে গিয়ে আমাদের Serial.println (results.value, HEX) আছে এতে বলা হয়েছে "Ardunio, HEX ফরম্যাটে সিরিয়াল মনিটরে ফলাফল প্রিন্ট করুন"। হেক্স, যার অর্থ হেক্সাডেসিমাল, এমন একটি উপায় যা আমরা বাইনারি স্ট্রিং (শুধু 0 এবং 1 এর) সংক্ষিপ্ত করতে পারি যাতে টাইপ করা একটু সহজ হয়। উদাহরণস্বরূপ 101010010000 হল "a90", আমার টিভি বন্ধ এবং চালু করতে ব্যবহৃত কোড, এবং 111111110000001011111101 হল 0xFF02FD, যা আমার RGB স্ট্রিপ নিয়ন্ত্রণ করে। আপনি বাইনারি কে হেক্সে রূপান্তর করতে উপরের চার্টটি ব্যবহার করতে পারেন, এবং তদ্বিপরীত, অথবা আপনি নিম্নলিখিত লিঙ্কটি ব্যবহার করতে পারেন:

www.rapidtables.com/convert/number/hex-to-…

লাইন 57 এ, আমাদের একটি নতুন ফাংশন আছে, যাকে সুইচ কেস বলে।

মূলত, একটি সুইচ কেস আমাদের একটি প্রদত্ত ভেরিয়েবলের (কেস) ফলাফলের উপর ভিত্তি করে বিভিন্ন নির্দেশাবলী নির্দিষ্ট করতে দেয়। বিরতি সুইচ স্টেটমেন্ট থেকে বেরিয়ে যায় এবং প্রতিটি স্টেটমেন্টের শেষে ব্যবহৃত হয়।

আমরা বিভিন্ন রিমোট থেকে আমাদের Arduino ইন্দ্রিয়গুলির প্রোটোকলের উপর ভিত্তি করে সিরিয়াল মনিটরে কীভাবে মুদ্রণ করি তা পরিবর্তন করতে আমরা এখানে সুইচ কেস ব্যবহার করি।

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

যদি আপনার কোন প্রশ্ন থাকে - দয়া করে নির্দ্বিধায় এখানে আমার সাথে যোগাযোগ করুন! আমি আপনাকে যথাসাধ্য সাহায্য করার চেষ্টা করতে পেরে খুশি।

আমি আশা করি আপনি এমন কিছু শিখেছেন যা আপনি আপনার জীবনকে আরও কিছুটা সুন্দর করতে ব্যবহার করতে পারেন!

-আরবি

প্রস্তাবিত: