4 bits Segment Display(TM1637) JP

아두위키 : Arduwiki
ArduWiki (토론 | 기여)님의 2025년 3월 27일 (목) 19:42 판 (→‎ライブラリ)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)


概要

TM1637は7セグメントディスプレイを制御するドライバICで、Arduinoのようなマイコンと簡単に接続して使用できます。数字の間に「:」があるためデジタル時計の実装に特によく使用され、温度計、カウンターなどさまざまな電子プロジェクトで広く活用されています。

仕様

TM1637モジュール仕様

項目 仕様
電源供給 3.3V ~ 5V
インターフェース I2C(TWI)
ディスプレイ 7セグメントディスプレイ(4桁)
制御ピン CLK(クロック)、DIO(データ)
温度範囲 -20°C ~ 70°C
サイズ 42 * 29 * 12 (mm)

固定穴

項目 詳細
穴の数 M2ネジ用の穴 4個
穴のサイズ 2.2mm

活用例

回路構成

ピン Arduino
GND GND
VCC 5V
DIO D3
CLK D2

ライブラリ

TM1637Display.h ライブラリを使用します。

ライブラリマネージャで「TM1637」と検索すれば簡単にインストールできます。

ライブラリの使い方については Arduino libraries ページをご参照ください。

TM1637 ライブラリの主な関数

関数 説明
TM1637Display(CLK, DIO, delay) TM1637オブジェクトの生成コンストラクタ。CLKとDIOピンを設定。
setBrightness(uint8_t b, OnOff) ディスプレイの明るさを設定(0x00~0x0f)。
showNumberDec(int num, bool leading_zero) 整数を10進数で表示。leading_zeroがtrueなら先頭に0を追加。
showNumberHex(uint8_t num, bool leading_zero) 16進数で数値を表示。
clear() ディスプレイを消去。
setSegments(const uint8_t segments[], uint8_t size) カスタムセグメントを表示。

1. 数字表示

0~10の数字を0.5秒ごとに変更しながら表示します。表示する数字は4桁まで簡単に調整可能です。

showNumberDec(int num, bool leading_zero) 整数を10進数で表示。leading_zeroがtrueなら「0001」のように表示。

leading_zerotrueにすると、1を表示する際に「0001」の形式になります。

#include <TM1637Display.h>

#define CLK 2
#define DIO 3

TM1637Display display(CLK, DIO);

void setup() {
    display.setBrightness(0x0f);
}

void loop() {
    for (int i = 0; i <= 10; i++) {
        display.showNumberDec(i, false);
        delay(500);
    }
}

実行結果

2. デジタル時計表示

時間と分を24時間形式で表示します。

showNumberDecEx関数は、中央のコロンを表示するために使われる拡張バージョンです。

#include <TM1637Display.h>

#define CLK 2
#define DIO 3

TM1637Display display(CLK, DIO);

void setup() {
    display.setBrightness(0x0f);
}

void loop() {
    int hour = 12;
    int minute = 0;

    for (int i = 0; i < 60; i++) {
        display.showNumberDecEx(hour * 100 + minute, 0b11100000, true);
        delay(60000);
        minute = (minute + 1) % 60;
        if (minute == 0) hour = (hour + 1) % 24;
    }
}

実行結果

3. setSegments 関数を使った文字表示

7セグメントパターンの構造は以下の通りです。

「GONG」という文字を表示するには、次のような設定をします。

文字 G F E D C B A 2進数 16進数
G 0 1 1 1 1 0 1 111101 3d
O 1 0 1 1 1 0 0 1011100 5c
N 1 0 1 0 1 0 0 1010100 54

点灯させる部分を1、消灯させる部分を0に設定し、目的の文字に対応する2進数を求めた後、16進数に変換して配列に適用します。

以下はそのコード例です:

#include <TM1637Display.h>

#define CLK 2
#define DIO 3
TM1637Display display(CLK, DIO);

byte data[] = {0x3d, 0x5c, 0x54, 0x3d};

void setup() {
  display.setBrightness(0x0f);
}

void loop() {
  display.setSegments(data);
}

実行結果

4. 文字をスクロール表示する効果

4桁を超える文字列を表示する際、左方向にスクロールさせて見せることができます。

「GONGZIPSA」という文字列を前の例のように定義し、1文字ずつ左に流れていくように表示します。

#include <TM1637Display.h>

#define CLK 2
#define DIO 3
TM1637Display display(CLK, DIO);

// セグメントパターン
byte data[] = {0x3D, 0x5C, 0x54, 0x3D, 0x49, 0x30, 0x73, 0x6D, 0x77};

void setup() {
    display.setBrightness(0x0f);
}

void loop() {
    int stringLength = sizeof(data) / sizeof(data[0]);
    int displaySize = 4;

    for (int i = 0; i < stringLength + displaySize; i++) {
        byte displayData[displaySize] = {0, 0, 0, 0};

        for (int j = 0; j < displaySize; j++) {
            if (i + j >= 0 && i + j < stringLength) {
                displayData[j] = data[i + j];
            }
        }

        display.setSegments(displayData);
        delay(500);
    }
}

実行結果