duzgun.org/blog
Blue&Me değişimi/ Alfa Romeo Giulietta 940/ 2011 · 2.0 JTDm 140

Blue&Me yerine kendi modülümü yapmak: adım adım kurulum

Bozulan Magneti Marelli marka Blue&Me modülünü (50521871) Raspberry Pi Zero W ile değiştirdim. Body Computer'a yanıt veriyor, direksiyon tuşlarını okuyor, Bluetooth üzerinden müzik dinlenebiliyor ve telefon görüşmeleri orijinal radyo ile aracın kendi mikrofonundan gerçekleşiyor.

Durum, 2026-10-12: 1 Ekim 2026'dan beri aracımda takılı. Araç onu kabul ediyor; müzik, parça bilgisi ve direksiyon tuşları çalışıyor. Görüşmeler yeniden çalışıyor: tezgâhta iki şase hatasını giderdikten sonra (adım 15), 2026-10-11'de ünite araca tam olarak takılıyken denedim. Aradığım kişi hâlâ hafif bir yankı duyuyor, onu sonraya bıraktım.
  • 3.3 V hattı
  • 5 V hattı
  • Şase
  • Tehlike

01 Başlamadan önce

Önceki yazımda bu projenin ne olduğunu ve neden yaptığımı, bu kılavuzda da nasıl yaptığımı anlattım. İlk kontrollerden arabada müzik ve görüşmelere kadar on beş adımdan oluşuyor.

Ölçümler benim donanımıma ve aracıma ait. Başka bir araçta sonuçlar farklı olabilir. Bu yüzden işe, mesaj göndermeden veya yeni bağlantılar yapmadan önce ölçüm ve kayıtla başladım.

Yazılım GitHub'da: github.com/crimeofheart/giulietta-blue-me.

Önce yalnızca dinlemek

Giulietta 940 için yayımlanmış CAN bilgisi bulamadım. Fiat Doblò 263 için fmntf/fiatcan ve Alfa 159 için karolkrupa/alfa-blue-me projelerini başlangıç aldım. Ama bunlar başka araçları anlatıyor ve birçok mesaj kimliğinde birbirinden ayrılıyor. Mesajları kendi arabamın kayıtlarıyla karşılaştırdım. Yazılım tablolarında bu kayıtlar her mesajın yanında duruyor ve gönderim denetimi yalnızca kayıtla desteklenen mesajlara izin veriyor.

İlk kurulumda gönderim iki yerde kapalı: CAN denetleyicisi yalnızca dinleme modunda, uygulamanın gönderebileceği mesaj listesi de boş. Araçtan gelen mesajları okuyup çözebiliyor, ama hiçbir şey gönderemiyor. Gönderimi adım 12'de bir komutla açtım; aynı komutla tekrar kapatılabiliyor.

Çalışan bir modül olmadan protokolü çözmek

Başlangıçta kaydedebileceğim çalışan bir modül yoktu ve araç Blue&Me olmadan yapılandırılmıştı. Bu yüzden arabayı iki kez kaydettim. Önce mevcut hâliyle, sonra Body Computer'a bir Blue&Me modülü beklemesi gerektiğini söyledikten sonra kayıt aldım. blueandme-diff ile karşılaştırınca aracın ne aradığını gördüm (10. adım). Daha sonra bozuk modülün hâlâ gönderdiği mesajlardan başka kimlikler de çıkardım. Bunu yazıda anlattım.

Her aracın PROXI değeri farklı

PROXI değeri benim modülümden değil, uygulamanın yapılacağı araçtan geliyor. Body Computer sorduğunda modüllerin gönderdiği altı bayt bu değeri oluşturuyor. Kendi değerimi yayımladığım koda koymadım; yayımlanan kod değeri bir ayardan okuyor. Kayıttan nasıl okunduğunu 10. adımda, Pi'nin yapılandırmasında nereye konduğunu 12. adımda anlattım.

Adımların yeri: tezgâh araçtan bağımsız çalışmaları, araç ise aracın CAN hattına bağlandığım çalışmaları gösteriyor. Adım 1–6'yı tezgâhta yaptım. Adım 7'de araca bağlanıp yalnızca dinledim. İlk mesajı adım 12'de gönderdim.

Gerekli parçalar

Önce gerekli parçaları, sonra isteğe bağlı olanları sıraladım. Kullanacağın aletler listenin sonunda.

ParçaAdetNotlar
Olmazsa olmaz
Raspberry Pi Zero W, 40 pinli header'ı takılı1Bluetooth ve Wi-Fi dahili, tek çekirdekli; yaklaşık 1 W tüketiyor. Bu kurulum için W'siz Zero uygun değil.
microSD kart, 16 GB veya daha büyük1Raspberry Pi OS Lite, 32 bit için (adım 3). Raspberry Pi'nin Lite imajı için önerdiği en küçük boyut 16 GB. Benimki 64 GB'lik bir SanDisk.
MCP2515 + TJA1050 CAN modülü1Yaygın olarak satılan mavi kart. Kristali 8 veya 16 MHz olabiliyor; üzerindeki yazıyı kontrol etmek gerekiyor. Kullanmak için iki değişiklik yaptım (adım 1–2). SN65HVD230'lu bir kartta bu değişikliklere gerek yok.
Ses çıkışı ve mikrofon girişi olan USB ses kartı1Linux'un USB ses aygıtı olarak tanıdığı her kart iş görür, C-Media olsun olmasın. Ben Ugreen USB-A adaptörü kullandım; içindeki çip C-Media HS-100B: stereo çıkışı, mono mikrofon girişi var. Başka bir kartta iki şeye bakardım: kulaklık fişinin gövdesi gerçekten şase mi, bir de aplay -l çıktısında hangi adla görünüyor (adım 13). Yalnızca müzik dinlenecekse mikrofon girişine ihtiyaç yok.
3.5 mm stereo kablo1Kartın kulaklık çıkışından radyonun ses pinlerine gidiyor (adım 14).
12 V'tan 5 V'a buck dönüştürücü, USB çıkışlı1Ben TECNOIOT'un 6–24 V girişli, 5 V USB çıkışlı modülünü kullandım. Pi yaklaşık 0.3 A'ya kadar akım çekiyor. Asıl mesele, dönüştürücünün marş sırasında da Pi'yi besleyebilmesi. Araca takmadan önce ayarlı güç kaynağıyla denemek gerekiyor (adım 15).
Header pinleri, 2.54 mm, 0.64 mm kare32Sekizli dört şerit. Aracın fişine doğrudan oturuyor.
Delikli pertinaks şeridi, 2 × 16 delik, 5 mm kenar payıyla1Bir delikli pertinaks parçasından kesiliyor. 32 pini taşıyor ve aracın fişine takılan konnektör oluyor (adım 15).
Bağlantı kablosu, makaron, yapıştırıcıAdım 2'deki 5 V değişikliği için ince kablo.
Tavsiye edilir
Elektrolitik kondansatör, 2200 µF, 35 V veya üzeri1Marş tamponu, buck'ın girişine paralel (adım 15).
Diyot, 1N5822 veya 1N40071Marş tamponu, pin 16 ile kondansatör arasında.
PN2222 transistör1Kontakla uyandırma: aracım üç günden uzun park ettiyse anahtar Pi'yi yeniden başlatıyor. Bu yoksa F36 sigortasını çıkarıp takmak gerekiyor.
Diyot, 1N40071Kontakla uyandırma, baz ile emiter arasında.
Direnç, 100 kΩ2Kontakla uyandırma.
Delikli pertinaks, 3 × 7 cm110 × 24 delik, 2.54 mm. Marş tamponunu ve kontakla uyandırma devresini taşır.
Orijinal Blue&Me kutusu1Bozuk modülün kendi kutusu. Fabrika braketine oturuyor, plastiği de Bluetooth'u geçiriyor.
Baskı montaj parçası: çerçeve ve montaj tabanı1PETG ya da ASA. PLA park hâlindeki araçta yumuşuyor.
M3 vidalar ve yükselticiler, kablo bağlarıCAN modülünün altına 4 mm, Pi'nin altına 5 mm ara parça. Buck ile ses kartını kablo bağları tutuyor.
İsteğe bağlı: eller serbest görüşme
3.5 mm kablo1Mikrofon devresinden kartın mikrofon girişine.
Direnç, 2 kΩ1Mikrofon beslemesi.
Direnç, 1 kΩ2Biri beslemedeki 2 kΩ dirence paralel, diğeri gerilim bölücüde.
Direnç, 10 kΩ1Mikrofon gerilim bölücüsü.
Elektrolitik kondansatör, 10 µF, 10 V veya üzeri1Mikrofonun DC geriliminin ses kartına ulaşmasını engeller.
İşi kolaylaştıran ek parçalar
Micro-USB OTG adaptörü1Tezgâh için. Kutunun içinde kart Pi'ye lehimli (adım 15).
Seramik kondansatör, 100 nF1Yalnızca CAN alıcı-vericisinin beslemesinde bir tane yoksa (adım 2).
Aletler
Multimetre, havya, bisturiOlmazsa olmaz. Asıl önemlisi multimetre.
Bir telefon1Olmazsa olmaz. Müziği çalacak olan telefon.
USB powerbank1Gerekli. 15. adıma kadar araçtaki bütün denemelerde Pi'yi bununla besledim.
OBD adaptörü ve Windows tablette MultiEcuScan110. adımdaki PROXI hizalaması için gerekli.
Ayarlı güç kaynağı1Tavsiye edilir. Dönüştürücünün giriş gerilimini değiştirerek hangi gerilimlerde çalıştığını araca takmadan önce kontrol etmek için.
3D yazıcı1İsteğe bağlı. Montaj parçası ve deneme baskıları için.

02 Tezgâhta kurulum adım 1–6

Adım 1 — MCP2515 modülünü tanımak

Herhangi bir kablo bağlamadan önce iki şeyi netleştirdim.

a) Kristal frekansı

Önce CAN kartındaki kristalin yazısına baktım. 8.000 yazıyorsa 8 MHz, 16.000 yazıyorsa 16 MHz oluyor. Yazı zor okunuyorsa iyi ışıkta yakın bir fotoğraf yardımcı oluyor. Kurulumda bu değerin doğru olması gerekiyor. Yanlışsa bağlantılar doğru olsa bile hat daha sonra sessiz görünüyor.

b) Sonlandırma direnci

Hiçbir şey bağlı değilken CAN-H ve CAN-L vidalı klemensleri arasındaki direnci multimetreyle ölçtüm.

  • ~120 Ω → kartta sonlandırma direnci var. Benimkinde vardı, söktüm. Yaygın mavi MCP2515+TJA1050 kartında tam iki klemensin arasında duruyor, yanında 120R yazıyor, üzerinde de 121. Lehimini söküp çıkarmak da olur, bir bacağını kaldırmak da.
  • Onlarca kΩ → sonlandırma direnci yok. Doğru sonuç bu ve açık devre değil: TJA1050'nin kendi diferansiyel giriş direnci pinlerin arasında hep duruyor ve kabaca 20–100 kΩ gösteriyor. Alıcı-verici takılıyken açık devre beklememek gerekiyor; bu ölçüm tek başına sonlandırma direnci olduğu anlamına gelmiyor.
Sonlandırma direnci neden çıkmalı

Aracın B-CAN hattı zaten iki ucundan sonlandırılmış. Üçüncü bir sonlandırma diferansiyel empedansı düşürür ve veri yolunu yalnızca eklenen modül için değil, üzerindeki bütün modüller için durdurabilir. Daha önce iki kullanıcı bu sorunu bildirmişti: Alfa 159'da karolkrupa ve Doblò'da bir fiatcan kullanıcısı. fmntf ise 120 Ω'luk bir jumper eklemişti: çünkü tezgâhta tek başına duran bir ECU ile uğraşıyordu ve veri yolunu sonlandıran başka hiçbir şey yoktu. Sonlandırmayı, aracın mevcut hattına göre değerlendirdim; tek başına bir ECU ile yapılan tezgâh testi farklı.

Kontrol sonuçları

DeğerSonucu
Kristal8 MHzinstall.sh --oscillator 8000000
Sonlandırma direnci (121, 120 Ω)lehimi söküldüCAN-H↔CAN-L sonrasında 45 kΩ okudu — yalnızca alıcı-verici, sonlandırma direnci yok
Devam koşulu

Kristal frekansı belli ve CAN-H↔CAN-L arası 120 Ω'un çok üzerinde okuyor. Onlarca kΩ doğru, gerçek bir açık devre beklenmez.

Adım 2 — 5 V sorununu çözmek

Karttaki tek VCC pini iki çipi birden besliyor. Pi'ye bağlarken çözmem gereken sorun buydu.

TJA1050 alıcı-vericisi bir CAN veri yolunu sürebilmek için 5 V istiyor: 4.75–5.25 V için tasarlanmış ve 3.3 V modu yok. Yani kart 5 V ile beslenince MCP2515 denetleyicisi de 5 V ile çalışıyor, 5 V ile çalışan bir çip de çıkışlarını 5 V'a çıkarıyor. O çıkışlardan biri MISO. MISO da doğrudan Pi'nin GPIO9 pinine gidiyor, o pin ise 5 V'a dayanıklı değil ve kenetleme diyotu da yok.

Değiştirilmemiş — tek hat, 5 VMCP2515VCC = 5.0 VMISO5.0 VGPIO9en çok 3.3SoC'ye zarar verirAyrılmış hatlar — denetleyici 3.3 V'taMCP2515VCC = 3.3 VMISO3.3 VGPIO9uygunTJA1050 hâlâ 5 V'ta
Değişen tek şey MISO üzerindeki gerilim. SPI bağlantıları, alıcı-vericinin 5 V beslemesi ve CAN tarafı olduğu gibi kalıyor.
"Çalışıyor gibi" demek kanıt değil

Bir GPIO'ya fazla gerilim vermek pini hemen ya da gözle görülür biçimde bozmayabilir. Girişin koruma yapıları üzerinden akım sızdırabilir ve pine zamanla zarar verebilir. Bir saat sorunsuz çalışması, bağlantının güvenli olduğunu göstermiyor. Ben değişikliği ilk kez güç vermeden önce yaptım.

Üç seçenek

Seçenek A · önerilen

Hatları ayırmak

Kartın VCC pini ile TJA1050 arasındaki bakır yolu kestim, sonra alıcı-vericiye 5 V'u ayrıca vermek için bir kablo lehimledim.

Bir kesik, bir kablo, ek parça yok.

Seçenek B

MISO'ya seviye dönüştürücü

Kart 5 V'ta kalır, yalnızca MISO hattına, yani Pi'ye doğru süren tek hatta bir 3.3 V/5 V seviye dönüştürücü konur.

Kartı kesmek yok, ama fazladan bir parça ve SPI yolunda üç lehim daha var.

Seçenek C · kesme yok

3.3 V'luk bir kart almak

SN65HVD230 tabanlı bir modül, denetleyicisiyle de alıcı-vericisiyle de doğrudan 3.3 V ile çalışır.

