プログラムで音を検知するには、マイクに対して発した音を検出することで「音が鳴った」ことを知ることができます。
クムクムロボットでは胴体の右側(向かって左側)にある黒い部分がマイクです。
マイクで音を検知するための情報
VS CodeでPythonプログラムのプロジェクトやソースファイルを作成する方法については「5. VS CodeによるPythonプログラムの開発」を確認してください。
Pythonプログラムから直接QumcCommLib.dllを呼び出す場合は、「3.Qumcum PythonライブラリでコントロールできるAPI仕様(QumCommLib.dll呼出し)」にあるマイクの計測値を取得する”qumcomm_get_mic_value()”を確認してください。
Pythonプログラムからqumcum.pyを経由して呼び出す場合は、「2.Qumcum PythonライブラリでコントロールできるAPI仕様」にあるマイクの計測値を取得する”qumcum.get_mic_value()”を確認してください。
クムクムロボットと接続する方法についての説明は、「4.クムクムロボットとの接続~LEDの点灯」を参考にしてください。
Pythonプログラムから直接QumcCommLib.dllを呼び出す
コード全体はこのようになります。
※ここで、QumcCommLib.dllはこれから作成し、実行するPythonプログラムのコードと同じフォルダに置いていることを前提としています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
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) mic_val = c_int() for num in range(100): dll.qumcomm_get_mic_value(h, byref(mic_val)) print(mic_val.value) time.sleep(0.1) # Qumcumから切断 dll.qumcomm_end(h) |
19行目から22行目までが超音波センサから計測した値を取得する処理で下記の部分になります。
1 2 3 4 |
for num in range(100): dll.qumcomm_get_mic_value(h, byref(mic_val)) print(mic_val.value) time.sleep(0.1) |
こちらはループを用いて100回計測を行っています。
ループの中でqumcomm_get_senser_value()を呼出し、mic_valに計測結果を取得してprint(mic_val.value)で取得した値を表示しています。
time.sleep(0.1)で0.1秒(100msec)ほど間隔を置いています。あまり頻繁に通信を行うとPCに負荷がかかるので負荷がかからないように100msecの間隔をとっています。
Pythonプログラムからqumcum.pyを経由して呼び出す
コード全体はこのようになります。
※ここで、QumcCommLib.dll、qumcum.pyはこれから作成し、実行するPythonプログラムのコードと同じフォルダに置いていることを前提としています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import qumcum import time # Qumcumと接続 qumcum.connect("COM5") mic_val = [0] for num in range(100): # Get Mic Value qumcum.get_mic_value(mic_val) print(mic_val[0]) qumcum.wait(0.1) # Qumcumから切断 qumcum.end() |
9行目から13行目までが超音波センサから計測した値を取得する処理で下記の部分になります。
1 2 3 4 5 |
for num in range(100): # Get Senser qumcum.get_sensor_value(mic_val) print(mic_val[0]) qumcum.wait(0.1) |
こちらはループを用いて100回計測を行っています。
mic_valは配列としています。pythonで関数から引数経由で値を取得するには配列などを用います。
ループの中でqumcum.get_sensor_value()を呼出し、mic_valに計測結果を取得してprint(mic_val[0])で取得した値を表示しています。
qumcum.wait(0.1)で0.1秒(100msec)ほど間隔を置いています。あまり頻繁に通信を行うとPCに負荷がかかるので負荷がかからないように100msecの間隔をとっています。