İçindekiler:

Yeni Araba Stereo ile CAN Direksiyon Düğmelerini Tutmak için Özel Arduino: 9 Adım (Resimlerle)
Yeni Araba Stereo ile CAN Direksiyon Düğmelerini Tutmak için Özel Arduino: 9 Adım (Resimlerle)

Video: Yeni Araba Stereo ile CAN Direksiyon Düğmelerini Tutmak için Özel Arduino: 9 Adım (Resimlerle)

Video: Yeni Araba Stereo ile CAN Direksiyon Düğmelerini Tutmak için Özel Arduino: 9 Adım (Resimlerle)
Video: OTOMATİK VİTES ARABA Nasıl Kullanılır ? EN GÜNCEL #direksiyondersi #otomatikvitesdireksiyoneğitimi 2024, Temmuz
Anonim
Yeni Araba Stereo ile CAN Direksiyon Düğmelerini Tutmak için Özel Arduino
Yeni Araba Stereo ile CAN Direksiyon Düğmelerini Tutmak için Özel Arduino
Yeni Araba Stereo ile CAN Direksiyon Düğmelerini Tutmak için Özel Arduino
Yeni Araba Stereo ile CAN Direksiyon Düğmelerini Tutmak için Özel Arduino
Yeni Araba Stereo ile CAN Direksiyon Düğmelerini Tutmak için Özel Arduino
Yeni Araba Stereo ile CAN Direksiyon Düğmelerini Tutmak için Özel Arduino

Volvo V70 -02'mdeki orijinal araba stereosunu yeni bir stereo ile değiştirmeye karar verdim, böylece mp3, bluetooth ve eller serbest gibi şeylerin keyfini çıkarabileceğim.

Arabamda stereo için hala kullanmak istediğim bazı direksiyon kontrolleri var. Bunun bir sorun olmasını beklemiyordum çünkü piyasada arabamla uyumlu olması gereken birkaç adaptör var. Ancak çok geçmeden öyle olmadıklarını öğrendim! (Biraz farklı bir CAN protokolü nedeniyle V70 adaptörlerinin -02 arabalarla ilgili sorunları olabilir gibi görünüyor.)

Öyleyse ne yapmalı? Eski stereo kalsın mı? Çalışmayan düğmelerle bir hayat yaşamak mı? Tabii ki değil! Piyasada çalışan bir adaptör yoksa, bir tane oluşturmamız gerekecek!

Bu talimat, direksiyon simidi düğmelerinin CAN veriyolu üzerinden iletişim kurduğu araçlara uygulanabilir (bazı uyarlamalarla).

Adım 1: Komutları Stereoya Nasıl Göndereceğinizi Öğrenin

Stereoya Komutların Nasıl Gönderileceğini Öğrenin
Stereoya Komutların Nasıl Gönderileceğini Öğrenin
Stereoya Komutların Nasıl Gönderileceğini Öğrenin
Stereoya Komutların Nasıl Gönderileceğini Öğrenin

Yapmanız gereken ilk şey, stereonun ne tür bir uzak giriş beklediğini bulmaktır. Tipik olarak üreticiler size bunu söylemez ve muhtemelen tersine mühendislik için çalışan uzaktan kumandalara erişiminiz yoktur.

Yeni stereo (Kenwood) için uzaktan kumanda tek bir kablodan oluşuyor ve nasıl çalıştığı hakkında hiçbir bilgi bulamadım. Bununla birlikte, uzaktan giriş için 3,5 mm jak da vardır. Bununla ilgili de bir şey öğrenemedim. Ancak, diğer markalar için 3.5 mm'lik bir jak hakkında, uç ile manşon (ve isteğe bağlı olarak halka ile manşon arasında) belirli bir direnç uygulanarak farklı komutların tanımlandığını öne süren bazı bilgiler var. Örneğin. https://forum.arduino.cc/index.php?topic=230068.0. Bu yüzden, bir devre tahtası, bir grup direnç ve stereoya takılı ve devre tahtasına bağlı 3,5 mm'lik bir fiş ile donatılmış bir denemeye karar verdim. İlk başta hiçbir şey tanınmadı, ancak stereonun bir "öğrenme modu" menüsü var ve orada komutlar çeşitli dirençler uygulanırken başarıyla ayarlanabiliyordu. Başarı!

