সুচিপত্র:

কাস্টম আরডুইনো নতুন গাড়ির স্টিরিও দিয়ে ক্যান স্টিয়ারিং হুইল বাটন রাখতে পারে: 9 টি ধাপ (ছবি সহ)
কাস্টম আরডুইনো নতুন গাড়ির স্টিরিও দিয়ে ক্যান স্টিয়ারিং হুইল বাটন রাখতে পারে: 9 টি ধাপ (ছবি সহ)

ভিডিও: কাস্টম আরডুইনো নতুন গাড়ির স্টিরিও দিয়ে ক্যান স্টিয়ারিং হুইল বাটন রাখতে পারে: 9 টি ধাপ (ছবি সহ)

ভিডিও: কাস্টম আরডুইনো নতুন গাড়ির স্টিরিও দিয়ে ক্যান স্টিয়ারিং হুইল বাটন রাখতে পারে: 9 টি ধাপ (ছবি সহ)
ভিডিও: নতুন বা পুরাতন জাপানি গাড়ি আমদানিতে কাস্টমস ডিউটি, ভ্যাট, ট্যাক্স কত ? 2024, জুলাই
Anonim
কাস্টম আরডুইনো নতুন গাড়ির স্টিরিও দিয়ে ক্যান স্টিয়ারিং হুইল বাটন রাখতে পারে
কাস্টম আরডুইনো নতুন গাড়ির স্টিরিও দিয়ে ক্যান স্টিয়ারিং হুইল বাটন রাখতে পারে
কাস্টম আরডুইনো নতুন গাড়ির স্টিরিও দিয়ে ক্যান স্টিয়ারিং হুইল বাটন রাখতে পারে
কাস্টম আরডুইনো নতুন গাড়ির স্টিরিও দিয়ে ক্যান স্টিয়ারিং হুইল বাটন রাখতে পারে
কাস্টম আরডুইনো নতুন গাড়ির স্টিরিও দিয়ে ক্যান স্টিয়ারিং হুইল বাটন রাখতে পারে
কাস্টম আরডুইনো নতুন গাড়ির স্টিরিও দিয়ে ক্যান স্টিয়ারিং হুইল বাটন রাখতে পারে

আমি আমার ভলভো V70 -02 এ আসল গাড়ির স্টেরিও প্রতিস্থাপন করার সিদ্ধান্ত নিয়েছি যাতে আমি একটি নতুন স্টিরিও দিয়ে থাকি যাতে আমি mp3, ব্লুটুথ এবং হ্যান্ডসফ্রি এর মতো জিনিস উপভোগ করতে পারব।

আমার গাড়ির স্টেরিওর জন্য কিছু স্টিয়ারিং হুইল নিয়ন্ত্রণ আছে যা আমি এখনও ব্যবহার করতে চাই। আমি আশা করিনি যে এটি একটি সমস্যা হবে কারণ বাজারে বেশ কয়েকটি অ্যাডাপ্টার রয়েছে যা আমার গাড়ির সাথে সামঞ্জস্যপূর্ণ বলে মনে করা হয়। যাইহোক আমি শীঘ্রই জানতে পারলাম যে তারা ছিল না! (মনে হচ্ছে V70 এর অ্যাডাপ্টারের সামান্য ভিন্ন CAN প্রোটোকলের কারণে -02 গাড়ির সমস্যা হতে পারে।)

তাহলে কি করতে হবে? পুরানো স্টেরিও রাখবেন? অ-কাজ বোতাম সঙ্গে একটি জীবন যাপন? অবশ্যই না! যদি বাজারে কোন কার্যকরী অ্যাডাপ্টার না থাকে তাহলে আমাদের একটি তৈরি করতে হবে!

এই নির্দেশনাটি এমন গাড়িগুলিতে প্রয়োগ করা যেতে পারে (কিছু অভিযোজন সহ) যেখানে স্টিয়ারিং হুইল বোতামগুলি CAN বাসের উপর যোগাযোগ করে।

ধাপ 1: স্টিরিওতে কমান্ড পাঠানোর উপায় খুঁজে বের করুন

স্টিরিওতে কমান্ড পাঠানোর উপায় খুঁজে বের করুন
স্টিরিওতে কমান্ড পাঠানোর উপায় খুঁজে বের করুন
স্টিরিওতে কমান্ড পাঠানোর উপায় খুঁজে বের করুন
স্টিরিওতে কমান্ড পাঠানোর উপায় খুঁজে বের করুন

স্টিরিও কি ধরনের রিমোট ইনপুট আশা করে তা খুঁজে বের করা আপনার প্রথম কাজ। সাধারণত নির্মাতারা আপনাকে তা বলবেন না এবং সম্ভবত রিভার্স ইঞ্জিনিয়ারিংয়ের জন্য কাজ করার রিমোট কন্ট্রোলে আপনার অ্যাক্সেস নেই।

