Mündəricat:

Xüsusi Arduino, CAN Sükan düymələrini Yeni Avtomobil Stereo ilə saxlayacaq: 9 Addım (Şəkillərlə birlikdə)
Xüsusi Arduino, CAN Sükan düymələrini Yeni Avtomobil Stereo ilə saxlayacaq: 9 Addım (Şəkillərlə birlikdə)

Video: Xüsusi Arduino, CAN Sükan düymələrini Yeni Avtomobil Stereo ilə saxlayacaq: 9 Addım (Şəkillərlə birlikdə)

Video: Xüsusi Arduino, CAN Sükan düymələrini Yeni Avtomobil Stereo ilə saxlayacaq: 9 Addım (Şəkillərlə birlikdə)
Video: Lesson 3: Text to Speech Talking Robot PICAR-X Raspberry Pi Smart Robot car by SunFounder 2024, Iyul
Anonim
Xüsusi Arduino, CAN Sükan düymələrini Yeni Avtomobil Stereo ilə saxlayacaq
Xüsusi Arduino, CAN Sükan düymələrini Yeni Avtomobil Stereo ilə saxlayacaq
Xüsusi Arduino, CAN Sükan düymələrini Yeni Avtomobil Stereo ilə saxlayacaq
Xüsusi Arduino, CAN Sükan düymələrini Yeni Avtomobil Stereo ilə saxlayacaq
Xüsusi Arduino, CAN Sükan düymələrini Yeni Avtomobil Stereo ilə saxlayacaq
Xüsusi Arduino, CAN Sükan düymələrini Yeni Avtomobil Stereo ilə saxlayacaq

Volvo V70 -02 -dəki orijinal avtomobil stereosunu yeni bir stereo ilə əvəz etmək qərarına gəldim ki, mp3, bluetooth və səs ucaldan kimi şeylərdən zövq alım.

Avtomobilimdə hələ də istifadə etmək istədiyim stereo üçün bəzi sükan idarəediciləri var. Bunun problem olacağını gözləmirdim, çünki bazarda mənim avtomobilimə uyğun olan bir neçə adapter var. Ancaq tezliklə bunların olmadığını öyrəndim! (Görünür V70 üçün adapterlər, bir az fərqli CAN protokolu səbəbiylə -02 avtomobildə problem yaşaya bilər.)

Bəs onda nə etməli? Köhnə stereo saxlansın? İşləməyən düymələrlə bir həyat yaşayırsınız? Əlbəttə yox! Bazarda işləyən bir adapter yoxdursa, onda bir qurmaq məcburiyyətindəyik!

Bu təlimat, sükan düymələrinin CAN avtobusu üzərindən ünsiyyət qurduğu avtomobillərə (bəzi uyğunlaşmalarla) tətbiq edilə bilər.

Addım 1: Stereoya əmrlərin necə göndəriləcəyini öyrənin

Stereoya necə əmr göndəriləcəyini öyrənin
Stereoya necə əmr göndəriləcəyini öyrənin
Stereoya necə əmr göndəriləcəyini öyrənin
Stereoya necə əmr göndəriləcəyini öyrənin

Etməli olduğunuz ilk şey, stereonun hansı növ uzaqdan giriş gözlədiyini öyrənməkdir. Tipik olaraq istehsalçılar bunu sizə deməyəcəklər və ehtimal ki, tərs mühəndislik üçün işləyən uzaqdan idarəetmə cihazlarına da daxil ola bilməzsiniz.

