“キング・オブ・ダークネス” EVIL の魔法陣を自作

Home > 電子工作 > “キング・オブ・ダークネス” EVIL の魔法陣を自作
すき 1
うんこ 0

以前 球体のPOV(Persistent Of Vision=残像)装置をLEDテープでつくろうと思っていたのですが安定した回転装置がうまく作れずそのまま闇に葬ってなかったことにしておりました。

Blynk で ESP32 と ESP8266 同時制御 -球体POV製作への道 その9-

そんな時、昨年 11.3の新日本プロレス 大阪大会を見ていたところ、なんとメインイベントIWGPインターコンチネンタルタイトルマッチの入場時に”キング・オブ・ダークネス “EVILがダークネスな闇の力によって魔法陣を空中に浮き上がらせて登場したのです。

私は痺れましたよ。そして思ったのです。”俺には闇の力はないけれど、これPOVで再現できんじゃね?”ってね。

もう二度とPOV製作には手をつけないと思っていた私の人生に、一歩踏み出す勇気をまさかのEVIL様が授けてくださったのです。

早速できあがったモノの動作を見てください。

かなりのダークネス感ある魔法陣が再現できて喜んでおります。ちゃっかり内藤哲也選手のマークも表示しております :-P?

鎌も以前自作したものです。

“キング・オブ・ダークネス” EVIL の鎌を自作

以下、構成や製作過程記載します!
 

 

構成

回転部にLEDテープとマイコン、フォトリフレクタを搭載し、LEDテープはDotstarを使用。ワイヤレスチャージモジュールを使って回転部への給電は無線で実施しました。

モータ用に単3電池1個、回転部への無線給電用に単3電池3個使用しました。

部品

  • マイコン Adafruit Itsy Bitsy M0 Express

     
  • フォトリフレクタ QTR-1A

     
  • LEDテープ Dotstar

     
  • ワイヤレスチャージモジュール

     
  • マブチモーター RS-540SH

     
  • 単3電池×1 ケース

     
  • 単3電池×3 ケース

     
  • ミニスライドスイッチ
     

  • モーター シャフトカップリング ジョイント

Dotstar

以下の特徴を有するLEDテープです。

  • SPI入力[CLK, DATA]のため高速に書き込み可能。
     入力周波数 30MHzまで対応らしい
     
  • 発光リフレッシュレート19.2 KHzと高速

以上よりPOV向けのLEDセルと言えます。従来ですとLEDにパラレルに信号入力して高速点灯を実現していましたがLEDテープにシリアルに信号入力で高速点灯ができるのは非常に簡単でありがたいです。

非常に親しまれているLEDテープNeopixelも信号線1本で使いやすいですが、800 KHz固定の独自信号入力となるので高速化は厳しいです。リフレッシュレートも400 HzなのでPOVには向きません。

以下でNeopixelとDotstarの比較を実施していますのでご参照ください。

LEDテープ比較 Neopixel vs Dotstar -球体POV製作への道 その7-

ワイヤレスチャージモジュール

POV製作の際の第一の壁となるのがLED回転部への電源供給です。回転可能な接点をうまいこと作って通電したりするのが見受けられますが加工が大変そうで とても私に作れそうにない。。。

ということで、ここではワイヤレスチャージモジュールを使用しました。これだとほぼ加工なしでモータの回転軸に送受信用コイルを通して向かい合わせに配置するだけです。我ながらナイスアイディアかと。手前味噌ですが 🙄 。

使用したワイヤレスチャージモジュールの詳細は以下に記載しています。

ワイヤレスチャージモジュール 基本動作

魔法陣POV装置

モータを金具で固定して黒く塗った木材で取っ手をつくり、電池ソケットや電源ON/OFFスライドスイッチを固定しました。

 
回転部は以下のように完全無線で独立しています。

回転部のフォトリフレクタでモータ側の上部の白いマーカを検知して回転速度を計測しています。

Arduino IDEコード

以下のDotstar用ライブラリを使用しています。
 https://github.com/adafruit/Adafruit_DotStar

使用したマイコン Adafruit Itsy Bitsy M0 ExpressのArduino IDE用設定についての詳細は以下を参照ください。

モーションセンサ MPU9250 の DMP 動作確認

フォトリフレクタがマーカを検出すると出力が低下するのでattachInterruptで検出して割り込み処理で1周するまでの時間を計測します。

1周にかかる時間を250分割してLEDの点滅を切り替えます。250個のLED表示パターンはgraphics.hで配列としてFlashメモリに格納しています。星や四角、文字などのパターンを書き込んでいます。

一定時間ごとに表示を変更しています。

 

配列にPROGMEMと記載しているがARMマイコンの場合は、変数名の前にconstを追加するだけでフラッシュに保存される。(2019/8/11追記)

 

 

表示グラフィックデータ作成手法

Excelの使用

graphics.hに書き込んだ表示する画像の配列は以下のサイトを参考にさせていただきExcelをつかって作成しました。

円に数字を書くと背景の色が紫になるようにして、1周を250分割して展開(29×250)するようにしました。

展開したデータをテキストエディタで加工してgraphics.hに配列としてFlashメモリに格納しました。実際に表示させてみて配列を若干修正したりもしました。

Pythonプログラム作成 (19/1/22追記)

Excelだと複雑な画像表示がしんどいのでPythonで表示データ生成プログラムこしらえました。

画像処理ライブラリのopenCVとPillowを利用しています。

画像を取り込んで縮小して極座標変換してLEDの数 (29) ×1周の分割数 (250)の色コードの配列を生成します。確認用に変換後の画像も出力します。

 

