FC2ブログ

名張市つつじが丘おもちゃ病院

三重県名張市つつじが丘でおもちゃの病院を開院しています。年中無休で修理は無料、部品代のみ実費です。おもちゃの修理依頼は tutuji@cb4.so-net.ne.jp へメールにてご連絡下さい。なお、宅配便での受け付けは行っておりません。このブログにはおもちゃ等の修理事例やツール製作などを載せていきます。故障診断や修理方法の改善等、ご意見をお寄せ下さい。

PICで電子オルゴール

PICで電子オルゴールを作ったので紹介する。おもちゃに実装されている電子オルゴールICが故障した場合に、それを換装する目的で開発した。

【テストベンチ】
作った曲データを演奏させて出来具合を確認するために、テストベンチを作っておくとよい。PIC12F1822とスピーカだけで構成している。
電子オルゴールテストベンチ外観

電子オルゴールテストベンチ(回路図)

【サンプル音】
サンプル曲の演奏

救急車のサイレン

車のクラクション

【セールスポイント】
この電子オルゴールはいろんなおもちゃの修理に使えるように工夫されている。
①マイコンに書き込まれた楽譜のとおり忠実に演奏するので、楽譜付きのカラオケ絵本の修理には好適である。
②音符で表現できるものは何でも演奏できる。救急車サイレンや車のクラクション音なども発声できる。
③演奏の進行に沿って、LEDやモーターなど周辺の制御ができる。
④演奏開始や停止、曲選択などの操作の仕様を、修理しているおもちゃに合わせられる。
⑤最低80円(12F1822-I/Pの2014年秋月価格)のPICで作れる。
⑥演奏出力信号はPWMになっているので、後続のアンプ回路の電力効率がよい。

【演奏機能】
①8パート(8和音)演奏が可能
 PICの処理能力から4パートまでが実用範囲で、通常の曲では2パートで十分
②発声波形はデューティ50%の矩形波
③音高は125Hz~2KHz(4オクターブ)で、1パートに付き15種類
 15種類を超える曲の場合は周波数を直接指定して発声させることも可能
④音価は1パートに付き15種類、3連符も可能
⑤テンポは音符単位に設定可能
⑥ベロシティは音符単位に設定可能
⑦エンベロープの表現はディケイタイムの指定が可能で、音符単位に設定可能
 ディケイタイムを0にすると減衰せず、タイ・スラー演奏
 ディケイタイムを短くするとスタッカート演奏
⑧リピートは2系統持つことができ、回数設定が可能

【演奏出力】
演奏出力信号は周期20usのPWMである。
演奏出力信号のサンプルを以下に示す。
電子オルゴール信号波形1

時間軸を拡大すると
電子オルゴール信号波形2

PWM出力なので、スピーカーの駆動はデジタルアンプを推奨する。アナログアンプを繋ぐ場合はローパスフィルターを設置すること。

【ソングデータ】
ソングデータは ①音高テーブル ②音価テーブル ③音符データ から成る。
①音高テーブルは、音高コードに周波数を対応付ける。
②音価テーブルは、音価コードに音価を対応付ける。
③音符データは、楽譜上の音符や演奏制御をコード化して演奏順に並べたもの。
1個の音符は1バイトのデータにコード化して記録しておく。コードの規約は以下の通り。
 0x00:音符データの終了
 0x01:無条件分岐(次のバイトで分岐先を指定)
 0x02:リピート1の回数設定(次のバイトで回数を指定)
 0x03:リピート1の分岐(次のバイトで分岐先を指定)
 0x04:ピート2の回数設定(次のバイトで回数を指定)
 0x05::リピート2の分岐(次のバイトで分岐先を指定)
 0x06:ベロシティ設定(次のバイトでベロシティを指定)
    ベロシティは0~255
    但し、全パートの合計が800を超えた場合はディストーションとなる
 0x07:ディケイタイム設定(次のバイトでディケイタイムを指定)
    ディケイタイムは1~255[10ms]
    0のときはタイ・スラー演奏
 0x08:直指定音符データ(次の3バイトで音価と音高を直接指定)
    音価をマクロ命令(cho_mac、ch5_mac、或いはch3_macvで指定)
    音高をマクロ命令(on_mac)で指定
 0xX0:音価コードXで休符
 0xXY:音価コードXで音高コードYの発音
