14
11

More than 3 years have passed since last update.

Raspberry Pi Zero + Arduino連携のカメラ付きリモコン戦車

Last updated at Posted at 2019-02-14

概要

※改良版の【改良版】Raspberry Pi Zero + Arduino連携のカメラ付きリモコン戦車を作成しました(2021/1/10追記)
Raspberry Pi Zero + Arduino連携のカメラ付きリモコン戦車を製作しました。
Raspberry Piだけでも実現可能ですが、「モーター制御はマイコンに任せる」ということをやってみたくなり、Raspberry Piからのシリアル通信でArduinoを制御してみました。
1作目のRaspberry PIを使用したRC戦車の製作の改良です。
(バッテリー・モータの配置を変えて重心が前に移り、走行性能が改善しました。(2019/3/17))
DSC_0004.JPG

構成

  • Raspberry Pi Zero WH ーー> WebIOPi 、カメラ画像のストリーム、ngrokによるインターネット公開
  • Arduino Uno互換機 ーー> DCモータの制御(L293D)、サーボの制御(カメラ台)
  • Raspberry PiとArduinoをUSB接続し、Arduinoへのシリアル通信および給電を行う。

機能

  • 前進・後進各4速、超信地旋回
  • カメラ上下左右首振り可能
  • 起動時にコンソール画面のURLをslackに投稿

必要なもの

  • Raspberry Pi Zero(今回の構成では、GPIOピンを使いません)
  • ELEGOO UNO R3 ボード ATmega328P ATMEGA16U2 +USBケーブル Arduino用
  • タミヤ 楽しい工作シリーズ No.168 ダブルギヤボックス 左右独立4速タイプ (70168)
  • タミヤ 楽しい工作シリーズ No.100 トラック&ホイールセット (70100)
  • タミヤ 楽しい工作シリーズ No.157 ユニバーサルプレート 2枚セット (70157)
  • Rasbee オリジナル L293D モーター ドライブ シールド
  • HiLetgo OV5647 5MP Raspberry Pi 3 カメラ OV5647 HDカメラモジュール
  • サインスマート(SainSmart) v1.3 Camera Cableカメラケーブル for Raspberry Pi Zero
  • SG90 Servo SG90サーボ用ミニ2軸 オリジナル FPV 特殊なナイロン PTZ(NOサーボ) カメラマウント A838
  • デジタル・マイクロサーボ SG90 *2
  • 0.01μfコンデンサ
  • Anker PowerCore 13000 (13000mAh 2ポート 大容量 モバイルバッテリー)

ソースコード

Raspberry Pi側プログラム
- Raspberry Pi側は、WebIOPiで操作画面を表示し、操作を受け付けることと、mjpg-streamerで動画配信するのみです。JavaScriptで操作画面のボタンからコマンドを生成し、pythonでシリアル通信します。
- 安定して操作するには、直進安定性が良くなくてはなりません。モーターのデューティー比率の調整はカット&トライになるので、画面更新で変更を反映できる、JavaScript側で設定した方が便利です。
Arduinoスケッチ
- Arduino側では、シリアル通信で受けたコマンドをもとに、DCモータ・サーボモータを制御します。

デバイス名の固定

今回はRaspberry PiとArduinoを連携しますが、プログラム内でデバイス名を指定するので、デバイスが毎回同じ名前で認識される必要があります。以下のサイトを参考に、Arduinoのデバイス名を固定しました。
usb-serial のデバイスファイル名を固定する方法

動作デモ

0.jpg
障害物超え
0.jpg
操縦動画(Arduino自動運転戦車を追跡)
Arduino自動運転戦車の記事

作ってみた感想

  • Raspberry Piのみの構成と比べると、操作ボタンを連打したときもハングせず、安定して動作するようです。
  • Arduino互換機は、ATmega328Pのタイプを使用した方が認識に苦労しないので無難です。
  • バッテリーを小型化するために、2ポートの「Anker PowerCore 13000」を使用しました。1ポートでRaspberry Pi、Arduino、サーボを駆動し、もう1ポートでDCモータを駆動します。
  • ArduinoのUSBポートがタイプBですが、タイプBのケーブルには短くて細いものがあまりないようです。車のサイズに合わせるため、タイプAメス-タイプBオスの変換アダプタと、タイプAオス-MicroBオスのリール型ケーブルを使いました。変換アダプタが高いのが難点です。
  • シリアル通信で受けた文字列をArduinoで識別する際、ポインタを使って文字を区切っている制作例が多いのですが、私は苦手なので、String関数で作成しました。
  • 当初、Raspberry Pi3 + Arduino Mega + L298Nモータシールド + RE-260RAモータの組み合わせで大型の車を試作しましたが、動かしているうちにUSB接続のArduinoを認識しなくなる問題が頻発しました。また、消費電力が大きいことから電池の数が多くなり(Raspberry Pi用モバイルバッテリー、モータ用単3*8、Arduino用006Pの3種)、実用に耐えない代物になってしまいました。Arduinoの認識が不安定な理由は不明ですが、Raspberry Piにいろいろなソフトが入っていたので、初期化して使用した方が良かったかのもしれません。ちなみに今回の構成では、認識には全く問題ありません。
  • もともと、モーターが後部にあったことから重心が後寄りで、超堤能力に難がありました。いろいろな製作例を参考にして、駆動輪を上にして、バッテリーを車体中央に据えることで、バランスが向上し、走行性能が大幅に向上しました。バッテリーの幅が広く、そのままではキャタピタに干渉してしまうのですが、キャタピラの輪の中にバッテリーを収めることで解決しました。(2019/3/17追記)

参考にしたサイト

作者のサイト

14
11
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
11