FC2ブログ

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

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

アンパンマン電動レールでGO!GO!DX(マイコン換装)事例3

1.患者
アンパンマン電動レールでGO!GO!DX(アガツマ)
アンパンマン電動レールでGO!GO!DX(マイコン換装)事例3外観
幼児向けの乗用おもちゃだ。

【メーカーサイトの説明書き】
●レールを敷いても、レールなしでも遊べます。
●レバーの切り替えで電動走行、フリー走行が選べます。
●コントローラーには前進・後進・ストップの走行操作機能の他に「アンパンマンのおしゃべりボタン」と「アンパンマンのマーチが流れるメロディボタン」が付いています。
●セット内容:本体一式、レール12本

ハンドルのところに赤外線リモコンが付いていて、幼児が操作することもできる。また、取り外して親御さんが操作することもできる。

2.症状
①リモコンが無いので、別の赤外線リモコンで動くようにしたい。

②本体側の基板は新規に製作するので、プロトコルを合わせ込んだファームウェアを開発して欲しい、とのこと。

3.診察
①お客様から支給された赤外線リモコンは下記の物。ネット通販で100円台で売られているそうだ。
アンパンマン電動レールでGO!GO!DX(マイコン換装)事例3リモコン

②支給された赤外線リモコンの赤外線信号波形の一部を以下に掲げておく。すべての信号波形はダウンロードファイルの「アンパンマン電動レールでGO!GO!DX(マイコン換装)事例3代替リモコン波形.xls」を参照。

③フレームの繰り返し
「電源」ボタンを押しっ放しのとき
アンパンマン電動レールでGO!GO!DX(マイコン換装)事例3リモコン波形1
フレーム周期は108ms。

「電源」を1回目に押したとき
アンパンマン電動レールでGO!GO!DX(マイコン換装)事例3リモコン波形2

「電源」を2回目に押したとき
アンパンマン電動レールでGO!GO!DX(マイコン換装)事例3リモコン波形3

・3回目に押したときは1回目に押したのと同じ波形であった。
・1回目と2回目で波形の前の部分(MSB寄り)が異なるが、後ろ部分(LSB寄り)は同じであるため、後ろ部分をデコードすればよい。
・上記の2点は全てのボタンでも同じ状況になっていた。
・長時間のオフ後のオンでビットの開始と判断する。
・オフ時間とオンの時間の両方が変化するが、オフ時間でビット値を判定する。
 ビット値0はオフ0.9ms
 ビット値1はオフ1.7ms
・11ビット分の受信でフレーム終了と判断し、下位8ビットをデコード値とする
・上記のルールで全ボタンのデコードを行った結果は以下のとおり。

「電源」:00000000100
「↑」:00000010000
「↓」:00000010001
「ミュート」:00000000101
「←」:00000001001
「→」:00000001000
「AV/TV」:00000000110

4.治療
前回の事例 のアームウェアをベースに、プロトコルを変更する。

②音声再生機能の場合は実装メモリ量がデバイス選定のキーポイントになる。今回は、今春から秋月で取り扱いが始まった16F18326(2017年秋月@130円)を採用する。メモリは16kワードあり、アンパンマンのおしゃべりが入れられる。

③機能設計
;ポートの割当て
;RA0:PWM(CWGB)出力(負極性)、ICSPDAT
;RA1:空き、ICSPCLK
;RA2:PWM(CCP1)出力(正極性)
;RA3:MCLR、Vpp
;RA4:赤外線信号入力(負論理)
;RA5:空き
;RC0:バッテリー電圧ADC入力
;RC1:モーター正転出力
;RC2:モーター逆転出力
;RC3:TX
;RC4:空き
;RC5:空き


;赤外線信号受信
;フレーム構成:11
;リーダーやトレーラは無く、長時間のオフ後のオンでビットの開始と見る
;赤外線オフの時間とオンの時間の両方が変化するが、オフの時間でデコードする
;ビット値0:オフ0.9ms
;ビット値1:オフ1.7ms
;11ビット分の受信でフレーム終了と見て、後部の8ビット分をデコード値とする


