ソロでたのしむ

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

色と明るさを変えられる集魚灯。ArduinoとLEDボードで自作したら爆釣モードに入った!

スポンサーリンク

先日、初めての夜釣りで小さい根魚を釣り上げました。

f:id:solocamptouring:20190427081000j:plain

手のひらに収まる、あまりにも可愛いサイズだったので、海に元気にお帰りになりました。

次回は、なんとしてでも大きな根魚に出会いたいので、魚が集まりやすい集魚灯を自作して、夜釣りに導入したいと思います。

f:id:solocamptouring:20190427134321j:plain

魚が集まる集魚灯の色

集魚灯に魚が集まってくる理由を調べてみました。

陸地からのチョイ投げタイプの海釣りで使う集魚灯は、発光性プランクトンや夜光虫を模したものです。

集魚灯の光に、プランクトンや夜光虫を食べる虫や小魚が寄ってきて、さらにそれらを捕食する魚も寄ってくるようです。食物連鎖でなんでも釣れそうですね!

発光性プランクトンといえば青色緑色のイメージです。

しかし、疑似餌(ルアー)が、実際にはありえない配色のものがよく釣れたりするので、集魚灯に最適な色も、実際に試してみないとわかりません。

そこで、自由に色を変えられる集魚灯を作って、その時々の最適な色を探ってみたいと思います。

集魚灯の自作

なるべく簡単に、そして安く集魚灯を作ってみます。

魚を集める機能を追い求めるので、見栄えは二の次です!

集魚灯の部品を準備します

Arduino

コンパクトな大きさで使いやすいArduino Nano(互換品)を使います。

写真は、今回使ったDC5Vの外部電源入力用の部品も写っています。

f:id:solocamptouring:20190427091835j:plain
f:id:solocamptouring:20190427104755j:plain

Arduinoのスケッチ(プログラム)は、記事の最後に掲載しています。

WS2812Bボード

集魚灯の発光部は、WS2812B を7個 配置した円形ボードを使います。

直径23mmと小型なので、堤防で根魚を狙う時などの集魚灯には、ちょうどいい性能と大きさです。

自作した集魚灯に使うWS2812B

ミサイルスイッチ

スイッチはなくても集魚灯は動かせるのですが、実際に使う時の雰囲気づくりのために、他の作品でもミサイルスイッチを使っています。

プロジェクトボックスのスペースをとってしまいますが、ミサイルスイッチで電源を入れる儀式をしてから使うと、何かが起きそうで気分が盛り上がります。

今回は、青色のミサイルスイッチで、釣れるスイッチのおまじないをします。

集魚灯の電源はミサイルスイッチで
集魚灯のプロジェクトボックス

可変抵抗(ボリューム)

集魚灯をコントロールするために、可変抵抗を使います

  • 光の色
  • 光の強さ

をそれぞれ選択できるように、2個の10KΩ可変抵抗を準備します。

コネクターとコード

海中に入れる発光部は5mのコードでコントローラに繋ぎます。

持ち運びやすくしたいので、AWG28の細い電線が3本入っているコードを準備しました。

コントロールボックスと発光部をつなぐコードは、コネクターで接続します。

Arduinoの自作作品に似合うコネクター

通販サイトでは「航空コネクタ」で検索するとみつかる、この少し仰々しいコネクターも、雰囲気づくりのために愛用しています。

集魚灯の回路をつくる

 WS2812Bボードは、電源線2本と信号線1本の合計の3本の電線をつなぐだけで、様々な光らせ方ができる優れものです。回路も単純な構成になるので、自作品には便利に使えます。

回路図は、Fritzingで作成しました。

f:id:solocamptouring:20190427101733j:plain

スペースの都合で、回路図にWS2812Bは5個だけ表現されていますが、実際には7個が直列につながっています。

発光部を除いて、配線をはんだ付けしてみました。

自作集魚灯の回路

今回は配線が少ないので、Arduinoには直接はんだ付けしています。

はんだごての熱でArduino上の部品を壊さないように、注意しながら作業を進めました。

プロジェクトボックスに回路を入れる

コントローラを仕上げるために、プロジェクトボックスに各部品の取付穴をあけます。

コネクターだけは、ボックスに外側から固定する形なので、配線をはんだ付けする前にボックスにねじ止めします。

続いて、スイッチと可変抵抗も、ボックスの上面に内側から取り付けます。

Arduino Nanoは、ボックス内に両面テープで貼り付けておきました。

