2017
02.27

モータードライバーの制御と今日の活動

Internship

インターン生の深谷(大学1年)です。

私達が現在作成中である「AIワカサギ釣り竿」の基本構成は、2つの要素により構成されます。1つ目はAIでワカサギの引きかどうかを判断する機能、2つ目はRaspberry Piでサーボやモーターを制御してワカサギを釣り上げる機能です。

これらの機能を実現するためには、ハードウェア・ソフトウェアを問わない、複数の技術の組み合わせによる開発が必要になってきます。

今日は、インターン生各々が一つの目標のため様々な内容の作業を行いました。

<作業内容>
・モータードライバーの制御
・機械学習のためのデータ取得のためのコード・装置作成
・モーターの回転数の計測方法の検証
・Raspberry Pi Imageの作成

<技術説明>
その中でも今回はリール巻き上げの制御をするモータードライバーについて取り上げて説明していきます。

モータードライバーには主に
・モーターへの入力をするためのモーター電源
・ドライバー自体を動かすためのロジック電源
・モーターを制御するための制御電源
を入力してモーターの動きを制御します。

今回、モーターは9Vで動かしRaspberry Piから制御電源をとる設計になっていますが出力が9Vに到達しない問題が発生しました。

検証したところモーターを制御するための制御電源が、3.3Vである事が原因のようでした。その後、データシートを調べた結果、やはり制御電源の値までしか出力できないことが判明。

最終的にこの問題はレベルコンバーターを利用することで解決しようと決まりました。

<サンプルコード>

# coding: utf-8
import RPi.GPIO as GPIO
import time

MOTORPIN1 = 4
MOTORPIN2 = 5
MOTOR_LEVEL_PIN = 18

GPIO.setwarnings(False)
GPIO.setmode( GPIO.BCM )
GPIO.setup(MOTOR_LEVEL_PIN, GPIO.OUT )
GPIO.setup(MOTORPIN1, GPIO.OUT )
GPIO.setup(MOTORPIN2, GPIO.OUT )
GPIO.setup(17, GPIO.OUT )

# PWM/100Hzに設定
MOTOR_LEVEL = GPIO.PWM(MOTOR_LEVEL_PIN, 100)
# 初期化
MOTOR_LEVEL.start(0)

if __name__ == '__main__':
 try:
# 基準用の3.3Vを出力
 GPIO.output( 17, True )
# 待機
 time.sleep(1)
# 巻き上げ方向にモータを回転
 GPIO.output( MOTORPIN1, False )
 GPIO.output( MOTORPIN2, False )
 GPIO.output( MOTORPIN1, False )
 GPIO.output( MOTORPIN2, True )
# 出力は100%
 MOTOR_LEVEL.ChangeDutyCycle(100)
# 12秒間回転
 time.sleep(12)
# 停止
 GPIO.output( MOTORPIN1, False )
 GPIO.output( MOTORPIN2, False )
 GPIO.output( MOTORPIN1, True )
 GPIO.output( MOTORPIN2, True )
 except KeyboardInterrupt:
 GPIO.cleanup()
 sys.exit(0)

<作業風景>
その他作業でも問題点はありましたが各自が解決法を工夫することで目標を達成できるよう努めました。


(データ取得のためにワカサギがかかった時の竿の動きを動画を参考にして人力で再現)
本物のワカサギがいればいいのですがなかなか難しいようです。。。


(モーターにつける軸にスリットを入れて左右の赤外線LEDと赤外線センサーを利用して回転数を計測できないか検証)
想定の速さでの計測は成功。今後装置を作り実用できるようにしたいです。

Comment

  1. No comments yet.

  1. No trackbacks yet.

You must be logged in to post a comment.