;エンコード値
;電源 :00000000100
;↑  :00000010000
;↓  :00000010001
;消音 :00000000101
;←  :00000001001
;→  :00000001000
;AV/TV:00000000110


;曲と音声の対応
;曲1:アンパンマンのマーチ
;曲2:アンパンマンたいそう
;曲3:ミッキーマウスマーチ
;曲4:小さな世界
;音声1:効果音STOP
;音声2:効果音GO
;音声3:効果音BACK
;音声4:ぼくアンパンマン
;音声5:いっしょにいこう
;音声6:ガタンゴトン
;音声7:カンカンカン
;音声8:しゅっぱつします


;赤外線機能コードと動作
;STOP(電源):b'00000100'
;STOP(消音):b'00000101'
;STOP(AV/TV):b'00000110'
;上記の機能コードは全て同じ動作をする。
; 停止動作中、完全停止中は無視する。
; 停止する。
; VOICE0で音声1を3回繰返し再生する。
;
;GO(↑):b'00010000'
; 完全停止していなかったら無視する。
; VOICE0で音声2を3回繰返し再生後、前進する。
;
;BACK(↓):b'00010001'
; 完全停止していなかったら無視する。
; VOICE0で音声3を3回繰返し再生後、後進する。
;
;アンパンマン(←):b'00001001'
; VOICE1が再生中のときは無視する。
; VOICE1で音声4~7をラウンドロビンに再生する。
; 音声4と音声5は1回のみ再生する。
; 音声6は4回繰返す。
; 音声7は8回繰返す。
; 音声8は1回のみ再生する。
;
;メロディ(→):b'00001000'
; 演奏中のときは無視する。
; 曲目1~4をラウンドロビンに演奏する。


;バッテリー電圧の監視
;HブリッジのFETを完全にオン/オフさせるため、電源電圧が4.7V以下のときはFETをドライブしない。
;バッテリ電圧の低下を4.7Vまで許容するため、制御マイコンは Vdd=3.3V で稼働させる。
;バッテリーの過放電を防止するため、電源電圧が5.1V以下のときはバッテリーLOWと判定する。
;この5.1Vは鉛蓄電池の放電終止電圧(1.7V×3セル=5.1V)である。
;一定時間バッテリーLOWが継続したらFETドライブ出力をLとし、「バッテリーLOW」を警告する曲を演奏する。


④回路図(当方での製作例を参考に掲げる)
アンパンマン電動レールでGO!GO!DX(マイコン換装)事例3回路図

⑤基板製作(当方での製作例を参考に掲げる)
基本部分
アンパンマン電動レールでGO!GO!DX(マイコン換装)事例3治療1
アンパンマン電動レールでGO!GO!DX(マイコン換装)事例3治療2

実機走行確認しながら調整した結果
アンパンマン電動レールでGO!GO!DX(マイコン換装)事例3治療3
アンパンマン電動レールでGO!GO!DX(マイコン換装)事例3治療4

部品代は290円
アンパンマン電動レールでGO!GO!DX(マイコン換装)事例3診察1部品代

⑥ファームウェア
・PWM周期の32us毎に赤外線受信モジュールの出力をポーリングする。エンコード信号の最小パルス巾は600usなので、それで十分だ。TMR2割り込みサービスの中でデコードを実行する。

・バッテリー電圧のチェックもTMR2割り込みサービスの中で実行する。

・バッテリー電圧が低下した場合はHブリッジのFETをオフして、FETを保護する。

・バッテリー電圧の低下が継続した場合は車体駆動を停止し、「バッテリー電圧低下の警告曲」を演奏する。

・メモリを節約するため、おしゃべりの音声データは4ksps、効果音は3~4kspsとサンプリングレートをかなり落としたがおもちゃとしては実用レベルと思う。

・開発したファームウェアのプロジェクト一式と開発資材は ここから ダウンロードできる。

⑦発音のサンプル
発音のサンプルはこれ

再生できない場合はダウンロードファイルの中のmp3ファイルを試聴して下さい。

・車体の電源SWをオンすると「しゅっぱつしま~す」のオープニングメッセージが流れる。

・ピューン↑ が「GO」、ブッブッブ が「STOP」、ピューン↓ が「BACK」の効果音。

・半音ずつ下がってくるのが「バッテリー電圧低下の警告曲」。
スポンサーサイト
  1. 2017/12/30(土) 15:03:14|
  2. マイコン換装
  3. | コメント:0

BRUIN(Licht und Sound Lok)(マイコン換装)事例2

本件は、 (東京都)あきしまおもちゃ病院様 の修理事例であり、つつじが丘おもちゃ病院(当院)はファームウェアの開発を請け負った。
当記事には依頼元の あきしまおもちゃ病院様 から提供していただいた情報や資料が含まれている。

このおもちゃのCOB換装については 過去に修理事例 があるが、今回は依頼元でオリジナルの動作仕様を調べていただき、よりオリジナルに近い機能を実現することができた。

1.患者
赤外線リモコンで操作する汽車のおもちゃ(トイザらス)

メーカーの商品ページ
http://www.toysrus.de/product/index.jsp?productId=58895431&prodFindSrc=search&fv=TRUDE%2F3935011&f=Taxonomy&fd=&fg=&keywords=Licht+und+sound+lok&foreSeeEnabled=false
BRUIN(Licht und Sound Lok)(マイコン換装)事例2外観

2.症状
①全く動作しない。

3.診察(依頼元で実施)
①リモコンからは赤外線信号が出ている。

②本体の赤外線受信モジュールからは送信側と同じ信号が出ている。

③赤外線信号のデコード、音楽演奏、モーターとLEDの制御は1チップのCOBで実装されていて、これが働いていない。

④COBへの電源供給と赤外線信号の入力を確認して、COBの不良と判断した。

4.治療
【方策】
①不良となったCOBをPICで換装する。

【要件】
依頼元から提示された要件は以下のとおり。

①電源は単三乾電池3本(標準4.5V)

②モコンの操作ボタンと本体の動作の定義

・前進ボタン押下で前進し、離すと停止する。
・後進ボタン押下で後進し、離すと停止する。
・前進、後進の動作中はLEDを点滅し、停止中は点灯する。
・ホーンボタン押下で汽笛音(ポッポー)を鳴らす。

③煙突の操作と動作の定義

・本体の煙突を押すとその先のSWがオンし、電子オルゴールの1曲を演奏する。
・演奏中に煙突を押すと、演奏を中止する。
・電子オルゴールは10曲程度を収容し、ラウンドロビンに演奏する。
・曲目は1~2歳向けの童謡を希望。

④本体の電源制御

・電源SWの操作で本体の電源を入り切りする。
・10分間操作が無かったらオートパワーオフする。
・赤外線受信モジュールの電源制御を行う。
・電源SWをオフ/オンすることで再起動する。
・煙突を押すことでも再起動する。

⑤信号の定義

・赤外線エンコード信号は負論理で入力する。
・前進駆動信号と後進駆動信号はそれぞれのポートから正論理で出力する。
・LED信号は1ポートに負論理で出力する。
・LEDの初期状態は点灯。オートパワーオフ時は消灯する。
・音声信号(PWM)は正極性で出力する。
・赤外線受信モジュールの電源制御信号は負論理で出力する

⑥赤外線信号のプロトコル

・フレームと機能コードは 前回の事例 と同じ。

⑦換装に伴う回路の変更

・依頼元から提示された回路図
BRUIN(Licht und Sound Lok)(マイコン換装)事例2回路図

【設計】
ファームウェアの開発は つつじが丘おもちゃ病院(当院) で実施した。

①電子オルゴールVer5_6をベースに、固有の処理を作り込む。

②ターゲットデバイスの選定

・必要ポート数は7本で少ないが、汽笛音がメモリを喰う。
・コストパフォーマンスの良い16F1705(@100円、2017年秋月)を前提とすると、オルゴールエンジン部で1kワード、10曲分の曲データで2.6kワード、初期化や固有処理等で0.5kワードを見込むと合計4.1kワード程度が必要であり、残り3.9kワードが汽笛音に充てられる。
・8kspsで記録すれば0.9秒になる。これで納められるか開発しながら検証することにして、16F1705に仮決めして進める。

③ポートの割り当て

;RA0:ICSPDAT(入力モード、内部プルアップ)
;RA1:ICSPCLK(入力モード、内部プルアップ)
;RA2:PWM3出力(正極性)
;RA3:ICSPVpp(入力モード、内部プルアップ)
;RA4:煙突SW入力(負論理)(内部プルアップ)
;RA5:デバグ用TX出力(非デバグ時は入力モード、内部プルアップ)
;RC0:IR信号入力(負論理)
;RC1:前進出力(正論理)
;RC2:後進出力(正論理)
;RC3:LED出力(負論理)
;RC4:IR受信モジュール電源制御出力(負論理)
;RC5:未使用(入力モード、内部プルアップ)

④赤外線信号のデコード

・PWM周期(TMR2)の割込みで赤外線信号をポーリングする。PWM周期は32usとし、赤外線信号のパルス巾に対して十分な分解能を持つことができる。
・赤外線信号のオン、オフ共に128us以上の信号レベル継続で有効とする。
・赤外線のオフのパルス巾を評価してデコードを行う。
 5ms以上でフレームの開始とする。
 3~5msでビット値を1とする。
 3ms以下でビット値を0とする。
・8ビットを受信した時点で機能コードと照合し、該当の機能を実行する。

⑤モーターの制御

・前進/後進の機能コードは、リモコンの前進/後進ボタンを押下している間はフレーム周期90msで連続して送信される。
・前進/後進の機能コードを受信すると前進/後進のモーター制御信号をオン出力し、100ms後にオフする。フレームの繰り返し周期が約90msであるので、前進/後進ボタンを押し続けると、モーター制御信号は途切れることなくオン出力される。
・前進と後進が切り替わるときは最低10msの停止時間を設けて、Hブリッジの貫通電流の発生を防止する。

⑥LEDの制御

・前進/後進のモーター制御信号をオン出力している間は、周期1.2s、デューティ50%でLEDを点滅する。

⑦汽笛音の音声再生

・ホーンの機能コードは、リモコンのホーンボタンを押下する毎に1フレームのみが送信される。
・ホーンの機能コードを受信すると汽笛音を3回繰り返し再生する。
・汽笛音を再生中にホーンの機能コードを受信すると、再生済み回数をリセットして、その後に3回再生を繰返す。
・汽笛音は依頼元からmp3で支給され、当方にてPCMデータを作成した。
・汽笛音は1.1秒あり、サンプリングレートを6.3kspsに落として、16F1705のメモリに収容できた。6.3kspsでも良い音で再生できている。

⑧電子オルゴール演奏の制御

・煙突のSWがオンすると、非演奏中の場合は曲番号を進めて演奏を開始し、演奏中の場合は演奏を中止する。
・最初の演奏曲は曲番号1番とする。
・煙突のSWのチャタリング対策として、SWの読み込みは固有処理のコールバック周期の10ms毎に行い、オフ状態が70ms以上続いた後にオンとなった場合に、操作を有効とする。

⑨汽笛音と電子オルゴールの同時発声

・つつじが丘の電子オルゴールエンジンは音声再生とオルゴール演奏を同時に鳴らすことができるようになっている。
・D/A変換での音質を担保するためには、それぞれの出力レベルを最大限大きくしておくことが重要だが、そうすると両者の音が重なると出力レベルが飽和してしまう。
・それを避けるために、汽笛音を鳴らすときには電子オルゴール音のレベルを1/2にして出力レベルが飽和しないようにする。
・この処理は、電子オルゴールエンジンのAPI「MUTE_SET」を利用する。

【発声音】
100円のマイコンでここまでできるということを認識していただき、故障したCOBのマイコン換装でおもちゃ修理の範囲を広げて行って欲しい。
発声音はこれ

再生できない場合は、ダウンロードファイル中のmp3ファイルをお聴き下さい。

【ダウンロード】
開発したファームウェアと設計資料は ここから ダウンロードできる。

プロジェクトは BRUIN_Lok_PIC1705.X
ソースコードは BRUIN_Lok_PIC1705.asm
TX はテスト用のリモコン側のファームウェアである。

【ファームウェアの解説】
オルゴールエンジンを使えば、アプリケーションの固有の処理のみをコールバック関数として記述するだけで、簡単にファームウェアを開発することができる。

このおもちゃの機能要件では電子オルゴールの演奏、効果音の音声再生、赤外線信号のデコード、機能コード対応の制御、モーターとLEDのタイマー処理、およびそれらのコンカレント実行を実現する必要がある。

これらをゼロから作り始めると相当な開発期間が掛かってしまうが、今回の開発規模はたったの300ステップで、数日で完成させることができた。その内容を以下に解説する。

①赤外線信号のデコード

・エンジン部のPWM周期(TMR2)の割り込み処理から固有の割り込み処理をコールバックすることを宣言する。

BRUIN(Licht und Sound Lok)(マイコン換装)事例2解説1

・固有の割り込み処理(コールバック関数)で赤外線信号をデコードする。

BRUIN(Licht und Sound Lok)(マイコン換装)事例2解説2

BRUIN(Licht und Sound Lok)(マイコン換装)事例2解説3

②オートパワーオフの制御

・固有の処理(コールバック関数)で、無操作の時間を計測し規定の期間に達すると動作を停止させ、Sleepする。
・Sleep前に、赤外線受信モジュールからの入力ポートを出力モード設定にしてLを出力しておく。入力モードのままにしておくとポートの電位が定まらないため、Sleep時の消費電流が増大する。
・また、煙突SWの立下りでWakeUpするように、IOC割込みを許可しておく。
・WakeUpしたら、reset命令で再起動する。

BRUIN(Licht und Sound Lok)(マイコン換装)事例2解説4

③電子オルゴールの演奏制御

・固有の処理(コールバック関数)で、煙突SWがオンしたら電子オルゴールの演奏を制御する。

BRUIN(Licht und Sound Lok)(マイコン換装)事例2解説5

④機能コード対応のおもちゃの制御

・固有の処理(コールバック関数)で受信した機能コードに対応する処理を行う。

BRUIN(Licht und Sound Lok)(マイコン換装)事例2解説6

⑤モーター稼働のタイマー制御

・前進または後進の操作が切れたときに100ms後にモーターを停止する。
・固有の処理(コールバック関数)の続きで処理を行う。

BRUIN(Licht und Sound Lok)(マイコン換装)事例2解説7

⑥前進または後進の動作中のLED点滅制御。

・デューティ50%周期1.2秒でLEDを点滅させる。
・固有の処理(コールバック関数)の続きで処理を行う。

BRUIN(Licht und Sound Lok)(マイコン換装)事例2解説8

⑦汽笛音の繰り返し再生の制御

・音声再生終了処理(コールバック関数)で繰り返し再生回数をチェックして、回数残があれば、続けて音声再生を起動する。

BRUIN(Licht und Sound Lok)(マイコン換装)事例2解説9

【評価】
依頼元で実装と評価をしていただき、結果は良好との連絡をいただいた。

  1. 2017/12/07(木) 22:12:17|
  2. マイコン換装
  3. | コメント:0

PIC電子オルゴールVer5_6で(糸魚川)Dr.渡辺氏の曲目を追加 (第2弾)

糸魚川で活躍されているDr.渡辺氏がPIC電子オルゴールの曲データを作ってくれた。今回はロシア民謡などが追加された。どれも素晴らしい出来栄え。感謝 感謝!

MPLABXプロジェクトと関連資材は ここから ダウンロードできる。

Dr.渡辺氏のブログはこちら

追加した曲目
PIC電子オルゴールVer5_6で(糸魚川)Dr.渡辺氏の曲目を追加 (第2弾)曲目1
PIC電子オルゴールVer5_6で(糸魚川)Dr.渡辺氏の曲目を追加 (第2弾)曲目2


以下は Dr.渡辺氏 からのコメントをそのまま掲げる。