元画像

 
変換画像

 

 

 

製作の流れ

これを製作するにあたり紆余曲折ございましたので、道筋をここに記します。

黎明期

最初マイコンはAdafruit Itsy Bitsy M0 ExpressではなくAdafruit Feather 32u4 Bluefruit LEを使用してました。BLEで表示画像のタイミング信号送りたいなと思っていたので。

しかもフォトリフレクタで回転の視点のマーカを検出を割り込みではなくloop内で検出して回転速度測定していました。

この状態だと1周 16分割が限界でした。。。

成長期

DotstarへのSPI入力ピンを普通のデジタルピンを使っていたので、ハードウェアピンのSCKピンとMOSIピンに変更しました。

40分割達成!今後SPIはデジタルピンでソフトウェア的に信号入力するのはやめようと思います。こんなに違うとは勉強になりました。
 

さらにフォトリフレクタのマーカー検出出力でattachInterrupt割り込みで回転速度検出するようにしましたところ

128分割達成!
 

絵もそれなりに表示できているのですがAdafruit Feather 32u4 Bluefruit LEはBLE通信部以外の動作周波数8MHzだったことが判明。。。

成熟期

そこで動作周波数48MHzのマイコンAdafluit Itsy Bitsy M0 Expressに変更しました。

250分割達成!!やっぱマイコンは高速に限る!ただこの改善がSPIクロック周波数起因なのか単純に動作周波数が上がったからなのかが切り分けられておらず、自宅にオシロがほしい今日このごろです。

終わりに

SPI入力のLEDテープ Dotstarは凄いです!ほんとにPOVができました。これ従来とおりパラレル信号入力でやったらこんなにフランクに実現できないしNeopixelはスピードが足りませんからね。但し、DotstarのテープLEDは国内で手に入りにくいのが玉に瑕でございまさぁね 🙄 。

 

 

追記

DFRobotの公式ブログで紹介いただきました!(19/1/21)

 

Adafruitの公式ブログで紹介いただきました!(19/1/23)

 

PVも作ってしまった (19/2/8)

追記 組み立て概要

モータ固定

1cm幅のL字金具4つ、コの字の金具2個組み合わせてモータを固定。

回転部

回転部の軸にはM2×20のネジを使用。木に穴をあけて通してナットで固定し更にレジンで接着しています。

モータシャフトに固定してモータと連結します。

「“キング・オブ・ダークネス” EVIL の魔法陣を自作」への12件のフィードバック

  1. はじめまして.

    興味深く拝見しました.自分でも作ってみようとおもったのですが,次の2点がよくわかりませんでした.可能でしたら,使われている部品や組み立て方法についてご紹介いただけないでしょうか?

    1. モータの固定
    コの字型の金属プレートを組み合わされているように見えましたが,どういったものになりますでしょうか?

    2. 回転部分の固定
    モータにシャフトを固定するところまではわかるのですが,LED 部分はどう固定されていますでしょうか?
    それなりに高速回転するので,割としっかりと固定されているんだと思いますが,どのような部品を使われていますでしょうか?

    以上,よろしくお願いいたします.

  2. コメントありがとうございます。
    簡単ではありますが組み立て概要を追加しました。

    ご確認よろしくお願い致します。

  3. 追記ありがとうございます。
    シャフトの長さとモータサイズに合った金具の選定が肝になりそうですね。AliExpressとかだとぴったりのものなさそうですので、ホームセンターで探してみようと思います。

    1. そうなんです。
      金具につきましては型番メモし忘れまして申し訳ございません。
      ビバホームで購入しました。
      分かり次第、追記させていただきます。

  4. コメント失礼します。完成度が高くてすごいですね!
    EXCELで画像の極座標を出すのにはマクロを使うのですか?
    初心者なのでどうやったか気になりました

    1. コメントありがとうございます!
      マクロは一切使っていません。文中の図にも記載した通りOFFSETやROUNDUPなどのExcelの標準的な関数のみで座標変換しています。

      本文にもリンクを張っている以下のサイトを参考にしており、Excelファイルも公開されています。
       http://www.ze.em-net.ne.jp/~kenken/versawriter/index.html
      ご参照ください。

  5. 返信ありがとうございます!
    POVに興味を持ち始めたので私も作ってみます!

  6. 質問失礼します。プログラムについてなのですが、
    imgReduという関数(おそらくRGBデータの取得をしていると考えているのですが)、
    ネットで調べても情報が出てこずうずうずしています。
    できれば教えていただけないでしょうか。

  7. imgRedu は PolarConv2.pyの19行目の通り
    画像サイズを縮小しています。
    OpenCV の resize()で画像を指定のサイズに縮小してimgReduに格納しています。

    1. 返信ありがとうございます。画像名[y座標,x座標,カラーチャンネル]→画素値へのアクセスということが
      理解できてなかったようです。
      大変助かりました。

  8. はじめまして!
    完成度が高くて自分も参考に作成してみようと思ったのですが、プログラムについて不明点がありご教示いただきたいです。
    13行目の
    “Adafruit_DotStar strip = Adafruit_DotStar(NUMPIXELS, DOTSTAR_BGR);”の箇所ですが、
    “Adafruit_DotStar strip(NUMPIXELS, DATAPIN, CLOCKPIN, DOTSTAR_BRG);”
    ではないのはなぜなのでしょうか?(ライブラリの説明を確認しましたが明確な違いを理解できませんでした…)
    またDATAとCLKのピンの定義はどこでしているのでしょうか?

    よろしければお願いいたします。

コメントはこちらから

メールアドレスが公開されることはありません。コメントのみでもOKです。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください