2019-05-21
これまで製作したRC可動戦車のArduinoのスケッチ(プログラム)がメモリー容量ギリギリで不安定動作をすることが有り、対応策を検討しています。
今回のブログはArduino初心者の開発の覚書であり、あまり参考にはならないかもしれません。
対策1. スケッチサイズをコンパクトにする。
工夫してみましたが、私の知識ではこれ以上のダウンサイジングは難しいです。
対策2. メモリ容量の大きいArduinoを使う。
1/35スケールの戦車に内蔵する前提で対策2ができるArduinoは知りません。
Arduino Mega 2560では形状サイズが大きすぎます。
対策3. 作業を分割する。
Arduinoを2台使い、シリアル通信で相互データをやり取りして、作業分割を実施する。
通信方法はいろいろありそうですが、簡単な方法で試してみます。
概略:
メインユニット:PS3コントローラの命令を受信して、モータ、LEDを動作させる。
サブユニット :赤外線発光LED、受光素子にてIRバトルの発光、受光をする。
MP3プレーヤーで効果音発生をする。
ArduinoのRX、TXピンで両者間の通信をシリアルで実施。
当然ですが、双方のデータ転送速度は揃えておきます。(9600bpsにしました)
手持ちのArduinoの都合から、5Vと3.3VのPro Miniを使用するため、電圧レベル整合が必要です。
通常はレベル変換モジュールなどを介入させるのでしょうが、簡略的に2KΩの抵抗を入れて接続しました。
これはDFplayerとの通信ラインに1kΩを挿入する方法で実績が有ります。
追加仕様:エンジン始動音、アイドリング音を発生。
走行時のエンジン音などは、音源を取得出来ていないので見送り。
今回、アイドリング音発生のためにリピート再生をさせるのでDFplayerのライブラリーを変更。
DFPlayer_Mini_Mp3.hでは上手くリピート再生できなかったので、DFRobotDFPlayerMini.hに変更。
DFRobotDFPlayerMini.hの方が使用するメモリサイズが大きいが、今回はゆとりが出来たので採用。
IRremote.hのバージョンはいろいろありますが、
私は下記のものを使っています。
Version 0.1 July, 2009
Copyright 2009 Ken Shirriff
こちらのものは、サイスが大きいので使っていません。
Version 2.0.1 June, 2015
Copyright 2009 Ken Shirriff
アドバイス、有難うございます。
その方法は、以前にやってみたことが有りますが、46バイト程度しか軽減できませんでした。
1000バイト以上軽減できると良いのですが、私のやり方が上手くなかったのかもしれません。
今後も良い方法が有れば、教えてください。
可動戦車を作るに当たってとても参考になる記事をいつもありがとうございます。
アルディーノのメモリ不足対策てすが、既に対応されたようですがもっと簡単にIRRmoteで使っていないデコード乃処理を削ることでいくらか容量確保できますよ。
コンパイルスイッチで切り消えできます。
既にごぞんじでしたらご容赦ください。
簡単に組みあがるのも良いのですが、いろいろ改善点が出てくるのも、また楽しいものです。
その都度、いろいろ試して、解決できた時は、より充実感が有ります。
模型製作でも、同じですよね。
タミヤの昔のモーターライズのリモコン戦車しか知らない私ですが、これからの記事も楽しみにしております。