আপনি যদি প্রযুক্তি পছন্দ করেন এবং প্রায়শই Arduino নিয়ে পরীক্ষা-নিরীক্ষা করেন, তাহলে এই নিবন্ধটি আপনাকে মুগ্ধ করবে। আজ আমরা দেখব কিভাবে MCP2515 মডিউল এবং Arduino ব্যবহার করে আপনার নিজস্ব CAN নেটওয়ার্ক সেট আপ করবেন। আপনি কীভাবে একটি CAN নেটওয়ার্কে বিভিন্ন ডিভাইসের মধ্যে দক্ষতার সাথে এবং নির্ভরযোগ্যভাবে যোগাযোগ করবেন তা আবিষ্কার করবেন। এই ধরনের নেটওয়ার্ক অটোমোবাইল এবং অন্যান্য শিল্প অ্যাপ্লিকেশনে ব্যাপকভাবে ব্যবহৃত হয়।
আপনি একটি স্বয়ংচালিত প্রকল্প করছেন বা একাধিক মাইক্রোকন্ট্রোলারের মধ্যে যোগাযোগের প্রয়োজন হোক না কেন, CAN বাসটি এমন অ্যাপ্লিকেশনের জন্য উপযুক্ত যেখানে নির্ভরযোগ্যতা এবং কর্মক্ষমতা অপরিহার্য। এবং MCP2515 মডিউল দিয়ে, এই নেটওয়ার্কে Arduino সংহত করা খুবই সহজ। সুতরাং, CAN প্রোটোকল, হার্ডওয়্যার কনফিগারেশন এবং প্রয়োজনীয় প্রোগ্রামিং সম্পর্কে গভীরভাবে শিখতে প্রস্তুত হন।
CAN বাস কি?
ক্যান বাস (কন্ট্রোলার এরিয়া নেটওয়ার্ক) একটি সিরিয়াল কমিউনিকেশন প্রোটোকল যা বিভিন্ন ডিভাইসকে একে অপরের সাথে যোগাযোগ করতে দেয়। এটি 1986 সালে Bosch দ্বারা বিকশিত হয়েছিল, এবং এটি বিশেষভাবে স্বয়ংচালিত অ্যাপ্লিকেশনের জন্য ডিজাইন করা হয়েছে, যদিও এর ব্যবহার শিল্প অটোমেশনের মতো অন্যান্য খাতে ছড়িয়ে পড়েছে। এই ধরনের নেটওয়ার্কে, সংযুক্ত ডিভাইসগুলি কেন্দ্রীয় হোস্ট বা নিয়ন্ত্রকের প্রয়োজন ছাড়াই বার্তা পাঠায় এবং গ্রহণ করে, এটি এমন পরিবেশের জন্য একটি অত্যন্ত দক্ষ প্রোটোকল তৈরি করে যেখানে যোগাযোগ এবং নির্ভরযোগ্যতা গুরুত্বপূর্ণ।
একটি আধুনিক গাড়িতে 70টিরও বেশি কন্ট্রোল ডিভাইস থাকে, যা ইসিইউ (ইলেক্ট্রনিক কন্ট্রোল ইউনিট) নামে পরিচিত, যা CAN বাসের মাধ্যমে একে অপরের সাথে সংযুক্ত থাকে। এই প্রোটোকলের জন্য ধন্যবাদ, ECUগুলি গাড়ির ক্রিয়াকলাপের জন্য মূল তথ্য বিনিময় করে, যেমন গাড়ির গতির ডেটা বা এক্সিলারেটর অবস্থান।
CAN বাস টপোলজি এবং সংকেত
CAN সিস্টেমের টপোলজি হল টাইপ মাল্টিমাস্টার, যার অর্থ নেটওয়ার্কের সাথে সংযুক্ত যেকোনো ডিভাইস বার্তা পাঠানোর জন্য বাসের নিয়ন্ত্রণ নিতে পারে। সমস্ত নোড এই বার্তাগুলি শোনে এবং তাদের প্রতিক্রিয়া জানাবে বা উপেক্ষা করবে কিনা তা সিদ্ধান্ত নেয়।
শারীরিক দৃষ্টিকোণ থেকে, যোগাযোগ দুটি তারের মাধ্যমে সঞ্চালিত হয়: ক্যান y আমি কি পারব. ইলেক্ট্রোম্যাগনেটিক হস্তক্ষেপ কমানোর জন্য এই তারগুলি ব্রেইড করা হয়। অতিরিক্তভাবে, সংকেতে প্রতিফলন এড়াতে নেটওয়ার্কের প্রান্তগুলিকে 120 ওহম প্রতিরোধক দিয়ে শেষ করতে হবে।
CAN সংকেত
CAN সিস্টেম যোগাযোগের জন্য দুটি যুক্তির অবস্থা ব্যবহার করে: প্রভাবশালী y পতনশীল. প্রভাবশালী অবস্থায়, CAN_H এর ভোল্টেজ 3.5V এবং CAN_L এর 1.5V ভোল্টেজ রয়েছে। এই অবস্থায় একটি যৌক্তিক '0' প্রেরণ করা হয়। অন্যদিকে, রিসেসিভ অবস্থায়, উভয় তারেরই 2.5V ভোল্টেজ রয়েছে, যা নির্দেশ করে যে বাসটি বিনামূল্যে এবং একটি যুক্তি '1' প্রেরণ করা যেতে পারে। এটি দুটি তারের মধ্যে ভোল্টেজের এই পরিবর্তন যা নেটওয়ার্কে ডেটা সংক্রমণের অনুমতি দেয়।
MCP2515 মডিউল
El MCP2515 মডিউল এটি আপনার Arduino এ CAN সংযোগ যোগ করার জন্য একটি আদর্শ সমাধান। এটি একটি CAN কন্ট্রোলার (MCP2515, যা CAN 2.0B স্পেসিফিকেশন অনুসরণ করে) এবং একটি CAN ট্রান্সসিভার (TJA1050, যা শারীরিক যোগাযোগ পরিচালনা করে) দ্বারা গঠিত। এই দুটি চিপ একসাথে কাজ করে যাতে আপনি SPI ইন্টারফেসের মাধ্যমে আপনার Arduino এর সাথে CAN বার্তা পাঠাতে এবং গ্রহণ করতে পারেন।
MCP2515 স্ট্যান্ডার্ড (11-বিট) এবং বর্ধিত (29-বিট) উভয় বার্তাই সমর্থন করে এবং মাস্ক এবং ফিল্টার ব্যবহার করে অবাঞ্ছিত বার্তাগুলিকে ফিল্টার করার ক্ষমতা রাখে, যা মাইক্রোকন্ট্রোলার থেকে অফলোড করে কাজ করে। কোলাহলপূর্ণ পরিবেশে বা দীর্ঘ দূরত্বে হোক না কেন নির্ভরযোগ্য যোগাযোগের প্রয়োজন এমন প্রকল্পগুলির জন্য এটি একটি চমৎকার বিকল্প।
MCP2515 মডিউল উপাদান
MCP2515 মডিউল নিম্নলিখিত অংশগুলি অন্তর্ভুক্ত করে:
- MCP2515 CAN কন্ট্রোলার: সমস্ত CAN প্রোটোকল ফাংশন সম্পাদনের জন্য দায়ী, যেমন বার্তা প্রেরণ এবং গ্রহণ করা।
- TJA1050 ক্যান ট্রান্সসিভার: CAN কন্ট্রোলার থেকে ডেটাকে ভৌত CAN বাসের সিগন্যালে রূপান্তর করার জন্য দায়ী এবং এর বিপরীতে।
- SPI যোগাযোগ পিন: SCK, MOSI, MISO এবং CS পিন ব্যবহার করে, MCP2515 তার SPI ইন্টারফেসের মাধ্যমে Arduino-এর সাথে যোগাযোগ করে।
- CAN বাস টার্মিনাল: এই ছোট স্ক্রু টার্মিনাল ব্লকটি 'H' এবং 'L' চিহ্নিত। CAN_H এবং CAN_L অবশ্যই CAN নেটওয়ার্ক তারের সাথে সংযুক্ত থাকতে হবে।
কিভাবে Arduino এর সাথে একটি CAN নেটওয়ার্ক সেট আপ করবেন
MCP2515 মডিউল দিয়ে, একটি CAN নেটওয়ার্ক সেট আপ করা তুলনামূলকভাবে সহজ। নীচে আমি ব্যাখ্যা করছি কিভাবে মডিউলটি আপনার Arduino বোর্ডের সাথে সংযুক্ত করবেন এবং কিভাবে সফটওয়্যারটি কনফিগার করবেন।
MCP2515 মডিউল সংযোগ
শুরু করতে, আপনার Arduino এর SPI পিনগুলিকে নিম্নরূপ সংযুক্ত করুন:
- মিসো (মডিউল আউটপুট) Arduino এর D12 পিন করতে
- মোশি (মডিউল ইনপুট) Arduino এর D11 পিন করতে
- এসসিকে (ঘড়ি) থেকে আরডুইনো পিন D13
- CS (চিপ নির্বাচন) থেকে Arduino পিন D10
আপনাকে MCP2515 এর INT পিনটিকে একটি Arduino ডিজিটাল পিনের সাথে সংযোগ করতে হবে, উদাহরণস্বরূপ D2, কারণ এই পিনটি একটি বৈধ বার্তা প্রাপ্ত হলে বাধাগুলি পরিচালনা করতে ব্যবহৃত হয়।
আপনার মডিউল পাওয়ার করতে ভুলবেন না। VCC পিনটি 5V এর সাথে এবং GND পিনটি মাটিতে সংযুক্ত করা উচিত।
CAN বাস টার্মিনালগুলির জন্য, আপনি যে নোডগুলিকে আন্তঃসংযোগ করতে চান তার মধ্যে CAN_H থেকে CAN_H এবং CAN_L থেকে CAN_L সংযোগ করুন৷ মনে রাখবেন যে CAN বাসটিকে অবশ্যই 120 ওহম প্রতিরোধকের সাথে উভয় প্রান্তে শেষ করতে হবে।
Arduino প্রোগ্রামিং
একবার আপনি নোডগুলি সংযুক্ত করলে, MCP2515 মডিউলের মাধ্যমে CAN বাসের সাথে যোগাযোগ করার জন্য আপনার Arduino প্রোগ্রাম করার সময় এসেছে। এটি করার সর্বোত্তম উপায় হল একটি উপযুক্ত লাইব্রেরি, যেমন লাইব্রেরি ব্যবহার করা 'mcp2515'.
প্রথমত, আপনাকে এই লাইব্রেরিটি ইনস্টল করতে হবে। আপনি যদি Arduino IDE ব্যবহার করেন, তাহলে স্কেচ > ইনক্লুড লাইব্রেরি > লাইব্রেরি পরিচালনা করুন-এ যান। 'mcp2515' অনুসন্ধান করুন এবং ইনস্টল বিকল্পটি নির্বাচন করুন।
লাইব্রেরি ইনস্টল করার সাথে, আপনি আপনার ট্রান্সমিটার নোড এবং আপনার রিসিভার নোডের জন্য কোড লিখতে এগিয়ে যেতে পারেন। নীচে আমি আপনাকে উভয়ের জন্য মৌলিক উদাহরণ দেখাই।
ট্রান্সমিটার নোডের জন্য কোড উদাহরণ
এই কোডটি প্রতি সেকেন্ডে CAN বাসে একটি 'হ্যালো ওয়ার্ল্ড' বার্তা পাঠায়।
#include void setup() { Serial.begin(9600); while (!Serial); Serial.println("Nodo transmisor CAN"); if (!CAN.begin(500E3)) { Serial.println("Error al iniciar CAN"); while (1); }}void loop() { Serial.print("Enviando mensaje... "); CAN.beginPacket(0x12); CAN.write('H'); CAN.write('o'); CAN.write('l'); CAN.write('a'); CAN.write(' '); CAN.write('M'); CAN.write('u'); CAN.write('n'); CAN.write('d'); CAN.write('o'); CAN.endPacket(); Serial.println("Mensaje enviado correctamente"); delay(1000);}
প্রাপ্তি নোডের জন্য কোড উদাহরণ
এই কোডটি CAN বাস থেকে বার্তা গ্রহণ করে এবং সেগুলিকে সিরিয়াল মনিটরে প্রদর্শন করে।
#include void setup() { Serial.begin(9600); while (!Serial); Serial.println("Nodo receptor CAN"); if (!CAN.begin(500E3)) { Serial.println("Error al iniciar CAN"); while (1); } CAN.onReceive(onReceive);}void loop() {}void onReceive(int packetSize) { Serial.print("Mensaje recibido con ID: 0x"); Serial.print(CAN.packetId(), HEX); Serial.print(" | Tamaño: "); Serial.print(packetSize); Serial.print(" | Datos: "); while (CAN.available()) { Serial.print((char)CAN.read()); } Serial.println();}
একটি CAN নেটওয়ার্কে গতি এবং দূরত্ব
CAN বাস বিভিন্ন গতিতে যোগাযোগের অনুমতি দেয়। MCP2515 দ্বারা সমর্থিত সর্বাধিক গতি হল 1 Mbit/s, কিন্তু বাসের দৈর্ঘ্য ট্রান্সমিশন গতিকে সীমিত করে। উদাহরণস্বরূপ, 1 Mbit/s এ, বাসের সর্বোচ্চ দৈর্ঘ্য প্রায় 40 মিটার। যাইহোক, যদি আপনার বেশি দূরত্ব ভ্রমণের প্রয়োজন হয় তবে আপনি আপনার গতি কমাতে পারেন। 125 kbit/s এ, বাসের দৈর্ঘ্য 500 মিটারে পৌঁছাতে পারে।
নেটওয়ার্কটি ভালভাবে পরিকল্পনা করা এবং বাসের দৈর্ঘ্য এবং যে পরিবেশে এটি ব্যবহার করা হবে তার জন্য উপযুক্ত গতি ব্যবহার করা গুরুত্বপূর্ণ, কারণ কোলাহলপূর্ণ পরিবেশ যোগাযোগের গুণমানকে প্রভাবিত করতে পারে।
এছাড়াও CAN_H এবং CAN_L তারের জন্য টুইস্টেড পেয়ার ব্যবহার করতে ভুলবেন না, কারণ এটি ইলেক্ট্রোম্যাগনেটিক হস্তক্ষেপ কমাতে সাহায্য করে এবং নেটওয়ার্ক নির্ভরযোগ্যতা উন্নত করে।
একাধিক নোড সহ CAN নেটওয়ার্ক
আপনি যদি বেশ কয়েকটি নোড সহ একটি নেটওয়ার্ক গঠন করতে চান তবে প্রক্রিয়াটি খুব অনুরূপ। আপনাকে যা করতে হবে তা হল সমস্ত নোডগুলিকে CAN_H এবং CAN_L লাইনের সমান্তরালে সংযুক্ত করা নিশ্চিত করুন৷ এছাড়াও মনে রাখবেন যে টার্মিনেশন প্রতিরোধকগুলি শুধুমাত্র প্রধান লাইনের শেষ প্রান্তে স্থাপন করুন, এবং মধ্যবর্তী নোডগুলিতে নয়।
আরও জটিল নেটওয়ার্কে, আপনার একাধিক নোড থাকতে পারে যা ট্রান্সমিটার এবং রিসিভার হিসাবে কাজ করে। প্রতিটি নোড বাসে ন্যূনতম লোড যোগ করে, যার ফলে কর্মক্ষমতাকে উল্লেখযোগ্যভাবে প্রভাবিত না করে একটি CAN নেটওয়ার্কে 112টি পর্যন্ত নোড সংযুক্ত হতে পারে।
আপনি ইঞ্জিন ডেটা পড়ার জন্য একটি অটোমোবাইলে একটি CAN বাস ব্যবহার করছেন বা একাধিক সেন্সর যোগাযোগের জন্য একটি শিল্প প্রকল্পে ব্যবহার করছেন, MCP2515 মডিউল এই কার্যকারিতা যোগ করা সহজ এবং দক্ষ করে তোলে৷ এই ধরনের নেটওয়ার্ক অ্যাপ্লিকেশনের জন্য আদর্শ যেখানে কম লেটেন্সি এবং ডেটা ট্রান্সমিশনে নির্ভরযোগ্যতা অপরিহার্য।