立方体万華鏡を3D CADでデザインしてみた
はじめに
立方体万華鏡の説明と作り方はこちらの過去記事を参照ください。 pikapikalight.hatenadiary.com
違う模様のものを作りたいと思ったのですが、模様は鏡の裏面を削ることで作るので簡単に試すことができません。 そこで3D CADを使って簡単にシミュレーションすることを考えました。
3D CAD
今回使用したのはRSのDesignSpark Mechanicalです。 www.rs-online.com 3D CADに詳しいわけではないですが、このCADは自分が使ってるごく普通のノートPCでも軽々動いて、オペレーションも直感的なので愛用しています。
ポイント
DesignSpark Mechanicalの基本的な操作方法はクイックガイドに従って練習すれば簡単に習得できると思います。
立方体万華鏡をデザインするにあたってのポイントのみ解説します。
正方形の面に図柄を書く
面をコピーして3面合わせる
3Dモードにすると書いた図柄は一つの面(Surface)になります。これをコピーして実際の配置に合わせます。
3つの面を1つのコンポーネントにする
3つの面を選択して右クリック→新規コンポーネントに移動 とすると1つのコンポーネントとして扱うことができます。 こうすることで簡単にコピーできるようになります。
コンポーネントをコピーして1ブロックを作成する
コピーして移動して回転してを繰り返してこのような図形を作成します。
コンポーネント8個をコンポーネントにしてさらにコピー
複数のコンポーネントをさらに1つのコンポーネントにすることができます。
これをコピーして移動してを繰り返してこのようにします。
これをCAD上でグリングリンすることで実際の万華鏡をシミュレーションすることができます。
新しいデザインを考える
CADを使うことでデザインをシミュレーションできるようになりました。
誰もやっていなそうなデザインを考えて実際に作ってみました。
無限四角#立方体万華鏡 #CUMOS pic.twitter.com/Y4yiKiZDFV
— PikaPikaらいと (@KPmilk3) 2021年5月22日
【プチ100均分解】ダイソーの光る忍者刀を分解してみた
初めに
分解のススメをつい最近知って、バックナンバー動画を見ているのですが、これがとても面白い。
特にThousanDIYさんの「100円ショップのガジェットを分解してみる」が好きです。
note.com
今回、100均のおもちゃを改造するために分解してみたのですが、単純なものなのに色々面白かったので記事にしてみました。
ダイソーの光る忍者刀
200円(税別)
スイッチ入れると赤と緑に刀身が光る(LED4個)
刀を振ると音が鳴る。「ポキーン」、「プイーン」の2種類。
(自分の感覚で文字化するとこんな音)
これを改造して得意のLEDテープを仕込んで色変わりの刀に改造しようと購入しました。
#見た人もなにか無言でLチカあげる pic.twitter.com/fpzLfrhKmS
— PikaPikaらいと (@KPmilk3) 2021年1月27日
それはそれでこのようにできたのですが、この時はLEDテープを仕込むことだけ考えて、音が出る機能を完全に無視して、早々にスピーカーを外してしまいました。
これの2本目の改造品を作るにあたり、音が出る機能を活かしたいと思ったのですが、改めていじってみるとこれがなかなかに不思議な仕組みで、軽く振っただけでは音はならず、ある程度の衝撃を与えないと音がでないという、えっ?これどうやってんだろ?な代物だったのです。
本体の分解
ネジはこの6点です。刀のつばを上にずらすと隠された2つのネジがあります
あけるとこうなってます。
振動センサ
まず一番の謎だった振動センサを調べました。
これが正体でした。筒の中にもう一つの筒があってこれが接触することで導通するというメカニカルなセンサでした。
これが、軽く振っても反応せず、強い衝撃時のみ反応する仕組みだったのです。
自分的に初めてこのようなセンサを見て、軽く感動しました。これだけで200円の価値はあると思いました。
LED
LEDはこのような針金に直接はんだ付けされているという大胆な構造でした。 ただよくよく見ると、針金がわざと段差をつけて切断されています。アノード側は長く、カソード側は短くなるように切断されていました。こうすることでワイヤーをはんだ付けするときにどちらに付けるか判別できるようになっているのだと思います。ちょっとした生産技術なのでしょうが、こうした技術に触れることは新鮮で、分解の楽しさを感じました。
回路図
せっかくなので回路図にしてみました。
電源ラインにはちゃんとポリスイッチ(多分)入ってます。LEDの針金配線の危険性を加味した設計でしょうか。
振動センサにパラで入っている0.1uFはチャタリング対策でしょうか。
単純な回路ですが、面白いです。「分解とは設計者との対話である」という言葉を実感します。
次回予告
分解して回路が分かったので、音が出る仕組みを活かしてこんなの作ってみました。 次回はこれの作り方を解説したいと思います。
自作 #色変わりの刀 #日輪刀
— PikaPikaらいと (@KPmilk3) 2021年3月5日
光る忍者刀のセンサーの仕組みが分かったので音と同時に赫刀化させてみた
↓音声付 pic.twitter.com/8XAtViMXww
Adafruit_NeoPixelとFastLEDライブラリのサンプルを撮ってみた<LEDテープ編>
WS2812B LEDテープを愛用している私。
ArduinoだとAdafruit_NeoPixelとFastLEDライブラリが基本と思います。
LEDテープの点灯パターンの参考になりそうなサンプルスケッチを片っ端から動作させてみて動画記録してみました。
環境
WS2812B 32個
Seeeduino XIAO
Adafruit_NeoPixel Ver.1.8.0
FastLED Ver.3.4.0
LEDを撮影するのは難しく、なるべく色変化がわかりやすいように透明プラ板を横に置いて反射させてみました。
BRIGHTNESSの設定は20くらいに下げています。
目次
Adafruit_NeoPixel
FastLED
Adafruit_NeoPixel
Adafruit_NeoPixelとFastLEDライブラリのサンプルスケッチの動作動画をあげていこうと思います。まずは
— PikaPikaらいと (@KPmilk3) 2021年5月15日
Adafruit_NeoPixelのRGBWstrandtest pic.twitter.com/Hr07JM3UyM
Adafruit_NeoPixelのstrandtest pic.twitter.com/As3loF4ity
— PikaPikaらいと (@KPmilk3) 2021年5月15日
Adafruit_NeoPixelのstrandtest_wheel pic.twitter.com/eB5xbVqgXK
— PikaPikaらいと (@KPmilk3) 2021年5月15日
FastLED
FastLEDのColorPalette pic.twitter.com/F8pq71gmSg
— PikaPikaらいと (@KPmilk3) 2021年5月15日
FastLEDのColorTemperature pic.twitter.com/jTS12UKLv5
— PikaPikaらいと (@KPmilk3) 2021年5月15日
FastLEDのCylon pic.twitter.com/185w4Kqj1S
— PikaPikaらいと (@KPmilk3) 2021年5月15日
FastLED の DemoReel100 pic.twitter.com/2bTOtSDuBR
— PikaPikaらいと (@KPmilk3) 2021年5月15日
FastLED の Fire2012 pic.twitter.com/PXLZkVE2na
— PikaPikaらいと (@KPmilk3) 2021年5月15日
FastLED の Pacifica pic.twitter.com/hkZ04UOp2a
— PikaPikaらいと (@KPmilk3) 2021年5月15日
FastLED の Pride2015 pic.twitter.com/Wdk86Efbfz
— PikaPikaらいと (@KPmilk3) 2021年5月15日
FastLED の RGBSetDemo pic.twitter.com/pozKWeZaYr
— PikaPikaらいと (@KPmilk3) 2021年5月15日
FastLED の TwinkleFox pic.twitter.com/L31Bg8dUVN
— PikaPikaらいと (@KPmilk3) 2021年5月15日
【作品まとめ】M5Stackでかめはめ波
ホログラム で面白いことできないかなと思っていた時にこれを見ました。 www.youtube.com
こんな凄いことは簡単にはできないけど、M5Stackを使ってそれっぽいことはできるんじゃないかと思って作った作品。
M5Stackでホログラム その6
— PikaPikaらいと (@KPmilk3) 2021年3月7日
すごい動画みて、かめはめ波に挑戦したくなった。
あらゆるレベルの低さを痛感しつつも、最初の一歩として記録。ここからマイコンならではのエフェクトを考えてみようhttps://t.co/nyve34I9Jo @YouTubeより#M5Stack #ホログラム #LovyanGFX pic.twitter.com/SZaAH00HsO
M5Stackでホログラム その7
— PikaPikaらいと (@KPmilk3) 2021年3月10日
かめはめ波のあのシーンに挑戦。
マイコンの基本技、Lチカを活用。
日本語表示、さらに鏡に写すため反転表示という難題もLovyanGFXの力でなんなくクリア。
もう少し時間かけて作品に仕上げたい。#M5Stack #ホログラム #LovyanGFX pic.twitter.com/S1gsviEZFV
M5Stackでかめはめ波
— PikaPikaらいと (@KPmilk3) 2021年3月28日
影絵バージョン#M5Stack #かめはめ波 #影絵 pic.twitter.com/iQCbFjO9oU
LEDテープでメビウスの輪を作った
1メートルのRGB LEDテープを点灯させて遊んでいたら、ふと思いついた。
「これでメビウスの輪を作ったら面白そう。」
作ってみました。
ふと思いついてLEDテープでメビウスの輪を作ってみた。
— PikaPikaらいと (@KPmilk3) 2021年5月10日
WS2812B 144個をM5Atomで制御するのはFastLEDライブラリじゃないと無理でした😓 pic.twitter.com/In177S3MhV
材料
WS2812B LEDテープ
Arduinoマイコンボード M5Atom Lite www.switch-science.com M5Atom Lite との接続にはGroveケーブルを使用しました。
LEDテープをメビウスの輪の形にする
まず最初にLEDテープについているごっついコネクタケーブルを外して、M5Atomに簡単に接続できるGroveケーブルに付けなおします。
まっすぐ半田付けすると切れやすいので、あえて逆方向につけて折り返すという小技を使っています。
メビウスの輪にするなら裏表にLEDが配置されるようにしないと意味ないので、テープを半分の長さで折り曲げます。最初は単純に折り曲げてしまおうと思ったのですが、このLEDテープはちょうど半分のところではんだ付けされていました。
72個分のLEDがのっている基板を2枚つないで作られています。冷静に考えると、こんな長い基板どうやって作ってどうやって部品実装しているのだろう??
ハンダをいったん外して裏表にしてはんだ付けしなおします。基板の裏側にもランドがあるので、簡単でした。
両面テープで貼りつけましたが、シリコンチューブだと粘着が弱いので、ところどころセロテープでぐるぐる巻いてみました。
これをひとひねりしてメビウスの輪になるように端と端をつなぎます。セロテープだけでつなぐのは無理だったので、プラバンを補強板にしてセロテープで巻きました。
点灯プログラム
メビウスの輪なのでLED1灯がエンドレスでぐるぐる回るような動きをさせたい。単色では味気ないので、レインボウカラーに変化しながら。
これをM5AtomLiteでプログラムするわけですが、、、
前から気付いていました、M5Stack(ESP32)でAdafruit_NeoPixelライブラリは完璧には動かない事を。
LEDの数が少ない場合はまぁまぁ動きますが、LEDの数が多いと誤動作が目立ちます。
これまでLEDの数が多い場合は別のマイコン(XIAOとか)を使うなどしてしのいでいましたが、この機に向き合うことにしました。
ネット情報からESP32ではFastLEDライブラリを使うといいらしい。
https://github.com/FastLED/FastLED
とりあえずこのライブラリをインストールし、スケッチ例を適当に開いて、ピン番号とLED数だけ変えてM5Atomで動かしてみると、ちゃんとそれらしい動きでLEDが点灯しました
スケッチ例のCylonを動かすとレインボウに変化する点灯動作をしたので、色の変化はこれをマネすれば行けそうです。
あとは1灯を順番に点灯させていくだけですが、メビウスの輪になっているので単純に0~143をつければいいわけではありません。
図に書いて見るとこんな感じになります。
この変則的な並びをいったん配列に入れておいて、loop()はなるべくシンプルになるようにしてみました。
#include <FastLED.h> #define NUM_LEDS 144 #define DATA_PIN 26 #define DELAYVAL 20 #define BRIGHTNESS 200 CRGB leds[NUM_LEDS]; uint16_t array_conv[NUM_LEDS] ; void setup() { LEDS.addLeds<WS2812, DATA_PIN, RGB>(leds, NUM_LEDS); LEDS.setBrightness(BRIGHTNESS); uint16_t j = 0; for (int i = 0; i < NUM_LEDS / 2; i++) { array_conv[j] = i; j++; } for (int i = NUM_LEDS - 1 ; i > NUM_LEDS / 2 - 1; i--) { array_conv[j] = i; j++; } } void loop() { static uint8_t hue = 0; for (int i = 0; i < NUM_LEDS; i++) { FastLED.clear(); leds[array_conv[i]] = CHSV(hue++, 255, 255); FastLED.show(); delay(DELAYVAL); } }
虹色を作っているのは CHSV(hue++, 255, 255)
これでどうやってレインボウカラーの変化になるのか理解してません ^^;
FastLEDに関してはこれからじっくり触っていきたいと思います。
TWELITE CUEとM5Atomで玄関のカギの開閉状態監視システムを作った
初めに
外出先で「玄関のカギかけたっけ?」となる心配性な私。鍵の状態をスマホでチェックすることができたら超便利だと思う。
Qrio みたいなスマートロックを付けるという方法もあるが、開け閉めまでできなくてもいい(なんか不安だし。そんな私は心配性)
単純にカギかかっているかだけを確認できる仕組みが欲しい。
今年のゴールデンウィークもどこにも行けそうになくてヒマそうなので、自作してみた。
設計図
うちの玄関ドアのカギは2か所についているので2つモニターする必要あり。
開発環境、アプリバージョン
windows10
ArduinoIDE v1.8
TWE Programmer v3.7.5
App_Wings_MONOSTICK_BLUE_L1304_V1-1-4.bin
TWELITEについて
モノをつなぐ無線マイコンモジュール TWELITE-トワイライト - MONO-WIRELESS.COM
TWELITEはIEEE802.15.4(2.4GHz)規格の無線マイコンで、手軽に複数の子機の無線網を構築できるのが特徴です。
自分的には5年ほど前、まだモノワイヤレス株式会社に分社化される前の東京コスモス電機の時代にTWELITEをいくつか使用したことがありました。その時はTWELITE 2525(ニコニコ)という、コイン電池で動いて加速度が取れるモジュールを3Dプリンタのフィラメントロールにつけて、3Dプリンタが途中で止まっていないかをロールの回転による加速度変化でモニターして、止まったらアラームを出すといったことをしたりしてました。
今回、鍵のモニターも2525に磁気センサつければできるなと漠然と考えていて、久しぶりにTWELITEのホームページを見たところ、すごく進化していて、新製品がいっぱいでした。
そして2525はすでに新規採用非推奨品となっていたのですが、なんと後継機TWELITE CUEは磁気センサを搭載しているではないですか。モノワイヤレスさん素晴らしいです。
加速度、磁石センサータグ TWELITE CUE-トワイライトキュー | MONO-WIRELESS.COM
材料
製品名 | 価格 | 用途 |
---|---|---|
M5Atom Lite | 1287円 | Wi-Fiでインターネット接続 |
TWELITE CUE(Blue) | 2481円 x2台 | 無線子機(磁気センサ) |
TWELITE DIP(Blue) | 1980円 | 無線親機 |
TWELITE R2 | 1500円 | TWELITEの設定、アプリ変更に必要 |
価格は2021/5/5現在のものです。
TWELITEには標準出力のBLUEと高出力タイプのREDがあります。値段的にREDのほうが1.5倍くらい高いです。
自分はTWELITE DIP(旧製品の基板アンテナ型)とTWELITE R(2でなく旧型)とM5Atomを持っていたので、今回購入したのはTWELITE CUE2台だけです。
その他必要なもの
- コイン型電池(CR2032) 2個:TWELITE CUE用
- ブレッドボード:TWELITE DIPとM5Atom の接続用
- マジックテープ:TWELITE CUEをドアに貼り付ける用
作り方
TWELITE CUEの設定
設定変更はインタラクティブモードで行います。
TWELITE CUEにTWELITE R2を接続し、TWELITE STAGE APPを使えばできるようです。その辺はホームページに詳しく記載されているので省略します。
自分の場合は旧製品であるTWELITE Rを使ったために、すんなりはいきませんでしたが、ちゃんと旧製品も使えるように詳細情報が記載されていました。モノワイヤレスさんのこういうところは信頼できてよいです。
USBアダプター TWELITE R-トワイライター - MONO-WIRELESS.COM
TWELITEプログラマというソフトを使うことで、TWELITE RでもCUEとの接続ができました。
肝心の設定内容ですが、変更するのは少なくとも4か所です。
これが初期設定値ですが、変更するのは
a アプリケーションID
このIDが同じ端末同士で通信を行います。
初期値のままでもいいですが、もしもご近所でTWELITEを使っている人がいた場合、お互いに迷惑かけることになるので違う番号に変更
したほうがいいでしょう。(もし近所で使っている人がいればお友達になりたいですが)
使える番号には制約があります。詳細はこちら
TWELITE APPS - インタラクティブモード - MONO-WIRELESS.COM
i 論理デバイスID
子機につけるナンバーです。同じセンサーの子機が複数あってもこの番号で個体識別できます。
今回は2台の子機を使うので、1
と2
に設定しておきます。
t 送信間隔の設定
定期送信の送信間隔を秒単位で設定します。1〜4095の値で指定可能。
初期値は5なので5秒おきに通信されます。これはあくまで定期送信の話で、開閉センサーパルモードの場合、磁気センサの値に変化があった場合にも送信してくれます。なので定期送信は別になくてもよく、最大の4095秒(68分)でもいいのですが、 送信受信で取りこぼしが出る可能性を考えると60
秒くらいが適当かと思います。(心配性アゲイン)
p センサ固有パラメータの設定
これは今回、開閉センサーパルモードを使うので、04000000
を設定します。
設定変更後はコマンド S
で忘れずに保存しましょう。
TWELITE CUEの設置
TWELITE DIPの設定
TWELITE DIPはまず親機用のアプリを書き込む必要があります。
書き込むのは親機・中継機アプリ(App_Wings)
です。ホームページではMONOSTICK 用とありますが、TWELITE DIPに書き込んでも特に問題なく動きました。
TWELITE R2とTWELITE STAGE APPを使えば多分簡単にできることでしょう。
アプリを書き込んだらインタラクティブモードで設定変更をします
これが初期設定値です。
変更するのは a アプリケーションID
だけです。CUEに設定した番号と同じものに変更します。
TWELITE DIPとM5AtomLiteの配線
Groveコネクタ使って配線できればよいのですが、TWELITEの電源は3.3VなのでGroveの5V電源は使えません。
M5Atomの背面のソケットピンを使うことになりますが、ブレッドボードを使うのが簡単です。(ワイヤーで結線してももちろんかまいません)
接続はわずか3ピンでOK。電源(3.3V)とGNDとTWELITEのUART TX→M5AtomのUART RXです。
M5AtomLiteのプログラム
電文のデコード
まず受信電文を確認するために、単純に受信した値をそのままprintさせてみます。
#include "M5Atom.h" void setup() { M5.begin(true, false, true); Serial.begin(115200); Serial2.begin(115200, SERIAL_8N1, 21, 25);// RX=21 TX=25(TXは使わないので適当) } void loop() { char c; if (Serial2.available() > 0 ) { c = Serial2.read(); Serial.print(c); } }
CUEに磁石をつけたり離したりして通信が来るのを確認します。
こんな電文が確認できました。
:800000004E0006810BFF090180810311300802099C1130010204A900000001026D42 :80000000480007810BFF090180810311300802099C1130010204A900000001005D59 :800000006C000B810BFF090180810311300802099C1130010204F70000000101B08F :800000006F000C810BFF090180810311300802099C1130010204BA00000001818078
バイナリをアスキーにした電文が来ます。
電文の詳細はホームページに記載されています。パルアプリ - WINGS
必要な情報は3つ
番号5 送信元の論理デバイスID
番号d データ(子機の電池電圧(mV))
番号n データ(磁気センサの状態 )
0x00=近くに磁石がない
0x01=N極が近い
0x02=S極が近い
0x80= 定期送信
今回は磁気センサしか使っていないので、単純に:から始まる電文の文字数で必要なデータを取り出すことができます。
余裕があれば拡張性がある作りにしたいところでしたが、今回はとりあえず決め打ちでプログラムしました。(とりあえずで作ったプログラムが直されることはほぼないが)
IoTサービスへの考慮
センサーからデータ受信するたびにIoTサービスへインターネット通信するのが最も簡単ですが、フリーで使えるIoTサービスはデータの更新間隔や一日のデータ数などに制約があることがほとんどです。
とあるフリーのIoTサービスは1日3,000件(約30秒間隔)、データの送信は最低5秒あける必要があるとの条件でした。それを考えると単純に受信したら投げるという作りにはできません。その条件を満たす実装を考えます。
基本的には1分程度に1回、定期的にその時の状態を送るでいいと思いますが、問題はカギが開き閉めされた時です。
1分に1回だとその間の開き閉めを見逃す可能性があります。それは避けたい。 特にドアの上側のカギはメインで使われるので、ここが閉→開の動きをした場合は確実にデータアップしたい。
そういった考えを盛り込んで最終的なプログラムをしました。コード
Wi-Fi接続およびIoTサービスへのデータ送信に関してはあえて省いています。(あまりにプライベートなものなので) ここまで出来る人であればこの先のIoT化はできるでしょう。
#include "M5Atom.h" #define SENSOR_NUM 2 #define OPEN 1 #define CLOSE 0 uint8_t door_lock[ SENSOR_NUM ] = {0}; uint16_t batt_vol[ SENSOR_NUM ] = {0}; unsigned long send_time = 0; uint8_t door1_before = CLOSE; void setup() { M5.begin(true, false, true); Serial.begin(115200); Serial2.begin(115200, SERIAL_8N1, 21, 25);// RX=21 TX=25 send_time = millis(); } void loop() { char str[70]; //受信用配列 int str_len; unsigned long now_time; if (Serial2.available() > 0 ) { str_len = Serial2RecvStr(str); if (str_len != 69) { return; } //Serial.println(str); char id[] = {str[23], str[24], '\0'}; char bat[] = {str[39], str[40], str[41], str[42], '\0'}; char door[] = {str[64], '\0'}; int id_num = atoi(id); int bat_mv = strtol(bat, 0, 16); int d_num = atoi(door); switch (id_num) { case 1: if (d_num == 0 ) { door_lock[0] = 0; //door close door1_before = CLOSE; M5.dis.drawpix(0, 0x000000); } else { door_lock[0] = 1; //door open M5.dis.drawpix(0, 0x00f000);//開いている場合赤LED点灯 if (door1_before == CLOSE) { while (1) { now_time = millis(); if (send_time > now_time) { //飽和対策 send_time = 5000; } if (now_time - send_time > 5000) { send_mes(); break; } } } door1_before = OPEN; } batt_vol[0] = bat_mv; break; case 2: if (d_num == 0 ) { door_lock[1] = 0; //door close } else { door_lock[1] = 1; //door open } batt_vol[1] = bat_mv; break; } } now_time = millis(); if (send_time > now_time) { //飽和対策 send_time = 60000; } if (now_time - send_time > 60000) { send_mes(); } } void send_mes(void) { Serial.print("door1 = "); Serial.println(door_lock[0]); Serial.print("bat1 = "); Serial.println(batt_vol[0]); Serial.print("door2 = "); Serial.println(door_lock[1]); Serial.print("bat2 = "); Serial.println(batt_vol[1]); /* ここにIoTサービスへのデータ送信を記述すればよい */ send_time = millis(); } int Serial2RecvStr(char *buf) { int i = 0; char c; if (Serial2.available() > 0 ) { c = Serial2.read(); if (i == 0 ) { if (c == ':') { buf[i] = c; i++; } else return 0; } while (1) { if (Serial2.available() > 0 ) { c = Serial2.read(); if ( (c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') ) { buf[i] = c; i++; } else { return 0; // ERROR } if (i == 69) { buf[i] = '\0'; return i; } } } } }
動作の様子
カギの開閉状態を無線で取得する事が出来た。
— PikaPikaらいと (@KPmilk3) 2021年5月4日
ここまで出来ればあとはWi-FiでIoTサービスにデータ送れば、カギ監視システムの完成だ。#TWELITE #M5Atom pic.twitter.com/cSZu0mjiuR
TWELITE DIPとM5AtomLiteの設置
電源はM5AtomのUSB端子で給電しますのでUSB電源ポートが必要です。
自分は最初、ドアから距離5mほど高さ2mほどにあるWi-Fiルータ(通称:カニルータ)のそばに置いてみたのですが、下側のカギにつけたセンサからの無線が不安定でした。上側のカギは問題なし。無線機の特性として地面に近いところに設置したものは通信距離が悪くなるので、多分そのせいだと思います。設置場所を変えてドアの近くに設置したら両方とも問題なく受信できました。Wi-Fiはカニルータのおかげもあって余裕でつながりました。
ブレッドボードに挿してあるだけなので、テープで固定してタッパ的なケースに入れて完成としました。
最後に
今回はカギの状態だけを見ていますが、M5AtomのGroveコネクタも空いていることなので、何か他のセンサを追加して本格的なIoTをしてみるのも面白いと思っています。
今回のプログラミングはいわゆるゲートウェイを作るもので普段なじみがなく、我ながら不細工なコードだと思いますが、目標の期間で動くものができたのでよしとします。
TWELITE CUEの電池寿命はホームページページによると「1日に200回の開閉を行なった場合、約4年です。」とありますが、実際にどのくらい持つのか楽しみです。
稼働日:2021/5/4
立方体万華鏡をLEDテープを使ってピカピカさせてみた
立方体万華鏡 CUMOS
ヤマザキミノリ氏
が発明された立方体万華鏡 CUMOS という、鏡を6面組み合わせて作る、とても幻想的な万華鏡があります。
立方体万華鏡CUMOSから光のオブジェ、空間演出デザイン、光のインスタレーションまで一貫して展開。海外国内でふしぎなのぞき箱ワークショップ開催、アートアクティビティも多数。 pic.twitter.com/4ztAdAG5ZH
— ヤマザキミノリ Minori Yamazaki (@MinorinY) 2018年10月21日
私がCUMOSを最初に知ったのはこのツイートです。作り方の動画もありました。
こちらでは色を付けるのにマジックを使っていますが、これをカラーLEDでやったらキレイなんじゃないかと思って実際に作ってみました。先日バズった「立方体万華鏡」ですが、ヤマザキミノリ名誉教授に確認を取り、当館公式YouTubeに作り方を公開させていただけることとなりました!
— 佐賀県立宇宙科学館 (@saga_space) 2020年8月2日
この動画を見て、ぜひおうちでもチャレンジしてみてください!(自分の目で見ると本当に感動します✨)https://t.co/u4jHGonBY1 pic.twitter.com/GXgxnt6END
材料
- 正方形のアクリル鏡 6個
自分は100円ショップ(キャン★ドゥ)で購入しました。 WS2812B LEDテープ
LEDの間隔が狭いもののほうがいいと思います。 自分が使ったのはこちらArduinoマイコンボード
自分が使用したのは M5Atom Lite です。 www.switch-science.com M5Atom Lite との接続にはGroveケーブルを使用しました。
作り方
まずはCUMOSを作成します。
CUMOSの作り方を紹介しているページがありますので、そちらを参考にして作成しました。
おうちで自由研究道場【立方体万華鏡】
国立大学56工学系学部ホームページ
こちらではマジックやセロハンで色を付けていますが、その代わりにLEDテープを使用します。
鏡に線傷をつけたところにWS2812B LEDテープ を貼ります。
WS2812B LEDテープ はハサミで好きなところをカットして分割できるようになっていますので、鏡の大きさに合わせてカットし、ワイヤーをはんだ付けして配線します。 こんな感じです。(雑な工作ですいません)
M5Atom Lite への接続はGroveケーブルの片方を直接LEDテープ にはんだ付けしました。
これでハードは完成です。
コード
ArduinoでプログラムしてLEDテープを点灯させるわけですが、
Adafruit_NeoPixelライブラリのサンプルプログラムをそのまま使うのが簡単です。
ただし、M5Atomに使われているESP32マイコンだとAdafruit_NeoPixelライブラリは完璧には動作しません。LEDの数が多いと誤点灯します。今回は誤点灯してもそれほど影響ないので、このライブラリを使いました。
github.com
githubからライブラリのZIPをダウンロードし、ArduinoIDEにてライブラリインクルードをします。
サンプルプログラムのstrandtestがいい感じの点灯パターンです。
修正するのは2か所だけ。LED制御信号のピン番号とLEDの数の設定だけ直せばOKです。
LED_PIN はM5AtomのGroveポートの26番ピンを使っているので26に、
LED_COUNT は今回72個使っているので、そのように修正します。
// Which pin on the Arduino is connected to the NeoPixels? // On a Trinket or Gemma we suggest changing this to 1: //#define LED_PIN 6 #define LED_PIN 26 // How many NeoPixels are attached to the Arduino? //#define LED_COUNT 60 #define LED_COUNT 72
プログラムを書きこめば完成です。
strandtestによる点灯パターンの様子はこちら
裏側がどうなっているかお見せします。作り方のブログ記事も作成中です。 pic.twitter.com/cnebAc9xuf
— PikaPikaらいと (@KPmilk3) 2021年5月2日
消費電流確認
WS2812B LEDテープを使用するときは消費電流に気を付ける必要があります。
strandtestプログラムで72個使った場合の消費電流を簡易的にUSB電流計で測ってみました。
M5Atomの分も含めて最大320mA@5V でした。結構大きいですが普通のモバイルバッテリーで給電可能な値でした。
これ以上だとちょっと気にしないといけないと思うので、プログラム改造するときはこれ以上明るくしないよう注意必要と思います。
ツイッターにあげた動画
#MFKyoto2021 #作品発表
— PikaPikaらいと (@KPmilk3) 2021年5月1日
立方体万華鏡CUMOS をLEDテープでピカピカさせたものです。
アートという事で。 pic.twitter.com/Hzqrl7YFA1
#立体万華鏡 #cumos はヤマザキミノリ名誉教授の考案だそうです。素晴らしいアイデアに敬服します。
— PikaPikaらいと (@KPmilk3) 2021年2月8日
自分はこちらの動画の作り方を見て、カラーペンの代わりにカラーLEDテープを貼ってプログラムでチカチカできるようにしました https://t.co/n5sWyPivqu pic.twitter.com/lNiy9Gt5WH
こちらの #立体万華鏡 をLEDテープ使って作ってみました。
— PikaPikaらいと (@KPmilk3) 2021年2月5日
点灯パターン変えても面白そう。 https://t.co/07MKSZ71Wc pic.twitter.com/FyeP4kq56B
#立体万華鏡 #万華鏡
— PikaPikaらいと (@KPmilk3) 2021年2月9日
外と内の世界はこんなにも違う pic.twitter.com/1HD0D2qi9W
#万華鏡 #立体万華鏡
— PikaPikaらいと (@KPmilk3) 2021年2月8日
ランダム点灯にしてみた。 https://t.co/i0oAhP1uPX pic.twitter.com/UDl4EVUmPo
#立体万華鏡
— PikaPikaらいと (@KPmilk3) 2021年2月9日
全体が徐々に変化するパターン
これもなかなかいい感じ😃 pic.twitter.com/bdzBZb7Anb