আমার নতুন স্টিরিও (কেনউড) এর জন্য দূরবর্তী একটি একক তারের গঠিত এবং এটি কীভাবে কাজ করে সে সম্পর্কে আমি কোনও তথ্য খুঁজে পাইনি। তবে রিমোট ইনপুটের জন্য এটিতে 3.5 মিমি জ্যাক রয়েছে। আমিও সে বিষয়ে কিছু জানতে পারিনি। কিন্তু অন্যান্য ব্র্যান্ডের জন্য mm.৫ মিমি জ্যাক সম্পর্কে কিছু তথ্য রয়েছে যা পরামর্শ দেয় যে টিপ এবং হাতা (এবং ringচ্ছিকভাবে রিং এবং হাতা) এর মধ্যে একটি নির্দিষ্ট প্রতিরোধ প্রয়োগ করে বিভিন্ন কমান্ড চিহ্নিত করা হয়। যেমন https://forum.arduino.cc/index.php?topic=230068.0। তাই আমি একটি চেষ্টা করার সিদ্ধান্ত নিয়েছি, একটি ব্রেডবোর্ড, একটি গুচ্ছ প্রতিরোধক এবং একটি 3.5 মিমি প্লাগ স্টিরিওতে লাগানো এবং রুটিবোর্ডের সাথে সংযুক্ত। প্রথমে কিছুই স্বীকৃত ছিল না, কিন্তু স্টেরিওর একটি "লার্নিং মোড" মেনু রয়েছে এবং সেখানে বিভিন্ন প্রতিরোধ প্রয়োগ করার সময় কমান্ডগুলি সফলভাবে সেট আপ করা যেতে পারে। সফলতা!

যাইহোক পরে আমি জানতে পারলাম যে আমি এখানে একটি ভুল করেছি: স্টেরিও শিখতে যেসব কমান্ড মনে হয় সেগুলো আসলে কাজ করবে না। যেমন 30 kOhm লার্নিং মোডে পাওয়া গিয়েছিল কিন্তু পরে কাজ করেনি এবং কিছু কমান্ডের জন্য আমি প্রতিরোধের পার্থক্য সেট করেছিলাম এত ছোট যে পরবর্তীতে ভুল কমান্ড ট্রিগার করা হয়েছিল।

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

যদি আপনার গাড়ির স্টেরিও একই ভাবে ইনপুট গ্রহণ করতে না পারে তাহলে আপনাকে এটি কিভাবে কাজ করে তা বের করতে হবে যাতে আপনি এই সমাধানটি মানিয়ে নিতে পারেন। যদি আপনি একদম বুঝতে না পারেন তাহলে আপনার একটি সমস্যা আছে।

ধাপ 2: CAN বাসের সাথে কোথায় সংযোগ করতে হবে তা খুঁজে বের করুন

CAN বাসে কোথায় সংযোগ করবেন তা খুঁজে বের করুন
CAN বাসে কোথায় সংযোগ করবেন তা খুঁজে বের করুন

CAN বাসে সংযোগ করার জন্য আপনাকে একটি ভাল জায়গা খুঁজে বের করতে হবে। যেহেতু আপনি একটি পুরানো স্টেরিও প্রতিস্থাপন করছেন যা CAN এর মাধ্যমে যোগাযোগ করে আপনি স্টেরিওর পিছনে এটি খুঁজে পেতে সক্ষম হবেন। CAN বাসে জোড়া জোড়া তারের (CAN-L এবং CAN_H) থাকে। আপনার গাড়ী নিশ্চিত করার জন্য একটি তারের চিত্রের সাথে পরামর্শ করুন।

ধাপ 3: CAN বার্তাগুলির বিপরীত প্রকৌশল

CAN বার্তাগুলির বিপরীত প্রকৌশল
CAN বার্তাগুলির বিপরীত প্রকৌশল

যদি না Google আপনাকে বলতে পারে যে কোন CAN বার্তাগুলি আপনাকে শুনতে হবে তাহলে আপনাকে CAN বাসে সংযোগ করতে হবে এবং কিছু বিপরীত প্রকৌশল করতে হবে। আমি একটি Arduino Uno এবং একটি CAN ieldাল ব্যবহার করেছি। (আপনার সত্যিই CAN shালের প্রয়োজন নেই, যেহেতু আপনি পরে দেখবেন আপনি পরিবর্তে একটি ব্রেডবোর্ডে কিছু সস্তা উপাদান ব্যবহার করতে পারেন।)

