İçindekiler:

Arduino Araba Ekranı: 7 Adım (Resimlerle)
Arduino Araba Ekranı: 7 Adım (Resimlerle)

Video: Arduino Araba Ekranı: 7 Adım (Resimlerle)

Video: Arduino Araba Ekranı: 7 Adım (Resimlerle)
Video: Arduino lu Akıllı Araç Şasi Kurulumu (Smart Car) 2024, Temmuz
Anonim
Image
Image
Arduino Araba Ekranı
Arduino Araba Ekranı
Arduino Araba Ekranı
Arduino Araba Ekranı

Adafruit'ten 7 TFT LCD, Teensy 3.6, Freematics OBD-II I2C Adaptörü ve Amazon'da bulduğum bazı cıvıl cıvıl yedekleme sensörlerini kullanarak yerleşik tanılama (OBD-II) tabanlı bir ekran oluşturdum. Ekranın iki sayfası var: biri Honda Accord'um yoldayken diğeri geri vitesteyken.

Arabam hareket halindeyken, RPM, MPH, motor yük yüzdesi, akü voltajı, kabin sıcaklığı ve motor soğutma suyu sıcaklığı görüntülenir (istenmeyenler için gösterilebilecek birkaç başka araç istatistiği vardır).

Arabam geri giderken, Arduino IDE uyumlu Teensy 3.6, çevrimiçi bulduğum arabamın animasyonlu bir bitmap görüntüsünü okur, görüntüler ve ardından yedek sensörleri okur. Dört sensörün her birinin fit cinsinden mesafesi ve arabanın arkasında nesnenin araca ne kadar yakın olduğuna bağlı olarak renk değiştiren bir animasyonu vardır (sadece yeşil < 5 fit, yeşil ve sarı < 2,6 fit ve yeşil, sarı, ve kırmızı < 1 ayak anlamına gelir).

Son olarak, geceleri ekranı karartma özelliğini ekledim.

Sonuç harika görünüyor ve arabamda çok iyi çalışıyor. Hatta onu orta konsola kurdum, bu da bu talimatta yer almayacağım başka bir süreçti. Bu LCD ekranı oluşturmak için kullandığım parçaların listesi aşağıdadır.

1) Freematics OBD-II Adaptörü - 35 $

2) Yedek Sensörler - 15 $

3) 7 TFT LCD Ekran - 38 $

4) SPI tabanlı LCD Ekran Sürücüsü - 35 $

5) Ufacık 3,6 - 30 $

6) Seviye Değiştirici - 4 $

7) 74HC125 Tri State Buffer IC - 2 paket için 6 $ (Eminim bu cıvıltıyı başka bir yerde bulabilirsin)

8) MicroSD Kart >= 1 GB - 4 $

9) Tel, kapasitörler ve dirençler.

10) LP3470-2.93 Sıfırlama IC'sinde Güç - $2

11) (isteğe bağlı): DS18B20 Sıcaklık Sensörü - 8 $

12) (isteğe bağlı): OBD-II Ayırıcı - 10$

13) (isteğe bağlı): Bir devre sigorta kablosu ekleyin - 5'li paket için 8 ABD doları

Adım 1: Yedekleme Sensörlerini Okuma

Yedekleme Sensörlerini Okumak
Yedekleme Sensörlerini Okumak
Yedekleme Sensörlerini Okumak
Yedekleme Sensörlerini Okumak
Yedekleme Sensörlerini Okuma
Yedekleme Sensörlerini Okuma
Yedekleme Sensörlerini Okumak
Yedekleme Sensörlerini Okumak

Bu adım yanıltıcıdır çünkü bu yedekleme sensörleri, yukarıdaki resimde görüldüğü gibi bir alıcı-verici ve ardından küçük bir LCD ile iletişim kurar. Ekranlarından kurtulmanın ve kendiminkini kullanmanın bir yolunu istedim. Biraz googling yaptıktan sonra bulduğum bir web sitesinin yardımıyla (Ters park sensörlerini hackleme), alıcı-vericinin LCD ekrana gönderdiği özel iletişim protokolünü okuyabildim. Bazı nedenlerden dolayı iletişim protokolü, I2C, UART, CAN, USB vb. gibi tipik bir protokol değildir ve protokol, tedarikçiye bağlı olarak farklılık gösterir. Kodumu kullanacaksanız yukarıda linkini verdiğim seti satın almanızı şiddetle tavsiye ederim çünkü o sensörler için özel olarak yazılmıştır.

