Raspberry Pi 3でpythonを使いモータードライバーを使いモータを制御する!

More than 1 year has passed since last update.

はじめに

「優しいIT」という理念の基、ITコンサルタントをしている亀井亮介と申します!
現在、仕事では要求分析・要件定義を中心に上流工程をしていますが、プログラムも書きます!
優しいIT活動の一環として「教育用ようにプログラミング可能なPCを安価に提供する」理念の「Raspberry Pi 3(通称ラズパイ)」の紹介をします!
今回は、モータを制御します!これを応用すれば、ラズパイでラジコンの出来上がりです!

手順

  1. 配線
  2. プログラム motor.py
  3. プログラムを動かす

1. 配線

配線図は、ラズパイマガジン-2016年6月号 特集1 アキバの人気パーツ 配線図ベスト17 ⑨モータを自在に回せるそのままです。

写真は下記の通りです。かなり分かりにくいかと…。
ラズパイ×モーター配線図

一応動画にもしました。こちらも分かりにくいですかね…
動画解説クリック→

テキストに起こしてみました。
ラズパイから見た配線

  • ラズパイ 2番ピン(5V) - モータードライバー 7番(Vcc)
  • ラズパイ 16番ピン(GPIO23) - モータードライバー 5番(IN1)
  • ラズパイ 18番ピン(GPIO24) - モータードライバー 6番(IN2)
  • ラズパイ 6番ピン(GND) - モータードライバー 1番(GND) - 電池のマイナス側

モータードライバーから見た配線

  • モータードライバー 4番(Vref) - 抵抗5.1kΩ - モータードライバー 8番(Vs)
  • モータードライバー 8番(Vs) - 電池のプラス側
  • モータードライバー 2番(OUT1) - DCモーター
  • モータードライバー 10番(OUT2) - DCモーター

その他

  • コンデンサー - DCモーター
  • コンデンサー - DCモーター

※写真と動画ではつないでません。用途は雑音抑制です。

2. プログラム motor.py

プログラムはラズパイマガジン-2016年6月号 特集1 アキバの人気パーツ 配線図ベスト17 ⑨モータを自在に回せるをもとに、引数を入力できるように変えています。

GitHubにソースをアップしているので、お好きにお使いください。

gitでcloneする
$ git clone https://github.com/RyosukeKamei/raspberrypi3.git
motor.py
# GPIOを制御するライブラリ
import wiringpi
# タイマーのライブラリ
import time
# 引数取得
import sys

# GPIO端子の設定
motor1_pin = 23
motor2_pin = 24

# 引数
param = sys.argv

# 第1引数
# go : 回転
# back : 逆回転
# break : ブレーキ
order = param[1]

# 第2引数 秒数
second = int(param[2])

# GPIO出力モードを1に設定する
wiringpi.wiringPiSetupGpio()
wiringpi.pinMode( motor1_pin, 1 )
wiringpi.pinMode( motor2_pin, 1 )

if order == "go":
    if second == 0:
        print("回転 止めるときはbreak 0コマンド!")
    else:
        print(str(second)+"秒回転")
    wiringpi.digitalWrite( motor1_pin, 1 )
    wiringpi.digitalWrite( motor2_pin, 0 )
    time.sleep(second)
elif order == "back":
    if second == 0:
        print("逆回転 止めるときはbreak 0コマンド!")
    else:
        print(str(second)+"秒逆回転")    
    wiringpi.digitalWrite( motor1_pin, 0 )
    wiringpi.digitalWrite( motor2_pin, 1 )
    time.sleep(second)

# 第2引数が0の場合は、ブレーキをしない
# 第1引数がbreakの場合は、ブレーキ
if order == "break" or second != 0:
    print("ブレーキ!")
    wiringpi.digitalWrite( motor1_pin, 1 )
    wiringpi.digitalWrite( motor2_pin, 1 )

3. プログラムを動かす

動かしている様子を動画に収めました。
動画解説クリック→

3-1. 引数

プログラムは次のような形式です。
引数は第1引数、第2引数両方入力する必要があります。

プログラム
$ sudo python3 motor.py [第1引数:命令] [第2引数:秒数]

第1引数は

  • go
  • back
  • break

の3つです。どれかを入力してください。
(本当はこの3つ以外だとメッセージ表示とか制御が必要ですが、プログラムが複雑になるので省略します。)

第2引数は秒数です。
1と入れると1秒回転します。
0を入力した場合、次の命令で"break"されるまで回ります。

3-2. 回転 go

10秒回転
$ sudo python3 motor.py go 10
回転を続ける
$ sudo python3 motor.py go 0

3-3. 逆回転 back

10秒回転
$ sudo python3 motor.py back 10
回転を続ける
$ sudo python3 motor.py back 0

3-4. ブレーキ

ブレーキ
$ sudo python3 motor.py break 0

サイトマップ

Raspberry Pi 3 (ラズパイ)セットアップ

Raspberry Pi 3インストール→無線LAN→日本語入出力→Macから操作

Raspberry Pi 3 にDockerを乗せてPython+MySQL環境を構築!

RaspberryPi3(ラズパイ)にDockerをインストール
RaspberryPi3(ラズパイ)にDockerでPython+bottle+MySQL環境構築する!【簡単構築編】
RaspberryPi3(ラズパイ)にDockerでPython+bottle+MySQL環境構築する!【試行錯誤編】

Raspberry Pi 3でエアコン一体型パソコン「airpi」を作る!

Raspberry Pi 3でエアコン一体型パソコン「airpi」を作る!

Raspberry Pi 3 (ラズパイ)とpythonで遊ぼう

Raspberry Pi 3でプログラミングをする Node-REDと普通にプログラミング
Raspberry Pi 3でpythonを使いLEDを光らせる(Hello World)
Raspberry Pi 3でスイッチの状態を検出する
Raspberry Pi 3でpythonを使いサーボモータを動かす
Raspberry Pi 3でpythonを使いモータードライバーを使いモータを制御する!
Raspberry Pi 3でpythonを使いスライドスイッチを検出する!
Raspberry Pi 3でpythonを使い磁石スイッチを検出する!
Raspberry Pi 3でpythonを使い温度を検出する!
Raspberry Pi 3でpythonを使いブザーを鳴らす!
Raspberry Pi 3でpythonを使いA/Dコンバーターでアナログ信号を検出する!
Raspberry Pi 3でpythonを使い「明るさ」を検出する!
Raspberry Pi 3でpythonを使い「温度(A/Dコンバーターを利用)」を検出する!
Raspberry Pi 3でpythonを使い「7セグメントLED」に出力する!

テスト駆動開発を重点においた規則

コーディング規則「優しいコードを書こう」(FuelPHP)
命名規則「3ヶ月後の自分自身に優しく、チームに優しく、まだ見ぬメンバーに優しく」

Docker+PythonでWebアプリケーション開発

Docker上のCentOSにPython3と、関連ライブラリpip, virtualenvとフレームワークDjango, bottle, Flaskのインストール!これらをまとめたDockerfile付き!

開発しやすい環境構築(Docker+PHP)

Dockerを利用しApacheにPHP環境 + Eclipseを連携
Dockerを利用したFuelPHP開発環境構築
Docker利用したFuelPHP開発環境の初期設定とscaffoldを利用してCRUDスケルトン作成
FuelPHPのデータベースマイグレーション