Arduinoのカーディスプレイ:7つのステップ(写真付き)

Arduinoのカーディスプレイ:7つのステップ(写真付き)

目次:

Anonim

Adafruitの7インチTFT LCD、Teensy 3.6、Freematics OBD-II I2Cアダプタ、そしてAmazonで見つけた安いバックアップセンサーを使って、オンボード診断(OBD-II)ベースのディスプレイを作りました。ディスプレイには2ページあります。 1つは私のHonda Accordがドライブに入っているとき、もう1つがリバースになっているときです。

私の車が運転中のときは、RPM、MPH、エンジン負荷率、バッテリー電圧、キャビン温度、そしてエンジン冷却水温が表示されます(望まない場合は表示できる他のいくつかの車両統計があります)。

私の車が逆転しているとき、Arduino IDE互換のTeensy 3.6は私がオンラインで見つけた私の車の動画のビットマップ画像を読み、それからそれをバックアップセンサーを読む。 4つのセンサーはそれぞれ、フィート単位の距離と、オブジェクトが車にどれだけ近いかに基づいて色を変更する車の後ろのアニメーションを表示します(緑色は5フィート未満、緑色と黄色は2.6フィート未満、緑色と黄色は赤は1フィート未満を意味します。

最後に、夜間にディスプレイを暗くする機能を追加しました。

最終結果は素晴らしく見え、私の車の中で非常によく機能します。私はそれをセンターコンソールにインストールすることさえしました、それは私がこの指示に入ることができない他の全くのプロセスでした。このLCDディスプレイを作成するために使用した部品のリストは以下のとおりです。

1)Freematics OBD-IIアダプター - $ 35

2)バックアップセンサー - 15ドル

3)7 "TFT LCDディスプレイ - 38ドル

4)SPIベースのLCDディスプレイドライバ - $ 35

5)Teensy 3.6 - $ 30

6)レベルシフター - $ 4

7)74HC125トライステートバッファIC - 2パック6ドル(他の場所でもっと安く購入できると確信しています)

8)MicroSDカード> = 1 GB - $ 4

9)配線、コンデンサ、抵抗。

10)LP3470-2.93パワーオンリセットIC - $ 2

11)(オプション):DS18B20温度センサ - $ 8

12)(オプション):OBD-IIスプリッタ - $ 10

13)(オプション):回路ヒューズコードを追加します - 5個入りの場合$ 8

用品:

ステップ1:バックアップセンサーの読み取り

これらのバックアップセンサーはトランシーバーと通信し、次に上の写真のように小型のLCDと通信するため、この手順は巧妙です。私は彼らのディスプレイを取り除き、私自身のものを使う方法が欲しかった。グーグルの後で見つけたウェブサイト(ハッキングリバースパーキングセンサー)の助けを借りて、私はトランシーバーがLCDスクリーンに送る独自の通信プロトコルを読むことができました。何らかの理由で、通信プロトコルはI2C、UART、CAN、USBなどの典型的なものではなく、プロトコルはサプライヤによって異なります。私のコードを使用する場合は、上記のリンクセットを購入することを強くお勧めします。これらのセンサー用に特別に作成されたものです。

提供されているLCDを取り外す前に、トランシーバとLCDを接続している3本のワイヤを調べました。 + 5Vの赤い線、アースされた黒い線、そして青い線がありました。私のオシロスコープを青いワイヤーと地面に接続した後、私は上の写真と似ているが正確には描かれていない(上のリンク先のウェブサイトの写真を使った)。私のトレースはHIGHより長い期間の開始ビットがあり、その後に17のより短い期間のビットが続きました。スタートビットの後のビット0-5は有用な情報を持っていませんでした。ビット6〜8はセンサーA、B、C、またはDに対応します。ビット9〜16はメートル単位の長さに対応します。センサーを読み取り、シリアルコンソールを介してデータを出力するArduino IDEスケッチを含めました。

手順2:ビットマップイメージを作成してMicroSDカードに保存する

私はGIMPと呼ばれる無料の写真編集ソフトウェアを使用して、平面図から自分の車の画像をトリミングしてサイズを変更しました。次に、その画像を "car.bmp"という名前の110 x 250ピクセルの24ビットビットマップ画像としてエクスポートしました。これをmicroSDカードにアップロードし、そのmicroSDカードを私のTeensy 3.6マイクロコントローラに入れました。