Değiştirilecek hiçbir şey yok. Ucuz. Kart kesmek istemeyenler için doğru seçenek bu.

Asıl önemli olan yalnızca MISO. MOSI, SCK ve CS hatlarını Pi sürüyor, MCP2515 dinliyor. Pi 5 V'luk bir çipe 3.3 V veriyor, çip de bunu sorunsuzca mantıksal yüksek olarak okuyor. Ters yöne giden iki hat MISO ve INT, INT ise açık drenajlı (open-drain) çalışıyor. Seçenek B bu yüzden yalnızca MISO ile yetinebiliyor. Beslemeleri ayırmak ise hepsini bir seferde çözüyor.

Bakır yolu kesmek ne demek?

Yol, devre kartında bağlantıyı sağlayan bakır şerit. Milimetreden daha dar bir şerit olarak kartın üzerinde duruyor ve üstünü yeşil lak (lehim maskesi) kaplıyor. Modüldeki bütün bağlantılar böyle yapılmış.

Kesmek, bakır yolu bıçakla ayırarak elektrik bağlantısını kesmek anlamına geliyor. Yolun üzerinde, alttaki fiberglasa kadar inen küçük bir boşluk kazıdım. Kartın kendisi kesilmiyor, hiçbir şey bükülmüyor ya da sökülmüyor. Bakır yolda yaklaşık bir milimetre genişliğinde boşluk açtım.

Yol koptuktan sonra iki ucu elektriksel olarak ayrı. Sonra o uçlardan birine bir kablo lehimledim ve onu başka bir yerden besledim. Böylece beslemeyi ayırıp alıcı-verici tarafına ayrı gerilim verdim.

Önce — kesintisiz tek yolVCC piniTJA1050bakır yol, yeşil lakın altındaSonra — yaklaşık 1 mm bakır kazınmışboşlukhâlâ MCP2515'i besler — 3.3 V girişiyalıtıldı — 5 V kablosu buraya lehimlenir
Aynı yolun büyütülmüş iki görünümü. Kopukluk küçük, bir bistüri çiziği kadar. Ama gerçek ve kalıcı bir elektriksel ayrım, multimetre de onu açık devre olarak gösteriyor.

Kesilecek yolu multimetreyle bulmak

Bakır yolu, bir kart çizimine bakarak değil, multimetreyle buldum. Böylece kartın yerleşimi farklı olsa da hangi bağlantıyı keseceğimden emin olabildim. Multimetreyi süreklilik ölçümüne alıp şu sırayı izledim:

  1. Bir probu kartın VCC header pinine koyup orada tuttum.
  2. Diğer probu, ötene kadar TJA1050'nin (CAN vidalı klemenslerine en yakın, 8 bacaklı küçük çip) her bacağına değdirdim. Öttüğü bacak onun beslemesi, TJA1050'nin veri sayfasında pin 3.
  3. Aynısını MCP2515'te (büyük olan çip) yapıp onun besleme pinini de buldum. İkisini de not ettim.
  4. Keseceğim bakır yol, VCC pini ile TJA1050'nin besleme pini arasındaydı. Bu yolu gözle takip ettim.

Artık hangi iki pinin birbirinden ayrılması gerektiğini biliyordum. Kestikten sonra da gerçekten ayrıldıklarını ölçebildim.

Kesik denetleyici tarafında değil, alıcı-verici tarafında

Beslemeyi iki taraftan da ayırmak mümkün. Ama kartın bağlantı pini MCP2515'e bağlı kalırsa, oraya takılan kablo 3.3 V taşır. Daha sonra yanlış besleme bağlama ihtimali azalır; yayımlanmış anlatımlarda da bu düzen kullanılıyor.

Kesik, dekuplaj kondansatörünün doğru tarafında

TJA1050'nin beslemesinde küçük bir kondansatör bulunabilir. Alıcı-vericiyle birlikte, kesiğin 5 V tarafında kalmalı. Kartta orada kondansatör yoksa, iş bitince alıcı-vericinin besleme pini ile şase arasına 100 nF'lık bir tane lehimlemek gerekiyor.

Gerekenler

  • İnce uçlu havya ve ince lehim teli
  • Bisturi ya da maket bıçağı kesik için
  • Süreklilik sesi olan multimetre en önemlisi
  • İnce yalıtımlı kablo 28–30 AWG, ~60 mm
  • 100 nF seramik kondansatör yalnızca kartta yoksa
  • Büyüteç ya da telefon kamerası yolu bulmak ve kesiği kontrol etmek için
  1. Önce kartın fotoğrafı

    Bir şey yapmadan önce, iyi ışıkta yakın bir fotoğraf çektim. Keserken hangi tarafın nereye gittiği karışırsa bu fotoğrafa bakabilirim.

  2. Bakırı kazıyarak kesmek

    Yolun üzerindeki yeşil lakı kazıdım, sonra altındaki bakırı kestim. Bıçağı yol boyunca değil, yola dik tutarak iki üç hafif geçiş yetti. Kartın kendisine kadar inen, yaklaşık bir milimetre genişliğinde bir boşluk açtım.

    Kartı oyan ya da komşu yola kayan tek bir sert geçiş yerine birkaç hafif geçiş çok daha iyi.

  3. Kesiği multimetreyle kontrol etmek

    VCC header pini ile TJA1050 besleme pini arası artık açık devre olmalı, ötmemeli. VCC header pini ile MCP2515 besleme pini arası ise hâlâ ötmeli. Biri tersse durup karta yeniden bakmak gerekiyor.

  4. 5 V kablosunu lehimlemek

    Boşluğun TJA1050 tarafında açığa çıkan bakırı lehimle kapladım ve kabloyu oraya lehimledim. Kabloyu kısa tuttum ve sabitledim (sıcak silikon ya da bant olur): araçta gevşeyen bir kablo pedi de yerinden söker.

  5. Güç vermeden önce kısa devre kontrolü

    İki besleme pini artık birbirinden bağımsız olmalı ve hiçbiri şaseye kısa devre olmamalı. Pi'ye ancak bundan emin olduktan sonra bir şey bağladım.

12315 V kablosunun lehimlendiği yer:TJA1050 beslemesi (kırmızı daire)2TJA1050 alıcı-verici,işareti NXP TJA1050/C3120R sonlandırma, işareti121 — adım 1'de söküldüfotoğraf: terilenard/mcp2515-tja1050-wiring
Aynı değişiklik gerçek bir kartta böyle görünüyor. Kırmızı daireyi özgün yazar çizmiş, 5 V kablosunun geldiği yeri, yani kesiğin alıcı-verici tarafını gösteriyor. Çipin altında 120R yazıyor: sonlandırma direnci o. Üzerinde 121 yazan parçayı adım 1'de sökmüştüm.
Devam koşulu

MISO, Pi'ye 3.3 V'tan fazlasını veremiyor. Modül beslenirken ve Pi bağlı değilken MCP2515'in besleme pininde 3.3 V, TJA1050'ninkinde 5 V ölçülüyor.

Adım 3 — SD kartı yazmak

Bilgisayarımda Raspberry Pi Imager'ı kullandım.

  • İşletim sistemi: Raspberry Pi OS Lite (32-bit). Masaüstü sürümü değil. 32 bit şart, çünkü Zero W bir ARMv6.
  • "Edit Settings" bölümünde şunları girdim: bilgisayar adı blueandme; SSH açık (anahtar ya da parola); kullanıcı adı ve parola; Wi-Fi SSID'si, parolası ve ülke.

Pi'yi başka hiçbir şey bağlı değilken USB'den besleyerek açtım, iki dakika kadar bekledim, sonra ssh <user>@blueandme.local ile bağlandım.

Devam koşulu

Pi'ye SSH ile bağlanabiliyorum.

Adım 4 — Kurulum

# on your dev machine
git clone https://github.com/crimeofheart/giulietta-blue-me
cd giulietta-blue-me
rsync -a --exclude .git --exclude .venv ./ <user>@blueandme.local:~/giulietta-blue-me/

# on the Pi
cd ~/giulietta-blue-me
sudo ./install.sh --dry-run --oscillator 8000000     # read what it will do
sudo ./install.sh --oscillator 8000000               # 8 MHz, confirmed in step 1
sudo reboot

İlk kurulumda en uzun süren iş, Zero W'nin apt ile paketleri yüklemesiydi. İşletim sistemi sürümüne uygun hazır paket packages/ içinde yoksa, geniş bant görüşmeler için bluez-alsa da derleniyor; bu yaklaşık on dakika daha sürüyor (adım 13). Kurulum, ekransız kullanımda gerekmeyen bileşenleri de kaldırarak açılışı kısaltıyor: initramfs, ekran ve kamera sürücüleri, modem, disk ve klavye servisleri devre dışı; CAN ve Bluetooth sürücüleri ise erken yükleniyor (süreler adım 15'te). Paketleri önceden kurulmuş bir Pi'de yeniden çalıştırdığımda yaklaşık iki dakika sürdü. Bu durumda apt atlanıyor, yalnızca uygulama yeniden kuruluyor.

Devam koşulu

install.sh "configuration is valid" diyerek bitiyor.

Adım 5 — MCP2515'i Pi'ye bağlamak

Önce Pi'yi kapattım (sudo poweroff, LED durana kadar bekledim).

Saymaya başlamadan önce pin 1

Aşağıdaki her numara pinin fiziksel yeri ve ancak header'ın hangi ucunun pin 1 olduğu bilindiğinde bir anlam taşıyor. Bulmanın üç yolu var, en güvenilirinden başlayarak:

  1. Kare ped. Pin 1 karttaki tek kare ped, diğer otuz dokuzu yuvarlak. Header zaten lehimliyse kart çevrilip lehimlere alttan bakılır.
  2. J8 yazılı çerçeve. Pin 1, çerçevenin içinde microSD kart yuvasına en yakın köşede duruyor.
  3. Kart yuvasının kendisi. Pin 1 header'ın o ucunda duruyor. RUN pedlerinin ve ikinci montaj deliğinin olduğu uzak uçta hiçbir zaman olmuyor.

Oradan itibaren numaralar header boyunca, kart yuvasından uzaklaşarak çifter çifter ilerliyor: köşede 1 ve 2, sonra 3 ve 4, sonra 5 ve 6. Tek sayılar kart yuvasına yakın sırada, çift sayılar kartın dış kenarına yakın sırada kalıyor.

kartın dış uzun kenarıJ839GND45V22INT24CS13V319MOSI21MISO23SCK◀ microSD kart yuvası bu uçta — pin 1 buradauzak uç — RUN adaları, 2. montaj deliği ▶Fiziksel pin numaraları, her adanın içinde. Tek numaralı pinler kart yuvasına yakın sıradadır.
Kart gerçekte nasıl duruyorsa öyle çizildi: dış kenara yakın sıra çift pinleri, microSD yuvasına yakın sıra tek pinleri taşıyor ve pin 1 kart yuvası ucunda duruyor. Numaralar GPIO numarasını değil, fiziksel pin numarasını gösteriyor. Sekiz pin üç yere dağılıyor: besleme pin 1 köşesinde, SPI ve kesme yolun üçte ikisinde, modülün şasesi de en uçta, pin 39'da (pin 6 aracın şasesini taşıyor, adım 7). Aşağıdaki fotoğrafta aynı header ve aynı sekiz ped görünüyor.
PIN 1tek kare ped,microSD ucunda14391921222324THE EIGHT PINS YOU USE — PHYSICAL NUMBERS13V3 → modül VCC45V → TJA1050 kablosu39GND19MOSI21MISO22INT / GPIO2523SCK24CS / CE0Tek pinler microSD yuvasına yakın sıra boyunca gider. Çift pinler kartın dış kenarına yakın sıra boyunca gider.Numaralar kart yuvasından uzaklaşarak çiftler hâlinde ilerler: köşede 1/2, sonra 3/4, 5/6 ve böylece 39/40'a kadar.fotoğraf: Gareth Halfacree, CC BY-SA 2.0, Wikimedia Commons üzerinden — işaretlenmiş
Aynı sekiz pin gerçek bir Pi Zero W üzerinde. Bu kartta lehimli header yerine boş pedler var ve pin 1'i görünür kılan da bu: bütün karttaki tek kare ped o ve microSD kart yuvasına en yakın uçta, J8 yazılı çerçevenin içinde duruyor. Diğer bütün pedler yuvarlak. Header lehimliyse kartı çevirmek yeter, kare ped alttan görünüyor.
ModülPi sinyaliFiziksel pinNotlar
VCC (MCP2515, kesikten sonra)3.3 V1Yalnızca denetleyiciyi besler
TJA1050 beslemesi — eklediğim kablo5 V4Pin 2 de aynıdır
GNDGND39Tek şase yeter, hangi şase pini olursa olur. Bu projede pin 6 aracın şasesini taşıyor (adım 7)
CSGPIO8 / CE024Overlay'deki spi0-0 ile eşleşir
MOSIGPIO1019Pi sürer, modül dinler
MISOGPIO921Beslemeyi ayırmayı gerektiren sinyal hattı
SCKGPIO1123Saat
INTGPIO2522Overlay'deki interrupt=25 ile eşleşmeli
123451CAN-H / CAN-L vidalı klemensleri2eklenen 5 V kablosu, sarı3kristal — 8.000 ya da 16.0004MCP2515 denetleyicisi58 pinli header, Pi'ye giden şeritfotoğraf: terilenard/mcp2515-tja1050-wiring
Bitmiş hâli. Sarı kablo, ayırdığım besleme bağlantısı: alıcı-vericinin besleme noktasından Pi'nin 5 V pinlerinden birine gidiyor. Aşağıdaki header sırası ise 3.3 V'u, şaseyi ve dört SPI hattını taşıyor.
Kolayca karışabiliyor

MOSI ile MISO'yu ters bağlamak. Parçaları bozmuyor ama CAN arayüzü başlayamıyor. Belirtileri, yanlış kristal frekansı girildiğindekiyle aynı. Sonradan nedenini aramaktansa bağlantı sırasında iki kez kontrol etmek daha kolay.

Gücü verip kontrol ettim:

blueandme-status

Görülmesi gerekenler: interface present ok, link state UP, bitrate 50000, bus errors 0, spidev present ok. can0 yoksa:

dmesg | grep -i -E "mcp251|spi"      # driver probe failures show here
ls /dev/spidev*                       # SPI enabled?
grep -E "spi|mcp2515" /boot/firmware/config.txt

Görmek istediğim satır mcp251x spi0.0: MCP2515 successfully initialized. Cannot initialize MCP2515 ise kablolamaya ya da yanlış bir osilatör değerine işaret ediyor.

Devam koşulu

blueandme-status, can0'ı 50000 hızında ve sıfır hatayla açık gösteriyor.

Adım 6 — Yazılımın çalıştığını araç olmadan kanıtlamak

Araç işin içine girmeden önce her şey sanal bir CAN arayüzünde denenebiliyor.

