Mundarija:

Arduino avtomobil displeyi: 7 qadam (rasmlar bilan)
Arduino avtomobil displeyi: 7 qadam (rasmlar bilan)

Video: Arduino avtomobil displeyi: 7 qadam (rasmlar bilan)

Video: Arduino avtomobil displeyi: 7 qadam (rasmlar bilan)
Video: Using BTS7960 BTN8982TA PWM H Bridge motor controller module with Arduino library 2024, Noyabr
Anonim
Image
Image
Arduino avtomobil displeyi
Arduino avtomobil displeyi
Arduino avtomobil displeyi
Arduino avtomobil displeyi

Men Adafruit-dan 7 dyuymli TFT LCD, Teensy 3.6, Freematics OBD-II I2C adapteri va Amazonda topilgan ba'zi zaxira sensorlar yordamida bort diagnostikasiga (OBD-II) asoslangan displey qurdim. Displeyda ikkita sahifa bor.: biri mening Honda Accord haydash paytida, ikkinchisi esa teskari yo'nalishda.

Mening mashinam haydab ketayotganda, RPM, MPH, dvigatel yuklanish foizi, akkumulyator zo'riqishida, idishni harorati va dvigatel sovutish suvi harorati ko'rsatiladi (agar buni xohlamasangiz, boshqa bir qancha avtomobil statistikasi ko'rsatilishi mumkin).

Mening mashinam teskari yo'nalishda bo'lsa, Arduino IDE bilan mos keladigan Teensy 3.6, men topgan mashinamning bitmapli tasvirini o'qiydi, ko'rsatadi va zaxira sensorlarini o'qiydi. To'rtta datchikning har birining oyoq masofasi bor va avtomobil orqasidagi animatsiya ob'ektning mashinaga qanchalik yaqinligiga qarab o'zgaradi (faqat yashil - <5 fut, yashil va sariq - <2.6 fut, yashil, sariq, va qizil <1 fut) degan ma'noni anglatadi.

Nihoyat, men tunda ekranni xiralashtirish imkoniyatini qo'shdim.

Yakuniy natija ajoyib ko'rinadi va mening mashinamda juda yaxshi ishlaydi. Men hatto uni markaziy konsolda o'rnatishni tugatdim, bu boshqa jarayon bo'lib, men bu ko'rsatmaga kira olmayman. Men LCD displeyni yaratish uchun ishlatgan qismlar ro'yxati quyida.

1) Freematics OBD -II adapteri - 35 dollar

2) zaxira sensorlar - 15 dollar

3) 7 dyuymli TFT LCD displeyi - 38 dollar

4) SPI asosidagi LCD displey drayveri - 35 dollar

5) Teensy 3.6 - 30 dollar

6) Level Shifter - $ 4

7) 74HC125 Tri State Buffer IC -2 ta paket uchun 6 dollar (ishonchim komilki, siz uni boshqa joydan topa olasiz)

8) MicroSD kartasi> = 1 GB - 4 dollar

9) simlar, kondansatörler va rezistorlar.

10) LP3470-2.93 Quvvatni tiklash IC - 2 dollar

11) (ixtiyoriy): DS18B20 harorat sensori - 8 dollar

12) (ixtiyoriy): OBD -II Splitter - 10 dollar

13) (ixtiyoriy): 5 ta paket uchun 8 dollarlik sug'urta simini qo'shing

1 -qadam: Zaxira sensorlarini o'qish

Zaxira sensorlarini o'qish
Zaxira sensorlarini o'qish
Zaxira sensorlarini o'qish
Zaxira sensorlarini o'qish
Zaxira sensorlarini o'qish
Zaxira sensorlarini o'qish
Zaxira sensorlarini o'qish
Zaxira sensorlarini o'qish

Bu qadam juda qiyin, chunki bu zaxira sensorlar qabul qilgich bilan, keyin esa yuqoridagi rasmda ko'rinib turganidek, kichik LCD displey bilan aloqa o'rnatadi. Men ularning displeyidan qutulish va o'z ekranimni ishlatishni xohlardim. Biroz googlingdan keyin topilgan veb -sayt yordamida (teskari to'xtash datchiklarini buzish) men translyatorni LCD displeyga yuboradigan xususiy aloqa protokolini o'qishga muvaffaq bo'ldim. Ba'zi sabablarga ko'ra, aloqa protokoli I2C, UART, CAN, USB va boshqalar kabi odatiy emas va protokol etkazib beruvchiga qarab farq qiladi. Agar siz mening kodimdan foydalanmoqchi bo'lsangiz, men bog'lagan to'plamni sotib olishni maslahat beraman, chunki bu sensorlar uchun maxsus yozilgan.