私がUNOの代わりにTeensy 3.6を使った主な理由は、TeensyがSDカードを読み、RA8875ディスプレイドライバを使って画像を表示できる速度でした。 UNOを使用して、プロセスは約8秒かかりましたが、Teensy 3.6は1.8秒かかりました。

ステップ3:ハードウェアの接続

Adafruitには、RA8875と呼ばれるICで駆動される本当に見栄えの良い7インチTFT LCDがあります。2つの理由から、このディスプレイとディスプレイドライバを選びました。1つは、ディスプレイ用に作成された大規模なライブラリです。 SPIを介したマイクロコントローラ、つまりマイクロコントローラとRA8875を接続するワイヤはそれほど多くありません。

この設定には2つの欠点があります。 1つ目は、SDカードなどのSPIベースのデバイスを使用する場合に、AdafruitのRA8875ボードに74HC125トライステートバッファICを使用する必要があるというハードウェアバグがあることです。ハードウェアのバグをより完全に理解するために、以下のフォーラムを読んでください。次に、画像がLCDに送信されるまでにかかる比較的長い時間です。また、画像がLCDに送信されるのにかかる長い時間は、SPI接続が原因です。これは、マイクロコントローラのクロック速度と、ディスプレイドライバに送信する必要がある大量のデータによって制限されます。非常に少ないワイヤー。

私はFritzing回路図を作成したので、このディスプレイを作成したい人は誰でもTeensy 3.6のピンが何に接続しているのかを簡単に読むことができます。以下に.frzファイルを含めました。ラベルのない2つの部品はコンデンサだけです。これは1F 16V電解コンデンサと100μFセラミックコンデンサです。 Teensyマイクロコントローラの電源が安定したDC + 5Vで電圧スパイクが含まれていないことを確認するためにこれらを含めました(バッテリの負荷によって車の電圧供給が急速に変動する可能性があるため、含めませんでした)。

コンポーネントについて言及するいくつかのこと。まず、レベルシフタは5Vの信号を受け取り、それを3.3V Teensy 3.6の安全な電圧に変換します。これはOBD I2Cアダプタとバックアップセンサトランシーバに必要です。次に、10代のI2Cラインには4.7kΩのプルアップ抵抗が必要です。第3に、「夜間ワイヤ」(調光ワイヤ)と「バックアップ係合ワイヤ」とを接続する4つの抵抗器は、12V〜13Vの信号を約2.5〜3Vの信号にするための分圧器として機能するために必要である。

UPDATE 7/22/18:OBD-I2Cモジュールの内部温度センサーが非常に奇妙な数字を出力しているのを見つけました。それはうまくいくこともありましたが、ほとんどの場合、モジュールは400度Fを超える温度を出力していました。このため、私は自分のds18b20温度センサーを追加することにしました。ここではどんな種類の温度センサーを使っても大丈夫ですが、Arduinoのコードを編集する必要があります。

UPDATE 3/1/19:Teensy 3.6は極端に寒いと起動しません。私はそれが正しく起動することを確認するためにリセット回路をパワーオンにしました。

ステップ4:RA8875ディスプレイドライバとグラフィックデザイン

RA8875ディスプレイドライバには、Adafruit_RA8875というライブラリがあります。これは、1ページ目と2ページ目に表示される図形を作成するときに使用しました。 RA8875用のライブラリは、線、長方形、丸みを帯びた長方形、三角形、楕円形、および円しか作成できないため、より複雑な形状を作成するには、グラフィックを巧妙に設計する必要があります。たとえば、最初のページの灰色の輪は、実際には、直径の大きい完全な灰色の円とそれに続く小さい直径の完全な黒い円です。また、バックアップセンサーページの1つの小さなセクションに、2つの三角形があり、それらが多角形になるように配置されています。バックアップセンサーページの個々のセクションの色を変更できるようにこれを行いました。ディスプレイ用のArduinoファイルには、三角形や他の形状がどこにあるかを追跡するために使用した点の配列が含まれています。

私はこの素晴らしいWebサイトを使ってRGB565色を選び、スケッチでそれらを定義したので、Adafruit_RA8875ライブラリですでに定義されているデフォルト以外の色を使うことができました。

