2017
03.07

Raspberry piによる回転数の取得

AI + IoT, Internship

赤外線センサによる回転数の取得

 

インターン生の会津大学 学部一年 芳賀(はが)です。

本日、GClueの目の前にある会津大学では、一般入試の合格発表が行われていました。会津大学に合格してから、もう一年経つということの時間の早さに少し驚いています。 今日は新入生の頃の気持ちに戻り、気分を引き締めてインターンに望んでいます。

本日の作業内容

  • 赤外線センサによる回転数の取得
  • Arduinoの写真撮影
  • モータードライバによるモーター制御

赤外線センサによる回転数の取得

現在作成中である「AIワカサギ釣り竿」の基本構成は、2つの要素により構成されます。

1つ目はAIでワカサギの引きかどうかを判断する機能、2つ目はRaspberry Piでサーボやモーターを制御してワカサギを釣り上げる機能です。今回はワカサギを釣り上げる機構に関する作業です。

リールの回転数を取得する

魚釣りの用語に「タナ」というものがあります。これは水中で魚がいる層のことで、これをうまく把握すれば「大漁」というのも夢ではありません。

実際、ワカサギ釣りでタナを知っている人が釣りをすると100匹をゆうに超える釣果があるそうです。

リールが一回転するときに巻かれる糸の長さはほぼ一定、ということは回転数を知ることができれば、今糸が何mリールから出ているかということがわかります。

これを応用すれば、ワカサギが釣れているタナを直接知ることができ、釣果に繋がることになります。

<今回使ったパーツ、技術>
  • Raspberry pi 3
  • フォトリフレクタ (LB-127HLD)
  • 330Ω抵抗 (LED用) * 1
  • 1kΩ抵抗 (昇圧用) * 1

このような配線になります。

フォトリフレクタを使用した回路

<コード 内容>

今回参考にさせていただいたサイトはこちらです。

小型で安価な回転角を検出する装置

http://ichiro-maruta.blogspot.com/2010/02/blog-post.html)

また、回転数を得るために作成した装置は以下の画像を参照してください

フォトリフレクタ部分
赤外線が返ってくる量でデータを取得

ホールセンサ部分 磁石の有無で回転数を得る

この装置を使い、赤外線センサとホールセンサでどれほどの誤差があるのかというのを計測しました。

赤外線センサ側のコードは以下のようになっています。

import RPi.GPIO as GPIO
import spidev
import time
import sys
import numpy as np
import matplotlib.pyplot as plt 

#下のmatplotlibはjupyterの時必要となる
#%matplotlib inline
#for jupyter
LEDPIN = 12
SENPIN = 0

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(LEDPIN,GPIO.OUT)
LED = GPIO.PWM(LEDPIN,100)
val = 0
spi = spidev.SpiDev()
spi.open(0,0)
dis_list = np.array([])
dis_array = []
fl=0
co = 0

def readadc(channel):
    adc = spi.xfer2([1,(8+channel)<<4,0])
    data = ((adc[1]&3)<<8)+adc[2] return data if __name__ == '__main__': try: while True: LED.ChangeDutyCycle(val % 100) val += 1 data = readadc(SENPIN) if data > 250 and fl==0:
                fl=1
            elif data >600 and fl == 1:
                fl=2
            elif data < 250 and fl == 2:
                fl=0
                co+=1
                print co
            
            dis_array.append(data)
            time.sleep(0.001)
        
    except KeyboardInterrupt:
        GPIO.cleanup()
        print co
        plt.plot(dis_array)
        plt.show()
        sys.exit(0)

このコードを実行し、実際にサイトで行われていたように計測をすると、回転数と反射して帰ってくる光の強さをグラフにしたもの(下図)が取得できます。

実際に確かかを調べるために、回転軸の方に磁力センサを設置し、同条件で計測したところ

  • 低速(約120rpm)では回転数が一致
  • 高速(約300rpm)では回転数の誤差は1回転少なかった(紙などの外部要因が誤差の原因)

という確かな結果を得ることができました。(一秒間2回転、一秒間5回転をrpm換算)

詳しくは GClueのGitHub上に公開されています。

磁力センサとフォトリフレクタによる回転数の取得

http://docs.fabo.io/fabo/rasppi/measure_rot/measure.html )

 

釣果を左右する部分でもあるのでここはしっかりと作成をしておきたいです。

Comment

  1. No comments yet.

  1. No trackbacks yet.

You must be logged in to post a comment.