2015年5月10日日曜日

15.05.10 リモコンで動かす三輪車


これまで三輪車にいくつか芸をやらせてきたが、PICの新しい基板を作ったので、これまでの芸をまとめて復活させてみることにした。3回に分けて書くことにして、今回はリモコンで操作するもの。


16bitのPIC24FJ64GA002を使って新しい基板を作成した。プログラム領域が64KBytes、データ領域が8KBytesあるので、あれこれ機能を盛り込んでも十分実装できる。16bitなので計算が早いしPWMの出力も5ヶ使える。モータードライバーはRohmのBD6211を2ヶ実装した。リモコン用に赤外線受信器を実装し、他にはボリュームとスイッチを1ヶずつとLEDが3ヶ。外部との入・出力用に6pin分を用意した。



リモコンは4種類用意した。最初はDVDレコーダー用のリモコン。ボタンがたくさんあるので便利に使える。上下左右の矢印キーなどを使い、前・右前・左前・後・右後・左後・右回転・左回転・停止、の動きができ、速度は8段階に設定できる。
このリモコンは三輪車を動かす他、動作モードの切り替えなどにも使っている。


次はボリュームで方向を決め、ボタンで前進・後退をさせるもの。ものづくり教室で作成したプリント基板で作ってある。この基板は、PIC、トランジスタ、ボリューム、スイッチなどを実装できるので、さまざまな用途で便利に使っている。


ボリューム2つで制御するもの。左手の親指で前進・後退と速度を制御し、右手で方向を決める。リモコン用のプリント基板に穴を開け、むりやりねじ止め型のボリュームを2つ取り付けた。


最後はレゴの歯車を回し、歯車の回転をロータリーエンコーダで検出して、左右の車輪の回転方向と速度を別々に制御するもの。歯車の回し方で動きが変化する。


リモコンで操作して楕円形のコースに沿って走らせてみたが、思ったよりも難しくなかなかきれいには動かせないことがわかった。

2015年2月21日土曜日

15.02.21 PICで作った楽器もどき


最近メロディーがらみのものが多いので、勢いでいつも使っている8pinのPICで楽器もどきを作ってみることにした。音色が選べ、和音も鳴らせるものを目指す。


使うPICは8bit,8pinのPIC12F1822。秋月で1ヶ100円で買えるもの。5bitのDACを内蔵しているので、これを使って音を出す。クロックは最高の32MHzで動かす。音源方式は一番単純なピッチ同期の波形メモリとする。再生できる最高音を16KHzとするとサンプリング周波数は32KHzになる。250Hzの音の場合32,000/250 = 128なので、波形の1周期のサンプル数は128とする。波形を読みだす間隔は約30μsになる。これより1オクターブ高い音は波形を1つおきに読むようにすれば、波形を読みだす間隔の最小値は15μsになる。1オクターブ低い音は2回ずつ同じところを読むようにする。
サイン波、三角波、鋸歯状波の波形メモリを用意して鳴らしてみたところ、5bitのDACでも一応それらしい音が出ることが確認できた。





音量や音色を変化させたいので、サンプル毎に波形の値にEGを掛け算するようにしてみたところ、計算が間に合わないことが判明した。それでも音色を変化させたいと思い、波形を順に切り替えていくようにしてみた。波形はPCのVisualStudioでFM音源のシミュレータを作り、変調の深さが徐々に浅くなる8種類の波形を用意した。これを音の出だしのところで一定間隔で切り替えていき、最後の波形までいったら、その波形を繰り返して読むようにした。波形の切り替えのところでノイズが聞こえるが我慢する。波形切り替えの間隔は音程が高くなると短くなる。



2声の和音を鳴らせるよう、PICを2ヶ使う。2つのPICのDACの出力を抵抗でミキシングして鳴らしてみたところ、ひどい歪でとても聞けない。しかたないので、テスト中はそれぞれのPICに圧電ブザーをつけて鳴らすようにした。きちんと聴く場合は、ステレオの右と左にそれぞれの出力を出し、スピーカで鳴らせるようにしてある。


和音を弾けるよう、鍵盤で演奏する。単音なら鍵盤にスイッチをつければよいが、和音を出したいので他の方法を考えることにした。以前、楽器の研究をしていた時の同僚が、手袋の指先にセンサーをつけて専用の鍵盤を弾くようにすれば音源が10ヶあれば両手で弾ける、という特許を出したのを思い出し、これを採用することにした。
鍵盤も自作することにし、ユニバーサル基板にメッキ線で2オクターブの鍵盤を作成した。音程を検出するため、電源とグランドの間に100Ωの抵抗を直列に25ヶつなぎ、それぞれの音程の鍵盤のメッキ線に特定の電圧が出てくるようにした。
両手の人差し指にメッキ線で作ったセンサーを巻きつけ、これで鍵盤を弾くと、それぞれのPICで鍵盤の電圧をAD変換して音程を決め、音を出す。