Sağladıkları LCD'nin bağlantısını kesmeden önce, alıcı-vericiyi ve LCD'yi birleştiren üç kabloyu araştırdım. +5V kırmızı kablo, toprak siyah kablo ve mavi kablo vardı. Osiloskopumu mavi kabloya ve toprağa bağladıktan sonra, yukarıda görülen resme benzer bir iz gördüm ama tam olarak değil (yukarıda bağlantısı verilen web sitesindeki resmi kullandım). İzlememde YÜKSEK daha uzun süreli bir başlangıç biti ve ardından 17 daha kısa süreli bit vardı. Başlangıç bitinden sonraki 0-5 bitleri yararlı bilgiye sahip değildi. 6-8 bitleri A, B, C veya D sensörüne karşılık gelir. 9-16 bitleri metre cinsinden uzunluğa karşılık gelir. Sensörleri okuyan ve verileri seri konsol üzerinden veren bir Arduino IDE taslağı ekledim.

Adım 2: Bitmap Görüntüsü Oluşturma ve Bir MicroSD Karta Yerleştirme

Bitmap Görüntüsü Oluşturma ve Bir MicroSD Karta Yerleştirme
Bitmap Görüntüsü Oluşturma ve Bir MicroSD Karta Yerleştirme
Bitmap Görüntüsü Oluşturma ve Bir MicroSD Karta Yerleştirme
Bitmap Görüntüsü Oluşturma ve Bir MicroSD Karta Yerleştirme

Arabamın bir görüntüsünü üstten görünümden kırpmak ve yeniden boyutlandırmak için GIMP adlı ücretsiz bir fotoğraf düzenleme yazılımı kullandım. Daha sonra görüntüyü 110 piksele 250 piksel olan "car.bmp" adlı 24 bitlik bir bitmap görüntüsü olarak dışa aktardım. Bunu bir microSD karta yükledim ve microSD kartı Teensy 3.6 mikro denetleyicime yerleştirdim.

UNO yerine Teensy 3.6 ile gitmemin ana nedenleri, Teensy'nin bir SD kartı okuyabildiği ve görüntüyü RA8875 ekran sürücüsünü kullanarak gösterebildiği hızdı. Bir UNO kullanarak, işlem yaklaşık 8 saniye sürdü, Teensy 3.6 ise 1.8 saniye sürdü.

Adım 3: Donanımı Bağlama

Donanımı Bağlama
Donanımı Bağlama

Adafruit, RA8875 adlı bir IC tarafından çalıştırılan gerçekten iyi görünümlü 7 TFT LCD'ye sahip. Bu ekran ve ekran sürücüsünü iki nedenden dolayı seçtim. Birincisi, ekran için önceden yazılmış kapsamlı kütüphaneler var. İkincisi, ekran sürücüsü ile konuşabiliyor. SPI üzerinden herhangi bir mikrodenetleyici, yani mikrodenetleyiciyi RA8875'e bağlayan çok fazla kablo yok.

Bu kurulumun iki dezavantajı var. Birincisi, SD kart gibi herhangi bir SPI tabanlı cihaz kullanmak istiyorsanız, Adafruit'in RA8875 kartında 74HC125 üç durumlu tampon IC'nin kullanılmasını gerektiren bir donanım hatası olduğu gerçeğidir. Donanım hatasını daha tam olarak anlamak için lütfen aşağıdaki forumu okuyun. İkincisi, görüntülerin LCD'ye gönderilmesi için gereken nispeten uzun süredir. Ayrıca, bir görüntünün LCD'ye gönderilmesi için gereken uzun süre, mikro denetleyicilerin saat hızı ve ekran sürücüsüne gönderilmesi gereken büyük miktarda veri ile sınırlı olan SPI bağlantısından kaynaklanmaktadır. çok az kablo.

Bu ekranı oluşturmak isteyen herkesin Teensy 3.6'daki hangi pinlerin bağlandığını kolayca okuyabilmesi için bir Fritzing şeması oluşturdum. Aşağıya bir.frz dosyası ekledim. Etiketlenmemiş yalnızca iki bileşen, 1F 16V elektrolitik kapasitör ve 100μF seramik kapasitör olan kapasitörlerdir. Bunları Teensy mikrodenetleyiciye giden gücün sabit DC +5V olduğundan ve herhangi bir voltaj yükselmeleri içermediğinden emin olmak için ekledim (gerekli olmayabilir ama bunları dahil ettim çünkü bir arabanın voltaj beslemesi aküdeki yüke bağlı olarak hızla dalgalanabiliyor).

