Arduino gibi bir mikrodenetleyici ve çevre birimlerini otomobilinizi kontrol etmek için kullanmak istiyorsanız, MCP2515, CAN-BUS kontrol modülünü kullandığımız bu Arduino CAN BUS eğitimine göz atın.
Giriş
Günümüzde otomobiller, bilgi algılamak ve alışveriş yapmak için yaklaşık 60 ila 100 sensör birimine sahiptir. Otonom sürüş, hava yastığı sistemleri, akıllı otomobil sistemleri gibi daha fazla özellik eklenmesiyle birlikte, sensör birimlerinin sayısı artmaya devam etmektedir.
Hız gibi önemli bilgileri ileten sensör birimleri ile herhangi bir yanlış iletişim veya veri kaybı, ölümcül kazalara yol açabilir.
Bu nedenle, UART, I2C, SPI gibi standart iletişim protokolleri, CAN, LIN ve FlexRay gibi diğer iletişim protokolleri kadar güvenilir olmadıkları için bu hesaplamada yer almamaktadır.
CAN, mevcut diğer protokollere kıyasla daha yaygın olarak kullanılan ve popüler olan bir protokoldür.
CAN (Controller Area Network) BUS Hakkında Daha Fazla
- Controller Area Network (CAN), mikrodenetleyicilerin ve cihazların bir araç içinde birbirleriyle iletişim kurmasını sağlamak için kullanılır ve bir ana bilgisayar olmadan kontrol ve veri toplama imkanı sunar. Bu cihazlar Elektronik Kontrol Üniteleri (ECU) olarak da adlandırılır ve bir aracın tüm parçaları arasında iletişimi sağlar.
- Otomotiv CAN BUS sisteminde bir ECU, enerji kontrol ünitesi, hava yastığı, ses sistemi vb. olabilir. Günümüzde modern bir araçta 70’e kadar ECU bulabilirsiniz.
- Basit bir ifadeyle, CAN BUS, bir araç içinde birbirleriyle iletişim kuran bir dizi bağlı ECU içerir ve bu iletişim bir yayın temelinde gerçekleşir. Her ECU her yayını yakalar, ancak bireysel olarak buna yanıt verip vermeyeceğine karar verir.
- CAN, endüstriyel ve otomotiv uygulamaları için tasarlanmış bir seri iletişim bus’udur. Örneğin, araçlarda, tarım ekipmanlarında, endüstriyel ortamlarda vb. bulunur.
- Neden UART, SPI ve I2C gibi diğer iletişim çevre birimlerini kullanmayalım?
- Diğer iletişim protokolleri olan UART, SPI ve I2C ile karşılaştırıldığında, CAN BUS iletişim protokolü çok daha güvenilirdir çünkü kritik verileri, örneğin bir aracın gaz kelebeği pozisyonunu iletmek için kullanılan standart otomotiv iletişim protokolleridir. Yanlış iletişim veya veri kaybı meydana gelirse, bu kritik arızalara yol açabilir.

- CAN BUS protokolü olmadan, araçlardaki elektronik modüller, doğrudan, nokta-nokta analog sinyal hatları kullanarak birbirleriyle iletişim kurmak zorunda kalacaktır. Her modülün iletişim için doğrudan bir hat gerektirmesi, yalnızca zaman alıcı değil, aynı zamanda yukarıdaki resimde görüldüğü gibi aşırı miktarda kablolama ile karmaşık hale gelecektir.