ついでにマスタークロックの周波数を調整する機能を使い、ビブラートがかかるようにした。ビブラートをオフにすることもできる。
音源ごとにオクターブと音色を選ぶことができる。オクターブはボリュームの位置を合わせてスイッチを押す。音色は鍵盤を弾いたときにボリュームの位置をみて使う波形を決めるようにした。

2015年2月17日火曜日

15.02.17 光テルミンの自動演奏


ものづくり仲間が教材用に光センサーで制御するテルミンを開発した。演奏は大変難しいので、上手に演奏する自動演奏装置を作ってみた。


光テルミンは、音量は反射型フォトインタラプタ、音程はCDSをセンサーとして使っている。このセンサーを外部からLEDで駆動して自動演奏させる。以前製作したメロディー貯金箱のシステムを基本に使うが、PWMの出力数や計算精度を上げたほうが良いので、最近開発した16bitのPIC24FJ64GA002のシステムを使うことにした。モータードライバーが2ヶ実装されているので、これでLEDを駆動する。



LEDの明るさの制御はPWMのデューティーの変化で行う。音量の制御はPWMの周波数が聞こえないよう、20KHzのPWMとする。フォトインタラプタは赤外線のLEDを使っているので、自動演奏側も赤外線のLEDを使う。連続点灯だと一定音量で鳴るが、音の切れ目がわからないし、聞いた感じもつまらないので、明るさが減衰していくようにした。減衰速度はテンポと音符の長さで変える。PWMのデューティーの設定値が9bitしかないので、変化時にノイズが聞こえるが、単純な音よりはよしとした。


音程のLEDも20KHzのPWMで駆動する。試しに半音ごとに2^(1/12)ずつPWMのデューティーが変化するようにしてみたが、周囲の明るさの影響で音程の間隔が小さい。いくつか試してみたところ、半音ごとの比が1.13程度でうまく音程が再現できることがわかった。ただし周りの明るさが変化すると音程ごとの周波数が変わってしまうので、再生開始時に基板のボリュームを読み、半音ごとの比を決めて、音程毎のデューティーのテーブルを作ることにした。これで明るさに従って音程を調整することができるようになった。それでも人が動いたりするだけで明るさが変化して音程が崩れてしまうので、再生中はじっとしている必要がある。演奏するメロディーは貯金箱のときに作成したものを使っている。


2015年2月4日水曜日

15.02.03 格子状の道をせかせか歩く2輪車


前回はレゴのモーターで動く2輪車だったが、動きが遅いのが気に入らず、タミヤのミニモーターで動く2輪車を復活させてみた。PICの基板は20pinのPIC18F14K22で新しい基板を作成した。同じ格子状の道を歩かせるが、今回は壁は使わず勝手に歩き回るようにした。おまけで貯金箱用に作ったメロディーを鳴らす。


モーターはタミヤのミニモーターを使う。雑音を減らすためギヤボックスは使わず、レゴのプーリーにゴムのタイヤをつけた車輪の外周をモーターの軸で直接駆動する。モーターの取り付け方法、車輪に押し付ける力加減など、あれこれ試して今の方法に落ち着いたが、やはり安定度が低く空回りすることがある。
車体の前後にボールキャスターをつけて倒れないようにしてある。



3Vで動作するモータードライバー(ロームBD6211)を秋月から調達し、新しい基板を作成した。マイコンは20pinのPIC18F14K22を使う。ボリュームとスイッチ、LED3ヶを基板上に実装し、モーター駆動用の出力に4pinを使い、余った入出力は外部入出力用のピンに接続してある。BD6211は駆動するPWMは20KHz以上となっているが、18F14K22はハードウエアのPWMは1チャンネルしかないので、ソフトでPWMを作成するしかなく、周波数は500Hzとした。駆動波形が乱れているが、強弱のコントロールはできるので、これで良しとしてある。


センサーはライントレース用の反射型フォトインタラプタが2ヶ。左右に回転する時のラインの検出が安定するよう、車輪よりもやや前方に取り付けた。


自分がいる位置を管理しながら、はみ出さないように格子状の道を歩き回る。スタートは右下から上向きと決めておく。交差点に来るたびに、ランダムに進行方向を決める。進む方向は前・右・左の3方向で、選ぶ確率は前が2/4、右・左がそれぞれ1/4としてある。現在の座標を見て、道からはみ出す方向が選ばれた場合は、再度方向選びを行う。方向が決まったら、次の位置の座標を書き換えておく。


