スポンサーリンク


RAKUTEN

  • スポンサーリンク

« 2014年3月 | メイン | 2014年5月 »

2014/04/29

大人の科学 ポケットミクを改造してみる。 その13

ポケミクを今回内蔵したPICマイコンから操作する方向でのトライを始めました。

まず、操作スイッチの方ですが、これは今の回路でかなり簡単にできました。

通常はPICマイコンのPORTA,Bを入力にして監視しているのを、TRISA,Bを操作して一時的に出力にし、0を出すことで対応したスイッチが押されたかのようにポケミクに思わせることができます。

 

スタイラスの方はそう簡単ではありません。とりあえず10bitDACを付けてスタイラス電圧をPICマイコンから制御できるようにしてみました。回路図と、取り付け位置は以下の通りです。

Miku4  Dscf5001

DACは秋月電子のLTC1660を使いました。 この石は8個アナログ出力を個別に制御できるというすぐれもので、今回の用途には過剰なのですが、他にちょうど良い物がなかったのでこれにしています。

 

このDACは出力をハイインピーダンスにもできますので、普通にスタイラスを使う時はハイインピーにしておいて、PICから演奏操作する時はドライブさせて、鍵盤スキャンタイミングで鍵盤位置相当のアナログ電圧を出力します。

 

これで鍵盤読み取りと組み合わせると操作の記録・再生ができるというはずなのですが。。。。どうやらそれほど甘くはないようです。

 

やってみたところ、DACから鍵盤位置を入れることはできるのですが、鍵盤を押していることをポケミクが受け付けてくれません。現状はスタイラスを鍵盤のどこか(どこでも良い)にスタイラスを当てておいてDACから電圧を入れると対応した音階が出る、という状態です。

ポケミクの鍵盤制御はかなり奥が深い模様です。

Dscf5003 これが鍵盤インタフェースの信号です。上がスタイラス入力、

下が鍵盤に印加されている電圧です。下を見ると電圧を2段階に分けてかけていますね。

推測ではその2段階での差分を見ることで読取精度を上げていて、オンオフ判定もその差分から出しているのだと思いますが、どうもその仕組みがわかりません。。。。

 

とりあえずスタイラスを当てた状態では動くので、それで操作記録・再生までは動かしてみようかと思います。

 

それではまたです。

 

2014/04/28

大人の科学 ポケットミクを改造してみる。 その12

簡単な口パク音声同期をやってみました

音声波形を見ていたところ、振幅だけで以下の3段階に区分できることがわかりましたので、単純に波形の一定周期でMIN,MAXを記録しておき、その差文だけを元に口の絵を変えています。

   @A音: 振幅25くらい

   AO音: 振幅15くらい

   BI,U,E音:振幅12以下(波形は変わりますが振幅では区別できません)

この3パターンに無音の時の口閉じを加えて4パターンです。

なお、今回はポケミク用WEBアプリで歌詞を変えています。

WEBアプリを使おうとしたら「ブラウザがGoogle Chromeでないと動かない」というメッセージが出て、そのインストールにちょっとだけ時間がかかりましたが、後はすんなり動きました。

 

スタンドアローンで改造中ではありますが、PCとの連携も面白いですね。

 

次はDAC接続による無理やり制御をやってみます。

それではまたです。

2014/04/27

大人の科学 ポケットミクを改造してみる。 その11

連休に入りましたね。今日はポケミクに表示エフェクトを付けてみました。

もっと凝った表示をしようと思っていましたが昨日の飲み会で二日酔いぎみのため、とりあえず音声波形までです。

Dscf3330_2 PICのAD入力が余っていたので、そこにフォンジャック出力を繋ぎました。回路図は以下の通りです。

Miku3

フォンジャック出力は当然ACだろうと思っていたのですが、波形を見たところ0〜5V位の範囲のDCだったので、抵抗で分圧しているだけです。

 

なお、鍵盤の今回少し改善しました。これまでは鍵盤位置を鍵盤全体一律の係数で計算していたのですが、今回から27個ある鍵盤一個一個のADC値範囲を定義して、その範囲内かどうかを吟味するようにしました。

メモリと時間のかかる方法なのであまり好きではないですが、とりあえずこれでキーのずれは起きなくなったようです。

 

 

古い一律係数の場合は2つくらいの特定キーでずれ見られたのですが、多分係数の求め方か丸めこみが適切でなくて、その位置で閾値が微妙なところになっていたのかな、と思います。