LCD displeyni uzishdan oldin, men uzatuvchi va LCD displeyga ulangan uchta simni sinab ko'rdim. +5V qizil sim, tuproqli qora sim va ko'k sim bor edi. Ossiloskopimni ko'k simga va erga ulab bo'lgach, men yuqoridagi rasmga o'xshash izni ko'rdim, lekin aynan emas (men yuqoridagi havola qilingan veb -saytdagi rasmni ishlatganman). Mening izim juda uzoq davom etadigan boshlang'ich bitga ega edi, keyin yana 17 ta qisqa muddatli bit. Boshlanish bitidan keyin 0-5 bitlarda foydali ma'lumotlar yo'q edi. 6-8-bitlar A, B, C yoki D. sensoriga mos keladi. 9-16-bitlar metr uzunligiga mos keladi. Men sensorlarni o'qiydigan va ma'lumotlarni ketma -ket konsolda chiqaradigan Arduino IDE eskizini qo'shdim.

2 -qadam: Bitmap tasvirini yaratish va uni MicroSD kartaga joylashtirish

Bitmap tasvirini yaratish va uni MicroSD kartaga joylashtirish
Bitmap tasvirini yaratish va uni MicroSD kartaga joylashtirish
Bitmap tasvirini yaratish va uni MicroSD kartaga joylashtirish
Bitmap tasvirini yaratish va uni MicroSD kartaga joylashtirish

Men GIMP deb nomlangan bepul rasmlarni tahrirlash dasturidan foydalanib, mashinamning rasmini yuqoridan kesaman. Keyin tasvirni "car.bmp" deb nomlangan 24 bitli bitmap tasviri sifatida eksport qildim, bu 110 piksel va 250 piksel. Men buni microSD kartasiga yukladim va microSD kartasini Teensy 3.6 mikrokontroleriga joylashtirdim.

UNO o'rniga Teensy 3.6 bilan borganimning asosiy sabablari Teensy -ning SD -kartani o'qishi va RA8875 displey drayveri yordamida tasvirni ko'rsatish tezligi edi. UNO yordamida jarayon taxminan 8 soniya davom etdi, Teensy 3.6 esa 1,8 soniyani oldi.

3 -qadam: uskunani ulash

Uskunani ulash
Uskunani ulash

Adafruit -da RA8875 deb nomlangan IC tomonidan boshqariladigan 7 dyuymli TFT LCD displeyi bor. Men bu displey va displey drayverini ikkita sababga ko'ra tanladim. Birinchidan, displey uchun oldindan yozilgan keng kutubxonalar mavjud. Ikkinchidan, displey drayveri bilan gaplashish mumkin. SPI orqali har qanday mikrokontroller, ya'ni mikrokontrollerni RA8875 ga ulaydigan simlar ko'p emas.

Ushbu sozlamaning ikkita salbiy tomoni bor. Birinchidan, agar siz SD-karta kabi har qanday SPI-ga asoslangan qurilmadan foydalanmoqchi bo'lsangiz, Adafruit-ning RA8875 kartasida 74HC125 tri-davlat bufer IC-dan foydalanishni talab qiladigan apparatdagi xato bor. Uskuna xatolarini to'liq tushunish uchun quyidagi forumni o'qing. Ikkinchidan, tasvirlarni LCD displeyga yuborish uchun nisbatan uzoq vaqt kerak bo'ladi. Shuningdek, tasvirni LCD displeyga yuborish uchun zarur bo'lgan ko'p vaqt SPI ulanishiga bog'liq bo'lib, u mikroto'lqinlarning soat tezligi va displey drayveriga yuborilishi kerak bo'lgan katta hajmli ma'lumotlar bilan cheklangan. juda kam simlar.

Men Fritzing sxemasini tuzdim, shunda bu displeyni yaratmoqchi bo'lgan har bir kishi Teensy 3.6 -dagi pinlar qanday ulanishini osongina o'qiy oladi. Quyida.frz faylini qo'shdim. Belgilanmagan ikkita komponent - 1F 16V elektrolitik kondansatkich va 100 mF sopol kondansatkichli kondansatkichlar. Men buni Teensy mikrokontrolerining quvvati DC +5V barqarorligini va hech qanday voltaj ko'tarilmasligiga ishonch hosil qilish uchun kiritdim (kerak emas, lekin men ularni qo'shdim, chunki avtomobilning kuchlanish manbai batareyadagi yukga qarab tez o'zgarishi mumkin).

Komponentlar haqida bir nechta narsalarni aytib o'tish kerak. Birinchidan, darajani o'zgartiruvchi har qanday 5V signalini oladi va uni 3.3V Teensy 3.6 xavfsiz kuchlanishiga aylantiradi. Bu OBD I2C adapteri va zaxira sensori qabul qiluvchi uchun zarur. Ikkinchidan, o'smirlik davrining I2C liniyalari 4,7 kΩ qarshilik tortish rezistorlarini talab qiladi. Uchinchidan, "tungi vaqt simini" va "zaxira simini" bog'laydigan to'rtta rezistor 12V-13V signallarini taxminan 2,5-3V signallarga etkazish uchun kuchlanish bo'luvchi vazifasini bajarishi uchun zarur.

22/7/18 YANGILASh: Men OBD-I2C modulining ichki harorat sensori juda g'alati raqamlarni chiqarayotganini topdim. Ba'zida u ishlay olardi, lekin ko'pincha modul 400 darajadan yuqori haroratni chiqaradi. Shu sababli men o'zim ds18b20 harorat sensori qo'shishga qaror qildim. Siz bu erda har qanday turdagi harorat sensori ishlatishingiz mumkin, lekin siz Arduino kodini o'zgartirishingiz kerak bo'ladi.

3/1/19 YANGILASh: Teensy 3.6 juda sovuq bo'lganida boshlanmaydi. Men uning to'g'ri yuklanishiga ishonch hosil qilish uchun qayta o'rnatish sxemasini qo'shdim.

4 -qadam: RA8875 displey drayveri va grafik dizayni

RA8875 displey haydovchi va grafik dizayn
RA8875 displey haydovchi va grafik dizayn

RA8875 displey drayverida Adafruit_RA8875 nomli kutubxona mavjud bo'lib, men uni birinchi va ikkinchi sahifada ko'rinadigan shakllarni yaratishda ishlatganman. RA8875 kutubxonasi faqat chiziqlar, to'rtburchaklar, yumaloq to'rtburchaklar, uchburchaklar, ellipslar va aylanalarni yaratishi mumkin, shuning uchun grafikalar yanada murakkab shakllar yaratish uchun aqlli tarzda tuzilishi kerak. Masalan, birinchi sahifadagi kulrang halqa, aslida katta diametrli to'la kulrang doira bo'lib, undan kichikroq diametrli to'liq qora aylana. Shuningdek, zaxira sensori sahifasining bitta kichik qismida 2 uchburchaklar mavjud bo'lib, ular ko'pburchak shaklga ega bo'ladi. Men buni zaxira sensori sahifasining alohida bo'limining rangini o'zgartirish uchun qildim. Displey uchun Arduino faylida men uchburchaklar va boshqa shakllar qaerda ekanligini kuzatib boradigan nuqtalar to'plami mavjud.

Men bu ajoyib veb-saytni RGB565 ranglarini tanlash va eskizda aniqlash uchun ishlatganman, shuning uchun Adafruit_RA8875 kutubxonasida oldindan belgilangan standart bo'lmagan ranglardan foydalanishim mumkin.

Shriftlar nuqtai nazaridan, Adafruit_RA8875 kutubxonasi Adafruit_GFX kutubxonasi shriftlaridan foydalanish imkonini beradigan kutubxona bo'limiga izoh bermaguningizcha faqat bittasini qo'llab -quvvatlaydi. Quyida men o'zgartirilgan Adafruit_RA8875 kutubxonasini qo'shdim. Men bir nechta kod satrlarini sharhladim va keyin Adafruit_GFX kutubxonasidagi shriftlardan foydalana oldim. Bundan tashqari, men ushbu loyihada foydalangan 7 segmentli shriftdan foydalanish uchun, "FreeSevenSegNumFont.h" fayli Adafruit_GFX kutubxonasidagi shriftlar papkasida ekanligiga ishonch hosil qiling.

5 -qadam: Eskizni yuklash

Eskiz yuklanmoqda
Eskiz yuklanmoqda
Eskiz yuklanmoqda
Eskiz yuklanmoqda

Eskizni Teensy 3.6 -ga yuklash uchun siz Teensyduino -ni o'rnatishingiz kerak bo'ladi. Keyin Adafruit_RA8875 va Adafruit_GFX kutubxonalarini o'smirlar kutubxonasi o'rnida almashtirishingiz kerak bo'ladi (hujjatlardagi odatiy joyingiz emas). Mac -da, men ilovalardagi Arduino dastur belgisini o'ng tugmasini bosib, keyin/Contents/Java/hardware/teensy/avr/kutubxonalariga o'tishim kerak edi. Ishonchim komilki, u sizning x drayveringiz ostida, x86, Arduino dastur fayllarida, so'ngra apparat papkasida joylashgan. Buni qilgandan so'ng, siz Arduino ilovasidagi eskizlar manzilini o'smirlik kutubxonalaringiz xohlagan joyiga (masalan, /Applications/Arduino.app/Contents/Java/hardware/teensy/avr) o'zgartirish orqali o'zgartirishingiz kerak bo'ladi.

22/16/16 YANGILASh: Men yuqorida aytib o'tgan ichki harorat sensori muammosi tufayli DS18B20 modulli harorat sensori o'rnatishga to'g'ri keldi. Zip faylida 4 ta arduino eskizini ko'rasiz. Agar siz OBD-II I2C modulining ichki harorat sensori ishlatmoqchi bo'lsangiz, display_code eskizini yuklang. Iltimos, agar yuqorida ko'rsatilgan DS18B20 modulidan foydalanmoqchi bo'lsangiz, display_code_with_new_temperature_sensor eskizini yuklang.

17.11.17 YANGILASh: Men dasturiy ta'minotdagi bir nechta xatolarni tuzatdim, shu jumladan DS18B20, harorat 185 Farenxayt, sovuq havoda displey umuman yoqilmaydi va displey xiralashganda piksellar noto'g'ri rangda qolib ketadi.

Keyin, o'smirlik sozlamalari rasmga mos kelishiga ishonch hosil qilish uchun yuqoridagi rasmdan foydalaning. Men o'smirni 240 MGts gacha overclock qilish I2C OBD-II adapterining o'smirlar bilan aloqa qilishiga yo'l qo'ymasligini aniqladim. Nihoyat, yuklashni bosing.

Men arduino eskiz fayllariga juda keng sharhlar yozdim. Iltimos, u erda dasturiy ta'minot qanday ishlashini tushuntirish uchun qarang. Iltimos, har qanday savol bilan men bilan bog'laning. Men ularga imkon qadar javob berishga harakat qilaman. Omad!

6 -qadam: LCD displeyni 3D bosib chiqarish

LCD displeyli korpusni 3D chop etish
LCD displeyli korpusni 3D chop etish
LCD displeyli korpusni 3D chop etish
LCD displeyli korpusni 3D chop etish
LCD displeyli korpusni 3D chop etish
LCD displeyli korpusni 3D chop etish

Men 7 dyuymli displeyni himoya qilish uchun 3D bosilgan LCD yuqori va pastki qopqog'ini yaratdim. Men. IPT ixtirochi qismli fayllarni, shuningdek. STL fayllarini biriktirdim.

Men shuningdek, backup_sensor_ring.ipt deb nomlangan qismni o'z ichiga olganman, bu men bog'lagan zaxira sensorlariga mos keladigan halqa. Mening mashinamda Amazonda sotib olgan zaxira sensorlar uchun juda katta bo'lgan oldindan ochilgan zaxira sensori teshiklari bor edi, shuning uchun men zaxira datchiklariga mos keladigan uzuk yaratishim kerak edi. Agar siz bamperingizga to'plamdagi dumaloq matkap bilan burg'ilamoqchi bo'lsangiz, sizga bu qism kerak bo'lmaydi.

7-qadam: OBD-II portini ajratish, shuning uchun Arduino faqat mashina ishlayotganda kuchga ega

OBD-II portini ajratish, shuning uchun Arduino faqat mashina ishlayotganda kuchga ega
OBD-II portini ajratish, shuning uchun Arduino faqat mashina ishlayotganda kuchga ega
OBD-II portini ajratish, shuning uchun Arduino faqat mashina ishlayotganda kuchga ega
OBD-II portini ajratish, shuning uchun Arduino faqat mashina ishlayotganda kuchga ega
OBD-II portini ajratish, shuning uchun Arduino faqat mashina ishlayotganda kuchga ega
OBD-II portini ajratish, shuning uchun Arduino faqat mashina ishlayotganda kuchga ega

Men displeyni o'rnatganimdan ko'p o'tmay, displey har doim yonib turishini, hatto mashina o'chirilgan bo'lsa ham angladim. OBD-II pinoutini ko'rib chiqib, OBD-II ulagichining 12V kuchlanish liniyasi har doim to'g'ridan-to'g'ri batareyaga ulanganligini aniqladim.

Buning oldini olish uchun men OBD-II ajratgichni sotib oldim, ajratgichdagi ikkita ulagichdan biriga 16-pinli simni kesib tashladim va keyin kesilgan simni zanjir simiga uladim.

Keyin, multimetrdan foydalanib, men haydovchi yonidagi sug'urta qutisiga bordim va kalitni kontaktga aylantirgandan so'ng, qaysi sug'urta quvvatga ega ekanligini tekshirish uchun mavjud sigortalarni sinab ko'rdim.

Nihoyat, men o'zim o'rnatgan sigortaga elektr simini uladim, shunda displey faqat mening mashinam ishlayotganda yonadi. Iltimos, mashinangizga kontaktlarning zanglashini qanday to'g'ri kiritish haqida bir oz tadqiqot o'tkazing. Men bu youtube darsligini yaxshi dars deb topdim.

Tavsiya: