1/48 スペース1999 イーグル号 その13

完成しているのに未だにネタとして活用していますw

今回はプログラム関係です。プログラムの掲載がありますので長いですので、適当に読み飛ばしてください^^。

2016_12_08_22_48_27.jpg

プログラムはdiorama111さんのプログラムを参考に作らせていただきました。

今回のマイコンはイーグル号のエンジンのコントロール以外はATmega168Pを3つ使用しました。

2016_12_08_22_47_04.jpg

左からDF Playerをコントロールする回路とAVR

中央がイーグル号本体の回路とAVR

右が展示台のメインの回路とAVR

です。

まずはDF Playerのプログラムですが、元はArduino用のものなのですが、これをyoutubeでdiorama111さんがAVRで動かす用にこちらでプログラムを公開されていました。これをスイッチバージョンに改変させていただき、メインのAVRと連携できるようにしました。

プログラムはこちら

曲は3曲であとは必要なコマンドであるボリュームの増減と曲を止めるためのコマンドのみです。

ただ私のプログラムが未熟なためか3局目の曲が流れないという欠陥を抱えていますw

プログラム自体は難しいところはあまりなくて、mainの所でポートCの0〜5までのスイッチの変化に応じてDF Playerにコマンドが送信されます。

if文の後にわざわざswitch文は必要なかったと思いますがとりあえずこれで行ってみましたw

 

次に展示台メインのプログラム

メインプログラムは赤外線リモコンにより、滑走路のLED、昇降装置、先ほどのDF Player用のマイコンスイッチのオンオフをコントロールしています。

基本的には以前ご紹介した単純な赤外線リモコンのプログラムを改変しているだけです。

70〜112行までのvoid deci()が赤外線リモコンの信号を読み取ってコマンドを実行しています。

145〜149行のISR(PCINT1_vect){}がピン割り込みで前回書いていた昇降装置の安全装置でポートCの0、1番に接続してあるリードスイッチの信号を読み取ってOCR0AとOCR2AのPWM信号を制御しています。

152行〜168行のISR(TIMER1_COMPA_vect){}がタイマー1の割り込みでOCR1Aの数値を基本に一定時間が来るたびにここの処理を実行します。これによって滑走路のLEDの点滅制御とデモモードの時間を決定しています。

171〜200行までがAVRの設定でポートの設定、タイマー0、1、2の設定、割り込みの設定が書かれています。

203行から下がデモモードの時のプログラムが書かれています。

 

次にイーグル号本体のプログラムは

先ほどの展示台のプログラムと多少の動作が違うくらいで、基本的にはプログラムはほぼ同じです。

 

これらのプログラムを組んで、基盤の作成してみました。

2016_12_10_18_38_42.jpg

こちらがメイン基盤です。白と赤の配線がDF playerをコントロールするマイコンに行きます。

2016_12_08_22_46_51.jpg

電源は右下の減圧回路で12vと一部減圧して5vを取り出す予定にしていたのですが、この減圧回路まともに動いていなくて一時かなり悩みましたw結局動画を撮影した時には12vと5vのアダプラーを2つ使用していましたw現在この減圧回路を交換して12vのアダプター1つで動かせるようになりました。

2016_12_11_14_39_54.jpg

 

基盤右上のものがモータードライバーで、左上の部分が滑走路の LEDを動かすためのトランジスタへの配線です。

こちらがDF Playerの回路です。

2016_12_08_22_46_55.jpg

このDF Playerは以前レッサーかずさんがご紹介してくださったものです。値段も安くて、結構細かい操作まで行えるので非常に重宝しました^^。
基盤とプログラムができましたのでいよいよ全体のタイミング合わせを行いました。

今までもなんども書いていますが、これが結構大変でしたw

2016_12_08_22_46_37.jpg

動かしてみてはプログラムのタイミング修正したり、効果音を伸ばしたり短くしたりを繰り返します。

上昇下降も実はプログラムを見てもらうとわかるのですが、途中からスピードが変化してるので簡単に計算できないタイミングもあるんですよね^^;

例えば、開始直後のタイミング合わせはデモをスタートさせてすぐにわかりますが、デモの後半の着陸時のタイミング合わせはデモが終わり近くなるまで待たないといけませんwデモをスタートさせて2分ぐらい待ってようやく修正したプログラムと効果音が合っているのかがわかりますw合っていないときはこれを再度繰り返しますので、時間がむちゃくちゃかかりましたw