フォントに関しては、Adafruit_RA8875ライブラリは、ライブラリのセクションをコメントアウトしない限り、Adafruit_RA8875ライブラリのみをサポートします。これにより、Adafruit_GFXライブラリのフォントを使用できます。私は下記の修正Adafruit_RA8875ライブラリを含めました。数行のコードをコメントアウトしただけで、Adafruit_GFXライブラリのフォントを使用できました。また、このプロジェクトで使用した7セグメントフォントを使用するには、Adafruit_GFXライブラリのフォントフォルダにある "FreeSevenSegNumFont.h"ファイルを確認してください。

ステップ5:スケッチをアップロードする

スケッチをTeensy 3.6にアップロードするには、Teensyduinoをインストールする必要があります。それから、あなたは(ドキュメントのあなたの典型的な場所ではなく)10代のライブラリの場所でAdafruit_RA8875とAdafruit_GFXライブラリを交換する必要があるでしょう。 Macでは、アプリケーションのArduinoアプリケーションアイコンを右クリックしてから、/ Contents / Java / hardware / teensy / avr / librariesに移動します。ウィンドウズでは、私はそれがプログラムファイルx86、Arduino、そしてそこにあるハードウェアフォルダの中であなたのCドライブの下にあることを確信しています。それができたら、Arduinoアプリケーションのスケッチブックの場所を、環境設定で編集して、10代のライブラリが存在する場所(/Applications/Arduino.app/Contents/Java/hardware/teensy/avr)に変更する必要があります。

UPDATE 7/22/16:先に述べた内部温度センサーの問題のため、DS18B20モジュール温度センサーを取り付ける必要がありました。 zipファイルに4つのarduinoスケッチが表示されます。 OBD-II I2Cモジュールの内部温度センサーを使用したい場合は、display_codeスケッチをアップロードしてください。上記のDS18B20モジュールを使用したい場合は、display_code_with_new_temperature_sensorスケッチをアップロードしてください。

UPDATE 11/17/17:私はDS18B20が華氏185度の温度を出力する、寒い天候でディスプレイがまったくオンにならない、ディスプレイが暗くなるとピクセルが間違った色で動かなくなるなど、ソフトウェアのいくつかのバグを修正しました。

次に、上の写真を使用して、あなたの10代の設定が写真と一致することを確認します。私は、10代を240MHzにオーバークロックしても、I2C OBD-IIアダプタが10代と通信できないことを発見しました。最後に、アップロードをクリックしてください。

私はarduinoのスケッチファイルにかなり広範囲のコメントを書きました。ソフトウェアがどのように機能するのかについての説明はそこを見てください。どんな質問ででも私に連絡してください。私は自分の能力の及ぶ範囲で彼らに答えようとします。がんばろう!

ステップ6:LCDケースを3D印刷する

私は7インチのディスプレイを保護するために3DプリントLCDの上部と下部のカバーを作成しました。私は.STLファイルと同様に.IPT発明者部品ファイルを添付しました。

私はまたbackup_sensor_ring.iptと呼ばれる部分を含めました。それは私が上でリンクしたそれらのバックアップセンサーのまわりで合うリングです。私の車はすでにAmazonで購入したバックアップセンサーには大きすぎる予備のバックアップセンサー穴があいていたので、バックアップセンサーに合うようなリングを作成しなければなりませんでした。セットに含まれている円形のドリルピースを使ってバンパーに穴をあける場合は、この部分は必要ありません。

ステップ7:車が走っているときにだけArduinoがパワーを持つようにOBD-IIポートを分割する

ディスプレイを設置した直後に、車の電源が切れていてもディスプレイが常にオンになっていることに気づきました。 OBD-IIのピン配置を調べたところ、OBD-IIコネクタへの12Vの電力線は常にバッテリに直接接続されていることがわかりました。

これを回避するために、私はOBD-IIスプリッタを購入し、スプリッタの2つのコネクタのうちの1つのピン16に行くワイヤを切断してから、回路ワイヤを追加するためにそれを接続しました。

それから、私のマルチメータを使って、運転席側のヒューズボックスに行き、キーがイグニッションになった後にどのヒューズが電力を得たかを確かめるために既存のヒューズをテストしました。

最後に、私は自分の車が走っているときにだけディスプレイがオンになるように、自分が配置したヒューズに追加の回路ワイヤを接続しました。適切にあなたの車に回路を追加する方法についていくつかの研究をしてください。私はこのYouTubeチュートリアルが良いものだと思った。