ヘッド部以外のプログラムを先に作ってしまいます。

 開発項目は以下です。

- スマホ経由でのリモコン操作
- 前方と左右の障害物を回避する自動走行
- 動作に応じた音声出力
- 電池残量警報
- パイロットランプの光らせ方

 まずは自動走行を開発していきます。ベースは以前に手掛けた「かわいいロボット」のプログラムです。



 ここでいきなりトラブルです。モータ単体であれば問題はなかったが、サーボを追加するとモータの片側が作動しません。

 サーボをまだ配線していないのでプログラムもしくはArduinoのIDEなどのソフト上の不具合であることは確かなようです。

 試行錯誤数日でも解決しないのでいつものフェースブックのグループに相談してみました。

 何人かの方々から早速コメントをいただきました。いつもながら感謝です。

 原因はモータドライバDRV8835にArduinoの9,10番ピンを割り当てていたためです。Arduinoのサーボライブラリーを使うとタイマーが競合して9,10番のPWMが無効になるそうです。

 あらためてArduinoのリファレンス(英語版)の「Servo」の項目をよく読むとちゃんと記載がありました。

『On boards other than the Mega, use of the library disables **`analogWrite()`** (PWM) functionality on pins 9 and 10, whether or not there is a Servo on those pins.』

 「サーボをつないでいなくても9.10番はPWMは無効になる」


 3,11番(タイマー1)に変更して解決しました。

 ただ「かわいいロボット」では9,10番で作動していたので謎です。実機を再確認してみましたがちゃんと動作しています。最近ArduinoIDEのボードマネージャで色々なボードのバージョンを更新したのが影響しているのかもしれません、こちらもいずれ改造します。

 左右監視の距離センサはまだ実装しておらず、前方監視センサだけですが障害物回避は以前のプログラムそのままで順調に機能しています。

 つぎは音声出力のプログラムになります。

 RX,TXは配線のしやすい14(A0)、15(A1)に接続しました。

 音声はとりあえず、セットアップでのデモ動作、後進に移る際、障害物を見つけた時にそれぞれ適当な音声を入れてみました。なかなかアクセントのつけ方が難しい、まだまだ改良しなければ。

 以下の動画でその様子が確認できます。


 つぎは電池残量警報です。

 電源電圧を1V以下になるよう10K と1Kの抵抗で減圧し、A2ポートに入力し読み取ります。6V以下となればパイロットランプを10回点滅し、「お腹すいた」と音声出力するようにしました。電源電圧6Vでは電源レベルメータのLEDは2本程度になっていますがあまり正確ではないようです。


 これでボディのプログラム開発はいったん終了して、つぎはヘッド部の工作にとりかかります。

(続く)