ものづくり教室で作ったメロディー貯金箱のメロディーを鳴らしながら歩き回るようにした。今回はPICのクロックを2倍の16MHzにしたため、メロディーの音程が1オクターブ高くなってしまった。貯金箱で使ったPIC12F1822よりもプログラム領域が大きいので、メロディーは16曲入れてある。

2015年1月8日木曜日

15.01.08 格子状の道をうろうろ歩く2輪車


去年作った迷路探索する2輪車で別の動きをさせてみた。
走る道は前回と同じ格子状の道で、壁を自由に置くことができる。
車は交差点で壁の状態を確認して壁にぶつからないように方向転換しながら歩く。


レゴのモーター2つで車輪を駆動する。CPUは18pinのPIC18F1320を使い、モータードライバーはLB1639を2ヶ使っている。


センサーは道路を検出するもの2ヶと壁を検出するもの3ヶで、どちらも反射型のフォトインタラプタを使う。
センサーを低い位置に取り付けたので、壁は低くてすみ、10*15mmの角棒を切るだけで作成できる。


道路は直線なので、ライントレースは複雑な制御はしていない。交差点で右・前・左の壁の有無を測定し、壁のない方向に進む。壁のない方向が2つ以上ある場合は乱数で方向を選び、すべて壁でふさがれている場合は反転して後ろに進む。


2014年11月21日金曜日

14.11.21 展示用振子時計


静大のテクノフェスタ展示用に振子時計を改造した。
ほっておいても動き続けるようコイルと磁石で振子を駆動し、将来教材にしやすいように制御はリモコン基板を使う。


リモコン基板で操作・コイル駆動・振子基板への信号送信を行う。コイル駆動用にリードスイッチとコイル駆動信号の2本、制御基板に送るシリアル信号で1本の信号ラインを使うので、操作用には3本しか残らない。ボリュームの駆動と信号で2本使うので、スイッチは1つしか使えないことになり、操作方法を変更した。
操作するパラメータが8つあるので、動作モードを8つにし、モード毎のパラメータの値を変更する。
パラメータの変更はボリュームで値をセットしてスイッチを1回押す。モード切替はボリュームを左端・左側・右側・右端の4つの位置にセットしてスイッチを2回連続押しするとモード0-3、3回連続押しすると4-7となる。モード設定を行うと"M0000"とモードが数字で残像表示されるようにした。


振子の駆動パラメータ設定中は、振子の一番下のLEDでコイル駆動信号、下から2番目のLEDでリードスイッチの状態を表示する。



振子基板は、20ピンのPIC18F14K22を使い、ユニバーサル基板で作成した。赤外線リモコンは使わないので、PICの他にはLEDと抵抗が8ヶずつ、それに温度センサーというシンプルな構成となっている。制御基板から電源とシリアル信号のケーブル3本がつながる。


展示用なので、電池で動かすこととし、PICは完全にスリープさせることにした。制御側は操作スイッチとリードスイッチの割り込みでPICが動作開始し、動作が完了するとスリープする。振子側は2秒以上制御側からのシリアル信号がこないとスリープし、制御信号が来ると動作再開する。動作中で割り込み待ちの間はアイドル状態になる。
表示するメッセージは、時刻+温度・温度・メッセージ1・メッセージ2の4種類。



2014年10月5日日曜日

14.10.05 教材版メロディー貯金箱


貯金箱をものづくり教室の教材用に仕上げた。ポイントは大型の圧電ブザーに変更して音量を大きくしたことと、生徒毎に好みのメロディーをPCから書き込むことができる仕組みを追加したこと。


ケースは上部と前面の板を一体にし、ここに基板やスイッチ・ブザー・LEDなどの部品を取り付ける。前面の板は生徒が好みの形にして絵をかいたりできる構造にしてある。サンプルは簡単にできる家の形にした。
圧電ブザーは秋月から直径35mmのものを調達した。音量が大きいし、低い音も500Hzくらいまで出るので非常に具合が良い。


基板は以前開発したリモコン用基板を改良した新型基板を初めて使う。今回は基板に付けるのはマイコン・抵抗・コンデンサが1つずつ、それに電池という非常にシンプルなもの。
PCからメロデイーのデータを書き込むためのシリアル信号用のピンをつけてある。


メロディーは標準で童謡が8曲入っている。生徒毎に書き込むメロディーはPICのEEPROMに書き込むので、音符数が100くらいまでとなる。
メロディーはPCのMIDIシーケンサで単音のメロディーを作り、SMF (Standard MIDI File)で保存し、それを自作のアプリで貯金箱用のフォーマットに変換する。変換したテキストファイルをTeraTerm経由で貯金箱のPICに送信し、EEPROMに書き込む。