Ancak daha sonra burada bir hata yaptığımı öğrendim: Stereo'nun öğrendiği görünen komutların hepsi gerçekten işe yaramayacaktı. Örneğin. Öğrenme modunda 30 kOhm bulundu ancak daha sonra çalışmadı ve kurduğum bazı komutlar için direnç farkı o kadar küçüktü ki daha sonra yanlış komut tetiklendi.

Bu yüzden, işlemek istediğiniz tüm uzak komutlar için dirençleri ve anahtar düğmeleri olan bir devre tahtası kullanmanızı ve aslında hepsinin çalışıp çalışmadığını test etmenizi öneririm.

Araç stereonuz aynı şekilde giriş alamıyorsa, bu çözümü uyarlamak için nasıl çalıştığını bulmanız gerekecektir. Eğer hiç çözemiyorsanız, o zaman bir probleminiz var demektir.

Adım 2: CAN Bus'a Nereye Bağlanacağınızı Bulun

CAN Bus'a Nereye Bağlanacağınızı Öğrenin
CAN Bus'a Nereye Bağlanacağınızı Öğrenin

CAN veriyoluna bağlanmak için iyi bir yer bulmanız gerekir. CAN üzerinden iletişim kuran eski bir stereoyu değiştirdiğiniz için, bunu stereonun arkasında bulabilmeniz gerekir. CAN veri yolu bir çift bükülü kablodan (CAN-L ve CAN_H) oluşur. Emin olmak için aracınız için bir kablo şemasına bakın.

Adım 3: CAN Mesajlarının Tersine Mühendislik

CAN Mesajlarının Tersine Mühendislik
CAN Mesajlarının Tersine Mühendislik

Google, hangi CAN mesajlarını dinlemeniz gerektiğini size söyleyemediği sürece, CAN veri yoluna bağlanmanız ve biraz tersine mühendislik yapmanız gerekecektir. Arduino Uno ve CAN kalkanı kullandım. (CAN kalkanına gerçekten ihtiyacınız yok, daha sonra göreceğiniz gibi, bunun yerine bir devre tahtasında bazı ucuz bileşenleri kullanabilirsiniz.)

Arabanıza bağlanırken hangi baud hızını kullanmanız gerektiğini öğrenmek için Google'a danışın. (Tipik olarak bir yüksek hız ve bir düşük hızlı CAN ağı olduğunu göreceksiniz. Düşük hızlı ağa bağlanıyorsunuz.)

Ayrıca Arduino'yu tüm CAN mesajlarını seri arayüz üzerinden günlüğe kaydedecek şekilde programlamanız gerekecek, böylece bunları bilgisayarınızdaki bir günlük dosyasına kaydedebilirsiniz. Standart Arduino IDE, verileri bir günlük dosyasına kaydetmez, ancak örn. Bunun yerine macun.

Programınızı yazmaya başlamadan önce CAN_BUS_Shield kütüphanesini kurmanız gerekmektedir.

Programınıza başlamanıza yardımcı olacak bazı sözde kodlar:

kurmak()

{ init seri bağlantı init CAN kitaplığı } loop() { CAN mesajı alınırsa { CAN mesaj formatı günlük girişini oku seriye günlük girişi yaz } }

İpuçları:

CAN kitaplığı işlevine erişmek için MCP_CAN sınıfının bir örneğini kullanacaksınız:

MCP_CAN m_can;

CAN'ı başlat:

while (m_can.begin() != CAN_OK)

{ gecikme(1000); }

CAN mesajlarını kontrol edin ve okuyun:

while(m_can.checkReceive() == CAN_MSGAVAIL)