আপনার গাড়ির সাথে সংযোগ করার সময় আপনার কোন বড রেট ব্যবহার করা উচিত তা জানতে গুগলের সাথে পরামর্শ করুন। (সাধারণত আপনি দেখতে পাবেন যে একটি উচ্চ গতি এবং একটি কম গতির CAN নেট আছে। আপনি কম গতির নেট এর সাথে সংযোগ স্থাপন করছেন।)

সিরিয়াল ইন্টারফেসে সমস্ত CAN বার্তা লগ করার জন্য আপনাকে Arduino প্রোগ্রাম করতে হবে যাতে আপনি সেগুলি আপনার কম্পিউটারে একটি লগ ফাইলে সংরক্ষণ করতে পারেন। স্ট্যান্ডার্ড Arduino IDE একটি লগ ফাইলে ডেটা সংরক্ষণ করবে না কিন্তু আপনি ব্যবহার করতে পারেন যেমন পরিবর্তে পুটি।

আপনার প্রোগ্রাম লেখা শুরু করার আগে আপনাকে CAN_BUS_Shield লাইব্রেরি ইনস্টল করতে হবে।

আপনার প্রোগ্রাম শুরু করতে সাহায্য করার জন্য এখানে কিছু ছদ্ম কোড দেওয়া হল:

সেটআপ ()

}

ইঙ্গিত:

আপনি CAN লাইব্রেরির কার্যকারিতা অ্যাক্সেস করতে MCP_CAN ক্লাসের একটি উদাহরণ ব্যবহার করবেন:

MCP_CAN m_can;

Init CAN:

যখন (m_can.begin ()! = CAN_OK)

{বিলম্ব (1000); }

CAN বার্তাগুলি পরীক্ষা করুন এবং পড়ুন:

যখন (m_can.checkReceive () == CAN_MSGAVAIL)

