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.
- 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.
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ça | Adet | Notlar |
|---|---|---|
| Olmazsa olmaz | ||
| Raspberry Pi Zero W, 40 pinli header'ı takılı | 1 | Bluetooth 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ük | 1 | Raspberry 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ü | 1 | Yaygı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ı | 1 | Linux'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 kablo | 1 | Kartı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ı | 1 | Ben 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 kare | 32 | Sekizli dört şerit. Aracın fişine doğrudan oturuyor. |
| Delikli pertinaks şeridi, 2 × 16 delik, 5 mm kenar payıyla | 1 | Bir 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 üzeri | 1 | Marş tamponu, buck'ın girişine paralel (adım 15). |
| Diyot, 1N5822 veya 1N4007 | 1 | Marş tamponu, pin 16 ile kondansatör arasında. |
| PN2222 transistör | 1 | Kontakla 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, 1N4007 | 1 | Kontakla uyandırma, baz ile emiter arasında. |
| Direnç, 100 kΩ | 2 | Kontakla uyandırma. |
| Delikli pertinaks, 3 × 7 cm | 1 | 10 × 24 delik, 2.54 mm. Marş tamponunu ve kontakla uyandırma devresini taşır. |
| Orijinal Blue&Me kutusu | 1 | Bozuk modülün kendi kutusu. Fabrika braketine oturuyor, plastiği de Bluetooth'u geçiriyor. |
| Baskı montaj parçası: çerçeve ve montaj tabanı | 1 | PETG 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 kablo | 1 | Mikrofon devresinden kartın mikrofon girişine. |
| Direnç, 2 kΩ | 1 | Mikrofon beslemesi. |
| Direnç, 1 kΩ | 2 | Biri beslemedeki 2 kΩ dirence paralel, diğeri gerilim bölücüde. |
| Direnç, 10 kΩ | 1 | Mikrofon gerilim bölücüsü. |
| Elektrolitik kondansatör, 10 µF, 10 V veya üzeri | 1 | Mikrofonun DC geriliminin ses kartına ulaşmasını engeller. |
| İşi kolaylaştıran ek parçalar | ||
| Micro-USB OTG adaptörü | 1 | Tezgâh için. Kutunun içinde kart Pi'ye lehimli (adım 15). |
| Seramik kondansatör, 100 nF | 1 | Yalnızca CAN alıcı-vericisinin beslemesinde bir tane yoksa (adım 2). |
| Aletler | ||
| Multimetre, havya, bisturi | Olmazsa olmaz. Asıl önemlisi multimetre. | |
| Bir telefon | 1 | Olmazsa olmaz. Müziği çalacak olan telefon. |
| USB powerbank | 1 | Gerekli. 15. adıma kadar araçtaki bütün denemelerde Pi'yi bununla besledim. |
| OBD adaptörü ve Windows tablette MultiEcuScan | 1 | 10. adımdaki PROXI hizalaması için gerekli. |
| Ayarlı güç kaynağı | 1 | Tavsiye 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
120Ryazıyor, üzerinde de121. 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.
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ğer | Sonucu | |
|---|---|---|
| Kristal | 8 MHz | install.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 |
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.
MISO üzerindeki gerilim. SPI bağlantıları, alıcı-vericinin 5 V beslemesi ve CAN tarafı olduğu gibi kalıyor.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
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.
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.
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.
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:
- Bir probu kartın
VCCheader pinine koyup orada tuttum. - 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.
- Aynısını MCP2515'te (büyük olan çip) yapıp onun besleme pinini de buldum. İkisini de not ettim.
- Keseceğim bakır yol,
VCCpini 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.
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
Ö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.
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.
Kesiği multimetreyle kontrol etmek
VCCheader pini ile TJA1050 besleme pini arası artık açık devre olmalı, ötmemeli.VCCheader pini ile MCP2515 besleme pini arası ise hâlâ ötmeli. Biri tersse durup karta yeniden bakmak gerekiyor.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.
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.
121 yazan parçayı adım 1'de sökmüştüm.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.
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.
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:
- Kare ped. Pin 1 karttaki tek kare ped, diğer otuz dokuzu yuvarlak. Header zaten lehimliyse kart çevrilip lehimlere alttan bakılır.
J8yazılı çerçeve. Pin 1, çerçevenin içinde microSD kart yuvasına en yakın köşede duruyor.- Kart yuvasının kendisi. Pin 1 header'ın o ucunda duruyor.
RUNpedlerinin 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.
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ül | Pi sinyali | Fiziksel pin | Notlar |
|---|---|---|---|
| VCC (MCP2515, kesikten sonra) | 3.3 V | 1 | Yalnızca denetleyiciyi besler |
| TJA1050 beslemesi — eklediğim kablo | 5 V | 4 | Pin 2 de aynıdır |
| GND | GND | 39 | Tek şase yeter, hangi şase pini olursa olur. Bu projede pin 6 aracın şasesini taşıyor (adım 7) |
| CS | GPIO8 / CE0 | 24 | Overlay'deki spi0-0 ile eşleşir |
| MOSI | GPIO10 | 19 | Pi sürer, modül dinler |
| MISO | GPIO9 | 21 | Beslemeyi ayırmayı gerektiren sinyal hattı |
| SCK | GPIO11 | 23 | Saat |
| INT | GPIO25 | 22 | Overlay'deki interrupt=25 ile eşleşmeli |
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-statusGö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.txtGö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.
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 codeBütün testler başarılı olmalı. Protokol haritasında da Giulietta profilinin mesajları görünmeli.
03 Araçta adım 7–10
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ı.

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.


