LoginSignup
71
66

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-03-14

はじめに

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

001.jpg

ラジコンカー関連の記事

紹介する内容

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

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

最終的な目標

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

rajikon-qiita1.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ロボットシャーシキット
ピンソケット2x20(40P) 1セット 背の高いラズパイ用スタッキングコネクタをつかうのもの手です
JST-XHコネクタ 5セット IZOKEE JST-XHコネクタキットを使用しました
電池ケース単3x6本 1セット 単3x4本でもいいかもしれません
ユニバーサル基板(26x31) 1セット -
コード 必要に応じて -

作業手順

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

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

モーターとはんだ付け

002.PNG

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

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

item top view bottom view
ラズパイの固定 005.PNG 006.PNG
電池ケースの固定 003.PNG 004.PNG

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

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

007.PNG

参考

side view bottom view
007_2.PNG 007_3.PNG

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

008.PNG

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

001.jpg

動作を確認する

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

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

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)

さいごに

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

参考

  • -
71
66
0

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
71
66