PICAXEで簡単オルゴール
既に遅れているのかもしれませんが、秋月電子でPICAXEなるものが売られているのに先週末気付きました。
BASICというキーワードが有るので、「もしや昔あったBASICインタプリタ内蔵のPIC-BASICスタンプの再来?」かと思って注目していたのですが、どうもそうではなく、PC側の開発環境がBASICやフローチャートという物らしい、ということで、ちょっとテンションが下がってました。
(なお、BASICスタンプは入出力をなんとかして、昔のBASIC内蔵ポケコンもどきにできないかなあ、とちょっと考えているうちになくなってしまった。。。というのがありまして。)
ところが、その後PICAXEの仕様を見ていたところ、音楽関係の命令があり、しかもRTTTLというもので記述された音楽データがネット上に大量にある、ということに気付きまして、じゃあ電子オルゴールにしてみるか、ということで秋月のスターターキットを買ってきてみました。
基板はシルク印刷を見てICソケット、ジャック、ピンヘッダ、抵抗2個、コンデンサ1個、電池、をつなぐだけです。
あと、5ピンとGNDの間に圧電スピーカを付けています。PICAXE-08M2のデータシートによると、サウンド出力(TUNE)はこのピンに出てくるということのようですので。(8ピンよりおおきなチップだと出力ピンが選べるみたいですが。)
ソフトは何も考えずについていたCD-ROMからそのままインストールしました。ダウンロードケーブルドライバのインストールだけちょっと手間取りましたが、デバイスマネージャから
Usb_Driver_AXZE027 -> Windows-XP-2000-VIsta-7
を選ぶことで動作するようになりました。
動作については音物ですので、動画でご覧ください。
セットアップからプログラムの書き込みまで実に簡単です。単音なのはちょっと寂しいですが、PICAXEならぬまっさらのPICで同じことをやったら結構大変です。プログラム以前のCONFIGやTRIS,ANSELなんかの設定で最初につまづく人も多そうですし。
しかも、動画で紹介している以下のページから1万以上の音楽データがダウンロードできるようですし。
http://www.picaxe.com/RTTTL-Ringtones-for-Tune-Command/
ここからZIPファイルをダウンロードして展開すると”音楽名.BAS”というファイルがいっぱい出てきますので、PICAXE PROGRAMMING EDITORからそれを開いてProgramボタンを押すだけです。
今回初めて知ったのですが、このデータはRTTTL形式というもので、NOKIAが音楽データ交換用に規定したものだそうです。
動画ではX'mas songsをダウンロードして試しています。実は動画以外にも何曲か聞いてみて「なんかちょっとリズムか音程が変じゃない?」という箇所が結構あるのですが、それはデータが変なのか、使っているPICAXE-08M2の設定か制限の問題なのか、ちょっとわかりかねています。 (データの問題かどうかは楽譜を探してきて比較すればすぐわかるので、そのうち暇が出来たら確認しようと思います。)
そういえば、PIcaxeProgrammingEditorにはシミュレーション機能もあって、ProgramしないでもPC画面でシミュレーション動作できて、音楽も聞こえるのですが、その音にもなんか変なことがあるみたいです。オクターブがずれているんじゃないかなあ、という感じの時が。
実チップにProgramして動作させると正しく聞こえるので、これはシミュレーションモードの設定の問題かなと思っています。(全くマニュアルをみずにいじってますので。)
まあ簡単に実機で確認できるから、あまり気にしてません。
正直ちょっと侮っていたのですが、ここまで簡単にできるなら学習用としてはかなり良いように思います。案外面白い物なので、他の機能もいじってみたいと思います。
それではまたです。
萩原様。こんにちは。ご連絡ありがとうございます。
便利な機能があるのですね。他にもいろいろ便利機能がありそうですね。
PICAXEは速度面を見てちょっと敬遠してしまっていたのですが、その分機能面が充実しているのでしたら、それほど高速でない用途でまた使ってみようかと思います。
投稿 見習職人 | 2013/07/20 09:37
2提案ありがとうございました。
色々と私ながら勉強させてもらいました。
8ピンのPicaxe なので、1番目だけですが
そこで、「time」とゆうコマンド名?変数?
これが、うまいこと1秒間隔でカウントしていくことに気が付きました。
間に、pauseなんか入れても、問題なく動作しているような
回答のお礼と、ご報告まで。
投稿 萩原 | 2013/07/16 00:28
萩原 様。こんにちは。ご訪問ありがとうございます。
Picaxeのコマンドリストを見たところ、SETTIMERコマンドでタイマー周期を設定してその後toflagが何回セットされるかをカウントすれば、その回数xタイマー周期で経過時間が分かりそうです。
それも含めて、○分間LED点滅させる方法は以下2案があります。
●案1 ループ周期xループ回数で実現
ここに一定時間LED点滅の例がありました。
http://www.picaxe.com/BASIC-Commands/Program-Flow-Control/for/#tabs-1
このコードだと1秒周期で20秒間点滅して2秒停止、を繰り返します。
「for b0 = 1 to 20」のループ回数20を例えば180にして最後のgoto mainを取れば3分点滅して停止になると思います。
(2行目のif pinC.1 = 1 then exit は削除してください。)
この例は1回の点滅周期が1秒なので単純ですが、もしその期間が違うならループ回数も合わせて調整する必要があります。
●案2 内部タイマー機能を使う
http://www.picaxe.com/BASIC-Commands/Advanced-PICAXE-Configuration/settimer/
上のSETTIMERコマンドで内部タイマーをセットして、toflagが必要回数
(○分間÷タイマー周期)立つまで点滅ループするようにしてもできそうです。
この方法は1よりややこしいですが、一度作ってしまえば点滅周期を変えても全体時間に影響しないので調整がいらないのが良い点です。それに案1より時間も正確だと思います。
すみませんが、案2は私は試してはいませんので、お試しになってもし何か不都合があったらお知らせください。
投稿 見習職人 | 2013/07/12 22:16
いつも拝見しております。
PIcaxe basic で、経過時間を計るCommandは、あるのでしょうか?
○分間LEDを点滅する、みたいなことがしたいのですが。
30年前にbasicに触ったことがあるだけで手探りで、PIcaxeをいじっているのですが。
宜しくお願いします。
投稿 萩原 | 2013/07/12 00:14