はじめに
ラズベリーパイにて、自作のラジコンカーをつくったので紹介します。
ラジコンカー関連の記事
- ラズパイにて、ラジコンカーを自作する-その1 ← 本記事
- ラズパイにて、ラジコンカーを自作する-その2
- ラズパイにて、ラジコンカーを自作する-その3
紹介する内容
- モータードライバについて
- ラジコンの組み立て方法について
※今回は、ハードウェアのみ。制御の話は次の記事で記載します。
最終的な目標
スマートフォンやPCを介して、ラジコンを制御したいと思います。
本記事の記載範囲は、ラジコンの組み立てが中心です。
モータドライバ 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
- Raspbian Buster with desktop and recommended software
機材
※型名が購入先のリンクになっています。
項目 | 数量 | 備考 |
---|---|---|
ラズベリーパイ3 | 指定なし | |
モータドライバTA7291P | 4個 | - |
モータ+シャーシタイヤキット | 1セット | 4WDロボットシャーシキット |
ピンソケット2x20(40P) | 1セット | 背の高いラズパイ用スタッキングコネクタをつかうのもの手です |
JST-XHコネクタ | 5セット | IZOKEE JST-XHコネクタキットを使用しました |
電池ケース単3x6本 | 1セット | 単3x4本でもいいかもしれません |
ユニバーサル基板(26x31) | 1セット | - |
コード | 必要に応じて | - |
作業手順
モータ+シャーシタイヤキットを組み立てる
付属されている取説に沿って、組み立てを行います。
組み立て自体に詰まることはありませんが、
モーターとコードをはんだ付けする必要があります。
モーターとはんだ付け
ラズベリーパイおよび電池ケースの固定
付属されたシャーシには、固定するためのネジ穴があります。
(無理やりですが、)ラズベリーパイと電池ケースを固定しました。
item | top view | bottom view |
---|---|---|
ラズパイの固定 | ||
電池ケースの固定 |
ラズパイ用のハットを作成する
以下のようなハットを作成しました。
参考
side view | bottom view |
---|---|
各デバイス間の接続は、以下のようにしました。
組み立てると、↓のようになります。
動作を確認する
※本記事では、簡単な確認のみ行います。
次回の記事で、もう少し掘ろうと思います。
下記のコードで、左前のタイヤが動作します。
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)
さいごに
次の記事で、操作しやすいように制御を追加したいと思います。