Raspberry Pi と Arduino で作る360度回転リモートワークカメラ(1)

この記事は [WESEEK Advent Calendar 2020](https://qiita.com/advent-calendar/2020/weseek) 6日目の記事です。

## はじめに

Raspberry Pi と Arduino 、ステッピングモーターを組み合わせて、遠隔操作できるリモートワークカメラを作りました。

弊社では高田馬場と別府の2箇所にオフィスがあり、日頃 Google Meet で繋いでいます。
今までは一般的なWebカメラを使っていました。これだと、カメラの向きを自由に変えられないため、社内のイベントなどの様子をリモート越しに共有しきれていないことがを課題と感じていました。
向きを変えられるカメラは既に市販されているのですが、もともと電子工作を趣味でやっていたことと、勉強も兼ねて、リモートワークカメラを自作することにしました。

## 構成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24506/e5543ab3-9d40-982e-173c-48351f8da11d.png)

まず、Raspberry Pi は、 Xbox One コントローラーの入力から制御コマンドを組み立て、 Arduino に送る処理と、 Webカメラの映像を Google Meet へ流す処理をしています。

Arduino は、 Raspberry Pi から送られてきたコマンドを処理し、モータードライバ L6470 へSPI経由でコマンドを送り、モーターを駆動しています。モータードライバは、物理的な限界に関わらず有効なコマンドを受け付けてしまい、脱調する恐れがあるので、 Arduino 側で回転速度の制限を入れています。また、現時点では実装されていませんが、原点復帰など、機械原点の管理なども担う予定です。今はまだ機能が少ないので、Arduino を入れているメリットはあまりありません。 

## 材料

主要な部品のみ列挙します。
部品は、秋月電子通商、千石電商、モノタロウで購入しました。
材料費は約5万円です。
市販の完成品のカメラを買ったほうが安いです。

- [ステッピングモーター SM-42BYG011](https://akizukidenshi.com/catalog/g/gP-05372/)
    - 秋月電子通商
    - バイポーラ
- [ステッピングモータードライバー AE-L6470DRV](https://akizukidenshi.com/catalog/g/gK-07024/)
    - 秋月電子通商
- [スリップリング　ツバメ無線 SRG-42-14GC](https://www.tbm-japan.com/product/01slip.html)
- 冷却ファン noctua NF-A6x25 PWM
- Raspberry Pi 4 Model B
- Arduino UNO
- Webカメラ ロジクール c920s
- Xbox One コントローラー
- ACアダプタ 24V
- [可変スイッチング電源(降圧) AE-SI8010Y](https://akizukidenshi.com/catalog/g/gK-06969/)
    - 秋月電子通商
- [タイミングプーリー](https://www.monotaro.com/p/3584/1364/)
    - モノタロウ
    - MXL型
- [タイミングベルト](https://www.monotaro.com/p/3604/2535/?displayId=5)
    - モノタロウ
    - MXL型
    - 歯数 76
- MDF 4mm

## 設計

駆動部分の設計は [Fusion 360](https://www.autodesk.co.jp/products/fusion-360/overview) で行いました。
設計やこの後の製作過程の詳細についてはまた別の記事で書こうと思います。

![_2020-Nov-07_03-57-38AM-000_CustomizedView11083196361.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24506/903d428c-7a3e-2ff8-0f4a-8ca4d6486e6e.png)
![_2020-Dec-05_07-51-18AM-000_CustomizedView24887701842.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24506/7e06a2cb-717f-648e-79d7-0aa3ec5b1d01.png)

## 製作

### 部品加工

フレーム部分は、Fusion 360 で設計したデータを書き出し、MDFをレーザーカッターで切り抜きました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24506/abec5965-1187-89e3-24cd-3bd1e9b2e458.png)

### 組み立て

駆動部分を組み立てると、このようになりました。
Fusion 360 で設計したとおりに各部品がはまりました。

![EmntFKMU8AA2hta.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24506/49bd7a07-344e-ec74-652e-352dd897d12b.jpeg)

実際に回転させてみた動画はこちらです。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">モーター回してみた！<br>軸が曲がっちゃってるのと、プーリーがセンターからずれてしまって、だいぶガタガタしてる。 <a href="https://t.co/OCUDNnU55w">pic.twitter.com/OCUDNnU55w</a></p>&mdash; たむーん (@Aqutam) <a href="https://twitter.com/Aqutam/status/1327441684116869121?ref_src=twsrc%5Etfw">November 14, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Arduino 、 Raspberry Pi などの基板を取り付け、配線しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24506/52ae284d-3aaf-d334-59db-e03537779c23.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24506/8677024c-067b-f91f-e1a3-4e48880f7706.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24506/da5d0ce2-e93f-7445-8361-6134be9dc1a8.png)

### ソフトウェア実装

コードの説明などは、別の記事で詳しく書きたいと思います。

Arduino と Raspberry Pi はUSB接続し、シリアル通信しています。
Raspberry Pi からCSV形式で Arduino に回転方向と速度を送っています。

```
0,45000 # 右に定速回転
1,10000 # 左に定速回転
2,6400 # 現在位置から右に指定したステップ数移動
3,3200 # 現在位置から左に指定したステップ数移動
```

Xbox One のコントローラーを Raspberry Pi と Bluetooth で接続しています。右スティックを左右に倒すと、倒し込み量を先程のCSV形式に変換して Arduino に制御を行っています。コントローラーの操作を処理する部分は、 Pygame を使いました。

## 結果

今はまだ左右に回転するだけの機能しかないのですが、下記の動画のように首振りできるリモートワークカメラができました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Xbox One のコントローラーで操縦できるようになってる。コントローラーは Raspberry Pi と Bluetooth でペアリングして、その倒し込み量に応じて Arduino にシリアルでコマンドを送っている。 <a href="https://t.co/21yDRInhgk">pic.twitter.com/21yDRInhgk</a></p>&mdash; たむーん (@Aqutam) <a href="https://twitter.com/Aqutam/status/1330492211876737025?ref_src=twsrc%5Etfw">November 22, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## 最後に

※この記事は [WESEEK Tips wiki](https://tips.weseek.co.jp/) に 2020/12/06 に投稿された記事の転載です。
Tips wiki では、IT企業の技術的な情報やプロジェクトの情報を公開可能な範囲で公開してます。