立体 バーサライタ – 3D POV Display –
これまで私は様々なバーサライタ(POV ディスプレイ)を製作してきました。
そうした中で何となく平面のバーサライタを立体的に積み上げて立体表示できるのではと考えておりました。
なんかめんどくさそうだし、費用もかかるだろうと思考実験の枠組みから出ないまま時は過ぎたのですが
この度良い機会に恵まれました。
What better way to get into the #Christmas spirit than DIY a Christmas project? 🎅🎄✨👀
Enter now for a chance to win #M5Stack Christmas Gift Packs: 👉 https://t.co/Ajj9yFyNhM pic.twitter.com/HV060VZBHM
— M5Stack (@M5Stack) December 11, 2020
M5Stack社のクリスマスにちなんだ電子工作コンテストが開催されたのです。
これは思考実験から飛び出す絶好のチャンスと考え製作しコンテストに参加させていただきました。
ここでは改めて母国語で報告させていただきます。
目次
立体 バーサライタの構成
バーサライタの構成はこれまで製作してきたバーサライタと同じ構成です。
回転部に制御マイコン ATOM Liteを搭載し回転検出用のフォトリフレクタ QTR-1AとSPI入力LEDテープを接続しています。
LEDテープは5列を10段の計50セル接続しています。回転部への給電にはワイヤレスチャージモジュールを用いて無線で実施します。
部品
- マイコン ATOM Lite
- フォトリフレクタ QTR-1A
- SPI入力 LEDテープ APA102 ピッチ:144セル/1m
- ワイヤレスチャージモジュール
- マブチモーター RS-540SH
筐体
筐体は3Dプリンタで作製いたしました。
回転部は土台とLED搭載部の2パーツで構成されます。
回転部の土台にATOM Liteとフォトリフレクタ、ワイヤレスチャージモジュールの受信側を搭載し、
マブチモーター RS-540SHに差し込みます。
LEDは5列、10段をらせん状に配置して視野角の低減を図っています。
動作
丸が上下する簡単な動作で試しました。
この投稿をInstagramで見る
Arduinoコード
SPI入力LEDのライブラリとして以下を使用しました。
https://github.com/adafruit/Adafruit_DotStar
格段の1周の分解能は20としました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
#include <Adafruit_DotStar.h> #include <SPI.h> #define NUMPIXELS 50 #define Div 20 #define Bright 20 #define itrPin 22 int num = 0; int num2 = 0; int numRot = 0; int numDiv = 0; int stateRot = 0; int stateDiv = 0; int UpDown = 0; unsigned long rotTime, timeOld, timeNow; uint32_t colorNum[] = { 0xFF0000, 0xFFFF00, 0x00FF00, 0x00FFFF, 0x0000FF }; #define DATAPIN 25 #define CLOCKPIN 21 Adafruit_DotStar strip(NUMPIXELS, DATAPIN, CLOCKPIN, DOTSTAR_BGR); void setup() { Serial.begin(115200); strip.begin(); strip.setBrightness(Bright); strip.show(); pinMode(itrPin, INPUT); delay(500); attachInterrupt(digitalPinToInterrupt(itrPin), RotCount, RISING ); } void loop() { if(stateDiv == 1 &µs() - timeOld > rotTime / Div * (numDiv)){ stateDiv = 0; } if(stateDiv == 0 && micros() - timeOld < rotTime / Div * (numDiv + 1)){ stateDiv = 1; strip.clear(); for(int i=0;i<5; i++){ strip.setPixelColor(i + (numRot/2) * 5, 0xFF0000); } strip.show(); numDiv++; if(numDiv >= Div ) numDiv = 0; num++; if(num >= 5 ) num = 0; } } void RotCount() { timeNow = micros(); rotTime = timeNow - timeOld; timeOld = timeNow; if(UpDown == 0){ numRot++; if(numRot == 19 ) { UpDown = 1; } }else{ numRot--; if(numRot <= 0 ) { UpDown = 0; } } Serial.println("int"); } |
表示例
クリスマスツリー
この投稿をInstagramで見る
星
この投稿をInstagramで見る
キューブ
この投稿をInstagramで見る
時計
この投稿をInstagramで見る
鏡餅
この投稿をInstagramで見る
おわりに
製作にとりかかるまでは実現は難しいと想像していましたが、比較的簡単にできてしまいました。
筐体を3Dプリンタで自由自在に作れるようになったことが大きいです。
もっとLEDを増やせばリアルな映像も空中に表示可能だと思います。
コンテストではグランプリを受賞することはかないませんでしたが、参加賞をいただきました。
3つの製品から選択できましたので、私は M5Stack用カード型キーボードユニット
をいただきました。
沢山のスイッチが配置されているので今後有効活用できそうです♪