「名張市つつじヶ丘おもちゃ病院」Dr大泉院長が開発された、お馴染みのPIC電子オルゴールに、2017年末、糸魚川「おもちゃクリニック ゆりかご」Dr渡辺(私)がロシア民謡など数曲を追加したもの。
これに伴い、最新のオルゴールエンジンに対応した、小さな「ゆりかご編オルゴール」プロジェクト作って動作確認したので報告する。(★私のコメントは、文末にW)

【使用したデバイス】
Dr大泉院長が最近追加されたデバイスは(新)と表示された以下のもの。単価(2017年秋月)も表示されている。W

   12F1501  1kワード  8ピン  16MHz  @70円
   16F1503  2kワード  14ピン 16MHz  @70円(SOICパッケージ)
(新)16F1579  8kワード  20ピン MSSP無し @140円
   12F1612  2kワード  8ピン  MSSP無し @80円
   16F1705  8kワード  14ピン        @100円
   16F1709  8kワード  20ピン        @150円
   12F1822  2kワード  8ピン         @100円
   16F1827  4kワード  18ピン        @130円
   12F1840  4kワード  8ピン         @120円
   16F18313 2kワード  8ピン         @75円
(新)16F18325 8kワード  14ピン        @100円
(新)16F18326 16kワード 14ピン        @130円
(新)16F18857 32kワード 28ピン        @170円


「12F1822はデータSRAMが128バイトしか無く陳腐化してしまった感があるが、まだユーザが多いようなので、PIC電子オルゴール初心者の学習用にサンプルコードを保持している。おもちゃへの換装用には16F18xxxがお薦めだ。」
とのコメントがあるが、私は使用電圧が低くても割と安定動作するので非常に重宝しており、サンプルコードの保持には感謝申し上げます。W
やはりメモリ容量は少ないが音声再生を実装しなければ、まだ十分に使用する価値があると思われる。W

秋月からは、12F1822と同型で消費電流が少ないタイプのPICも発売されているので、今回はそちらも使ってみた。W
(追加)12LF1822  2kワード 8ピン  @110円。W


【プロジェクトの説明】
機能とデバイスの組み合わせで個々にプロジェクトが作られていて、その組み合せはプロジェクト名に織り込まれている。

今回、既存のプロジェクトに新曲を追加搭載したのは、「kyoku」プロジェクトのみ。W
そして新規「yurikago」プロジェクトには最初から新曲を入れてあり簡単に選曲ができる。W


demo
消防車・パトカー・救急車のサイレン音を電子オルゴールで演奏するモデル。

kyoku
メモリが許す限り多くの曲を収容したモデル。音源は正弦波の基本波と4次高調波をミックスしたもの。
ソングテーブルに新曲を(コメントアウトした状態で)追加した後、クリーン&ビルドでエラーなく完了したことを確認した。W

ongen
音源のバリエーションを聞かせるモデル。音源はピアノ・正弦波類・リング変調波など。

onsei
電子オルゴール演奏と音声再生を同時実行するモデル。但し、プログラムメモリが2kワードのデバイスは音声データだけでメモリが一杯になるので、音声再生のみを実装している。

PICxxx
xxxでターゲットのデバイス名を示す。

PROG
音声データをプログラムメモリに収容したモデル。

I2C
音声データを外付けの24FC512に収容したモデル。24FC512に入れるデータのプロジェクトは「Mirrorna_24FC512」。

SD
音声データをSDに収容したモデル。格納ファイルは「SD\ANPANMAN.wav」。

demo・kyoku・onseiのモデルは200Ωスピーカーまたは圧電スピーカーをPICから直接駆動するためにBTL出力としている。また、電源オンで演奏開始する。

PROG・I2C・SDのモデルはトリガ入力ピン(RC0~5)を操作して、演奏曲と再生音を選択し動作開始する。

例えば、「onsei_PIC18857_SD」は電子オルゴール演奏とSDからの音声再生をコンカレントに実行するモデルで、ターゲットは16F18857。RC0~RC5で演奏曲と再生音を選択する。

yurikago_PIC1705 (以前は watanabe__PIC1705 と名付けていたプロジェクト)
糸魚川のおもちゃDr渡辺様が作られた楽曲を収容したモデル。PIC電子オルゴールの機能を上手く引き出してくれている。他のモデルでは11分のオートパワーオフが仕掛けてあるが、このモデルはエンドレスに演奏し続ける。開発作業のBGMに最適だ。
ソングテーブルの末尾に拙作の曲目を追加して「ゆりかご編オルゴール」用の曲目が多く揃い、国内・国外のバランスも取れて選曲も楽しめるようになった。W

yurikago
これが今回、新規に作成したモデルで、12F1840用に実装されたものが全て新曲で、ロシア民謡4曲は音源波形にRING4を使い、+讃美歌2曲+大正期童謡2曲。W
そろそろクリスマスが近づいてきたので、12F1822用には、新曲から「アメージング・グレース」と「さやかに星はきらめき」の讃美歌2曲を実装してみた。W
新しいデバイスの、12LF1822用には、一番データ量が大きいロシア民謡の「黒い瞳」一曲がギリギリで実装できることを確認。W
いづれも、スイッチ押下で連続演奏を開始し、演奏途中でのスイッチ押下は次の曲目にスキップして演奏を続け、実装された最終曲の演奏終了後にSTOPする。W
私は現役時代42年間を事務屋一筋で定年退職、このようなプロジェクト開発は初めてだったが、あらかじめソースファイルに記載されたDr大泉院長の丁寧な解説コメントや過去のブログ記事を精読しながら、ようやく作り上げたもの。W


【プロジェクトの構成】
プロジェクトは単一のソースコードで構成されていて、ソースコード名は「プロジェクト名.asm」となっている。そのソースコードからオルゴールエンジン・音符データ・波形データなどがincludeされる。

下記のデバイスについては、デフォルトのリンカースクリプトではプログラムメモリのセグメントが分断されているので、PIC電子オルゴール向けに1セグメントにしたものを用意している。

16F1579
16F1705
16F1709
12F1840
16F18325
16F18326


【PIC電子オルゴールのセールスポイント】
今までのおもちゃ修理事例からPIC電子オルゴールのメリットを紹介する。

①マイコンだから演奏の自由度が高い。
「うたおう!おうた カラオケ絵本」の修理では、カラオケであることから添付の楽譜通りに演奏しないといけない。PIC電子オルゴールは音符データを自由に作れるので元々の演奏内容を忠実に再現することが可能だ。演奏の表現としてベロシティ、テンポ、ピッチベンドの動的なコントロールも可能である。

②音声再生もコンカレントに実行できる。
電子オルゴールは音符データに従って演奏音のPCMデータを計算してPWM出力している。音声再生は、音声のPCMデータを電子オルゴールで計算したPCMデータに加算するだけでコンカレント実行が実現できる。「不思議なドレッサー ミラーナ」では、オルゴールを演奏しながら女の子がしゃべったり、効果音も同時に鳴らしている。
音声再生のチャネルは最大3個まで実装できる。つまり3音声まで同時に再生できるということだ。

③効果音もオルゴール演奏で実現できる。
効果音を音声再生でやると音声データが嵩張って大きなメモリが必要になる。パトカーや救急車のような音は音符表現すればオルゴール演奏で効果音を出すことができる。「キッズドライバーのハンドルV2」ではパトカー、救急車と消防車のサイレン音をPIC電子オルゴールで演奏している。サイレンの音程が滑らかに上下するのはピッチベンドコントロールの機能である。消防車の鐘の音は実際の鐘の音をオルゴールの音源データとして用いているのでかなりリアルに演奏できている。

④音源の自由度が高い。
消防車の鐘の音もそうだが、実際の楽器音をPCMデータにして音源データとすることで、楽器の音色を表現することができる。「電子オルゴール+音声再生」ではピアノの音色やリング変調による金属的な音色で演奏している。

⑤おもちゃの制御も同時に実行できる。
オルゴール演奏と音声再生をコンカレントに実行しながらおもちゃの制御も同時に行わないとおもちゃの修理には使えない。
「アンパンマン電動レールでGO!GO!DX」では赤外線信号のデコードとモーター制御、更にバッテリー電圧の監視も同時に行っている。

⑥外部メモリを利用して長時間の音声再生ができる。
I2CインタフェースのシリアルEEPROM(24FCxxxなど)やSDカードから音声データを読み込んで、音声再生させることができる。SDカードなら数時間の音声を扱うことができる。
24FC512を繋いだ修理事例は「不思議なドレッサー ミラーナ」
SDカードからの音声再生の事例は「SDカードからの音声再生」


【PIC電子オルゴールの開発経緯】
①最初はビープ音から
今でこそサンプリングシンセ擬きの仕掛けになったが、最初は音高と音価に従ってポートをH/Lにして矩形波を出力する「ビープ音」だった。1つのポートには1つの音しか出せないため、複数ポートの出力を外部でミックスして複数パートの演奏をやっていた。

②PCM化
PWM内蔵の廉価なPICが出回り始めてPWMを使ったD/A変換が実装できるようになったので、内部の処理では音のデータをPCM形式で扱うようにした。単調なビープ音にエンベロープを付けて、少しはマシな楽音表現になった。パート数を増やすよりもエンベロープ表現を取込んだ方がオルゴール演奏としては効果が大きい。両方実現できれば良いのだが、廉価なPICではCPU能力が貧弱で無理だ。今のところパート数は通常2パートで、3パート演奏が限界だ。
音源もビープ音からPCM音源に替えた。音色のバリエーションを実現するのにリアルタイムに波形演算を行ったのではCPUが足りない。そのため、波形計算を予めPCで行って、その結果をPCM音源としてPICに持ち込むことにした。実際の楽器音をサンプリングしたPCM音源も再生できるが、当初の発想はPICの処理能力を補うための手法だった。
PCM化によってベロシティとピッチベンドの動的なコントロールが可能になった。

③音声再生機能を追加
内部処理をPCM化したことで、PCM録音された音声データの再生機能も容易に追加できた。

④外部メモリのサポート
音声データは嵩張るので、長時間の音声はPICの内蔵メモリには収まり切らない。そのため、容量の大きなメモリを外付けすることにして、I2CインタフェースのシリアルEEPROMとSDカードの接続をサポートした。
SDカードは、PICの性能が低いためFATシステムは実装できず、物理層でのアクセスを行っている。MP3デコードもできないためWAV形式のみのサポートとなる。
  1. 2017/12/06(水) 22:37:24|
  2. 電子オルゴール+音声
  3. | コメント:2

2.4GHzラジコン用ファームウェア(SE8R01)の応用事例

つつじが丘おもちゃ病院では 「2.4GHzラジコン用ファームウェア(SE8R01)」 を開発し公開しているが、「おもちゃ病院 新津(新潟)」様 が本ファームウェアを利用して、実際のラジコン修理で送受信機の換装を行った。換装作業の状況と動作確認の結果は、彼のブログ記事で詳しくレポートされている。結果は 「30m前後まで完璧に動作した」 とのことだ。限られたスペースに格納するため表面実装で細かい工作をされていて、いつも感心させられる。特にアンテナの工夫で操作可能距離を30mにも拡大した功績は大きく、おもちゃの元々の性能である20mを大きく上回っている。

2.4GHzラジコンの修理については今年(2017年)春から、RFチェッカーの検討と合わせて、彼と2人3脚で進めてきたプロジェクトだ。それが良好な結果を以って完了し、おもちゃ病院業界での2.4GHzラジコンの修理の道筋をつけることができた。

【関連記事】
NIKKO製 NANO Vaporizr 2水陸両用車2.4GHzラジコン改造(外部リンク)
2.4GHzラジコン用ファームウェアの開発(SE8R01)
  1. 2017/12/01(金) 08:56:52|
  2. マイコン換装
  3. | コメント:0

プロフィール

大泉茂幸

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

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

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

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

カテゴリ

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

最新記事

最新コメント

月別アーカイブ

訪問者数

検索フォーム

RSSリンクの表示

リンク

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

ブロとも申請フォーム

この人とブロともになる

QRコード

QR