{// CAN আইডি, বার্তার দৈর্ঘ্য এবং বার্তার তথ্য পান m_can.readMsgBufID (& m_canId, & m_msgLen, m_msgBuf); // এখানে বার্তার তথ্য দিয়ে কিছু করুন}

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

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

তারপরে প্রতিটি বোতামের জন্য, লগিং শুরু করুন, বোতামটি চাপুন এবং লগিং বন্ধ করুন।

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

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

সতর্কতার একটি শব্দ: আপনি নিশ্চিত হতে পারেন না যে একটি বোতাম সর্বদা একটি অভিন্ন বার্তা তৈরি করবে। কিছু বিটে বর্ধিত কাউন্টার ইত্যাদি থাকতে পারে (আপনি বার্তা আইডি ছাড়াও একই হতে পারেন

যদি আপনার একটি ভলভো V70 -02 থাকে তবে আপনি এটির পরে আছেন:

  • মেসেজ আইডি: 0x0400066Byte0: 0x00, 0x40, 0x80 বা 0xc0 (যত্ন নেই)
  • বাইট 1: 0x00 (যত্ন নেই)
  • বাইট 2: 0x00 (যত্ন নেই)
  • বাইট 3: 0x00-0x07 (যত্ন করবেন না)
  • বাইট 4: 0x1f (যত্ন নেই)
  • বাইট 5: 0x40 (যত্ন নেই)
  • বাইট 6: 0x40 (যত্ন করবেন না)
  • বাইট 7: বোতাম শনাক্তকারী: 0x77 = ভলিউম আপ, 0x7b = ভলিউম ডাউন, 0x7d = পরবর্তী ট্র্যাক, 0x7e = আগের ট্র্যাক।

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

ধাপ 4: হার্ডওয়্যার প্রোটোটাইপ

হার্ডওয়্যার প্রোটোটাইপ
হার্ডওয়্যার প্রোটোটাইপ

আপনার হার্ডওয়্যারকে সক্ষম হতে হবে:

  1. CAN বাসে প্রাপ্ত কমান্ডগুলি সনাক্ত করুন
  2. স্টেরিওতে অন্য বিন্যাসে কমান্ড পাঠান

যদি আপনার পর্যাপ্ত জায়গা থাকে তবে আপনি প্রথম অংশের জন্য একটি Arduino এবং একটি CAN ieldাল ব্যবহার করতে পারেন এবং দ্বিতীয়টির জন্য কিছু অতিরিক্ত হার্ডওয়্যার সংযুক্ত করতে পারেন। তবে কিছু অসুবিধা রয়েছে:

  • CAN াল খরচ
  • সাইজ
  • Arduino পাওয়ার সাপ্লাই খুশি হবে না যদি এটি সরাসরি আপনার গাড়ির 12V এর সাথে সংযুক্ত থাকে (এটি সম্ভবত কাজ করবে কিন্তু এর জীবন সম্ভবত সংক্ষিপ্ত হবে)।

তাই পরিবর্তে আমি নিম্নলিখিত ব্যবহার:

  • Atmega 328, "Arduino মস্তিষ্ক"। (কিছু ভেরিয়েন্ট আছে, আরডুইনো ইউনোর একটার সমান একটি পান। আপনি এটি আরডুইনো বুট লোডার দিয়ে বা ছাড়া কিনতে পারেন।)
  • ঘড়ি সংকেতের জন্য 16 মেগাহার্টজ ক্রিস্টাল + ক্যাপাসিটার।
  • MCP2551 ট্রান্সসিভার করতে পারে।
  • MCP2515 CAN নিয়ামক।
  • TSR1-2450, 6.5-36V কে 5V রূপান্তর করে। (প্রোটোটাইপে ব্যবহার করা হয় না কারণ সফটওয়্যারটি বিদ্যুৎ সরবরাহের বিষয়ে চিন্তা করবে না।)
  • CD4066B সুইচ যা স্টেরিওতে কমান্ড পাঠানোর সময় ব্যবহার করা হবে।
  • প্রতিরোধক একটি দম্পতি। (পরবর্তী ধাপে theগল পরিকল্পনায় মানগুলি পাওয়া যাবে।)

এই কনফিগারেশনের সাথে একটি ভাল জিনিস হল যে এটি সম্পূর্ণরূপে Arduino এবং CAN ieldাল লাইব্রেরির সাথে সামঞ্জস্যপূর্ণ।

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

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

ছবিতে নীচের রুটিবোর্ড দ্বারা প্রোটোটাইপটি চিত্রিত করা হয়েছে। বিদ্যুৎ সরবরাহ, প্রোগ্রামিং এবং সিরিয়াল লগিং এর জন্য এটি একটি Arduino Uno এর সাথে সংযুক্ত করা হয়েছে যেখানে Atmega চিপটি সরানো হয়েছে।

উপরের ব্রেডবোর্ড হল গাড়ি + স্টিরিও সিমুলেটর যা প্রোটোটাইপের প্রাথমিক পরীক্ষার জন্য ব্যবহার করা হবে।

প্রোটোটাইপ + সিমুলেটরটি এইরকম কাজ করার উদ্দেশ্যে করা হয়েছে:

  • সিমুলেটর বোর্ডে একটি সুইচ বোতাম টিপুন। (এগুলি আপনার স্টিয়ারিং হুইল বোতাম।)
  • যখন সিমুলেটর প্রোগ্রামটি একটি বোতাম টিপে সনাক্ত করে তখন এটি যতক্ষণ পর্যন্ত বোতামটি ধাক্কা দেওয়া হয় ততক্ষণ প্রতিটি 70 এমএস সংশ্লিষ্ট CAN বার্তা পাঠাবে। (কারণ আমি আগে যে লগগুলি নিয়েছিলাম তা নির্দেশ করে যে এটি আমার গাড়িতে কীভাবে কাজ করছে।) এটি বাসে অন্যান্য ট্র্যাফিক অনুকরণ করার জন্য প্রচুর "জাঙ্ক" CAN বার্তা পাঠাবে।
  • CAN বাসে CAN বার্তা পাঠানো হয়।
  • প্রোটোটাইপ দ্বারা CAN বার্তা পাওয়া যায়।
  • MCP2515 মেসেজ আইডির উপর ভিত্তি করে সমস্ত সম্পর্কহীন বার্তা নিক্ষেপ করে।
  • যখন MCP2515 একটি বার্তা পায় যা পরিচালনা করা উচিত তখন এটি নির্দেশ করবে যে এটি একটি বার্তা সংলগ্ন।
  • Atmega বার্তাটি পড়বে এবং সিদ্ধান্ত নেবে কোন বোতামটি সক্রিয় হিসাবে বিবেচিত হবে।
  • শেষ বার্তাটি কবে পাওয়া গিয়েছিল তাও অ্যাটমেগা ট্র্যাক রাখবে, একটি নির্দিষ্ট সময়ের পরে বোতামটি মুক্ত বলে বিবেচিত হবে। (CAN বার্তাগুলি শুধুমাত্র ইঙ্গিত করে যে একটি বোতাম নিচে, না যে এটি ধাক্কা বা মুক্তি পেয়েছে।)
  • যদি একটি বোতাম সক্রিয় হিসাবে বিবেচিত হয় তবে CD4066B এর এক বা একাধিক সুইচ সক্রিয় হবে।
  • সিমুলেটর (এখন আপনার স্টিরিও হিসাবে কাজ করছে) সনাক্ত করবে যে টিপ এবং হাতা মধ্যে একটি প্রতিরোধের প্রয়োগ করা হয়। (টিপটি 3.3V এর সাথে এবং একটি প্রতিরোধকের মাধ্যমে একটি এনালগ ইনপুট পিনের সাথে সংযুক্ত থাকে। যখন কোন কমান্ড সক্রিয় থাকে না তখন এই পিনটি 3.3V পড়বে, যখন একটি কমান্ড সক্রিয় থাকবে তখন মানটি কম হয়ে যাবে এবং কমান্ডটিকে চিহ্নিত করবে।
  • একটি কমান্ড সক্রিয় থাকলে সংশ্লিষ্ট নেতৃত্বও সক্রিয় হবে। (ছয়টি এলইডি আছে কারণ আমি আমার দুটি বোতামের জন্য বিভিন্ন দীর্ঘ / ছোট প্রেস ব্যবহার করার পরিকল্পনা করেছি।)

প্রোটোটাইপ হার্ডওয়্যার সম্পর্কে আরও বিস্তারিত জানার জন্য, পরবর্তী ধাপে agগল স্কিম্যাটিক্স দেখুন।

সিমুলেটর বোর্ড হার্ডওয়্যার সম্পর্কে অতিরিক্ত বিবরণ:

  • 16 মেগাহার্টজ স্ফটিক
  • 22 পিএফ ক্যাপাসিটার
  • LED বৈশিষ্ট্যের উপর ভিত্তি করে LED প্রতিরোধক নির্বাচন করা উচিত
  • A7 এবং 3.3V এর সাথে সংযুক্ত প্রতিরোধক, নির্বাচন করুন উদা 2kOhm (সমালোচনামূলক নয়)।
  • MCP2551 এবং MCP2515 এর সাথে সংযুক্ত প্রতিরোধকগুলি পুল-আপ / পুল-ডাউন। উদা Select নির্বাচন করুন 10 kOhm

(অথবা আপনি চাইলে সিমুলেটরের "CAN অংশ" এর জন্য CAN ieldাল ব্যবহার করতে পারেন।)

এটি গুরুত্বপূর্ণ যে আপনি জানেন যে কিভাবে হার্ডওয়্যার ডিজাইন করার সময় Atmega পিনগুলি Arduino পিনের সাথে ম্যাপ করা হয়।

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

ধাপ 5: ফিউজ প্রোগ্রামিং

হয়তো আপনি আগের ধাপে লক্ষ্য করেছেন যে প্রোটোটাইপের MCP2515 এ ঘড়ি সংকেত তৈরির জন্য আলাদা কোনো উপাদান নেই। এর কারণ হল যে ইতিমধ্যে 16 মেগাহার্টজ স্ফটিকটি Atmega ঘড়ি সংকেত হিসাবে ব্যবহৃত হয় যা আমরা ব্যবহার করতে পারি। কিন্তু আমরা এটিকে সরাসরি MCP2515 এর সাথে সংযুক্ত করতে পারি না এবং ডিফল্টরূপে Atmega তে কোন ক্লক আউট সিগন্যাল নেই।

(যদি আপনি পছন্দ করেন তবে আপনি এই পদক্ষেপটি এড়িয়ে যেতে পারেন এবং পরিবর্তে অতিরিক্ত ঘড়ি হার্ডওয়্যার যুক্ত করতে পারেন।)

যাইহোক আমরা GPIO পিনের একটিতে ক্লক আউট সিগন্যাল সক্ষম করতে "ফিউজ প্রোগ্রামিং" নামে কিছু ব্যবহার করতে পারি।

প্রথমে আপনাকে আপনার Arduino IDE দ্বারা ব্যবহৃত "board.txt" নামে একটি ফাইল খুঁজে বের করতে হবে। আপনাকে Arduino Uno এর জন্য এন্ট্রিটি অনুলিপি করতে হবে, এটিকে একটি নতুন নাম দিতে হবে এবং low_fuses এর মান পরিবর্তন করতে হবে।

আমার নতুন বোর্ড এই মত দেখাচ্ছে:

############################################ #############Arduino Uno- এর উপর ভিত্তি করে#পরিবর্তন:#low_fuses পরিবর্তন করা হয়েছে 0xff থেকে 0xbf এ 16 মেগাহার্টজ ঘড়ি সক্ষম করতে#Atmega PB0/pin 14 = Arduino D8

clkuno.name = ক্লক আউট (Arduino Uno)

clkuno।.bootloader.file = optiboot_atmega328.hex clkuno.bootloader.unlock_bits = 0xff clkuno.bootloader.lock_bits = 0xcf clkuno.build.mcu = atmega328p clkuno.build.f_cpu = 16000000L clkuno।

##############################################################

মনে রাখবেন যে ঘড়িটি তার নিয়ন্ত্রণ বিট 0 এ সেট করে সক্রিয় করা হয়।

যখন আপনি বোর্ড কনফিগারেশন ফাইলে নতুন বোর্ড তৈরি করবেন তখন আপনাকে একটি নতুন বুট লোডারকে এটমেগায় বার্ন করতে হবে। এটি করার বিভিন্ন উপায় রয়েছে, আমি https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard- এ বর্ণিত পদ্ধতি ব্যবহার করেছি।

আপনি এটি করার পরে, যখন আপনি Atmega এ একটি প্রোগ্রাম আপলোড করবেন তখন আপনার নতুন বোর্ডের ধরনটি নির্বাচন করুন এবং Arduino Uno নয়।

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

সফটওয়্যার
সফটওয়্যার

কিছু সফটওয়্যার যুক্ত করে বোবা হার্ডওয়্যার স্মার্ট করার সময়।

প্রোটোটাইপের জন্য এখানে কিছু ছদ্ম কোড রয়েছে:

lastReceivedTime = 0

lastReceivedCmd = none cmdTimeout = 100 setup () {সক্ষম ওয়াচডগ কনফিগার পিন D4-D7 আউটপুট পিন হিসাবে init CAN সেটআপ CAN ফিল্টার} লুপ () {রিসেট ওয়াচডগ যদি (CAN মেসেজ পাওয়া যায়) {প্রতিটি বোতাম কমান্ডের জন্য {যদি CAN মেসেজের হয় বোতাম কমান্ড {lastReceivedTime = now lastReceivedCmd = cmd}}} যদি এখন> lastReceivedTime + cmdTimeout {lastReceivedCmd = none} প্রতিটি বোতাম কমান্ডের জন্য {যদি lastReceivedCmd বাটন কমান্ড হয় {set command pin output = on} অন্য {set command pin output = off }}}

cmdTimeout সিদ্ধান্ত নেয় যে আমরা কতক্ষণ অপেক্ষা করতে হবে তার আগে আমরা সর্বশেষ সক্রিয় বোতামটি মুক্তি পেয়েছি। কারণ বাটন CAN বার্তা কমান্ড পাঠানো হয় প্রায় প্রতি 70 ms এটি কিছু মার্জিনের সাথে এর চেয়ে বড় হওয়া প্রয়োজন। কিন্তু যদি এটি বড় হয় তবে একটি ল্যাগ অভিজ্ঞতা হবে। তাই 100 ms একটি ভাল প্রার্থী মনে হয়।

কিন্তু প্রহরী কি? এটি একটি দরকারী ছোট হার্ডওয়্যার বৈশিষ্ট্য যা ক্র্যাশের ক্ষেত্রে আমাদের বাঁচাতে পারে। কল্পনা করুন যে ভলিউম আপ কমান্ড সক্রিয় থাকাকালীন আমাদের একটি বাগ আছে যা ক্র্যাশ করে। তারপর আমরা সর্বোচ্চ ভলিউমে স্টেরিও দিয়ে শেষ করব! কিন্তু যদি ওয়াচডগ নির্দিষ্ট সময়ের জন্য পুনরায় সেট করা না হয় তবে এটি সিদ্ধান্ত নেবে যে অপ্রত্যাশিত কিছু ঘটেছে এবং কেবল একটি রিসেট জারি করুন।

অকার্যকর সেটআপ()

{// লুপ wdt_enable (WDTO_250MS) এর জন্য সর্বোচ্চ 250 ms অনুমতি দিন; // অন্যান্য init stuff} অকার্যকর লুপ () {wdt_reset (); // কাজ করো}

ফিল্টার করতে পারেন? ঠিক আছে, আপনি ফিল্টারটির সাথে মেলে না এমন সমস্ত বার্তা বাতিল করার জন্য CAN নিয়ামককে কনফিগার করতে পারেন যাতে সফ্টওয়্যারটিকে আমাদের বার্তাগুলিতে সময় নষ্ট করতে হয় না।

স্বাক্ষরবিহীন দীর্ঘ মাস্ক = 0x1fffffff; // মাস্কের মধ্যে 29 টি হেডার বিট অন্তর্ভুক্ত করুন

স্বাক্ষরবিহীন লম্বা ফিল্টারআইডি = 0x0400066; // আমরা কেবল এই CAN বার্তাটি m_can.init_Mask (0, CAN_EXTID, মুখোশ) সম্পর্কে যত্নশীল; // মাস্ক 0 ফিল্টার করতে প্রযোজ্য 0-1 m_can.init_Mask (1, CAN_EXTID, মাস্ক); // মাস্ক 1 ফিল্টার 2-5 m_can.init_Filt (0, CAN_EXTID, filterId) প্রযোজ্য; m_can.init_Filt (1, CAN_EXTID, filterId); m_can.init_Filt (2, CAN_EXTID, filterId); m_can.init_Filt (3, CAN_EXTID, filterId); m_can.init_Filt (4, CAN_EXTID, filterId); m_can.init_Filt (5, CAN_EXTID, filterId);

ফিল্টার + মাস্ক কিভাবে সেট আপ করবেন সে সম্পর্কে আরো বিস্তারিত জানার জন্য CAN লাইব্রেরি কোড এবং CAN কন্ট্রোলার ডকুমেন্টেশন দেখুন।

আপনি একটি বার্তা (যা ফিল্টার করা হয় না) প্রাপ্ত হলে একটি বাধা বাড়াতে CAN নিয়ামক সেট আপ করতে পারেন। (উপরের উদাহরণে অন্তর্ভুক্ত নয় কিন্তু আমার প্রোগ্রামে এর জন্য কিছু কোড আছে।) এই ক্ষেত্রে এটি আসলে কোন মান যোগ করে না এবং যদি আপনি প্রোগ্রামিংয়ে অভ্যস্ত না হন তবে এটি বিভ্রান্তিকর হতে পারে।

সুতরাং সারসংক্ষেপে এটি ছিল প্রোটোটাইপ সফটওয়্যার। কিন্তু আমাদের সিমুলেটর বোর্ডের জন্যও কিছু কোড দরকার:

lastSentTime = 0

minDelayTime = 70 সেটআপ () {কনফিগার পিন A0-A5 হিসাবে আউটপুট পিন D4-D7 পিন কনফিগার করে ইনপুট পিন হিসেবে অভ্যন্তরীণ টানাপোড়নের সাথে। init CAN} loop () {send "junk" can message set activeButton = none for each button {if button is push {set activeButton = button}} if activeButton! = none {if now> lastSentTime + minDelayTime {send button command can message } set lastSentTime = now} inval = read pin A7 foreach (cmd) {if (min <inval <max) {led on} else {led off}} অপেক্ষা 1 ms}

এটি ক্রমাগত "জাঙ্ক" CAN বার্তাগুলি প্রায় প্রতি ms পাঠাবে এবং যখন একটি বোতাম প্রতি 70 ms তে সংশ্লিষ্ট কমান্ডটি চাপবে।

প্রতিটি বোতামের অন্তর্গত ন্যূনতম এবং সর্বাধিক ভেরিয়েবলের জন্য উপযুক্ত মানগুলি খুঁজে পেতে বিভিন্ন বোতাম টিপে আপনাকে পিন A7 এ ইনপুট লগ ইন করতে হতে পারে। (অথবা আপনি এটি গণনা করতে পারেন, কিন্তু প্রকৃতপক্ষে ইনপুট পড়া আপনাকে আরো সুনির্দিষ্ট মান দেবে।)

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

আপনি যদি আমার প্রোগ্রামগুলি পরীক্ষা করতে চান তবে সেগুলি এখানে ডাউনলোড করা যেতে পারে:

  • CAN বার্তা লগ প্রোগ্রাম
  • সিমুলেটর বোর্ডের জন্য প্রোগ্রাম
  • প্রোটোটাইপ / চূড়ান্ত বোর্ডের জন্য প্রোগ্রাম

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

ধাপ 7: চূড়ান্ত হার্ডওয়্যার

চূড়ান্ত হার্ডওয়্যার
চূড়ান্ত হার্ডওয়্যার
চূড়ান্ত হার্ডওয়্যার
চূড়ান্ত হার্ডওয়্যার
চূড়ান্ত হার্ডওয়্যার
চূড়ান্ত হার্ডওয়্যার

যখন আপনি আপনার প্রোগ্রামে খুশি হন (সিমুলেটর বোর্ডের সাথে চূড়ান্ত পরীক্ষার পরে গাড়িতে প্রোটোটাইপ পরীক্ষা করতে মনে রাখবেন) আসল হার্ডওয়্যার তৈরির সময় এসেছে।

আপনার এখানে তিনটি বিকল্প আছে:

  • দ্রুত এবং নোংরা - একটি পিসিবি প্রোটোটাইপ বোর্ডে একসঙ্গে জিনিসপত্র বিক্রি করুন।
  • হার্ডকোর DIY - আপনার নিজের PCB খোদাই করুন।
  • অলস উপায় - একটি পেশাদারী PCB অর্ডার করুন উপাদানগুলি সোল্ডার করার জন্য।

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

PCBs অর্ডার করার জন্য আপনাকে আপনার ডিজাইন Gerber ফরম্যাটে পাঠাতে হবে। এর জন্য বিভিন্ন সফটওয়্যার রয়েছে। আমি agগল ব্যবহার করেছি যা আমি সুপারিশ করতে পারি। আপনি এটি শিখতে কয়েক ঘন্টা আশা করতে পারেন কিন্তু তারপর এটি সূক্ষ্ম কাজ করে। এই জাতীয় ছোট বোর্ডের জন্য আপনি এটি বিনামূল্যে ব্যবহার করতে পারেন।

ডিজাইন করার সময় সাবধান থাকুন। আপনি ডেলিভারির জন্য চার সপ্তাহ অপেক্ষা করতে চান না শুধুমাত্র জানতে যে আপনি কিছু ভুল করেছেন।

(যদি আপনার ভাল সোল্ডারিং দক্ষতা থাকে তবে আপনি সারফেস মাউন্ট করা উপাদানগুলির জন্য ডিজাইন করতে পারেন এবং সত্যিই একটি ছোট অ্যাডাপ্টার পেতে পারেন। আমি করিনি।)

তারপর যেমন অর্ডার করুন https://www.seeedstudio.com/fusion_pcb.html। কিভাবে আপনার ডিজাইন থেকে Gerber ফাইল জেনারেট করবেন তার জন্য নির্দেশাবলী অনুসরণ করুন। এটি ঠিক আছে কিনা তা নিশ্চিত করার জন্য আপনি ফলাফলের পূর্বরূপও পেতে পারেন।

(শেষ পর্যন্ত আমাকে স্কিম্যাটিক্স ছবিতে তালিকাভুক্ত R4-R7 এর জন্য অন্যান্য প্রতিরোধক নির্বাচন করতে হয়েছিল। পরিবর্তে আমি 2k, 4.7k, 6.8k এবং 14.7k ব্যবহার করেছি।)

এবং মনে রাখবেন - Arduino পিন সংখ্যার সাথে Atmega পিন নম্বরিং বিভ্রান্ত করবেন না!

আমি সুপারিশ করছি যে আপনি সরাসরি Atmega চিপ সোল্ডার করবেন না কিন্তু একটি সকেট ব্যবহার করুন। আপনার যদি এটি পুনরায় প্রোগ্রাম করার প্রয়োজন হয় তবে আপনি এটি সহজেই সরিয়ে ফেলতে পারেন।

ধাপ 8: গাড়ি মাউন্ট করা

গাড়ি মাউন্ট করা
গাড়ি মাউন্ট করা
গাড়ি মাউন্ট করা
গাড়ি মাউন্ট করা

এখন সবচেয়ে মজার অংশ - এটি আপনার গাড়িতে মাউন্ট করুন এবং এটি ব্যবহার শুরু করুন! (আপনি এটির জন্য একটি কেস তৈরি / কেনার পরে।)

আপনি যদি ইতিমধ্যে আপনার গাড়ির প্রোটোটাইপটি সম্পূর্ণভাবে পরীক্ষা করে থাকেন তবে সবকিছু নিখুঁতভাবে কাজ করা উচিত।

(যেমনটি আমি আগে উল্লেখ করেছি আমি তা করি নি তাই আমাকে কিছু প্রতিরোধক প্রতিস্থাপন করতে হয়েছিল এবং আমার প্রোগ্রামে কিছু পরিবর্তন করতে হয়েছিল।)

আপনি এটি স্টিরিও পিছনে বা অন্য কোথাও মাউন্ট করা উচিত কিনা তা বিবেচনা করুন। আমি আমার গ্লাভ বক্সের উপরে একটি ভাল জায়গা খুঁজে পেয়েছি যেখানে আমি গ্লাভ বক্সের ভিতর থেকে এটি ছাড়া কিছু ছাড়াই পৌঁছাতে পারি। যদি আমি পরে এটি আপগ্রেড করার সিদ্ধান্ত নিই তবে এটি কার্যকর হতে পারে।

অবশেষে আমার বোতাম আবার কাজ করছে! আমি তাদের ছাড়া কিভাবে দুই মাস বেঁচে থাকতে পারি?

ধাপ 9: ভবিষ্যতের উন্নতি

উল্লিখিত হিসাবে, যদি আমি এর একটি সংস্করণ 2.0 তৈরি করি তবে আমি আরও নমনীয়তার জন্য 4066B কে অন্য কিছু (সম্ভবত একটি ডিজিটাল পটেন্টিওমিটার) দিয়ে প্রতিস্থাপন করব।

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

প্রস্তাবিত: