管理人が*管理人が作ったJapanino(ジャパニーノ)に関連する作品展示室です。

(このページは管理人のみ編集可能です)

インデックス


作品1:P.O.V.時計



作品2:P.O.V.で遊んでみました。



作品3:ドレミ演奏スケッチ。

 ・解説&スケッチへ
演奏スコアをできるだけ簡単に入力できるものを作ってみました。機能はシンプルです。


作品1:P.O.V.時計


P.O.V.に現在時刻を表示する時計です。

動画(ニコニコ動画とYouTube)

静止画(22時15分)


見ていただけると分かりますが、ハンドルを回さないと時刻が分かりません(笑)。
時と分の間の:の上のバーは一秒毎に点滅します。
時刻設定は、シリアルモニタから行う事が出来ますと言うか、それ以外に方法はありません。

まず、ArduinoライブラリとしてMsTimer2が必要なので入手してください(株式会社武蔵野電波さん内の解説ページ)。
http://www.musashinodenpa.com/arduino/ref/index.php?f=1&pos=1668

ライブラリがうまく動いたら、下記の時計(clock)のスケッチをダウンロードしてください。
時計のスケッチのダウンロード

これをArduino IDEで読み込んでコンパイルします。

コンパイル出来たらUSBでプログラムを転送します。

シリアルモニタを起動して時刻を設定します。

シリアルモニタから使えるコマンドは2つで、
"d" 現在時刻をシリアルで表示します。
"HHMMSS"で現在時刻(時分秒)を設定します

clockスケッチの解説

 変数や関数   解説 
 TIMER_COUNT  割り込みタイマの周期です。お持ちのJapaninoの誤差度合いに合わせて調整してください。
大きくすると時計の進みが遅くなります。小さくすれば早くなります。
 bitmap[][4]  数字の表示パターンです。
 setup()  P.O.V.のLEDとSW、割り込みタイマ2、シリアル通信の初期化をしています。
 loop()  メインループです。P.O.V.の処理とシリアル通信によるコマンド処理をしています。
 pov()  P.O.V.に時刻を表示する制御しています。
 serial_input()  シリアル通信されてきたコマンドを一旦バッファに貯めています。
連続したデータを受け取れるようにウェイト処理も行っています。
 command()  受け取ったコマンドを解析して処理します。
コマンドは時刻表示と設定です。
 serial_disp()  シリアル通信で時刻をシリアルモニタへ送ります(表示)。
 disp()  P.O.V.に一文字表示する関数です。
 timer()  割り込みで時計のカウントをしています。約1/2秒に一回この関数が呼び出されるますので呼び出し回数をカウントして時刻を計算します。
結構ちゃんとしたプログラムになっちゃいました。
初心者の方には難しかったかも知れませんね。






作品2:その1 P.O.V.サイン波の解説&スケッチ


P.O.V.にサイン波を表示します。P.O.V.が弧を描いているので歯車の様に見えますがサインカーブです。

静止画


サイン波のスケッチです。
sinのスケッチのダウンロード

sinスケッチの解説

 変数や関数   解説 
 setup()  P.O.V.のLEDとSWの初期化をしています。
 loop()  メインループです。P.O.V.のSWがONなら表示をしています。
 pov()  countを基準に周波数と位相を変化させています。ループでサインの計算をしながらdisp()でP.O.V.に表示します。
 disp()  該当するLEDの番号を点灯します。




作品2:その2 P.O.V.リサージュ図形の解説&スケッチ


P.O.V.にリサージュ図形を表示しています。P.O.V.が弧を描いているので表示分かり辛いです。

静止画


リサージュ図形のスケッチです。
リサージュ図形とは → http://www.uec.ac.jp/uec/uec-logo/lissajous-charts.html
リサージュ図形のスケッチのダウンロード

lissajousスケッチの解説

 変数や関数   解説 
 CurveBuf  リサージュ図形を記録するバッファです。
 setup()  P.O.V.のLEDとSWの初期化をしています。
 loop()  メインループです。P.O.V.のSWがONならP.O.V.で表示とリサージュ図形の計算をしています。br()countはリサージュ図形の変化基準となるカウントをしています。
 pov()  CurveBuf内容をP.O.V.に表示します。
 disp()  一列のLEDをビット内容にあわせてLEDの番号を点灯します。
 lissajous()  リサージュ図形を計算してCurveBufに書き込んでいます。
リサージュはXとYの座標をsinで変化させたものなので、countを元に周波数と位相のズレを作り出しています。






作品2:その3 P.O.V.ラスタースクロールの解説&スケッチ


P.O.V.に"JAPANINO"の文字を表示して、その文字をラスタースクロールで揺らしています。めちゃくちゃ分かり辛いです。

静止画