Bileşenler hakkında söylenecek birkaç şey. İlk olarak, seviye değiştirici herhangi bir 5V sinyali alır ve onu 3.3V Teensy 3.6 güvenli voltaja dönüştürür. Bu, OBD I2C adaptörünün yanı sıra yedek sensör alıcı-vericisi için gereklidir. İkincisi, gençliğin I2C hatları 4.7kΩ çekme dirençleri gerektirir. Üçüncüsü, "gece teli"ni (karartma teli) ve "yedek bağlantı telini" bağlayan dört direnç, 12V-13V sinyallerini yaklaşık 2,5-3V sinyallere düşürmek için bir voltaj bölücü olarak hizmet etmek için gereklidir.

GÜNCELLEME 7/22/18: OBD-I2C modülünün dahili sıcaklık sensörünün çok garip rakamlar verdiğini gördüm. Bazen işe yarayabilirdi, ancak çoğu zaman modül 400 derece F'nin üzerinde sıcaklıklar veriyordu. Bu nedenle, kendi ds18b20 sıcaklık sensörümü eklemeye karar verdim. Burada herhangi bir sıcaklık sensörünü kullanabilirsiniz, ancak Arduino kodunu düzenlemeniz gerekecek.

GÜNCELLEME 3/1/19: Teensy 3.6, aşırı soğuk olduğunda başlamıyor. Düzgün önyüklendiğinden emin olmak için bir güç açık sıfırlama devresi ekledim.

Adım 4: RA8875 Ekran Sürücüsü ve Grafik Tasarımı

RA8875 Ekran Sürücüsü ve Grafik Tasarımı
RA8875 Ekran Sürücüsü ve Grafik Tasarımı

RA8875 ekran sürücüsünün Adafruit_RA8875 adında bir kitaplığı var ve bu kitaplığı ilk sayfada ve ikinci sayfada görülen şekilleri oluştururken kullanıyorum. RA8875 kitaplığı yalnızca çizgiler, dikdörtgenler, yuvarlak dikdörtgenler, üçgenler, elipsler ve daireler oluşturabilir, bu nedenle grafiklerin daha karmaşık şekiller oluşturmak için akıllı bir şekilde tasarlanması gerekir. Örneğin, ilk sayfadaki gri halka aslında daha büyük çaplı tam gri bir daire ve ardından daha küçük çaplı tam siyah bir dairedir. Ayrıca, yedek sensör sayfasının küçük bir bölümü, çokgen şekli oluşturacak şekilde düzenlenmiş 2 üçgen içerir. Bunu, yedek sensör sayfasının tek bir bölümünün rengini değiştirebilmek için yaptım. Ekranın Arduino dosyası, üçgenlerin ve diğer şekillerin nerede olduğunu takip etmek için kullandığım bir dizi nokta içeriyor.

Bu harika web sitesini RGB565 renklerini seçmek ve taslakta tanımlamak için kullandım, böylece Adafruit_RA8875 kitaplığında önceden tanımlanmış varsayılan olmayan renkleri kullanabilirdim.

Yazı tipleri açısından, Adafruit_RA8875 kitaplığı, kitaplığın bir bölümünü yorumlamadığınız sürece yalnızca birini destekler; bu, yazı tiplerini Adafruit_GFX kitaplığında kullanmanıza izin verir. Aşağıda değiştirilmiş Adafruit_RA8875 kitaplığını ekledim. Sadece birkaç satır kod yorumladım ve ardından Adafruit_GFX kitaplığındaki yazı tiplerini kullanabildim. Ayrıca bu projede kullandığım 7 segmentli fontu kullanmak için Adafruit_GFX kütüphanesinde fontlar klasöründe bulunan "FreeSevenSegNumFont.h" dosyasının olduğundan emin olunuz.

Adım 5: Çizimi Yükleme

Çizimi Yükleme
Çizimi Yükleme
Çizimi Yükleme
Çizimi Yükleme

Taslağı bir Teensy 3.6'ya yüklemek için Teensyduino'yu kurmanız gerekecek. Ardından, Teensy library konumunda (belgelerdeki tipik konumunuz değil) Adafruit_RA8875 ve Adafruit_GFX kitaplıklarını değiştirmeniz gerekecektir. Mac'te, uygulamalarda Arduino uygulama simgesine sağ tıklamam ve ardından /Contents/Java/hardware/teensy/avr/libraries'e gitmem gerekiyordu. Windows'ta, Program dosyaları x86, Arduino ve ardından oradaki donanım klasöründe C sürücünüzün altında olduğundan eminim. Bunu yaptıktan sonra, Arduino uygulamasındaki eskiz defteri konumunu, teensy kitaplıklarınızın bulunduğu yere göre (yani /Applications/Arduino.app/Contents/Java/hardware/teensy/avr) düzenleyerek değiştirmeniz gerekecektir.

GÜNCELLEME 7/22/16: Daha önce bahsettiğim dahili sıcaklık sensörü sorunu nedeniyle bir DS18B20 modül sıcaklık sensörü takmak zorunda kaldım. Zip dosyasında 4 arduino çizimi göreceksiniz. OBD-II I2C modülünün dahili sıcaklık sensörünü kullanmak istiyorsanız lütfen display_code taslağını yükleyin. Yukarıda bağladığım DS18B20 modülünü kullanmak istiyorsanız lütfen display_code_with_new_temperature_sensor taslağını yükleyin.

GÜNCELLEME 11/17/17: DS18B20'nin 185 Fahrenheit sıcaklık vermesi, ekranın soğuk havada hiç açılmaması ve ekran karartıldığında piksellerin yanlış renkte takılması dahil olmak üzere yazılımdaki birkaç hatayı düzelttim.

Ardından, teensy ayarlarınızın resimle eşleştiğinden emin olmak için yukarıdaki resmi kullanın. Teensy'yi 240MHz'e overclock etmenin I2C OBD-II adaptörünün teensy ile iletişim kurmasına izin vermediğini buldum. Son olarak, sadece yükle'yi tıklayın.

Arduino eskiz dosyalarına oldukça geniş yorumlar yazdım. Yazılımın nasıl çalıştığına dair bir açıklama için lütfen oraya bakın. Lütfen herhangi bir sorunuz varsa benimle iletişime geçmekten çekinmeyin. Elimden geldiğince onlara cevap vermeye çalışacağım. İyi şanlar!

Adım 6: Bir LCD Kasayı 3D Bastırın

LCD Kasayı 3D Bastırın
LCD Kasayı 3D Bastırın
LCD Kasayı 3D Bastırın
LCD Kasayı 3D Bastırın
LCD Kasayı 3D Bastırın
LCD Kasayı 3D Bastırın

7 ekranı korumak için 3D baskılı LCD üst ve alt kapak oluşturdum.. IPT mucit parça dosyalarını ve. STL dosyalarını ekledim.

Ayrıca, yukarıda bağladığım yedekleme sensörlerine uyan bir halka olan backup_sensor_ring.ipt adlı bir parçayı da ekledim. Arabamda Amazon'dan satın aldığım yedek sensörler için çok büyük olan önceden delinmiş yedek sensör delikleri vardı, bu yüzden yedek sensörlere uyacak bir halka oluşturmam gerekiyordu. Set içerisinde bulunan dairesel matkap parçası ile tamponunuzu delecekseniz bu parçaya ihtiyacınız olmayacaktır.

Adım 7: OBD-II Bağlantı Noktasını, Arduino'nun Yalnızca Araba Çalışırken Gücü Olacak Şekilde Bölmesi

OBD-II Bağlantı Noktasını Bölerek Arduino'nun Sadece Araba Çalışırken Gücü Var
OBD-II Bağlantı Noktasını Bölerek Arduino'nun Sadece Araba Çalışırken Gücü Var
OBD-II Bağlantı Noktasını Bölerek Arduino'nun Sadece Araba Çalışırken Gücü Var
OBD-II Bağlantı Noktasını Bölerek Arduino'nun Sadece Araba Çalışırken Gücü Var
OBD-II Bağlantı Noktasını Bölerek Arduino'nun Sadece Araba Çalışırken Gücü Var
OBD-II Bağlantı Noktasını Bölerek Arduino'nun Sadece Araba Çalışırken Gücü Var

Ekranımı kurduktan kısa bir süre sonra, araba kapalıyken bile ekranın her zaman açık olduğunu fark ettim. OBD-II pin çıkışına baktığımda, OBD-II konektörüne giden 12V güç hattının her zaman doğrudan aküye bağlı olduğunu gördüm.

Bunu aşmak için bir OBD-II ayırıcı satın aldım, ayırıcıdaki iki konektörden birinin üzerindeki pim 16'ya giden kabloyu kestim ve ardından bu kesme kablosunu bir ek devre kablosuna bağladım.

Ardından, multimetremi kullanarak sürücü tarafındaki sigorta kutusuna gittim ve anahtar kontağa çevrildikten sonra hangi sigortanın güç aldığını görmek için mevcut sigortaları test ettim.

Son olarak, eklediğim sigortaya ek devre kablosunu bağladım, böylece ekran artık sadece arabam çalışırken yanıyor. Lütfen arabanıza nasıl düzgün bir şekilde devre ekleyeceğiniz konusunda biraz araştırma yapın. Bu youtube eğitimini iyi buldum.

Önerilen: