速度計は、車両の走行速度を測定するために使用されます。以前は、IRセンサーとホールセンサーを使用して、それぞれアナログスピードメーターとデジタルスピードメーターを構築していました。今日は、GPSを使用して移動中の車両の速度を測定します。GPSスピードメーターは、車両の位置を継続的に特定し、速度を計算できるため、標準のスピードメーターよりも正確です。GPSテクノロジーは、スマートフォンや車両のナビゲーションや交通情報に広く使用されています。
このプロジェクトでは、OLEDディスプレイを備えたNEO6MGPSモジュールを使用してArduinoGPSスピードメーターを構築します。
使用した材料
- Arduino Nano
- NEO6MGPSモジュール
- 1.3インチI2COLEDディスプレイ
- ブレッドボード
- ジャンパーの接続
NEO6MGPSモジュール
ここでは、NEO6MGPSモジュールを使用しています。 NEO-6M GPSモジュールは、強力な衛星検索機能を提供するセラミックアンテナを内蔵した人気のGPS受信機です。この受信機は、場所を感知して最大22の衛星を追跡し、世界中の場所を識別する機能を備えています。オンボードの信号インジケータを使用して、モジュールのネットワークステータスを監視できます。主電源が誤ってシャットダウンされたときにモジュールがデータを保存できるように、データバックアップバッテリーを備えています。
GPS受信機モジュールの中心となるのは、u-bloxのNEO-6MGPSチップです。50チャンネルで最大22の衛星を追跡でき、-161dBmという非常に印象的な感度レベルを備えています。この50チャンネルのu-blox6ポジショニングエンジンは、1秒未満のTime-To-First-Fix(TTFF)を誇っています。このモジュールは、4800〜230400 bpsのボーレートをサポートし、デフォルトのボーは9600です。
特徴:
- 動作電圧:(2.7-3.6)V DC
- 動作電流:67 mA
- ボーレート:4800-230400 bps(9600デフォルト)
- 通信プロトコル:NEMA
- インターフェース:UART
- 外部アンテナと内蔵EEPROM。
GPSモジュールのピン配置:
- VCC: モジュールの入力電圧ピン
- GND: グランドピン
- RX、TX: マイクロコントローラーを備えたUART通信ピン
私たちは以前にGPSをArduinoとインターフェースさせ、車両追跡を含むGPSモジュールを使用して多くのプロジェクトを構築しました。
1.3インチI2COLEDディスプレイ
OLEDという用語は「 有機発光ダイオード」の 略で、ほとんどのテレビで使用されているのと同じ技術を使用していますが、それらに比べてピクセル数が少なくなっています。これらのかっこいいディスプレイモジュールをArduinoとインターフェイスさせると、プロジェクトがかっこよく見えるので、とても楽しいです。ここでは、OLEDディスプレイとそのタイプに関する記事全体を取り上げました。ここでは、 モノクロ4ピンSH1106 OLED1.28インチOLEDディスプレイを使用しています。このディスプレイは、I2Cモードでのみ機能します。
技術仕様:
- ドライバーIC:SH1106
- 入力電圧:3.3V-5V DC
- 解像度:128x64
- インターフェース:I2C
- 消費電流:8mA
- ピクセルカラー:青
- 視野角:> 160度
ピンの説明:
VCC:入力電源3.3-5V DC
GND:グランド基準ピン
SCL: I2Cインターフェースのクロックピン
SDA: I2Cインターフェースのシリアルデータピン
Arduinoコミュニティは、これを非常に簡単にするために直接使用できる多くのライブラリをすでに提供しています。いくつかのライブラリを試してみたところ、 Adafruit_SH1106.h ライブラリは非常に使いやすく、グラフィックオプションがいくつかあることがわかったため、このチュートリアルでも同じものを使用します。
OLEDは非常にクールに見え、他のマイクロコントローラーと簡単にインターフェースして、いくつかの興味深いプロジェクトを構築できます。
- SSD1306OLEDディスプレイとRaspberryPiのインターフェース
- SSD1306OLEDディスプレイとArduinoのインターフェース
- ESP32とOLEDディスプレイを使用したインターネット時計
- Arduino、DHT11、IRブラスターを使用した自動AC温度コントローラー
回路図
OLEDを使用したこのArduinoGPSスピードメーターの回路図を以下に示します。
完全なセットアップは次のようになります。
ArduinoOLEDスピードメーター用のArduinoのプログラミング
プロジェクトの完全なコードは、チュートリアルの下部に記載されています。ここでは、完全なコードを1行ずつ説明しています。
まず、すべてのライブラリを含めます。ここでは、TinyGPS ++。hライブラリを使用してGPS受信機モジュールを使用してGPS座標を取得し、 Adafruit_SH1106.h をOLEDに使用しています。
#include
次に、OLED I2Cアドレスが定義されます。これはOX3CまたはOX3Dのいずれかで、私の場合はOX3Cです。また、ディスプレイのリセットピンを定義する必要があります。私の場合、ディスプレイがArduinoのリセットピンを共有しているため、-1と定義されています。
#define OLED_ADDRESS 0x3C #define OLED_RESET -1 Adafruit_SH1106 display(OLED_RESET);
次に、 TinyGPSPlus および Softwareserial クラスのオブジェクトを次のように定義します。ソフトウェアシリアルクラスにはArduinoのピン番号が必要です。ここでは2と3として定義されているシリアル通信用。
int RX = 2、TX = 3; TinyGPSPlus gps; SoftwareSerial gpssoft(RX、TX);
setup() 内では、シリアル通信とOLEDの初期化が行われます。ソフトウェアシリアル通信のデフォルトのボーレートは9600と定義されています。ここでは、 SH1106_SWITCHCAPVCC を使用して内部で3.3Vから表示電圧を生成し、 display.begin 関数を使用して表示を初期化します。
void setup() { Serial.begin(9600); gpssoft.begin(9600); display.begin(SH1106_SWITCHCAPVCC、OLED_ADDRESS); display.clearDisplay(); }
内部 ながら 真のループは、受信したシリアルデータが検証され、有効なGPS信号が受信された場合、次に ()displayspeed OLEDに速度値を表示するために呼び出されます。
while(gpssoft.available()> 0) if(gps.encode(gpssoft.read())) displayspeed();
displayspeed() 関数内で は 、GPSモジュールからの速度データが関数 gps.speed.isValid() を使用してチェックされ、true値が返された場合、速度値がOLEDディスプレイに表示されます。ここで、OLEDのテキストサイズは display.setTextSize 関数を使用して定義され、カーソル位置は display.setCursor 関数を使用して定義されます。GPSモジュールからの速度データは gps.speed.kmph() 関数を使用してデコードされ、最後に display.display() を使用して表示されます。
if(gps.speed.isValid()) { display.setTextSize(2); display.setCursor(40、40); display.print(gps.speed.kmph()); display.display(); }
最後に、Arduino Unoにコードをアップロードし、システムを移動中の車両に配置すると、下の画像に示すように、OLEDディスプレイで速度を確認できます。
デモビデオ付きの完全なコードを以下に示します。