ArduinoとNokia5110ディスプレイを備えたDIY電圧計
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
アプリとオンラインサービス
> |
|
このプロジェクトについて
このチュートリアルでは、電圧計を作成する方法を紹介します。 Arduinoを使用した大きなNokia5110LCDディスプレイを搭載。
電圧計を作ることは素晴らしい学習体験です。このプロジェクトの構築が完了すると、電圧計がどのように機能するかをよりよく理解し、オームの法則の知識を更新し、Arduinoプラットフォームがいかに強力であるかを実際に確認できるようになります。このプロジェクトをベースにして経験を積むことで、将来、より複雑なプロジェクトを簡単に構築できるようになります。
このプロジェクトを使用して、さまざまな電子回路からのDC電圧を測定したり、Arduinoプロジェクトのバッテリー状態を簡単に監視したりできます。また、得られた知識を使用して、独自の電圧センサーを簡単に構築し、ニーズに合ったカスタム電圧計を作成できます。
それ以上遅れることなく、始めましょう!
ステップ1:すべての部品を入手する
このプロジェクトを構築するために必要な部品は次のとおりです。
- Arduino Uno
- 電圧センサー
- Nokia 5110LCDディスプレイ
- 小さなブレッドボード
- いくつかのワイヤー
プロジェクトの費用は非常に低いです。約10ドルです。
ステップ2:電圧センサーモジュール
このセンサーモジュールがどのように機能するか見てみましょう。この電圧センサーは非常にシンプルで、 0〜25VのDC電圧を測定できます。 2つの抵抗だけで構成されています! 必要に応じて自分で簡単に作成できます。すでに作成したものが必要な場合は、このモジュールセンサーを1ドル未満で購入できます。これがその仕組みです。このセンサーは実際には分圧器です。分圧回路は非常に一般的な回路であり、抵抗のペアを使用して、より高い電圧を取り、それをより低い電圧に変換します。出力電圧の計算式は、オームの法則に基づいています。添付画像をご確認ください。
このモジュールでは、R1は30.000オーム、R2は7500オームです。入力に25Vを投入し、計算を行うと、出力で5Vが得られます。これが、Arduinoのアナログピンが処理できる最大電圧です。したがって、入力で25Vを超えると、Arduinoのアナログピンを焼きます。入力に0ボルトを入れると、出力で0Vになります。したがって、入力に0〜25Vの電圧をかけると、出力に0〜5Vの電圧がかかります。
Arduino Unoには10ビットADCがあるため、このセンサーを使用して達成できる解像度は25mVです。 Arduino Dueを使用すると、12ビットADCを備えているため、さらに優れた解像度を実現できます。ただし、もちろん、Arduino Dueボードは3.3Vロジックレベルを使用するため、独自の電圧センサーを構築する必要があり、それを超える電圧はアナログピンを破壊します。
ステップ3:Nokia 5110 LCD
Nokia 5110は、私のArduinoプロジェクトで私のお気に入りのディスプレイです。
Nokia 5110は、もともと携帯電話の画面として使用することを目的とした基本的なグラフィックLCD画面です。低電力CMOSLCDコントローラー/ドライバーであるPCD8544コントローラーを使用します。このため、このディスプレイの消費電力は非常に大きくなっています。オンのときは0.4mAしか使用しませんが、バックライトは無効になっています。スリープモード時の使用量は0.06mA未満です。これが、このディスプレイを私のお気に入りにしている理由の1つです。
PCD8544は、シリアルバスインターフェースを介してマイクロコントローラーにインターフェースします。これにより、Arduinoでのディスプレイの使用が非常に簡単になります。 8本のワイヤーを接続し、次のライブラリを使用するだけで済みます:http://www.rinkydinkelectronics.com/library.php?id =47
この印象的なライブラリは、Arduinoコミュニティがライブラリを前進させるために多大な努力を払ってきたHenningKarlsenによって開発されました。
ArduinoでNokia5110LCDディスプレイを使用する方法についての詳細なチュートリアルを用意しました。このチュートリアルでそのビデオを添付しました。ディスプレイに関する有用な情報が提供される可能性があるため、注意深く視聴することをお勧めします。
それでは、次に進みましょう!
ステップ4:電圧計を作成する
それでは、すべてのパーツを接続しましょう。
まず、電圧センサーを接続します。ピンは3つしかありません。そのうち、接続する必要があるのは2つだけです。
電圧センサーの接続
- -ピンはArduinoのGNDに接続されます
- +ピンは接続されていません
- Sピンはアナログピン0になります
次のステップは、Nokia 5110LCDディスプレイを接続することです。
Nokia 5110LCDディスプレイの接続
- RSTはArduinoのデジタルピン12に送られます
- CEはArduinoのデジタルピン11に行きます
- DCはArduinoのデジタルピン10に接続します
- DINはArduinoのデジタルピン9に移動します
- CLKはArduinoのデジタルピン8に送られます
- VCCはArduino3.3Vに移行します
- LIGHTはArduinoGNDに接続されます(バックライトがオン)
- GNDはArduinoGNDに接続されます
すべてのパーツを接続したので、コードをロードするだけです。スプラッシュ画面が数秒間表示されたら、電圧の測定を開始できます。
ステップ5:プロジェクトのコード
プロジェクトのコードは2つのファイルで構成されています。
- ui.c
- VoltMeter.ino
ui.cコード-プロジェクトのグラフィック
最初のファイルui.cには、Nokia 5110LCDディスプレイに表示される2つのアイコンのバイナリ値があります。後に表示される電圧計のスプラッシュアイコンとユーザーインターフェイスがあります。カスタムグラフィックをArduinoプロジェクトにロードする方法を確認するために、私が用意した添付のビデオをご覧ください。
VoltMeter.inoコード-メインプログラム
プロジェクトのメインコードは非常に単純です。 Nokia5110ライブラリを含める必要があります。次に、いくつかの変数を宣言します。表示を初期化し、スプラッシュ画面を3秒間表示します。その後、UIアイコンを1回印刷し、センサーからアナログ値を1秒ごとに読み取ります。
すべての魔法は次の関数で発生します:
float readVoltage(){sensorValue =analogRead(sensorPin); vout =(sensorValue * 5.0)/ 1024.0; vin =vout /(R2 /(R1 + R2)); vinを返す;}
上記の方法では、センサーから値を読み取り、0〜25Vの電圧に変換します。カスタムメイドの電圧センサーを使用する場合は、センサーの抵抗値を反映するためにR1変数とR2変数を変更する必要があります。
センサーから値を読み取った後、コードは値を文字列に変換して画面に表示します。
このチュートリアルにコードを添付しました。コードの最新バージョンをダウンロードするには、プロジェクトのWebページにアクセスしてください:educ8s.tv/arduino-voltmeter-project/
F4FWJORIRXTXQG8.c FY005LHIRXTXQG9.ino
ステップ6:プロジェクトをテストする
コードがロードされたので、いくつかのバッテリーで電圧計をテストできます。充電可能な単三電池、18650電池、12Vの大型アラーム電池でテストします。
添付の写真でわかるように、電圧計は正常に動作します。比較のために、マルチメータも使用しました。私たちの「手作り」電圧計の読みは、プロのマルチメーターの読みに非常に近いものです。素晴らしいですね。
ご覧のとおり、このプロジェクトは、オープンソースのハードウェアとソフトウェアの機能を示す優れたデモンストレーションです。数分以内に、そのような印象的なプロジェクトを構築することができます!このプロジェクトは初心者にとって理想的であり、最初に述べたように、このプロジェクトは素晴らしい学習体験です。
このプロジェクトについてのご意見をお聞かせください。便利だと思いますか?このプロジェクトに実装できる改善点はありますか?以下のコメントセクションにコメントやアイデアを投稿してください!
コード
- Voltmeter.ino
- ui.c
Voltmeter.ino C / C ++
/////////////////////////////////////////////// / Arduino電圧計プロジェクト//// NOKIA 5110LCDを使用////http://www.educ8s.tv ///////////////////////// //////////////////////#include//使用しているライブラリは次のとおりです:http://www.rinkydinkelectronics.com/library .php?id =47LCD5110 lcd(8,9,10,12,11); extern unsigned char BigNumbers []; extern uint8_t ui []; extern uint8_t startScreen [];フロート電圧=0.0; int SensorPin =A0; float SensorValue =0.0f; String VoltageString ="0.0"; int stringLength =0; float vout =0.0; float vin =0.0; float R1 =30000.0;フロートR2 =7500.0; void setup(){Serial.begin(9600); lcd.InitLCD(); lcd.drawBitmap(0、0、startScreen、84、48); lcd.update(); delay(3000); lcd.setFont(BigNumbers); delay(1000);} void loop(){lcd.clrScr(); lcd.drawBitmap(0、0、ui、84、48);電圧=readVoltage(); Serial.println(電圧);電圧文字列=文字列(電圧、1); stringLength =VoltageString.length(); displayVoltage(stringLength); lcd.update(); delay(1000);} float readVoltage(){sensorValue =analogRead(sensorPin); vout =(sensorValue * 5.0)/ 1024.0; vin =vout /(R2 /(R1 + R2)); return vin;} void displayVoltage(int length){switch(length){case 3:lcd.print(voltageString、14,19);壊す;ケース4:lcd.print(voltageString、2,19);壊す;デフォルト:lcd.print(voltageString、2,19);壊す; }}
ui.c C / C ++
ユーザーインターフェイスデータ#includeconst unsigned char ui [] PROGMEM ={0xFF、0x01、0x01、0x01、0x01、0x01、0x01、0x01、0x01、0x01、0x11、0x31、0xF1 0xD1、0x01、0x01,0x81、0xF1、0x11、0x11、0xC1、0xE1、0x11、0x11、0x11、0x31、0xE1、0xC1、0x01、0x01、0x11、0xF1,0xF1、0x11、0x01、0x01、0x01、0x31 0x11、0x11、0xF1、0xF1、0x11、0x11、0x31、0x01、0x01、0x01,0x01、0x81、0x61、0x31、0xF1、0xC1、0x01、0x01、0x01、0xC1、0xE1、0x21、0x11、0x11、0x 0x31,0x31、0x01、0x11、0xF1、0xF1、0x91、0x91、0x91、0x31、0x01、0x01、0x01、0x01、0x01、0x01、0x01,0x01、0x01、0x01、0xFF、0xFF、0xC0、0xC0 0xC0、0xC0、0xC0、0xC0、0xC0、0xC0、0xC0、0xC0、0xC0、0xC3、0xCF、0xCC、0xC3、0xC0、0xC0、0xC0、0xC3、0xC7、0xCC、0xC3、0xC7、0xCC、0xC8 0xC0、0xC8、0xCF、0xCF、0xC8、0xC8、0xC8、0xCC、0xC0、0xC0、0xC8、0xCF、0xCF、0xC8、0xC0、0xC0、0xC0、0xC0、0xC8、0xCC、0x 0xCE、0xC8、0xC0、0xC3、0xC7、0xCC、0xC8、0xC8、0xC9、0xCF、0xC7、0xC1、0xC8、0xCF、0xCF、0xC8、 0xC8、0xC8、0xCC、0xC0、0xC0、0xC0、0xC0、0xC0、0xC0、0xC0、0xC0、0xC0、0xC0、0xFF、0xFF、0x00、0x00、0x00、0x00、0x00、0x00、0x00 0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00 0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x20、0x60 0xE0、0xE0、0xE0、0xE0、0x60、0x20、0x00、0x00、0x00、0x00、0x00、0x00、0x20、0x60、0xE0、0xE0、0xE0、0x60、0x20、0x00、0x00、0x00、0x 0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00 0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00 0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x03、0x1F、0x7F、0xFF、0xFF、0xF8、0xE0、0x00、0x00、0x0 0、0x00、0xC0、0xF0、0xFE、0x1F、0x07、0x00、0x00、0x00、0x00、0x00、0x00、0xFF、0xFF、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00 0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00 0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00 0x00、0x00、0x00、0x01、0x0F、0x3F、0xFF、0xFF、0xFC、0xF0、0xFE、0x1F、0x07、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0xFF、0 0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80 0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80 0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x81、0x83、0x83、0x81、 0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0x80、0xFF、}; const unsigned char startScreen [] PROGMEM ={0x00、0x00、0x00、0x00、0x00、0x00、0x00 、0x00、0x00、0x00、0x80、0xF0、0xFC、0xFC、0xFC、0xFC、0xFC、0x7C、0x1C、0x04、0x00、0x20、0xE0、0xE0、0x20、0x00、0x00、0x20、0xE0、0x 、0x60、0x20、0x20、0x20、0x60、0xC0、0x80、0x20、0xE0、0xE0、0x20、0x00、0x00、0x00、0x00、0x00、0xE0、0x60、0x20、0xE0、0xE0、0x20、0 、0x00、0x00、0xE0、0xE0、0xE0、0x00、0x00、0x00、0x80、0xC0、0x60、0x20、0x20、0x20、0x60、0xE0、0x00、0x20、0xE0、0xE0、0x20、0x20 、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0xC0、0xF0、0xFE、0xFF、0xFF、0xFF、0x3F、0x0F、0x03、0x00、0x00、0x00、0x00、0x00 、0x07、0x3F、0x38、0x38、0x07、0x00、0x00、0x0F、0x1F、0x30、0x20、0x20、0x20、0x30、0x1F、0x0F、0x20、0x3F、0x3F、0x20、0x20、0x30 、0x00、0x00、0x20、0x3F、0x3F、0x20、0x00、0x00、0x20、0x38、0x27、0x04、0x04、0x27、0x3F、0 x3C、0x20、0x0F、0x1F、0x30、0x20、0x20、0x24、0x3C、0x3C、0x04、0x20、0x3F、0x3F、0x22、0x22、0x22、0x20、0x38、0x00、0x00、0x00、0x00 0xE0、0xF8、0xFE、0xFF、0xFF、0x3F、0x0F、0x83、0x80、0x80、0x80、0xC0、0xC0、0xC0、0xE0、0xE0、0xE0、0xF0、0xF0、0x38、0x00、0x 0x08、0xF8、0x18、0xF8、0xE0、0x00、0xE0、0x18、0xF8、0xF8、0x08、0x08、0xF8、0xF8、0x88、0x88、0x88、0x18、0x00、0x00、0x38、0x18、0x 0x08、0x18、0x38、0x08、0xF8、0xF8、0x88、0x88、0x88、0x18、0x00、0x00、0x08、0xF8、0xF8、0x88、0x88、0x88、0xF8、0x70、0x00、0x00、0x00 0x00、0x00、0x00、0x00、0x00、0x00、0x60、0x7C、0x3F、0x3F、0x3F、0x1F、0x1F、0x1E、0x0F、0x0F、0x0F、0x07、0x07、0x07、0xC3、0F 0x1F、0x03、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x08、0x0F、0x08、0x00、0x07、0x07、0x00、0x08、0x0F、0x0F、0x08、0x08、0x0F、0x0 0x08、0x08、0x0E、0x00、0x00、0x00、0x08、0x0F、0x0F、0x08、0x00、0x00、0x08、0x0F、0x0F、0x08、0x08、0x08、0x0 8、0x0E、0x00、0x08、0x0F、0x0F、0x08、0x01、0x03、0x06、0x0C、0x08、0x08、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00 0x00、0x00、0x00、0x00、0x00、0x00、0xC0、0xC0、0x80、0xE0、0xFE、0x7F、0x9F、0x87、0x81、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00 0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00 0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00 0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x03、0x7F、0x7F、0x3F、0x1F、0x0F、0x03、0x01 0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00 0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、 0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、};
製造プロセス
- DIY環境と空気品質モニター
- ArduinoPongゲーム-OLEDディスプレイ
- Nokia 5110LCDのDIYシンプル20kHzArduinoオシロスコープ
- Arduinoとスマートフォンを使用したDIY電圧計
- ArduinoTemp。 3.2ディスプレイを備えたモニターとリアルタイムクロック
- Nextionディスプレイで遊ぶ
- ArduinoとNokia5110ディスプレイを備えたDIY電圧計
- Nextionディスプレイを使用してFridgeyeアプリを構築する
- Arduinoで音楽を作る方法
- GPSおよびTFTディスプレイシールドを備えたGPSロケーションディスプレイ
- スマートディスプレイを備えたスマートバッテリー充電器マルチプレクサ