ソロでたのしむ

キャンプ、電子工作、DIY、乗り物などの趣味を紹介

テント内で焚き火!っぽいランタンの炎を楽しむ

キャンプで、そろそろ寝ようかな〜という時に、大自然に囲まれていた雰囲気とテント内の雰囲気のギャップに、少しガッカリしたことがあります。

火器が使えないテント内では、LEDの灯りなどを使うことになりますが、目に刺さるような白色に、日常を感じてしまい、焚き火の炎に照らされて醸成されていたリラックスモードが、一気に無くなってしまったように気分に...

一方で、このところキャンプに行っていないどころか、買い物だけしか外出していませんが、このような時だからこそ!ということで、「外でもお家でもキャンプ」気分を盛り上げる小道具を増やそうと思います。

そこで今回は、テント内でも使える「焚き火の炎」を作って、どこでもキャンプファイヤーの光を、手軽に楽しめるようにしてみます!

テント内で焚き火!っぽいランタンを楽しむ

 

ランタンを見つめ続けた結果!

キャンプ用のLEDランタンは、停電などの非常時にも使えますよね!

私は、屋内ではいつも目につく場所に置いて、来たるべき次回のキャンプに備えて時々充電したり、来てほしくない非常時に備えたりしています。

キャンプや夜釣りで活躍していたLEDランタンですが、唯一の欠点が、明るすぎることです。

キャンプ用LEDランタンを改造します

焚火などの穏やかな明かるさに慣れた状態で、この光量を直視してしまうと、目が焼けるかのように感じます。

もっとキャンプで使いたくなるランタンにしたいと思いつつも、キャンプに行かない室内生活で、視野に入れるように置き続けていて、ふと思いつきました。

のように光らせたら、室内とキャンプのどちらでも、良い雰囲気作りができる!

少し前になりますが、フロアランプを焚き火風に光らせることができたので、それより少ないLEDを使えば良いランタンの改造は、難しくはない筈です。

早速、炎をランタンに封入してみましょう。

LEDランタンを改造

炎の光パターンを作るために、5Vで駆動するマイコンを使います。

2年ほど使い続けているランタンは、もともと白色LEDが使われており、またUSB(5V)で充電できるものなので、電源系はそのまま使えそうです。

炎のランタン作成に使うもの

まずは、WS2812Bが一定間隔で配置されているカラーLEDテープを準備しました。

WS2812Bで炎を作ります

写真には2種類のものが写っています。

今回は、少ないスペースにより多くのLEDを埋め込みたいので、外側でぐるぐるっとしているLEDの間隔が少ないものを使います。

材料として他に入手したのは、炎のパターンを作るために働いていただく、Arduinoだけです。

配線類などの副資材は、既にあるものや廃材を利用します。

LEDランタンの中身

自己責任!となるので、少しドキドキしながら、LEDランタンを開封します。

赤色の配線がプラス、青色の配線がマイナス...かと思いきや、一箇所だけ赤色のマイナス線がありますね。

(自己責任で)LEDランタンを分解
(自己責任で)LEDランタンを改造
  • 茶色の基盤;電源管理
  • 青色の円柱;リチウム電池
  • 緑色の基盤;スイッチ管理とLEDの定電流化

ということのようです。

回路の電圧を測ってみると、4V以上でている様子で、ギリギリですが思惑どおりArduinoも動かせそう!

本来であれば電圧変換すべきですが、とりあえず、オリジナルの回路をそのまま使って、様子をみましょう〜

ただし、もともとのLEDには定電流ダイオードを通して電源が供給されていましたが、ArduinoとWS2812Bには、定電流ダイオードを通さずに電源供給して、たくさん働いていただきます。

大まかな回路構成がわかったので、もともとのLEDWS2812Bに交換して、光り方を制御するArduinoを追加する作業に進みます。

ArduinoとWS2812Bを配線しましょう

LEDランタンには白色LEDが3本使われていたので、同じ長さになるように切断したWS2812Bテープ3本を、直列で配線します。

今回使うのは7個x3列の、合計21個ですね。

WS2812Bを3列に並べて使います
Arduinoをランタンに埋め込む!

ArduinoからWS2812Bへの信号線は、黄色の配線1本のみです。

他には、それぞれに電源線2本を接続するだけ!

作業の途中で、Arduinoのデジタルピンではなく、アナログピンに信号線をハンダ付けしてしまうというトラブルがあったものの、サクサクっとハンダ付けを終わらせて、準備しておいたプログラム(スケッチ)を書き込みます。

WS2812Bの炎パターン
ランタンのLEDをWS2812Bに改造

さて、電源を入れて試運転してみましょう。

...していたとおりに光っています!

いつも思うのですが、この瞬間の安堵感と嬉しさは、格別です〜

