2017
03.15

圧力センサでワカサギの引きを検知する

Internship

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

先日の桧原湖の釣行で見事1匹釣ることができて少し嬉しいです。今後の目標は2ケタくらい釣ることかなあと思っています。

本日の作業内容としては、先日の釣りで得られたデータをもとに、アタリの取り方に改良を加えるということでした。

当初は加速度センサーを用いてワカサギのアタリを取るというものでしたが、判定がシビアでアタリが取りづらいものでした。

そこで考えられたのが、前回のワカサギ釣りで実績のあった圧力センサを使ったものです。

 圧力センサでアタリを取る

先日、同じインターン生の並木くんが書いた記事の機構を使っています。

魚が餌を食べている時などは自然と釣り糸に負荷がかかり、糸が張ります。大きめの魚ならばこれでいいのですが、ワカサギなどの小さな魚の場合、どうしても力が足りず、アタリを取るのが難しくなります。そのため並木くんはテコの原理を使って、圧力を増幅させることができました。

今回はこれを実際に「見える」形にしました。Raspberry piに繋がれたセンサから値を取得し、任意の時間で取得できたデータを使って実際にグラフ化、魚を模した引きがどのように表示されるかがわかるようになります。

 

サンプルコード

 

#!/usr/bin/env python
# coding: utf-8

# This program acquires and displays the pressure sensor value
# And plot graph 

import RPi.GPIO as GPIO
import spidev
import time
import sys

#import numpy and matplotlib for plot graph.
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

adc_list = []

# A0コネクタにTouchを接続
TOUCHPIN = 0

# GPIOポートを設定
GPIO.setwarnings(False)
GPIO.setmode( GPIO.BCM )
GPIO.setup( LEDPIN, GPIO.OUT )
                                                                 
spi = spidev.SpiDev()
spi.open(0,0)

def readadc(channel):
    adc = spi.xfer2([1,(8+channel)<<4,0])
    data = ((adc[1]&3) << 8) + adc[2]
    adc_list.append(data)
    return data

def arduino_map(x, in_min, in_max, out_min, out_max):
    return (x - in_min) * (out_max - out_min) // (in_max - in_min) + out_min

if __name__ == '__main__':
    try:
        while True:
            data = readadc(TOUCHPIN)
            adc_list.append(data)   #ここで配列を追加していく、この結果をmatplotlibに入れることによってグラフが出力される
            value = arduino_map(data, 0, 1023, 100, 0)
            LED.ChangeDutyCycle(value)
            time.sleep( 0.01 )
    except KeyboardInterrupt:  #停止してからグラフの描写へ入る、 print adc_list は具体的な数値が知りたいときのために書いてある。
        LED.stop()
        GPIO.cleanup()
        spi.close()
        #print adc_list
        plt.plot(adc_list)
        plt.ylim([0,1500]) #yの範囲は1500までと設定
        plt.show()
        sys.exit(0)

これを実際に釣竿についている状態で、ワカサギの引きを真似ると、このようなグラフが出力されます。

なぜか圧力センサが反応しません、この原因を探ると、意外な部分に落とし穴がありました。

実はセンサーと竿を固定する緑色で囲った部分に隙間があり、部品とセンサが一緒に動いてしまい、きちんと値が取得できないという状況でした。
これをきちんと取得できるようにするために隙間を埋める必要があります。

そのために、急遽3Dプリンターを使用した際のサポートをニッパで切り取り、差し込みました。

これによって、センサで値を取得するとき、センサが固定され、値がきちんと取得できるようになりました。

下の画像は何もないとき(ワカサギが餌を食べていないとき)のグラフです。
圧力は約950付近を指しているのがわかると思います。

実際に手で糸を引くなどして、ワカサギの引きを作った際のものがこちらです。
圧力センサの値が平常時よりも高い部分は、不具合ではなく、釣竿が上にしなったことにより、一時的に圧力が下がったことが原因と考えられます。

この場合、圧力を検知すると値が小さくなるので、このグラフの「谷」の部分が魚が引いたということになります。判定を可視化することができるようになります。
このプログラムなどを参考に今後はDeep Learningに活用できるようにしていきたいと思います。今後の課題としては、引きがもう少し分かりやすいようなグラフを出すようにプログラムを改良していきたいです。

Comment

  1. No comments yet.

  1. No trackbacks yet.

You must be logged in to post a comment.