【改良版】Raspberry Pi Zero + Arduino連携のカメラ付きリモコン戦車

![DSC_0228.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/219051/3d118361-1a4b-1738-f3c6-12fafc94ebda.jpeg)



##概要
- [Raspberry Pi Zero + Arduino連携のカメラ付きリモコン戦車](https://qiita.com/Momopi/items/99f429cd95a5d5959f09)を改良しました。

##構成
- Raspberry Pi Zero W　ーー＞　WebIOPi 、カメラ画像のストリーム、超音波センサ・温度センサ・スマートリモコン駆動
- Arduino Pro Mini　ーー＞　DCモータの制御（MX1508）、サーボの制御（カメラ台）
- Raspberry PiとArduinoをUSB接続し、ArduinoへのUART通信および給電を行う。

##回路図
- 後日公開します

##機能
- 前進・後進各4速、超信地旋回
- カメラ上下左右首振り可能
- 起動時にコンソール画面のURLをslackに投稿
- 距離を測定してslackに投稿
- 静止画を撮影してslackに投稿（2021/1/10追記）
- 前照灯点灯
- スマートリモコンで部屋の電灯等を操作（2021/1/10追記）

##必要なもの
- Raspberry Pi Zero W（GPIOピンをはんだ付けしました）
- [Arduino Pro Mini 互換機 5V](https://ja.aliexpress.com/item/32672852945.html?spm=a2g0s.9042311.0.0.6abe4c4d757Tzv)
- タミヤ 楽しい工作シリーズ No.168 ダブルギヤボックス 左右独立4速タイプ (70168)
- タミヤ 楽しい工作シリーズ No.100 トラック&ホイールセット (70100)
- タミヤ 楽しい工作シリーズ No.157 ユニバーサルプレート 2枚セット (70157)
- [MX1508モータードライバ](https://www.amazon.co.jp/gp/product/B078X88R27/ref=ppx_yo_dt_b_asin_title_o05_s00?ie=UTF8&psc=1)
- [シリアル変換器](https://ja.aliexpress.com/item/32859483070.html?spm=a2g0o.detail.1000014.8.3aae1fd8lLFUnP&gps-id=pcDetailBottomMoreOtherSeller&scm=1007.13338.132444.000000000000000&scm_id=1007.13338.132444.000000000000000&scm-url=1007.13338.132444.000000000000000&pvid=bb3b7616-8dc0-49f1-9b63-ef26954d4d17)
- 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*1（垂直）、SG92R*1（水平)
- 0.01μfコンデンサ
- Anker PowerCore 13000 (13000mAh 2ポート 大容量 モバイルバッテリー)
- [HC-SR04超音波センサ](https://www.amazon.co.jp/Elegoo-JP-EL-SM-001-ELEGOO-Arduino%E7%94%A8-HC-SR04%E8%B6%85%E9%9F%B3%E6%B3%A2%E8%B7%9D%E9%9B%A2%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC5PCS/dp/B071DN2HS7/ref=sr_1_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=HC-SR04&qid=1571581799&s=industrial&sr=1-2)
- [DS18B20デジタル温度センサモジュール](https://www.amazon.co.jp/gp/product/B00YIE4V68/ref=ppx_yo_dt_b_asin_title_o04_s00?ie=UTF8&psc=1)
- スマートリモコンの部品一式（[「格安スマートリモコンの作り方」を参照](https://qiita.com/takjg/items/e6b8af53421be54b62c9)）

##ソースコード
[https://github.com/type89/newtank_ver2_public](https://github.com/type89/newtank_ver2_public)
- Raspberry piの起動時に「tank_startup.py」を実行し、IPの取得、ストリーミングURLの書き換え、Slack通知を実施します。 （2022/1/10追記）
- Slackの通知方法をPython Slack SDKに修正しました。 （2022/1/10追記）

##コンソール画面
![キャプチャ_2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/219051/e11f20af-f667-ae03-f325-15b2c77364ca.png)

- 上部：カメラ操作前照灯のスイッチ、スマートリモコンによる部屋の電灯のオンオフ
- 下部：モータ操作、距離測定、静止画撮影
- 距離測定をすると、結果がSlackで通知して表示されます。

##デバイス名の固定
今回はシリアル変換器を介してAruduinoに接続しており、デバイス名が常に一定なので固定していません。

##動作デモ
![0.jpg](http://img.youtube.com/vi/CSmNziREmrc/0.jpg)
[障害物超え](https://www.youtube.com/watch?v=CSmNziREmrc)

##作ってみた感想
- MX1508モータードライバは、L293Dと比べて発熱も少ないです。ポイントとして、デューティー比を変えるときや、回転方向を変えるときは、一旦ストップさせてから次の指示を行う必要がありました（Arduinoのソース参照）。
- サーボモータのハンチングの対策のため、操作の都度、アタッチとデタッチを行っています。
- HC-SR04による距離の測定をRaspberry Piで行う場合、タイムアウト値を設定しないとハングする場合があります。
- カメラで見た距離感と、実際の距離はかなり違います。超音波センサで距離を測定することで、壁にぎりぎりまで近づくことができます。
- カメラの位置を高くすることで、キャタピラと壁までの距離を見ることができるようになり、壁に擦りそうな場合でもぎりぎりのハンドル操作ができるようになりました。
- 静止画の撮影は、一旦ダウンロードしてからSlackに投稿するため、Sleepで待つ必要がありました。
- 赤外線LEDが1つしかないため、部屋の電灯の操作は狙いを正確に定める必要があります。
- Arduino Pro Mini互換機へのプログラムの書き込みは、[FTDI USBシリアル変換アダプター](https://www.amazon.co.jp/gp/product/B009AME9R4/ref=ppx_yo_dt_b_asin_title_o07_s00?ie=UTF8&psc=1)でないとうまく行きませんでした。少々値段が張りますが、必須です。


##参考にしたサイト
- [TechMonkeyBusiness](http://www.techmonkeybusiness.com/using-the-mx1508-brushed-dc-motor-driver-with-an-arduino.html)
- [ＤＥＫＯのアヤシいお部屋。](https://ht-deko.com/arduino/)


##作者のサイト
- [New Momopi Blog](http://type89.pythonanywhere.com/)