rasterスケッチの解説

 変数や関数   解説 
 SCREEN_SIZEX  仮想的な表示スクリーンのサイズです。X方向
 SCREEN_SIZEY  仮想的な表示スクリーンのサイズです。Y方向。
 RASTER_MAX  ラスタースクロールが最大になる周期の半分の時間です。
 CIRCLE_POS  使ってません。忘れてください。
 screen  "JAPANINO"の文字パターンです。サンプルスケッチより。
 setup()  P.O.V.のLEDとSWの初期化をしています。
 loop()  メインループです。P.O.V.のSWがONならP.O.V.で表示とラスタースクロールの計算をしています。
countはラスタースクロールの変化基準となるカウントをしています。
 raster()  countdRASTER_MAXを周期の基準に横方向の振幅を変えています。いつものsin計算と位相もズラしています。
 pov()  scroll内容をP.O.V.に表示しますが、ラスター量に合わせてx座標を変化させています。
 disp()  一列のLEDをビット内容にあわせてLEDの番号を点灯します。




作品2:その4 P.O.V.ボールの反射の解説&スケッチ


P.O.V.で四角い枠の中でボールの反射を繰り返すデモです。当然ながらP.O.V.が弧を描いているので少し違和感がありますネ。

静止画


ボールの反射のスケッチです。
ボールの反射のスケッチのダウンロード

ballスケッチの解説

 変数や関数   解説 
 STAGE_SIZEX  仮想的な盤面のサイズです。X方向
 STAGE_SIZEY  仮想的な盤面のサイズです。Y方向
 ballx,bally  ボールの現在座標です。
 vectx,vecty;  ボールの移動ベクトルです。
 screen  "JAPANINO"の文字パターンです。サンプルスケッチより。
 setup()  P.O.V.のLEDとSWの初期化をしています。ボールの位置と移動方向も設定しています。
 loop()  メインループです。P.O.V.のSWがONならP.O.V.で表示とボールの移動処理を呼び出しています。
 ball()  ベクトルと加算することで新しい位置を求めています。壁に衝突したらボールを反射します。
この時壁に刺さらないように位置も補正します
 pov()  壁とボールの位置をP.O.V.に表示します。
 disp()  一列のLEDをビット内容にあわせてLEDの番号を点灯します。
もう少し凝ると自動ブロック崩しになるのですが、それはまたの機会に。



作品3:ドレミ演奏スケッチ。


大人の科学のスケッチ「P.O.V.でドレミ」より入力を直感的にしてみました。
"d8f8f2l16s16f8l4o4s4f2r4d2o4"と音程と音長を一度に書けます。
ただ今のところ3オクターブのみサポートで、高度な機能はないので繰り返しやら譜面そのままは書けません。
ドレミ演奏スケッチのダウンロード

ドレミ演奏スケッチの解説

 変数や関数   解説 
 melody  楽譜です。曲は「P.O.V.でドレミ」と同様
 loop  楽譜を読んで演奏を制御しています。
 playTone  楽譜コードを解析して音を出します。
 getScore  楽譜コードを一文字取得します。


楽譜コード

<オクターブ><音程><音長>...繰り返し

<オクターブ>
 なし		:	ノーマルオクターブ
 -		:	一つ下のオクターブ
 +		:	一つ上のオクターブ
<音程>
 d		:	Do(ド)
 d#		:	Do(ド#)
 r		:	Re(レ)
 r#		:	Re(レ#)
 m		:	Mi(ミ)
 f		:	Fa(ファ)
 f#		:	Fa(ファ#)
 s		:	So(ソ)
 s#		:	So(ソ#)
 l		:	La(ラ)
 l#		:	La(ラ#)
 t		:	Ti(シ)
 o		:	休符
<音長>
 2		:	2分音符
 4		:	4分音符
 8		:	8分音符
 16		:	16分音符



<気が向いたら新作を追加予定>


もしよろしかったら、コメントをお願いします。
  • こんなことできるのか スゴイナ -- (ななし) 2010-05-20 00:33:21
  • すごいです。尊敬します。次回の作品も楽しみにしています。参考にさせてください。 -- (TAKA) 2010-08-25 17:31:11
  • こんなことできるんだ -- (ko) 2012-01-21 11:46:37
  • P.O.V.時計が面白いですね~。先日Japaninoを入手したばかりなのですが、頑張れば電波時計と組み合わせて自動で時刻設定する事も可能でしょうか? -- (VAN613) 2013-02-03 07:02:25
  • ひさびさに触りたくなりました。参考にさせて下さ−い。 -- (YU) 2015-02-22 00:11:39
名前:
コメント:

すべてのコメントを見る



このページの訪問者総数 : -
本日の訪問者: -
昨日の訪問者: -

最終更新:2010年06月09日 13:19