sudo modprobe vcan
sudo ip link add dev vcan0 type vcan && sudo ip link set up vcan0
tests/fixtures/fetch.sh               # once: the Doblò recordings some tests read
python3 -m pytest                     # the vcan0 tests now run too
blueandme-protocol-map                # the profile tables, generated from code
Devam koşulu

Bütün testler başarılı olmalı. Protokol haritasında da Giulietta profilinin mesajları görünmeli.

03 Araçta adım 7–10

Besleme, her seferinde

Bütün kayıt işlerinde Pi'yi bir USB powerbank ile besledim. Aracın 12 V'u Pi'ye bağlanmıyor. Pi'nin USB'si araca bağlanmıyor. Tableti de kendi bataryasıyla kullandım: Pi'ye bağlıyken araçtan şarj olan bir tablet, powerbank kullanarak ayırdığım şase bağlantısını tekrar oluşturur.

Adım 7 — İlk temas: yalnızca dinleme

Pi ile tablet için iki ayrı konnektör kullandım. İkisinin görevi farklı.

Açık ön panelin yanında Pi ve bağlı kartlar.
Araçtaki ilk denemelerden birinde geçici kurulum. Burada görünen ses kartı ve breadboard bu adıma ait değil; kılavuzda daha sonra geliyor.
PI — veri yolunu kaydederBlue&Mekonnektörüboşta —modül çıkarılmışCAN-H · pin 30CAN-L · pin 14GND · pin 15 — modülü atlar, doğrudan Pi'nin bir şase pinine giderMCP2515 modülüH L2 yolluklemensSPIPi Zero Wyalnızca dinlemeUSBpowerbankTABLET — ECU'larla konuşur (yalnızca adım 10)OBD2 soketitorpidonun altındapin 6 / 14USB OBD adaptörüWindows tabletAlfaOBD / MultiEcuScanİki yol birbirine hiç değmiyor. Adım 10'da iki konnektör de aynı anda kullanılıyor, Pi bu yüzden OBD2'yi kullanmıyor.
Pi'yi boşta kalan Blue&Me konnektörüne, tableti ise OBD2 soketine bağladım. Böylece PROXI hizalaması yapılırken Pi kayıt almaya devam etti ve H kaydını oluşturabildim.

Aranan şey

Araçta kalan fiş şöyle: mavi gövde, siyah kilit mandalı, arkadan giren kablo demeti ve birleşme yüzeyinde iki sıra küçük kare yuva. Özgün modül söküldüğü için aracımda boşta sallanıyor. Bağlantıyı bu fişten yaptım; böylece tesisatı kesmem gerekmedi.

Fotoğraflar iki konnektörü ve gövdelerindeki numaraları tanıtıyor. Hangi pinin ne taşıdığını GÖSTERMİYOR; o bilgi aşağıdaki haritada. İki fotoğrafta konnektörler aynı yönde durmuyor; bu yüzden konuma değil, gövdedeki numaralara bakmak gerekiyor.

Orijinal modül kutusundaki mavi erkek konnektör.
Modül konnektörünün birleşme yüzeyinden görünümü.
Köşe numaraları ve kilit yapısı görünen mavi dişi konnektör.
Araç fişinin birleşme yüzeyinden görünümü; köşelerdeki orijinal numaralar görünüyor.
Araç fişi, 32 yollu — pin 16 sol üstte, pin 32 sol altta, pin n+16 pin n'nin tam altında16+12V SÜREKLİ515GND314CAN-L31312111098MIC TIP1765AUD L24GND32132KONTAK43130CAN-H3292827262524MIC GND12322AUD R221AUD GND2201918171 mik.2 ses3 CAN4 kontak5 buck'a 12 Vşasebağlı değil
AdımPinEtiketBağlanacağı yer
18MIC TIP (mikrofon +)Mikrofon devresinin A bağlantısı: Pi pin 2'den (5 V) gelen 2 kΩ ‖ 1 kΩ (yaklaşık 670 Ω, aracımda böyle bıraktım) ve 10 µF'ın + bacağı. Sinyal B bağlantısından mikrofon fişinin ucuna gider
124MIC GND (mikrofon −)G bağlantısı, şase bağlantısı
25AUD LSes fişinin ucu
222AUD RSes fişinin halkası (orta)
221AUD GNDSes fişinin gövdesi. Fiş, ses kartının kulaklık çıkışına takılır
330CAN-HMCP2515 vidalı klemensi H
314CAN-LMCP2515 vidalı klemensi L
315GNDG bağlantısı; Pi'nin şasesini de (pin 6) taşır. Adım 5 buraya ikinci bir kablo ekler: kartın K1 deliğine (marş tamponu, sonra buck IN−)
432IGNITIONKontakla uyandırma: PN2222 bazına giden 100 kΩ'u. MAR'da 12 V; asla bir Pi pinine değil
516+12V PERMKartın I10 deliği: diyot ve 2200 µF (marş tamponu), sonra buck IN+. Bağlarken F36 çıkarılmış olmalı
–4GNDBağlantı yok, yedek pin. Torpido gözündeki USB girişinin şasesi; araç şasesine bağlı olduğunu doğrulamadım. Bu yüzden bütün dönüş bağlantılarında pin 15'i kullandım.
Pin 16 sol üstte, pin 32 sol altta. Sağ uçtaki pin 1 (üst sıra) ve 17 (alt sıra), fişin gövdesindeki “1” ve “17” işaretleriyle eşleşiyor. Tablodaki sırayı izledim: önce mikrofon, sonra ses, CAN, kontak ve en son dönüştürücünün 12 V beslemesi. Kesik çizgiyle gösterilen yuvalara kablo bağlanmıyor.

Pin haritası

Bunu iki bağımsız kaynak doğruluyor: Almanca bir Alfa 159/Brera başlığı M162 modülünün konnektörünü belgeliyor, İtalyanca bir ClubAlfa başlığı da özellikle bir Giulietta'ya Blue&Me takmayı anlatıyor. İkisi hem birbiriyle hem de bu projenin zaten kullandığı numaralarla uyuşuyor.

PinlerİşlevGerektiği yer
30 / 14CAN-H / CAN-L — "CAN alta" / "CAN bassa"Adım 7, bağlantı
15ŞaseAdım 7, bağlantı
16 / 32Sürekli 12 V / kontak 12 V'uYalnızca adım 15. O zamana kadar bunlara dokunulmuyor.
5 / 22 / 21Ses sol / sağ / şaseAdım 14
7 / 23 / 25Audio+ / Audio− / MUTE, radyoyaBelki adım 14
8 / 24Mikrofon, tavan döşemesinden. Yükselteçli; kendi 5–8 V beslemesine ihtiyaç duyarAdım 14, görüşmeler
3 / 19 / 20 / 4 / 31USB D+ / D− / VCC / şase / ekran, aracın USB girişineKullanılmıyor. VCC'yi modül besliyordu; bu yüzden modül yokken girişe büyük olasılıkla güç gelmiyor (doğrulanmadı)

Fotoğraf açılı çekilmiş olsa da dizilime neden güveniyorum. Gövdenin TE/AMP 968265-1 olduğu belirtiliyor, TE de bunu 32 pozisyon, iki sıra, 2.54 mm aralık olarak listeliyor. Fotoğraftaki birleşme yüzünde iki sıra görünüyor. İşlevler de on altışarlık iki sıradan bekleneceği gibi tam tamına eşleşiyor: 3/19 USB diferansiyel çifti, 4/20 onun besleme çifti, 8/24 mikrofon çifti, 14/30 CAN çifti, 16/32 iki 12 V beslemesi. Her çift tek bir sütuna düşüyor. Birbirinden bağımsız üç kanıt aynı şeyi söylüyor, bu çizim de o yüzden bir tahmin değil.

Prob sokmak yerine temiz bir bağlantı için karşı parçalar şöyle belirtiliyor: gövde 929053-2, kontaklar 144969-1.

Önce 12 V pinlerini bulmak

Sütun 16, 12 V beslemelerinin ikisini de taşıyor ve aranan şasenin, yani sütun 15'in hemen yanında duruyor. Bir yuva kayınca çalışan bir bağlantı yerine aküye doğrudan bağlı bir hat kısa devre oluyor.

Önce 16 ve 32'yi buldum; ardından 30, 14 ve 15'i sayarak belirledim. Anahtar MAR konumundayken araç şasesine göre ölçtüm. İlk iki pin akü gerilimindeydi; konnektördeki diğer pinlerin bu gerilimde olmaması gerekiyor.

Kabloların bağlantı yerleri

Araç tarafıBlue&Me piniGittiği yer
CAN-H30MCP2515 modülündeki H vidalı klemensi
CAN-L14MCP2515 modülündeki L vidalı klemensi
GND15Vidalı klemense değil: o 2 yollu, yalnızca H ve L. Doğrudan Pi header'ındaki boş bir şase pinine gidiyor: bu projede 6 (ya da 9, 14, 20, 25, 30, 34, 39, hepsi aynı hat)

Şase bağlantısı gerekli. Powerbank ile beslenen Pi'nin şasesi araçtan bağımsız. CAN diferansiyel çalışsa da alıcı-vericinin giriş gerilimleri aracın şasesine göre belirli bir aralıkta kalmalı. Bu yüzden Pi ile aracın şasesini birleştirdim. Bu bağlantı olmadan mesajlar hatalı okunabilir veya hiç okunmayabilir.

Boştaki herhangi bir şase pini olur: hepsi aynı hat. Bu projede aracın şasesi pin 6'da, modülün kendi şasesi pin 39'da.

Pin numaralarını kaynaklardan aldım, kendi aracımda doğruladım

30 / 14 / 15, fmntf'nin Doblò 263 yazısından geliyor. Aracımda doğru çıktılar: 2026-09-13'ten beri bütün kayıtları oradan aldım, veri yolu hatası sıfır ve konnektörden teşhis (18DA…) dahil bütün B-CAN geçiyor. OBD soketinden ise yalnızca gövde trafiği geçiyor, teşhis hiç yok. O yüzden iki ayrı noktadan alınmış kayıtları asla birbiriyle karşılaştırmıyorum.

Yanılmanın bedeli düşük, hata da sessiz: candump hiçbir şey göstermez. Bağlantı yalnızca dinliyor, CAN denetleyicisi gönderemiyor, CAN-H ile CAN-L'yi ters bağlamak da zararsız. Zararsız olmayan şey, 12 V beslemeleri olan 16 ve 32 numaralı pinlere dokunmak. Önce onları bulmak ve onlardan uzak durmak gerekiyor.

Araç uyurken multimetreyle bakınca bir CAN çifti iki hat arasında kabaca 60 Ω okur (paralel iki 120 Ω sonlandırma), her hat da şaseye göre açık devre okur. Bu görülürse işe yarar bir doğrulama oluyor. Ama B-CAN düşük hızlı bir veri yolu ve başka türlü sonlandırılmış olabilir, yani 60 Ω okunmaması yanlış pinlerde olunduğunu kanıtlamaz.

Sonra dinlemek

candump -e can0,#FFFFFFFF     # errors and data, everything

Anahtarı MAR'a çevirdim. Çerçeveler görünmeli.

Her kayıt için aynı bağlantı noktası

Adım 10, H kaydını E kaydıyla karşılaştırıyor ve veri yolunun farklı noktalarından alınmış iki kayıt karşılaştırılamaz: görülen farkın, değişen yapılandırmadan mı yoksa bağlantı noktasından mı kaynaklandığı anlaşılamaz.

OBD2 soketi ve Pi'nin onu neden kullanmadığı

OBD2 / J1962, araçtaki sokete bakarken1B-CAN-H234GND5GND6CAN-H789B-CAN-L1011121314CAN-L1516+12V6 / 14 — tabletin adaptörünün AlfaOBD için kullandığı yüksek hızlı CAN1 / 9 — gövde B-CAN, H / L. Aracımda ölçtüm (kayıt M); yalnızca gövde trafiği16 — sürekli 12 V. Pi bağlıyken buraya prob asla değmemeliSokete bakarken pin 1 sol üsttedir; üst sıra 1–8, alt sıra 9–16
Tabletin adaptörü 6 ve 14 numaralı pinleri kullanıyor. Soket tek ve adım 10'da Pi kayıt alırken ECU yazılımına lazım. Pi bu yüzden Blue&Me konnektörüne bağlanıyor.

Gövde B-CAN'i OBD2'nin 1 (CAN-H) ve 9 (CAN-L) numaralı pinlerinde, şase de pin 4 ya da 5'te. Aracımda 2026-09-21'de ölçtüm: saniyede 122 çerçeve ve tanıdık ID'ler (M kaydı), pin dizilimini de orada doğruladım. Bu kılavuzun daha eski bir sürümünde pin 3 / 11 diye tahmin yürütmüştüm, yanlıştı. Gövde trafiği için geçerli bir bağlantı noktası, ama teşhisi duyamıyor. N kaydında bir PROXI hizalaması, bir hata kodu okuma ve bir hata kodu silme boyunca tek bir 18DA… çerçevesi bile yok. Yani her hizalama işinde Pi'nin Blue&Me konnektöründe olması gerekiyor, tabletin adaptörü soketi paylaşacaksa da bir OBD2 Y çoklayıcı gerekiyor. Buradan aldığım kayıtlar yalnızca M ve N. Onları konnektörden aldığım kayıtlarla karşılaştırmıyorum.

Hiçbir şey görünmüyorsa

  1. Araç uyanık mı? Anahtar MAR'da olmalı ya da bir kapı açılmalı.
  2. CAN-H ile CAN-L yer değiştirilir. Denemenin zararı yok.
  3. Şase kablosu bağlı mı? O olmadan veri yolundan hiçbir şey okunmuyor.
  4. ip -details -statistics link show can0: bus-error sayacı artıyorsa bit hızı ya da osilatör yanlış. Sayaç sıfırda kalıyor ve çerçeve de gelmiyorsa elektriksel bağlantı yok demektir.
  5. Kristalin üzerindeki yazı, install.sh'e verilen değerle yeniden karşılaştırılır.
Devam koşulu

Anahtar MAR konumundayken candump akıp giden çerçeveler gösteriyor.

Adım 8 — Kayıt A: 11 bit mi, 29 bit mi?

Kaydı anahtar çıkarılmışken başlattım, sonra MAR'a çevirip 60 saniye bekledim.

Anahtarı çevirmeden önce "recording can0 ->" yazısını beklemek

Anahtarı çevirmeden önce kayıt aracının kayda başladığını bildirmesini bekledim. Zero W'de başlaması yaklaşık dört saniye sürüyor. PROXI sorusu ise ağ uyandıktan sonraki ilk birkaç saniyede geliyor. Enter'a basar basmaz anahtarı çevirmek, A kaydının yakalamak için alındığı mesajı kaçırabiliyor. Aşağıdaki kayıtlar için de bu zamanlama önemli oluyor.

mkdir -p ~/captures
TAP="Blue&Me connector 30/14/15"    # the same tap point for every capture

