工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Arduinoで作る光るハート型フォトフレーム - ステップバイステップDIYガイド

このArduinoプロジェクトでは、Arduinoを使って素敵なLEDハート型フォトフレームを作る方法を紹介します。詳細については以下の動画を見るか、記事をお読みください。

一見すると普通のフォトフレームですが、裏面のスイッチを押すと特別なフォトフレームに変身します。このArduinoプロジェクトの製作はとても楽しく、バレンタインデー、誕生日、記念日など、大切な人へのプレゼントに最適です。さあ、作り始めましょう。

フォトフレームの準備


Arduinoで作る光るハート型フォトフレーム - ステップバイステップDIYガイド

まず、18×13cmのシンプルなフォトフレームと、フレームサイズにカットしたファイバーボードを用意し、ここにLED用の穴を開けます。次に、32個のLEDを配置したハート型を描いて印刷し、これを型紙として使います。穴あけにはドリルを使用します。

Arduinoで作る光るハート型フォトフレーム - ステップバイステップDIYガイド

穴あけが完了したら、LEDを挿入し始めます。すべてのLEDを同じ面に挿入し、アノード(長い足)を外側に向けておき、後で曲げてすべてのアノードを一緒にはんだ付けできるようにします。

Arduinoで作る光るハート型フォトフレーム - ステップバイステップDIYガイド

すべてのLEDをはんだ付けしたら、正常に動作するか確認します。5VのVCCピンを220Ω抵抗経由でLEDのアノードに接続し、GNDピンを使って各LEDが光るかチェックします。

回路図


こちらがこのプロジェクトの回路図で、その下に必要なコンポーネントの完全なリストがあります。Arduino Nanoと2個のTLC5940 ICを使ってLEDを制御します。TLC5940は16チャンネルLEDドライバーでPWM出力を提供します。このICのArduinoとの接続・使用方法については、私のArduinoとTLC5940のチュートリアルをご覧ください。

Arduinoで作る光るハート型フォトフレーム - ステップバイステップDIYガイド

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


以下のサイトから入手できます:

  • Arduino Nano
  • 超高輝度赤色LED
  • スイッチ
  • パワージャック
  • DC 5V >1A アダプター
  • TLC5940 LEDドライバー ×2
  • 2kΩ抵抗 ×2
  • 1μF & 0.1μF コンデンサ

組み立て


ここではまず、ICソケットとピンヘッダーをユニバーサル基板にはんだ付けして、ICとArduino Nanoを取り付けられるようにします。また、電源用の5V VCCとGNDピン用、およびデカップリング用の2つのコンデンサ用に、さらに2つのピンヘッダーを数スロット分用意します。

Arduinoで作る光るハート型フォトフレーム - ステップバイステップDIYガイド

配線が多く複雑になるため、間違えて接続しないよう細心の注意を払って作業してください。この時点でArduinoコードをアップロードして、すべてが正しく接続されているか確認します。

Arduinoで作る光るハート型フォトフレーム - ステップバイステップDIYガイド

Arduinoコード


このプロジェクト用に作成したArduinoコードを見てみましょう。Alex Leone氏作のTLC5940ライブラリを使用します。このライブラリをダウンロード・インストールしたら、tlc_config.hファイルを修正し、NUM_TLCS変数の値を直列接続したTLC5940 ICの数に変更します。今回は2なので、値を2に設定します。

Arduinoで作る光るハート型フォトフレーム - ステップバイステップDIYガイド

これで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 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;
  }
}

仕上げ


プログラミングが完了してすべてが正常に動作することが確認できたら、グルーガンでLEDをファイバーボードに固定します。次に、ファイバーボード4枚をカットしてグルーガンで電子部品用のカバーボックスを作ります。

Arduinoで作る光るハート型フォトフレーム - ステップバイステップDIYガイド

あとは、フォトフレームのファイバーボードに取り付けたスイッチとパワージャックからの電源線を接続し、写真を入れ、ボックス全体をフォトフレームに固定すれば完成です!

Arduinoで作る光るハート型フォトフレーム - ステップバイステップDIYガイド

こちらでLEDハートフォトフレームの完全なデモ動画をご覧いただけます。

ご質問は下のコメント欄でお気軽にお尋ねください!

製造プロセス

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