- CAN BUS protokolü ile, tüm bu kablolama ihtiyacını ortadan kaldırarak elektronik cihazların birbirleriyle iletişim kurmasını sağlar. Bu, her düğümü ana gösterge paneline bağlayan tek bir çoklu kablo ile gerçekleştirilir.
- Çoklu kablo ve mimari, sinyallerin birleştirilip tüm ağ üzerinden yalnızca tek bir kablo ile iletilmesini sağlar ve bu sırada araçlardaki her elektronik modülün sensörlerden ve aktüatörlerden veri almasını garanti eder. Bu, kullanıcının aracındaki herhangi bir sayıda ECU’yu iki telli bus üzerinden bağlamasına olanak tanır.
- Ayrıca, yalnızca yazılım aracılığıyla birkaç özelliğin eklenmesine olanak tanır. Dahası, bir ECU, başka bir ECU’dan veri kullanabilir, bu da birden fazla cihazda aynı sensörlerin kurulması gerekliliğini ortadan kaldırır.
- Bir CAN BUS sistemi ile artık kontrol üniteleri veya tekerlek açısı sensörü gibi akıllı sensörler gibi elektronik modülleri ağlayabilirsiniz.
CAN BUS hakkında daha fazla bilgi edinmek ister misiniz? Daha fazla bilgi edineceğiniz CAN BUS kılavuzumuza göz atın.
Arduino MCP2515 CAN BUS Arayüzü Eğitimi
Bu eğitimde, Arduino/Seeeduino’nuza CAN-BUS yeteneği kazandırmak için SPI arayüzüne sahip MCP2515 CAN Bus kontrolcüsü ve MCP2551 CAN alıcı-verici içeren Seeed’in CAN-BUS Shield V2.0’ını kullanacağız.
Shield, yüksek hızlı bir CAN alıcı-verici olan MCP2515 CAN kontrolcüsüne sahiptir. Herhangi bir başlangıç seviyesi kullanıcı ve yapımcı için, CAN-BUS Shield V2.0, kolay bağlantı çevre birimleri ile CAN dünyasına giriş yapmak için mükemmeldir.
CAN BUS Shield, Arduino UNO (ATmega328), Arduino Mega (ATmega1280/2560) ve Arduino Leonardo (ATmega32U4) ile iyi çalışır.
CAN BUS Shield V2.0 Donanım Genel Görünümü

- DB9 Arayüzü – OBDII Arayüzüne bir DBG-OBD Kablosu aracılığıyla bağlanmak için.
- V_OBD – OBDII Arayüzünden (DB9’dan) güç alır.
- Led Göstergesi:
- PWR: güç
- TX: veri gönderildiğinde yanar
- RX: veri alındığında yanar
- INT: veri kesintisi
- Terminal – CAN_H ve CAN_L
- Arduino UNO pin çıkışı
- Seri Grove konektörü
- I2C Grove konektörü
- ICSP pinleri
- IC – MCP2551, yüksek hızlı bir CAN alıcı-verici (veri sayfası)
- IC – MCP2515, SPI arayüzüne sahip bağımsız CAN kontrolcüsü (veri sayfası)
CAN BUS Shield V2.0 Pin Haritası

Daha fazla uzatmadan, hemen eğitime geçelim.
Ne gerekiyor?
- 2 x CAN-BUS Shield
- 2 x Arduino UNO / Seeeduino V4.2
- 2 x Jumper Kablo
Birini verici, diğerini alıcı olarak kullanacağınız için her birinden 2 adet CAN-BUS shield ve Arduino’ya ihtiyacınız olacak; iletişim bu iki cihaz arasında gerçekleşecektir.
Adım Adım Eğitim
Adım 1: Donanım Bağlantısı
- Öncelikle, her bir CAN-BUS shield’ı Seeeduino V4.2’ye bağlayın ve aşağıda gösterildiği gibi 2 jumper kablo ile 2 CAN-BUS shield’ı birbirine bağlayın. (CAN_H’i CAN_H’e ve CAN_L’i CAN_L’e bağlayın)

Adım 2: Yazılımın Kurulumu
- CAN BUS için kütüphaneyi buradan indirin ve indirme tamamlandıktan sonra Arduino IDE’ye kurun.
- Arduino kütüphanesinin nasıl kurulacağını bilmiyorsanız, talimatları buradan takip edebilirsiniz.
- Node’lardan biri (bir node, Seeeduino + CAN_BUS Shield anlamına gelir) master olarak görev yapar, diğeri ise slaver olarak görev yapar. Master sürekli olarak slaver’a veri gönderecektir.
- Aşağıda gösterildiği gibi send örneğini açın (Dosya > Örnekler > CAN_BUS_Shield-master > send) ve master‘a yükleyin:

- Bundan sonra, aşağıda gösterildiği gibi receive_check örneğini açın (Dosya > Örnekler > CAN_BUS_Shield-master > receive_check) ve slaver‘a yükleyin.

Adım 3: Sonuçları Görüntüleme
- Arduino IDE’nin Seri Monitörünü açın (slaver), master’dan gönderilen verileri alacaksınız. Aşağıda nasıl görüneceğine dair bir fotoğraf bulunmaktadır:

