Mundarija:

Maxsus Arduino RAN g'ildiraklari tugmachalarini yangi avtomobil stereo bilan ushlab turishi uchun: 9 qadam (rasmlar bilan)
Maxsus Arduino RAN g'ildiraklari tugmachalarini yangi avtomobil stereo bilan ushlab turishi uchun: 9 qadam (rasmlar bilan)

Video: Maxsus Arduino RAN g'ildiraklari tugmachalarini yangi avtomobil stereo bilan ushlab turishi uchun: 9 qadam (rasmlar bilan)

Video: Maxsus Arduino RAN g'ildiraklari tugmachalarini yangi avtomobil stereo bilan ushlab turishi uchun: 9 qadam (rasmlar bilan)
Video: PlatformIO или прощай, Arduino IDE 2024, Iyul
Anonim
Maxsus Arduino CAN Rulda tugmachalarini yangi avtomobil stereo bilan ushlab turishi uchun
Maxsus Arduino CAN Rulda tugmachalarini yangi avtomobil stereo bilan ushlab turishi uchun
Maxsus Arduino CAN Rulda tugmachalarini yangi avtomobil stereo bilan ushlab turishi uchun
Maxsus Arduino CAN Rulda tugmachalarini yangi avtomobil stereo bilan ushlab turishi uchun
Maxsus Arduino CAN Rulda tugmachalarini yangi avtomobil stereo bilan ushlab turishi uchun
Maxsus Arduino CAN Rulda tugmachalarini yangi avtomobil stereo bilan ushlab turishi uchun

Men o'zimning Volvo V70 -02 avtomobil stereolarini yangi stereo bilan almashtirishga qaror qildim, shunda men mp3, bluetooth va ovoz balandligi kabi narsalardan bahramand bo'la olaman.

Mening mashinamda hali ham ishlatishni xohlagan stereo uchun rul boshqaruv elementlari mavjud. Men muammo bo'lishini kutmagan edim, chunki bozorda mening mashinamga mos keladigan bir nechta adapterlar bor. Ammo tez orada men ular emasligini bildim! (V70 adapterlari biroz boshqacha CAN protokoli tufayli -02 ta mashinada muammolarga duch kelishi mumkin.)

Xo'sh, keyin nima qilish kerak? Eski stereo saqlansinmi? Ishlamaydigan tugmalar bilan hayot kechirasizmi? Albatta yo'q! Agar bozorda ishlaydigan adapter bo'lmasa, biz uni qurishga majbur bo'lamiz!