しっかり動くことがわかったので、後はランタンを組み立て直すだけですが、より炎っぽさを表現するために、シェード様のものを追加しておきます。

LEDの点光源感がバレてしまうと炎としては不自然なので、ボカシを入れるイメージです。

ランタンにキャンプファイヤーを封入

シェードには、よくある梱包材を廃材利用しました。

右の写真はシェード1枚での発光の様子ですが、まだ点光源感が残っていたので、左の写真のように二重のシェードを入れることにしました。

焚火風ランタンを自作

完成状態での点灯チェック!

本物の炎のようで、しばらく見入ってしまいました。

光り方は、動画でもご確認いただけます。

回路

今回つくる回路は、一か月ほど前に作った光ファイバーアートの時と、WS2812Bの個数を除いて全く同じです。

www.solocamptouring.com

回路図は、こちらで紹介しています。

WS2812Bは、配線数が少なくていいですね!

作業風景は、早送りですが動画でも紹介しています。

youtu.be

スケッチ

ご参考で、Arduinoのスケッチ(プログラム)です。

WS2812Bを使うため、GitHubのFastLEDライブラリを使用させていただきます。

炎の発光は、Fire2012WithPaletteのスケッチを応用しました。

#include "FastLED.h"
#define DATA_PIN    5
#define LED_TYPE    WS2812
#define COLOR_ORDER GRB
#define HEIGHT 7
#define WIDTH 3
#define NUM_LEDS HEIGHT*WIDTH
#define lighting_PER_SECOND 30 // Mainly for fire frame pattern

CRGB leds[NUM_LEDS];
CRGBPalette16 gPal;

int BRIGHTNESS = 20;
int scaleVol = 230; // Scale the heat value from 0-255
int SPARKING = 220; //50-200 out of 255
int COOLING = 50; // 20-100: Less = taller flames.  More = shorter flames. 

bool gReverseDirection = false;

void setup() {
  delay(1000); //delay for recovery
  FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
  FastLED.setBrightness(BRIGHTNESS);
}

void loop()
{
  gPal = CRGBPalette16( CRGB::Black, CRGB::Red, CRGB::Yellow, CRGB::White);
  static uint8_t heat[NUM_LEDS]; // Array of temperature readings

  // Cool down every cell a little
    for( int i = 0; i < NUM_LEDS; i++) {
      heat[i] = qsub8( heat[i],  random8(0, ((COOLING * 10) / HEIGHT) + 2)); //heat-randam8 with a floor of 0
    }
  
  // Heat from each cell drifts 'up' and diffuses a little
    for( int k= HEIGHT - 1; k >= 2; k--) {
      heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2] ) / 3;
      heat[2*HEIGHT-1-k] = (heat[2*HEIGHT-1-k + 1] + heat[2*HEIGHT-1-k + 2] + heat[2*HEIGHT-1-k + 2] ) / 3;
      heat[2*HEIGHT+k] = (heat[2*HEIGHT+k - 1] + heat[2*HEIGHT+k - 2] + heat[2*HEIGHT+k - 2] ) / 3;
    }
    
    //  Randomly ignite new 'sparks' of heat near the bottom
    if( random8() < SPARKING ) {
      int x = random8(6);
      int y ;
      if(x > 3){
        y = 2*HEIGHT-4+x;
      } else if(x > 1){
        y = 2*HEIGHT+1-x;
      } else {
        y = x;
      }
      heat[y] = qadd8( heat[y], random8(160,255) ); //heat+randam8
    }

    // Map from heat cells to LED colors
    for( int j = 0; j < NUM_LEDS; j++) {
      uint8_t colorindex = scale8( heat[j], scaleVol);
      CRGB color = ColorFromPalette( gPal, colorindex);
      int pixelnumber;
      if( gReverseDirection ) {
        if(j < HEIGHT){
          pixelnumber = (HEIGHT-1) - j;
          }else if(j < 2*HEIGHT){
          pixelnumber = HEIGHT+j;
          }else{
          pixelnumber = (3*HEIGHT-1) - j;
          }
      } else {
        pixelnumber = j;
      }
      leds[pixelnumber] = color;
    }

// Let's light them now
  random16_add_entropy( random());
  FastLED.show();  // send the 'leds' array out to the actual LED strip
  FastLED.delay(1000 / lighting_PER_SECOND);
// End of lighting
  
}

以前に作ったフロアランプは、WS2812Bを4列配置しましたが、今回のランタンは3列です。

また、今回は発光パターンを赤色の炎だけに限定したので、ランタンのスケッチは、フロアランプに比べて、たいへん短くなっています。

最後に、ランタンとフロアランプの炎を並べて、記念撮影

どちらも、なかなか良い雰囲気で、他の明かりを消して、室内で楽しんでいます!

夜に外から見たら、怪しいと思われているかもしれませんね。

WS2812Bで、炎パターンで光るライトを自作