Arduinoシフトレジスタで美しい光のシーケンスを作成
部品と材料
| Arduino UNO | ×1 |
| ブレッドボード(汎用) | ×2 |
| ジャンパーワイヤ(汎用) | ×55 |
| 74HC595 シフトレジスタ | ×1 |
| タクトスイッチ | ×4 |
| 可変抵抗器(汎用) | ×1 |
| LED(汎用) | ×8 |
| 抵抗 220Ω | ×9 |
| 抵抗 10kΩ | ×4 |
必要な工具
手(ハンダ付け不要、ブレッドボードで組み立て可能)
アプリとオンラインサービス
Arduino IDE
プロジェクト概要
LEDと配列を使った実験を楽しんでいたところ、シフトレジスタとLCD画面を活用して、コードを書き換えることなく光のアニメーションを作成・表示・編集できるプログラムを作成しました。
操作方法
左から右へボタン1〜4が配置されています。
- ボタン1:値を増やす / LEDをON(HIGH)にする
- ボタン2:値を減らす / LEDをOFF(LOW)にする
- ボタン3:フレーム作成中にカーソルを戻す
- ボタン4:「戻る」ボタンとして機能
主な機能
- アニメーション速度の調整
- ループ再生回数の設定
- コード上部の
ARR_SIZEでフレーム数を変更可能 - LCDメニューによる直感的な操作
コード
Light Sequencer (C/C++)
配線が正しければそのまま動作します。お楽しみください。
#include <LiquidCrystal.h>
#define ARR_SIZE 16 // フレーム数(任意に変更可能)
#define LIGHTS 8 // LEDの数
const int btn1 = 7, btn2 = 8, btn3 = 9, btn4 = 10;
int bs1 = 0, bs2 = 0, bs3 = 0, bs4 = 0;
const int latchPin = 11;
const int clockPin = 13;
const int dataPin = 12;
byte data;
bool ArrOne[ARR_SIZE][LIGHTS] = {false};
byte lightArrOne[ARR_SIZE] = {0xFF};
int animSpeed = 50;
int loopCount = 5;
const int rs = 15, en = 14, d4 = 3, d5 = 4, d6 = 5, d7 = 6;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
pinMode(btn1, INPUT_PULLUP);
pinMode(btn2, INPUT_PULLUP);
pinMode(btn3, INPUT_PULLUP);
pinMode(btn4, INPUT_PULLUP);
lcd.begin(16, 2);
pinMode(latchPin, OUTPUT);
PrintMenu();
}
void loop() {
bs1 = digitalRead(btn1);
bs2 = digitalRead(btn2);
bs3 = digitalRead(btn3);
bs4 = digitalRead(btn4);
if (bs1 == HIGH) { bs1 = LOW; delay(150); Play(); }
else if (bs2 == HIGH) { bs2 = LOW; delay(150); Create(ArrOne); }
else if (bs3 == HIGH) { bs3 = LOW; delay(150); SetSpeed(); }
else if (bs4 == HIGH) { bs4 = LOW; delay(150); SetLoop(); }
PrintMenu();
delay(150);
}
// 以下、各関数(PrintMenu, PrintCreate, Play, Create, IntToHexToByte,
// BoolArrayToByte, SetSpeed, SetLoop, shiftOut, ClearScreen)は原文通り
// 省略していますが、実際の使用時は全コードをコピーしてください。
回路図
配線は画像を参照してください。抵抗の長さ制限と可読性のため、実際の製作より広げて描いています。組み立て後、よりコンパクトにまとめる工夫をしてみてください。
製造プロセス
- TinyML言語検出器:Edge ImpulseとArduino Nano 33 BLE Senseで「はい」を多言語判別
- Arduino NanoとMPU-6050で作るリアルタイムジャイロスコープゲーム
- Arduinoデジタルダイス: LCD表示の乱数ジェネレーター自作
- Arduino Nanoで37LEDルーレットゲームを自作:ヨーロピアンスタイル完全再現
- ATtiny85ミニアーケード:スネークゲーム - 手のひらサイズOLEDゲーム機の製作
- ポータブル距離検出器:Arduino Nano自作キット(HC-SR04、18650電源、3Dプリントケース付き)
- Arduino Nanoで作る音声反応デスクライト:音楽に合わせて光るイルミネーション
- Arduino Nano と OpenCV で実現する自律顔追跡ロボットカー
- 銅メッキプロジェクト:Arduino UNOで作るスマート電気メッキシステム
- Arduino Nanoで作るNeoPixelマトリックス版Pongゲーム
- Arduino MKR1000 WiFi ピック・トゥ・ライトシステム - プロジェクト2