音符データは1曲1パート当たり255バイトまでである。

【ソングデータ作成例】
「かえるの合唱」の先頭部分で例示する。

楽譜
PICで電子オルゴールかえるの合唱楽譜

ソングイデータ
PICで電子オルゴールかえるの合唱音符データ

【サンプル曲】
現在保有している曲目の一覧は以下のとおり。注記のないものは2パート演奏。
あめふりくまのこ
アンニローリ
アンパンマンマーチ
あわてんぼうのサンタクロース
飼い葉の桶で
ブンブンブン
蝶々
チューリップ
ひいらぎ飾ろう
どんぐりころころ
冬のうた
げんこつ山のたぬきさん
星に願いを
星の世界
犬のおまわりさん
いとまきのうた
ジングルベル
かえるの合唱
きらきら星
こどもとこどもがけんかして
メリーさんの羊
ミッキーマウスマーチ
もみじ
森の熊さん
むすんでひらいて
猫ふんじゃった
おべんとうばこのうた
ダビデの村の
大きな古時計
大きな栗の木の下で
オープニング0(ドレミファソファミレド)
オープニング1(ドレミファソラシド)
おつかいありさん
救急車サイレン音
幸せなら手をたたこう
清しこの夜(3和音版)
清しこの夜(2和音版)
小さな世界
トントンひげじいさん

おめでとうクリスマス
ウィンターワンダーランド
山の音楽家

勇気リンリン
ぞうさん
車のクラクション
キーボード(オルガン音、ピアノ音)

【カスタマイズ】
オルゴールのプログラムは次の3つの部分で構成されている。
①オルゴールエンジン(オルゴールを演奏する中核のプログラム)
②個別機能部分(環境の宣言、デバイス固有の初期設定、コールバック関数の集合)
③演奏データ(曲のインデックスと音符データ)
このうち、①はファーム開発プロジェクトの中の orgel.asm で、これはおもちゃや曲に関わらず共通に使う。これを利用するおもちゃドクターはこの内容を変更する必要はない。②と③はおもちゃの要件に合わせておもちゃドクターがプログラムを記述する。②のサンプルは demo_1822.asm 、③のサンプルは smallworld.asm などである。②と③は構造が簡単なので、サンプルを見て貰えば作り方はすぐに解ると思う。

【コールバック関数】
コールバック関数は6種類があり、エントリ名と処理すべき内容を以下に示す。なお、呼び出されるタイミングは決まっているが、処理内容は必ずしも以下のとおりである必要は無い。

(1)CPU依存の初期化処理を行う
init_own()
POR、およびリセット後に最初に呼び出される
①周辺機能を構成する
②演奏出力ポートを初期化する
③固有の初期化を行う
④戻り値無し

(2)演奏する曲の選択処理を行う
song_sel()
演奏する曲の選択処理を行う
演奏開始前に呼び出される
①演奏する曲番号(0起算)を決定し、Wレジスタに設定して返す
 未選択のときは実装曲数を越える値(ex255)を返す

(3)演奏開始時処理
befor_play()
曲の演奏開始時に呼び出される
①固有の処理を行う
②戻り値無し

(4)演奏中固有処理
play_own()
演奏中に定期的(約10ms間隔)に呼び出される
①固有の処理を行う
②演奏の継続、中断を決定し、次の値をWレジスタに設定して返す
 中断した場合は曲選択処理から再実行される
 0:演奏継続
 0以外:演奏中断

(5)演奏終了時処理
after_play()
曲の演奏終了時に呼び出される
①固有の処理を行う
②戻り値無し

(6)sleep処理
cpu_sleep()
曲選択処理で曲が無選択のときに呼び出される
①固有処理を行う
②省電力設定(ポート出力値の固定、周辺機能の停止など)を行う
③スリープする
④戻り値無し

コールバック関数での処理が必要ない場合でも、それぞれのエントリの定義は必要であり、何もしないでリターンさせること。また、戻り値が必要なものは確たる値を返さなければならない。

【デバイスの選定】
オルゴールエンジンが想定しているデバイスは12/16F18xx/19xxである。その理由は次のとおり。
①強化命令使用
②Foscは32MHz以上
③PWM機能有り
④データメモリは96バイト以上
⑤プログラムメモリは2Kワード以上
古いデバイスは機能や性能が劣る上にコスト高なので、採用しない。
12F/16F15xxシリーズでもオルゴールエンジンの動作は可能だが、Foscが20MHzに下がることによる影響については未評価である。

【ダウンロード】
付属資料とファームの開発プロジェクトは ここから ダウンロードできる。これには②個別機能部分(コールバック関数)と③演奏データ(曲のインデックスと音符データ)のサンプルも含まれている。フォルダ名「orgel2」がMPLABプロジェクトディレクトリになっている。これを開発環境にコピーしてご使用下さい。
スポンサーサイト



  1. 2013/01/25(金) 17:04:39|
  2. 電子オルゴール+音声再生
  3. | コメント:9

犬のぬいぐるみ首の修理(針金細工)

1.患者
犬のぬいぐるみ
ぬいぐるみの首修理(針金細工)外観

2.症状
胴体から首が取れた。

3.診察
首の根元が破損していた。
ぬいぐるみの首修理(針金細工)分解

4.治療
首が回転できるように、破損部分は穴の内側で固定する必要がある。
針金(1.6mmφ)を曲げて固定金具を作り、穴の切りかぎ部分に差し込み固定した。

ぬいぐるみの首修理(針金細工)修理1

ぬいぐるみの首修理(針金細工)修理2



  1. 2013/01/19(土) 11:16:32|
  2. メカ修理
  3. | コメント:0

プロフィール

大泉茂幸

Author:大泉茂幸
名張市つつじが丘おもちゃ病院
名張市つつじが丘南3番町129
tutuji@cb4.so-net.ne.jp
090-5534-6494
連絡は上記のメール、またはSMSでお願いします。

子どもの頃から趣味は電子工作一筋でやってきました。理科離れが進む中で科学技術に興味を持つ子どもが少しでも増えて行くことを願って、子ども達に電子工作の活動の場を提供しています。

1981年からおもちゃ病院の活動を始め、2014年に三重県名張市への移住を機に「つつじが丘おもちゃ病院」を開院しました。自分でおもちゃを設計し製作する【おもちゃ工房】と、マイコンを応用した電子工作を楽しむ【マイコンクラブ】も併設しています。新規参加メンバーを募集しています。

当ブログで公開している技術情報や成果物の複製、改変および再配布はフリーです。読者様のおもちゃ病院活動のお役に立てば幸いです。ご利用いただいた結果や感想等を記事へのコメントやメールでフィードバックしていただけると有難いです。なお、公開ファイルは最新版を載せているので、古い記事の内容から変わっている場合があります。

カテゴリ

おもちゃ修理技術 (131)
¦ ・電子オルゴール+音声再生 (53)
¦ ・音声再生・録音再生 (14)
¦ ・2.4GHzラジコン (40)
¦ ・レガシーラジコン (13)
¦ ・赤外線リモコン (4)
¦ ・RFID (3)
¦ ・タッチセンス (4)
ツール製作 (35)
¦ ・プログラマー (27)
¦ ・USB-シリアル変換 (3)
¦ ・その他のツール (5)
修理事例 (157)
¦ ・マイコン換装 (75)
¦ ・電子・電気修理 (59)
¦ ・メカ修理 (23)
製作記事 (5)
PIC開発 (4)
おもちゃ病院 (9)
ドクター研修会 (2)
未分類 (1)

最新記事

最新コメント

月別アーカイブ

訪問者数

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

QRコード

QR