blueandme-capture --scenario A --out ~/captures/A-ignition-on.log \
                  --tap-point "$TAP" --duration 90

Çıktının son satırlarına baktım:

ID widths seen: {'29-bit': 4127}   <- the answer

Tanımlayıcı genişliği kontrolü. Beklenen değer 29 bit. alfa-blue-me'nin yazarı Giulietta için bu değeri bildirmişti; kendi aracımda da doğruladım. Kayıt 11 bit gösteriyorsa bu kılavuzdaki veri yolu ve mesajlar o araç için geçerli değil. Devam etmeden önce farkın anlaşılması gerekiyor.

blueandme-decode ~/captures/A-ignition-on.log --profile doblo263 --summary

Doblò profilini, mesajların yapısını anlamak için örnek aldım. Bazı ID'lerin aynı çıkmasını, çoğunun ise farklı olmasını bekliyordum. İlk baktığım şey topic<<16|node yapısıydı: ID'lerin alt kısmı az sayıda 0x40xx değerinde toplanıyor mu?

Devam koşulu

Tanımlayıcı genişliği ve düğüm listesi belli.

Benim aracımda (2026-09-13): 29 bit.

A kaydı: 4157 çerçevenin 4157'si 29 bit, veri yolu hatası sıfır. ID'ler Doblò'daki gibi topic<<16 | node. Düğümler: 4000 Body Computer, 4003 gösterge paneli, 4005 radyo ve 4001 4002 4006 400A 4018 401A. Blue&Me ise 4021.

Adım 9 — Kalan kayıtlar

Her senaryo için ayrı kayıt aldım. Acele etmedim; sonraki karşılaştırmaların güvenilir olması bu kayıtların düzgün alınmasına bağlıydı.

# B — key MAR -> OFF, start recording first
blueandme-capture --scenario B --out ~/captures/B-ignition-off.log \
   --tap-point "$TAP" --duration 90

# E — baseline: key in MAR, engine off, touch nothing at all
blueandme-capture --scenario E --out ~/captures/E-baseline.log \
   --tap-point "$TAP" --duration 180

# C — one button at a time, 3 presses each, 2 seconds between
blueandme-capture --scenario C --out ~/captures/C-buttons.log \
   --tap-point "$TAP" --duration 180 \
   --label "vol+ x3, vol- x3, next x3, prev x3, src x3, mute x3, menu x3"

# F — radio: change source, volume up/down, mute
blueandme-capture --scenario F --out ~/captures/F-radio.log \
   --tap-point "$TAP" --duration 120 \
   --label "FM, volume, mute, source cycling"

Sonra tuş çerçevesini aradım:

blueandme-diff ~/captures/E-baseline.log ~/captures/C-buttons.log --by bits

Verisi basışlar arasında tamamen sıfıra dönen ve değişen bitleri temiz bir bit maskesi oluşturan bir ID aradım. İki referans platformun ortak maskeleriyle karşılaştırdım: 0x8000 ses+, 0x4000 ses−, 0x2000 sessiz, 0x0400 kaynak, 0x0080 menü, 0x0040 windows.

Devam koşulu

Diskte dört kayıt ve bir tuş çerçevesi adayı var.

Benim aracımda (2026-09-13).

A, B, E, C ve F kayıtları diskte. Direksiyon çerçevesi Body Computer'dan gelen 06354000: Doblò'nun ID'sinin aynısı, maskeleri de aynı, üstüne sonraki 1000 ve önceki 0800 var. 2 Hz ile yineleniyor, her değişiklikte de fazladan bir çerçeve geliyor. C kaydında yalnızca kısa basışlar var.

Adım 10 — Kayıt H: PROXI'yi Blue&Me ile yeniden hizalamak

Bu, kilometre sayacını bilerek yanıp söndürür

Geri alınabilir: Blue&Me olmadan yeniden hizalayınca yanıp sönme duruyor.

OBD2 adaptörü ve ECU yazılımıyla PROXI hizalamasını, Body Computer'ın yapılandırmasında Blue&Me mevcut olacak şekilde çalıştırdım. Modül fiziksel olarak hâlâ yoktu, yani Body Computer hiç cevap vermeyen bir düğümü aradı.

Pi, Blue&Me konnektörüne bağlı olduğu için OBD2 soketi tablete kalıyor ve ikisi aynı anda bağlı durabiliyor. Önce kaydı başlattım, hizalamayı kayıt sürerken çalıştırdım.

blueandme-capture --scenario H --out ~/captures/H-proxi-with-bm.log \
   --tap-point "$TAP" --duration 180
blueandme-diff ~/captures/E-baseline.log ~/captures/H-proxi-with-bm.log

$TAP E ile H arasında farklıysa karşılaştırmanın anlamı kalmaz. Güvenmeden önce iki .meta.json dosyasının aynı şeyi söylediğine baktım.

H − E farkı, Body Computer'ın Blue&Me düğümünden beklediği mesajları gösterdi: PROXI sorgusu, tekrarları ve eksik düğüme yöneltilen durum sorguları. Bu karşılaştırmayı çalışan özgün modülün kaydı yerine kullandım; bozuk modülümden çalışan bir örnek alamıyordum.

ECU yazılımı açıkken şunlara da baktım:

  • Radyoda ayrıca Blue&Me / medya kaynağı ayarı var mı? Varsa, yalnızca CAN mesajlarını göndermek yeterli olmayabilir.
  • Blue&Me düğümünün sakladığı PROXI değeri okunabiliyor mu? Düğümler ortak bir değer kullanmıyorsa buna ihtiyacım olacaktı.
Devam koşulu

H − E karşılaştırmasında fark bulunmalı. ECU yazılımının radyo için gösterdiği bilgiler de kontrol edilmeli.

Benim aracımda (2026-09-21): PROXI çözüldü.

Ağ uyandıktan yaklaşık bir saniye sonra Body Computer 1E114000# gönderiyor. 400A 4003 401A düğümleri milisaniyeler içinde aynı altı baytlık değerle cevap veriyor: demek ki değer ortak. Sessiz kalan düğüme üç kez daha soruluyor, uyuşmazlık da kilometre sayacını yanıp söndürüyor.

Aracımdaki düğümlerin cevap verdiği altı baytı not ettim. Kayıtta bunlar 1E11400A, 1E114003 ve 1E11401A çerçeveleri, 1E114000#'in hemen ardından geliyorlar. Bu altı bayt aracımın PROXI değeri ve adım 12'de Pi'nin yapılandırmasına yazılıyor.

Yanıp sönmeyi Body Computer'ın kendisinde düzelttim. PROXI kaydı 2023'te 6F 04 00 05 grubunun 02, yani "telematik mevcut" olması gerekiyor. Bunu experiments/node61/write_bc_record.py yazdı, bir geri alma dosyası da sakladı. Bu betik aracın yapılandırmasını değiştiriyor: kullanmadan önce depodaki experiments/README.md dosyası okunmalı, değişiklikten önce mevcut kayıt okunup yedeklenmeli. Hizalama sırasında Pi, teşhise de telematik ünite olarak, 61 adresinden cevap verdi, tıpkı gösterge panelinin 60 adresinden yaptığı gibi. O günden beri aracım bir Blue&Me düğümü bekliyor, yani Pi yerinde olmadığında yanıp sönme geri geliyor. Radyonun kendine ait bir ayara ihtiyacı yok (adım 12).

04 Profil ve ilk gönderim adım 11–12

Adım 11 — Profili kayıtlarla karşılaştırmak tezgâh

Pi'nin beklediği ve gönderdiği çerçeveler blueandme/protocol/profiles/giulietta940.py içinde, her biri benim aracımda görüldüğü kayıtla birlikte bulunuyor: 29 bit genişlik, direksiyon çerçevesi ve maskeleri, Blue&Me düğümünün araçtan aldığı ve araca gönderdiği mesajlar. Alınanlar: Body Computer'ın durum sorgusu ile PROXI sorusu ve radyonun medya isteği. Gönderilenler: durum, PROXI cevabı, watchdog, parça süresi, ses kanalı ve parça metni.

Gönderime izin vermeden önce profili kayıtlarımla karşılaştırdım. Aşağıdaki komutlar profili gösteriyor ve kayıtları çözüyor. Bu karşılaştırmanın uygulama yapılacak araç için de yapılması gerekiyor:

blueandme-protocol-map --profile giulietta940
blueandme-decode ~/captures/A-ignition-on.log --summary
blueandme-decode ~/captures/C-buttons.log --summary

Kayıtlarda durum sorgusu 0E094000, PROXI sorusu 1E114000 ve direksiyon mesajı 06354000 bulunması gerekiyor. Direksiyon bitlerinin de C kaydında basılan tuşlarla eşleşmesi gerekiyor. Bunlardan biri sağlanmıyorsa araç benimkinden farklı davranıyor. Bu noktada gönderim kapalı kalıyor ve ilerlenmiyor.

Devam koşulu

Kayıtlarda profildeki çerçeveler var ve blueandme-giulietta --check geçiyor.

Yanıt sürelerini ölçtüm. Aracımın trafiğini sanal bir veri yolunda uygulamaya yeniden oynattığımda (experiments/node4021/app_replay.sh): PROXI 3.3 ms'de, radyonun isteği 3.1 ms'de cevaplandı (radyonun tanıdığı süre 100 ms kadar), 62 durum sorgusunun hepsi de ortanca 3.5 ms'de. Uygulama yalnızca profildeki çerçeveleri okuyor, gerisini çekirdek süzüyor. Bu filtre olmadan Zero W'nin yanıtı gecikebiliyor.

Adım 12 — İlk gönderim, her seferinde bir çerçeve

Her adımı not etmek

Beklenmedik bir şey olursa — uyarı lambaları, bir modülün devreden çıkması, radyonun tuhaf davranması — hemen yalnızca dinlemeye dönüp gördüklerimi yazıyorum.

Gönderimden önce iki kontrol. Özgün modül sökülmüş olmalı; aynı adresi kullanan iki düğüm çakışır. Adım 10'da alınan PROXI değeri de /etc/blueandme/config.yaml dosyasında, can: altında, tırnak içinde 12 onaltılık basamak olarak yazılmalı. Bu değer boşsa Pi PROXI sorgusuna yanıt vermiyor. Benim Pi'mde değer, çalışan kopyanın içine gömülü. Bu ayar yalnızca yayımlanan kodda var: testler onu kapsıyor ama araçta henüz denemedim.

can:
  proxi_value: "............"    # your car's six bytes, 12 hex digits, in quotes
blueandme-giulietta --config /etc/blueandme/config.yaml --check

Aşağıdaki komut hem CAN denetleyicisinin dinleme modunu kaldırıyor hem de uygulamaya belirtilen mesajları gönderme izni veriyor. Mesaj adı belirtilmezse altısı da açılıyor. off ile ikisini birden yeniden kapatabiliyorum:

sudo ~/giulietta-blue-me/tx.sh on                        # all six node frames
sudo ~/giulietta-blue-me/tx.sh on bm_status_response     # or one at a time
sudo ~/giulietta-blue-me/tx.sh status
journalctl -fu blueandme-giulietta             # every transmitted frame is logged
sudo ~/giulietta-blue-me/tx.sh off                       # back to listen-only

Benim aracım altısını da kabul etti, o yüzden hepsiyle birlikte on normal durum. Bir şey ters görünürse şu sırayla teker teker denenir:

#ÇerçeveYanıtladığı soru
1bm_status_responseBody Computer düğümü eksik saymayı bırakıyor mu?
2bm_proxi_responseKilometre sayacının yanıp sönmesi duruyor mu?
3bm_watchdogBir değişiklik var mı?
4bm_audio_channelRadyo artık Blue&Me kaynağını sunuyor ve kabul ediyor mu?
5bm_track_time, bm_text_messageEkranlarda yazı görünüyor mu?

2. maddede aracın kabul ettiği bir modülüm vardı. 4. maddeyle radyonun ses girişi açıldı. Ancak bundan sonra ses kartını araca bağlamanın anlamı vardı.

Radyonun kaynak seçimi. Radyo 06314005#0C… ile soruyor, Pi 3–5 ms içinde 06314021#…84 diye cevap veriyor, ekran çerçevesi 0A114005 E2'ye dönüyor ve radyo 04…10 ile onaylıyor. Çıkış 24, cevabı da …80. Pi yalnızca sorulduğunda cevap veriyor: sorulmadan gönderdiğim …84 yok sayıldı. Radyo bazen 0C isteğini göndermiyor, MEDIA'ya bir daha basmak yetiyor.

İlk denemelerde kullandığım betik. Uygulamadan önce, araçta experiments/node4021/node4021_full.py dosyasını elle çalıştırdım. Uygulamada bulunmayan denemeler için hâlâ kullanılabiliyor. Bu dosyayı ve car_tx.sh'i aynı klasörden Pi'nin ev dizinine kopyaladım. car_tx.sh, deneme boyunca can0'ın gönderim yapmasını sağlıyor ve çıkarken önceki modu geri yüklüyor. CAN hattında trafik yoksa çalışmıyor. Kullanımı: sudo ~/car_tx.sh 1800 --value <your PROXI value> --text.

Araçta normal durum: gönderme

Aracım modülü beklemeye başladıktan sonra Pi, yeniden başlatmalarda da yeniden kurulumlarda da tx.sh on durumunda kalıyor: PROXI cevabı gelmezse kilometre sayacı yanıp sönüyor. Yalnızca dinleme (tx.sh off) sadece CAN kabloları yeni takıldığında gerekiyor, o da ip -s -d link show can0 gelen çerçeveleri gösterip hata göstermeyene kadar. preflight.sh denetleyici ile uygulamanın uyuşup uyuşmadığına bakıyor. Hem o hem de car_tx.sh buldukları modu geri koyuyor (car_tx.sh, gönderen uygulamanın kendisiyse çalıştığı sürece uygulamayı durduruyor, sonra yeniden başlatıyor). tx.sh status denetleyiciyi de uygulamayı da gösteriyor.

Acil durdurma

sudo ~/giulietta-blue-me/tx.sh off
# or, if that script is not there:
sudo sed -i 's/^  mode:.*/  mode: listen-only/' /etc/blueandme/config.yaml
sudo systemctl restart blueandme-giulietta

Fiziksel olarak: CAN-H ile CAN-L çekilir.

05 Ses ve kalıcı montaj adım 13–15

Adım 13 — Ses kartı tezgâh

CAN çalışmaları sürerken ses sistemini de evde kurdum. Pi Zero W'de analog ses girişi ve çıkışı yok. Radyo sesi konnektörün 5 / 22 / 21 numaralı pinlerinden alıyor; mikrofon ise 8 / 24 numaralı pinlere bağlı. İkisi için de USB ses kartı kullandım. Ses CAN üzerinden taşınamaz: B-CAN 50 kbit/s hızında çalışıyor, CD kalitesinde stereo ses ise 1.4 Mbit/s gerektiriyor.

