« 修理:動いているけどまだなんかおかしい | トップページ | マイコン型導通チェッカー、13年目だ »

2021年4月16日 (金)

「ぶつかるLED」

「出窓」のアトラクション、モータ駆動系は「うるさい」という
ことで作ってみたのが2021年1月22日:出窓に「跳ねるLED」

この続きということで
ぶつかるLED」を試してみました。

144個のテープLEDのを横にして「弾性衝突」を模倣します。
次から次とLED上に「衝突体」を送り出します。
最大個数は8。
LEDの点灯数(1~6)で質量を決めて、それぞれの速度から
衝突を模倣します。
押したり跳ね返ったり。
  ※動画じゃないと面白くないので、ちょい待って。
A1_20210416203701

※取り急ぎ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にして
   横幅を広く。

Cc1_20210416180801

文字はLEDの色(256色)を変換して文字(!~0~A~a~)にしたもの。
最下行がLEDに表示されるデータになります。
25msごとに新たな表示データが出てきます。

※制御タイミング
25ms = 40Hzサイクルで
 ・衝突体の移動
 ・衝突のチェック
 ・衝突体の消去(範囲を出た時)
 ・新たな衝突体の作成
 ・表示データの作成
 ・シリアル出力データの作成
 ・LEDテープへの表示データ出力
 ・シリアルデータ出力
を行っています。
その処理時間をオシロで観察した波形です。
W004

※参:タイミングを決めるタイマーについて。
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」にリネームしてください。

 

|

« 修理:動いているけどまだなんかおかしい | トップページ | マイコン型導通チェッカー、13年目だ »

出窓」カテゴリの記事

LED」カテゴリの記事

Arduino」カテゴリの記事

コメント

動画を見させていただきました。

個人的な感想ですが、出窓でのアトラクションなら
 1.もっと賑やかでも良い
 2.高速で動く方が楽しい(60秒付近程度かもっと速く)
と感じました。

投稿: mytoshi | 2021年4月16日 (金) 21時20分

・賑やかに。高速に。
ということなんですが、実際にやってみると

・数が多いと、目が追いつかないので面白くない。
  「来た来た。ぶつかった。」
  「行ったり来たりしてる。」
 と、単一のものを目で追えるくらいでないと
 面白くないのように感じます。

・出現タイミングと速度、質量が乱数なんで、高速にすると、衝突現象が起こる前に先のが通過してしまったり、衝突による加速が急で目で追えなくなってしまいます。
賑やかなだけであまり面白くない。
ということになってしまうのです。

現在は、軽い物(LEDの数が少ない)は早めに、重い物は遅めになるように、速度を決める乱数を調整しています。

先行する衝突体の状態(個数)を見て、数が少ない場合は遅めにするという処理を入れると衝突回数が増えて良いかもしれません。
もうちょい考えてみます。

投稿: 居酒屋ガレージ店主(JH3DBO) | 2021年4月17日 (土) 10時08分

コメントを書く



(ウェブ上には掲載しません)




« 修理:動いているけどまだなんかおかしい | トップページ | マイコン型導通チェッカー、13年目だ »