- कैन का परिचय
- एसपीआई और I2C पर तुलना की जा सकती है
- कर सकते हैं प्रोटोकॉल अनुप्रयोगों
- Arduino में CAN प्रोटोकॉल का उपयोग कैसे करें
- अवयव आवश्यक
- सर्किट आरेख
- दो MCP2515 CAN मॉड्यूल के बीच कनेक्शन
- संचार के लिए Arduino प्रोग्रामिंग
- कर सकते हैं ट्रांसमीटर साइड कोड स्पष्टीकरण (Arduino नैनो)
- साइड कोड स्पष्टीकरण प्राप्त कर सकते हैं (Arduino UNO)
- अरुडिनो में CAN संचार का कार्य
आज किसी भी औसत कार में लगभग 60 से 100 सेंसर इकाइयाँ होती हैं जो कि सूचना और सूचना के आदान-प्रदान के लिए होती हैं। कार निर्माताओं द्वारा अपनी कार को ऑटोनॉमस ड्राइविंग, एयरबैग सिस्टम, टायर प्रेशर मॉनिटरिंग, क्रूज़ कंट्रोल सिस्टम आदि सुविधाओं के साथ लगातार अधिक स्मार्ट बनाया जाता है। यह संख्या केवल उच्च होने की उम्मीद है। अन्य सेंसर के विपरीत, ये सेंसर महत्वपूर्ण सूचनाओं को संसाधित करते हैं और इसलिए इन सेंसर से डेटा को मानक मोटर वाहन संचार प्रोटोकॉल का उपयोग करके संचारित किया जाना चाहिए । उदाहरण के लिए, क्रूज़ कंट्रोल सिस्टम डेटा जैसे गति, थ्रॉटल स्थिति आदि महत्वपूर्ण मूल्य हैं जो इलेक्ट्रॉनिक कंट्रोल यूनिट (ECU) को भेजे जाते हैंकार के त्वरण स्तर को तय करने के लिए, यहां एक गलत संचार या डेटा की हानि के कारण महत्वपूर्ण विफलताएं हो सकती हैं। यूएआर, एसपीआई या आई 2 सी जैसे मानक संचार प्रोटोकॉल के विपरीत, डिजाइनर लिन, कैन, फ्लेक्सआरआर आदि जैसे बहुत विश्वसनीय ऑटोमोबाइल संचार प्रोटोकॉल का उपयोग करते हैं।
सभी उपलब्ध प्रोटोकॉलों में से कैन अधिक मुख्य रूप से उपयोग और लोकप्रिय है। हम पहले ही चर्चा कर चुके हैं कि CAN क्या है और कैसे काम कर सकता है। इसलिए, इस लेख में हम फिर से मूल बातें देखेंगे और फिर अंत में हम CAN संचार का उपयोग करके दो Arduinos के बीच डेटा का आदान-प्रदान करेंगे । दिलचस्प सही लगता है! तो चलो शुरू करते है।
कैन का परिचय
CAN उर्फ कंट्रोलर एरिया नेटवर्क एक सीरियल कम्युनिकेशन बस है जिसे औद्योगिक और ऑटोमोटिव अनुप्रयोगों के लिए डिज़ाइन किया गया है। यह एक संदेश आधारित प्रोटोकॉल है जिसका उपयोग कई उपकरणों के बीच संचार के लिए किया जाता है। जब कई कैन डिवाइस एक साथ जुड़े हुए हैं जैसे नीचे दिखाए गए हैं, तो कनेक्शन एक नेटवर्क बनाता है जो हमारे केंद्रीय तंत्रिका तंत्र की तरह काम करता है और किसी भी डिवाइस को नोड में किसी भी अन्य डिवाइस के साथ बात करने की अनुमति देता है।
जैसा कि ऊपर दिखाया गया है, बाय-डायरेक्शनल डेटा ट्रांसमिशन के लिए एक कैन नेटवर्क में केवल दो ही तार हो सकते हैं, हाई और कैन लो । आमतौर पर CAN के लिए संचार की गति 50 Kbps से 1Mbps तक होती है और दूरी 40M से 1Mbps से 1000 मीटर से लेकर 50kpbs तक हो सकती है।
संदेश का प्रारूप:
CAN संचार में डेटा नेटवर्क में एक विशेष संदेश प्रारूप के रूप में प्रेषित होता है। इस संदेश प्रारूप में कई खंड शामिल हैं लेकिन दो मुख्य खंड पहचानकर्ता और डेटा हैं जो CAN बस में संदेशों को भेजने और प्रतिक्रिया करने में मदद करते हैं।
पहचानकर्ता या CAN ID: पहचानकर्ता को CAN ID के रूप में भी जाना जाता है या PGN (पैरामीटर समूह संख्या) के रूप में भी जाना जाता है। इसका उपयोग CAN नेटवर्क में मौजूद CAN उपकरणों की पहचान करने के लिए किया जाता है। पहचानकर्ता की लंबाई कैन प्रोटोकॉल के प्रकार के आधार पर 11 या 29 बिट्स है।
मानक कैन: 0-2047 (11-बिट)
विस्तारित CAN: 0-2 29 -1 (29-बिट)
डेटा: यह वास्तविक सेंसर / कंट्रोल डेटा है जिसे फॉर्म एक डिवाइस से दूसरे को भेजना होता है। आकार का डेटा लंबाई में 0 से 8 बाइट्स तक कहीं भी हो सकता है।
डेटा लंबाई कोड (DLC): वर्तमान डेटा बाइट्स की संख्या के लिए 0 से 8।
कैन में प्रयुक्त तार:
क्या प्रोटोकॉल में सूचना भेजने और प्राप्त करने के लिए CAN_H और CAN_L दो तार शामिल हो सकते हैं। दोनों तार एक अंतर रेखा के रूप में कार्य करते हैं, जिसका अर्थ है कि CAN सिग्नल (0 या 1) CAN_L और CAN_H के बीच संभावित अंतर का प्रतिनिधित्व करता है। यदि अंतर सकारात्मक है और एक निश्चित न्यूनतम वोल्टेज से बड़ा है तो यह 1 है और यदि अंतर नकारात्मक है तो यह 0 है।
आम तौर पर एक मुड़ जोड़ी केबल का उपयोग CAN संचार के लिए किया जाता है। एक एकल 120-ओम अवरोधक का उपयोग आम तौर पर CAN नेटवर्क के दो सिरों पर किया जाता है जैसा कि छवि में दिखाया गया है, इसका कारण यह है कि लाइन को संतुलित किया जाना चाहिए और उसी क्षमता से बंधा होना चाहिए।
एसपीआई और I2C पर तुलना की जा सकती है
चूंकि हमने पहले से ही Arduino और IIC के साथ Arduino के साथ SPI का उपयोग करना सीख लिया है, इसलिए हम CAN के साथ SPI और I2C की विशेषताओं की तुलना कर सकते हैं
पैरामीटर | एसपीआई | I2C | कर सकते हैं |
स्पीड | 3Mbps से 10Mbps | मानक: 100Kbps | 10KBps से 1MBps भी उपयोग किए गए तार की लंबाई पर निर्भर करता है |
तेज: 400 केबीपीएस | |||
हाईस्पीड: 3.4Mbps | |||
प्रकार | एक समय का | एक समय का | अतुल्यकालिक |
तारों की संख्या | 3+ (MISO, MOSI, SCK, SS1, SS2… SS (n)) | 2 तार (एसडीए, एससीएल) | 2 तार (CAN_H, CAN_L) |
दोहरा | फुल डुप्लेक्स | अर्ध द्वैध | अर्ध द्वैध |
कर सकते हैं प्रोटोकॉल अनुप्रयोगों
- CAN प्रोटोकॉल की मजबूती और विश्वसनीयता के कारण, उनका उपयोग मोटर वाहन, औद्योगिक मशीनों, कृषि, चिकित्सा उपकरण आदि उद्योगों में किया जाता है।
- चूंकि तारों की जटिलता को कम किया जा सकता है, इसलिए वे मुख्य रूप से कार जैसे मोटर वाहन अनुप्रयोगों में उपयोग किए जाते हैं।
- लागू करने के लिए कम लागत और हार्डवेयर घटकों की कीमत भी कम है।
- कैन बस उपकरणों को जोड़ने और हटाने में आसान।
Arduino में CAN प्रोटोकॉल का उपयोग कैसे करें
चूंकि Arduino में कोई इनबिल्ट CAN पोर्ट नहीं होता है, MCP2515 नामक एक CAN मॉड्यूल का उपयोग किया जाता है। यह CAN मॉड्यूल SPI संचार का उपयोग करके Arduino के साथ हस्तक्षेप करता है। आइए MCP2515 के बारे में अधिक विस्तार से देखें और यह Arduino के साथ कैसे हस्तक्षेप करता है।
MCP2515 कर सकते हैं मॉड्यूल:
MCP2515 मॉड्यूल में CAN नियंत्रक MCP2515 है जो उच्च गति कैन ट्रांसीवर है । MCP2515 और MCU के बीच का कनेक्शन SPI के माध्यम से होता है। इसलिए, SPI इंटरफ़ेस वाले किसी भी माइक्रोकंट्रोलर के साथ इंटरफ़ेस करना आसान है।
शुरुआती लोग जो कैन बस सीखना चाहते हैं, यह मॉड्यूल एक अच्छी शुरुआत के रूप में काम करेगा। यह कर सकते हैं SPI बोर्ड औद्योगिक स्वचालन, गृह स्वचालन और अन्य मोटर वाहन एम्बेडेड परियोजनाओं के लिए आदर्श है।
MCP2515 की विशेषताएं और विशिष्टता:
- हाई-स्पीड कैन ट्रांसीवर TJA1050 का उपयोग करता है
- आयाम: 40 × 28 मिमी
- मल्टी कैन बस इंटरफ़ेस के विस्तार के लिए एसपीआई नियंत्रण
- 8MHZ क्रिस्टल थरथरानवाला
- 120 टर्मिनल प्रतिरोध
- स्वतंत्र कुंजी, एलईडी संकेतक, पावर संकेतक है
- 1 एमबी / एस का संचालन कर सकता है
- कम वर्तमान स्टैंडबाय ऑपरेशन
- 112 नोड तक जुड़े हो सकते हैं
MCP2515 के मॉड्यूल को पिनआउट कर सकते हैं:
पिन नाम |
उपयोग |
वीसीसी |
5V पावर इनपुट पिन |
GND |
ग्राउंड पिन |
सीएस |
SPI SLAVE पिन (सक्रिय कम) |
इसलिए |
एसपीआई मास्टर इनपुट गुलाम आउटपुट लीड |
एसआई |
एसपीआई मास्टर आउटपुट स्लेव इनपुट लीड |
एससीएलके |
SPI क्लॉक पिन |
पूर्णांक |
MCP2515 इंटरप्ट पिन |
इस ट्यूटोरियल में आइए देखें कि बस मॉड्यूल MCP2515 के माध्यम से Arduino Nano से Arduino Uno तक आर्द्रता और तापमान (DHT11) सेंसर डेटा कैसे भेजा जाए ।
अवयव आवश्यक
- Arduino UNO
- अरुडिनो नैनो
- DHT11
- 16x2 एलसीडी डिस्प्ले
- MCP2515 कैन मॉड्यूल - 2
- 10k पोटेंशियोमीटर
- ब्रेड बोर्ड
- तारों को जोड़ना
सर्किट आरेख
कर सकते हैं ट्रांसमीटर पर कनेक्शन:
घटक - पिन |
अरुडिनो नैनो |
MPC2515 - वीसीसी |
+ 5 वी |
MPC2515 - GND |
GND |
MPC2515 - सीएस |
D10 (SPI_SS) |
MPC2515 - एसओ |
D12 (SPI_MISO) |
MPC2515 - एसआई |
D11 (SPI_MOSI) |
MPC2515 - एससीके |
D13 (SPI_SCK) |
MPC2515 - INT |
डी 2 |
DHT11 - वीसीसी |
+ 5 वी |
DHT11 - GND |
GND |
DHT11 - OUT |
ए ० |
प्राप्तकर्ता की ओर से सर्किट कनेक्शन:
घटक - पिन |
Arduino UNO |
MPC2515 - वीसीसी |
+ 5 वी |
MPC2515 - GND |
GND |
MPC2515 - सीएस |
10 (SPI_SS) |
MPC2515 - एसओ |
12 (SPI_MISO) |
MPC2515 - एसआई |
11 (SPI_MOSI) |
MPC2515 - एससीके |
13 (SPI_SCK) |
MPC2515 - INT |
२ |
एलसीडी - वीएसएस |
GND |
एलसीडी - वीडीडी |
+ 5 वी |
एलसीडी - V0 |
10K पोटेंशियोमीटर सेंटर पिन करने के लिए |
एलसीडी - आरएस |
३ |
एलसीडी - आरडब्ल्यू |
GND |
एलसीडी - ई |
४ |
एलसीडी - डी 4 |
५ |
एलसीडी - D5 |
६ |
एलसीडी - डी 6 |
। |
एलसीडी - डी 7 |
। |
एलसीडी - ए |
+ 5 वी |
एलसीडी - के |
GND |
दो MCP2515 CAN मॉड्यूल के बीच कनेक्शन
एच - उच्च कर सकते हैं
एल - कम कर सकते हैं
MCP2515 (अरुडिनो नैनो) |
MCP2515 (Arduino UNO) |
एच |
एच |
एल |
एल |
एक बार सभी कनेक्शन किए जाने के बाद, मेरा हार्डवेयर नीचे इस तरह दिखता था
संचार के लिए Arduino प्रोग्रामिंग
पहले हमें Arduino IDE में CAN के लिए एक लाइब्रेरी स्थापित करनी होगी। निम्नलिखित लाइब्रेरी का उपयोग करके Arduino के साथ MCP2515 CAN मॉड्यूल को इंटरफेज करना आसान हो जाता है।
- Arduino CAN MCP615 लाइब्रेरी की ज़िप फ़ाइल डाउनलोड करें।
- Arduino IDE से: स्केच -> लाइब्रेरी शामिल करें ->.ZIP लाइब्रेरी जोड़ें
इस ट्यूटोरियल में कोडिंग को दो भागों में विभाजित किया जा सकता है, जैसे कि CAN ट्रांसमीटर कोड (Arduino Nano) और अन्य CAN CAN रिसीवर कोड (Arduino UNO) के रूप में दोनों को इस पृष्ठ के निचले भाग में पाया जा सकता है। उसी के लिए स्पष्टीकरण इस प्रकार है।
डेटा भेजने और प्राप्त करने के लिए प्रोग्राम लिखने से पहले सुनिश्चित करें कि आपने उपरोक्त चरणों का पालन करते हुए लाइब्रेरी स्थापित की है और कैन मॉड्यूल MCP2515 को आपके प्रोग्राम में निम्नलिखित के रूप में आरंभीकृत किया गया है।
प्रारंभिक MCP2515 कर सकते हैं मॉड्यूल:
MCP2515 के साथ संबंध बनाने के लिए चरणों का पालन करें:
1. पिन नंबर सेट करें जहां SPI CS जुड़ा हुआ है (डिफ़ॉल्ट रूप से 10)
MCP2515 mcp2515 (10);
2. बॉड दर और थरथरानवाला आवृत्ति सेट करें
mcp2515.setBitrate (CAN_125KBPS, MCP_8MHZ);
उपलब्ध बॉड दरें:
CAN_5KBPS, CAN_10KBPS, CAN_20KBBPS, CAN_33KBPS, CAN_40KBPS, CAN_50KBPS, CAN_80KBPS, CAN_83K3BPS, CAN_95KBPS, CAN_100KBPS, CAN_125KBPS, CAN_125KBPS, CAN_125KBPS, CAN_125KBPS, CAN_125KBPS
उपलब्ध घड़ी की गति:
MCP_20MHZ, MCP_16MHZ, MCP_8MHZ
3. मोड सेट करें।
mcp2515.setNormalMode (); mcp2515.setLoopbackMode (); mcp2515.setListenOnlyMode ();
कर सकते हैं ट्रांसमीटर साइड कोड स्पष्टीकरण (Arduino नैनो)
ट्रांसमीटर सेक्शन में, Arduino नैनो SPI पिंस के माध्यम से MCP2515 CAN मॉड्यूल के साथ हस्तक्षेप करती है और DHT11 CAN बस में तापमान और आर्द्रता डेटा भेजता है ।
पहले आवश्यक पुस्तकालय शामिल हैं, एसपीआई संचार का उपयोग करने के लिए एसपीआई लाइब्रेरी, आरडीयू के साथ डीएचटी सेंसर का उपयोग करने के लिए कैन कम्युनिकेशन और डीएचटी लाइब्रेरी का उपयोग करने के लिए एमपीसी 2515 लाइब्रेरी । हमने पहले DHT11 को Arduino के साथ इंटरफ़ेयर किया था।
#शामिल
अब DHT11 (OUT पिन) का पिन नाम जो Arduino Nano के A0 से जुड़ा है, परिभाषित किया गया है
#define DHTPIN A0
और भी, DHTTYPE को DHT11 के रूप में परिभाषित किया गया है।
# डेफिन DHTTYPE DHT11
संदेश प्रारूप को संग्रहीत करने के लिए एक कैनमस संरचना डेटा प्रकार।
संरचना can_frame canMsg;
पिन नंबर सेट करें जहां SPI CS जुड़ा हुआ है (डिफ़ॉल्ट रूप से 10)
MCP2515 mcp2515 (10);
और भी, DHT के साथ वर्ग DHT के लिए ऑब्जेक्ट DHT Arduino नैनो और DHT प्रकार के साथ DHT 11 को आरंभीकृत किया जाता है।
DHT dht (DHTPIN, DHTTYPE);
शून्य सेटअप में अगला ():
निम्नलिखित कथन का उपयोग करके SPI संचार शुरू करें
SPI.begin ();
और फिर DHT11 सेंसर से तापमान और आर्द्रता मान प्राप्त करने के लिए नीचे दिए गए कथन का उपयोग करें।
dht.begin ();
अगले MCP2515 को निम्नलिखित कमांड का उपयोग करके RESET किया जा रहा है
mcp2515.reset ();
अब MCP2515 घड़ी के रूप में 500KBPS और 8MHZ की गति निर्धारित करता है
mcp2515.setBitrate (CAN_500KBPS, MCP_8MHZ);
और MCP2525 को सामान्य मोड पर सेट किया गया है
mcp2515.setNormalMode ();
शून्य लूप में ():
निम्न कथन को एक पूर्णांक चर h और t में आर्द्रता और तापमान मान मिलता है।
int h = dht.readHumidity (); int t = dht.readTENS ();
अगला कैन आईडी 0x036 (पसंद के अनुसार) और डीएलसी 8 के रूप में दिया गया है और हम डेटा और डेटा को एच और टी डेटा देते हैं और 0 के साथ सभी डेटा को आराम करते हैं।
canMsg.can_id = 0x036; canMsg.can_dlc = 8; canMsg.data = h; // canMsg.data = t में आर्द्रता मान अपडेट करें ; // अपडेट तापमान मूल्य canMsg.data = 0x00 में; // सभी को 0 canMsg.data = 0x00 के साथ आराम करें ; canMsg.data = 0x00; canMsg.data = 0x00; canMsg.data = 0x00; canMsg.data = 0x00;
सब के बाद, CAN BUS को संदेश भेजने के लिए हम निम्नलिखित कथन का उपयोग करते हैं।
mcp2515.sendMessage (& canMsg);
तो अब तापमान और आर्द्रता डेटा को कैन बस को संदेश के रूप में भेजा जाता है।
साइड कोड स्पष्टीकरण प्राप्त कर सकते हैं (Arduino UNO)
रिसीवर अनुभाग में, Arduino UNO ने MCP2515 और 16x2 एलसीडी डिस्प्ले के साथ हस्तक्षेप किया। यहाँ Arduino UNO CAN बस से तापमान और आर्द्रता प्राप्त करता है और एलसीडी में प्राप्त डेटा प्रदर्शित करता है।
पहले आवश्यक पुस्तकालय शामिल हैं, एसपीआई संचार का उपयोग करने के लिए एसपीआई लाइब्रेरी, अरुडिनो के साथ 16x2 एलसीडी का उपयोग करने के लिए कैन कम्युनिकेशन और लिक्विडक्रिसटल लाइब्रेरी का उपयोग करने के लिए एमसीपी 2515 लाइब्रेरी ।
#शामिल
अगले एलसीडी पिन जो Arduino UNO के साथ जुड़ने में उपयोग किए जाते हैं, परिभाषित किए गए हैं।
const int rs = 3, en = 4, d4 = 5, d5 = 6, d6 = 7, d7 = 8; लिक्विड क्रिस्टल एलसीडी (आरएस, एन, डी 4, डी 5, डी 6, डी 7);
संदेश प्रारूप को संग्रहीत करने के लिए एक संरचनात्मक डेटा प्रकार घोषित किया जाता है ।
संरचना can_frame canMsg;
पिन नंबर सेट करें जहां SPI CS जुड़ा हुआ है (डिफ़ॉल्ट रूप से 10)
MCP2515 mcp2515 (10);
शून्य सेटअप में ():
पहले एलसीडी को 16x2 मोड पर सेट किया गया है और एक स्वागत संदेश प्रदर्शित किया गया है।
lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("CAN ARDUINO"); देरी (3000); lcd.clear ();
निम्नलिखित कथन का उपयोग करके SPI संचार शुरू करें।
SPI.begin ();
अगले MCP2515 को निम्नलिखित कमांड का उपयोग करके RESET किया जा रहा है।
mcp2515.reset ();
अब MCP2515 घड़ी के रूप में 500KBPS और 8MHZ की गति निर्धारित करता है।
mcp2515.setBitrate (CAN_500KBPS, MCP_8MHZ);
और MCP2525 को सामान्य मोड पर सेट किया गया है।
mcp2515.setNormalMode ();
शून्य लूप में अगला ():
निम्नलिखित कथन का उपयोग CAN बस से संदेश प्राप्त करने के लिए किया जाता है। यदि संदेश प्राप्त होता है तो वह इस स्थिति में हो जाता है ।
अगर (mcp2515.readMessage (& canMsg) == MCP2515:: ERROR_OD)
में अगर हालत डेटा प्राप्त और ग में संग्रहीत किया जाता anMsg , डेटा नमी मूल्य और डेटा तापमान मूल्य होता है है। दोनों मानों को एक पूर्णांक x और y में संग्रहीत किया जाता है।
int x = canMsg.data; int y = canMsg.data;
मूल्यों को प्राप्त करने के बाद, तापमान और आर्द्रता के मान 16x2 एलसीडी डिस्प्ले में निम्नलिखित कथन का उपयोग करके प्रदर्शित किए जाते हैं।
lcd.setCursor (0,0); lcd.print ("आर्द्रता:"); lcd.print (x); lcd.setCursor (0,1); lcd.print ("Temp:"); lcd.print (y); देरी (1000); lcd.clear ();
अरुडिनो में CAN संचार का कार्य
एक बार जब हार्डवेयर तैयार हो जाता है तो संबंधित Arduino बोर्डों में CAN ट्रांसमीटर और CAN रिसीवर (पूरा प्रोग्राम नीचे दिया गया है) के लिए प्रोग्राम अपलोड कर सकते हैं। जब आप संचालित होते हैं तो आपको ध्यान देना चाहिए कि DHT11 द्वारा पढ़ा गया तापमान मान CAN संचार के माध्यम से दूसरे Arduino को भेजा जाएगा और 2 nd Arduino के LCD पर प्रदर्शित होगा जैसा कि आप नीचे की छवि में देख सकते हैं। मैंने अपने एसी रिमोट का उपयोग यह जांचने के लिए किया है कि एलसीडी पर प्रदर्शित तापमान वास्तविक कमरे के तापमान के करीब है या नहीं।
पूरा काम नीचे दिए गए वीडियो पर पाया जा सकता है। यदि आपके कोई प्रश्न हैं, तो उन्हें टिप्पणी अनुभाग में छोड़ दें या अन्य तकनीकी प्रश्नों के लिए हमारे मंचों का उपयोग करें।