{ // CAN kimliği, mesaj uzunluğu ve mesaj verilerini al m_can.readMsgBufID(&m_canId, &m_msgLen, m_msgBuf); // Buradaki mesaj verileriyle bir şeyler yapın }

Daha fazla yardıma ihtiyacınız olursa, daha sonraki bir adımda programıma bir bağlantı bulabilirsiniz. CAN kalkan kitaplığı ayrıca bir örnek içerir. Veya benzer bir adım içeren mviljoen2'nin talimatını kontrol edin.

Öncelikle verileri filtrelemenize yardımcı olacak bir referans dosyasına ihtiyacınız olacak. Kontağı radyo moduna alın ve herhangi bir düğmeye dokunmadan birkaç dakika boyunca her şeyi kaydedin.

Ardından her bir düğme için günlüğe kaydetmeye başlayın, düğmeye basın ve günlüğe kaydetmeyi durdurun.

İşiniz bittiğinde, adaylarınızı bulmak için referans günlüğünüzdeki her şeyi düğme günlüklerinizden filtrelemeniz gerekir. Hala çok fazla mesaj kaldığını öğrendim, bu yüzden daha fazla günlük oluşturdum ve ardından "A komutu adaylarının tüm A düğmesi dosyalarında ve referans dosyalarının hiçbirinde olmamasını" istedim. Bu bana denemek için sadece birkaç olasılık bıraktı.

Günlükler çok sayıda mesaj içerecektir, bu nedenle bunun için bir program yazmanız veya muhtemelen Excel kullanmanız gerekecektir. (İhtiyaçlarım için çok zor kodlanmış koşullara sahip bir program kullandım, bu yüzden korkarım size kullanabileceğiniz bir program sunamam.)

Bir uyarı: Bir düğmenin her zaman aynı mesajı üreteceğinden emin olamazsınız. Bazı bitler artan sayaçlar vb. içerebilir. (Ancak mesaj kimliğinin aynı olmasını hariç tutabilirsiniz.)

Bir Volvo V70 -02'niz varsa, peşinde olduğunuz şey budur:

  • Mesaj kimliği: 0x0400066Byte0: 0x00, 0x40, 0x80 veya 0xc0 (umrumda değil)
  • Byte1: 0x00 (umrumda değil)
  • Byte2: 0x00 (umrumda değil)
  • Byte3: 0x00-0x07 (umrumda değil)
  • Byte4: 0x1f (umrumda değil)
  • Byte5: 0x40 (umrumda değil)
  • Byte6: 0x40 (umrumda değil)
  • Byte7: Düğme tanımlayıcısı: 0x77 = ses açma, 0x7b = ses kısma, 0x7d = sonraki parça, 0x7e = önceki parça.

Komutları bulduğunuzu düşündüğünüzde, programı yalnızca ilginç mesajları kaydedecek şekilde değiştirmek iyi bir fikir olabilir. Doğru mesajları belirlediğinizi doğrulamak için düğmelere basarken seri günlük penceresine bakın.

Adım 4: Donanım Prototipi

Donanım Prototipi
Donanım Prototipi

Donanımınızın şunları yapabilmesi gerekir:

  1. CAN veriyolunda alınan komutları tanımlayın
  2. Komutları başka bir biçimde stereoya gönderin

Yeterli alanınız varsa, ilk kısım için bir Arduino ve bir CAN kalkanı kullanabilir ve ikinci kısım için bazı ek donanımlar ekleyebilirsiniz. Ancak bazı dezavantajlar var:

  • CAN kalkanının maliyeti
  • Boy
  • Arduino güç kaynağı, doğrudan arabalarınıza 12V bağlanırsa mutlu olmayacaktır (muhtemelen çalışacaktır ancak ömrü muhtemelen kısalacaktır).

Bunun yerine aşağıdakileri kullandım:

  • Atmega 328, "Arduino beyni". (Bazı varyantlar var, Arduino Uno'dakine eşit olanı alın. Arduino boot loader ile veya onsuz satın alabilirsiniz.)
  • Saat sinyali için 16 MHz kristal + kapasitörler.
  • MCP2551 CAN alıcı-verici.
  • MCP2515 CAN denetleyicisi.
  • TSR1-2450, 6.5-36V'u 5V'a dönüştürür. (Yazılım güç kaynağını önemsemeyeceği için prototipte kullanılmamıştır.)
  • Stereoya komut gönderirken kullanılacak olan CD4066B anahtarı.
  • Birkaç direnç. (Değerler, daha sonraki bir adımda Eagle şemalarında bulunabilir.)

Bu konfigürasyonla ilgili iyi bir şey, Arduino ve CAN kalkan kitaplığı ile tamamen uyumlu olmasıdır.

Dörtten fazla düğmeyi kullanmak istiyorsanız, CD4066B'den başka bir şey kullanmayı düşünebilirsiniz. CD4066B, her biri Atmegas GPIO pinlerinden biri tarafından kontrol edilen dört anahtar bir arada olarak tanımlanabilir. Her anahtara, stereoya giriş olarak kullanılan direnci kontrol etmek için kullanılabilecek bir direnç bağlanır. Böylece bu, dört farklı komut göndermek için kolayca kullanılabilir. Birleştirilirlerse ek direnç değerleri elde edilebilir. İşte burada daha önce bahsettiğim hata devreye giriyor. Dört düğmem var ama ikisini uzun ve kısa basmak için altı farklı komut vermek için uygulamayı planladım. Ama sonunda, bana altı çalışma kombinasyonu verecek bir direnç kombinasyonu bulamadığımı öğrendim. Bunun yerine stereoya (3,5 mm uç) bir analog çıkış sinyali bağlamak muhtemelen mümkün olacaktır. (Atmega'nın gerçek analog çıkış pinleri olmadığını ve bu nedenle bazı ek donanımların gerekli olacağını unutmayın.)

Test amacıyla prototipime bağlanmak için basit bir "araba ve stereo" simülatörü de yaptım. Hata ayıklamayı kolaylaştırır ve arabanızda oturmaktan ve program yapmaktan hoşlanmıyorsanız bunu tavsiye edebilirim.

Prototip, görüntüdeki alt devre tahtası ile gösterilmektedir. Güç kaynağı, programlama ve seri kayıt için, Atmega çipinin çıkarıldığı bir Arduino Uno'ya bağlanır.

Üst devre tahtası, prototipin ilk testi için kullanılacak araba + stereo simülatörüdür.

Prototip + simülatörün şu şekilde çalışması amaçlanmıştır:

  • Simülatör panosundaki anahtar düğmelerinden birine basın. (Bunlar direksiyondaki düğmeleriniz.)
  • Simülatör programı bir düğmeye basıldığını algıladığında, düğmeye basıldığı sürece her 70 ms'de bir karşılık gelen CAN mesajını gönderir. (Çünkü daha önce aldığım günlükler arabamda böyle çalıştığını gösteriyordu.) Ayrıca otobüsteki diğer trafiği simüle etmek için çok sayıda "önemsiz" CAN mesajı gönderecek.
  • CAN mesajları CAN veriyolunda gönderilir.
  • CAN mesajları prototip tarafından alınır.
  • MCP2515, alakasız tüm mesajları mesaj kimliğine göre atar.
  • MCP2515, işlenmesi gereken bir mesaj aldığında, bir mesajın kuyruğa alındığını gösterecektir.
  • Atmega mesajı okuyacak ve hangi butonun aktif olarak kabul edilmesi gerektiğine karar verecektir.
  • Atmega ayrıca son mesajın ne zaman alındığını da takip edecek, belirli bir süre sonra düğme bırakılmış sayılacak. (CAN mesajları, bir düğmeye basıldığını veya bırakıldığını değil, yalnızca bir düğmeye basıldığını gösterir.)
  • Bir düğme etkin olarak kabul edilirse, CD4066B'deki bir veya daha fazla anahtar etkinleştirilecektir.
  • Simülatör (artık stereonuz olarak işlev görür), uç ile manşon arasında bir direnç uygulandığını algılayacaktır. (Uç 3.3V'a ve bir direnç üzerinden analog giriş pinine bağlanır. Herhangi bir komut aktif olmadığında bu pin 3.3V okuyacaktır, bir komut aktif olduğunda değer düşecek ve komutu tanımlayacaktır.
  • Bir komut aktifken ilgili led de aktif olacaktır. (Butonlarımın ikisi için farklı uzun/kısa basma kullanmayı planladığım için altı adet led var.)

Prototip donanımı hakkında daha fazla ayrıntı için, sonraki bir adımda Eagle şemalarına bakın.

Simülatör kartı donanımı hakkında ek ayrıntılar:

  • 16 MHz kristal
  • 22 pF kapasitörler
  • LED özelliklerine göre LED dirençleri seçilmelidir.
  • A7 ve 3.3V'ye bağlı direnç, örneğin seçin. 2kOhm (kritik değil).
  • MCP2551 ve MCP2515'e bağlı dirençler pull-up / pull-down şeklindedir. Seçin, ör. 10 kOhm.

(Ya da isterseniz simülatörün "CAN kısmı" için CAN kalkanını kullanabilirsiniz.)

Donanımı tasarlarken Atmega pinlerinin Arduino pinlerine nasıl eşlendiğini bilmeniz önemlidir.

(Doğrudan CD 4066B'ye herhangi bir led bağlamayın, sadece düşük bir akımı kaldırabilir. Çıkışı ilk test ettiğimde denedim ve çip işe yaramaz hale geldi. İyi tarafı, birkaç tane aldım çünkü sadece birkaç tane aldım. çok ucuzlar.)

Adım 5: Sigorta Programlama

Belki önceki adımda prototipin MCP2515'e saat sinyali üretmek için ayrı bir bileşeni olmadığını fark etmişsinizdir. Bunun nedeni, kullanabileceğimiz Atmega saat sinyali olarak kullanılan 16 MHz'lik bir kristalin zaten mevcut olmasıdır. Ancak onu doğrudan MCP2515'e bağlayamayız ve varsayılan olarak Atmega'da saat çıkış sinyali yoktur.

(İsterseniz bu adımı atlayabilir ve bunun yerine ekstra saat donanımını ekleyebilirsiniz.)

Ancak, GPIO pinlerinden birinde saat çıkış sinyalini etkinleştirmek için "sigorta programlama" adı verilen bir şey kullanabiliriz.

Öncelikle Arduino IDE'niz tarafından kullanılan "boards.txt" adlı bir dosyayı bulmanız gerekecek. Arduino Uno girişini kopyalamanız, ona yeni bir ad vermeniz ve low_fuses değerini değiştirmeniz gerekecektir.

Yeni tahtam şöyle görünüyor:

################################################# ############ # Arduino Uno tabanlı # Değişiklikler: # low_fuses, 16 MHz saati etkinleştirmek için 0xff'den 0xbf'ye değiştirildi # Atmega PB0/pin 14'te = Arduino D8

clkuno.name=Saat çıkışı (Arduino Uno)

clkuno.upload.protocol=arduino clkuno.upload.maximum_size=32256 clkuno.upload.speed=115200 clkuno.bootloader.low_fuses=0xbf clkuno.bootloader.high_fuses=0xde clkuno.bootloader.extended_cles..bootloader.file=optiboot_atmega328.hex clkuno.bootloader.unlock_bits=0xff clkuno.bootloader.lock_bits=0xcf clkuno.build.mcu=atmega328p clkuno.build.f_cpu=16000000L clkuno.build.core=16000000L clkuno.build.core

##############################################################

Kontrol biti 0'a ayarlanarak saat çıkışının etkinleştirildiğini unutmayın.

Pano yapılandırma dosyasında yeni panoyu oluşturduğunuzda, Atmega'ya yeni bir önyükleyici yazmanız gerekecektir. Bunu yapmanın çeşitli yolları var, https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard'da açıklanan yöntemi kullandım.

Bunu yaptıktan sonra, Atmega'ya bir program yüklerken Arduino Uno'yu değil, yeni tahta tipinizi seçmeyi unutmayın.

6. Adım: Yazılım

Yazılım
Yazılım

Bazı yazılımlar ekleyerek aptal donanımı akıllı hale getirme zamanı.

Prototip için bazı sözde kodlar:

son AlınanZaman = 0

lastReceivedCmd = yok cmdTimeout = 100 setup() { watchdog'u etkinleştir D4-D7 pinlerini çıkış pinleri olarak yapılandır init CAN setup CAN filtresi } loop() { watchdog if (CAN mesajı alınır) { her bir düğme komutu için { CAN mesajı aitse düğme komutu { lastReceivedTime = şimdi lastReceivedCmd = cmd } } } şimdi ise > lastReceivedTime + cmdTimeout { lastReceivedCmd = yok } her düğme komutu için { lastReceivedCmd düğme komutu ise { set komut pin çıktısı = açık } başka { komut pin çıkışını ayarla = kapalı } } }

cmdTimeout, bırakılan son etkin düğmeyi düşünmeden önce ne kadar beklememiz gerektiğine karar verir. Düğme CAN mesaj komutları yaklaşık olarak her 70 ms'de bir gönderildiğinden, bir miktar marjla bundan daha büyük olması gerekir. Ancak çok büyükse, bir gecikme deneyimi olacaktır. Yani 100 ms iyi bir aday gibi görünüyor.

Ama bekçi köpeği nedir? Bir çökme durumunda bizi kurtarabilecek kullanışlı küçük bir donanım özelliğidir. Ses açma komutu aktifken programın çökmesine neden olan bir hatamız olduğunu hayal edin. O zaman maksimum ses seviyesinde stereo ile biterdik! Ancak bekçi köpeği belirli bir süre için sıfırlanmazsa, beklenmedik bir şey olduğuna karar verir ve basitçe bir sıfırlama yapar.

geçersiz kurulum()

{ // döngü için maksimum 250 ms'ye izin ver wdt_enable(WDTO_250MS); // diğer init öğeleri } void loop() { wdt_reset(); // şeyler yapmak }

filtre OLABİLİR Mİ? CAN denetleyicisini, filtreyle eşleşmeyen tüm mesajları atacak şekilde yapılandırabilirsiniz, böylece yazılımın umursamadığımız mesajlarla zaman kaybetmesine gerek kalmaz.

imzasız uzun maske = 0x1fffffff; // 29 başlık bitinin tamamını maskeye dahil et

imzasız uzun filterId = 0x0400066; // Biz sadece bu CAN mesajını önemsiyoruz id m_can.init_Mask(0, CAN_EXTID, mask); // Maske 0, filtre 0-1 için geçerlidir m_can.init_Mask(1, CAN_EXTID, mask); // Maske 1, filtre 2-5 için geçerlidir m_can.init_Filt(0, CAN_EXTID, filterId); m_can.init_Filt(1, CAN_EXTID, filterId); m_can.init_Filt(2, CAN_EXTID, filterId); m_can.init_Filt(3, CAN_EXTID, filterId); m_can.init_Filt(4, CAN_EXTID, filterId); m_can.init_Filt(5, CAN_EXTID, filterId);

Filtre + maskenin nasıl kurulacağı hakkında daha fazla ayrıntı için CAN kitaplık kodunu ve CAN denetleyici belgelerini kontrol edin.

CAN denetleyicisini, bir mesaj (filtrelenmemiş) alındığında bir kesinti oluşturacak şekilde de ayarlayabilirsiniz. (Yukarıdaki örneğe dahil değil ama programımda bunun için bazı kodlar var.) Bu durumda gerçekten herhangi bir değer katmıyor ve programlamaya alışkın değilseniz kafa karıştırıcı olabilir.

Özetle prototip yazılım buydu. Ancak simülatör panosu için de bazı kodlara ihtiyacımız var:

lastSentTime = 0

minDelayTime = 70 setup() { A0-A5 pinlerini çıkış pinleri olarak yapılandırın D4-D7 pinlerini dahili pullup ile giriş pinleri olarak yapılandırın. init CAN } loop() { "gereksiz" gönder can msg set activeButton = her buton için yok { butona basılırsa { aktifButton = butonu ayarla } } activeButton != yok { şimdi ise > lastSentTime + minDelayTime { buton komutu mesaj gönderebilir } lastSentTime = şimdi ayarla } inval = A7 pinini oku foreach(cmd) { if (min < inval < max) { led açık } else { led kapalı } } 1 ms bekle }

Bu, yaklaşık olarak her ms'de sürekli olarak "gereksiz" CAN mesajları gönderir ve bir düğmeye basıldığında her 70 ms'de bir karşılık gelen komutu gönderir.

Her bir butona ait min ve max değişkenleri için uygun değerleri bulmak için farklı butonlara basarken A7 pinindeki girişi loglamanız gerekebilir. (Ya da hesaplayabilirsiniz, ancak girişi okumak size daha kesin değerler verecektir.)

Pin modlarını programlarken biraz dikkatli olmanız gerekiyor. Yanlışlıkla dahili pullup'ı çıkış pinleri olarak kullanmayı amaçlayan pinleri ayarlarsanız, çıkışı yüksek olarak ayarladığınızda Arduino'nuza zarar verecek potansiyel bir kısayol oluşturacaksınız.

Programlarımı kontrol etmek isterseniz buradan indirilebilir:

  • CAN mesajları günlük programı
  • Simülatör tahtası için program
  • Prototip / son pano için program

Bu programların buradaki sözde kodla gerçekten eşleşmediğinin farkında olmalısınız, gerçekten gerekli olmayan birçok "ekstra" şey içerirler ve nesne yönelimli programlamaya aşina değilseniz, muhtemelen okuması biraz zor olabilir..

Adım 7: Son Donanım

Son Donanım
Son Donanım
Son Donanım
Son Donanım
Son Donanım
Son Donanım

Programınızdan memnun olduğunuzda (simülatör kartıyla son testten sonra prototipi arabada test etmeyi unutmayın) gerçek donanımı kurmanın zamanı gelmiştir.

Burada üç seçeneğiniz var:

  • Hızlı ve kirli - malzemeleri bir PCB prototip kartında lehimleyin.
  • Hardcore DIY - kendi PCB'nizi kazıyın.
  • Tembel yol - bileşenleri lehimlemek için profesyonel bir PCB sipariş edin.

Aceleniz yoksa son seçeneği önerebilirim. Sadece bunun gibi küçük bir PCB'ye ihtiyacınız varsa, Çin'den sipariş etmek çok ucuz. (Ve sonra muhtemelen yaklaşık on parça alacaksınız, böylece bazı lehimleme hatalarını karşılayabilirsiniz.)

PCB sipariş etmek için tasarımınızı Gerber formatında göndermeniz gerekir. Bunun için çeşitli yazılımlar var. Tavsiye edebileceğim Eagle kullandım. Öğrenmek için birkaç saat bekleyebilirsiniz, ancak daha sonra iyi çalışır. Bunun gibi küçük tahtalar için ücretsiz olarak kullanabilirsiniz.

Tasarımı yaparken dikkatli olun. Yanlış bir şey yaptığınızı öğrenmek için teslimat için dört hafta beklemek istemezsiniz.

(Lehimleme becerileriniz iyiyse yüzeye monte bileşenler için tasarlayabilir ve gerçekten küçük bir adaptör alabilirsiniz. Ben almadım.)

Daha sonra örn. https://www.seeedstudio.com/fusion_pcb.html. Gerber dosyalarını tasarımınızdan nasıl oluşturacağınızla ilgili talimatları izleyin. Tamam olduğundan emin olmak için sonucun bir önizlemesini de alabilirsiniz.

(Sonunda R4-R7 için şematik resimde listelenenden başka dirençler seçmek zorunda kaldım. Bunun yerine 2k, 4.7k, 6.8k ve 14.7k kullandım.)

Ve unutmayın - Atmega pin numaralandırmasını Arduino pin numaralandırmasıyla karıştırmayın!

Atmega çipini doğrudan lehimlemeyip soket kullanmanızı tavsiye ederim. Ardından, yeniden programlamanız gerektiğinde kolayca kaldırabilirsiniz.

Adım 8: Araba Montajı

Araba Montajı
Araba Montajı
Araba Montajı
Araba Montajı

Şimdi en eğlenceli kısma geldik - arabanıza monte edin ve kullanmaya başlayın! (Bunun için bir kasa yaptıktan / satın aldıktan sonra.)

Prototipi arabanızda zaten tam olarak test ettiyseniz, her şey mükemmel çalışmalıdır.

(Daha önce de belirttiğim gibi, bazı dirençleri değiştirmek ve programımda bazı değişiklikler yapmak zorunda kalmadım.)

Ayrıca stereonun arkasına mı yoksa başka bir yere mi monte etmeniz gerektiğini düşünün. Torpido gözümün üzerinde, torpido gözünün içinden hiçbir şeyi ayırmadan ulaşabileceğim iyi bir yer buldum. Daha sonra yükseltmeye karar verirsem bu yararlı olabilir.

Sonunda düğmelerim tekrar çalışıyor! Onlarsız iki ay nasıl hayatta kalabilirim?

9. Adım: Gelecekteki İyileştirmeler

Belirtildiği gibi, bunun 2.0 versiyonunu yaparsam, daha fazla esneklik için 4066B'yi başka bir şeyle (muhtemelen bir dijital potansiyometre) değiştireceğim.

Ayrıca yapabileceğiniz birçok başka şey var. Örneğin. bir bluetooth modülü ekleyin ve telefonunuz için bir uzaktan kumanda uygulaması yapın. Veya bir gps modülü, eve yakın olduğunuzda sesi otomatik olarak yükseltebilir ve tüm komşularınızın harika müziğinizin keyfini çıkarabilmesi için "pencereleri kapat" CAN mesajını gönderebilirsiniz.

Önerilen: