ESP-WROOM-32-とシフトレジスタを使ったLEDキューブを制御してみます!
こんにちわ!
今日は前回の応用をしていきたいと思います!
前回はESP-WROOOM-32-とシフトレジスタ(SN74HC595)を使って、たったの3pinでLEDを大量制御する方法をご紹介しました!
今回は、LEDキューブをESP-WROOOM-32-とシフトレジスタ(SN74HC595)を使って制御してみたいと思います!
※Arduino、ESP-WROOOM-02-でも配線は多少変わりますが同様にできます。
これを更に応用できれば、スマートフォンから遠隔でLEDキューブを制御、みたいなかっこいいこともできると思いますが、今回はまず光らせましょう!
今回もLEDキューブ3×3×3でご紹介させていただきます!
★目次★
①「使う部品」
・部品はほとんど前回と同様で、ほとんどの部品は秋月電子で注文できます!
部品は壊れた場合を考え、少し多めに買うことをおすすめします!
部品一覧↓
・シフトレジスタ「SN74HC595N」
(今回は3×3×3のLEDキューブを作るのでアノード制御するのに9pin必要になります。
なのでシフトレジスタ(一つ8pin分)は2つ必要です)
※SN74HC595Nは秋月電子では販売終了。後継となるものがU74HC595AG-D16-T
となります。ただし、試していないので全く同じように使えるかはわかりません(;^ω^)
・LED(発光ダイオード) 一個 10円~(27個必要)
何色でもOKですが、数が多ければ多いほど消費電力が少なく高い電流にも
耐えられるものが良い(赤や黄色は壊れやすい)。
※理由としては、数が多いほど全部点灯させたときに薄く光ります。
逆に1個だけ点灯させた場合電流が高くなりLEDが壊れる危険性があります。
※サイズは5㎜で、透明色のLEDをお勧めします!(見栄えが良くなります。)
・ESP-WROOM-32 (ESP-WROOM-32D)
電子工作ステーション 1100円(送料無料)(30pinモデル)
電子工作ステーション 1200円(送料無料)(ESP32D)(38pinモデル)
秋月電子 1230円+送料(38Pinモデル)
※楽天にて横幅を細くしたバージョンが登場‼
pin番を無くした代わりに細くなっているので、ブレットボードで使いやすくなりました‼
6極ブレットボードではなく定番のブレットボードで使えるようになるのでススメです⇩⇩⇩
・通信用マイクロUSBケーブルタイプB (家に無ければ)
秋月電子 120円+送料
ESP-WROOM-32とパソコンを繋ぐためのケーブルです。
100円ショップなどでも販売していますが、スマホ用充電専用タイプだと使えないのでご注意ください。
・抵抗 (10~150Ω) (9個)
電子工作ステーション 1本3円+送料(500円以上で送料無料)
秋月電子 100本100円+送料
※LEDに使用。
※抵抗は数値が高すぎると、LEDを全点灯させたりしたときに暗くなったりします。逆に低すぎると電流が高すぎてLEDが壊れたりすることがあります。3×3×3であれば100Ωの方が無難かもしれません。
・LEDキャップ (任意) (LEDの個数分)
秋月電子 50本200円+送料
※点灯させたとき眩しいのであった方が良いです。
・ コンデンサ 0.1μF (2個)
秋月電子 10個100円+送料
(無くても起動しますが電子工作上よく出てくる部品です。電流を一層安定させるために使います。)
・ブレットボード(6穴版)
6穴版 EIC-3901(秋月電子:280円)
※通常のESP-WROOM-32だと、横幅が広くてセンサーがさせなくなるかとがあるので、
6穴版のブレットボードを使います。
・ジャンパーワイヤー(オス・オス) (約5本)
電子工作ステーション 1セット(10本)100円+送料(500円以上で無料)
秋月電子 18本180円+送料
(ESP32とシフトレジスタを繋ぐために使用)
・ジャンパーワイヤー(オス・メス)(約12本)
電子工作ステーション 1セット(10本)100円+送料(500円以上で無料)
秋月電子 10本220円+送料
(シフトレジスタとシフトレジスタを繋ぐために使用。)
・ブレッドボード・ジャンパーワイヤ
秋月電子 14種類×5本300円+送料
(ブレットボードで回路を組むとき、細かい配線に使用)
②「作り方・配線」
LEDキューブの作り方は過去の記事と同様なのでこちら↓の②「組み立て方」をご参考ください。
・LEDキューブの組み立てが終わりましたら、次はシフトレジスタの回路を作ります!
参考サイト⇩
・シフトレジスタとLEDキューブを繋げていきます。
シフトレジスタ1(SN74HC595N)(LED3×3×3Ver) | ||
シフトレジスタのピン番号 | ピン名称 | 接続先 |
1 | Q1 | 2つ目のLEDのアノードピン |
2 | Q2 | 3つ目のLEDのアノードピン |
3 | Q3 | 4つ目のLEDのアノードピン |
4 | Q4 | 5つ目のLEDのアノードピン |
5 | Q5 | 6つ目のLEDのアノードピン |
6 | Q6 | 7つ目のLEDのアノードピン |
7 | Q7 | 8つ目のLEDのアノードピン |
8 | GND | GND(ESP-WROOM-32-) |
9 | Q7′ | 次のシフトレジスターのDSピン(14) |
10 | MR | 5V(ESP-WROOM-32-) |
11 | SH | IO5(ESP-WROOM-32-) 次のシフトレジスターのSHピン |
12 | ST | IO18(ESP-WROOM-32-) 次のシフトレジスターのSTピン |
13 | OE | GND(ESP-WROOM-32-) |
14 | DS | IO19(ESP-WROOM-32-) |
15 | Q0 | 1つ目のLEDのアノードピン |
16 | VCC | 5V(ESP-WROOM-32-) 0.1μFのコンデンサを経由してGND |
シフトレジスタ2(SN74HC595N)(LED3×3×3Ver) | ||
シフトレジスタのピン番号 | ピン名称 | 接続先 |
8 | GND | GND(ESP-WROOM-32-) |
10 | MR | 5V(ESP-WROOM-32-) |
13 | OE | GND(ESP-WROOM-32-) |
15 | Q0 | 9つ目のLEDのアノードピン |
16 | VCC | 5V(ESP-WROOM-32-) 0.1μFのコンデンサを経由してGND |
シフトレジスタとLEDキューブはこんな順番で繋げていくと良いでしょう!(GNDは、7が一番(3本の束の)GNDに近いことを示しています)
3 2 1
6 5 4
9 8 7 GND
(⇧LEDキューブを真上から見た番号の配置です)
1をシフトレジスタの15番に、2をしふとシフトレジスタの2番に、という感じで繋げていきます。
・GNDは3本足があると思います。
ESP-WROOM-32-側の14,27,26pinに繋ぎます。
(14が1段目のLED面で26が3段目のLED面に繋げます。)
・つなぎ終わるとこんな感じになります⇩
見づらくて申し訳ないです(;^ω^)
③「Arduino IEDにESP-WROOM-32を使えるように設定する」
・こちらをご参考に↓
Arduino IDEでESP-WROOM-02(ESP8266)とESP-WROOM-32を使えるようにする!(Windows10)
④「プログラミング」
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
#define DATAPIN (19) // 74HC595のDSへ #define LATCHPIN (5) // 74HC595のST_CPへ #define CLOCKPIN (18) // 74HC595のSH_CPへ void MyShiftOut( int dataPin, int clockPin, int bit, unsigned long val ) { for( int i = 0; i < bit; i++ ) { digitalWrite(dataPin, !!(val & (1L << i))); digitalWrite(clockPin, HIGH); digitalWrite(clockPin, LOW); } } void setup() { //シフトレジスタ設定 pinMode(DATAPIN, OUTPUT); pinMode(LATCHPIN, OUTPUT); pinMode(CLOCKPIN, OUTPUT); //LED段制御設定(GND制御) pinMode(14, OUTPUT); pinMode(27, OUTPUT); pinMode(26, OUTPUT); } void loop() { //1段目を光らせます。(段制御はLOWにすると光ります) digitalWrite(14, LOW); digitalWrite(27, HIGH); digitalWrite(26, HIGH); for( int i = 0; i < 9; i++ ) { digitalWrite(LATCHPIN, LOW); // 送信中はLATCHPINをLOWに // シフト演算を使って点灯するLEDを選択しています MyShiftOut( DATAPIN, CLOCKPIN, 9, 1L << i ); digitalWrite(LATCHPIN, HIGH); // 送信後はLATCHPINをHIGHに戻す delay(100); } digitalWrite(14, HIGH); digitalWrite(27, LOW); digitalWrite(26, HIGH); for( int i = 0; i < 9; i++ ) { digitalWrite(LATCHPIN, LOW); MyShiftOut( DATAPIN, CLOCKPIN, 9, 1L << i ); digitalWrite(LATCHPIN, HIGH); // 送信後はLATCHPINをHIGHに戻す delay(100); } digitalWrite(14, HIGH); digitalWrite(27, HIGH); digitalWrite(26, LOW); for( int i = 0; i < 9; i++ ) { digitalWrite(LATCHPIN, LOW); MyShiftOut( DATAPIN, CLOCKPIN, 9, 1L << i ); digitalWrite(LATCHPIN, HIGH); delay(100); } } |
・成功するとこんな感じに動作します!
今回はちょっと難しいですが、ここまでできれば後はご自身でコードを変えていろんなパフォーマンスが作れるようなるかと思います!
しかし、これでは同じ個所を同時に光らせたりすることは多分できません(;^ω^)
それを実現するやり方はこちら↓
更に上級者向けですが、WI-FIで遠隔操作なんかもできます↓
ご不明点等ございましたらお気軽にコメントください^^
以上、ご訪問ありがとうございます^^
3件のフィードバック