音声波形の取出しは、なんとか解析して口パクを波形に合わせられないかな、という考えでやってみたのですが、ちょっと簡単じゃないかもしれませんね。FFTをかけて周波数成分を見ないといけないのかな?さすがにPIC24でもCPUパワーがたりないか?

 

あとは、ポケミクの操作状態が一通り読めるようになりましたので、次は逆に制御する方向で考えています。

まずはDACを付けて自動演奏。ただの自動演奏だと面白くないので、ようやく読めるようになった鍵盤リードと合わせて手動演奏の記録・再生にトライ予定です。

 

MIDIでやれば簡単なのかもしれないですが(^^; 大昔シリアルでMIDIを動かしたことはあるのですが、今のPICでUSB-MIDIを動かす方法が分からないので、もうしばらく今やっている無理やりハード方式で進めちゃいます。

 

それではまたです。

2014/04/26

大人の科学 ポケットミクを改造してみる。 その10

ある程度ソースが整理できましたのでご参考に公開しようと思います。

画面はこれまでからあまり変わっていませんが、以下の感じです。

Dscf3318  Dscf3315

地味ですがスイッチ読取りのチャタリング対策を改善して読み取りが安定したのと、

LCDのSPI書き込みを見直して多少高速化してあります。

以下ソースです。

「pokemiku_main.c」をダウンロード  メインです。

「graphics2_cl.c」をダウンロード  グラフィックルーチンです。

「spilcd_cl.c」をダウンロード  LCD操作ルーチンです。

「font8x8.h」をダウンロード 8x8dotフォントデータです。

「miku.h」をダウンロード ミク画像データです。

 

「pocketmiku2.zip」をダウンロード :上記を含むプロジェクトの圧縮ファイルです。

 

鍵盤読取り時の時々ずれだけはまだ解決していません。。。。。が、それは気にしつつも別の機能追加をやりたいと思います。

  

それではまたです。

2014/04/22

大人の科学 ポケットミクを改造してみる。 その9

鍵盤読取りがほぼできるようになりました。今回改善したのはチャタリング対策です。

これまでは手を抜いてADC読み取り値の移動平均を取るだけでお茶を濁していたのですが、タッチ時のデータを見ていてそれではだめだと気付きました。(そりゃそうですね。普通のスイッチと一緒ですね。)

今回平均計算をしている所で、ADC値の変動が±25を超えたら棄却するようにしてようやくほぼ安定しました。(±25は観測の結果1キー分の差文です。)

ほぼというのは、まだごくたまに1キーずれることがあるからです。。。。これはノイズ原因かな。。。。

とりあえずちょっと地味ですがドレミの音に合わせた口パクモードを入れ込みました。

分かりにくいと思いますが、画面の下にあるアスタリスクが鍵盤のタッチ位置を示しています。

いままでの動画でも動いていたのですが、ふらふらしていたのがようやく直りました。

鍵盤スタイラスADC読み取り値も安定したので、タッチ位置とADC値(つまり電圧値)の相関を取ってみました。

Graph

横軸が鍵盤タッチ位置です。左側が0番として26番まであります。縦軸がAD変換された電圧の値です。PIC内蔵ADCをVCCレファレンスで使っていますので、1023が3.3Vとなります。

まあリニアと言ってよいのではないかと思います。なお、手前・半音・奥のリボンで値にほとんど違いは見られませんでした。

「ほぼ」の分はおいておくと、とりあえずやりたかったことはできたので、

次に何やろうか考え中です。

例えば:

 ・音声出力の方をAD変換して連動表示(しかし何を?)

 ・キー操作(今IOを入力にして見ていますが、出力にしてしまえば逆に操作もできるはず。)

 ・鍵盤操作(今ADCで見ていますが、逆にDACを付ければ多分操作できるはず。

        しかしそれは普通の自動演奏であって手間の割におもしろくなさそう。)

 ・MIDI操作(できるかな?)

それではまたです。

2014/04/21

大人の科学 ポケットミクを改造してみる。 その8

鍵盤読み取りの方は、LOWパルスタイミングで読むようにしてだいぶ改善はしたのですが、まだ安定していません。もう少しかかりそうです。

 

とりあえず簡単な方の口パク改良を行いました。

色も少し改善しました。裸眼で見ると結構綺麗だと思うのですが、使っているデジカメの動画モードがあまり良くなくて撮られた動画の明るさ・コントラストがいまいちです。

動画補正ソフトで改善はしてみたのですが、それでもいまいち。。。ビデオカメラも欲しくなってきてしまいました。

 

ソフトとしては、母音5つ分の口周りデータを用意しておいて、それをポケットミクプリセットの楽譜に合わせて切り替えています。楽譜との同期は各プリセットパターン用にテーブルを用意することで行っています。

 

鍵盤のドレミモードの場合は鍵盤位置を読み取って、”ドレミファソラシド”→”OIIAOAIO”のような変換をかければできるのですが、いまは鍵盤読み取りがうまくいっていないので、その機能は入れていません。

 

鍵盤の方ですが、LOWパルスタイミングで読むことで殆どのキーは正しく読めるようになりました。数値で見る限りでは手前、半音、奥で値が変わることもなくなっています。

 

しかし、どうも安定しなくて、読み取ったキー番号がふらつくのです。。。ソフトではなく、ノイズ原因かもしれないな、と思い始めたところです。

 

とりあえず今週末はここまで。

それではまたです。

 

2014/04/19

大人の科学 ポケットミクを改造してみる。 その7

鍵盤の波形をオシロで少しまじめに解析してみました。

Dscf3260 オシロがSTN液晶の安物オシロなので見づらくてすみません。最近表示がちらつくのでTFTの新しいのが欲しいのですが、先立つものが中々(^^;

Dscf3259

 

分かったこと:

・鍵盤の抵抗板には2ms間隔でLOWパルスが見えます。幅は80us程です。

・スタイラス入力で見たそのLOWレベルはスタイラスが当たっている鍵盤横位置に相関します。

・そのレベルは鍵盤の手前、半音、奥の無段階に関係なく、横位置だけによって決まります。

・つまり、このLOWパルスのタイミングでAD変換をかければ鍵盤の位置が正しく読み取れるはずです。

 

 

そのLOWレベル以外のタイミングでのレベルは鍵盤横位置と相関しているように見えますが、良く見ると安定しておらず、手前・奥行き方向によって変わります。いまのソフトで鍵盤が正しく読めないのはそこでADCをかけているためです。

 

 

これはおそらく、ポケットミクの制御としては、LOWパルスとして見えているタイミングで抵抗板に与える電圧をドライブしていて、それ以外のところはドライブを切って余韻電圧になっているのではないかと思います。理由は消費電力低減でしょう。ドライブしっぱなしだと電流食いますので。 

 

最初に波形見たときにそうかもしれないと思ったのですが、とりあえず簡単なやり方をしてしまいました。安易なことをしてはいけませんね。

 

LOWパルスタイミングを検出する方法としては抵抗板ドライブ側の変化を監視していれば簡単なのですが、いまはそこはPICに繋いでいません。

PICマイコンのピンの余りがあまりないし、今から配線を追加するのも面倒なんで、できればソフトだけでやろうと思います。キーと同じように20usタイマーで監視してレベルが下がる所を捕まえればよいかと。

 

 

今日はこれから飲み会なので、明日時間が有れば続きやります。

 

それではまたです。

 

大人の科学 ポケットミクを改造してみる。 その6

ようやく週末ですので、少し早起きしてソフトいじってました。

鍵盤読み取りの方は進捗無しです。。。もう一度オシロで波形をみて解析しようと思います。

しかしとりあえず鍵盤ON/OFFの区別はついているので、それを使って口パクをさせてみました。

2コマで口のあたりだけON/OFFに合わせて差し替えているだけですが、それっぽく見えているかな、と思います。

 

なお、色が薄いように見えるのは多分データ作成時のカラー変換に問題が有ります。PICのROMサイズ制限が有るので、RGB24bppを8bpp(RRRGGGBB)に落としてデータ化し、サイズを減らしています。液晶は16bpp(Rx5,Gx6,Bx5)なので、表示の際にまたビット拡張しているのですが、その過程でRGB値が落ちているみたいです。

 

そのあたりの改善、もうちょっと高速化、鍵盤対応、あたりをこの後やってみようかと思います。

それではまたです。

2014/04/16

大人の科学 ポケットミクを改造してみる。 その5

週末進行といっておきながら、ポケミクは面白いのでついいじってしまいます(^^;

今日は鍵盤読み取りを試してみました。

回路は以下の通り。鍵盤用スタイラスの信号をPICマイコンのAN1に繋ぎました。

Miku23a

ADCの制御は以前作ったフリスクオシロ用のルーチンをコピペしましたので簡単でしたが、問題はスキャンタイミング。オシロで見たところ、鍵盤にも何かパルスが入っているので、そこを避けてAD変換しています。

 

波形をみたところ、鍵盤のパルスはスイッチスキャンパルスの後にでているようなので、20usタイマーで作っているスイッチスキャンと同期させてADCを動かすようにしてみました。

 

 

動画を見ると分かるように、スタイラスがタッチしているかどうかとある程度の位置は分かるようになっています。。。。しかし、タッチ位置と電圧の相関がリニアではないこと、鍵盤の手前側(正しくはなんと言うのでしょうか?とにかく普通のドレミ音の所です)キーと、半音のキー、さらに奥の無段階の所、で電圧範囲が全然違うことがわかりました。

 

つまり値だけでは手前側、半音側、奥の無段階部分の判別ができません。ポケミク本来の制御はどうやっているのでしょうか?どうも今逃げている鍵盤パルスがキーのような気がしています。言葉だけだとわかりませんね。この次はオシロ波形も載せたいと思います。

 

まだまだソフトの直しが必要です。。。

それではまたです。

2014/04/15

大人の科学 ポケットミクを改造してみる。 その4

キー状態の読み取りとモード表示までできました。

見づらいので今回の動画はHDにしてみました。

バグも目立ちますね。。。。。

現状の回路図は以下の通りです。

Miku2

とにかく力技で空きIOポートをポケットミクのキーパッドに繋いでいますが、これは見た目ほど大変ではありませんでした。

 

苦労しているのはソフトウェアの方です。

キースキャンは2ms間隔で80usのパルスが出ているのはわかっているのですが、それに同期する方法がなくて、考えた末20us割込みをセットしてどれかのキーに2回パルスが出ていたらそこで全キー状態を取りこむようにしました。

 

オンだけ見れば良いモードキーはそれでよいのですが、2つのボリュームキーはクリック的な動きを見る必要が有り、なんとかしたつもりですが、どうもぎこちないです。

他にあからさまな表示バグもあるし画面も単調だし、表示も遅いし、と色々不満がありますので、改善してからソースを公開したいと思います。

 

あとは機能としては鍵盤の状態をADCで読み取って表示反映の予定です。

 

 

それではまたです。

2014/04/13

大人の科学 ポケットミクを改造してみる。 その3

とりあえず表示までできました。

回路図は以下の通りです。

Mikc

DSPラジオから使いまわしているので回路図は楽なものでした。

今回のLCDはレジスタ構成を全く見ていないのでソフトは難航すると思っていたのですが、とりあえずAITENDOのページにあったサンプルを移植してみたら案外簡単に動きました。

現在は最初の文字を表示するだけですが、参考にソースとプロジェクトをアップします。

「pokemiku_main.c」をダウンロード  メインです。

「graphics2_cl.c」をダウンロード カラーLCD用のグラフィックルーチンです。

「spilcd_cl.c」をダウンロード カラーLCD制御ルーチンです。

「font8x8.h」をダウンロード フォントデータです。

「pocketmiku.zip」をダウンロード 上のソースを含んだプロジェクト全体です。

 

しかしカラーでデータ量が多いところをシリアル転送なんで表示が遅いですね。

全画面書き換えが1秒くらいかかっています。SPIルーチンを高速化しないといけないかな、と思っています。

 

このあと、キーと鍵盤の状態をPICで観測して表示に反映させていくソフトを作る予定です。

次の週末になると思いますが。。。。

 

それではまたです。

 

大人の科学 ポケットミクを改造してみる。 その2

とりあえずPICマイコンとLCDの配線までできました。

Dscf3187 Dscf3190

右のLCD配線が結構苦労しました。Aitendoからキャリーボード付きのを買っていたのですが、構造上キャリーボードが使えず、生LCDに直付けのためです。

 

ところで、このキャリーボードを参考のために配線を見ていて気づきましたが、バックライトのLED-Kがつながっていません。LED-KをGNDにつながないとLEDが光りませんので、お使いになる方はお気を付けください。

 

Dscf3191 Dscf3192

Dscf3195 で、バックライトがオンしたところです。

回路図は動作ができてからアップします。

これからソフトの方を始めます。

 

それではまたです。

大人の科学 ポケットミクを改造してみる。

先日会社の帰りに立ち寄った本屋で「ポケットミク」を見かけまして、つい衝動買いしてしまいました。(なお、発電機の風力化はちょっとうまくいってなくてしばらくお休み中です。。。。)

Dscf3158

とりあえずスタンドアローンで動かしてみたところ。

では早速分解です。

Dscf3167 Dscf3170 Dscf3171

ネジ止めだけなので簡単に分解できます。

次に改造目的でスイッチ、鍵盤のインタフェースを確認してみました。

Dscf3174   Dscf3175

わかったこと。

●スイッチ

  電極の片方がグランド、もう片方には2ms周期で(たぶん)3.3Vのパルスが

  与えられており、キーを押すとそれがショートして、パルスが0V固定になる。

  つまり、パルス側を観測していればON/OFFが分かる。

●鍵盤

  鍵盤はただの抵抗板。

  0−3V程度の電圧に2ms周期でLOWパルスが加えられており、それを

  分圧している。0−3V程度の電圧、LOWパルスの振幅ともに鍵盤をタッチ

  する位置によって変わるが、オシロで見ていた限りではパルスは無視して

  通常の電圧レベルだけ見ていればタッチ状態と位置がわかりそう。

スイッチ、鍵盤ともに信号をつまめば簡単に状態が分かる、ということですので、PICを付けた改造を始めることにしました。

 

まずは表示ですね。これはPC操作用のインタフェースはありますが、ディスプレイはありません。スタンドアローンではスイッチ操作でモードが変わるのですが、今どのモードにあるかわかりません。そこでまずはモード表示できるようにしたいと思います。

Dscf3164 Dscf3166

で、持ってきたのがAITENDOの1.8インチカラーLCD

TFT液晶モジュール(1.8/128x160/SPI)[T18003T01]」です。

まずはモード表示をやりますが、その先は鍵盤に合わせたデモ表示や初音ミクも出したいので、ここはやっぱりカラーでしょう。

週末進行ですので、いつのなるかわかりませんがぼちぼち進めたいと思います。

それではまたです。

2014/04/05

100円ハンド発電ライトの改造 その2

字消しギヤが思ったよりうまくいきましたので、まず手回し発電機のようなハンドル操作にしてみました。

 

ハンドルは100円の鉛筆削りから取り外しました。前からこれは使えるなと思っていたものです。

 

結果は動画をご覧ください。

 

ハンドルの取り付けをどうしたものか少し悩んだ結果、発電ライト内部で追加ギヤの軸に使っていたスタッドをカットしてそれを使用することにしました。

 

カットしたスタッドは追加ギヤにホットボンドで取り付けました。この際にホットボンドを多めに付けてハンドル内径と軸の隙間を埋めるようにしています。

 

このスタッドは本来は発電ライト本体のネジ止めに使っている物なので、中空になっています。そこで、元々ハンドルを固定していた木ネジをダメ元でねじ込んでみたところ、うまいことしっかりと固定されました。 

ギヤサイズ、取り付け軸の位置といい、今回は奇跡的な偶然が重なっている感じです。

 

最初にザルで試した時に比べるとしっかりしていますし、軽く動かせる感じです。

 

ハンドルを風車に変えれば風力発電機もいけそうに思いますので、次はそちらにトライしてみようと思います。

 

それではまたです。

100円ハンド発電ライトの改造

前回風力発電機にしようとしてうまくいっていない100円ハンド発電ライトですが、やっとザルよりましなギヤが手に入りましたので再トライをはじめました。

Dscf3078 ギヤの元はこの100円字消しです。

この類の中にはギヤそのものが入っているのは分かっていたのですが、いままで近所の100円ショップで見かけたものはどうみてもギヤも歯も小さかったのであきらめていました。

しかし最近字消しも種類が増えてきて、中のギヤが大きい物が出ていましたので試したところ色々とぴったりと分かりました。

動画にあるようにこのギヤはちょっと削ると発電ライトのギヤにちょうど合います。

さらに驚いたことに、発電ライトのネジ止め用のスタッドの位置が、このギヤをはめると発電ライト内のギヤにぴったり噛みあうのです。偶然とはおそろしい物です。

 

まずは、ギヤを使って回転式にしてみたところ。

次はハンドルを付けて手まわしにしてみます。