PikaPikaLight

主に光モノ工作の忘備録

虹を投影する懐中電灯を作った

2021/4/7 追記(サンプルコード、紫色について)

初めに

以前からLEDを使った光モノの工作をしていました。 前々から一つの目標だったものに「虹を投影する懐中電灯」がありました。 今回それなりにイメージに近いものが作れたのでその作り方を紹介します。

注意

  • 使用しているLEDボードの光量は強烈です。プログラムで光量を設定しますので、強くしすぎないようにしましょう。LED直視は厳禁です。
  • 市販の懐中電灯を改造しています。もし同じことされる場合は自己責任でお願いします。

きっかけ

イデアのきっかけはRGB LEDテープを使って7色の影を作っていた時でした。 このとき指と指の隙間の影が虹の形になっていることに気づきました。
そこで思いついたのが虹色の順にLEDを並べてスリットを通すという方法です。

このツイートの写真には載せていませんでしたが、これはRGB LED16個を虹色の並び(紫→赤)で点灯させ、ある程度の距離においた型紙に虹型のスリットを設けてそこを通して投影したものです。
とても幅広ですが虹の形と色で光を投影することができました。

原理

スリットを通すことで虹型が作れる理由はこんな感じだと思います。

f:id:PikaPikaLight:20210406211606p:plain
LEDの光は放射状に照射されますが、スリットを通すことである程度直進させることができます。赤色のLEDを下側に紫色のLEDを上側に配置してスリットを通すと、赤の光は下から上の方向にスリットを通るので上側が赤くなります。同じように紫色の光は上から下方向にスリットを通るので下側が紫になります。このように各色の光をスリットを通すことで虹の形と色を再現することができました。

試作

RGB LEDテープを使ったのではどうしても幅広になってしまうのでコンパクトに7色並べられる方法を考えていた時に目についたのがM5StackのHEX RGB LED Board です。 www.switch-science.com これはちょうど7列あって、サイズもちょうど懐中電灯に収まりそう。
100円ショップで大きめの懐中電灯を買ってきました。単3電池3本使用で4.5Vですが、LED点灯させることできました。
コントローラーに極小のM5Atom-Liteを使うことで懐中電灯の頭の部分に収めることができました。
各LEDの色は固定なのでサンプルコードをベースにすれば簡単にプログラムできます。

void show_rainbow(void) {

  float zz = 2.0;  //明るさの調整用

  for (int i = 0; i < 4; i++) { // violet
    pixels.setPixelColor(i, pixels.Color(125 / zz, 0, 255 / zz));
  }

  for (int i = 4; i < 9; i++) { // indigo
    pixels.setPixelColor(i, pixels.Color(50 / zz, 0, 255 / zz));
  }

  for (int i = 9; i < 15; i++) { // blue
    pixels.setPixelColor(i, pixels.Color(0, 0, 255 / zz));
  }

  for (int i = 15; i < 22; i++) { // green
    pixels.setPixelColor(i, pixels.Color(0, 255 / zz, 0));
  }

  for (int i = 22; i < 28; i++) { // yellow
    pixels.setPixelColor(i, pixels.Color(255 / zz, 255 / zz, 0));
  }

  for (int i = 28; i < 33; i++) { // orange
    pixels.setPixelColor(i, pixels.Color(255 / zz, 100 / zz, 0));
  }

  for (int i = 33; i < 37; i++) { // red
    pixels.setPixelColor(i, pixels.Color(255 / zz, 0, 0));
  }

  pixels.show();   // Send the updated pixel colors to the hardware.
  delay(100);
}

配線がごちゃつくのを防ぐために、このようにLEDボードの拡張コネクタのほうに電源を接続し、そこからM5Atomのほうに給電する方法を考えました。 色の並びは先ほど説明したように赤色が下。上側が紫です。
f:id:PikaPikaLight:20210406221139p:plain これにある程度の距離をとって虹型のスリットを配置します。 大き目の紙コップがジャストサイズでこれを利用しました。 スリットのサイズは半径5センチくらいの半円に1センチくらいのスリット幅にしました。この辺は検討の余地ありです。 f:id:PikaPikaLight:20210406220951p:plain

スリットなしだと色が混ざってしまって白色になってしまいますが、スリットを通すことで虹の形と色を再現することができました。 f:id:PikaPikaLight:20210406222105p:plain

紫色について

虹の一番下の色は紫色です。これは紫色の波長が一番短いことを示しています。 ところが、RGB LEDで紫色を作る場合、波長の短い青と波長の長い赤を同時に点灯することで、紫色に見えます。
これって不思議ですね。このことに関してはまた別の機会に語ってみたいと思います。

今後の構想

今回は37個のRGB LEDボードを使用していますが、それぞれの色は固定で使っているので、単純に7色のLEDを並べれば同じことができるはずです。
もっと言えば、白色の光源を7色のラインが並んだフィルターに通してからスリットに通せばいけるはずです。
そこまでコストダウンできれば将来100円ショップとかで売られる日も夢ではないかもしれません。 子供向けの工作教室でも作れるくらい、より手軽に作れる方法を考えてみたいと思います。
また今回レンズ等の光学部品は使用していません。なのでLED自体の光量はかなり明るいですが、スリットを通った後の光はわずかで、暗いとことでないとちゃんと見えません。100円ショップで入手できるようなものをレンズ代わりに使ってもっと明るさを出せないかも検討してみたいです。 f:id:PikaPikaLight:20210407080205p:plain

最後に

ブログを始めようと思ったのは、尊敬する人気ブロガーからあげ先生が書籍の中でアウトプットをすることが大事だと言われていたことに共感したからです。ツイッターは最近始めてみたのですが、そこではここまで詳しい解説はできないし、つぶやきはすぐに流されていくものなので、記事として残したいものはちゃんと書きたいなと。
初めてのはてなブログの記事作成で、Markdown記法から勉強したり、思ったより苦労しました。 けれど、これまで一方的に多くの方のブログ記事に助けられてきたので、自分も楽しいことを共有できればと思い、何とか書き上げました(晩酌の時間削って^^)
万一この虹投影の仕組みが特許化とかされて自由に使えなくなるとかは嫌なので、こうして記事にして公知にしておきたかった、という思いもあります。