| Adım | Pin | Etiket | Bağlanacağı yer |
|---|---|---|---|
| 1 | 8 | MIC 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 |
| 1 | 24 | MIC GND (mikrofon −) | G bağlantısı, şase bağlantısı |
| 2 | 5 | AUD L | Ses fişinin ucu |
| 2 | 22 | AUD R | Ses fişinin halkası (orta) |
| 2 | 21 | AUD GND | Ses fişinin gövdesi. Fiş, ses kartının kulaklık çıkışına takılır |
| 3 | 30 | CAN-H | MCP2515 vidalı klemensi H |
| 3 | 14 | CAN-L | MCP2515 vidalı klemensi L |
| 3 | 15 | GND | G 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−) |
| 4 | 32 | IGNITION | Kontakla uyandırma: PN2222 bazına giden 100 kΩ'u. MAR'da 12 V; asla bir Pi pinine değil |
| 5 | 16 | +12V PERM | Kartın I10 deliği: diyot ve 2200 µF (marş tamponu), sonra buck IN+. Bağlarken F36 çıkarılmış olmalı |
| – | 4 | GND | Bağ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 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 | İşlev | Gerektiği yer |
|---|---|---|
| 30 / 14 | CAN-H / CAN-L — "CAN alta" / "CAN bassa" | Adım 7, bağlantı |
| 15 | Şase | Adım 7, bağlantı |
| 16 / 32 | Sürekli 12 V / kontak 12 V'u | Yalnızca adım 15. O zamana kadar bunlara dokunulmuyor. |
| 5 / 22 / 21 | Ses sol / sağ / şase | Adım 14 |
| 7 / 23 / 25 | Audio+ / Audio− / MUTE, radyoya | Belki adım 14 |
| 8 / 24 | Mikrofon, tavan döşemesinden. Yükselteçli; kendi 5–8 V beslemesine ihtiyaç duyar | Adım 14, görüşmeler |
| 3 / 19 / 20 / 4 / 31 | USB D+ / D− / VCC / şase / ekran, aracın USB girişine | Kullanı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.
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 pini | Gittiği yer |
|---|---|---|
| CAN-H | 30 | MCP2515 modülündeki H vidalı klemensi |
| CAN-L | 14 | MCP2515 modülündeki L vidalı klemensi |
| GND | 15 | Vidalı 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.
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, everythingAnahtarı MAR'a çevirdim. Çerçeveler görünmeli.
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ığı
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
- Araç uyanık mı? Anahtar MAR'da olmalı ya da bir kapı açılmalı.
- CAN-H ile CAN-L yer değiştirilir. Denemenin zararı yok.
- Şase kablosu bağlı mı? O olmadan veri yolundan hiçbir şey okunmuyor.
ip -details -statistics link show can0:bus-errorsayacı 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.- Kristalin üzerindeki yazı,
install.sh'e verilen değerle yeniden karşılaştırılır.
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 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 answerTanı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 --summaryDoblò 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?
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 bitsVerisi 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.
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
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ı.
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 --summaryKayı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.
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
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 quotesblueandme-giulietta --config /etc/blueandme/config.yaml --checkAş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-onlyBenim 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çeve | Yanıtladığı soru |
|---|---|---|
| 1 | bm_status_response | Body Computer düğümü eksik saymayı bırakıyor mu? |
| 2 | bm_proxi_response | Kilometre sayacının yanıp sönmesi duruyor mu? |
| 3 | bm_watchdog | Bir değişiklik var mı? |
| 4 | bm_audio_channel | Radyo artık Blue&Me kaynağını sunuyor ve kabul ediyor mu? |
| 5 | bm_track_time, bm_text_message | Ekranlarda 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.
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-giuliettaFiziksel 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 ID | 0d8c: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ı.
Önce bir PC'de
lsusbkartı0d8cüretici kimliğiyle listeliyor. Sonra kulaklık fişinin gövdesini USB fişinin kabuğuna göre ölçtüm: 0 V.Pi'de: kartı bulmak
OTG adaptörüyle taktım.
aplay -lvearecord -likisi de kartıcard N: Device [USB Audio Device]olarak listelemeli.Ç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.wavinstall.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:
| Servis | Ne yapar |
|---|---|
bluealsa | Bluetooth 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-aplay | müzik sesini ses kartına gönderiyor |
blueandme-sco-route | açı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-aplay | arayanı 150 ms'lik bir tamponla karta çalar |
blueandme-sco-uplink | ses 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-reconnect | açı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 onSes 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 |
|---|---|
| ☎ telefon | Kı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 / ESC | Gö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 / OK | Gö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.
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.
| Sinyal | Blue&Me pini |
|---|---|
| Sol | 5 |
| Sağ | 22 |
| Ses şasesi | 21 |
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.
| Parça | Nerede | Kontrol |
|---|---|---|
| 2 kΩ | 1c'den 5c'ye | Direnci 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ında | yaklaşı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'de | uzun bacak +'dır, çizgi −'yi gösterir; 10 V ya da daha yüksek gerilimli |
| 10 kΩ | 8c'den 12c'ye | yaklaşık 10 k |
| 1 kΩ | 12d'den − şeridine | yaklaşık 1.0 k |
| Mikrofon kablosu | uç 12e'de, gövde − şeridinde | kesilmiş 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'ya | takılı kalır |
| 5 V kablosu | 1a'dan Pi pin 2'ye | yalnı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çülen | Değ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 beslenince | 2.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ık | tepeler −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
- 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.
- 5 V'luk geçici kabloyu satır 26'dan çıkardım (kontakla uyandırmanın tezgâh testi içindi).
- 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.
- Buck: IN+'ya kırmızı, IN−'ye siyah bir kablo lehimledim, pedlerin üzerine makaron geçirdim, uçlara da dupont pin taktım.
- 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ı.
sudo ~/giulietta-blue-me/preflight.sh,PREFLIGHT PASSdiyerek bitiyor. Ardındansudo ~/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)
- Blue&Me modülü sökülü. CAN kablolarını takarken
can0evden beri hâlâ yalnızca dinlemede (tx.sh status). - 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).
- F36 çekilince (aşağıdaki sigorta kutusunda) pin 16 0 V'a düşmeli. Sonra geri takılıyor.
- CAN: 30 H'ye, 14 L'ye ve − şeridinin kablosu pin 15'e.
ip -s -d link show can0gelen ç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
- 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ı).
- 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.
- 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.
- 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
- 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.
- Direksiyon: parça atlama, duraklatma, asistan, aramayı açma ve reddetme.
Sonra kontak (adım 15)
- Kontak kapalı. Satır 26'daki kabloyu pin 32'ye taktım.
- 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)
Breadboard'a da Pi'nin herhangi bir pinine de asla gitmez. Pin 16'ya dokunmadan önce F36'yı çekiyorum.
- Anahtarı çıkardım. F36'yı çektim.
- 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).
- Pi'yi kapattım (halt). LED'i sönünce Pi'nin PWR kablosunu powerbank'ten çıkarıp buck'ın USB soketine taktım.
- 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.
- 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.
- Bırakırken iki seçenek var: ya
tx.sh onile 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.
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.
/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).
| Durum | Pi'de | Aküden |
|---|---|---|
| Çalışıyor: telefon bağlı, müzik ya da görüşme | 1.0–1.07 W | motor çalışıyor |
| Park hâlinde, bekleme | 0.63 W | yaklaşık 65 mA, günde 1.6 Ah |
| 72 saat bekleme | yaklaşık 4.7 Ah, 70 Ah'lik bir akünün aşağı yukarı %7'si | |
| Bekleme süresinden sonra, kapalı (halt) | 0.22 W | yaklaşı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
| Konu | Nası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. |
| Mikrofon | 14. 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ılama | CAN 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.
| Parça | Nerede | Kontrol |
|---|---|---|
| PN2222 | E 21c'de, B 22c'de, C 23c'de | multimetre 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 − şeridine | yaklaşık 100 k, breadboard dışında ölçülmüş |
| 100 kΩ | 22d'den 26d'ye | yaklaşık 100 k |
| Köprü kablosu | 21a'dan − şeridine | emiterin şasesi |
| Kablo | 23e'den Pi pin 5'e | pin 5: iç sıra, microSD ucundan üçüncü pin |
| Kablo | 26e'den araç pin 32'ye | kontak 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.
| Nereden | Nereye | Not |
|---|---|---|
| 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ç şasesi | buck IN− | araç testi için − şeridi. Kalıcı olarak: pin 15 → pertinaks K1, pertinaks L1 → buck IN− |
| Buck USB soketi | Pi PWR portu | USB 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.
- 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 kΩ ile bir 1 kΩ yan yana, bacakları iki uçta birbirine bükülmüş (yaklaşık 670 Ω); bir uç Pi pin 2 kablosuna.
- 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.
- B: 10 kΩ'un diğer ucu, ikinci 1 kΩ ve mikrofon fişinin uç kablosu.
- G: o 1 kΩ'un diğer ucu, araç pinleri 24 ve 15, mikrofon fişinin gövdesi ve Pi şase kablosu.
- 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).
- 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.
Ü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ça | Delikler | Kontrol |
|---|---|---|
| PN2222 | E B3'te, B B5'te, C B7'de; düz yüz C satırına doğru | E, 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 |
| 1N4007 | F1'den F5'e, çizgi F5'te | çizgi bazın sütununa gider |
| Diyot | J10'dan J6'ya, çizgi J6'da | 1N5822 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ık | uzun bacak +'dır, gövdedeki çizgi −'yi gösterir. Ters takılırsa patlayabilir |
| Kablolar | Pi 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 |
| Yollar | B3–B1–G1, B5–F5, B7–B9, E9–G9; I10–J10, J6–K6–L6–L10, K1–L1–L3 | altta; başka hiçbir delik birleştirilmez |
- Ö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.
- İ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.
- 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.
- 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.
- Yedi kablo üstten girer, altta lehimlenir.
- 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.
- 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=0x0beslemenin kararlı olduğunu kanıtlamıyor. Yeniden başlarsa buck'ın girişi ve Pi'nin 5 V'u osiloskopla ölçülmeli.
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-standbykapanmayı 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.








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.

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.

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-Fi | Dakikada kaybolan ses paketi |
|---|---|
| Wi-Fi açık, hotspot'a bağlı, veri aktarımı yok | 150–320 |
| Açık, SSH trafiğiyle | 500–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.