Mündəricat:

Arduino Avtomobil Ekranı: 7 addım (şəkillərlə birlikdə)
Arduino Avtomobil Ekranı: 7 addım (şəkillərlə birlikdə)

Video: Arduino Avtomobil Ekranı: 7 addım (şəkillərlə birlikdə)

Video: Arduino Avtomobil Ekranı: 7 addım (şəkillərlə birlikdə)
Video: Lesson 95: Using L293D 4 DC Motors Shield for Arduino UNO and Mega | Arduino Step By Step Course 2024, Iyul
Anonim
Image
Image
Arduino Avtomobil Ekranı
Arduino Avtomobil Ekranı
Arduino Avtomobil Ekranı
Arduino Avtomobil Ekranı

Adafruit-dən 7 düymlük TFT LCD, Teensy 3.6, Freematics OBD-II I2C Adaptoru və Amazonda tapdığım bəzi arxa arxa sensorlardan istifadə edərək yerüstü diaqnostika (OBD-II) əsaslı ekran qurdum. Ekranın iki səhifəsi var: biri Honda Accord -un idarə etdiyi zaman, biri isə tərs olduğu zaman.

Maşını idarə edərkən, RPM, MPH, mühərrik yükü faizi, batareya gərginliyi, kabin istiliyi və mühərrikin soyuducu suyunun istiliyi göstərilir (kimsə bunu istəmirsə göstərmək üçün bir neçə başqa avtomobil statistikası mövcuddur).

Avtomobilim tərsinə çevrildikdə, Arduino IDE uyğun Teensy 3.6, onlayn olaraq tapdığım avtomobilimin cizgi bitmap şəklini oxuyur, göstərir və sonra ehtiyat sensörlərini oxuyur. Dörd sensorun hər birinin ayaq məsafəsi və avtomobilin arxasındakı cismin avtomobilə nə qədər yaxın olduğuna görə rəngini dəyişən bir animasiya var (yalnız yaşıl <5 fut, yaşıl və sarı <2.6 fut deməkdir və yaşıl, sarı, və qırmızı <1 fut) deməkdir.

Nəhayət, gecələr ekranı söndürmək qabiliyyətini əlavə etdim.

Nəticə əla görünür və maşınımda çox yaxşı işləyir. Hətta bu konsolun içərisinə girməyəcəyim başqa bir proses olan mərkəzi konsolda quraşdırmağı bitirdim. Bu LCD ekranı yaratmaq üçün istifadə etdiyim hissələrin siyahısı aşağıda verilmişdir.

1) Freematics OBD -II Adapter - 35 dollar

2) Yedək Sensorları - 15 dollar

3) 7 TFT LCD Ekran - 38 dollar

4) SPI əsaslı LCD Ekran Sürücüsü - 35 dollar

5) Teensy 3.6 - 30 dollar

6) Səviyyə dəyişdiricisi - 4 dollar

7) 74HC125 Tri State Buffer IC -2 paket üçün 6 dollar (əminəm ki, başqa bir yerdə tapa bilərsiniz)

8) MicroSD Kartı> = 1 GB - 4 dollar

9) Tel, kondansatörlər və rezistorlar.

10) LP3470-2.93 Gücünü Sıfırla IC - 2 dollar

11) (isteğe bağlı): DS18B20 Temperatur Sensoru - 8 dollar

12) (isteğe bağlı): OBD -II Splitter - 10 dollar

13) (isteğe bağlı): 5 ədəd paketi üçün bir dövrə qoruyucu kabel əlavə edin - 8 dollar

Addım 1: Yedək Sensorlarını Oxuyun

Yedək Sensorlarının Oxunması
Yedək Sensorlarının Oxunması
Yedək Sensorlarının Oxunması
Yedək Sensorlarının Oxunması
Yedək Sensorlarının Oxunması
Yedək Sensorlarının Oxunması
Yedək Sensorlarının Oxunması
Yedək Sensorlarının Oxunması

Bu ehtiyat sensorlar bir ötürücü ilə, sonra isə yuxarıdakı şəkildə göründüyü kimi kiçik bir LCD ilə əlaqə qurduğundan bu addım çətindir. Ekranından qurtulmaq və öz ekranımdan istifadə etmək üçün bir yol istədim. Bir az googlingdən (tərs park sensorlarını sındırmaqdan) sonra tapdığım bir veb saytın köməyi ilə qəbuledicinin LCD ekrana göndərdiyi mülkiyyət ünsiyyət protokolunu oxuya bildim. Nədənsə, ünsiyyət protokolu I2C, UART, CAN, USB və s. Kodumu xüsusi olaraq bu sensorlar üçün yazıldığı üçün istifadə edəcəyiniz təqdirdə yuxarıda bağladığım dəsti satın almanızı şiddətlə tövsiyə edirəm.

Verdikləri LCD -ni ayırmadan əvvəl, qəbuledici və LCD -yə qoşulan üç teli yoxladım. +5V qırmızı tel, torpaq qara tel və mavi tel var idi. Osiloskopumu mavi telə və yerə bağladıqdan sonra yuxarıda gördüyümüz şəklə oxşar bir iz gördüm, amma tam olaraq yox idi (yuxarıda əlaqəli veb saytdakı şəkildən istifadə etdim). İzimdə YÜKSEK uzun müddətli başlanğıc biti, daha sonra 17 daha qısa müddət biti var. Başlanğıc bitindən sonra 0-5 bitlərində faydalı məlumatlar yox idi. 6-8-ci bitlər A, B, C və ya D sensoruna uyğundur. 9-16-cı bitlər metr uzunluğuna uyğun gəlir. Sensorları oxuyan və məlumatları seriyalı konsol üzərindən çıxaran bir Arduino IDE eskizi daxil etdim.

Addım 2: Bitmap Şəkil Yaratmaq və MicroSD Kartına Qoymaq

Bitmap Görüntüsünün Yaradılması və MicroSD Kartına Yerləşdirilməsi
Bitmap Görüntüsünün Yaradılması və MicroSD Kartına Yerləşdirilməsi
Bitmap Görüntüsünün Yaradılması və MicroSD Kartına Yerləşdirilməsi
Bitmap Görüntüsünün Yaradılması və MicroSD Kartına Yerləşdirilməsi

GIMP adlı pulsuz bir şəkil düzəltmə proqramından istifadə edərək avtomobilimin görüntüsünü üst görünüşdən kəsib ölçüsünü dəyişdim. Daha sonra görüntüyü "car.bmp" adlı 24 bitlik bitmap şəkli olaraq ixrac etdim ki, bu da 110 piksel x 250 piksel. Bunu bir microSD kartına yüklədim və microSD kartı Teensy 3.6 mikrokontrollerimə qoydum.

UNO yerinə Teensy 3.6 ilə getməyimin əsas səbəbləri, Teensy -nin bir SD kartı oxuya və RA8875 ekran sürücüsündən istifadə edərək görüntüyü göstərə bilmə sürəti idi. Bir UNO istifadə edərək, proses təxminən 8 saniyə, Teensy 3.6 isə 1.8 saniyə çəkdi.

Addım 3: Avadanlıqların birləşdirilməsi

Avadanlıq Bağlanması
Avadanlıq Bağlanması

Adafruit, RA8875 adlı bir IC tərəfindən idarə olunan həqiqətən yaxşı görünüşlü 7 TFT LCD -yə malikdir. Mən bu ekran və ekran sürücüsünü iki səbəbdən seçdim. Birincisi, ekran üçün əvvəlcədən yazılmış geniş kitabxanalar var. İkincisi, ekran sürücüsü danışa bilər SPI üzərindəki hər hansı bir mikro nəzarətçi, yəni mikro nəzarətçini RA8875 -ə bağlayan o qədər çox tel yoxdur.

Bu quruluşun iki mənfi tərəfi var. Birincisi, SD kart kimi hər hansı bir SPI əsaslı cihazdan istifadə etmək istəyirsinizsə, 74HC125 tri-state tampon IC-nin istifadəsini tələb edən Adafruit-dən RA8875 lövhəsi olan bir hardware səhvinin olmasıdır. Avadanlıq səhvini daha yaxşı başa düşmək üçün aşağıdakı forumu oxuyun. İkincisi, şəkillərin LCD -yə göndərilməsi üçün lazım olan nisbətən uzun müddətdir. Ayrıca, bir görüntünün LCD -yə göndərilməsi üçün lazım olan uzun müddət, mikro nəzarətçilərin saat sürəti və ekran sürücüsünə göndərilməli olan çoxlu məlumatlarla məhdudlaşan SPI bağlantısıdır. çox az tel.

Fritzing sxemini yaratdım ki, bu ekranı yaratmaq istəyən hər kəs Teensy 3.6 -da hansı pinlərin bağlandığını asanlıqla oxuya bilsin. Aşağıdakı.frz faylını daxil etdim. Etiketlənməyən yalnız iki komponent 1F 16V elektrolitik kondansatör və 100μF keramika kondansatörü olan kondansatörlərdir. Bunları Teensy mikrokontrolörünün gücünün sabit DC +5V olduğuna və heç bir gərginlik sıçrayışına malik olmadığına əmin olmaq üçün daxil etdim (lazım olmaya bilər, amma daxil etdim, çünki avtomobilin gərginlik təchizatı batareyanın yükündən asılı olaraq tez dəyişə bilər).

Komponentlər haqqında danışmaq üçün bir neçə şey. Birincisi, səviyyə dəyişdiricisi hər hansı bir 5V siqnalını alır və onu 3.3V Teensy 3.6 təhlükəsiz bir gərginliyə çevirir. Bu, OBD I2C adapteri və ehtiyat sensoru qəbuledicisi üçün lazımdır. İkincisi, yeniyetmənin I2C xətləri 4.7kΩ müqavimət tələb edir. Üçüncüsü, "gecə vaxtı telini" (karartma teli) və "ehtiyat bağlama telini" birləşdirən dörd rezistor, 12V-13V siqnallarını təxminən 2.5-3V siqnallara endirmək üçün bir gərginlik bölücü kimi xidmət etmək üçün lazımdır.

22/07/18 YENİLƏNİB: OBD-I2C modulunun daxili temperatur sensorunun çox qəribə nömrələr çıxardığını gördüm. Bəzən işləyərdi, amma çox vaxt modul 400 dərəcə F -dən yuxarı temperatur çıxarırdı. Buna görə öz ds18b20 temperatur sensörümü əlavə etmək qərarına gəldim. Burada hər hansı bir temperatur sensoru istifadə etməkdən daha çox xoşunuz gəlir, ancaq Arduino kodunu redaktə etməli olacaqsınız.

GÜNCELLEME 3/1/19: Teensy 3.6 həddindən artıq soyuq olduqda başlamaz. Düzgün açıldığından əmin olmaq üçün sıfırlama dövrəsinə bir güc əlavə etdim.

Addım 4: RA8875 Ekran Sürücüsü və Qrafik Dizaynı

RA8875 Ekran Sürücüsü və Qrafik Dizaynı
RA8875 Ekran Sürücüsü və Qrafik Dizaynı

RA8875 ekran sürücüsünün Adafruit_RA8875 adlı bir kitabxanası var ki, birinci səhifədə və ikinci səhifədə görünən formaları yaratarkən istifadə etdim. RA8875 kitabxanası yalnız xətlər, düzbucaqlılar, yuvarlaq düzbucaqlılar, üçbucaqlar, elipslər və dairələr yarada bilər, buna görə qrafiklər daha mürəkkəb formalar yaratmaq üçün ağıllı şəkildə dizayn edilməlidir. Məsələn, ilk səhifədəki boz üzük əslində daha böyük diametrli tam boz bir dairədir və ardınca kiçik diametrli tam qara dairədir. Ayrıca, ehtiyat sensoru səhifəsinin kiçik bir hissəsində çoxbucaqlı bir forma verəcək şəkildə düzülmüş 2 üçbucaq var. Yedək sensoru səhifəsinin ayrı bir hissəsinin rəngini dəyişdirmək üçün bunu etdim. Ekran üçün Arduino faylı, üçbucaqların və digər formaların harada olduğunu izləmək üçün istifadə etdiyim bir çox nöqtəni ehtiva edir.

Adafruit_RA8875 kitabxanasında əvvəlcədən təyin edilmiş qeyri-standart rənglərdən istifadə etmək üçün bu böyük veb saytdan RGB565 rənglərini seçmək və eskizdə təyin etmək üçün istifadə etdim.

Şriftlər baxımından Adafruit_RA8875 kitabxanası, Adafruit_GFX kitabxanasının şriftlərindən istifadə etməyə imkan verən kitabxananın bir hissəsini şərh etmədiyiniz təqdirdə yalnız birini dəstəkləyir. Aşağıda dəyişdirilmiş Adafruit_RA8875 kitabxanasını daxil etdim. Sadəcə bir neçə sətir kodu şərh etdim və sonra Adafruit_GFX kitabxanasındakı şriftlərdən istifadə edə bildim. Ayrıca, bu layihədə istifadə etdiyim 7 seqment şriftini istifadə etmək üçün, Adafruit_GFX kitabxanasındakı şriftlər qovluğunda olduğum "FreeSevenSegNumFont.h" faylına əmin olun.

Addım 5: Eskizin yüklənməsi

Sketch yüklənir
Sketch yüklənir
Sketch yüklənir
Sketch yüklənir

Eskizi Teensy 3.6 -ya yükləmək üçün Teensyduino'yu quraşdırmalısınız. Sonra yeniyetmə kitabxana yerindəki Adafruit_RA8875 və Adafruit_GFX kitabxanalarını dəyişdirməlisiniz (sənədlərdə tipik yeriniz deyil). Mac -da tətbiqlərdəki Arduino tətbiq simgesini sağ vurmalı idim və sonra/Contents/Java/hardware/teensy/avr/library -ə keçməliydim. Pəncərələrdə, əminəm ki, proqram faylları x86, Arduino və sonra oradakı hardware qovluğunda C sürücünüzün altındadır. Bunu etdikdən sonra, Arduino tətbiqetməsindəki eskiz kitabının yerini yeniyetmə kitabxanalarınızın olduğu yerlərə (yəni /Applications/Arduino.app/Contents/Java/hardware/teensy/avr) uyğun olaraq düzəldərək dəyişdirməlisiniz.

7/22/16 YENİLƏNİŞ: Daha əvvəl bəhs etdiyim daxili temperatur sensoru probleminə görə DS18B20 modulu temperatur sensoru quraşdırmalı oldum. Zip faylında 4 arduino eskizini görəcəksiniz. OBD-II I2C modulunun daxili temperatur sensorundan istifadə etmək istəyirsinizsə, xahiş edirik display_code eskizini yükləyin. Yuxarıda əlaqələndirdiyim DS18B20 modulundan istifadə etmək istəyirsinizsə, xahiş edirik display_code_with_new_temperature_sensor eskizini yükləyin.

17/11/17 GÜNCELLEME: Proqramda DS18B20, 185 Fahrenheit temperaturu çıxarmaq, soyuq havada ekran heç açılmaması və ekran qaralanda yanlış rəngdə qalması da daxil olmaqla bir çox səhvləri həll etdim.

