Arduinoで作る光るハート型フォトフレーム - ステップバイステップDIYガイド
このArduinoプロジェクトでは、Arduinoを使って素敵なLEDハート型フォトフレームを作る方法を紹介します。詳細については以下の動画を見るか、記事をお読みください。 一見すると普通のフォトフレームですが、裏面のスイッチを押すと特別なフォトフレームに変身します。このArduinoプロジェクトの製作はとても楽しく、バレンタインデー、誕生日、記念日など、大切な人へのプレゼントに最適です。さあ、作り始めましょう。 まず、18×13cmのシンプルなフォトフレームと、フレームサイズにカットしたファイバーボードを用意し、ここにLED用の穴を開けます。次に、32個のLEDを配置したハート型を描いて印刷し、これを型紙として使います。穴あけにはドリルを使用します。 穴あけが完了したら、LEDを挿入し始めます。すべてのLEDを同じ面に挿入し、アノード(長い足)を外側に向けておき、後で曲げてすべてのアノードを一緒にはんだ付けできるようにします。 すべてのLEDをはんだ付けしたら、正常に動作するか確認します。5VのVCCピンを220Ω抵抗経由でLEDのアノードに接続し、GNDピンを使って各LEDが光るかチェックします。 こちらがこのプロジェクトの回路図で、その下に必要なコンポーネントの完全なリストがあります。Arduino Nanoと2個のTLC5940 ICを使ってLEDを制御します。TLC5940は16チャンネルLEDドライバーでPWM出力を提供します。このICのArduinoとの接続・使用方法については、私のArduinoとTLC5940のチュートリアルをご覧ください。 以下のサイトから入手できます: ここではまず、ICソケットとピンヘッダーをユニバーサル基板にはんだ付けして、ICとArduino Nanoを取り付けられるようにします。また、電源用の5V VCCとGNDピン用、およびデカップリング用の2つのコンデンサ用に、さらに2つのピンヘッダーを数スロット分用意します。 配線が多く複雑になるため、間違えて接続しないよう細心の注意を払って作業してください。この時点でArduinoコードをアップロードして、すべてが正しく接続されているか確認します。 このプロジェクト用に作成したArduinoコードを見てみましょう。Alex Leone氏作のTLC5940ライブラリを使用します。このライブラリをダウンロード・インストールしたら、tlc_config.hファイルを修正し、NUM_TLCS変数の値を直列接続したTLC5940 ICの数に変更します。今回は2なので、値を2に設定します。 これで0〜31のすべてのLEDを簡単にアドレス指定できるようになります。最初にプログラムに必要な変数を定義し、setupセクションでTLCを初期化、loopセクションでプログラムを作成します。プログラムを9つの異なるステージ(LEDのライトショー)に整理し、switch文で制御しています。 例えば最初のステージを見てみましょう。0〜31のランダムな整数値を生成し、これをLEDのアドレスとして使用します。Tlc.set()関数でどのLEDを光らせるか設定します。第1パラメータがLEDのアドレス、第2パラメータが輝度(PWM値、0〜4095)です。ただし、これはすぐにはLEDを光らせず、Tlc.update()関数が実行されたときに光らせるLEDを設定するだけです。この「if」文で、8個のランダムなLEDが点灯したら第2ステージに移行します。もう1つ例を見てみましょう、ステージ3です。この「for」ループで全32個のLEDを点灯設定し、Tlc.update()で実行。0.5秒遅延後、Tlc.clear()で全LEDを消灯します。同様にコードを修正して、独自のライトショーを追加できます。 プログラミングが完了してすべてが正常に動作することが確認できたら、グルーガンでLEDをファイバーボードに固定します。次に、ファイバーボード4枚をカットしてグルーガンで電子部品用のカバーボックスを作ります。 あとは、フォトフレームのファイバーボードに取り付けたスイッチとパワージャックからの電源線を接続し、写真を入れ、ボックス全体をフォトフレームに固定すれば完成です! こちらでLEDハートフォトフレームの完全なデモ動画をご覧いただけます。 ご質問は下のコメント欄でお気軽にお尋ねください!フォトフレームの準備



回路図

このArduinoプロジェクトに必要なコンポーネント
組み立て


Arduinoコード

/* LED Heart Photo Frame - Arduino Project
* Program made by Dejan Nedelkovski,
* www.HowToMechatronics.com
*/
/* TLC5940 Library by Alex Leone, https://code.google.com/archive/p/tlc5940arduino/
* You need to modify tlc_config.h located in the TLC5940 library
* and change the value of the variable NUM_TLCS to the numbers of TLC5940 ICs connected
*/
#include "Tlc5940.h"
int stage = 0;
int randomNumber;
int count = 0;
int brightness = 3500;
int brightUp = 50;
int dir=1;
void setup() {
Tlc.init();
}
void loop() {
switch(stage) {
//-----Stage 1
case 0:
randomNumber = (int)random(0,31);
Tlc.set(randomNumber,4095);
delay(1500);
Tlc.update();
if(count >= 8) {
stage = 1;
count = 0;
} else {
++count;
}
break;
//-----Stage 2
case 1:
delay(75);
for(int i=31;i>=0;i--) {
Tlc.set(i,4095);
delay(100);
Tlc.update();
}
delay(500);
Tlc.clear();
Tlc.update();
stage = 2;
delay(500);
break;
//-----Stage 3
case 2:
for(int i=0;i<=31;i++) {
Tlc.set(i,4095);
}
Tlc.update();
delay(500);
Tlc.clear();
Tlc.update();
delay(350);
if(count > 6) {
stage = 3;
count = 0;
} else {
++count;
}
break;
//-----Stage 4
case 3:
for (int i=0;i<=15;i++) {
Tlc.set(i,4095);
Tlc.set(31-i,4095);
Tlc.update();
delay(70);
}
delay(50);
for (int i=15;i>=0;i--) {
Tlc.set(i,0);
Tlc.set(31-i,0);
Tlc.update();
delay(70);
}
for (int i=15;i>=0;i--) {
Tlc.set(i,4095);
Tlc.set(31-i,4095);
Tlc.update();
delay(70);
}
for (int i=0;i<=15;i++) {
Tlc.set(i,0);
Tlc.set(31-i,0);
Tlc.update();
delay(70);
}
delay(50);
Tlc.clear();
Tlc.update();
delay(100);
if(count > 1) {
stage = 4;
count = 0;
} else {
++count;
}
break;
//-----Stage 5
case 4:
for (int i=15;i>=count;i--) {
Tlc.set(32-i,4095);
Tlc.update();
delay(5);
Tlc.set(32-i-1,0);
Tlc.update();
delay(5);
Tlc.set(i,4095);
Tlc.update();
delay(5);
Tlc.set(i+1,0);
Tlc.update();
delay(50);
}
if(count > 15) {
Tlc.set(16,4095);
Tlc.update();
delay(2000);
stage = 5;
count = 0;
} else {
++count;
}
break;
//-----Stage 6
case 5:
for (int i=0;i<=31;i++) {
Tlc.set(i,brightness);
Tlc.update();
}
Tlc.update();
brightness = brightness + brightUp;
if (brightness>=3500) { brightUp=-50; ++count; }
if (brightness<=150) { brightUp=50; }
if(count > 6) {
stage = 6;
count = 0;
brightness = 3500;
Tlc.clear();
Tlc.update();
}
delay(40);
break;
//-----Stage 7
case 6:
for (int i=0;i<=30;i+=2) {
Tlc.set(i,4095);
Tlc.set(i+1,0);
}
Tlc.update();
delay(500);
for (int i=0;i<=30;i+=2) {
Tlc.set(i,0);
Tlc.set(i+1,4095);
}
Tlc.update();
delay(500);
if(count > 20) {
stage = 7;
count = 0;
} else {
++count;
}
break;
//-----Stage 8
case 7:
for(int i=31;i>=16;i--) {
Tlc.clear();
Tlc.update();
delay(2);
Tlc.set(i,4095);
Tlc.set(i+1,2000);
Tlc.set(i+2,1000);
Tlc.set(i+3,500);
Tlc.set(i+4,300);
Tlc.set(i+5,200);
Tlc.set(i+6,100);
Tlc.set(i+7,50);
Tlc.set(i+8,0);
Tlc.set(i-16,4095);
Tlc.set(i-15,2000);
Tlc.set(i-14,1000);
Tlc.set(i-13,500);
Tlc.set(i-12,300);
Tlc.set(i-11,200);
Tlc.set(i-10,100);
Tlc.set(i+-9,50);
Tlc.set(i-8,0);
Tlc.update();
delay(50);
}
if(count > 8) {
for(int i=31;i>=0;i--) {
Tlc.set(i,4095);
Tlc.update();
delay(50);
}
stage = 8;
count = 0;
} else {
++count;
}
break;
//-----Stage 9
case 8:
for(int i=31;i>=0;i--) {
Tlc.set(i+8,4095);
Tlc.set(i+7,2000);
Tlc.set(i+6,1000);
Tlc.set(i+5,500);
Tlc.set(i+4,300);
Tlc.set(i+3,200);
Tlc.set(i+2,100);
Tlc.set(i+1,50);
Tlc.set(i,0);
Tlc.update();
delay(50);
}
for(int i=31;i>=0;i--) {
Tlc.set(i,4095);
}
Tlc.update();
delay(10);
if(count > 8) {
delay(8000);
Tlc.clear();
Tlc.update();
stage = 0;
count = 0;
} else {
++count;
}
break;
}
}仕上げ


製造プロセス
- 自作LUMAZOID:Arduino音楽ビジュアライザーDIYガイド
- Arduinoで作る赤外線心拍センサー:低コスト・リアルタイム波形表示のステップバイステップガイド
- Arduinoオーディオ周波数検出器 – 高感度サウンドモジュールで最大音量ピークの周波数を測定
- ArduinoでBluetooth経由でLEDを制御 – シンプルDIYガイド
- Arduino三目並べ:MAX7219 LEDマトリクスと段ボールケースで自作
- ArduinoとNokia 5110ディスプレイで自作電圧計:ステップバイステップガイド
- スマートArduino四足歩行ロボットの製作:ステップバイステップガイド
- SparkFun 7セグメントディスプレイで作る信頼性の高いArduinoカウントダウンタイマー
- Arduino RGB LEDカラーミキサー:初心者向けDIYプロジェクト
- DIY ArduinoラジオニクスEMR治療デバイスの構築
- Arduinoで自作RCポルシェカー:ステップバイステップガイド