arduinoをシフトレジスタ経由でLEDを光らせた

LINEで送る
Pocket

twitterでご指摘をいただいたので文章を修正しました!
@maris_HY さん、ご指摘ありがとうございました!

電子工作というか、arduinoを再び始めました。

Arduino_Uno_logo

きっかけと言い訳

何にしてもディスプレイの外をプログラムしたい、という想いが最近とても強く、そういうおもいもあってKinect触ったりしていたのですが、ハードウェア部分も知りたいという気持ちが強くなり、電子工作を始めます。
arduinoを使おうと思います。

今までも何回もチャレンジしていたのですが、先週arduinoワークショップに行った事をきっかけとして、言い訳せずに勉強をちゃんと始めようと思います。

ハードウェアとか回線とかはっきり言って素人なのであり得ない配線をしたりしてみられる方をドキドキさせてしまう事もあると思いますが、ご指摘いただけると幸いです。

また、僕と同じように電子工作を始められた方は、特に配線についてはより正しい情報を探してください。(無責任ですみません。)

まずはこの日本語文献を参考にすると良いと思います。
http://www.musashinodenpa.com/arduino/ref/index.php

では本題。


今回やりたいこと

沢山のLEDをチカチカさせられたら面白いだろうなあという想いがずっとあります。
なのですが、ArduinoはMegaであってもデジタル入力が15個PWM出力が15本とか、それくらいしかありません。
それ以上の数に増えたらどうすればいいのかわからなかったのでフォーラムに質問をしていると、どうやら「シフトレジスタ」なるものを使えば拡張する事ができるというお話を聞いたので早速試してみました。
今回のは、シフトレジスタを使ってarduinoの入力から今回のは、arduinoの出力をシフトレジスタに入力して、7個(出力は8個あるのですが、省略)のLEDを光らせるだけのシンプルなものです。

とはいえ色々不安なので今回はコードも配線も参考文献のまんまです。

配線はこちらの 3. Add 8 LEDs.を元に行いました。
http://arduino.cc/en/Tutorial/ShiftOut

ブレッドボードが一個しかなかったので一つのブレッドボードないでやり取りしてる事と、抵抗がついていないのでヤバいかも。。

シフトレジスタの関係については
“Here is a table explaining the pin-outs adapted from the Phillips’s data sheet.”
の下にある図と表を抑えておけば良いと思います。

リンク先のシフトレジスタの表のうち、
1〜7と1番ピンが出力、
8番ピンがGNDで、
11がclock pin、
12がlatch pin、
14がシリアルデータ入力、
16が電気の入力(5Vとつなぐところ)
を抑えておけばひとまずは大丈夫だと思います。
番号は左上から半時計周りで1から16まで数えられていますね。
なので1〜7と15番ピンとLEDをつなげば光るってところでしょうかね。
出力をLEDの+(アノード)につなぎ、-(カソード)をブレッドボードの-につないでいます。


arduinoスケッチ

そして、コードは完全にこれを使わせていただきました。
http://www.musashinodenpa.com/arduino/ref/index.php?f=0&pos=2222


int latchPin = 8;  // 74HC595のST_CPへ
int clockPin = 12; // 74HC595のSH_CPへ
int dataPin = 11;  // 74HC595のDSへ

void setup() {
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
  // LED1からLED8までを順に光らせます
  for (int j = 0; j < 7; j++) {
    // 送信中のlatchPinはグランド(LOW)レベル
    digitalWrite(latchPin, LOW);
    // シフト演算を使って点灯するLEDを選択しています
    shiftOut(dataPin, clockPin, LSBFIRST, 1<<j);
    // 送信終了後latchPinをHIGHにする
    digitalWrite(latchPin, HIGH);
    delay(100);
  }
}


おまけ

シフトレジスタについて詳しくはこちらをどうぞ:
http://ja.wikipedia.org/wiki/シフトレジスタ
シフトレジスタは、一つの入力を分散してくれるものなのかな、という程度の認識はしました。

最後に動画をアップしておきました。

arduinoとシフトレジスタでLEDを光らせた動画

購入したシフトレジスタ(千石通商):
東芝 TC74HC595AP
http://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=2Z2R-3SG6

ワークショップでお世話になった、senio様のフォーラムで質問した内容:
http://www.senionetworks.jp/bbs/viewtopic.php?f=7&t=205&start=0

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Post Navigation