Bu ko'rsatma Rulda tugmachalari CAN avtobusi orqali aloqa qiladigan mashinalarga qo'llanilishi mumkin (ba'zi moslashuvlar bilan).

1 -qadam: Stereoga buyruqlarni qanday yuborish kerakligini bilib oling

Stereo -ga buyruqlarni qanday yuborishni bilib oling
Stereo -ga buyruqlarni qanday yuborishni bilib oling
Stereo -ga buyruqlarni qanday yuborishni bilib oling
Stereo -ga buyruqlarni qanday yuborishni bilib oling

Siz qilishingiz kerak bo'lgan birinchi narsa - bu stereo qanday masofadan kirishni kutishini bilish. Odatda ishlab chiqaruvchilar sizga bu haqda aytmaydilar va ehtimol siz teskari muhandislik uchun ishlaydigan masofadan boshqarish pultidan foydalana olmaysiz.

Mening yangi stereo pultim (Kenvud) bitta simdan iborat va men uning qanday ishlashi haqida hech qanday ma'lumot topa olmadim. Shu bilan birga, masofadan kiritish uchun 3,5 mm raz'em ham mavjud. Men ham bu haqda hech narsa topa olmadim. Boshqa markalar uchun 3,5 mm raz'em haqida ma'lumot bor, bu shuni ko'rsatadiki, har xil buyruqlar uchi va qisma o'rtasida (va ixtiyoriy ravishda halqa va qisma o'rtasida) o'ziga xos qarshilik ko'rsatish orqali aniqlanadi. Masalan, https://forum.arduino.cc/index.php?topic=230068.0. Shunday qilib, men sinab ko'rishga qaror qildim, non paneli, bir nechta rezistorlar va stereoga ulangan va non paneliga ulangan 3,5 mm vilka. Avvaliga hech narsa tan olinmadi, lekin stereo "o'rganish rejimi" menyusiga ega va u erda har xil qarshilik ko'rsatilganda buyruqlarni muvaffaqiyatli sozlash mumkin edi. Muvaffaqiyat!

Ammo keyin bilsam, men bu erda xato qilganman: stereo o'rganganga o'xshagan buyruqlarning hammasi ham ishlamaydi. Masalan, O'qish rejimida 30 kOm topildi, lekin keyinchalik ishlamadi va men o'rnatgan ba'zi buyruqlar uchun qarshilik farqi shunchalik kichik ediki, keyinchalik noto'g'ri buyruq ishga tushdi.

Shunday qilib, men sizga rezistorlar va o'chirish tugmachalari bo'lgan non panelidan foydalanishni tavsiya qilaman, bu siz boshqarmoqchi bo'lgan barcha masofadan boshqarish buyruqlari uchun va ularning hammasi ishlay olishini sinab ko'rishingizni tavsiya qilaman.

Agar sizning avtomobil stereo signalingiz xuddi shunday qabul qilinmasa, siz uning qanday ishlashini aniqlab olishingiz kerak bo'ladi, shunda siz ushbu echimni moslashtira olasiz. Agar siz umuman tushuna olmasangiz, sizda muammo bor.

2 -qadam: CAN avtobusiga qayerda ulanish kerakligini bilib oling

CAN avtobusiga qayerda ulanish kerakligini bilib oling
CAN avtobusiga qayerda ulanish kerakligini bilib oling

Siz CAN avtobusiga ulanish uchun yaxshi joyni topishingiz kerak. Siz CAN orqali muloqot qiladigan eski stereoni almashtirganingiz uchun, stereoning orqasida buni topishingiz kerak. CAN avtobusi bir juft o'ralgan simlardan (CAN-L va CAN_H) iborat. Ishonch hosil qilish uchun mashinangizning simlar sxemasiga murojaat qiling.

3 -qadam: CAN xabarlarini teskari muhandislik

CAN xabarlarining teskari muhandisligi
CAN xabarlarining teskari muhandisligi

Agar Google sizga qanday CAN xabarlarini tinglash kerakligini aytmasa, siz CAN avtobusiga ulanishingiz va teskari muhandislik qilishingiz kerak bo'ladi. Men Arduino Uno va CAN qalqonidan foydalandim. (Sizga haqiqatan ham CAN qalqoni kerak emas, keyinroq ko'rasiz, buning o'rniga non taxtasida arzonroq komponentlardan foydalanishingiz mumkin.)

Google -ga murojaat qilib, mashinangizga ulanish paytida qanday tezlikdan foydalanish kerakligini bilib oling. (Odatda siz yuqori tezlikda va past tezlikda CAN tarmog'i borligini bilib olasiz. Siz past tezlikli tarmoqqa ulanasiz.)

Bundan tashqari, Arduino -ni barcha CAN xabarlarini ketma -ket interfeys orqali yozib olish uchun dasturlashtirishingiz kerak bo'ladi, shunda ularni kompyuterdagi jurnal fayllariga saqlashingiz mumkin. Standart Arduino IDE ma'lumotni jurnal fayliga saqlamaydi, lekin siz masalan. Buning o'rniga macun.

Dasturni yozishni boshlashdan oldin siz CAN_BUS_Shield kutubxonasini o'rnatishingiz kerak.

Sizning dasturingizni boshlashingizga yordam beradigan bir nechta soxta kodlar:

sozlash()

{init seriyali ulanish init CAN kutubxonasi} loop () {agar CAN xabari qabul qilinsa {o'qing

Maslahatlar:

CAN kutubxonasi funktsiyasiga kirish uchun siz MCP_CAN sinfidan foydalanasiz:

MCP_CAN m_can;

Boshlash mumkin:

while (m_can.begin ()! = CAN_OK)

{kechikish (1000); }

CAN xabarlarini tekshiring va o'qing:

while (m_can.checkReceive () == CAN_MSGAVAIL)

{// CAN identifikatorini, xabar uzunligi va xabar ma'lumotlarini olish m_can.readMsgBufID (& m_canId, & m_msgLen, m_msgBuf); // Bu erda xabar ma'lumotlari bilan biror narsa qiling}

Agar sizga ko'proq yordam kerak bo'lsa, keyingi bosqichda mening dasturimga havolani topishingiz mumkin. CAN qalqon kutubxonasi ham misolni o'z ichiga oladi. Yoki shunga o'xshash qadamni o'z ichiga olgan mviljoen2 ning ko'rsatmalarni tekshiring.

Avval ma'lumotlarni filtrlashga yordam beradigan ma'lumotnoma kerak bo'ladi. Kontaktni radio rejimiga o'tkazing va tugmachalarga tegmasdan hammasini bir necha daqiqaga yozib qo'ying.

Keyin har bir tugma uchun jurnalga kirishni boshlang, tugmani bosing va yozishni to'xtating.

Ishingiz tugagandan so'ng, nomzodlaringizni topish uchun tugma jurnallaridan ma'lumotnomangizdagi hamma narsani filtrlashingiz kerak. Men hali juda ko'p xabarlar qolganligini bilib oldim, shuning uchun men ko'proq jurnallarni yozdim va keyin "A buyrug'iga nomzodlar A-tugmachalari fayllarida bo'lishi kerak va hech bir mos yozuvlar fayllarida" bo'lishini talab qildim. Bu meni sinab ko'rish uchun bir nechta imkoniyatlarni qoldirdi.

Jurnallar juda ko'p xabarlarni o'z ichiga oladi, shuning uchun siz dastur yozishingiz yoki Excel -dan foydalanishingiz kerak bo'ladi. (Men o'z ehtiyojlarim uchun juda qattiq kodlangan shartlarga ega bo'lgan dasturni ishlatardim, shuning uchun siz ishlata oladigan dasturni taklif qila olmayman deb qo'rqaman.)

Ogohlantirish so'zi: tugma har doim bir xil xabarni chiqarishiga ishonchingiz komil emas. Ba'zi bitlarda hisoblagichlar va boshqalar bo'lishi mumkin.

Agar sizda Volvo V70 -02 bo'lsa, siz quyidagicha harakat qilasiz:

  • Xabar identifikatori: 0x0400066Bayt0: 0x00, 0x40, 0x80 yoki 0xc0 (farqi yo'q)
  • Bayt1: 0x00 (farqi yo'q)
  • Bayt2: 0x00 (farqi yo'q)
  • Bayt3: 0x00-0x07 (farqi yo'q)
  • Bayt4: 0x1f (farqi yo'q)
  • Bayt 5: 0x40 (farqi yo'q)
  • Bayt 6: 0x40 (farqi yo'q)
  • Bayt7: Tugma identifikatori: 0x77 = ovoz balandligi, 0x7b = ovoz balandligi, 0x7d = keyingi trek, 0x7e = oldingi trek.

Agar siz buyruqlarni topganingizga amin bo'lsangiz, dasturni faqat qiziqarli xabarlarni qayd qilib turadigan qilib o'zgartirish yaxshi bo'lardi. To'g'ri xabarlarni aniqlaganingizni tekshirish uchun tugmachalarni bosganingizda ketma -ket jurnallar oynasiga qarang.

4 -qadam: Uskuna prototipi

Uskuna prototipi
Uskuna prototipi

Sizning qurilmangiz quyidagilarga ega bo'lishi kerak:

  1. CAN avtobusida qabul qilingan buyruqlarni aniqlang
  2. Boshqa formatda buyruqlarni stereoga yuboring

Agar sizda etarli joy bo'lsa, siz birinchi qism uchun Arduino va CAN qalqonidan foydalanishingiz mumkin, ikkinchisiga qo'shimcha uskunalar qo'shishingiz mumkin. Biroq, ba'zi kamchiliklar mavjud:

  • CAN qalqonining narxi
  • Hajmi
  • Arduino quvvat manbai, agar u sizning avtomobilingizga 12V to'g'ridan -to'g'ri ulangan bo'lsa, baxtli bo'lmaydi (ehtimol u ishlaydi, lekin uning umri qisqaradi).

Shunday qilib, men quyidagilarni ishlatardim:

  • Atmega 328, "Arduino miyasi". (Ba'zi variantlar bor, Arduino Uno -ga teng keladigan variantni oling. Siz uni Arduino yuklash qurilmasi bilan yoki yuklamasdan sotib olishingiz mumkin.)
  • 16 MGts kristalli + soat signallari uchun kondansatörler.
  • MCP2551 CAN qabul qiluvchi.
  • MCP2515 CAN boshqaruvchisi.
  • TSR1-2450, 6,5-36V ni 5V ga o'zgartiradi. (Prototipda ishlatilmaydi, chunki dasturiy ta'minot quvvat manbai haqida qayg'urmaydi.)
  • CD4066B kaliti stereoga buyruq yuborishda ishlatiladi.
  • Bir juft rezistor. (Qiymatlarni burgut sxemalarida keyingi bosqichda topish mumkin.)

Ushbu konfiguratsiyaning yaxshi tomoni shundaki, u Arduino va CAN qalqon kutubxonasiga to'liq mos keladi.

Agar siz to'rtdan ortiq tugmachani ishlatmoqchi bo'lsangiz, CD4066B dan boshqa narsani ishlatishni o'ylab ko'rishingiz mumkin. CD4066B to'rtta kalitni birida, har biri Atmegas GPIO pinlaridan biri tomonidan boshqariladi. Har bir kalitga stereo kirish sifatida ishlatiladigan qarshilikni boshqarish uchun ulangan rezistor ulanadi. Shunday qilib, bu to'rt xil buyruqni yuborish uchun osongina ishlatilishi mumkin. Agar ular birlashtirilsa, qo'shimcha qarshilik qiymatlarini olish mumkin. Bu erda men aytgan xato paydo bo'ladi. Menda to'rtta tugma bor, lekin men ulardan ikkitasini uzoq va qisqa bosish orqali olti xil buyruq berish uchun rejalashtirgandim. Ammo oxir -oqibat, men rezistorlar kombinatsiyasini topa olmasligimni bilib oldim, bu menga oltita ishchi kombinatsiyani beradi. Buning o'rniga analog chiqish signalini stereoga (3,5 mm uchi) ulash mumkin bo'lardi. (E'tibor bering, Atmega -da haqiqiy analog chiqish pinlari yo'q, shuning uchun qo'shimcha uskunalar kerak bo'ladi.)

Sinov maqsadida men prototipimga ulanish uchun oddiy "mashina va stereo" simulyator ham yasadim. Bu disk raskadrovka jarayonini osonlashtiradi va agar siz mashinangizga va dasturingizga o'tirishni yoqtirmasangiz, buni tavsiya qilaman.

Prototip rasmning pastki panelida tasvirlangan. Elektr ta'minoti, dasturlash va ketma -ket jurnalga yozish uchun u Arduino Uno -ga biriktirilgan, bu erda Atmega chipi olib tashlangan.

Yuqori panel - bu avtomobil + stereo simulyatori bo'lib, u prototipni dastlabki sinovlarida ishlatiladi.

Prototip + simulyatori quyidagicha ishlashga mo'ljallangan:

  • Simulyator panelidagi tugmachalardan birini bosing. (Bu sizning rulda tugmalaringiz.)
  • Simulyator dasturi tugmachani bosganini aniqlagach, tugma bosilganda har 70 msda tegishli CAN xabarini yuboradi. (Chunki men ilgari olgan jurnallar mening mashinamda shunday ishlashini ko'rsatgan.) Shuningdek, u avtobusdagi boshqa tirbandlikni simulyatsiya qilish uchun ko'plab "keraksiz" JON xabarlarini yuboradi.
  • CAN xabarlar CAN avtobusida yuboriladi.
  • CAN xabarlari prototip tomonidan qabul qilinadi.
  • MCP2515 xabarlar identifikatori asosida barcha bog'liq bo'lmagan xabarlarni tashlaydi.
  • MCP2515 ishlov berilishi kerak bo'lgan xabarni olganida, u xabar yuborilganligini ko'rsatadi.
  • Atmega xabarni o'qiydi va qaysi tugmani faol deb hisoblash kerakligini hal qiladi.
  • Atmega shuningdek, oxirgi xabar qachon kelganini kuzatib boradi, ma'lum vaqtdan so'ng tugma qo'yib yuborilgan hisoblanadi. (CAN xabarlari faqat tugma bosilganligini bildiradi, uni bosish yoki qo'yib yuborish emas.)
  • Agar tugma faol deb hisoblansa, CD4066B -dagi bir yoki bir nechta kalit yoqiladi.
  • Simulyator (hozir sizning stereoingiz vazifasini bajaradi) uch va qisma o'rtasida qarshilik o'rnatilganligini aniqlaydi. (Maslahat 3.3V ga va rezistor orqali analog kirish piniga ulanadi. Hech qanday buyruq ishlamasa, bu pin 3.3V ni o'qiydi, agar buyruq faol bo'lsa, qiymat pasayadi va buyruqni aniqlaydi.
  • Buyruq faol bo'lganda, tegishli LED ham faollashadi. (Oltita chiroq bor, chunki men ikkita tugmacham uchun har xil uzun / qisqa bosishni ishlatishni rejalashtirgandim.)

Uskuna prototipi haqida batafsil ma'lumot olish uchun burgut sxemalariga keyingi bosqichda qarang.

Simulyatorlar paneli haqida qo'shimcha ma'lumot:

  • 16 MGts kristalli
  • 22 pF kondansatörler
  • LED rezistorlari LED xususiyatlariga qarab tanlanishi kerak
  • A7 va 3.3V ga ulangan qarshilik, masalan. 2kOm (muhim emas).
  • MCP2551 va MCP2515 ga ulangan rezistorlar yuqoriga / pastga tortiladi. Masalan, tanlang 10 kOm.

(Yoki agar xohlasangiz, simulyatorning "CAN qismi" uchun CAN qalqonidan foydalanishingiz mumkin.)

Uskunani loyihalashda Atmega pinlari Arduino pinlari bilan qanday taqqoslanganligini bilish juda muhimdir.

(Hech qanday LEDni to'g'ridan -to'g'ri CD 4066B ga ulamang, u faqat past tokni ushlab turishi mumkin. Men sinab ko'rdim va chiqishni birinchi marta sinab ko'rsam, chip yaroqsiz bo'lib qoldi. Yaxshi tomoni shundaki, men ulardan ikkitasini sotib olgan edim. juda arzon)

5 -qadam: sug'urta dasturlash

Ehtimol siz oldingi qadamda prototipda MCP2515 signal signalini ishlab chiqaradigan alohida komponentlar yo'qligini payqadingiz. Buning sababi shundaki, biz ishlata oladigan Atmega soat signali sifatida 16 MGts kristal mavjud. Ammo biz uni to'g'ridan -to'g'ri MCP2515 ga ulay olmaymiz va sukut bo'yicha Atmega -da hech qanday signal yo'q.

(Agar xohlasangiz, bu bosqichni o'tkazib yuborishingiz va uning o'rniga qo'shimcha soat uskunasini qo'shishingiz mumkin.)

Biroq, biz GPIO pinlaridan birida soatni uzatish signalini yoqish uchun "sug'urta dasturlash" deb nomlangan narsani ishlatishimiz mumkin.

Avval siz Arduino IDE ishlatadigan "board.txt" nomli faylni topishingiz kerak bo'ladi. Siz Arduino Uno yozuvini nusxalashingiz, unga yangi nom berishingiz va low_fuses qiymatini o'zgartirishingiz kerak bo'ladi.

Mening yangi taxtam shunday ko'rinadi:

########################################################################################### ##############Arduino Uno asosida#O'zgarishlar: Atmegada PB0/pin 14da 16 MGts chastotasini yoqish uchun#past sigortalar 0xffdan 0xbf ga o'zgartirildi = Arduino D8

clkuno.name = Soat tugadi (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

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

E'tibor bering, soat tugashi uning boshqaruv bitini 0 ga o'rnatish orqali faollashadi.

Kengash konfiguratsiya faylida yangi taxtani yaratganingizda, Atmega -ga yangi yuklagichni yoqishingiz kerak bo'ladi. Buning turli usullari bor, men https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard -da tasvirlangan usulni qo'lladim.

Buni qilganingizdan so'ng, dasturni Atmega -ga yuklashda Arduino Uno -ni emas, balki yangi taxta turini tanlashni unutmang.

6 -qadam: dasturiy ta'minot

Dasturiy ta'minot
Dasturiy ta'minot

Ba'zi dasturlarni qo'shib, soqov uskunani aqlli qilish vaqti keldi.

Bu erda prototip uchun bir nechta soxta kodlar:

lastReceivedTime = 0

lastReceivedCmd = none cmdTimeout = 100 setup () {D4-D7-ni kuzatuvchi konfiguratsiya pinlarini ishga tushirish pinlari sifatida CAN-ni sozlash mumkin CAN-ni o'rnatish} loop () {har bir tugma buyrug'i uchun qo'riqchi sozlamalarini tiklash (agar CAN xabari tegishli bo'lsa) tugma buyrug'i {lastReceivedTime = now lastReceivedCmd = cmd}}} agar hozir bo'lsa> lastReceivedTime + cmdTimeout {lastReceivedCmd = none} har bir tugma buyrug'i uchun {if lastReceivedCmd - tugma buyrug'i {set command pin output = on} else {set pin command output = off }}}

cmdTimeout, oxirgi faol tugmani qo'yib yuborishimiz uchun qancha vaqt kutishimiz kerakligini hal qiladi. Tugma CAN xabar buyruqlari taxminan har 70 msda yuborilganligi sababli, u bir oz farq bilan kattaroq bo'lishi kerak. Ammo agar bu katta bo'lsa, kechikish bo'ladi. Shunday qilib, 100 ms yaxshi nomzodga o'xshaydi.

Ammo qo'riqchi nima? Bu bizni qulab tushganda qutqara oladigan foydali kichik apparat funktsiyasi. Tasavvur qiling, bizda ovoz balandligini oshirish buyrug'i faol bo'lganda dasturning ishdan chiqishiga olib keladigan xato bor. Keyin biz maksimal ovoz balandligida stereo bilan shug'ullanamiz! Ammo agar qo'riqchi ma'lum vaqtga tiklanmasa, u kutilmagan voqea yuz berganiga qaror qiladi va uni asl holatiga qaytaradi.

bo'sh o'rnatish ()

{// wdt_enable (WDTO_250MS) tsikli uchun maksimal 250 ms ruxsat; // boshqa boshlang'ich narsalar} void loop () {wdt_reset (); // narsalar qilish}

Filtrlash mumkinmi? Xo'sh, siz CAN tekshirgichini filtrga mos kelmaydigan barcha xabarlarni o'chirib tashlash uchun sozlashingiz mumkin, shuning uchun dasturiy ta'minot bizni qiziqtirmaydigan xabarlarga vaqt sarflamasligi kerak.

imzosiz uzun niqob = 0x1fffffff; // Niqobga 29 ta sarlavha bitini kiriting

imzosiz uzun filterId = 0x0400066; // Bizga faqat m_can.init_Mask (0, CAN_EXTID, niqob) idrok etuvchi CAN xabari muhim; // Maska 0 filtr 0-1 uchun qo'llaniladi m_can.init_Mask (1, CAN_EXTID, niqob); // Maska 1 2-5 m_can.init_Filt (0, CAN_EXTID, filterId) filtriga qo'llaniladi; 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 + niqobni sozlash haqida batafsil ma'lumot olish uchun CAN kutubxonasi kodini va CAN tekshiruvi hujjatlarini tekshiring.

Bundan tashqari, xabar (filtrlanmagan) qabul qilinganda uzilishni ko'tarish uchun CAN boshqaruvchisini o'rnatishingiz mumkin. (Yuqoridagi misolga kiritilmagan, lekin mening dasturimda buning uchun ba'zi kodlar mavjud.) Bu holda u hech qanday qiymat qo'shmaydi va agar siz dasturlashga o'rganmagan bo'lsangiz, bu chalkash bo'lishi mumkin.

Xulosa qilib aytganda, bu dasturiy ta'minot prototipi edi. Simulyator paneli uchun bizga kod kerak:

lastSentTime = 0

minDelayTime = 70 setup () {A0-A5 pinlarini chiqish pinlari sifatida sozlash D4-D7 pinlarini ichki tortish bilan kirish pimi sifatida sozlash. init CAN} loop () {send "arzimas" har bir tugma uchun msg set activeButton = hech biri mumkin {agar tugma bosilsa {set activeButton = button}} agar activeButton! = yo'q bo'lsa {agar hozir> lastSentTime + minDelayTime {yuborish tugmasi buyrug'i xabar yuborishi mumkin } lastSentTime = now} invalid = A7 o'qini o'qing (cmd) {if (min <invalid <max) {led on} else {led off}} 1 ms kuting}

Bu doimiy ravishda "keraksiz" CAN xabarlarini taxminan har msda yuboradi va har 70 msda tegishli tugma bosilganda.

Har bir tugmachaga tegishli min va max o'zgaruvchilar uchun mos qiymatlarni bilish uchun turli tugmachalarni bosganingizda A7 pinidagi kirishni qayd qilishingiz kerak bo'ladi. (Yoki siz uni hisoblashingiz mumkin, lekin aslida kirishni o'qish sizga aniqroq qiymatlarni beradi.)

Pin rejimlarini dasturlashda biroz ehtiyot bo'lish kerak. Agar siz tasodifan ichki tortish moslamasini chiqish pimi sifatida o'rnatmoqchi bo'lsangiz, siz chiqish balandligini o'rnatganingizda Arduino -ga zarar etkazadigan potentsial yorliqni yaratasiz.

Agar siz mening dasturlarimni tekshirmoqchi bo'lsangiz, ularni bu erdan yuklab olishingiz mumkin:

  • XABAR jurnali dasturi
  • Simulyator paneli uchun dastur
  • Prototip / yakuniy taxta uchun dastur

Siz shuni bilishingiz kerakki, bu dasturlar bu erda soxta kodga to'g'ri kelmaydi, ular juda ko'p "qo'shimcha" narsalarni o'z ichiga oladi va agar siz ob'ektga yo'naltirilgan dasturlash bilan tanish bo'lmasangiz, o'qish biroz qiyin bo'lishi mumkin..

7 -qadam: Yakuniy apparat

Yakuniy apparat
Yakuniy apparat
Yakuniy apparat
Yakuniy apparat
Yakuniy apparat
Yakuniy apparat

Qachonki siz dasturingizdan mamnun bo'lsangiz (simulyator paneli bilan yakuniy sinovdan so'ng mashinada prototipni sinab ko'rishni unutmang), haqiqiy uskunani yaratish vaqti keldi.

Bu erda uchta variant bor:

  • Tez va iflos - narsalarni PCB prototip kartasida lehimlang.
  • Hardcore DIY - shaxsiy PCB -ni chizish.
  • Dangasa usul - komponentlarni lehimlash uchun professional tenglikni buyurtma qiling.

Agar siz shoshmasangiz, men oxirgi variantni tavsiya qila olaman. Agar sizga faqat shunday kichik PCB kerak bo'lsa, uni Xitoydan buyurtma qilish juda arzon. (Va keyin, ehtimol, siz o'nta bo'lakka ega bo'lasiz, shuning uchun siz lehimlashda xatolarga yo'l qo'yishingiz mumkin.)

PCB -larga buyurtma berish uchun siz dizayningizni Gerber formatida yuborishingiz kerak bo'ladi. Buning uchun turli xil dasturlar mavjud. Men tavsiya qila oladigan burgutdan foydalandim. Siz uni o'rganishingiz uchun bir necha soat kutishingiz mumkin, lekin keyin u yaxshi ishlaydi. Bunday kichik taxtalar uchun siz uni bepul ishlatishingiz mumkin.

Dizaynni yaratishda ehtiyot bo'ling. Siz noto'g'ri ish qilganingizni bilish uchun etkazib berish uchun to'rt hafta kutishni xohlamaysiz.

(Agar sizda yaxshi lehimlash qobiliyati bo'lsa, siz sirtga o'rnatilgan komponentlarni loyihalashingiz va juda kichik adapter olishingiz mumkin. Men qilmaganman.)

Keyin buyurtma bering, masalan. https://www.seeedstudio.com/fusion_pcb.html. Dizayningizdan Gerber fayllarini yaratish bo'yicha ko'rsatmalarga amal qiling. Bundan tashqari, natijaning to'g'riligiga ishonch hosil qilish uchun uni oldindan ko'rishingiz mumkin.

(Oxir-oqibat men R4-R7 uchun sxematik rasmda ko'rsatilganidan ko'ra boshqa rezistorlarni tanlashim kerak edi. Buning o'rniga men 2k, 4.7k, 6.8k va 14.7k ni ishlatardim.)

Va esda tuting - Atmega pin raqamini Arduino pinli raqamlash bilan aralashtirib yubormang!

Men sizga Atmega chipini lehimlamaslikni, balki rozetkadan foydalanishni maslahat beraman. Agar siz uni qayta dasturlashingiz kerak bo'lsa, uni osongina olib tashlashingiz mumkin.

8 -qadam: Avtomobilni o'rnatish

Avtomobil o'rnatish
Avtomobil o'rnatish
Avtomobil o'rnatish
Avtomobil o'rnatish

Endi eng qiziq tomoni - uni mashinangizga o'rnating va undan foydalanishni boshlang! (Buning uchun sumka tayyorlaganingizdan / sotib olganingizdan so'ng.)

Agar siz mashinangizda prototipni to'liq sinab ko'rgan bo'lsangiz, hamma narsa mukammal ishlashi kerak.

(Yuqorida aytib o'tganimdek, men rezistorlarni almashtirishim va dasturimni o'zgartirishim shart emas edi.)

Shuningdek, uni stereo yoki boshqa joyga o'rnatish kerakligini o'ylab ko'ring. Men qo'lqop qutimdan yaxshi joy topdim, unga qo'lqop qutisidan hech narsa ajratmasdan kira olaman. Agar men uni keyinroq yangilashga qaror qilsam, bu foydali bo'lishi mumkin.

Nihoyat, mening tugmalarim yana ishlaydi! Qanday qilib men ularsiz ikki oy yashay olardim?

9 -qadam: kelajakdagi yaxshilanishlar

Yuqorida aytib o'tilganidek, agar men uning 2.0 versiyasini tayyorlasam, 4066B ni boshqa narsa bilan almashtiraman (ehtimol, raqamli potentsiometr).

Siz qila oladigan boshqa narsalar ham ko'p. Masalan, bluetooth modulini qo'shing va telefoningiz uchun masofadan boshqarish ilovasini yarating. Yoki gps moduli, keyin siz uyga yaqin bo'lganingizda, ovoz balandligini avtomatik ravishda ko'tarishingiz va "oyna pastga" xabarini yuborishingiz mumkin, shunda barcha qo'shnilaringiz sizning ajoyib musiqangizdan bahramand bo'lishadi.

Tavsiya: