DIY LEDハートフォトフレーム–Arduinoプロジェクト
このArduinoプロジェクトでは、Arduinoを使用してすばらしいLEDハートフォトフレームを作成する方法を紹介します。詳細については、次の動画をご覧になるか、以下の記事をご覧ください。
一見普通のフォトフレームのように見えますが、裏側のスイッチをクリックすると異常なフォトフレームになります。このArduinoプロジェクトの構築はとても楽しく、愛する人への完璧なバレンタイン、誕生日、記念日のプレゼントになります。それでは、構築を始めましょう
まず、シンプルな18 x 13 cmのフォトフレームと、LEDを挿入するための穴を開けるフレームのサイズにカットされたファイバーボードが必要です。次に、パターンとして使用される32個のLEDを使用して、ハートの形を描画して印刷する必要があります。ドリルを使ってLED用の穴を開けます。
穴あけが完了したら、LEDの挿入を開始します。すべてのLEDを同じ側に挿入し、アノードまたは長いリード線を外側に向けて、それらを曲げて後ですべてのLEDのアノードをはんだ付けできるようにする必要があります。
すべてのLEDをはんだ付けしたら、すべてが正しく機能しているかどうかを確認する必要があります。そのためには、正の5ボルトのVCCピンを220オームの抵抗を介してLEDのアノードに接続し、アースピンを使用して各LEDが点灯するかどうかを確認する必要があります。
このプロジェクトの回路図は次のとおりです。このプロジェクトに必要なコンポーネントの完全なリストは、その下にあります。そのため、LEDの制御にはArduinoNanoと2つのTLC5940ICを使用します。 TLC5940は、PWM出力を提供する16チャネルLEDドライバです。このICをArduinoに接続して使用する方法の詳細については、私の特定のArduinoおよびTLC5940チュートリアルを参照してください。
コンポーネントは、以下のいずれかのサイトから入手できます:
ここでは、最初にICソケットとピンヘッダーを所定の位置に挿入し、それらをプロトタイピングPCBにはんだ付けして、ICとArduinoNanoをそれらに接続できるようにします。また、電源用の2つのスロット、または5ボルトのVCCピンとグランドピンを備えた2つの追加のピンヘッダーと、デカップリング用の2つのコンデンサが必要です。
何か間違ったものを接続すると、その多くのワイヤで非常に厄介になる可能性があるため、コンポーネントを接続するときは非常に注意する必要があります。この時点で、Arduinoコードをアップロードして、すべてが正しく接続されていることを確認する必要があります。
このプロジェクト用に作成したArduinoコードを見てみましょう。したがって、AlexLeoneによって作成されたTLC5940ライブラリを使用します。このライブラリをダウンロードしてインストールしたら、tlc_config.hファイルを変更し、変数NUM_TLCSの値を直列に接続されたTLC5940 ICの数に変更する必要があります。この場合、値は2です
これで、0から31までのすべてのLEDを簡単にアドレス指定できます。最初に、プログラムに必要ないくつかの変数も定義する必要があります。セットアップセクションでTLCを開始し、ループセクションでプログラムを作成する必要があります。 switchステートメントを使用して、プログラムを9つの異なるステージまたはLEDのライトショーに編成しました。
たとえば、最初の段階を見てみましょう。 0から31までのランダムなINT値を生成し、それらをLEDのアドレスとして使用します。関数Tlc.set()は、どのLEDを点灯させるかを設定するために使用されます。最初のパラメータはLEDのアドレスであり、2番目のパラメータはLEDの輝度の値または0〜4095のPWM値です。ただし、これはLEDをすぐに点灯させるのではなく、どちらを設定するだけです。次にTlc.update()関数を実行するとLEDが点灯します。この「if」ステートメントを使用して、8つのランダムなLEDを点灯した後、第2段階をアクティブにします。次に、もう1つの例、たとえばステージ3を見てみましょう。この「for」ループを使用して、Tlc.update()関数が実行されるときに32個のLEDすべてが点灯するように設定します。 Tlc.clear()関数を使用して0.5秒の遅延の後、すべてのLEDをクリアしてオフにします。同様の方法で、コードを変更して、自分でライトショーを追加することができます。
プログラミングが完了し、すべてが正常に機能することがわかったら、LEDをファイバーボードに固定する必要があります。これは、グルーガンを使用して行いました。次に、グルーガンを使用して電子機器用のカバーボックスを作成し、さらに4枚のファイバーボードをサイズに合わせてカットする必要があります。
あとは、スイッチからの電力線とフォトフレームのファイバーボードに挿入されている電源ジャックを接続し、写真を追加して、ボックス全体をフォトフレームに固定するだけです。
ここでは、LEDハートフォトフレームの完全なデモビデオを見ることができます。
以下のコメントセクションでお気軽に質問してください!
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;
}
}
Code language: Arduino (arduino)
製造プロセス