LoginSignup
6
12

More than 5 years have passed since last update.

ついに…Raspberry Pi 3でpythonを使いラジコンを作る!(ボタン押している間モーターが動く)

Last updated at Posted at 2016-08-13

はじめに

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

今まで、ラズパイを触っていたのは、娘(11と8)の夏休みの工作に、ラズパイでラジコンどうかなって思ったからです!(娘なのにラジコン?育て方がね…ふふふ)
結果的に、ラジコンを選んでくれるかどうかわかりませんが(笑)、試作をしてみます。

今回はボタンを押している間モータを動くところまでを書きます!

磁石スイッチ(リードスイッチ)を使った記事もあります!
磁石を近づけている間モータが動く
磁石を近づけるとモータが動き、自動で止まる

ラズパイマガジン-2016年6月号 特集1 アキバの人気パーツ 配線図ベスト17
ラズパイマガジン-2016年8月号 特集1 電子工作12の基本パターン
を見ながら、勉強して応用をしています。非常に参考になりました!

手順

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

1. 配線

回路の写真を参考までに、こんな感じというイメージになれば
ついに…Raspberry Pi 3でpythonを使いラジコンを作る!(ボタン押している間モーターが動く編)回路.jpg

動画にもしました
動画解説クリック→

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

  • ラズパイ 1番端子(3.3V) - モータードライバー 8番ピン(Vs)
  • ラズパイ 2番端子(5V) - モータードライバー 7番ピン(Vcc)
  • ラズパイ 16番端子(GPIO23) - モータードライバー 5番ピン(IN1)
  • ラズパイ 18番端子(GPIO24) - モータードライバー 6番ピン(IN2)
  • ラズパイ 6番端子(GND) - モータードライバー 1番ピン(GND) - 電池のマイナス側
  • ラズパイ 11番端子(GPIO17) - ボタンスイッチ 左側 - ボタンスイッチ右側 - 抵抗(1kΩ) - ラズパイ 9番端子(GND)

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

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

その他(画像と動画では付けていません)

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

2. プログラム Raspycon_ver1.py

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

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

# ボタンスイッチを繋いだGPIOの端子番号
button_pin = 17 # 11番端子
# GPIO端子の設定
motor1_pin = 23 # 16番端子
motor2_pin = 24 # 18番端子

# GPIO初期化
wiringpi.wiringPiSetupGpio()

# ボタンスイッチを入力モード(0)に設定
wiringpi.pinMode( button_pin  , 0 )

# モータードライバーは出力モード(1)に設定
wiringpi.pinMode( motor1_pin, 1 )
wiringpi.pinMode( motor2_pin, 1 )


# 端子に何も接続されていない場合の状態を設定
# 3.3Vの場合には「2」(プルアップ)
# (0Vの場合は「1」と設定する(プルダウン))
wiringpi.pullUpDnControl( button_pin  , 2 )

# whileの処理は字下げをするとループの範囲になる
while True:
    # GPIO端子の状態を読み込む
    # ボタンを押すと直進
    # GPIOの状態が0V(0)であるか比較
    if( wiringpi.digitalRead(button_pin) == 1 ):
        # ボタンを離している時は「3.3V(1)」
        # (1の場合に停止というのもわかりにくい)
        print ("停止")
        # モーターを停止
        wiringpi.digitalWrite( motor1_pin, 1 )
        wiringpi.digitalWrite( motor2_pin, 0 )
    else:
        # ボタンを押している時は「0V(0)」
        print ("直進")
        # モーターを回転
        wiringpi.digitalWrite( motor1_pin, 1 )
        wiringpi.digitalWrite( motor2_pin, 1 )
    time.sleep(0.5)

3. プログラムを動かす

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

ボタンを押している間モータが動く
$ sudo python3 Raspycon_ver1.py

磁石スイッチ(リードスイッチ)を使ったら面白そうということで、下記の記事も参考にどうぞ〜
磁石を近づけている間モータが動く
磁石を近づけるとモータが動き、自動で止まる

サイトマップ

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

Raspberry Pi 3インストール→無線LAN→日本語入出力→Macから操作
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」に出力する!
Raspberry Pi 3でpythonを使いスイッチ制御でLEDを光らせる!
Raspberry Pi 3でpythonを使い暗くなったらLEDを光らせる!
ついに…Raspberry Pi 3でpythonを使いラジコンを作る!(ボタン押している間モーターが動く編)

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

コーディング規則「優しいコードを書こう」(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のデータベースマイグレーション

6
12
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
6
12