Yeni stereomun (Kenwood) pultu tək bir teldən ibarətdir və necə işlədiyinə dair heç bir məlumat tapa bilməmişəm. Bununla birlikdə, uzaqdan giriş üçün 3,5 mm jak da var. Mən də bu barədə heç nə öyrənə bilmədim. Ancaq digər markalar üçün 3,5 mm jak haqqında bəzi məlumatlar var ki, uc və qol arasında (və isteğe bağlı olaraq üzük və manşet arasında) xüsusi müqavimət tətbiq edilərək fərqli əmrlər təyin olunur. Məsələn, https://forum.arduino.cc/index.php?topic=230068.0. Buna görə bir çörək taxtası, bir dəstə rezistor və stereoya qoşulmuş və çörək taxtasına qoşulmuş 3,5 mm fiş ilə təchiz olunmuş bir cəhd verməyə qərar verdim. Əvvəlcə heç bir şey tanınmadı, ancaq stereonun "öyrənmə rejimi" menyusu var və orada müxtəlif müqavimət tətbiq edərkən əmrlər uğurla qurula bilər. Uğur!

Ancaq sonradan bildim ki, burada səhv etmişəm: Stereonun öyrəndiyi əmrlərin heç də hamısı işləməyəcəkdir. Məsələn, 30 kOhm öyrənmə rejimində tapıldı, lakin sonradan işləmədi və bəzi əmrlər üçün müqavimət fərqi o qədər kiçik idi ki, sonradan səhv əmr işə salındı.

Buna görə idarə etmək istədiyiniz bütün uzaq əmrlər üçün müqavimət və açar düymələri olan bir çörək taxtasından istifadə etməyi və əslində hamısının işləyəcəyini sınamağı məsləhət görürəm.

Avtomobilinizin stereosu eyni şəkildə giriş ala bilmirsə, bu həll yolunu uyğunlaşdırmaq üçün necə işlədiyini anlamalı olacaqsınız. Ümumiyyətlə başa düşə bilmirsinizsə, probleminiz var.

Addım 2: CAN Avtobusuna Harada Bağlanacağınızı Tapın

CAN Avtobusuna Harada Bağlanılacağını Tapın
CAN Avtobusuna Harada Bağlanılacağını Tapın

CAN avtobusuna qoşulmaq üçün yaxşı bir yer tapmalısınız. CAN üzərindən ünsiyyət quran köhnə bir stereonu əvəz etdiyiniz üçün bunu stereonun arxasında tapa bilərsiniz. CAN avtobusu bir cüt bükülmüş teldən (CAN-L və CAN_H) ibarətdir. Əmin olmaq üçün avtomobilinizin elektrik sxeminə baxın.

Addım 3: CAN Mesajlarının Ters Mühəndisliyi

CAN Mesajlarının Tərs Mühəndisliyi
CAN Mesajlarının Tərs Mühəndisliyi

Google sizə hansı CAN mesajlarını dinləməli olduğunuzu söyləmədiyi təqdirdə, CAN avtobusuna qoşulmalı və tərs mühəndislik etməlisiniz. Arduino Uno və CAN qalxanı istifadə etdim. (CAN qalxanına həqiqətən ehtiyacınız yoxdur, daha sonra görəcəksiniz ki, bunun əvəzinə çörək taxtasında bəzi ucuz komponentlərdən istifadə edə bilərsiniz.)

Avtomobilinizə qoşularkən nə qədər tezlik istifadə etməli olduğunuzu öyrənmək üçün Google -a müraciət edin. (Tipik olaraq yüksək sürətli və aşağı sürətli CAN şəbəkəsi olduğunu görəcəksiniz. Aşağı sürətli şəbəkəyə qoşulursunuz.)

Arduino -nu bütün CAN mesajlarını serial interfeysi üzərindən daxil etmək üçün proqramlaşdırmalısınız ki, onları kompüterinizdəki bir qeyd faylına saxlaya biləsiniz. Standart Arduino IDE, məlumatları bir günlük faylına saxlamayacaq, ancaq istifadə edə bilərsiniz. Əvəzində macun.

Proqramınızı yazmağa başlamazdan əvvəl CAN_BUS_Shield kitabxanasını qurmalısınız.

Proqramınıza başlamağınıza kömək edəcək bir neçə yalançı kod:

qurmaq()

{init serial bağlantısı init CAN kitabxanası} loop () {CAN mesajı alınarsa {read CAN message format log input write log log to serial}}