Kart, C-Media HS-100B tabanlı bir Ugreen USB-A adaptörü. Zero W'nin micro-USB veri portuna, yani USB yazan porta (PWR değil) bir OTG adaptörüyle takılıyor.

  • Ugreen USB ses kartı C-Media HS-100B
  • Micro-USB OTG adaptörü micro-B fişten USB-A sokete
  • Kulaklık çıkış testi için
  • Mikrofonlu bir kulaklık kayıt testi için
  • Multimetre fiş gövdesi kontrolü için
HS-100B
USB ID0d8c:0014 (C-Media), USB 1.1 tam hız, 100 mA
ALSA adıDevice; yani plughw:CARD=Device
Çıkışstereo, kulaklık çıkışı. Speaker ses düzeyi −37 ile 0 dB arası
Girişmono mikrofon girişi. Mic Capture −12 ile +23 dB arası. Auto Gain Control varsayılan olarak açık geliyor, install.sh onu kapatıyor, çünkü görüşmelerde mikrofon kazancının sabit kalması gerekiyor
Örnekleme hızlarıYalnızca 48 ve 44.1 kHz. Görüşmeler 8 ya da 16 kHz ile geldiği için Pi onları yeniden örnekliyor

Mic Playback kapalı kalmalı. Mikrofon girişini doğrudan çıkışa geri veriyor. Varsayılan olarak kapalı, ama açık olsaydı araçta kabin mikrofonunu radyoya gönderirdi. Açıksa blueandme-status uyarıyor.

Çıkışın şase bağlantısını ölçtüm. HS-100B, gövdenin şase yerine bir ön gerilimde durduğu "kondansatörsüz" bir çıkışla da çalışabiliyor. Bu kart öyle değil: beslenirken gövde, USB fişinin metal kabuğuna göre 0 V okuyor. Kart bir gün değişirse bunu yeniden kontrol etmek gerekir, çünkü ön gerilimli bir gövde pin 21'e bağlanmamalı.

Mikrofon girişinde yaklaşık 3 V ön gerilim ölçtüm. Açık devrede ölçülen bu gerilim, standart elektret mikrofonlar için. Aracın yükselteçli mikrofonunu beslemeye yetmiyor; araç mikrofonu bu girişe doğrudan bağlanmamalı.

  1. Önce bir PC'de

    lsusb kartı 0d8c üretici kimliğiyle listeliyor. Sonra kulaklık fişinin gövdesini USB fişinin kabuğuna göre ölçtüm: 0 V.

  2. Pi'de: kartı bulmak

    OTG adaptörüyle taktım. aplay -l ve arecord -l ikisi de kartı card N: Device [USB Audio Device] olarak listelemeli.

  3. Çalmak ve kaydetmek

    Kulaklığa bir ton verdim, sonra kulaklığın mikrofonundan beş saniye kaydedip geri dinledim.

speaker-test -D plughw:CARD=Device -c 2 -t sine -f 440 -l 1
arecord -D plughw:CARD=Device -f S16_LE -r 48000 -c 1 -d 5 /tmp/mic.wav
aplay -D plughw:CARD=Device /tmp/mic.wav

install.sh kartı, Device adıyla Pi'nin varsayılan ses aygıtı yapıyor. Bluetooth'u da hem müzik hem görüşmeler için kuruyor:

ServisNe yapar
bluealsaBluetooth müziğini alıyor ve görüşmeler için eller serbest bağlantısını sağlıyor (-p a2dp-sink -p hfp-hf). Geniş bant görüşmeler için mSBC destekli bluez-alsa 4.3.1 kullanılıyor
bluealsa-aplaymüzik sesini ses kartına gönderiyor
blueandme-sco-routeaçılışta Zero W'nin Bluetooth çipine görüşme sesini HCI üzerinden taşımasını söyler; o olmadan görüşmeler sessizdir
blueandme-sco-aplayarayanı 150 ms'lik bir tamponla karta çalar
blueandme-sco-uplinkses kartının mikrofonunu telefona aktarıyor. Telefon bağlıyken görüşme kanalını açık tutuyor; eski sesin birikip gecikmeye yol açmasını engelliyor
blueandme-bt-reconnectaçılıştan sonra eşleştirilmiş telefona bağlanmayı deniyor. Benim telefonum ancak kendi Bluetooth'u açıldığında kendiliğinden bağlanıyordu; Pi daha sonra açılırsa bağlantıyı Pi'nin başlatması gerekiyordu

Geniş bant görüşmeler. Debian'ın bluez-alsa sürümü (4.0) görüşme sesini yalnızca 8 kHz ile taşıyor. install.sh, mSBC destekli bluez-alsa 4.3.1'i /usr/local altına kuruyor. Hazır paket varsa packages/ içinden alıyor, yoksa derliyor. dpkg-divert ile Debian'ın dosyalarını yedekleyip yenilerini kullanıyor. Telefon, Zero W'nin kendi Bluetooth çipiyle mSBC bağlantısı kuruyor; görüşmeler 16 kHz oluyor. Tezgâhta denediğimde 8 kHz'de anlaşılmayan kısık sözler duyulur hâle geldi. Az sayıdaki bozuk paket de (75 s'de yaklaşık üç) duyulur bir soruna yol açmadı. sudo ./install.sh --no-wideband komutu Debian'ın dosyalarını geri getiriyor.

Telefon bir kez eşleştiriliyor. Uygulama yalnızca dinleme modundayken eşleştirme isteğini kabul etmiyor. O yüzden blueandme-pair eşleştirmeyi bir süreliğine açıyor, eşleşen telefonu güvenilen aygıt olarak kaydediyor ve yeniden kapatıyor. Eşleştirmeyi install.sh çalıştıktan sonra yaptım ki telefon eller serbest profilini görsün. Daha önce eşleştirilmiş bir telefon yalnızca "Media audio" gösteriyor, Pi'yi telefonun kayıtlı cihazlarından silip yeniden eşleştirmek gerekiyor.

sudo blueandme-pair --seconds 120
# on the phone: pair with "blueandme", then check Phone calls and Media audio are on

Ses kartına kulaklık ve girişine mikrofon takarak önce müziği, sonra bir görüşmeyi denedim. Ses bağlantıları araca gitmeden önce iki yönün de çalışması gerekiyor. Görüşme sırasında journalctl -u blueandme-sco-uplink gönderilen mikrofon sesinin miktarını gösteriyor.

Pi görüşmeyi de yönetebiliyor, eller serbest bağlantısı üzerinden AT komutlarıyla: blueandme-call answer, blueandme-call hangup ve listelemek için blueandme-call calls. Her biri telefonun cevabını yazdırıyor ve OK gelince başarılı sayılıyor. Yeniden başlatmadan sonra blueandme-bt-reconnect, telefona dokunmaya gerek kalmadan onu geri getiriyor.

Görüşme sesinde zamanlama

Mikrofon aktarım servisi, 120 ms’den fazla beklemiş sesi atıyor. Denediğim arecord | aplay bağlantısı görüşmeler arasında dört saniyelik sesi tutuyordu. Müzik ve görüşme için ayrı çalıcılar gerekiyor; tek çalıcı görüşme sonrasında müziğe dönmüyordu. Bluetooth durumunu üç saniyede bir kontrol etmek ve mikrofon aktarımına daha yüksek öncelik vermek, tek çekirdeğin aşırı yüklenmesini önledi.

Direksiyon

Kurulu uygulama direksiyon tuşlarını, Giulietta'nın Blue&Me kılavuzunda anlatıldığı gibi (604_38_194, s. 9) telefon işlemlerine çeviriyor: işlem tuş bırakıldığında gerçekleşiyor, bir saniyeden uzun basılı tutulursa da uzun basış sayılıyor. Her basışta telefona hangi aramaların olduğunu soruyor (AT+CLCC), işlemi gelen arama durumuna göre seçiyor. CAN'e hiçbir şey göndermiyor, yani yalnızca dinlemede de çalışıyor. Tezgâhta, tuşları denetleyicinin geri döngüsünden vererek (sudo ~/press.sh phone 1.5) bunların her birini gerçek bir telefon ve gerçek bir aramayla denedim, hepsi çalıştı (2026-09-26). Sonrasında araçta, gerçek direksiyon tuşlarıyla normal bir aramayı cevaplamayı, aramayı bitirmeyi, reddetmeyi, mikrofonu sessize almayı, aramayı telefona ve geri araca aktarmayı ve tavan mikrofonu üzerinden telefon asistanını denedim, hepsi çalıştı.

TuşNe yapar
☎ telefonKısa basış: çalan aramayı açıyor ya da bekleyen aramaya geçiyor. Basılı tutma: çalan aramayı reddediyor (arayan meşgul sesi duyuyor) ya da görüşmeyi bitiriyor.
sessiz / ESCGörüşmedeyken mikrofonu kapatıp açıyor. Görüşme yokken müziği duraklatıp sürdürüyor. Asistanı da kapatıyor.
sesli komut (“Windows”)Telefonun kendi asistanını açıyor (AT+BVRA=1). Asistan beni aracımın mikrofonundan duyuyor, hoparlörlerden cevap veriyor. Telefon cevabını verdikten sonra oturumu kendisi kapatıyor, sayfası telefonun ekranında kalıyor.
▲ ▼Sonraki ve önceki parça. Önceki, telefonumun yaptığı gibi önce şarkıyı baştan başlatıyor.
SRC / OKGörüşme sırasında sesi telefonun ahizesine aktarıyor; yeniden basınca araca geri alıyor. Görüşme yokken radyo bu tuşla ses kaynağını değiştiriyor.
+ / −Pi'de hiçbir şey yapmıyor: sesi radyo kendisi ayarlıyor.

Görüşme sesini telefona aktarmak için Pi, görüşmenin Bluetooth ses bağlantısını kesiyor (hcitool, HCI Disconnect). Telefon sesi kendi ahizesine alıyor. Araca geri almak için AT+BCC ile telefondan ses bağlantısını yeniden kurmasını istiyorum. bluez-alsa 4.3.1'de yalnızca çalıcıları durdurmak işe yaramıyor: bağlantı açık kalıyor ama iki taraf da ses duyamıyor.

Devam koşulu

Kart hem çalma hem kayıt için listeleniyor, fiş gövdesi 0 V okuyor ve hem ton hem kaydedilen ses kulaklıktan duyuluyor. Ardından, telefon eşleştirilmişken müzik çalıyor, bir görüşme de Bluetooth'ta kalıyor: iki taraf birbirini duyuyor ve fark edilir bir gecikme yok.

Adım 14 — Sesi ve mikrofonu araca bağlamak

Kartın kulaklık çıkışı Blue&Me konnektörünün ses pinlerine gider.

SinyalBlue&Me pini
Sol5
Sağ22
Ses şasesi21

Fiş gövdesi gerçekten şase olduğu için (adım 13) fiş birebir bağlanıyor: uç sol kanal, pin 5'e gidiyor. Halka sağ kanal, pin 22'ye gidiyor. Gövde de pin 21'e bağlanıyor.

Kartın sesini düşük tutarak başladım, Blue&Me'yi seçip seviyesini FM ile kulakla karşılaştırdım. Seviye, Pi'de kartın kendi ses kontrolünden ayarlanıyor. Ardından motor çalışırken alternatör uğultusu olup olmadığı kontrol ediliyor. Varsa kart ile araç arasına konan 1:1 ses izolasyon trafosu, yani toprak döngüsü izolatörü, döngüyü kesiyor.

Mikrofon. Pin 8 (MIC+) ve pin 24 (MIC−) tavan konsolundaki yükselteçli mikrofonu taşıyor. Sinyal kablosu üzerinden kendi 5–8 V beslemesini istiyor, kartın girişinden önce de bir gerilim bölücü gerekiyor. Çünkü ses kartı bu mikrofonu besleyemiyor, sinyali de hat düzeyine yakın. Aşağıdaki devre hem beslemeyi hem de sinyal düzeyini düzenliyor. Grubun başka araçlarında kapsül bir Telicom MIC-98, veri sayfasına göre 5–8 V ile, 680 Ω üzerinden çalışıyor. 940'ta da aynısının olduğuna dair bir doğrulama bulamadım, bu yüzden bağlantıyı kullanmadan önce ölçüm yapacak şekilde kurdum. Uygulama görüşme sırasında radyoya CAN üzerinden bir görüşme olduğunu da bildiriyor, bunun için Doblò modülünün kullandığı değeri kullanıyor.

Mikrofon test devresi

Devreyi önce breadboard üzerinde kurdum. Mikrofonu eski modül gibi, fakat daha düşük akımla besliyor. Kondansatör, mikrofonun DC gerilimini ses kartından ayırıyor; iki direnç de sinyal düzeyini yaklaşık on iki kat düşürüyor. Bununla kayıt alıp düzeyi ölçtüm, kaydı dinledim ve bir görüşmeyle denedim. 15. adımdaki kontakla uyandırma devresi de aynı breadboard'un 20–27 numaralı satırlarında.

−abcde1234567891011121314151617kablo → Pi pin 2 (5 V) · yalnızca araçta2 kΩ ‖ 1 kΩb'de 1 kΩ: yaklaşık 670 Ω+10 µFuzun bacak (+) yukarı10 kΩ1 kΩkablo → araç pin 8mikrofon kablosu · uçfiş kartın MIC girişinemikrofon kablosu · gövdekablo → araç pin 24kablo → Pi pin 6 (GND)kablo → araç pin 15 (CAN şasesi) · yalnızca araçta
Her satırın a–e delikleri birbirine bağlı, satırlar ise birbirine bağlı değil. − şeridi tek parça uzun bir bağlantı. Turkuaz: sinyal, gri: şase, kesik çizgi: yalnızca araçta. Şeritteki Pi pin 6, Pi'nin şasesi ve araca pin 15 kablosu üzerinden ulaşıyor.
ParçaNeredeKontrol
2 kΩ1c'den 5c'yeDirenci masaya koyup multimetreyi Ω konumuna aldım: yaklaşık 2.0 k. İki bacağa birden parmakla dokunmak ölçülen değeri düşürür
1 kΩ1b'den 5b'ye, 2 kΩ'un yanındayaklaşık 1.0 k; ikisi de takılıyken satır 1 ile satır 5 arası yaklaşık 670 Ω okur. Aracımda ekledim (2026-09-27): mikrofon o zaman 2.16 V yerine 2.37 V'ta durdu
10 µF+ 5d'de, − 8d'deuzun bacak +'dır, çizgi −'yi gösterir; 10 V ya da daha yüksek gerilimli
10 kΩ8c'den 12c'yeyaklaşık 10 k
1 kΩ12d'den − şeridineyaklaşık 1.0 k
Mikrofon kablosuuç 12e'de, gövde − şeridindekesilmiş eski bir 3.5 mm kablo; ortadaki teli bantlanmış, bağlı değil; fiş kartın MIC girişine
Araç kabloları5e (pin 8), − şeridi (pin 24 ve 15)dupont jumper kabloları
Şase kablosu− şeridinden Pi pin 6'yatakılı kalır
5 V kablosu1a'dan Pi pin 2'yeyalnızca araçta: pin 2 dış sıradadır, microSD ucundan ilk pin