Adım 4: API’ler (Uygulama Programı Arayüzü)
Bu yazılımın API’leri için şunları yapabilirsiniz:
Baud Hızını Ayarlama
- Bu fonksiyon, CAN Bus sisteminin baud hızını başlatmak için kullanılır. Mevcut baud hızları aşağıda listelenmiştir:
#define CAN_5KBPS 1
#define CAN_10KBPS 2
#define CAN_20KBPS 3
#define CAN_25KBPS 4
#define CAN_31K25BPS 5
#define CAN_33KBPS 6
#define CAN_40KBPS 7
#define CAN_50KBPS 8
#define CAN_80KBPS 9
#define CAN_83K3BPS 10
#define CAN_95KBPS 11
#define CAN_100KBPS 12
#define CAN_125KBPS 13
#define CAN_200KBPS 14
#define CAN_250KBPS 15
#define CAN_500KBPS 16
#define CAN_666kbps 17
#define CAN_1000KBPS 18
Alma Maskesi ve Filtre Ayarlama
- Hedef cihazdan veri almanızı garanti eden 2 alma maskesi kaydı ve 5 filtre kaydı, kontrolcü çipinde bulunmaktadır. Özellikle birçok node’dan oluşan büyük bir ağda faydalıdırlar.
- Bu maske ve filtre kayıtlarını kullanmanız için size iki fonksiyon sağlıyoruz. Bunlar:
Maske
init_Mask(unsigned char num, unsigned char ext, unsigned char ulData);
Filtre
init_Filt(unsigned char num, unsigned char ext, unsigned char ulData);
- num hangi kaydın kullanılacağını temsil eder. Maske için 0 veya 1, filtre için 0’dan 5’e kadar doldurabilirsiniz.
- ext çerçevenin durumunu temsil eder. 0, standart bir çerçeve için bir maske veya filtre olduğunu belirtir. 1, genişletilmiş bir çerçeve içindir.
- ulData filtrenin maske içeriğini temsil eder.
Almayı Kontrol Et
- MCP2515, alınan bir çerçeve için yazılımın kontrol ettiği bir anket modunda veya bir çerçevenin alındığını veya iletimin tamamlandığını bildiren ek pinler kullanarak çalışabilir.
- Alınan çerçeveleri kontrol etmek için aşağıdaki fonksiyonu kullanın:
INT8U MCP_CAN::checkReceive(void);
Fonksiyon, bir çerçeve geldiğinde 1, hiçbir şey gelmediğinde 0 döndürecektir.
CAN ID’yi Al
- Bazı veriler geldiğinde, “send” node’unun CAN ID’sini almak için aşağıdaki fonksiyonu kullanabilirsiniz.
INT32U MCP_CAN::getCanId(void)
Veri Gönder
CAN.sendMsgBuf(INT8U id, INT8U ext, INT8U len, data_buf);
Bu, verileri busta göndermek için bir fonksiyondur. İçinde:
- id verinin nereden geldiğini temsil eder.
- ext çerçevenin durumunu temsil eder. ‘0’ standart çerçeve anlamına gelir. ‘1’ genişletilmiş çerçeve anlamına gelir.
- len bu çerçevenin uzunluğunu temsil eder.
- data_buf bu mesajın içeriğidir.
Örneğin, ‘send’ örneğinde, şunları kullanıyoruz:
unsigned char stmp[8] = {0, 1, 2, 3, 4, 5, 6, 7};
CAN.sendMsgBuf(0x00, 0, 8, stmp); // 'stmp' mesajını busta gönderir ve diğer cihazlara bunun 0x00'dan gelen standart bir çerçeve olduğunu bildirir.
Veri Al
- Aşağıdaki fonksiyon, ‘receive’ node’unda veri almak için kullanılır:
CAN.readMsgBuf(unsigned char len, unsigned char buf);
Maskelerin ve filtrelerin ayarlandığı durumlarda. Bu fonksiyon yalnızca maskelerin ve filtrelerin gereksinimlerini karşılayan çerçeveleri alabilir.
- len veri uzunluğunu temsil eder.
- buf verileri depoladığınız yerdir.
Yeni Bir Baud Hızı Oluştur
Birçok sık kullanılan baud hızını sağladık, aşağıda gösterildiği gibi:
#define CAN_5KBPS 1
#define CAN_10KBPS 2
#define CAN_20KBPS 3
#define CAN_25KBPS 4
#define CAN_31KBPS 5
#define CAN_33KBPS 6
#define CAN_40KBPS 7
#define CAN_50KBPS 8
#define CAN_80KBPS 9
#define CAN_83KBPS 10
#define CAN_95KBPS 11
#define CAN_100KBPS 12
#define CAN_125KBPS 13
#define CAN_200KBPS 14
#define CAN_250KBPS 15
#define CAN_500KBPS 16
#define CAN_666KBPS 17
#define CAN_1000KBPS 18
Yine de istediğiniz hızı bulamıyorsanız, burada ihtiyaç duyduğunuz baud hızını hesaplamanıza yardımcı olacak bir yazılım sağlıyoruz.
Yazılımı indirmek için buraya tıklayın, Çince’dir ama kullanımı kolaydır. İşte daha kolay kullanım için çevrilmiş arayüz:

