「ぶつかるLED」
「出窓」のアトラクション、モータ駆動系は「うるさい」という
ことで作ってみたのが2021年1月22日:出窓に「跳ねるLED」 。
この続きということで
「ぶつかるLED」を試してみました。
144個のテープLEDのを横にして「弾性衝突」を模倣します。
次から次とLED上に「衝突体」を送り出します。
最大個数は8。
LEDの点灯数(1~6)で質量を決めて、それぞれの速度から
衝突を模倣します。
押したり跳ね返ったり。
※動画じゃないと面白くないので、ちょい待って。
※取り急ぎyoutubeにアップロード
https://www.youtube.com/watch?v=8YOAyhjGTss
場所は仕事場の作業机。
カメラはリコーのGX100。
「出窓」に設置したときはもっとちゃんとアップします。
Arduino-UNOで動作します。
・ダウンロード - led_collision1.txt
ファイルタイプを「.txt」としていますが、
「.ino」にリネームしてください。
使ったライブラリは
<Adafruit_NeoPixel.h>
LED表示データD12ピンに出力しています。
テープLEDが無くても、衝突体の様子をシリアル出力して
いますので、Arduinoだけで雰囲気を見てもらえるかと。
※シリアルモニターを115.2kBPSにして
横幅を広く。
文字はLEDの色(256色)を変換して文字(!~0~A~a~)にしたもの。
最下行がLEDに表示されるデータになります。
25msごとに新たな表示データが出てきます。
※制御タイミング
25ms = 40Hzサイクルで
・衝突体の移動
・衝突のチェック
・衝突体の消去(範囲を出た時)
・新たな衝突体の作成
・表示データの作成
・シリアル出力データの作成
・LEDテープへの表示データ出力
・シリアルデータ出力
を行っています。
その処理時間をオシロで観察した波形です。
※参:タイミングを決めるタイマーについて。
LED表示データを送出する「LED.Show()」の中では割り込みが
禁止されて実行されます。
表示制御用のパルスのタイミングをソフトで作っているためです。
全体の制御タイミングを決めるのに「micros()」や「Mstimer2」
を使うと、LED.Show()の割り込み禁止期間が長い(今回は4msちょい)
ので、その間はタイマー割り込みが待たされるので時間遅れが生じます。
micros()はタイマー0のオーバーフロー割り込み 1.024ms周期
Mstimer2はタイマー2で1ms周期の割り込み
バックグランドの1.024msや1ms周期の割り込み処理が抜けるので
計時が遅れるわけです。
今回は16bitタイマーであるタイマー1を使って、40Hz=25ms周期の
割り込みが直接得られるようにしています。
※割り込みで処理しなくても25ms経過をチェックして
(タイマー2のアウトプットコンペアフラグ)
loop内で計時処理すれば良いのです。
最初、Mstimer2でタイミングを作っていたので
その絡みで割り込みが残りました。
※追記 (2021/4/29)
・衝突の発生がおもしろい。
重い衝突体(LEDの数が多い max6)にはさまれた軽衝突体(LED数が
少ない)が前後するのが興味深いかと。
・質量と速度は出発時に乱数で決めている。
その頻度をどのように片寄らせれば良いかで
見栄えが決まる。
・重衝突体が発生したら次は必ず軽衝突体になるように
した。 軽い方の出現頻度が大きくなる。
先のスケッチは重衝突体が連続することがあった。
・最大8個の衝突体が出てくる。
数が少ないときはゆっくりに。
重衝突体はゆっくりに。
軽衝突体は早く。
最後尾が離れたときは高速でぶつける。
こんな感じで新しい衝突体を作る「newobj()」関数を
手直ししてみました。
・ダウンロード - led_collision1a.txt
ファイルタイプを「.ino」にリネームしてください。
| 固定リンク
「出窓」カテゴリの記事
- 人感センサー用オフディレータイマー回路(2023.08.26)
- 『きもだめし』に人感センサー(2023.08.19)
- 出窓の夜間照明用LEDを交換(2023.06.04)
- 出窓:鯉のぼりを振る(2023.05.04)
- 出窓:鯉のぼりを振れたらというリクエスト(2023.04.26)
「LED」カテゴリの記事
- 12年前に改造した卓上ランプを点検(2024.08.26)
- 松下の「ホロホロブザー」つながりで(2024.06.19)
- ダイソー SHOOTING LIGHT:撮影用ライト LEDの輝度変化を探る #2(2024.05.03)
- 赤外線リモコン受信モジュールの不思議(2024.02.02)
- ダイソー SHOOTING LIGHTLED:撮影用ライト LEDの輝度変化を探る(2024.01.24)
「Arduino」カテゴリの記事
- おっと。map関数の計算桁に注意(2024.10.06)
- DDS方式の2相パルス発生回路、周波数スキャン機能を付ける(2024.10.05)
- 1クロックでも速くしたい 割込を「ISR_NAKED」で(2024.09.30)
- 1クロックでも速くしたい DDS方式の2相パルス発生器(2024.09.27)
- 秋月のI2C接続液晶 AQM1602XAを基板に直付け(2024.09.24)
コメント
動画を見させていただきました。
個人的な感想ですが、出窓でのアトラクションなら
1.もっと賑やかでも良い
2.高速で動く方が楽しい(60秒付近程度かもっと速く)
と感じました。
投稿: mytoshi | 2021年4月16日 (金) 21時20分
・賑やかに。高速に。
ということなんですが、実際にやってみると
・数が多いと、目が追いつかないので面白くない。
「来た来た。ぶつかった。」
「行ったり来たりしてる。」
と、単一のものを目で追えるくらいでないと
面白くないのように感じます。
・出現タイミングと速度、質量が乱数なんで、高速にすると、衝突現象が起こる前に先のが通過してしまったり、衝突による加速が急で目で追えなくなってしまいます。
賑やかなだけであまり面白くない。
ということになってしまうのです。
現在は、軽い物(LEDの数が少ない)は早めに、重い物は遅めになるように、速度を決める乱数を調整しています。
先行する衝突体の状態(個数)を見て、数が少ない場合は遅めにするという処理を入れると衝突回数が増えて良いかもしれません。
もうちょい考えてみます。
投稿: 居酒屋ガレージ店主(JH3DBO) | 2021年4月17日 (土) 10時08分