Sonra, yeniyetməlik ayarlarınızın şəkilə uyğun olduğundan əmin olmaq üçün yuxarıdakı şəkildən istifadə edin. Yeniyetməni 240MHz-ə qədər aşırtmaq I2C OBD-II adapterinin yeniyetmələrlə ünsiyyət qurmasına imkan vermədiyini gördüm. Nəhayət yükləməni vurun.

Arduino eskiz sənədlərində olduqca geniş şərhlər yazdım. Zəhmət olmasa proqramın necə işlədiyini izah etmək üçün ora baxın. Zəhmət olmasa hər hansı bir sualınız varsa mənimlə əlaqə saxlaya bilərsiniz. Bacardığım qədər onlara cavab verməyə çalışacağam. Uğurlar!

Addım 6: LCD Çantanı 3D çap edin

LCD Çanta 3D Çap
LCD Çanta 3D Çap
LCD Çanta 3D Çap
LCD Çanta 3D Çap
LCD Çanta 3D Çap
LCD Çanta 3D Çap

7 düymlük ekranı qorumaq üçün 3D çaplı LCD üst və alt qapaq yaratdım.. IPT ixtiraçı hissə fayllarını və. STL fayllarını əlavə etdim.

Yuxarıda əlaqələndirdiyim ehtiyat sensorlar ətrafına uyğun bir üzük olan backup_sensor_ring.ipt adlı bir hissə də daxil etdim. Avtomobilimdə artıq Amazon-dan aldığım ehtiyat sensorlar üçün çox böyük olan əvvəlcədən qazılmış ehtiyat sensor delikləri var idi, buna görə də ehtiyat sensorlarına uyğun bir üzük yaratmalı oldum. Dəstə daxil olan dairəvi matkap parçası ilə tamponunuza qazacaqsınızsa, bu hissəyə ehtiyacınız olmayacaq.

Addım 7: Arduino yalnız OBD-II Portunu parçalayır, ancaq maşın işləyərkən gücə malikdir

OBD-II Limanının Arduino-ya bölünməsi Maşın işləyərkən yalnız gücə malikdir
OBD-II Limanının Arduino-ya bölünməsi Maşın işləyərkən yalnız gücə malikdir
OBD-II Limanının Arduino-ya bölünməsi Maşın işləyərkən yalnız gücə malikdir
OBD-II Limanının Arduino-ya bölünməsi Maşın işləyərkən yalnız gücə malikdir
OBD-II Limanının Arduino-ya bölünməsi Maşın işləyərkən yalnız gücə malikdir
OBD-II Limanının Arduino-ya bölünməsi Maşın işləyərkən yalnız gücə malikdir

Ekranı quraşdırdıqdan qısa müddət sonra, avtomobil sönmüş olsa belə, ekranın həmişə açıq olduğunu anladım. OBD-II pinoutuna baxaraq gördüm ki, OBD-II konnektoruna 12V güc xətti həmişə birbaşa batareyaya bağlıdır.

Bunun öhdəsindən gəlmək üçün bir OBD-II ayırıcı aldım, splitterdəki iki bağlayıcıdan birində 16 pininə gedən teli kəsdim və sonra kəsilmiş teli bir dövrə telinə bağladım.

Sonra multimetrimi istifadə edərək sürücünün yan tərəfindəki qoruyucu qutusuna getdim və açarın alov alovuna çevrildikdən sonra hansı sigortanın gücə malik olduğunu yoxlamaq üçün mövcud sigortaları sınadım.

Nəhayət, əlavə etdiyim dövrə telini yerləşdiyim sigortaya bağladım ki, ekran indi yalnız maşınım işləyərkən açılsın. Zəhmət olmasa avtomobilinizə bir dövrəni necə düzgün bir şəkildə əlavə edəcəyinizi araşdırın. Bu youtube dərsliyini yaxşı bir dərs olaraq gördüm.

Tövsiyə: