8.超音波距離センサーで距離を測る

クムクムプログラミング

超音波距離センサは、超音波を用いて対象物から反射した超音波が返ってくるまでの時間から対象物までの距離を測ることができるものです。
クムクムでは頭部にある目のようなものが超音波距離センサになります。
計測処理中にこの部分に手や物を近づけたり話したりすることで計測した距離を確認することができます。

超音波距離センサーで距離を測るための情報

VS CodeでPythonプログラムのプロジェクトやソースファイルを作成する方法については「5. VS CodeによるPythonプログラムの開発」を確認してください。

Pythonプログラムから直接QumcCommLib.dllを呼び出す場合は、「3.Qumcum PythonライブラリでコントロールできるAPI仕様(QumCommLib.dll呼出し)」にある超音波センサの計測値を取得する”qumcomm_get_sensor_value()”を確認してください。

Pythonプログラムからqumcum.pyを経由して呼び出す場合は、「2.Qumcum PythonライブラリでコントロールできるAPI仕様」にある超音波センサの計測値を取得する”qumcum.get_sensor_value()”を確認してください。

クムクムと接続する方法についての説明は、「4.クムクムとの接続~LEDの点灯」を参考にしてください。

Pythonプログラムから直接QumcCommLib.dllを呼び出す

コード全体はこのようになります。

※ここで、QumcCommLib.dllはこれから作成し、実行するPythonプログラムのコードと同じフォルダに置いていることを前提としています。

import os
import time
from ctypes import *

# DLLのフォルダにカレントディレクトリを追加します
os.add_dll_directory(os.getcwd())

# DLLをロードします
dll = cdll.QumCommLib

# COMポートの番号文字列を生成
port = c_char_p('COM5'.encode('utf-8'))

# Qumcumと接続
h = dll.qumcomm_connect(port, 115200)

dist = c_int()

for num in range(100):
dll.qumcomm_get_sensor_value(h, byref(dist))
print(dist.value)
time.sleep(0.1)

# Qumcumから切断
dll.qumcomm_end(h)

 

19行目から22行目までが超音波センサから計測した値を取得する処理で下記の部分になります。

for num in range(100):
dll.qumcomm_get_senser_value(h, byref(dist))
print(dist.value)
time.sleep(0.1)

こちらはループを用いて100回計測を行っています。
ループの中でqumcomm_get_senser_value()を呼出し、distに計測結果を取得してprint(dist.value)で取得した値を表示しています。
time.sleep(0.1)で0.1秒(100msec)ほど間隔を置いています。あまり頻繁に通信を行うとPCに負荷がかかるので負荷がかからないように100msecの間隔をとっています。

Pythonプログラムからqumcum.pyを経由して呼び出す

コード全体はこのようになります。

※ここで、QumcCommLib.dll、qumcum.pyはこれから作成し、実行するPythonプログラムのコードと同じフォルダに置いていることを前提としています。

import qumcum
import time

# Qumcumと接続
qumcum.connect("COM5")

dist = [0]

for num in range(100):
# Get Senser
qumcum.get_senser_value(dist)
print(dist[0])
qumcum.wait(0.1)

# Qumcumから切断
qumcum.end()

 

9行目から13行目までが超音波センサから計測した値を取得する処理で下記の部分になります。

for num in range(100):
# Get Senser
qumcum.get_sensor_value(dist)
print(dist[0])
qumcum.wait(0.1)

こちらはループを用いて100回計測を行っています。
distは配列としています。pythonで関数から引数経由で値を取得するには配列などを用います。
ループの中でqumcum.get_sensor_value()を呼出し、distに計測結果を取得してprint(dist[0])で取得した値を表示しています。
qumcum.wait(0.1)で0.1秒(100msec)ほど間隔を置いています。あまり頻繁に通信を行うとPCに負荷がかかるので負荷がかからないように100msecの間隔をとっています。