自作集魚灯のコントローラ
自作集魚灯のコントローラの中

蓋を閉じたら、コントロールボックスの完成です。

試しに光らせてみましょう

5mの3芯コードの両端に、WS2812Bボードとコネクタをつけて、実際に光らせてみました。

自作集魚灯がほぼ完成

集魚灯として本命案の青色や緑色は、一種類だけでなく、可変抵抗のツマミをまわすことで多彩な色をつくりだすことができます。

集魚灯としての効果は無いかもしれませんが、 ツマミをまわして赤色や黄色などの色も作れます。

記事の最後で紹介しているスケッチでは、色を調整する可変抵抗のツマミを右にいっぱいまで回すと、ゆっくりと全ての色に変わっていくようにしています。

発光部の防水化

WS2812Bボードは、水深5mの水圧でも耐えられるように、透明樹脂で覆って防水化します。 

透明樹脂を流し込むケースに何を使おうか考えていたら、卓球の玉に目がとまりました。

大きさが発光部にちょうどよく、乳白色なので周囲に光を拡散してくれそうです。

さっそく玉の上部を切開します。

錘をつける針金を発光部の穴に通して玉の中にいれた後に、クリスタルレジン を流し込みました。

そのまま動かさないようにして樹脂が固まったら完成ですが、待ちきれないなので再度光らせてみます。

玉の下部に無造作に貼られているマスキングテープは、クリスタルレジンが流れ出ないように塞いでいるもので、樹脂が固まったら取り除きます。

自作集魚灯の発光部

狙いどおり、乳白色の卓球の玉全体で、いい感じで光っています。

自作集魚灯のシェイクダウン

後日、ためしに使ってみました。

釣りには不向きな強風の日に、漁港の堤防の風裏になる場所で、昼過ぎから釣り竿をたらしつつ、夜を待ちます。

明るいうちは何も釣れないままで時間が過ぎていき、あたりが暗くなったところで集魚灯の電源を入れて、釣りをしている場所から2mほど離れた海中に投入してみました。

すると、魚が活発に動く時間になったのもあると思いますが、種類は同じで前回よりも(成長したので!?)大きめの魚が、ほぼ入れ食いとなりました!

自作集魚灯に群がる根魚
色を変えて海中で淡く光る自作集魚灯

キャッチ&リリースを繰り返しましたが、あまりにも簡単に釣れるので、何匹釣ったか数えるのは途中でやめてしまいました。これは、もう夜釣りでは手放せません!

効果的な光の色は、少し青色が入った緑色が良さそうですが、これはもう少し継続的に試してみたいと思います。

集魚灯のスケッチ(プログラム)

GitHubのFastLEDライブラリを使って、簡単な命令文で光らせているので、短いスケッチになっています。

#include "FastLED.h"
#define DATA_PIN    4
#define LED_TYPE    WS2812
#define COLOR_ORDER GRB
#define HEIGHT 1
#define WIDTH 7
#define NUM_LEDS HEIGHT*WIDTH

CRGB leds[NUM_LEDS];

const int sampleWindow = 20; // Sample window width in mS
unsigned int sample;
int colorSelect;
int colorPin = 2;
int selectPin = 5;
int val = 0;
int numLedsToLight = 0;
int numLedsSide = 0;
int volumeLight = 0;

void setup() {

  delay(3000); //delay for recovery

  FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
}

uint8_t gHue = 96; // rotating "base color" used by many of the patterns

void loop()
{
  colorSelect = analogRead(colorPin); //check the volume to choose the color

  if (analogRead(colorPin) < 50) {
    colorSelect = 0 ;
  } else if (analogRead(colorPin) < 950) {
    colorSelect = map(analogRead(colorPin), 50, 949, 0, 255) ;
  } else {
    colorSelect = gHue;
  }

  val = analogRead(selectPin); //check the volume to choose the volume

  if (val < 205) {
    volumeLight = 3;
  } else if (val < 1000) {
    volumeLight = map(analogRead(selectPin), 205, 1000, 3, 50);
  } else {
    volumeLight = 50;
  }

  FastLED.setBrightness(volumeLight);

  fill_solid(leds, NUM_LEDS, CHSV( colorSelect, 255, 192));

  FastLED.show();  // send the 'leds' array out to the actual LED strip

  EVERY_N_MILLISECONDS( 300 ) {
    gHue++;  // slowly cycle the "base color" through the rainbow
  }
}