Evde test, 2026-09-27'de yaptım. 5 V kablosu çıkarılmış, ses kablosunun ucu satır 5'te ve gövdesi − şeridindeyken ses kartı breadboard'a 200 Hz'lik bir ton çaldı. Satır 5'te 520 mV, satır 12'de 41.6 mV ölçtüm, yani bölücü sinyali on iki buçuk kat düşürüyor. Mikrofon girişinden aldığım kayıt da temizdi (0 dB kazançta −37.5 dBFS, kırpılma yok). O kazançta kartın mikrofon girişi kırpmadan önce 2 V kadar kaldırıyor, o yüzden araçta kayda tam kazançla başladım. Konuşma kısık çıksaydı 1 kΩ yerine daha büyük bir direnç zayıflatmayı azaltırdı.

Aracımda yaptığım ölçümler

ÖlçülenDeğer
Pin 8 ile pin 24 arası, modül çıkarılmışİki yönde 6.5 kΩ, şaseye açık devre
5 V'tan 2 kΩ üzerinden beslenince2.16 V, 1.4 mA
2 kΩ ‖ 1 kΩ üzerinden beslenince (670 Ω, bu kaldı)2.37 V, 4.0 mA
Gerilim bölücü, 10 kΩ / 1 kΩ÷ 12.5 (giriş 520 mV, çıkış 41.6 mV)
Sessizlik, kartın mikrofon kazancı +23 dB'de−60 dBFS
Normal konuşma−41 ile −55 dBFS arası, tepeler yaklaşık −25
Yüksek sesli ıslıktepeler −0.8 dBFS, kırpılma yok

Tavan mikrofonunu denemek için ona doğru konuşup ıslık çalarak kendimi kaydettim, ardından bir arama yaptım. Telefona gitmeden önce aktarım programının sese 15 dB eklemesini ayarladım (/etc/blueandme/sco-uplink.env içinde --gain-db 15). Karşı taraf sesin çok iyi geldiğini söyledi. Bu, tek başına seviye ölçümünden çok daha anlamlı bir sonuçtu.

Araçta, sırasıyla

Araçtaki ses ve güç testlerini aynı ziyarette yaptım: 14. adımın tamamını ve 15. adımın araçta yapılacak bölümünü. Aşağıdaki sırayı izlerken Pi, en son dönüştürücü bağlanana kadar powerbank ile çalışıyor.

Evde, çıkmadan önce

  1. Ses kablosunun tellerini breadboard'dan çıkardım (ucu satırından, gövdeyi − şeridinden): bundan sonra o kablo aracın 5, 22, 21 numaralı ses pinlerine gidiyor.
  2. 5 V'luk geçici kabloyu satır 26'dan çıkardım (kontakla uyandırmanın tezgâh testi içindi).
  3. Yolculukta bağlı olmayanlar: mikrofonun 5 V kablosu (satır 1) ve dört araç kablosu (pin 8, 24, 15, 32). Pi pin 5 kablosu ile Pi pin 6 şasesi takılı kalıyor.
  4. Buck: IN+'ya kırmızı, IN−'ye siyah bir kablo lehimledim, pedlerin üzerine makaron geçirdim, uçlara da dupont pin taktım.
  5. Yanıma aldıklarım: MCP2515 ve ses kartıyla birlikte Pi, breadboard, powerbank, Pi'nin PWR portuna gidecek USB kablosuyla buck, ses kablosu, dupont kablolar, yedek bir 1 kΩ direnç, multimetre, telefon, tablet ve bir sigorta çıkarıcı.
  6. sudo ~/giulietta-blue-me/preflight.sh, PREFLIGHT PASS diyerek bitiyor. Ardından sudo ~/giulietta-blue-me/tx.sh off: CAN kabloları takılırken Pi yalnızca dinlemede kalıyor. Araçtayken Pi'ye ulaşabilmek de gerekiyor, ben telefonun hotspot'unu kullandım.