Göstərişlər:

CAN kitabxana funksiyasına daxil olmaq üçün MCP_CAN sinifindən istifadə edəcəksiniz:

MCP_CAN m_can;

Init CAN:

isə (m_can.begin ()! = CAN_OK)

{gecikmə (1000); }

CAN mesajlarını yoxlayın və oxuyun:

while (m_can.checkReceive () == CAN_MSGAVAIL)

{// CAN id, mesaj uzunluğu və mesaj məlumatlarını əldə edin m_can.readMsgBufID (& m_canId, & m_msgLen, m_msgBuf); // Buradakı mesaj məlumatları ilə bir şey edin}

Daha çox yardıma ehtiyacınız olarsa, proqramımın bir keçidini sonrakı mərhələdə tapa bilərsiniz. CAN qalxan kitabxanasına bir nümunə də daxildir. Və ya oxşar bir addımı ehtiva edən mviljoen2 -nin təlimatını yoxlayın.

Əvvəlcə məlumatları süzgəcdən keçirmək üçün bir istinad sənədinə ehtiyacınız olacaq. Kontaktı radio rejiminə keçirin və heç bir düyməyə toxunmadan hər şeyi bir neçə dəqiqə qeyd edin.

Sonra düymələrin hər biri üçün girişə başlayın, düyməni basın və girişi dayandırın.

İşiniz bitdikdə, namizədlərinizi tapmaq üçün istinad qeydlərinizdəki hər şeyi düymə qeydlərinizdən süzgəcdən keçirməlisiniz. Hələ bir çox mesajın qaldığını öyrəndim, buna görə də daha çox qeydlər hazırladım və sonra "A əmrinə namizədlərin bütün A düyməli fayllarda və istinad sənədlərinin heç birində olmamasını" tələb etdim. Mənə sınamaq üçün yalnız bir neçə imkan verildi.

Günlüklərdə bir çox mesaj olacaq, buna görə bunun üçün bir proqram yazmalı və ya bəlkə də Excel -dən istifadə etməlisiniz. (Ehtiyaclarım üçün çox çətin kodlu şərtləri olan bir proqram istifadə etdim, buna görə də istifadə edə biləcəyiniz bir proqramı təklif edə bilməyəcəyimdən qorxuram.)

Bir xəbərdarlıq sözü: Bir düymənin həmişə eyni bir mesaj verəcəyinə əmin ola bilməzsiniz. Bitlərin bəzilərində artan sayğaclar və s. Ola bilər (mesaj idinin eyni olmasını istisna edə bilərsiniz.)

Bir Volvo V70 -02 -yə sahib olsanız, budur:

  • Mesaj id: 0x0400066Byte0: 0x00, 0x40, 0x80 və ya 0xc0 (fərq etməz)
  • Bayt1: 0x00 (fərq etməz)
  • Bayt2: 0x00 (fərq etməz)
  • Bayt3: 0x00-0x07 (fərq etməz)
  • Bayt4: 0x1f (fərq etməz)
  • Bayt 5: 0x40 (fərq etməz)
  • Bayt 6: 0x40 (fərq etməz)
  • Bayt7: Düymə identifikatoru: 0x77 = səsi artır, 0x7b = həcmi azaldır, 0x7d = sonrakı mahnı, 0x7e = əvvəlki mahnı.

Əmrləri tapdığınıza inandığınız zaman proqramı yalnız maraqlı mesajları qeyd edəcək şəkildə dəyişdirmək yaxşı bir fikir ola bilər. Doğru mesajları təyin etdiyinizi yoxlamaq üçün düymələri basarkən serial giriş pəncərəsinə baxın.

Addım 4: Avadanlıq Prototipi

Avadanlıq Prototipi
Avadanlıq Prototipi

Avadanlığınızın bacarması lazımdır:

  1. CAN avtobusunda alınan əmrləri müəyyənləşdirin
  2. Stereoya başqa formatda əmrlər göndərin

Kifayət qədər yeriniz varsa, birinci hissə üçün bir Arduino və CAN qalxanı istifadə edə bilərsiniz, ikincisi üçün əlavə avadanlıq əlavə edə bilərsiniz. Ancaq bəzi çatışmazlıqlar var:

  • CAN qalxanının dəyəri
  • Ölçü
  • Arduino enerji təchizatı birbaşa 12V avtomobillərinizə qoşulduqda xoşbəxt olmayacaq (çox güman ki, işləyəcək, amma ömrü qısalacaq).

Bunun əvəzinə aşağıdakıları istifadə etdim:

  • Atmega 328, "Arduino beyni". (Bəzi variantlar var, Arduino Uno ilə eyni olanı alın. Arduino yükləyicisi ilə və ya olmadan satın ala bilərsiniz.)
  • Saat siqnalı üçün 16 MHz kristal + kondansatörler.
  • MCP2551 CAN ötürücü.
  • MCP2515 CAN nəzarətçisi.
  • TSR1-2450, 6.5-36V-u 5V-ə çevirir. (Prototipdə istifadə edilmir, çünki proqram enerji təchizatı ilə maraqlanmayacaq.)
  • Stereoya əmr göndərərkən istifadə ediləcək CD4066B açarı.
  • Bir neçə rezistor. (Dəyərləri sonrakı mərhələdə Eagle sxemlərində tapa bilərsiniz.)

Bu konfiqurasiyanın yaxşı bir xüsusiyyəti, Arduino və CAN qalxan kitabxanası ilə tam uyğun olmasıdır.

Dörddən çox düyməni idarə etmək istəyirsinizsə, CD4066B -dən başqa bir şey istifadə etməyi düşünə bilərsiniz. CD4066B, hər biri Atmegas GPIO pinlərindən biri tərəfindən idarə olunan dörd açar kimi təsvir edilə bilər. Hər bir keçid üçün stereoya giriş olaraq istifadə olunan müqaviməti idarə etmək üçün istifadə edilə bilən bir rezistor var. Beləliklə, bu dörd fərqli əmr göndərmək üçün asanlıqla istifadə edilə bilər. Birləşdirildikdə əlavə müqavimət dəyərləri əldə edilə bilər. Daha əvvəl qeyd etdiyim səhv buradan gəlir. Dörd düyməm var, ancaq altı fərqli əmr vermək üçün onlardan ikisini uzun və qısa basaraq həyata keçirməyi planlaşdırdım. Ancaq sonda bildim ki, mənə altı işçi kombinasiyasını verəcək müqavimətçilərin birləşməsini tapa bilmədim. Yəqin ki, bunun əvəzinə stereoya (3,5 mm ucu) bir analog çıxış siqnalı bağlamaq olardı. (Unutmayın ki, Atmega -nın əsl analoq pinləri yoxdur, buna görə bəzi əlavə qurğular tələb olunacaq.)

Test məqsədləri üçün prototipimə qoşulmaq üçün sadə bir "avtomobil və stereo" simulyator da hazırladım. Hata ayırmağı asanlaşdırır və avtomobilinizdə və proqramınızda oturmaqdan zövq almadığınız halda bunu tövsiyə edə bilərəm.

Prototip, şəkildəki alt çörək lövhəsi ilə təsvir edilmişdir. Enerji təchizatı, proqramlaşdırma və ardıcıl qeydlər üçün Atmega çipinin çıxarıldığı Arduino Uno -ya əlavə olunur.

Üst çörək taxtası, prototipin ilkin sınağı üçün istifadə ediləcək avtomobil + stereo simulyatorudur.

Prototip + simulyatoru bu şəkildə işləməyi nəzərdə tutur:

  • Simulyator lövhəsindəki keçid düymələrindən birini basın. (Bunlar sükan düymələrinizdir.)
  • Simulyator proqramı bir düyməni basdıqda, düymə basıldığı müddətdə hər 70 ms -də müvafiq CAN mesajı göndərəcəkdir. (Çünki əvvəldən götürdüyüm loglar mənim maşında necə işlədiyini göstərdi.) Avtobusdakı digər trafikin simulyasiyası üçün çoxlu "lazımsız" CAN mesajları da göndərəcək.
  • CAN mesajları CAN avtobusunda göndərilir.
  • CAN mesajları prototip tərəfindən qəbul edilir.
  • MCP2515, mesaj idinə əsaslanaraq əlaqəsi olmayan bütün mesajları atır.
  • MCP2515 işlənməli olan bir mesaj aldıqda, mesajın ötürüldüyünü göstərir.
  • Atmega mesajı oxuyacaq və hansı düyməni aktiv hesab etməli olduğuna qərar verəcək.
  • Atmega, son mesajın nə vaxt alındığını da izləyəcək, müəyyən bir müddətdən sonra düymənin buraxıldığı hesab ediləcək. (CAN mesajları yalnız bir düymənin basıldığını və ya buraxıldığını deyil, aşağı olduğunu göstərir.)
  • Bir düymə aktiv sayılırsa, CD4066B -də bir və ya daha çox açar işə salınacaq.
  • Simulyator (indi stereo kimi çıxış edir) uc və qol arasında müqavimət tətbiq olunduğunu aşkar edəcək. (İpucu 3.3V -ə və bir müqavimət vasitəsi ilə analoq giriş pininə qoşulur. Heç bir əmr aktiv olmadıqda bu pin 3.3V oxuyacaq, bir əmr aktiv olduqda dəyər aşağı düşəcək və əmri müəyyən edəcək.
  • Bir əmr aktiv olduqda, müvafiq led də aktiv ediləcək. (İki düyməm üçün fərqli uzun / qısa basmağı istifadə etməyi planlaşdırdığım üçün altı led var.)

Prototip qurğusu haqqında daha ətraflı məlumat üçün, sonrakı mərhələdə Eagle sxemlərinə baxın.

Simulyator lövhəsinin aparatı haqqında əlavə məlumatlar:

  • 16 MHz kristal
  • 22 pF kondansatör
  • LED rezistorları LED xüsusiyyətlərinə görə seçilməlidir
  • A7 və 3.3V -ə qoşulan rezistor, məsələn seçin. 2kOhm (kritik deyil).
  • MCP2551 və MCP2515-ə qoşulan rezistorlar yuxarı / aşağı çəkilir. Məsələn seçin 10 kOhm.

(Və ya istəsəniz simulyatorun "CAN hissəsi" üçün CAN qalxanından istifadə edə bilərsiniz.)

Donanımı tərtib edərkən Atmega pinlərinin Arduino pinləri ilə necə müqayisə edildiyini bilməyiniz vacibdir.

(Heç bir LED -i CD 4066B -yə birbaşa bağlamayın, yalnız aşağı cərəyanı idarə edə bilər. Çalışdım ki, çıxışı ilk dəfə sınayanda çip yararsız hala düşsün. Yaxşı tərəfi odur ki, onlardan bir neçəsini almışdım. çox ucuzdur.)

Addım 5: Fuse Proqramlaşdırma

Bəlkə də əvvəlki addımda prototipin MCP2515 -ə saat siqnalı yaratmaq üçün ayrı bir komponenti olmadığını fərq etdiniz. Bunun səbəbi, istifadə edə biləcəyimiz Atmega saat siqnalı olaraq istifadə olunan 16 MHz kristalının olmasıdır. Ancaq onu sadəcə MCP2515 -ə qoşa bilmərik və standart olaraq Atmega -da heç bir saat işığı yoxdur.

(İstəsəniz, bu addımı atlaya və bunun yerinə əlavə saat aparatını əlavə edə bilərsiniz.)

Bununla birlikdə, GPIO sancaqlarından birində saatın sönməsini təmin etmək üçün "qoruyucu proqramlaşdırma" adlanan bir şeydən istifadə edə bilərik.

Əvvəlcə Arduino IDE istifadə etdiyiniz "board.txt" adlı bir fayl tapmalısınız. Arduino Uno girişini kopyalamalı, ona yeni bir ad verməli və low_fuses üçün dəyərini dəyişdirməlisiniz.

Yeni lövhəm belə görünür:

#################################################### #############Arduino Uno əsasında#Dəyişikliklər:#aşağı_sığıcılar Atmega PB0/pin 14 -də 16 MHz saat#çıxmaq üçün 0xff -dan 0xbf -ə dəyişdirildi = Arduino D8

clkuno.name = Clock out (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_tootlar.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.core

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

Diqqət yetirin ki, nəzarət biti 0 olaraq təyin olunmaqla aktivləşdirilir.

Lövhələr konfiqurasiya sənədində yeni bir lövhə yaratdıqdan sonra Atmega -ya yeni bir yükləyici yükləməlisiniz. Bunun müxtəlif yolları var, https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard -da təsvir olunan metoddan istifadə etdim.

Bunu etdikdən sonra, proqramı Atmega -ya yükləyərkən Arduino Uno -nu deyil, yeni lövhə növünüzü seçməyi unutmayın.

Addım 6: Proqram təminatı

Proqram təminatı
Proqram təminatı

Bəzi proqramlar əlavə edərək lal aparatı ağıllı etmək vaxtıdır.

Budur prototip üçün bir neçə yalançı kod:

lastReceivedTime = 0

lastReceivedCmd = none cmdTimeout = 100 quraşdırma () {nəzarətçi D4-D7 pinlərini konfiqurasiya pinlərini çıxış pinləri kimi başlatmaq CAN qurmaq CAN filter} loop () {hər bir düymə əmri üçün gözətçini sıfırla {CAN mesajı aiddirsə) düymə əmri {lastReceivedTime = now lastReceivedCmd = cmd}}} əgər indi> lastReceivedTime + cmdTimeout {lastReceivedCmd = none} hər bir düymə əmri üçün {if lastReceivedCmd düymə əmridirsə {set command pin output = on} else {set pin pin output = off }}}

cmdTimeout, buraxılan son aktiv düyməni nəzərdən keçirmədən əvvəl nə qədər gözləməli olduğumuza qərar verir. Düymə CAN mesaj əmrləri təxminən hər 70 ms -də göndərildiyindən, bir az marj ilə olduğundan daha böyük olmalıdır. Ancaq böyük olsa, gecikmə təcrübəsi olacaq. 100 ms yaxşı bir namizəd kimi görünür.

Bəs gözətçi nədir? Bir qəza halında bizi xilas edə biləcək faydalı kiçik bir hardware xüsusiyyətidir. Səs artırma əmrinin aktiv olduğu müddətdə proqramın çökməsinə səbəb olan bir səhvimizin olduğunu düşünün. Sonra maksimum həcmdə stereo ilə bitərdik! Ancaq gözətçi müəyyən bir vaxt üçün sıfırlanmasa, gözlənilməz bir şeyin baş verdiyinə qərar verəcək və sadəcə sıfırlama verəcəkdir.

boş quraşdırma ()

{// wdt_enable (WDTO_250MS) döngəsi üçün maksimum 250 ms icazə verin; // digər təşəbbüslər} void loop () {wdt_reset (); // işlər et}

Filtr edə bilərəmmi? Yaxşı, CAN nəzarətçisini filtrə uyğun olmayan bütün mesajları atmaq üçün konfiqurasiya edə bilərsiniz, buna görə də proqramın əhəmiyyət vermədiyimiz mesajlara vaxt itirməsinə ehtiyac yoxdur.

işarəsiz uzun maska = 0x1fffffff; // 29 başlıq bitinin hamısını maskaya daxil edin

işarəsiz uzun filterId = 0x0400066; // Biz yalnız bu CAN mesajı id m_can.init_Mask (0, CAN_EXTID, maska) ilə maraqlanırıq; // Maska 0 0-1 m_can.init_Mask (1, CAN_EXTID, maska) filtrinə aiddir; // Maska 1 2-5 m_can.init_Filt filtrinə aiddir (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);

Filtr + maskanın necə qurulacağı haqqında daha ətraflı məlumat üçün CAN kitabxana kodunu və CAN nəzarətçi sənədlərini yoxlayın.

Bir mesaj (süzülməyən) alındıqda bir fasilə yaratmaq üçün CAN nəzarətçisini də qura bilərsiniz. (Yuxarıdakı nümunəyə daxil deyiləm, amma proqramımda bunun üçün bəzi kodlar var.) Bu halda həqiqətən heç bir dəyər əlavə etmir və proqramlaşdırmaya öyrəşməmisinizsə çaşqınlıq yarada bilər.

Xülasə olaraq bu prototip proqramı idi. Ancaq simulyator lövhəsi üçün də bəzi kodlara ehtiyacımız var:

lastSentTime = 0

minDelayTime = 70 setup () {A0-A5 pinlərini çıxış pinləri kimi konfiqurasiya edin, D4-D7 sancaqlarını daxili çəkmə ilə giriş pinləri kimi konfiqurasiya edin. init CAN} loop () {send "junk" can send msg set activeButton = none for each button {if button is pressed {set activeButton = button}} if activeButton! = none {if now> lastSentTime + minDelayTime {send button command can send message } set lastSentTime = indi} invalid = A7 pinini oxuyun (cmd) {if (min <invalid <max) {led on} else {led off}} 1 ms gözləyin}

Bu, təxminən hər ms -də "lazımsız" CAN mesajları göndərəcək və hər 70 ms -də müvafiq düyməyə basıldıqda.

Hər düyməyə aid olan min və maksimum dəyişənlərə uyğun dəyərləri öyrənmək üçün fərqli düymələri basarkən A7 pinindəki girişi daxil etməyiniz lazım ola bilər. (Və ya hesablaya bilərsiniz, amma əslində girişi oxumaq sizə daha dəqiq dəyərlər verəcək.)

Pin rejimlərini proqramlaşdırarkən bir az diqqətli olmalısınız. Təsadüfən daxili çəkmə istifadə etmək üçün nəzərdə tutulan pinləri çıxış pinləri olaraq təyin etsəniz, çıxışı yüksək olaraq təyin etdiyiniz zaman Arduino -ya zərər verəcək potensial qısa yol yaradacaqsınız.

Proqramlarımı yoxlamaq istəyirsinizsə, buradan yükləyə bilərsiniz:

  • CAN mesajları proqramı
  • Simulator lövhəsi üçün proqram
  • Prototip / son lövhə üçün proqram

Bilməlisiniz ki, bu proqramlar burada yalançı koda uyğun gəlmir, həqiqətən də lazım olmayan bir çox "əlavə" şeylər ehtiva edir və obyekt yönümlü proqramlaşdırma ilə tanış deyilsinizsə yəqin oxumaq bir az çətin ola bilər..

Addım 7: Son Avadanlıq

Son Avadanlıq
Son Avadanlıq
Son Avadanlıq
Son Avadanlıq
Son Avadanlıq
Son Avadanlıq

Proqramınızdan məmnun olduğunuzda (simulyator lövhəsi ilə son sınaqdan sonra avtomobildə prototipi sınamağı unutmayın) əsl aparat qurmağın vaxtıdır.

Burada üç seçiminiz var:

  • Tez və çirkli - məhsulları bir PCB prototip lövhəsində birlikdə lehimləyin.
  • Hardcore DIY - öz PCB -ni kəsin.
  • Tənbəl yol - komponentləri lehimləmək üçün peşəkar bir PCB sifariş edin.

Tələsmirsinizsə, son variantı tövsiyə edə bilərəm. Yalnız belə kiçik bir PCB -yə ehtiyacınız varsa, Çindən sifariş etmək çox ucuzdur. (Və sonra, ehtimal ki, on ədəd alacaqsınız və buna görə də bəzi lehimləmə səhvlərini ödəyə bilərsiniz.)

PCB sifariş etmək üçün dizaynınızı Gerber formatında göndərməlisiniz. Bunun üçün müxtəlif proqramlar var. Tövsiyə edə biləcəyim Qartaldan istifadə etdim. Bunu öyrənmək üçün bir neçə saat gözləmək olar, amma sonra yaxşı işləyir. Belə kiçik lövhələr üçün pulsuz istifadə edə bilərsiniz.

Dizayn hazırlayarkən diqqətli olun. Səhv bir şey etdiyinizi öyrənmək üçün çatdırılma üçün dörd həftə gözləmək istəmirsiniz.

(Yaxşı lehimləmə bacarıqlarınız varsa, səthə quraşdırılmış komponentlər üçün dizayn edə bilərsiniz və həqiqətən kiçik bir adapter əldə edə bilərsiniz. Etmədim.)

Sonra sifariş verin məsələn: https://www.seeedstudio.com/fusion_pcb.html. Dizaynınızdan Gerber fayllarının necə yaradılacağına dair təlimatları izləyin. Nəticənin yaxşı olduğundan əmin olmaq üçün bir önizləmə də əldə edə bilərsiniz.

(Nəhayət, sxematik şəkildə göstərildiyindən R4-R7 üçün digər rezistorlar seçməli oldum. Bunun əvəzinə 2k, 4.7k, 6.8k və 14.7k istifadə etdim.)

Və unutmayın - Atmega pin nömrələməsini Arduino pin nömrələməsi ilə qarışdırmayın!

Atmega çipini birbaşa lehimləməməyinizi, ancaq bir yuva istifadə etməyinizi məsləhət görürəm. Sonra yenidən proqramlaşdırmanız lazım olduğu təqdirdə asanlıqla silə bilərsiniz.

Addım 8: Maşına Montaj

Avtomobil Montajı
Avtomobil Montajı
Avtomobil Montajı
Avtomobil Montajı

İndi ən əyləncəli hissəyə - avtomobilinizə qoyun və istifadə etməyə başlayın! (Bunun üçün bir qutu hazırladıqdan / aldıqdan sonra.)

Əgər avtomobilinizdə prototipi tam sınamısınızsa, hər şey mükəmməl işləməlidir.

(Daha əvvəl qeyd etdiyim kimi, bəzi rezistorları dəyişdirmək və proqramımda bəzi dəyişikliklər etmək məcburiyyətində qalmamışam.)

Stereonun arxasına və ya başqa bir yerə bağlamalı olduğunuzu da düşünün. Əlcək qutumun üstündən əlindən heç bir şey götürmədən daxil ola biləcəyim yaxşı bir yer tapdım. Daha sonra təkmilləşdirmək qərarına gəlsəm faydalı ola bilər.

Nəhayət düymələrim yenidən işləyir! Onsuz iki ay necə yaşaya bilərdim?

Addım 9: Gələcək Təkmilləşdirmələr

Qeyd edildiyi kimi, bunun 2.0 versiyasını etsəm, daha çox rahatlıq üçün 4066B -ni başqa bir şeylə (ehtimal ki, rəqəmsal potensiometr) əvəz edəcəyəm.

Edə biləcəyiniz bir çox başqa işlər də var. Məsələn, bluetooth modulu əlavə edin və telefonunuz üçün uzaqdan idarə tətbiq edin. Və ya bir GPS modulu, sonra evə yaxın olduğunuzda səsinizi avtomatik olaraq artıra və "pəncərələri aşağı" CAN mesajı göndərə bilərsiniz ki, bütün qonşularınız möhtəşəm musiqinizdən zövq alsın.

Tövsiyə: