ラズパイにて、ラジコンカーを自作する－その１

# はじめに

ラズベリーパイにて、自作のラジコンカーをつくったので紹介します。

![001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559938/21399987-b9ef-ec8b-5bf4-93bf2923b0a4.jpeg)

## ラジコンカー関連の記事
- ラズパイにて、ラジコンカーを自作する－その１　←　本記事
- [ラズパイにて、ラジコンカーを自作する－その２](https://qiita.com/kotaproj/items/f1f93d598dbf99785bb4)
- [ラズパイにて、ラジコンカーを自作する－その３](https://qiita.com/kotaproj/items/0a4c919aa8883632f3d4)

# 紹介する内容

- モータードライバについて
- ラジコンの組み立て方法について

※今回は、ハードウェアのみ。制御の話は次の記事で記載します。

# 最終的な目標

スマートフォンやPCを介して、ラジコンを制御したいと思います。

![rajikon-qiita1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559938/4b184ca8-2798-f777-2a13-1e42c57b7ae8.png)

本記事の記載範囲は、ラジコンの組み立てが中心です。


# モータドライバ TA7291P

今回のラジコンカーには、DCブラシモータを使用します。
一般的なDCブラシモータは、乾電池などの電源につなぐと一定方向に回転します。
逆に回転させる場合は、電源の極性を逆するにする必要があります。
この切り替え動作を行うための回路が必要となります。
そこで、今回は、モータドライバ TA7291Pを使用します。

TA7291Pは、2つの入力信号によって、
正転（前進）/逆転（バック）/ストップ/ブレーキを制御することができます。
また、PWM制御によって、回転数を調整できます。
各ピンの役割は、以下のようになります。

|PIN  |端子番号|端子説明  |
|---|---|---|
|1  | GND  | ラズパイと電池のGNDと共有                              |
|2  | OUT1 | モータに接続する                                       |
|3  |      | 接続しません                                           |
|4  | Vref | モーター側出力制御用。ラズパイのGPIO(PWM制御)に接続する |
|5  | IN1  | 入力端子。ラズパイGPIO(OUT)に接続する                  |
|6  | IN2  | 入力端子。ラズパイGPIO(OUT)に接続する                  |
|7  | Vcc  | 制御回路用電源端子。ラズパイの5vに接続する             |
|8  | Vs   | モーター側電源(電池)の+する                            |
|9  |      | 接続しません                                           |
|10 | OUT2 | モーターに接続する                                     |


今回作るラジコンカーは、前進およびバックさせます。
ラズパイ側からの制御は、以下のような感じです。

| IN1 | IN2 | OUT1 | OUT2 | モータ動作 |
|---|---|---|---|---|
| 0 | 0 | ∞ | ∞ | ストップ |
| 1 | 0 | H | L | 正方向(前進)     |
| 0 | 1 | L | H | 逆方向(バック) |
| 1 | 1 | L | L | ブレーキ |


# 作業環境

- ラズベリーパイ3
    - Raspbian Buster with desktop and recommended software
        - Version:February 2020
        - Release date:2020-02-13
        - Kernel version:4.19
        - Python3.7


# 機材

※型名が購入先のリンクになっています。

|項目  |数量|備考  |
|---|---|---|
| ラズベリーパイ3           |指定なし   |     |
| モータドライバTA7291P | 4個 | - |
| モータ＋シャーシタイヤキット |1セット   | [4WDロボットシャーシキット](https://www.amazon.co.jp/gp/product/B07F759T89/ref=ppx_yo_dt_b_asin_title_o02_s00?ie=UTF8&psc=1) |
| ピンソケット2x20(40P) | 1セット   | 背の高いラズパイ用スタッキングコネクタをつかうのもの手です |
| JST-XHコネクタ | 5セット      | [IZOKEE JST-XHコネクタキット](https://www.amazon.co.jp/gp/product/B071XV8LRB/ref=ppx_yo_dt_b_asin_title_o04_s00?ie=UTF8&psc=1)を使用しました |
| 電池ケース単3x6本     | 1セット     | 単3x4本でもいいかもしれません |
| ユニバーサル基板(26x31)     | 1セット     | - |
| コード     | 必要に応じて     | - |


# 作業手順

## モータ＋シャーシタイヤキットを組み立てる

付属されている取説に沿って、組み立てを行います。
組み立て自体に詰まることはありませんが、
モーターとコードをはんだ付けする必要があります。

### モーターとはんだ付け

![002.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559938/7c1bc5f4-217e-49fb-2d85-eaf2a28b86b9.png)


### ラズベリーパイおよび電池ケースの固定

付属されたシャーシには、固定するためのネジ穴があります。
（無理やりですが、）ラズベリーパイと電池ケースを固定しました。


| item | top view | bottom view |
|---|---|---|
| ラズパイの固定   |![005.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559938/f8c9cd43-4fe0-2103-c466-7578d2ce321b.png) | ![006.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559938/8e689ac9-c21b-8962-32f4-a368fe89ec61.png) |
| 電池ケースの固定 |![003.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559938/05920b1d-bfe9-ca81-65d4-6669ab9badd0.png) | ![004.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559938/1ed69c2b-c874-9965-506e-06df42fe1c6c.png) |


## ラズパイ用のハットを作成する

以下のようなハットを作成しました。


![007.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559938/5e905393-87b3-0525-45b4-1dd0bf74e0f3.png)

参考

| side view | bottom view |
|---|---|
|![007_2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559938/e481e4f4-2435-1601-3540-1151836e021c.png)|![007_3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559938/1da615c7-a1db-8e3c-069c-f6335f13b7ea.png)|



各デバイス間の接続は、以下のようにしました。

![008.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559938/74023e6a-aa5a-e7e9-c7dc-09940d11f507.png)

組み立てると、↓のようになります。

![001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559938/21399987-b9ef-ec8b-5bf4-93bf2923b0a4.jpeg)


## 動作を確認する

※本記事では、簡単な確認のみ行います。
　次回の記事で、もう少し掘ろうと思います。

下記のコードで、左前のタイヤが動作します。

```
import time
import RPi.GPIO as GPIO

FRONT_LEFT_WHEEL_PIN_A = 17
FRONT_LEFT_WHEEL_PIN_B = 4
FRONT_LEFT_WHEEL_PWMPIN = 27

# FRONT_RIGHT_WHEEL_PIN_A = 18
# FRONT_RIGHT_WHEEL_PIN_B = 23
# FRONT_RIGHT_WHEEL_PWMPIN = 24

# REAR_LEFT_WHEEL_PIN_A = 6
# REAR_LEFT_WHEEL_PIN_B = 13
# REAR_LEFT_WHEEL_PWMPIN = 19

# REAR_RIGHT_WHEEL_PIN_A = 20
# REAR_RIGHT_WHEEL_PIN_B = 12
# REAR_RIGHT_WHEEL_PWMPIN = 21



GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)

GPIO.setup(FRONT_LEFT_WHEEL_PIN_A, GPIO.OUT)
GPIO.output(FRONT_LEFT_WHEEL_PIN_A, GPIO.LOW)
		
GPIO.setup(FRONT_LEFT_WHEEL_PIN_B, GPIO.OUT)
GPIO.output(FRONT_LEFT_WHEEL_PIN_B, GPIO.LOW)
		
GPIO.setup(FRONT_LEFT_WHEEL_PWMPIN, GPIO.OUT)
GPIO.output(FRONT_LEFT_WHEEL_PWMPIN, GPIO.LOW)

pwm = GPIO.PWM(FRONT_LEFT_WHEEL_PWMPIN, 100)

print("go")
GPIO.output(FRONT_LEFT_WHEEL_PIN_A, GPIO.HIGH)
GPIO.output(FRONT_LEFT_WHEEL_PIN_B, GPIO.LOW)
time.sleep(3)

# spped down
pwm.start(80)
time.sleep(3)

print("brake")
GPIO.output(FRONT_LEFT_WHEEL_PIN_A, GPIO.HIGH)
GPIO.output(FRONT_LEFT_WHEEL_PIN_B, GPIO.HIGH)
time.sleep(3)

print("back")
GPIO.output(FRONT_LEFT_WHEEL_PIN_A, GPIO.LOW)
GPIO.output(FRONT_LEFT_WHEEL_PIN_B, GPIO.HIGH)
time.sleep(3)

print("stop")
GPIO.output(FRONT_LEFT_WHEEL_PIN_A, GPIO.LOW)
GPIO.output(FRONT_LEFT_WHEEL_PIN_B, GPIO.LOW)
time.sleep(3)
```

# さいごに

次の記事で、操作しやすいように制御を追加したいと思います。


# 参考

* -