- Yazılımı açın, yapmanız gereken tek şey istediğiniz baud hızını ayarlamak ve ardından bazı basit ayarlar yapmak, ardından hesapla butonuna tıklamaktır.
- Sonra bazı veriler, cfg1, cfg2 ve cfg3 alacaksınız.
- Kütüphaneye bazı kodlar eklemeniz gerekecek.
- mcp_can_dfs.h dosyasını açın, yaklaşık 272. satıra aşağıdaki kodu eklemeniz gerekecek:
#define MCP_16MHz_xxxkBPS_CFG1 (cfg1) // xxx, ihtiyaç duyduğunuz baud hızıdır
#define MCP_16MHz_xxxkBPS_CFG2 (cfg2)
#define MCP_16MHz_xxxkBPS_CFG3 (cfg2)
- Sonra yaklaşık 390. satıra gidelim, aşağıdaki kodu ekleyin:
#define CAN_xxxKBPS NUM // xxx, ihtiyaç duyduğunuz baud hızıdır ve NUM bir sayıdır, diğer hızlardan farklı bir sayı almanız gerekir.
- mcp_can.cpp dosyasını açın, yaklaşık 190. satırda mcp2515_configRate fonksiyonuna gidin, ardından aşağıdaki kodu ekleyin:
case (CAN_xxxKBPS):
cfg1 = MCP_16MHz_xxxkBPS_CFG1;
cfg2 = MCP_16MHz_xxxkBPS_CFG2;
cfg3 = MCP_16MHz_xxxkBPS_CFG3;
break;
Hepsi bu kadar! Artık ihtiyaç duyduğunuz baud hızını kullanabilirsiniz!
Shield’ı aracınıza bağlamak istiyorsanız, bu OBD>DB9 kablosuna bakarak kontrol edebilirsiniz. Bu kablo, OBD konektörüne ve DB9 konektörüne bağlanmanızı kolaylaştırır, böylece verileri okuyabilir ve aracınızı kontrol edebilirsiniz.
CAN BUS’unuzu hata ayıklamak mı istiyorsunuz? Bu USB-CAN Analyzer’a göz atın! Bununla, elde edilen CAN-BUS verilerini bilgisayarınıza kolayca aktarabilirsiniz. Destekleyici yazılım yardımıyla, bu USB-CAN Analyzer’ı CAN Bus ağını geliştirmek, test etmek, yönetmek ve bakımını yapmak için kullanabilir, ayrıca CAN verilerini alabilir, gönderebilir ve analiz edebilirsiniz.
Alternatif CAN BUS Modülü
Projeniz alan sınırlıysa ve CAN-BUS dışında başka bir işlev gerektirmiyorsa, Arduino ile uyumlu, daha kompakt ve maliyet etkin bir Grove CAN-BUS modülü burada bulunmaktadır. Bu modül de MCP2515 ve MCP2551 modülü üzerine kuruludur.
“`html
Deneyebileceğiniz Diğer CAN-BUS Ürünleri
Wio ESP32 CAN Geliştirme Kiti

Wio ESP32 CAN Geliştirme Kiti ESP32C3 tabanlıdır ve Uzun Menzilli kontrolör olarak Wio-E5 STM32WLE5JC modülünü kullanır. CAN FD & CAN2.0 iletişimini destekler ve olağanüstü RF performansı ile yüksek genişletilebilirlik sunar. Araç hackleme ve Uzun Menzilli sensör ağı yönetimi için idealdir.
Bu, Wio-E5 CAN Geliştirme Kitinin geliştirilmiş bir versiyonudur, bir Wio ESP32 CAN bus Geliştirme Kartı, bir anten (EU868/US915), bir U.FL anten ve su geçirmez bir kasa içerir.
Wio-E5 CAN FD Geliştirme Kiti

Wio-E5 CAN Geliştirme Kiti Wio-E5 STM32WLE5JC Modülüne dayanır ve CAN FD, CAN2.0 ve RS485 iletişimini destekler. Endüstriyel standartları destekler, su geçirmez bir kasa ve güneş enerjisi şarj arayüzü sağlar ve yüksek genişletilebilirlik ve uyumluluk sunar. Araç hackleme ve Uzun Menzilli sensör ağı yönetimi için idealdir.
Raspberry Pi için 2-Kanal CAN-BUS(FD) Shield

Raspberry Pi için 2-Kanal CAN-BUS(FD) Shield MCP2518 CAN FD Kontrolcü ve MCP2557 CAN FD Alıcı ile Raspberry Pi ile yüksek hızlı SPI arayüzü üzerinden iletişim kurar. CAN FD (Esnek Veri Hızı ile CAN) protokolü, geleneksel CAN BUS’un bir yükseltilmiş versiyonudur ve CAN’in iletim hızını 1Mbps’den 8Mbps’ye çıkarır. Aynı zamanda, CAN FD gerçek zamanlı performansı artırır ve kullanıcı veri çerçevelerini genişleterek daha yüksek verimlilik sağlar.
Grove – CAN BUS Modülü

Bu Grove – CAN BUS Modülü GD32E103 tabanlıdır, tamamen yeni bir tasarım benimser, ana kontrol olarak maliyet etkin ve yüksek performanslı GD32E103 mikrodenetleyicisini kullanır ve CAN FD’ye seri port işlevini tamamlamak için yazdığımız bir firmware ile işbirliği yapar.
CANBed – Arduino CAN-BUS Geliştirme Kiti

CANBed – Arduino CAN-BUS Geliştirme Kiti bir ATmega32U4 çipi içerir, bu da başka bir Arduino Kartına ek kablo bağlamanıza gerek olmadığı anlamına gelir, kendisi bir Arduino kartıdır ve ayrıca MCP2515 CAN Bus kontrolcüsü ve MCP2551 CAN Bus alıcısı içerir!
CAN BUS OBD-II RF Geliştirme Kiti

CAN BUS OBD-II RF Geliştirme Kiti, aracınızın OBD-II arayüzü ile RF (Radyo Frekansı) kullanarak yüzlerce metre mesafeden kablosuz iletişim kurmanıza yardımcı olur, bu da aracınızın mülk değer verilerini uzaktan işlemenizi sağlar. Ayrıca, bununla nasıl başlayacağınız ve araçlardan veri alacağınız konusunda Arduino tabanlı eğitimler de sağlıyoruz.
Wio Terminal ile CAN Bus Araç Hackleme Kiti

Bu CAN Bus Araç Hackleme Kiti, aracınızı hacklemek için ihtiyacınız olan her şeyi sağlar; bir Wio Terminal, bir OBD2 konektörü ve bir Grove Seri CAN Bus Modülü içerir. Neredeyse tüm modern araçlar OBD2 arayüzüne sahiptir. Bu kit, tüm araç bilgilerini almanızı ve hatta OBD2 arayüzü aracılığıyla aracı kontrol etmenizi sağlar. Hem başlangıç seviyesindeki hem de uzman kullanıcılar için keyifli olacaktır.
OBD-II CAN-BUS Geliştirme Kiti

Bu OBD-II CAN-BUS Geliştirme Kiti, aracınızın OBD-II arayüzü ile iletişim kurmanız için mükemmel bir çözümdür, tamirciye gitmeden. Bir Seri CAN Bus modülü, bir OBD-II Konektörü ve tüm teşhis ve veri kaydı işlemlerini kolayca yapmanıza yardımcı olacak diğer aksesuarları içerir. Ayrıca, Arduino tabanlı bir eğitim de sağlıyoruz ve bu eğitimi takip ederek aracınızdan kolayca veri alabilirsiniz.
CAN Uygulamaları
Artık bir CAN-BUS modülünü Arduino ile nasıl arayüzleştireceğinizi öğrendiniz, peki CAN’in bazı uygulamaları nelerdir?
“`
- Elektronik Vites Değiştirme Sistemi
- Otomasyondaki Ana Arayüz (endüstriyel gibi)
- Tıbbi Ekipman
- Robotik
- Araç Motorunun Otomatik Başlatma/Durdurma
Sonuç
Bugünkü MCP2515 CAN-BUS ile Arduino konulu eğitimimiz bu kadar. Umarım yeni bir şeyler öğrenmişsinizdir!
CAN veya eğitimle ilgili sorularınız mı var? Aşağıdaki yorumlar kısmına bir yorum bırakın!