Araçta, önce ölçüm (Pi powerbank'te)

  1. Blue&Me modülü sökülü. CAN kablolarını takarken can0 evden beri hâlâ yalnızca dinlemede (tx.sh status).
  2. DC volt, siyah prob boyasız metalde: pin 16, anahtar kapalıyken de MAR'dayken de 12 V civarı (sürekli). Pin 32 anahtar kapalıyken 0 V, MAR'da 12 V civarı (kontak).
  3. F36 çekilince (aşağıdaki sigorta kutusunda) pin 16 0 V'a düşmeli. Sonra geri takılıyor.
  4. CAN: 30 H'ye, 14 L'ye ve − şeridinin kablosu pin 15'e.
  5. ip -s -d link show can0 gelen çerçeveleri gösterip hata göstermeyince: tx.sh on. Bundan sonra araca Pi cevap veriyor. Kontağı kapatıp yeniden açtım: kilometre sayacı yanıp sönmedi.

Sonra mikrofon

  1. Yalnızca multimetre, breadboard henüz 8 ve 24 numaralı pinlere bağlı değil: pin 8 ile 24 arası Ω, iki yönde de. Bir de pin 8 ve pin 24 ile boyasız metal arası (OL okumalı).
  2. Breadboard'un kablolarını 8 ve 24 numaralı pinlere, satır 1 kablosunu Pi pin 2'ye, mikrofon fişini de ses kartının MIC girişine taktım.
  3. DC volt, siyah prob − şeridinde, kırmızı satır 5'te: 5 V'un belirgin biçimde altında bir değer, mikrofonun canlı olduğunu gösteriyor. 3–4 V civarı iyi. 2.5 V'un altı ya da yüksek sesli ıslıkta bozulan bir kayıt, 2 kΩ üzerinden gelen akımın yetersiz olabileceğini gösteriyor: bu durumda onu 1 kΩ ile değiştirmek veya 1 kΩ'u yanına koymak (yine satır 1'den 5'e). Ben yanına koydum, birlikte 670 Ω kadar ediyorlar, veri sayfasındaki 680 Ω değerine yakın.
  4. Ben tavan konsoluna doğru ıslık çalıp konuşurken Pi'de kayıt aldım, geri dinledim. Temiz gelince aracımın mikrofonuyla bir deneme görüşmesi yaptım.

Sonra ses ve uygulama

  1. Ses kablosunu 5 (uç), 22 (halka), 21 (gövde) numaralı pinlere, fişini de kartın kulaklık çıkışına bağladım. Radyoda Blue&Me'yi seçince telefondaki müzik çalmaya başlıyor; bunun için müzik uygulamasının yakın zamanda kullanılmış olması gerekiyor. Radyo da parça bilgisini gösteriyor. Ses düzeyini ayarladım ve motor çalışırken uğultu olup olmadığını dinledim. Pi henüz powerbank ile beslendiğinden bu kontrolü kalıcı beslemeye geçince tekrarlamak gerekiyor.
  2. Direksiyon: parça atlama, duraklatma, asistan, aramayı açma ve reddetme.

Sonra kontak (adım 15)

  1. Kontak kapalı. Satır 26'daki kabloyu pin 32'ye taktım.
  2. Pi'yi kontağı GPIO3'ten okuyacak şekilde ayarladım. Anahtar MAR'a çevrilip geri alınırken bu giriş MAR'da düşük, kapalıyken yüksek görünmeli.

En son, buck (adım 15)

12 V yalnızca buck'ın IN+ ucuna gider, başka hiçbir yere

Breadboard'a da Pi'nin herhangi bir pinine de asla gitmez. Pin 16'ya dokunmadan önce F36'yı çekiyorum.

  1. Anahtarı çıkardım. F36'yı çektim.
  2. Buck IN+ (kırmızı) pin 16'ya. Buck IN− (siyah) − şeridinin boş bir deliğine, şerit de pin 15'e kendi kablosuyla ulaşıyor (0.1 A kadar akım, kalıcı montajda buck'ın kendi şase kablosu oluyor).
  3. Pi'yi kapattım (halt). LED'i sönünce Pi'nin PWR kablosunu powerbank'ten çıkarıp buck'ın USB soketine taktım.
  4. F36'yı geri taktım: Pi araçtan açıldı. Pi üzerinde besleme gerilimini ölçmek gerekiyor, çünkü Zero W'de düşük gerilim algılayıcı yok.
  5. Motoru çalıştırdım: Pi'nin çalışmaya devam etmesi gerekiyordu. Benimki, dönüştürücüyü değiştirene kadar yeniden başladı. Diyot, kondansatör ve test sonuçları adım 15'te.
  6. Bırakırken iki seçenek var: ya tx.sh on ile araçtan beslenerek orada kalıyor ya da benimle eve geliyor. Eve gelecekse önce kapatıyorum (halt), sonra herhangi bir şeyi sökmeden önce F36'yı çekiyorum.
Blue&Me sigortası, F36: bu sigorta kutusunda sağ sütunun en altında (şema kullanım kılavuzundan). Çekince Pi'nin pin 16'daki sürekli 12 V'u kesiliyor. Bunu bir kez multimetreyle kontrol etmek gerekir.
Devam koşulu

Müzik aracın hoparlörlerinden yeterli ses düzeyinde ve uğultusuz gelmeli.

Radyo tuşları ve ekran

Kartın Speaker seviyesini FM'in sesine kulakla eşitledim. −20 dB'de müzik çok kısıktı. Sonunda kartın en yüksek seviyesi olan 0 dB'yi kullanıp alsactl store ile kaydettim. Ardından motor çalışırken dinledim. Uğultu duymadığım için toprak döngüsü izolatörü kullanmadım. Bu ilk kontrolde Pi powerbank ile çalışıyordu. Ünite aracın beslemesindeyken ve motor çalışırken de uğultu yok.

Bazı tuşları radyo kendisi yönetiyor. Görüşme dışında sessize alma durumunu CAN üzerinden bildiriyor; Pi de ses yeniden açılana kadar telefonu duraklatıyor. Radyonun ok tuşlarını da bu mesajlardan okudum. Sol ve sağ parça değiştiriyor, yukarı ve aşağı Bluetooth ses düzeyini ayarlıyor.

Parça bilgisini göndermek için Doblò modülünün mesaj biçimini ve 6 bitlik karakter kümesini kullandım; bunlar fiatcan'da çözülmüş. Giulietta'nın radyosu da aynı mesajı kabul ediyor. Üst satır bir metin alanının ilk on iki karakterini gösterdiğinden, “sanatçı - parça” metnini çeyrek saniyede bir kaydırıyorum. Alt satırda başka bir alan var; oraya M:SS biçiminde süre gönderiyorum. Karakter kümesindeki dört kod bu radyoda görünmüyor, parantezler de yok. Bu yüzden parça adındaki parantezleri * ile değiştiriyorum.

Telefona bağlı davranışlar. Önceki parça tuşu, ilk basışta çalan şarkıyı başa alıyor. Müzik uygulaması uzun süre kullanılmadıysa telefon, uygulamayı açana kadar Çal komutuna yanıt vermiyor. YouTube Music de ileri ve geri sarma komutlarını uygulamıyor. WhatsApp araması şu an direksiyondan cevaplanamıyor: telefon tuşu normal aramayı cevaplıyor, ama telefonum çalan WhatsApp aramasını uygulamanın gelen arama saymadığı bir durumda bildiriyor.

Adım 15 — Kalıcı montaj

Adım 14'te sesin çalıştığını doğruladıktan sonra kalıcı beslemeye geçtim. Pi, F36 sigortası üzerinden aracın sürekli 12 V hattından besleniyor. Park sırasında 72 saate kadar bekleme modunda açık kalıyor. Araç uyanınca PROXI sorgusuna hemen yanıt verebiliyor. Süre dolunca kendini kapatıyor (halt). Ek parçaları, ihtiyaçlarını testle gördükçe ekledim.

Pi park hâlinde neden açık kalır

Araç PROXI'yi uyandıktan yaklaşık bir saniye sonra, yani kilidi açıldığında ve anahtar daha çevrilmeden soruyor. Birkaç saniye içinde üç kez soruyor. O anda açılmak zorunda kalan bir Pi çok geç kalıyor: 2026-09-27'deki soğuk açılışta firmware 3.8 s kadar, çekirdek 5.6 s sürdü, uygulama ise güç verildikten 53 s kadar sonra veri yolundaydı.

Zaten çalışan bir Pi ise hemen cevap veriyor: aracımın trafiğini tezgâhta yeniden oynattığımda (adım 11) 3.3 ms, ZB kaydındaki gözetimli betikte 8 ms. Şimdiye kadarki bütün testlerde aracım uyandığında Pi çalışıyordu, o yüzden PROXI hep cevaplandı ve kilometre sayacı hiç yanıp sönmedi. Pi ancak araç uyandıktan sonra açılırsa ne olacağını, yani bekleme süresinden uzun bir parktan sonraki durumu test etmedim.

Aracın PROXI denetimine karşı soğuk açılış, bu Pi'de ölçüldüaraç PROXI'yi üç kez sorar← çalışan bir Pi 3 ms'de yanıt verirsoğuk Pi: firmware 3.8 s, sonra çekirdek 5.6 suygulaması ~53 s'de veri yolunda, ölçek dışı →0 sgüç verildi10 s20 s30 s40 sSoğuk açılış 2026-09-27: systemd-analyze ve günlük; firmware süresi güç kaydından.
Araç modüllerini kontrol ettiğinde çekirdek henüz başlamamış oluyor. fmntf, PROXI'ye initramfs içinden, /sbin/init'ten önce yanıt veriyor. Ancak bunun işe yaraması için çekirdeğin yaklaşık iki saniyede açılması gerekiyor; benim kurulumda beş buçuk saniye sürüyor. Pi'yi beklemede tutmamın nedeni bu.

Bekleme modunda ölçtüğüm tüketim

Tezgâhta, Pi'nin 5 V girişinde bir USB güç ölçerle ölçtüm (experiments/standby/). Bekleme modu Bluetooth'u ve Wi-Fi'yi kapatıyor, işlemciyi en düşük hıza alıyor, LED'i de söndürüyor. CAN arayüzü ise aracın uyandığını fark edebilmek için tx.sh'in ayarladığı modda açık kalıyor (araçta bu gönderme modu, böylece PROXI anında cevaplanıyor).

DurumPi'deAküden
Çalışıyor: telefon bağlı, müzik ya da görüşme1.0–1.07 Wmotor çalışıyor
Park hâlinde, bekleme0.63 Wyaklaşık 65 mA, günde 1.6 Ah
72 saat beklemeyaklaşık 4.7 Ah, 70 Ah'lik bir akünün aşağı yukarı %7'si
Bekleme süresinden sonra, kapalı (halt)0.22 Wyaklaşık 25 mA, günde 0.6 Ah; F36 çekilip yeniden takılana kadar (ya da takılıysa kontakla uyandırmaya kadar)

Akü hesabında 12.4 V ve %80 verimli bir buck dönüştürücü varsaydım. Akünün gerçek kapasitesi etiketten kontrol edilmeli. Pi kapalıyken de açık durumun yaklaşık üçte biri kadar akım çekiyor. Üç haftalık parkta tüketim 4.7 + 11 Ah, yani yaklaşık %22 oluyor. Daha uzun süre kullanmayacaksam F36'yı çekerek beslemeyi kesiyorum.

Pi kapalıyken Blue&Me çalışmıyor. Radyo kaynağı kullanılamıyor, PROXI sorgusu da yanıtsız kalıyor. F36'yı çıkarıp takınca Pi yeniden başlıyor ve yaklaşık bir dakikada hazır oluyor. Uzun park sık yaşanıyorsa aşağıdaki kontakla uyandırma devresi eklenebilir; bu durumda kontağı açmak yeterli.

Beklemeden uyanma. blueandme-standby, kontak kapalıyken CAN hattı bir dakika sessiz kalınca bekleme moduna geçiyor. Araç kilidi açıldığında gelen CAN mesajıyla veya bağlanmışsa kontak hattıyla uyanıyor. Tezgâhta bir mesaj gönderdiğimde müzik 3.3 s, görüşmeler 3.7 s sonra hazırdı. Soğuk açılışta bu süreler 33.5 ve 34.2 s. Servis ancak araç trafiği gördükten sonra devreye giriyor; CAN hattı sessiz kalan tezgâh kurulumunda beklemeye geçmiyor.

Montaj

KonuNasıl
Güç12 V→5 V buck, otomotiv sınıfı, boşta az akım çeken, Blue&Me pin 16'dan (sürekli 12 V) ve pin 15'ten (şase) beslenen, hep açık. Bekleme süresi dolunca Pi kendini kapatıyor (aküden 25 mA kadar) ve F36 çekilip takılana ya da kontakla uyandırma takılıysa kontak açılana kadar öyle kalıyor. Özgün 6–32 V USB modülünü, yüksüz yaptığım bir düşme testinden sonra bir TECNOIOT 6–24 V'tan 5 V'a USB düşürücü modülle değiştirdim. Yenisi marş sırasındaki yeniden başlamaları bitirdi (2026-10-01). Dönüştürücü kutunun içinde, konnektörden birkaç santimetre ötede duruyor. Böylece aracın Blue&Me beslemesine ait kendi sigortası, özgün modülün kablolarını koruduğu gibi kutunun içindeki kısa kabloyu da koruyor. Hat üstü 2 A sigorta ancak kablolar bir gün kutunun dışına çıkarsa gerekiyor. Tezgâhta, 12 V'luk bir adaptörle, Pi'yi açılıştan müziğe kadar 4.90–4.92 V'ta tuttu (0.12–0.32 A), boşta çektiği akım da ihmal edilecek kadardı (özgün dönüştürücü, 2026-09-25). Ama o 12 V testi, düşük giriş geriliminde de çalıştığını göstermiyordu. Aracımdan uzun süre uzak kalacağım zaman gücü, aracın sigortasını, yani F36'yı çekerek kesiyorum. 12 V hattı hiçbir GPIO pinine doğrudan bağlanmamalı.
PROXIÇalışan Pi cevaplıyor, çünkü kapalı değil, beklemede (tezgâhta 3.3 ms). Bekleme süresinden uzun bir parktan sonra ise Pi, yeniden başlatılana kadar kapalı. Aracımın geç gelen bir cevapla ne yaptığını test etmedim.
Mikrofon14. adımda denediğim mikrofon devresini, araçta ölçtüğüm değerleri kullanarak lehimledim. Mikrofonu ses kartının girişine bağlıyor.
Kontak algılamaCAN trafiği, ek bir kontak kablosuna gerek kalmadan beklemedeki Pi'yi uyandırıyor. Kontak bağlantısı, uzun park sonunda kapanmış Pi'yi yeniden başlatmak için gerekiyor. Böyle parklar sık oluyorsa eklenir, o zamana kadar sigortayı çekip geri takmak yetiyor. Devre bir NPN transistör ve iki dirençten ibaret (başlangıç setinden bir PN2222): pin 32 → 100 kΩ → baz, bazdan şaseye 100 kΩ, kolektör GPIO3'e (header pin 5), emiter şaseye gidiyor. Baz ile emiter arasındaki 1N4007 (katodu bazda), bazı negatif darbelere karşı koruyor (power.ignition_gpio: 3, ignition_active_low: true). GPIO3, düşüğe çekildiğinde kapalı bir Pi'yi açan tek pin ve kendi 1.8 kΩ'luk pull-up direnci var. Optokuplör kullanmadım, çünkü Pi'nin şasesi zaten aracın şasesi.

Kök dosya sistemini henüz salt okunur yapmadım. Kart şimdiye kadar elektrik kesintilerinden sağ çıktı ama bu, zarar görmeyeceğini kanıtlamıyor.

Kontakla uyandırma

İsteğe bağlı: 72 saatten uzun bir parktan sonra kapanmış bir Pi'yi kontağı açarak yeniden başlatmayı sağlıyor. O olmadan F36 çekilip geri takılıyor. Setten üç parça, mikrofon devresinin breadboard'unda, satır 20–27'de duruyor ve aynı − şeridini kullanıyor. Anahtar MAR'dayken transistör Pi pin 5'i (GPIO3) şaseye çekiyor, kapalı bir Pi de bununla açılıyor.

−abcde20212223242526271N4007100 kΩEBCPN2222100 kΩkablo → Pi pin 5 (GPIO3)anahtar MAR'dayken şaseye çekilirkablo → araç pin 32 (kontak)MAR'da 12 V: asla bir Pi pinine değil
Sarı-turuncu: araçtan gelen 12 V; hiçbir Pi pinine doğrudan bağlanmamalı. Turkuaz: Pi bağlantısı. Gri: şase. Uzun breadboard'larda − şeridi ortadan bölünmüş olabilir. Satır 27'den önce mavi çizgide kesinti olup olmadığını kontrol etmek gerekiyor.
ParçaNeredeKontrol
PN2222E 21c'de, B 22c'de, C 23c'demultimetre diyot konumunda (→|): kırmızı bir bacakta, siyah sırayla diğer iki bacakta. İkisine de 0.6–0.7 V kadar okuyan bacak baz (PN2222'de ortadaki). Kırmızı bazdayken biraz daha yüksek okuyan bacak emiter. Siyah bazdayken ikisi de OL (bir NPN).
1N4007çizgi 22b'de, diğer uç 21b'deçizgi bazın satırına gider
100 kΩ22a'dan − şeridineyaklaşık 100 k, breadboard dışında ölçülmüş
100 kΩ22d'den 26d'yeyaklaşık 100 k
Köprü kablosu21a'dan − şeridineemiterin şasesi
Kablo23e'den Pi pin 5'epin 5: iç sıra, microSD ucundan üçüncü pin
Kablo26e'den araç pin 32'yekontak hattı, araçta ölçüldüğü gibi

Tezgâhta test ettim, 2026-09-27. Kontağın yerine satır 26'ya Pi'nin kendi 5 V'unu (pin 2) verdiğimde GPIO3 0 oldu, vermediğimde 1. Kapalı bir Pi, kabloyu taktığım anda açıldı (14:38:48'de kapandı, 14:39:56'da ağa geri döndü). O geçici kabloyu sonra çıkardım, yoksa Pi her kapandığında yeniden başlar. Araçta gereken tek şey pin 32 kablosu ve iki satırlık yapılandırma (ignition_gpio: 3, ignition_active_low: true).

12 V'tan 5 V'a

Dönüştürücüyü breadboard'a bağlamadım; kendi lehim pedleri ve USB soketi var. Böylece 12 V beslemeyi hem breadboard'dan hem de Pi'nin pinlerinden uzak tuttum.

NeredenNereyeNot
Araç pin 16 (sürekli 12 V)buck IN+aracın F36 sigortasının arkasında. Kalıcı olarak, marş tamponu üzerinden: pin 16 → pertinaks I10, pertinaks L10 → buck IN+
Araç şasesibuck IN−araç testi için − şeridi. Kalıcı olarak: pin 15 → pertinaks K1, pertinaks L1 → buck IN−
Buck USB soketiPi PWR portuUSB kablosuyla; Pi'nin diğer USB portu ses kartına ayrılıyor

Lehimli, breadboard'suz

Kalıcı montajda mikrofon devresi lehimleniyor ve her bağlantı makaronla kaplanıyor, çünkü breadboard araçta sarsıntıyla gevşiyor. Kontakla uyandırma ise bir sonraki bölümdeki delikli pertinaksa gidiyor. Değerler aracımda bıraktığım gibi (2026-09-27): 2 kΩ'un yanına bir 1 kΩ koyunca mikrofon 2.37 V'ta durdu (yalnız 2 kΩ ile 2.16 V) ve yüksek ıslıklar dahil, tam kazançta temiz kayıt verdi.

2 kΩ1 kΩyan yana: yaklaşık 670 Ωkablo → Pi pin 2 (5 V)araç pin 8+10 µF+ A'ya doğru10 kΩmikrofon fişi ucu1 kΩaraç pin 24 · araç pin 15fiş gövdesiPi şasesi (pin 6)ABG
Üç bağlantı olarak mikrofon devresi: A (yan yana 2 kΩ ve 1 kΩ, kondansatörün + bacağı, araç pin 8), B (10 kΩ, alttaki 1 kΩ, mikrofon fişinin ucu), G (şaseler). Mavi: her bağlantının ve parçanın üzerinde makaron.
  1. Kabloları boyuna göre kestim. Lehimlemeden önce A, B ya da G'de biten her kabloya, bir de birleştireceğim her parçanın üzerine birer parça makaron geçirdim.
  2. 2 kΩ ile bir 1 kΩ yan yana, bacakları iki uçta birbirine bükülmüş (yaklaşık 670 Ω); bir uç Pi pin 2 kablosuna.
  3. A: çiftin diğer ucu, kondansatörün + bacağı ve araç pin 8 kablosu, bükülüp lehimlenmiş. Kondansatörün − bacağı 10 kΩ'un bir ucuna.
  4. B: 10 kΩ'un diğer ucu, ikinci 1 kΩ ve mikrofon fişinin uç kablosu.
  5. G: o 1 kΩ'un diğer ucu, araç pinleri 24 ve 15, mikrofon fişinin gövdesi ve Pi şase kablosu.
  6. Her makaronu kendi bağlantısının ya da parçasının üzerine kaydırıp büzdüm (sıcak hava tabancasıyla ya da alevin içinde değil, altında tutulan bir çakmakla).
  7. Araçtan önce multimetre Ω'da: Pi pin 2 kablosundan araç pin 8 kablosuna yaklaşık 670 Ω; mikrofon ucundan şaseye yaklaşık 1 k; araç pin 8'den şaseye açık devre.
Kutuyu kapatmadan önce bakılacak iki şase bağlantısı

Üniteyi kutusuna yerleştirdikten sonra aradığım kişi sesimi değil, motor sesine benzeyen boğuk bir gürültü duydu. Üniteyi tezgâha geri aldım (2026-10-11). Araç pin 8'e hiçbir şey bağlı değilken ve +23 dB kazançta mikrofon girişinin gürültü tabanı −34 dBFS çıktı. 2026-09-27'de araçta, tavan mikrofonu bağlıyken ve kabin sessizken bu değer −60 civarındaydı. Tezgâhta Pi'yi powerbank ile çalıştırınca da, araç pin 8'i pin 24'e bağlayınca da gürültü değişmedi. Mikrofon fişini karttan çekince kayboldu (−82). Demek ki gürültü mikrofon fişinden giriyordu ve iki nedeni de şase bağlantılarıydı.

Mikrofon fişinin gövdesini G bağlantısına değil, yalnızca araç pin 24'e götürmüşüm. G'ye bağlayınca gürültü tabanı −40'a indi. Ses kartının kendi şasesi de Pi'nin şasesinden yukarıda duruyordu: mikrofon fişi çıkıkken 60–80 mV, takılıyken 30–38 mV. Kutuya sığsın diye kısaltıp Pi'ye lehimlediğim USB kablosunun şase hattında yaklaşık 2 Ω vardı. Kartın şasesinden G bağlantısına kısa bir kablo lehimledim: fark mikrofon fişi takılıyken 4.5 mV'a, pin 8 pin 24'e bağlıyken gürültü tabanı da −59 dBFS'ye düştü. Bu, 2026-09-27'deki −60'a yakın ama aynı test değil: orada mikrofon bağlıydı, burada mikrofon yoktu ve iki pin birbirine bağlıydı.

Güç açıkken iki ölçüm ikisini de buluyor. Mikrofon fişi çıkıkken fişin ucu ile araç pin 24 arasında yaklaşık 1 kΩ okunuyor. Fiş takılıyken araç pin 21 (ses kablosu üzerinden kartın şasesi) ile araç pin 24 arasındaki DC gerilim birkaç milivoltta sabit duruyor. Onlarca milivolt arasında gezinen bir değer ise gürültünün kendisi.

İki düzeltmeden beri görüşmeler yeniden çalışıyor. Bunu ünite araca tam olarak takılıyken denedim (2026-10-11). Aradığım kişi hafif bir yankı duyduğunu söylüyor. Yankıyı ölçmedim, onunla sonra ilgileneceğim.

Kontakla uyandırma ve marş tamponu tek bir delikli pertinaksta

Aracın 12 V'una dokunan iki devre de setteki delikli pertinaksın tek bir parçasında duruyor (kaplamalı delikler, hiçbiri birbirine bağlı değil): 10 sütun × 24 satır, yani 3 × 7 cm'lik pertinaksın boyutu (başka bir pertinaksta delikleri saymak gerekir). Kontakla uyandırma A–G satırlarında. H satırı boş kalıyor. Marş tamponu I–X satırlarında, çoğunu da yatık duran kondansatör kaplıyor. Parçalar üste geliyor, bağlantılar altta, bükülmüş bacaklar ve lehim köprüleriyle yapılıyor. Kondansatör yatıkken pertinaksın yüksekliği 21 mm kadar.

Marş tamponu ve dönüştürücü sorunu (2026-10-01). Aracıma takılı Pi, eklediğim 2200 µF'lık kondansatöre rağmen marş sırasında yeniden başlıyordu. 6–32 V diye satılan özgün dönüştürücü, Pi bağlı değilken ve kaynak sabit gerilim modundayken bile 10 V'luk tezgâh kaynağında 0 V veriyordu. Çıkış ancak 11 V'a gelince geri döndü, 12 V kaynakta multimetre 5.09 V çıkış ölçtü. Dönüştürücüyü değiştirince yeniden başlamalar bitti. Yenisi, yani TECNOIOT 6–24 V'tan 5 V'a USB düşürücü modül, tezgâh kaynağını 5 V'a kadar indirdiğimde bile Pi'yi çalışır tuttu. O girişte Pi'nin kendi hat gerilimini kaydetmedim. Bu arada buck IN− ucunun bağlı olmadığı da ortaya çıktı, ölçümlerden önce bu bağlantıyı düzelttim. Pin 15'e giden kendi dönüş kablosu olmalı. Pin 16 buck'a bir diyot üzerinden gidiyor, takılı 2200 µF'lık kondansatör de diyottan sonra IN+/IN− arasında duruyor. En az 35 V'luk bir kondansatör gerekiyor, diyotun çizgisi de kondansatöre bakıyor. Bu çözüm kapasiteyi artırmayı gerektirmedi. Aracımın marş sırasındaki dalga biçimini hâlâ ölçmedim. Tampon süresi hesabı, etiketteki 6 V giriş sınırına göre değil, ölçülen kesilme gerilimine göre yapılmalı.

Parçalar üstte; renkli lehimler ve yollar alttan yapılır12345678910ABCDEFGHIJKLMNOPQRSTUVWX→ Pi pin 5 (GPIO3)→ araç pin 32kontak, MAR'da 12 V→ araç pin 16sürekli 12 V (F36)→ buck IN+Pi şasesi ←araç pin 15 ←buck IN− ←100 kΩ100 kΩ1N4007 · çizgi F5diyot · çizgi J6PN2222düzEBC−−−−−2200 µF35 V−+kartın üzerinde yatık,çizgi (−) sütun 1'e doğru;yapıştırılır ya da bağlanır.Uzak ucu biraz taşabilir.KONTAKLA UYANDIRMAMARŞ TAMPONUrenkli = alttan birleştirilmiş:şasebazGPIO3pin 32 (MAR'da 12 V)pin 16 (12 V)nokta = lehim; şerit = yol
Üstten görünüş. Her renkli nokta bir lehimi, her renkli bant o delikler arasında altta yapılacak bir yolu gösteriyor. Renksiz delikler boş kalıyor. Pertinaksı ters çevirince sütun 1 sağda kalıyor, o yüzden delik adlarına göre gitmek gerekiyor. Gri: şase (kontak tarafında Pi'ninki, marş tarafında aracın pin 15'i ve ikisi pertinaksta birleşmiyor: buck'ın akımı Pi'nin şase kablosundan geçmiyor). Mavi: baz. Turkuaz: GPIO3. Sarı-turuncu: pin 32. Kırmızı: pin 16. İki 12 V'un hiçbiri bir Pi pinine ulaşmamalı.
ParçaDeliklerKontrol
PN2222E B3'te, B B5'te, C B7'de; düz yüz C satırına doğruE, B, C önce multimetreyle bulunur, yukarıdaki breadboard tablosundaki gibi
100 kΩD1'den D5'e (bazdan şaseye)yaklaşık 100 k, breadboard dışında ölçülmüş
100 kΩE5'ten E9'a (pin 32'den)yaklaşık 100 k
1N4007F1'den F5'e, çizgi F5'teçizgi bazın sütununa gider
DiyotJ10'dan J6'ya, çizgi J6'da1N5822 ya da 1N4007; çizgi kondansatöre doğru
2200 µF 35 V+ L6'da, − L3'te; gövde M–X satırlarının üzerinde yatıkuzun bacak +'dır, gövdedeki çizgi −'yi gösterir. Ters takılırsa patlayabilir
KablolarPi pin 5 B9, Pi şasesi G1, araç pin 32 G9; araç pin 16 I10, araç pin 15 K1, buck IN+ L10, buck IN− L1üstten girer, altta lehimlenir
YollarB3–B1–G1, B5–F5, B7–B9, E9–G9; I10–J10, J6–K6–L6–L10, K1–L1–L3altta; başka hiçbir delik birleştirilmez
  1. Önce transistör: E ve C'yi dışa doğru büktüm ki bacaklar B3, B5, B7'ye otursun, düz yüzü de C satırına baksın. Altta lehimledim ve üç lehim noktasını birbirinden ayrı tuttum.
  2. İki direnç ve 1N4007 pertinaksa yatık duruyor, çizgi F5'te. Marş diyotu J10–J6'da, çizgisi J6'da. Lehimledim, ama yollar bitene kadar bacakları uzun bıraktım.
  3. Kondansatörün iki bacağını, gövdeden yaklaşık 3 mm uzakta 90° büktüm. + bacağını L6'ya, − bacağını L3'e geçirip gövdeyi X satırına doğru yatırdım ve lehimledim. Gövdeyi yapıştırıcıyla sabitledim; iki boş delikten geçirilen kablo bağı da kullanılabilir.
  4. Alttaki yollar: her uzun bacağı kendi yolu boyunca yatırıp sonraki deliklere lehimledim. Kalanını lehimle ya da yalıtımsız bir tel artığıyla köprüledim. Kontak: B3–B1–G1, B5–F5, B7–B9, E9–G9. Marş: I10–J10, J6–K6–L6–L10, K1–L1–L3. H satırı ve geri kalan her şey ayrı kalıyor.
  5. Yedi kablo üstten girer, altta lehimlenir.
  6. Multimetre Ω'da, hiçbir şey bağlı değilken: C ile E arası iki yönde de açık devre okumalı. Pi pin 5 kablosu ile Pi şase kablosu arası da açık devre olmalı. Araç pin 32 kablosu ile B5 arası 100 k kadar okumalı. Marş tarafı: araç pin 16 kablosu ile buck IN− kablosu arası 0'a yakın okumamalı (kondansatör multimetreden şarj olduğu için değer yükselir). Buck IN+ ile buck IN− arası da aynı. Diyot konumunda I10'dan L10'a bir yönde 0.3–0.7 V kadar okunmalı, diğer yönde hiçbir şey okunmamalı. Sonra kablo lehimlerinin üzerine birer damla yapıştırıcı sürülüyor.
  7. Araçta, F36 çıkarılmışken kabloları taktım, sonra F36'yı geri taktım. Sırada, anahtar MAR'a çevrilip geri alınırken GPIO3'ü okumak var (MAR'da 0, kapalıyken 1). Pi'nin marş boyunca çalışmaya devam ettiğini de görmek gerekiyor. Zero W'de düşük gerilim algılayıcı olmadığı için get_throttled=0x0 beslemenin kararlı olduğunu kanıtlamıyor. Yeniden başlarsa buck'ın girişi ve Pi'nin 5 V'u osiloskopla ölçülmeli.
Marş sırasında beslemenin düşmesi

Marş, Pi beklemede çalışırken bile beslemeyi düşürüyor. Özgün buck tezgâhta 10 V kaynak civarında çıkışını kaybediyordu, değiştirince anlattığım yeniden başlamalar bitti. Takılı diyotu ve 2200 µF'lık kondansatörü yerinde bıraktım, buck IN−'nin pin 15'e bağlı olduğundan da emin oldum. Yeniden başlamalar geri gelirse marş sırasında buck'ın girişini ve Pi'nin 5 V'unu kaydedeceğim. Zero W, beslemedeki düşük gerilimi vcgencmd get_throttled ile bildiremiyor: Raspberry Pi, Zero serisinin kapsam dışı olduğunu belgeliyor.

Zero W'de gerçek zaman saati yok. NTP ile saat düzelene kadar kayıtlardaki started_at değeri imajın derleme tarihi oluyor. Telefonun hotspot'u internet sağladığında saat düzeliyor; daha önce alınan kayıtların tarihleri ise yanlış kalıyor. Yaklaşık 2 €'luk bir DS3231 ile çözülebilir, ancak henüz eklemedim. Kontakla uyandırma devresiyle birlikte kullanılacaksa ayrı bir I2C veri yolu gerekiyor (dtoverlay=i2c-gpio); uyandırma devresi 3 ve 5 numaralı pinleri kullanıyor.

  • Uzun park testini henüz tamamlamadım. Önce bir gece, ardından dört gün park ederek aküyü kontrol etmek gerekiyor. Pi 72 saat sonunda kapanmalı; blueandme-standby kapanmayı kaydetmeli ve Wi-Fi yanıt vermemeli. F36'yı çıkarıp takınca veya uyandırma devresi varsa kontağı açınca Pi yeniden başlamalı. Günlük kullanımda çalışması, uzun parkta aküyü boşaltmayacağını göstermiyor.

Kutu ve konnektör montajı

Eski kutunun boyutları 150 × 175 × 40 mm; içinde dört M3 vida yuvası var. PP-TD40 plastiği Bluetooth sinyalini geçiriyor. Çerçeve ve montaj tabanını PETG veya ASA ile basmak gerekiyor; PLA park hâlindeki araçta yumuşayabilir. Modelde sığması yeterli değil: gerçek kablo ve fişlerle de denemek, kapağı kapatmadan önce hepsini sabitlemek gerekiyor.

Mavi konnektörlü siyah Blue&Me kutusu.
Yeni devre için yeniden kullandığım orijinal Blue&Me kutusu.
Orijinal bağlantı çıkıntıları ve konnektör açıklığı görünen boş kutu.
Baskı parçayı yerleştirmeden önce kutunun içi.
İç ölçüleri ve bağlantı noktaları işaretlenmiş kutu.
Yapım sırasında kutu üzerinde kaydettiğim ölçüler. CAD ile karşılaştırmak için tuttuğum bir kayıt; esas alınacak ölçüler değil.
Boş siyah kutuya yerleştirilmiş beyaz baskı çerçeve.
Orijinal kutuda denediğim baskı çerçevelerden biri. Ara sürümlerden biri, son hâli değil.
Kutuda yerleşimi denenen Pi, mavi CAN kartı ve siyah USB ses kartı.
Parça yerleşimi denemesi: montaj tabanı üzerinde Pi, CAN modülü ve USB ses kartı. Kırmızı işaretler, bu denemede parçaların birbirine takıldığı yerler. Son yerleşimi, kablolamayı ve şase bağlantılarını göstermiyor.
Siyah kutuda beyaz baskı çerçevenin altındaki kablolu elektronik parçalar.
Tezgâhta, orijinal kutunun içindeki tamamlanmış montaj, 1 Ekim 2026. Şase hatalarını 11 Ekim'de giderdim; bu fotoğraf ondan önceki hâli ve o onarımı göstermiyor.
Kutu tabanının iki görünümü; renkli katmanlar buck dönüştürücünün, ses kartının, CAN modülünün ve delikli pertinakslı Pi'nin oturduğu yerleri gösteriyor; sağdaki görünümde baskı çerçeve yerinde.
Kutu içindeki yerleşim. Mavi: Pi ve delikli pertinaks. Mor: CAN modülü. Yeşil: fişleriyle ses kartı. Turuncu: çerçeveye iki kablo bağıyla asılan dönüştürücü. Daireler, parçaları yerleştirirken hesaba katılması gereken vida yuvalarını ve destekleri gösteriyor.
Montaj parçasının 3D modeli: dört destek üzerine oturan sarı bir çerçeve ve altında mavi bir montaj tabanı. Renkli bloklar Pi, CAN modülü, ses kartı ve dönüştürücünün yerlerini gösteriyor.
Montaj parçasının modeli. Sarı çerçeve dört vida yuvasına oturuyor; mavi parça montaj tabanı, kırmızılar kutunun kendi destekleri. Çerçevenin, tabanın, elektronik parçaların ve kapağın birbirine takılmadığını modelde kontrol ettim.

USB adaptörünü kaldırmak için ses kartının kablosunu kısalttım ve Pi'nin altındaki test pedlerine lehimledim. PP1 5 V, PP6 şase, PP22 D+, PP23 D− bağlantısı. Dönüştürücünün 5 V çıkışını da header'ın 4 ve 6 numaralı pinlerine bağladım.

Kutunun içinde alçak açıdan görünen kablolar ve konnektör düzeneği.
Kutudaki montaj ve kablo geçişlerinin yandan görünümü.

Araç konnektöründe, 2 × 16 delik kalacak ve yaklaşık 5 mm kenar payı olacak şekilde kesilmiş pertinaks üzerinde 32 kare header pini var. Pinler 0.64 mm kalınlığında, 2.54 mm aralıklı. Yalnızca gereken pinlere kablo bağlı. Konnektörü takmadan önce pin 1 ve 17 işaretlenmeli, fişteki "1" ve "17" yazılarıyla eşleştiği kontrol edilmeli.

Kutuya uzanan kablolar ve konnektör pinleri olan küçük delikli pertinaks.
Kutu açıklığındaki konnektör taşıyıcısı ve delikli pertinaks.

USB pedlerindeki kablolar sabitlenmeli ve yalıtılmalı. Ses kartı device descriptor read/64, error -71 hatasıyla kaybolursa veri kabloları ve lehimleri kontrol edilmeli. Zero W’nin USB denetleyicisini unbind işlemiyle sıfırlamamak gerekiyor; denediğimde çekirdek çöktü ve güç kesilene kadar USB çalışmadı.

Ses çalarken Wi-Fi

Zero W'de Bluetooth ve Wi-Fi aynı radyo çipini kullanıyor. Pi telefonun hotspot'una bağlıyken aşağıdaki paket kayıplarını ölçtüm. Wi-Fi'yi kapatınca müzikteki kesilmeler durdu.

Wi-FiDakikada kaybolan ses paketi
Wi-Fi açık, hotspot'a bağlı, veri aktarımı yok150–320
Açık, SSH trafiğiyle500–1200
Kapalı0

Bunu benim yerime yapması için küçük bir servis ekledim. Bluetooth ses akışlarını üç saniyede bir kontrol ediyor, müzik veya görüşme sırasında Wi-Fi'yi kapatıyor. Ses durduktan otuz saniye sonra yeniden açıyor. Yalnızca kendisi kapattıysa açtığı için bekleme modunun kapattığı Wi-Fi'ye karışmıyor.

Araçta Wi-Fi, müzik başladıktan iki saniye sonra kapanıyor. Pi'ye SSH ile bağlanmam gerektiğinde müziği duraklatıp yaklaşık 40 saniye bekliyorum.

Teşekkürler

fmntf/fiatcan ve medium.com/@fmntf adresindeki dört bölümlük yazı dizisi — Doblò 263 protokolü, PROXI'de komşuyu yankılama hilesi ve initramfs zamanlaması fikri. karolkrupa/alfa-blue-me — Alfa 159 uygulaması, karakter tablosunun bağımsız doğrulaması ve Giulietta'nın tanımlayıcı genişliği üzerine yanıtlar. terilenard/mcp2515-tja1050-wiring — ayrık besleme değişikliği ve adım 2 ile adım 5'teki fotoğraflar. Beyondlogic — Raspberry Pi CAN pin dizilimi ve overlay yapılandırması. Adım 5'teki Pi Zero W fotoğrafı Gareth Halfacree'ye aittir, CC BY-SA 2.0 lisanslıdır, Wikimedia Commons üzerinden alınmış ve burada pin konumlarıyla işaretlenmiştir.

Kod github.com/crimeofheart/giulietta-blue-me adresinde. Protokol tablolarını koddan üretiyorum. Güncel tabloyu blueandme-protocol-map komutuyla almak mümkün.