Arduino資料一覧

Node.jsで7セグLED(C-551SRD)を0〜9までカウントアップ表示させる

2017/02/07更新

対応バージョン: Node.js 4.2.6, Johnny-Five 0.10.6

Node.jsでArduino Unoにつないだ7セグLEDを0〜9までカウントアップ表示させる。

Node.jsを動かす母艦はUbuntu 16.04とする。

抵抗値計算

IF(順電流): 20mA
VF(順電圧): 2.2V
抵抗 = (電源電圧5V - 順電圧2.2V) / 順電流20mA
     = 2.8V / 0.02A
     = 140Ω 

抵抗はこの値より大きければ問題ないのでここでは220Ωの抵抗を使用する。

結線

結線は以下の通り。3番ピンと8番ピンはコモンカソードなのでGNDに接続し、その他のピンは抵抗を挟んでそれぞれ同じ番号のソケットに接続する。ただ1番ピンを接続する1番ソケットは動作しなかったので11番ソケットにつないでいる。

ソース

以下のようなコードを書きNode.jsで実行する。

各数字に対応したLEDのON/OFF状態を配列として定義しておき、0〜9まで順番に表示する。

7seg.js
// ピン定義
//
// -- ピン配列 ----------------------
//       a(7)
//     +-----+
// f(9)|     |b(6)
//     +g(10)+
// e(1)|     |c(4)
//     +-----+
//       d(2) []DP(5)
//
// -- 値 ----------------------------
// 0: LOW (点灯)
// 1: HIGH(消灯)
// 9: 未使用
//
// -- ピン番号 ----------------------
// *) 0ピンは存在しないので未使用(=9)
// *) 5ピン(DP)は常時消灯(=0)
// *) 1ピンが動作しないので11ピン使用
//                     1 1
// 0 1 2 3 4 5 6 7 8 9 0 1
// -------------------------
var led_list = [
  [9,9,1,9,1,0,1,1,9,1,0,1],  // 0
  [9,9,0,9,1,0,1,0,9,0,0,0],  // 1
  [9,9,1,9,0,0,1,1,9,0,1,1],  // 2
  [9,9,1,9,1,0,1,1,9,0,1,0],  // 3
  [9,9,0,9,1,0,1,0,9,1,1,0],  // 4
  [9,9,1,9,1,0,0,1,9,1,1,0],  // 5
  [9,9,1,9,1,0,0,1,9,1,1,1],  // 6
  [9,9,0,9,1,0,1,1,9,0,0,0],  // 7
  [9,9,1,9,1,0,1,1,9,1,1,1],  // 8
  [9,9,1,9,1,0,1,1,9,1,1,0],  // 9
  [9,9,0,9,0,0,0,0,9,0,0,0]   // 消灯
];

// メインループ
var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
  var num = 0;  // 表示する数字

  // 表示する数字毎に各セグメント(ピン)をON/OFF
  this.loop(500, function() {
    for (var i = 1; i <= 11; i++) {
      onoff = led_list[num][i];
      if (onoff == 0 || onoff == 1) {
        board.digitalWrite(i, onoff);
      }
    }
    num++;

    // 9の次はいったん消灯して0に戻る
    if (num > 10) {
      num = 0
    };
  });
});
実行
% node 7seg.js
1486305432162 Device(s) /dev/ttyACM0  
1486305432169 Connected /dev/ttyACM0  
1486305435411 Repl Initialized  
>>

関連資料・記事

参考サイト