ArduinoでのTM1637 4桁LEDディスプレイ2台の使用
Arduinoプロジェクトで同時に2つの異なる値を表示する必要があったことはありますか?たとえば、温度と湿度を両方表示する必要がある天気予報ステーションや、電圧と電流を同時に表示する電源監視装置を構築している場合です。2つのTM1637 4桁LEDディスプレイを使用することは、簡単でコスト効果の高い解決策です。このガイドでは、1枚のArduinoボードを使用してこれらの人気のあるディスプレイを2つ接続してプログラムする方法を示します。これにより、各画面に独立した情報を表示する能力が与えられます。この技術は、さまざまなプロジェクトに利用できます。
- 二重チャネルボルトメーターを作成して、二つの別々の電源レールを監視する。
- 次のレーシングプロジェクトのためにカウントダウンタイマーとラップカウンターを作成します。
- 一つのディスプレイに現在の時間を表示し、もう一つのディスプレイに周囲の温度を表示しています。
- 2人用ゲームのスコアボードを作成する。
このチュートリアルでは、2つのTM1637モジュールをArduino Unoに接続し、各ディスプレイに異なる値を表示するデモスケッチを実行します。TM1637は2線式インターフェース(CLKとDIO)を使用しているため、2つ目のディスプレイを追加するにはArduinoのデジタルピンを2本追加するだけで済みます。それでは始めましょう! (動画の00:00にて)
必要なハードウェア
- Arduino Uno(または互換ボード)
- 2個のTM1637 4桁7セグメントLEDディスプレイモジュール
- ジャンパーワイヤー
- ブレッドボード(任意ですが、プロトタイプ作成に役立ちます)
配線ガイド
ディスプレイの接続は簡単です。TM1637モジュールには4本のピンがあります:VCC、GND、DIO(データ)、CLK(クロック)。両方のディスプレイはArduinoから5VとGNDの接続を共有しますが、各ディスプレイにはDIOとCLK用の専用ピンが必要です。これにより、Arduinoはそれらを独立して制御できるようになります。(ビデオ内で01:26に)
プロジェクトの配線図はこちらです。
最初のディスプレイ(動画の中の大きな青いモジュール)には、以下の接続を行ってください:
- VCCArduinoへ5V
- GNDArduinoへGND
- DIOArduinoデジタルピンへ11
- CLKArduinoデジタルピンへ10
2つ目のディスプレイ(小さいモジュール)を以下のように接続してください:
- VCCArduinoに5V
- GNDArduinoへGND
- DIOArduinoデジタルピンへ6
- CLKArduinoデジタルピンへ5
両方の大きいTM1637モジュールと小さいTM1637モジュールで、コードとライブラリは同じように機能することを忘れないでください。(ビデオの01:00)
コードの説明
コードは使用しますTM1637Displayインストールする必要があるライブラリです。これを行うには、行ってください。スケッチ > ライブラリを含める > ライブラリの管理Arduino IDEで「TM1637」を検索します。コードは各ディスプレイのピンを定義し、それらを制御するための2つのオブジェクトを作成します。独自に使用するために設定する必要がある重要な部分を見ていきましょう。(動画の02:31で)
まず、各ディスプレイモジュールのピン定義です。これらは配線に合わせて変更する必要があります。
// Module 1 connection pins (Digital Pins)
#define CLK1 5
#define DIO1 6
// Module 2 connection pins (Digital Pins)
#define CLK2 10
#define DIO2 11次に、TEST_DELAY変数は各テストシーケンスが表示される時間を制御します。デモンストレーションの速度を上げたり下げたりするためにこれを調整できます。
// The amount of time (in milliseconds) between tests
#define TEST_DELAY 5000コードの主な部分は、使用します。showNumberDec()関数。この関数には4つの引数があります: 表示する数字、空の先頭桁をゼロで埋めるかどうか、使用する桁数、そしてディスプレイ上の数字の開始位置です。例えば、display1.showNumberDec(23, false, 2, 0)位置0から始まる「23」という数字が表示されます。最後の引数を1、2、または3に変更することで、ディスプレイ上を移動させることができます。(動画は05:23にあります)
3つ目のディスプレイを追加するには、ディスプレイのコードブロックをコピーし、すべての「2」を「3」に変更し、新しいモジュールのCLKおよびDIO接続のために2つの新しいピンを割り当てるだけです。(動画の03:58にて)
ライブプロジェクトデモンストレーション
コードをアップロードすると、2つのディスプレイが電源オンになり、画面をクリアします。デモは次に、各ディスプレイを独立して制御できることを示す一連のテストを実行します。まず、「23」と「34」という数字を2つのディスプレイに表示します。その後、コードはこれらの数字を4桁のディスプレイの異なる位置(位置0、1、2、3)に配置するサイクルを実行します。その後、より大きな数字「741」と「1562」を表示します。最後に、両方のディスプレイで同時に0から1273までのカウントアップループを実行します。これにより、1つのプロジェクトで2つのディスプレイを使用する際の完全な機能が示されます。(動画内の05:01)
章
- [00:00] 2つのTM1637ディスプレイの使用についての紹介
- ディスプレイをArduinoに配線する
- [02:31] コードの説明
- [05:01] ディスプレイの動作デモンストレーション
/*
* Original code from https://github.com/avishorp/TM1637
* Modified for Robojax video on October 28, 2018 at 15:05
* This is an Arduino sketch to use two or more TM1637 seven-segment LED displays
*
* Watch video instruction for this code:https://youtu.be/27KjMfPH1dk
*
* by Ahmad Shamshiri, in Ajax, Ontario, Canada
*
* display2.showNumberDec(23, true, 2,1);
* showNumberDec(arg1, arg2, arg3, arg4);
* arg1 is the number to be displayed
* arg2 can be 'true' or 'false' and if true it fills empty spots with data[]
* arg4 position of starting number on the display can be either 0, 1, 2 or 3
*/
#include <Arduino.h>
#include <TM1637Display.h>
// Module 1 connection pins (Digital Pins)
#define CLK1 5
#define DIO1 6
// Module 2 connection pins (Digital Pins)
#define CLK2 10
#define DIO2 11
// The amount of time (in milliseconds) between tests
#define TEST_DELAY 5000
TM1637Display display1(CLK1, DIO1);// define display 1 object
TM1637Display display2(CLK2, DIO2);// define display 1 object
uint8_t data[] = { 0x0, 0x0, 0x0, 0x0 }; // all segments clear
void setup()
{
// Robojax.com two or more TM1637 Display 20181029
display1.setBrightness(0x0f);// set brightness of display 1
display2.setBrightness(0x0f);// set brightness of display 1
display1.setSegments(data);// fill display 1 with whatever data[] array has
display2.setSegments(data);// // fill display 2 with whatever data[] array has
// Robojax.com two or more TM1637 Display 20181029
}
void loop()
{
// Robojax.com two or more TM1637 Display 20181029
/////////////////////////////////////////////////
display1.setSegments(data); // fill(clear) display with data[] array
display1.showNumberDec(23, false, 2,0);
display2.setSegments(data);// fill(clear) display with data[] array
display2.showNumberDec(34, false, 2,0);
delay(TEST_DELAY);// wait for TEST_DELAY milliseconds
/////////////////////////////////////////////////
display1.setSegments(data); // fill(clear) display with data[] array
display1.showNumberDec(23, false, 2,1);
display2.setSegments(data);// fill(clear) display with data[] array
display2.showNumberDec(34, false, 2,1);
delay(TEST_DELAY);// wait for TEST_DELAY milliseconds
/////////////////////////////////////////////////
display1.setSegments(data); // fill(clear) display with data[] array
display1.showNumberDec(23, false, 2,2);
display2.setSegments(data);// fill(clear) display with data[] array
display2.showNumberDec(34, false, 2,2);
delay(TEST_DELAY);// wait for TEST_DELAY milliseconds
/////////////////////////////////////////////////
display1.setSegments(data); // fill(clear) display with data[] array
display1.showNumberDec(23, false, 2,3);
display2.setSegments(data);// fill(clear) display with data[] array
display2.showNumberDec(34, false, 2,3);
delay(TEST_DELAY);// wait for TEST_DELAY milliseconds
/////////////////////////////////////////////////
display1.setSegments(data);// fill(clear) display with data[] array
display1.showNumberDec(741);// display 1
display2.setSegments(data);// fill(clear) display with data[] array
display2.showNumberDec(1562);// display 2
delay(TEST_DELAY);// wait for TEST_DELAY milliseconds
// Robojax.com two or more TM1637 Display 20181029
/////////////////////////////////////////////////
display1.setSegments(data);// fill(clear) display 1 with data[] array
display2.setSegments(data);// fill(clear) display 2 with data[] array
for(int i=0; i<=1273; i++)
{
display1.showNumberDec(i);// display from 0 to 1273 to display 1
display2.showNumberDec(i);// display from 0 to 1273 to display 2
}
delay(TEST_DELAY);// wait for TEST_DELAY milliseconds
// Robojax.com two or more TM1637 Display 20181029
}// loop end
必要かもしれないもの
-
アマゾン
-
イーベイ
-
アリエクスプレスTM1637 4-digit 7-segment display on AliExpresss.click.aliexpress.com
リソースと参考文献
-
外部TM1637ライブラリ(GitHubから)github.com
ファイル📁
Arduinoライブラリ(zip)
-
TM1637 Arduinoライブラリ
TM1637_library.zip1.36 MB
フリッツィングファイル
-
TM1637 セブンセグメントモジュール
TM1637.fzpz0.01 MB -
TM1637 4桁セグメントディスプレイ
TM1637-1.fzpz0.01 MB
ユーザーマニュアル
-
TM1637ディスプレイマニュアル
robojax-TM1637_display_manual.pdf0.31 MB