その間、効果音がしますので家族からは「お父さんうるさい!」との非難の声がw

さらに12vと5vを使っていますのでつなぎ間違えAVRとDF Playerが昇天してしまうとかw

2016_12_08_22_46_43.jpg

 DF Playerの裏側のICが溶けて穴が空いていますwおまけに基盤には焦げた跡もw

ちなみにこの間違い2回行いましたwつまりDF Player2個とATmega168P4個昇天させましたw

アホすぎる・・・・w

ちなみに前回ご紹介したリードスイッチですが、

2016_12_10_17_39_10.jpg

実はこのリードスイッチも配線を引っ張ってしまったりして4個くらい割ってしまいましたw

その後リードスイッチの配線は瞬着で固めて動かなくしましたw

とま、いろいろ散々な目に遭いながらどうにか展示台にギミックを詰め込んでなんとか撮影です^^;

2016_12_08_22_46_32.jpg

ただ、今回の展示台とイーグル号の機体はそれぞれの赤外線センサーで受信していますので、たまに片方だけ受信して片方が受信していないということもありますw機体だけスイッチが入ってデモを始めているのに展示台の方はシ〜〜ンと動かないwてなこともたまに起こります。

本来なら展示台のマイコンとイーグル号本体のマイコンを1つにまとめた方が簡単だったのですが、どうしても機体と展示台の間に配線を見せたくないことと、イーグル号単体でも遊べるようにしたかったのでこのような方法をとりました。

長々となりましたが、これでスペース1999 イーグル号の製作終了です^^。

おつきあいありがとうございました^^。

関連すると思われる記事:

    None Found

8 comments

  1. こんにちは!
    プログラムの公開ありがとうございます。
    3個のAVRを駆使した、素晴らしい模型です。
    プログラムを拝見して、二番目と三番目のプログラムで、変数uの値で分岐している様ですが、値が一部しか使用されていないなぁと思っていたら、プログラムを共有されていたのですね。(納得です)
    赤外線の受信状況が、イーグル号と展示台でケースによっては同時受信できないとのこと、わかります(笑)
    音はすれど、イーグル号は「お休み」なんでしょうね!(笑)
    イーグル号を持ち上げる棒に非接触で何か信号を送信できる回路が仕込めれば、展示台の赤外線受信だけで行けそうですが、難しいでしょうね。

  2. Vividさん こんにちは!

    さすがVividさんです!おっしゃるように2,3番目のプログラムを共有しています。2番目の方がタイマーカウンターの値が半分なのでデモの段階として変数uが3番目のプログラムが10なら2番目のプログラムは20に相当します。
    ここのuの数字を変えたりしてあのデモのタイミング合わせをしています。

    赤外線受信がケースによっては同時受信しないのは少し情けないですが、殆どの場合は大丈夫なのでこれで良しとしています^^;
    実は展示台の方にも赤外線発信用のLED仕込んで、イーグル号に送るか?とも考えたのですが、面倒なのであきらめましたw
    Vividさんが研究中の非接触のコイルによる情報伝達があればもしかして・・・・。距離的に難しいですかね^^;

  3. こんばんは。

    今までも夜中に見られない事が数回ありましたが、6jiroさんが使用されているブログシステムのデータベースは頻繁にクラッシュしますね(>_<)
    データやコメントが無くならないのが幸いですが(-o-;)

    プログラムの公開と解説をありがとうございます。
    AVRでコントロール出来るmp3プレイヤーというものがあるんですねぇ。
    モータードライブICまで連動していて素晴らしいギミックです!

    初歩的な質問で申し訳ないのですが、
    展示台のプログラムの40行目以降などに出てくるPORTC&=~(1<<PC2);ti();ti();ti();部分などの「ti();ti();ti()」とは、どのような意味になるのでしょうか?
    お手数をお掛けしますが、もしよろしければ教えていただけると嬉しいですm(_ _;)m

    話は全く変わるんですけど、ここ4~5年歯医者に行ってなかったのですが、歯磨き時、奥歯ばかり気にしていて前歯がおろそかになっていたようで、久し振りに鏡で前歯をしげしげと見たところ、歯と歯茎の辺りに白い歯石のようなものが付いていて、歯全体も茶色くなっていたのでビックリし、先週は歯医者に行って、歯石を取って貰いました(苦笑)
    結構メンテナンスを怠けていたようで(^-^;)一度で全部は取り切れないとの事で、来週は上の歯列を清掃して貰う予定デス(^+++^;)

  4. yangminさん こんばんは!

    ブログシステムのクラッシュはほとんど私が要らない事をして壊していますw
    データーの更新中に再起動したりw
    自業自得でwordpressが悪いわけではないんですよ^^;

    MP3プレイヤーはなかなかいいいですよ〜。結構細かいコマンドが送れます。
    モータードライブICは初め電流値とかよくわからなくて苦労しました^^;

    ti();は何もしない時間を取っています。delayと同じで、プログラムの初めごろのtimerの設定でti();のdelay時間を設定しています。
    プログラムを勉強し始めた最初からこの時間設定を使っていたのでこの時間感覚に慣れているので、ti();が3個分間をあけたいなと言う時にスマートではないのですが、ti();ti();ti();と書いています^^;
    特にデモの時なんかの時間調節部分ではこれらのものが頻発してきています^^;

    歯科院に通われ始めたんですね〜。とてもいい事ですね^^
    痛くなっていくよりも、メンテナンスで通っていい状態をできるだけ維持してもらって下さいね。長く健康な口腔内を保って美味しいものを食べて行きたいですよね^^。

  5. 早速の回答をありがとうございました。
    ということは、ti();ti();ti();というのは、その上の「void ti(){for(h=0;h<10;h++){wait(10000);}}」を3回実行しているという考え方で良いのでしょうか?

    MP3プレイヤーまで操作可能とはAVRは便利ですね~。
    電流値に悩んだと言う事ですが、それでもモータードライブまで使いこなされるとは流石ですよ。
    自分は買ったとはいえ手も付けていないので、まだちんぷんかんぷんです(^o^;)

    口腔内は子供の頃治療して以来、虫歯が無いのだけは取り柄です!(笑)

  6. yangminさん こんにちは!

    yangminさんのおっしゃる通りです。
    void ti(){for(h=0;h<10;h++){wait(10000);}}
    はti()というこんな関数を定義しますよ。ということで、その後ti()というコマンドが出たら、この関数を実行しますので、今回の場合は3回この関数を実行します。
    ちなみに新たにvoid t3(){for(h=0;h<30;h++){wait(10000);}}という関数をもし作っていたら、t3();と書けばti();ti();ti();と同じことにはなるのですが、関数増やすの面倒で3回書きました^^;

    MP3はシリアル通信なのでVividさんなら簡単にPICでも可能になると思います。
    モーターについてはホントなめていました^^;あの子供のころから使っているようなモーターと違って大型の物はいろいろと大変なんだなと勉強になりました^^。

    面倒とは思いますが、歯科医院でしっかりとメンテナンスしてもらってくださいね^^。

  7. すんげー大作ですね!

    動画でギミック拝見しましたが、音楽との同期とか結構苦労されたんだろうなぁと漠然と思ってました。ご苦労様でした。

    にしても、AVRのプログラムって可読性が高いですね。
    PICだとC言語でもレジスタを管理するのでアセンブラに寄った感じの記載も多く、しかも機種ごとにちょっとずつ違うので割とメンドクサイんですよね。

    このモーターはステッピングモーターでしょうか?
    モータードライバーICは実験的に使ってはみたのですが、ファルコンでは搭乗ベイどうしようか皆さん悩んでらっしゃいますので、純正のユニットから変更できないかなんて思ったりしてます。

  8. あせんちゅ(汗人)さん こんばんは!

    完成後あまりにも大きくて邪魔になっていますw
    音楽とギミックの同期は結構時間食いました^^;ちゃんとストップウオッチとかで測ればよかったのかもしれませんが適当にやっていたので^^;

    PICの経験が浅いのであまりよくわかっていないのですが、なるほど~結構違うんですね・・・・。AVRの場合も機首によって多少設定で違いがありますが、基本のプログラムには特に違いはないような感じです^^。

    モーターは通常のDCモーターでギアで回転数を落としてあるものです。ファルコンの搭乗口のユニットは通常のモーターにリミットスイッチが付いているだけのようなので、市販のモータードライバーで動かせそうな感じですね。プログラム的には今回のものがそのまま使えそうな感じです。あとはどのようなギミックにするかですよね^^;まっ、そこが一番の難題であるんですけどね^^;

Leave a Reply

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

wp-puzzle.com logo