Edited at

ついに…Raspberry Pi 3でpythonを使いラジコンを作る!(磁石を近づけるとモータが動き、自動で止まる)

More than 1 year has passed since last update.


はじめに

「優しいIT」という理念の基、ITコンサルタントをしている亀井亮介と申します!

現在、仕事では要求分析・要件定義を中心に上流工程をしていますが、プログラムも書きます!

優しいIT活動の一環として「教育用ようにプログラミング可能なPCを安価に提供する」理念の「Raspberry Pi 3(通称ラズパイ)」の紹介をします!

今まで、ラズパイを触っていたのは、娘(11と8)の夏休みの工作に、ラズパイでラジコンどうかなって思ったからです!(娘なのにラジコン?育て方がね…ふふふ)

結果的に、ラジコンを選んでくれるかどうかわかりませんが(笑)、試作をしてみます。

ボタン押している間モーターが動く」では、ボタンを押している間モータが動くようにしました。

応用編として磁石スイッチ(リードスイッチ)を使った「(磁石を近づけている間モータが動く)」を作りました。

ただ、この方法だと、モータを止めるときに車を追いかける必要があります。車があらぬ方向に行きそうで…ということで、磁石を近づけたら、モータが動き出し、しばらくすると自動的に止まるようにしました!

ラズパイマガジン-2016年6月号 特集1 アキバの人気パーツ 配線図ベスト17

ラズパイマガジン-2016年8月号 特集1 電子工作12の基本パターン

を見ながら、勉強して応用をしています。非常に参考になりました!


手順


  1. 配線

  2. プログラム Raspycon_ver2.py

  3. プログラムを動かす


1. 配線

回路の写真を参考までに、こんな感じというイメージになれば

ボタン押している間モーターが動く」と、「(磁石を近づけている間モータが動く)」と同じ回路です。

ついに…Raspberry Pi 3でpythonを使いラジコンを作る!(磁石を近づけるとモータが動く編)回路.jpg

動画にもしました

動画解説クリック→

テキストに起こしてみました。

ラズパイから見た配線


  • ラズパイ 1番端子(3.3V) - モータードライバー 8番ピン(Vs)

  • ラズパイ 2番端子(5V) - モータードライバー 7番ピン(Vcc)

  • ラズパイ 2番端子(5V) - リードスイッチ 左側

  • ラズパイ 16番端子(GPIO23) - モータードライバー 5番ピン(IN1)

  • ラズパイ 18番端子(GPIO24) - モータードライバー 6番ピン(IN2)

  • ラズパイ 6番端子(GND) - モータードライバー 1番ピン(GND) - 電池のマイナス側

  • ラズパイ 11番端子(GPIO17) - リードスイッチ 右側

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


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

  • モータードライバー 2番(OUT1) - DCモーター

  • モータードライバー 10番(OUT2) - DCモーター

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


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

  • リードスイッチ 中央 - GND


2. プログラム Raspycon_ver2.py

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


gitでcloneする

$ git clone https://github.com/RyosukeKamei/raspberrypi3.git



Raspycon_ver2.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 )

# スイッチの初期状態
switch_status = wiringpi.digitalRead(button_pin)

# whileの処理は字下げをするとループの範囲になる
while True:
# スイッチの状態を検知
print("スイッチの初期値", switch_status)
print("取得したスイッチの状態", wiringpi.digitalRead(button_pin))

# スイッチが変化したらモータを動かす
if( wiringpi.digitalRead(button_pin) != switch_status ):
print ("3秒だけモータを動かす")
# モーターを回転
wiringpi.digitalWrite( motor1_pin, 1 )
wiringpi.digitalWrite( motor2_pin, 1 )
time.sleep(3)
wiringpi.digitalWrite( motor1_pin, 1 )
wiringpi.digitalWrite( motor2_pin, 0 )
switch_status = wiringpi.digitalRead(button_pin)

# 0.5秒ごとにイベントキャッチ
time.sleep(0.5)



3. プログラムを動かす

動かしている様子を動画に収めました。

動画解説クリック→


磁石を近づけている間モータが動く

$ sudo python3 Raspycon_ver2.py


チョロQっぽくなりそうですね!


サイトマップ


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」に出力する!

Raspberry Pi 3でpythonを使いスイッチ制御でLEDを光らせる!

Raspberry Pi 3でpythonを使い暗くなったら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のデータベースマイグレーション