ArduinoとNokia 5110ディスプレイで自作電圧計:ステップバイステップガイド
必要な部品と用品
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino UNO | 1 | |
| 電圧センサ(汎用) | 1 | |
| Nokia 5110 LCDディスプレイ | 1 | |
| ブレッドボード(汎用) | 1 | |
| ジャンパーワイヤ(汎用) | 1 |
使用アプリとオンラインサービス
- Arduino IDE
このプロジェクトについて
このチュートリアルでは、Arduinoを使って大きなNokia 5110 LCDディスプレイ付きの電圧計を作る方法を紹介します。
電圧計の製作は優れた学習体験になります。このプロジェクトを完成させると、電圧計の仕組みがより深く理解でき、オームの法則の知識が復習でき、Arduinoプラットフォームのパワフルさを実感できます。このプロジェクトをベースに得た経験で、将来より複雑なプロジェクトも容易に作れるようになります。
このプロジェクトで、様々な電子回路の直流電圧を測定したり、Arduinoプロジェクトのバッテリー状態を簡単に監視したりできます。また、得た知識で独自の電圧センサを作り、ニーズに合ったカスタム電圧計を作ることも可能です。
さっそく始めましょう!
ステップ1:全パーツを揃える
このプロジェクトに必要なパーツは以下の通り:
- Arduino Uno
- 電圧センサ
- Nokia 5110 LCDディスプレイ
- 小型ブレッドボード
- ワイヤ類
プロジェクト費用は非常に安く、約10ドル(約1,500円)程度です。
ステップ2:電圧センサモジュール
このセンサモジュールの仕組みを見てみましょう。この電圧センサは非常にシンプルで、0〜25Vの直流電圧を測定できます。たった2つの抵抗だけで構成されています! 自分で簡単に作れますし、1ドル以下で完成品モジュールを買うこともできます。仕組みはこうです:このセンサは実際には分圧回路です。分圧回路は、2つの抵抗を使って高い電圧を低い電圧に変換する非常に一般的な回路です。出力電圧の計算式はオームの法則に基づきます。添付画像をご覧ください。
このモジュールでは、R1が30,000Ω、R2が7,500Ωです。入力に25Vを加えると、計算上5Vが出力されます!これがArduinoのアナログピンが扱える最大電圧です。したがって、入力で25Vを超えるとArduinoのアナログピンが焼損します。入力が0Vなら出力も0Vです。つまり、入力に0〜25Vの電圧を加えると、出力で0〜5Vの電圧が得られます。
Arduino Unoは10ビットADCなので、このセンサを使った分解能は25mVです。Arduino Dueを使えば12ビットADCでさらに高い分解能が得られますが、Dueは3.3Vロジックなので、独自の電圧センサを作る必要があります。
ステップ3:Nokia 5110 LCD
Nokia 5110は私のArduinoプロジェクトでお気に入りのディスプレイです。
元々携帯電話の画面として設計された基本的なグラフィックLCDです。PCD8544コントローラーを使用し、低消費電力CMOS LCDコントローラー/ドライバーです。そのため消費電力が非常に低く、バックライト無効時で0.4mA、スリープモード時で0.06mA未満です。これがお気に入りの理由の一つです。
PCD8544はシリアルバスインターフェースでマイクロコントローラーと通信するため、Arduinoでの使用が非常に簡単です。8本のワイヤーを接続し、以下のライブラリを使うだけです:https://www.rinkydinkelectronics.com/library.php?id=47
この素晴らしいライブラリはHenning Karlsen氏によって開発され、彼のライブラリでArduinoコミュニティの発展に多大な貢献をしています。
Nokia 5110 LCDディスプレイのArduinoでの使い方について詳細なチュートリアルを用意しました。このチュートリアルに動画を添付していますので、ディスプレイに関する有用な情報が得られます。ぜひ注意深くご覧ください。
ステップ4:電圧計の組み立て
全パーツを接続しましょう。
まず電圧センサを接続します。3ピンありますが、そのうち2つのみ接続します。
電圧センサの接続
- - ピン → ArduinoのGND
- + ピン → 未接続
- S ピン → アナログピン0
次にNokia 5110 LCDディスプレイを接続します。
Nokia 5110 LCDディスプレイの接続
- RST → Arduinoデジタルピン12
- CE → Arduinoデジタルピン11
- DC → Arduinoデジタルピン10
- DIN → Arduinoデジタルピン9
- CLK → Arduinoデジタルピン8
- VCC → Arduino 3.3V
- LIGHT → Arduino GND(バックライトオン)
- GND → Arduino GND
全パーツを接続したら、コードをアップロードするだけです。スプラッシュ画面が数秒表示された後、電圧測定を開始できます。
ステップ5:プロジェクトのコード
プロジェクトのコードは2ファイルで構成されます。
- ui.c
- VoltMeter.ino
ui.cコード - プロジェクト用グラフィック
ui.cファイルには、Nokia 5110 LCDに表示される2つのアイコンのバイナリ値が含まれます。スプラッシュアイコンと、その後に表示される電圧計のユーザーインターフェースです。カスタムグラフィックをArduinoプロジェクトに読み込む方法については、添付の動画をご覧ください。
VoltMeter.inoコード - メインプログラム
メインコードは非常にシンプルです。Nokia 5110ライブラリをインクルードし、変数を宣言、ディスプレイを初期化してスプラッシュ画面を3秒表示します。その後、UIアイコンを一度表示し、毎秒センサからアナログ値を読み取ります。
核心部分は以下の関数です:
float readVoltage() {
sensorValue = analogRead(sensorPin);
vout = (sensorValue * 5.0) / 1024.0;
vin = vout / (R2/(R1+R2));
return vin;
}
このメソッドはセンサから値を読み取り、0〜25Vの電圧に変換します。自作の電圧センサを使う場合は、R1とR2の変数を自分のセンサの抵抗値に変更してください。
センサから値を読み取った後、コードは値を文字列に変換して画面に表示します。
コードをこのチュートリアルに添付しています。最新版のコードダウンロードはプロジェクトのウェブページで:educ8s.tv/arduino-voltmeter-project/
ステップ6:プロジェクトのテスト
コードをアップロードしたら、いくつかの電池で電圧計をテストします。充電式単三電池、18650電池、大型12Vアラーム用電池でテストしました。
添付写真の通り、電圧計は正常に動作します。比較のためにプロ用マルチメータも使用しました。私たちの「手作り」電圧計の測定値は、プロ用マルチメータの値と非常に近いです。素晴らしいと思いませんか?
このプロジェクトは、オープンソースハードウェアとソフトウェアがいかにパワフルかを示す好例です。わずか数分でこんなに印象的なプロジェクトが作れます!初心者に最適で、冒頭で述べた通り、優れた学習体験になります。
このプロジェクトについてのご意見をお聞かせください。役立ちましたか?改善点はありますか?コメント欄にご投稿ください!
コード
Voltmeter.ino (C/C++)
/////////////////////////////////////////////// // Arduino Voltmeter Project // with NOKIA 5110 LCD // https://www.educ8s.tv ///////////////////////////////////////////// #include// ライブラリ: https://www.rinkydinkelectronics.com/library.php?id=47 LCD5110 lcd(8, 9, 10, 12, 11); extern unsigned char BigNumbers[]; extern uint8_t ui[]; extern uint8_t startScreen[]; float voltage = 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; float 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); voltage = readVoltage(); Serial.println(voltage); voltageString = String(voltage, 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); break; case 4: lcd.print(voltageString, 2, 19); break; default: lcd.print(voltageString, 2, 19); break; } }
ui.c (C/C++) - ユーザーインターフェースデータ
#includeconst unsigned char ui[] PROGMEM = { // ... バイナリデータ(省略) }; const unsigned char startScreen[] PROGMEM = { // ... バイナリデータ(省略) };
製造プロセス
- Raspberry Piで構築する空気質・気象ステーション:InfluxDB & Grafana活用
- Arduino UNOとOLEDディスプレイでクラシックPongゲームを自作:ステップバイステップチュートリアル
- Arduino Nanoで20kHzオシロスコープを自作:Nokia 5110 LCD搭載・簡易DIYガイド
- Arduinoとスマホで作るスマート電圧計 – 簡単DIYプロジェクト
- Arduino Dueと3.2インチTFTで作る温度監視付きリアルタイムクロック
- Arduino MegaとNextion HMIで作る高機能ウェザーステーション
- ArduinoとNokia 5110ディスプレイで自作電圧計:ステップバイステップガイド
- NextionディスプレイでFridgeyeアプリを構築:ステップバイステップガイド
- Arduinoで楽器演奏:音階生成のステップバイステップガイド
- Arduino GPS+TFTタッチシールドで作るリアルタイム位置表示デバイス
- Arduinoで作る多チャネル・スマートバッテリー充電器:自動切替・電圧表示・近接センサー付き