以下に、添付図面を参照しながら、本発明に係るメトロノームの好適な実施形態について詳細に説明する。なお、以下の説明および添付図面において、略同一の機能構成を有する構成要素については、同一の符号を付することにより重複説明を省略することにする。
図1は、本発明の本実施の形態に係るメトロノーム1の機能ブロック構成を示す図である。図2は、メトロノーム1の外観を示す図である。図3は、指示棒2の動作機構を示す正面図であり、図4は指示棒2の動作機構を示す側面図である。
図1に示すように、メトロノーム1は、指示棒2、原点検出センサ3(センサ)、回転運動変換部4、ステッピングモータ5、ステッピングモータ駆動部6、制御部7、記憶部8、操作部9、表示部10、スピーカ駆動部11、スピーカ12等から構成される。
制御部7は、ステッピングモータ駆動部6、ステッピングモータ5、回転運動変換部4を介して指示棒2の往復回動を制御する。また、制御部7は、マイコン等であり、CPU(Central Processing Unit)、ROM(Read Only Memory)、RAM(Random Access Memory)、I/Oポート等で構成される。制御部7のCPUは、ROM等に格納されるプログラムをRAM上のワークメモリ領域に呼び出して実行し、ステッピングモータ駆動部6、原点検出センサ3、記憶部8、操作部9、表示部10、スピーカ駆動部11、スピーカ12の動作を制御し、後述する各種処理を実現する。
図2に示すように、指示棒2は盤13上を左右に回動することによって拍子を刻む指針である。指示棒2の回動周期等は、操作部9から音楽練習者等の入力を受け付けることによって設定される。
メトロノーム1に指示を与える操作部9はメトロノーム1の筐体に備え付けられている複数のスイッチ等である。なお、操作部9は、メトロノーム1の筐体とは別体のリモコン操作機からの指示信号を受信し、その指示信号を制御部7に伝えるインターフェース機能を果たすものであってもよい。
制御部7は、操作部9からの入力を受け付けて設定テンポに応じた駆動パルス送出タイミングを算出し、そのタイミングで後述するタクト(指示棒)の回動制御処理に従ってステッピングモータ駆動部6を制御する。
記憶部8は、ROM、RAM、ハードディスクなどであり、制御部7が実行するプログラム、プログラム実行に必要なデータ、操作部9によって入力されたデータ等が格納される。
表示部10は、操作情報、操作部9によって入力されたデータ、現在の設定状況等を表示する。メトロノーム1が指示棒2を回動し、メトロノームとして動作する場合、表示部10は、例えば、現在演奏中の拍子等を表示することが可能である。
スピーカ駆動部11は、操作部9を通じて設定されているテンポ情報など指示棒2の回動タイミングと関連した情報が入力され、スピーカ12に出力する。スピーカ12は、スピーカ駆動部11から出力された拍子を刻む拍音等を発音する。また、スピーカ12は、「操作部9を通して指示入力が受け付けられた」、「動作エラーが検出された」、ということ等を音声でも通知可能としている。
ステッピングモータ駆動部6は、駆動パルスを発生し、駆動パルスをステッピングモータ5に入力し、ステッピングモータ5から回転トルクを出力させる。回転運動変換部4は、ステッピングモータ5から出力された回転トルクを伝達する歯車を有する。そして、指示棒2は、回転運動変換部4に固定され、歯車の回転運動が伝達されることにより回動する。
図3、図4に示す通り、ステッピングモータ駆動部6はパルス信号を発生し、ステッピングモータ5から時計回りあるいは反時計回りの回転トルクを出力させる。ステッピングモータ5からの回転トルクは、複数の歯車から構成される回転運動変換部4により回転が減速され、トルク変換される。回転運動変換部4は通常ギアボックスの形態で実現される。そして回転運動変換部4の出力軸にねじ等の固定部14によって固定支持された指示棒2に伝達され、指示棒2を回動させる。
原点検出センサ3は、指示棒2の回動範囲において指示棒2が原点位置に存在することを検出する。また原点検出センサ3は、少なくとも1つ以上で構成される。原点検出センサ3が2つ以上のセンサで構成される場合、それぞれのセンサは指示棒2が異なる原点位置に存在することを検出する。
次に、指示棒2の回動の動作態様を説明する。図5は、指示棒2の動作態様を示す図である。図6は、指示棒2が回動する際の振り角度の説明図である。
図5に示すように、指示棒2は、回動範囲左端「LO」と回動範囲右端「RO」の間で、ステッピングモータ5の出力トルクによる往復回転運動に従い、右方向と左方向との往復回動を規定の周期で繰り返すように制御される。図5、図6の点線は、回動範囲左端LO及び回動範囲右端ROを示す。なお、本実施形態において、回動範囲左端LO及び回動範囲右端ROは原点位置として規定されている。なお、回動範囲左端LOを第1回動端と、回動範囲右端ROを第2回動端と称することもある。
図6に示すように指示棒2の振り角度はステッピングモータ5の構造とステッピングモータ5に入力される駆動パルスの数と、回転運動変換部4により規定される減速比率により決定される。この指示棒2は、振り角度Aの範囲で回動することで、回動範囲右端ROから回動範囲左端LOまで回動する。すなわち振り角度A=ステッピングモータのステップ角×駆動パルス数×ギアボックス減速比である。
このとき、指示棒2を振り角度Aだけ回動させるのに必要なステッピングモータ5に入力する駆動パルス数を規定パルス数Aとする。すなわち規定パルス数は、指示棒2が回動範囲を回動するために規定されるパルス数である。このとき、記憶部8は、規定パルス数を記憶し、制御部7に出力する。
すなわち、制御部7は、操作部9から入力されたテンポ等に対応した駆動パルス送出タイミングを算出し、算出されたタイミングに合わせ駆動パルスをステッピングモータ駆動部6に発生させ、ステッピングモータ5に入力する。ここでは、A個のパルスで、指示棒2が回動範囲右端R0から回動範囲左端L0まで移動する。回動範囲左端L0においてステッピングモータ5の出力トルクの回転方向の転換により、指示棒2が反対方向に回動し、A個のパルスで、指示棒2は回動範囲右端R0に移動する。なお、算出された駆動パルス送出タイミングは記憶部8に記憶されている。
次に原点検出センサの配置について説明する。図7は、原点検出センサ3の設置位置の説明図である。図8は、原点検出センサの例を示す図である。
本実施形態において、原点検出センサ3は、例えばフォトインタラプタ等で構成される。また、原点検出センサ3は、回動範囲左端LO側に配置されている。
図8(a)は、原点検出センサ3としてフォトインタラプタが使用されたときの指示棒2と原点検出センサ3の位置関係を側面から見た図である。原点検出センサ3は、発光側からLED光が放射され、その光を受光側のフォトトランジスタが感知することにより、発光側と受光側の間隙に遮光物があるか、無いかを判別する。本実施形態において、指示棒2が遮光物として機能する。このとき、遮光物である指示棒2がある場合、原点検出センサ3の出力はOFFの状態である。また、遮光物である指示棒2がない場合、原点検出センサ3の出力は、ONの状態である。
なお、指示棒2の原点検出センサ3により検出される被検出部は扇状に形成され、端部は円弧で構成される。また、被検出部の回動範囲は、原点検出センサ3においてONの状態である1つの領域とOFFの状態である1つの領域とで構成される。ただし、被検出部の構造はこれに限定されない。
図8(b)、図8(c)は指示棒2と原点検出センサ3の位置関係を正面から見た図である。図8(b)の場合は、原点検出センサ3の発光側と受光側の間隙に遮光物(指示棒2の被検出部)が無いので原点検出センサ3がONの状態を示す。また、図8(c)の場合は原点検出センサ3の発光側と受光側の間隙は指示棒2によって遮光されているのでセンサがOFFの状態を示す。
図7において実線で示す指示棒2の位置は、原点検出センサ3の検出状態がOFFからONに切替わる位置である。本実施形態において、このときに原点検出センサ3の検出状態が切替わる。
また、図7において点線で示す指示棒2の位置は、回動範囲右端ROである。このとき、原点検出センサ3の出力はOFFの状態を示す。すなわち、実線で示す指示棒2の位置から、点線で示す指示棒2の位置まで、原点検出センサ3の出力がOFFの状態となる。
本実施形態において、指示棒2の回動範囲のうち、原点検出センサ3の出力がOFFの状態からONの状態に切り替わる位置が原点位置として規定される。これにより、原点検出センサ3は、指示棒2がこの原点位置に存在するかまたは存在しないかを検出する。すなわち、原点検出センサ3の出力がOFFからONの状態に切替わったとき、指示棒2が原点位置に存在することを原点検出センサ3が検出する。また、指示棒2は、原点検出センサ3の検出がOFFの状態の範囲を振り角度Bで回動する。
このとき、原点検出センサ3の検出がONの状態の範囲を回動するための駆動パルス数はカウントパルス数Nとして規定されている。すなわち、カウントパルス数Nは、原点位置から回動端(回動範囲左端)まで回動するために規定される駆動パルス数である。このカウントパルス数Nは、記憶部8に記憶され、記憶部8から制御部7に出力される。
なお、原点検出センサ3及び指示棒2の構造や種類によって、原点検出センサ3の検出がON又はOFFの状態の範囲は変更される。このとき、原点位置も変更される。また、規定パルス数は、操作部9から入力されたテンポ等によって変更される。また、カウントパルス数Nは、原点位置によって変更される。例えば、原点位置が回動端(回動範囲左端)の場合、カウントパルス数Nは0である。また、カウントパルス数Nが正の整数で規定される場合、原点位置は、回動端と異なる位置である。
また、制御部7は、指示棒2が回動範囲を回動する間に入力された入力パルス数と、指示棒2が原点位置から回動端まで回動する間に入力された原点パルス数とを計数する。そして制御部7は、入力パルス数と規定パルス数とを比較するとともに、原点パルス数とカウントパルス数とを比較する。
以下に、制御部7における指示棒2の回動制御について具体例を示しながら説明する。 図9は、指示棒の回動処理の流れの一例を示すフローチャートである。図10は、パルス入力処理の流れの一例を示すフローチャートである。図11は、エラー処理の流れの一例を示すフローチャートである。また、図12乃至図14は、本実施形態実施形態の指示棒の動作を示す図である。なお、図9は、指示棒2が回動範囲左端LOまたは回動範囲右端ROの一方から回動範囲左端LOまたは回動範囲右端ROの他方まで回動する流れを示している。また、原点パルス数がカウントパルス数と等しいということは、ステッピングモータ駆動部6がステッピングモータ5にカウントパルス数Nの駆動パルスを入力したことを意味し、原点パルス数がカウントパルス数と異なるということは、ステッピングモータ駆動部6がステッピングモータ5にカウントパルス数Nの駆動パルスをまだ入力していないことを意味する。また、入力パルス数が規定パルス数と等しいということは、ステッピングモータ駆動部6がステッピングモータ5に規定パルス数Aの駆動パルスを入力したことを意味し、入力パルス数が規定パルス数と異なるということは、ステッピングモータ駆動部6がステッピングモータ5に規定パルス数Aの駆動パルスをまだ入力していないことを意味する。
なお、本実施形態において、記憶部8は、入力パルス数を示す「pls_count」、原点パルス数を示す「check_count」、スキップパルス数を示す「skip_count」、センサフラグを示す「sensor_flg」、未完了フラグを示す「clock_skip」を記憶する。これらは、一時記憶変数である。
入力パルス数「pls_count」は、指示棒2が回動範囲を回動する間に入力された入力パルス数である。すなわち、本実施形態実施形態において、入力パルス数「pls_count」は、指示棒2が一方の回動端(回動範囲左端、または回動範囲右端)から他方の回動端(回動範囲右端、または回動範囲左端)まで回動する入力された入力パルス数である。なお、本実施形態において、規定パルス数は100に設定され、入力パルス数「pls_count」は0から100までの整数のいずれかの値である。
入力パルス数「pls_count」は、回動処理前の初期状態において「0」に設定される。すなわち、図12(a)に示すように、指示棒2が回動範囲左端LOから回動を開始するとき「0」に設定されている。本実施形態においては、入力パルス数「pls_count」は、パルス入力処理毎に加算される変数である。
原点パルス数「check_count」は、指示棒2が原点位置から回動端まで回動する間に入力された原点パルス数である。本実施形態において、原点検出センサ3の出力がOFFからONに切替わったときから回動範囲左端LOまで指示棒2が回動する間に入力する原点パルス数である。このとき、回動範囲左端LOは原点位置に近い方の回動端である。
原点パルス数「check_count」は、回動処理前の初期状態において「0」に設定される。また、原点パルス数「check_count」は、指示棒2が原点位置に存在したときに、カウントパルス数Nの値に設定される。本実施形態において、カウントパルス数Nは「10」と規定される。そして、原点パルス数「check_count」は、指示棒2が原点位置から回動端まで回動する間で、ステッピングモータ5に駆動パルスが入力される毎に減算していく変数である。すなわち、原点検出センサ3の出力がONの状態である間、すなわち指示棒2が原点位置から回動範囲左端LOまで回動する間に、ステッピングモータ駆動部6はステッピングモータ5に10パルス入力する。このため、原点位置は、回動範囲左端LOと異なる位置である。
スキップパルス数は、原点パルス数がカウントパルス数と異なり、入力パルス数が規定パルス数と等しい場合に、パルス入力処理においてステッピングモータに入力されない駆動パルスの数である。このため、本実施形態において、スキップパルス数「skip_count」は、回動範囲左端LOにおいてステッピングモータ駆動部からステッピングモータに入力されないパルス数である。
スキップパルス数「skip_count」は、回動処理前の初期状態において「0」に設定される。また、本実施形態において、スキップパルス数「skip_count」は、入力パルス数「pls_count」が100になったとき原点パルス数「check_count」と等しい値に設定される。そして、スキップパルス数「skip_count」は、パルス入力処理毎に、減算していく変数である。
なお、入力パルス数「pls_count」、原点パルス数「check_count」、スキップパルス数「skip_count」の値は整数である。
センサフラグは、原点検出センサ3の出力状態を示す。このため、本実施形態において、センサフラグ「sensor_flg」は、原点検出センサ3の出力がONの状態のとき「1」、原点検出センサ3の出力がOFFの状態のとき「0」に設定される。
センサフラグ「sensor_flg」は、回動処理前の初期状態において、「1」に設定される。
未完了フラグは、原点パルス数がカウントパルス数と等しく、入力パルス数が規定パルス数と異なる場合に、パルス入力処理において駆動パルスの入力の可否を決めるフラグである。このため、本実施形態において、未完了フラグ「clock_skip」は、原点パルス数「check_count」が「0」になったとき、入力パルス数「pls_count」が「100」より小さい場合に「1」に設定される。また、それ以外の場合、未完了フラグ「clock_skip」は、「0」に設定される。
未完了フラグ「clock_skip」は、回動処理前の初期状態において、「0」に設定される。
回動処理開始前に、一次記憶変数をそれぞれ初期化し、初期状態に設定する。すなわち、入力パルス数「pls_count」は、「0」に設定され、原点パルス数「check_count」は、「0」に設定され、スキップパルス数「skip_count」は、「0」に設定され、センサフラグ「sensor_flg」は、「1」に設定され、未完了フラグ「clock_skip」は、「0」に設定される。この状態で回動処理を開始する。
はじめに、図12を用いて指示棒2の通常の動作を説明する。指示棒2の回動前の初期状態を図12(a)に示す。図12(a)において、指示棒2は回動範囲左端LOに位置する。
まず、パルス入力処理を行う(ステップ101)。図10において、パルス入力処理を示す。
パルス入力処理において、原点検出センサ3の出力がONの状態であるかどうかを判定する(ステップ201)。すなわち、指示棒2が原点位置に存在しないかどうかを原点検出センサ3が検出する。図12(a)において、原点検出センサ3の出力がONの状態である。
この場合、センサフラグ「sensor_flg」が「0」であるかどうかを判定する(ステップ203)。センサフラグ「sensor_flg」は初期状態のため、「1」である。
この場合、未完了フラグ「clock_skip」が「1」であるかどうか判定する(ステップ205)。未完了フラグ「clock_skip」は初期状態のため、「0」である。
この場合、スキップパルス数「skip_count」が「0」以下であるかどうか判定する(ステップ206)。スキップパルス数「skip_count」は、初期状態のため、「0」である。
この場合、ステッピングモータ駆動部がステッピングモータに1パルス入力する(ステップ207)。このとき、指示棒は、回動範囲左端LOに位置するため、図12(a)に示す矢印の方向である回動範囲右端ROの方向に回動する。
次に、センサフラグ「sensor_flg」が「0」かどうか判定する(ステップ209)。ステップ203と同様、センサフラグ「sensor_flg」は「1」である。
この場合、原点パルス数「check_count」の値を減算する(ステップ210)。原点パルス数「check_count」は、初期状態で「0」のため、「−1」に変更される。
次に、原点パルス数「check_count」が「0」かどうか判定する(ステップ211)。ステップ210により、原点パルス数「check_count」は、「−1」である。この場合、パルス入力処理から、回動処理に戻る。
そして、入力パルス数「pls_count」に「1」加算する(ステップ102)。このとき、入力パルス数「pls_count」は初期状態で「0」のため、「1」に変更される。
次に入力パルス数「pls_count」が「100」以上かどうかを判定する(ステップ103)。このとき、入力パルス数「pls_count」は「1」のため、パルス入力処理を再度行う(ステップ101)。
以上の処理を行い、指示棒2を回動していくと、原点検出センサ3の出力がOFFの状態に変わる。このとき、ステップ201において原点検出センサ3の出力がONの状態ではないと判定され、センサフラグ「sensor_flg」を「0」に設定する(ステップ202)。そして、パルス入力処理を行っていき、ステップ209において、センサフラグ「sensor_flg」が「0」と判定されるため、パルス入力処理から、回動処理に戻る。このとき、原点パルス数「check_count」は、「−10」であり、再度原点検出センサ3の出力がONの状態になるまで変わらない。そして、この後、上記と同様の処理を行っていく。
図12(b)は、上記の処理を行っている状態を示す図である。このとき、入力パルス数「pls_count」が「50」であり、指示棒が回動範囲左端LOと回動範囲右端ROとの中間に位置することを示す。また、原点パルス数「check_count」は「−10」である。
図12(c)は、回動範囲右端ROまで上記の処理を行った状態を示す図である。このとき、入力パルス数「pls_count」は、「100」である。そのため、ステップ103の判定結果に基づいて、スキップパルス数「skip_count」を原点パルス数「check_count」と同じ値にする(ステップ104)。このとき、原点パルス数「check_count」は「−10」のため、スキップパルス数「skip_count」も「−10」に変更する。
そして、入力パルス数「pls_count」を「0」に変更する(ステップ105)。
次に、指示棒2が原点位置方向に回動しているかどうかを判定する(ステップ106)。原点位置は、原点出力センサ3の出力がOFFからONに切替わる位置のため、このとき指示棒2が原点位置方向に回動していない。
そのため、ステッピングモータ5の回転方向を反転する(ステップ108)。そして、未完了フラグ「clock_skip」を「0」に設定する(ステップ109)。このとき、未完了フラグ「clock_skip」は「0」だったため、変更しない。そして、原点パルス数「check_count」を「0」に設定する(ステップ110)。このとき、原点パルス数「check_count」は「−10」のため、「0」に変更する。そして、指示棒2の回動方向を反転して、上記の処理を繰り返す。
なお、パルス入力処理のステップ206において、スキップパルス数「skip_count」は「0」以下かどうかを判定するが、スキップパルス数「skip_count」が「−10」であるため、ステッピングモータに1パルス入力する(ステップ207)。
図12(d)は、上記の処理を行っている状態を示す図である。このとき、図12(b)と同様、入力パルス数「pls_count」が「50」であり、指示棒が回動範囲左端LOと回動範囲右端ROとの中間に位置することを示す。また、原点パルス数「check_count」は「0」である。
そして、図12(e)に示す状態まで処理を進める。図12(e)は、原点検出センサ3の出力がOFFからONに切替わった状態を示す図である。このとき、このとき、入力パルス数「pls_count」は、「90」である。この「90」という値は、規定パルス数Aからカウントパルス数Nを引いた値である。
この場合、ステップ201において、原点検出センサ3の出力がONの状態であると判定されるため、センサフラグ「sensor_flg」が「0」であるかどうかを判定する(ステップ203)。
このとき、センサフラグ「sensor_flg」は「0」であるため、センサフラグ「sensor_flg」を「1」に変更し、原点パルス数「check_count」を「0」から「10」に変更する(ステップ204)。その後、ステップ205からステップ207まで行う。その後、センサフラグ「sensor_flg」が「0」であるかどうか判定する(ステップ209)。
センサフラグ「sensor_flg」は「1」であるため、原点パルス数「check_count」を「1」減算する(ステップ211)。このとき、原点パルス数「check_count」は「10」のため、「9」に減算する。
そして、原点パルス数「check_count」が「0」であるかどうか判定する(ステップ211)。このとき原点パルス数「check_count」は「9」であるため、パルス入力処理から回動処理に戻る。
また、図12(e)の状態におけるパルス入力処理は、原点パルス数がカウントパルス数と異なり、入力パルス数が規定パルス数と異なる場合の処理である。すなわち、原点パルス数「check_count」が「10」であり、ステッピングモータ駆動部6がステッピングモータ5にカウントパルス数Nの駆動パルスをまだ入力しておらず、さらに、入力パルス数「pls_count」が、「90」であり、ステッピングモータ駆動部6がステッピングモータ5に規定パルス数Aの駆動パルスをまだ入力していないことを意味する。この場合、上記の通り、ステッピングモータ駆動部6は、駆動パルスをステッピングモータ5に入力している。
この処理を指示棒が原点位置から回動範囲左端LOまで回動する間繰り返す。そして、指示棒2が回動範囲左端LOまで回動する。図12(f)は、指示棒2が回動範囲左端LOまで回動した状態を示す。このとき、入力パルス数「pls_count」は、「100」である。また、原点パルス数「check_count」は「0」である。
これにより、ステップ103の判定結果に基づいて、スキップパルス数「skip_count」を原点パルス数「check_count」と同じ値にする(ステップ104)。このとき、原点パルス数「check_count」は「0」のため、スキップパルス数「skip_count」も「0」に変更する。
そして、入力パルス数「pls_count」を「0」に変更する(ステップ105)。
次に、指示棒2が原点位置方向に回動しているかどうかを判定する(ステップ106)。原点位置は、原点出力センサ3の出力がOFFからONに切替わる位置のため、このとき指示棒2が原点位置方向に回動している。
そのため、原点検出センサの出力状態がONの状態であるかどうかを判定する(ステップ107)。このとき、図12(f)に示すように、原点検出センサの出力はONの状態である。
そのため、ステッピングモータ5の回転方向を反転する(ステップ108)。そして、未完了フラグ「clock_skip」を「0」に設定する(ステップ109)。このとき、未完了フラグ「clock_skip」は「0」だったため、変更しない。そして、原点パルス数「check_count」を「0」に設定する(ステップ110)。このとき、原点パルス数「check_count」は「0」のため、変更しない。そして、指示棒2の回動方向を反転して、回動の初期状態に戻る。
また、図12(f)の状態におけるパルス入力処理は、原点パルス数がカウントパルス数と等しく、入力パルス数が規定パルス数と等しい場合の処理である。すなわち、原点パルス数「check_count」が「0」であり、ステッピングモータ駆動部6がステッピングモータ5にカウントパルス数Nの駆動パルスを入力し、さらに、入力パルス数「pls_count」が、「100」であり、ステッピングモータ駆動部6がステッピングモータ5に規定パルス数Aの駆動パルスを入力したことを意味する。この場合、上記の通り、ステッピングモータ駆動部6は、ステッピングモータ5の回転方向を反転している。
そして、回動処理を繰り返すことにより、指示棒2が往復回動する。
次に、指示棒2が原点位置方向と反対方向に回動している際にステッピングモータ5が脱調した場合の指示棒2の動作について説明する。図13は指示棒が原点位置方向と反対方向に回動している際にステッピングモータ5が脱調した場合の指示棒の動作を説明する図である。
図13(a)は、図12(b)と同様の状態を示す図である。このとき、入力パルス数「pls_count」が「50」であり、指示棒が回動範囲左端LOと回動範囲右端ROとの中間に位置することを示す。また、原点パルス数「check_count」は「−10」である。この後、ステップ207でステッピングモータ5に1パルス入力したが、指示棒2が回動せずにステッピングモータ5が脱調したと仮定する。
図13(b)は、ステッピングモータ5が脱調した状態を示す図である。このとき、入力パルス数「pls_count」が「54」であり、原点パルス数「check_count」は「−10」である。しかし、ステップ207においてステッピングモータ5に駆動パルスを入力したが、実際は、ステッピングモータ5が回動していない。この状態で、入力パルス数「pls_count」に「1」加算している。そのため、ステップ101を4回実行したが、ステッピングモータ5は4パルス分回転運動していない状態である。
このまま回動処理を繰り返すと、指示棒2が回動範囲右端ROまで回動せずに入力パルス数と規定パルス数とが等しくなる。図13(c)は、指示棒2が回動範囲右端ROまで回動せずに入力パルス数と規定パルス数とが等しくなった状態を示す図である。このとき、入力パルス数「pls_count」は、「100」であり、原点パルス数「check_count」は「−10」である。図13(c)において、入力パルス数「pls_count」が「100」まで加算されるまでにステッピングモータ5が4パルス数分脱調したと仮定している。この状態で、通常の動作と同様の処理を続ける。
図13(d)は、さらに回動処理を行っている状態を示す図である。このとき、入力パルス数「pls_count」が「50」であるが、図12(d)の状態と異なり、指示棒2は回動範囲の中心に位置しない。
さらに回動処理を続け、原点検出センサ3の出力がOFFからONに切替わる位置まで回動する。図13(e)は、原点検出センサ3の出力がOFFからONに切替わった状態を示す図である。回動中に4回脱調が発生しているため、このとき、入力パルス数「pls_count」は、「90」ではなく「86」である。また、ステップ204において、原点パルス数「check_count」を「10」に変更している。この状態は、図12(e)の状態と同様に、原点パルス数がカウントパルス数と異なり、入力パルス数が規定パルス数と異なる場合の状態である。この場合、図12(e)と同様にステッピングモータ駆動部6は、駆動パルスをステッピングモータ5に入力している。
さらに回動処理を続け、指示棒2が回動範囲左端LOまで回動する。図13(f)は、指示棒2が回動範囲左端LOまで回動した状態を示す。このとき、入力パルス数「pls_count」は、「100」ではなく、「96」で回動範囲左端LOまで回動してしまっている。
このまま回動処理を進めた場合、ステップ103において入力パルス数「pls_count」が「100」ではないと判定されるため、パルス入力処理を行う(ステップ101)。そして、ステップ207において、指示棒2が回動範囲左端LOまで回動している状態で、さらに指示棒2を同じ方向に回動させようとする。このまま処理を継続すると指示棒2は回動範囲左端LOを超えた位置まで移動し、回動範囲がずれてしまう。さらに処理を継続し、ステッピングモータ5が脱調を繰り返すと、指示棒2が障害物に当たるなど、これ以上回動できないような物理的な位置に到達する。その後、ステッピングモータ5はノイズを発生しながら空回りするような現象が生じる。
そこで、本実施形態において、回動処理中に第1の脱調復帰処理を行っている。
図13(f)の状態の場合、ステップ210を行い、原点パルス数「check_count」は「0」に減算されている。
この後、原点パルス数「check_count」が「0」であるかどうかを判定する(ステップ211)。原点パルス数「check_count」は「0」のため、未完了フラグ「clock_skip」を「0」から「1」に変更する。このとき、はじめて未完了フラグ「clock_skip」が「1」に設定される。そして、パルス入力処理から回動処理に戻る。
次に、入力パルス数「pls_count」に「1」加算する(ステップ102)。このとき、入力パルス数「pls_count」は、図13(f)に示す通り、「96」に変更される。そして、ステップ103において、入力パルス数「pls_count」は「100」以上ではないと判定され、パルス入力処理を行う(ステップ101)。
次に、ステップ201、ステップ203が行われる。次に、未完了フラグ「clock_skip」が「1」であるかどうかを判定する(ステップ205)。このとき、未完了フラグ「clock_skip」は「1」であるため、パルス入力処理から回動処理に戻る。
そして、入力パルス数「pls_count」に「1」加算する。このとき入力パルス数「pls_count」は、「96」のため、「97」に変更される。この後、ステップ103、ステップ101と繰り返していく。
入力パルス数「pls_count」が「100」まで加算されると、入力パルス数「pls_count」が「100」であると判定され(ステップ103)、ステップ104以降を通常の動作と同様に行っていく。
上記の処理により、指示棒2が回動範囲左端LOまで回動した後、入力パルス数「pls_count」が「100」に変更されるまで、ステッピングモータ駆動部6は、駆動パルスをステッピングモータ5に入力していない。つまり、制御部は、指示棒2が回動端(回動範囲左端)に存在すると判定すると、ステッピングモータ5を駆動する駆動パルスの入力を休止する休止期間を設定する。
すなわち、図13(f)のように、入力パルス数「pls_count」が「100」に変更される前に指示棒が回動範囲左端LOまで回動している場合は、原点パルス数がカウントパルス数と等しく、入力パルス数が規定パルス数とを異なる場合の処理を行う。この場合、上記の処理の通り、ステッピングモータ駆動部6は、駆動パルスをステッピングモータ5に入力せず、制御部7は、ステッピングモータ5に入力されない駆動パルスの数を差分パルス数として入力パルス数に加算していく。記憶部8は、ステッピングモータ5に入力されない駆動パルス数(差分パルス数)を入力パルス数を記憶する。つまり、記憶部は、上述の休止期間の駆動パルス数(差分パルス数)を記憶する。なお、この記憶される駆動パルス数は、制御部7内に一時的に記憶されてもよい。
これにより、ステッピングモータ5の空回りによるノイズは発生しない。また、ステッピングモータ5を空回りさせずに脱調から復帰させるため、ステッピングモータ5が脱調を繰り返すことを抑制する。また、ステッピングモータ5を空回りさせないため、回転運動変換部4の歯車等の噛合が外れることはなく、ステッピングモータ5を脱調から復帰させる。そのため、メトロノームの設置状況にかかわらずに脱調復帰処理を行い、指示棒2の往復回動を続けることができる。また駆動パルスはステッピングモータ5の入力に関わらずその発生のタイミングで入力パルス数をカウントしているので指示棒2の往復回動は一定の周期性を失うことはない。
以上により、本実施形態におけるメトロノームは、音楽練習者に対して厳密な設置条件を要求することなく正確な拍子を報知することができ、快適に使用することができる。
また、本実施形態において、原点位置は、回動端と異なる位置である。すなわち、原点パルス数「check_count」に対応するカウントパルス数を正の整数に規定している。カウントパルス数に正の整数が規定されている場合、入力パルス数が規定パルス数に達する前に、脱調状態を予測することができる。そのため、指示棒2が回動端まで回動した後の脱調復帰処理をスムーズに行うことができる。
次に、指示棒が原点位置方向に回動している際に脱調した場合の指示棒の動作について説明する。図14は指示棒が原点位置方向に回動している際にステッピングモータ5が脱調した場合の指示棒の動作を説明する図である。
図14(a)は、指示棒2が原点位置方向と反対方向に回動範囲右端ROまで回動し、回動を反転する状態を示す図である。このとき、入力パルス数「pls_count」は「100」であり、原点パルス数「check_count」は「0」である。すなわち、指示棒2は回動範囲右端ROまで正常に回動している。
このとき、ステップ108において、ステッピングモータの回転方向を反転している。そして、ステップ109、ステップ110を行う。ステップ110により、原点パルス数「check_count」が図14(a)に示す通り、「0」に変更される。
この後、指示棒2が原点位置方向へ回動する間にステッピングモータ5の脱調が発生したと仮定する。図14(b)は、指示棒2が原点位置方向へ回動する間に脱調が発生した状態を示す。このとき、入力パルス数「pls_count」が「56」であり、原点パルス数「check_count」は「0」である。しかし、ステップ207においてステッピングモータ5に駆動パルスを入力したが、実際は、ステッピングモータ5が回動していない。この状態で、入力パルス数「pls_count」に「1」加算している。そのため、ステップ103で、ステッピングモータ5は1パルス数分回転運動していない状態である。このまま回動処理を繰り返し、図14(b)に示す通り、ステッピングモータ5が6パルス数分脱調している。
図14(c)は、原点検出センサの出力がOFFからONの状態に切り替わった状態を示す図である。このとき、入力パルス数「pls_count」が「96」であり、原点パルス数「check_count」は「10」である。
回動中に脱調が発生しているため、このとき、入力パルス数「pls_count」は、「90」ではなく「96」である。また、ステップ204において、原点パルス数「check_count」を「10」に変更している。すなわち、ステッピングモータ5が6パルス数分回動されない状態で、指示棒2が原点位置に存在している。この状態は、図12(e)の状態と同様に、原点パルス数がカウントパルス数と異なり、入力パルス数が規定パルス数と異なる場合の状態である。この場合、図12(e)と同様にステッピングモータ駆動部6は、駆動パルスをステッピングモータ5に入力している。
さらに入力パルス数「pls_count」が「100」になるまで回動処理を続ける。図14(d)は、入力パルス数「pls_count」が「100」になるまで回動した状態を示す。このとき、入力パルス数「pls_count」は、「100」であるが、指示棒2は回動範囲左端LOまで回動していない。ステッピングモータ5が6パルス数分回動していないからである。
このまま回動処理を進めた場合、原点検出センサの出力がONの状態であると判定され(ステップ107)、ステッピングモータ5の回転方向を反転させ(ステップ108)、回動処理を続ける。その後、入力パルス数「pls_count」が「100」になる前に指示棒2が回動範囲右端ROまで回動してしまう。この後、ステップ103において入力パルス数「pls_count」が「100」ではないと判定されるため、パルス入力処理を行う(ステップ101)。そして、ステップ207において、指示棒2が回動範囲右端ROまで回動している状態で、さらに指示棒2を同じ方向に回動させようとする。このまま処理を継続すると指示棒2は回動範囲右端ROを超えた位置まで移動し、回動範囲がずれてしまう。さらに処理を継続し、ステッピングモータ5が脱調を繰り返すと、指示棒2が障害物に当たるなど、これ以上回動できないような物理的な位置に到達する。その後、ステッピングモータ5はノイズを発生しながら空回りするような現象が生じる。
そこで、本実施形態において、回動処理中に第2の脱調復帰処理を行っている。
図14(d)の状態の場合、ステップ104において、スキップパルス数「skip_count」の値を原点パルス数「check_count」の値に変更する。このとき、原点パルス数「check_count」は「6」であるため、スキップパルス数「skip_count」は「6」に変更される。そして、入力パルス数「pls_count」を「0」に変更する。その後、ステップ106からステップ110まで行う。
そして、パルス入力処理において、ステップ201、ステップ203、ステップ205を行う。次に、スキップパルス数「skip_count」が「0」以下であるかを判定する(ステップ206)。このときスキップパルス数「skip_count」は「6」であるため、スキップパルス数「skip_count」が「1」減算される(ステップ208)。この状態で、ステッピングモータ5に1パルス入力せずにパルス入力処理から回動処理に戻る。そして、回動処理において、入力パルス数「pls_count」が「1」加算される(ステップ102)。
図14(e)は、上記の処理を行い、スキップパルス数「skip_count」が「1」減算され、入力パルス数「pls_count」が「1」加算された状態を示す図である。このとき、スキップパルス数「skip_count」は「6」から「5」に変更され、入力パルス数「pls_count」は「0」から「1」に変更される。上記の処理を「skip_count」が「0」に変更されるまで繰り返す。そして、スキップパルス数「skip_count」が「0」に変更されたとき、ステップ102において、入力パルス数「pls_count」は「6」に変更される。
すなわち、上記は、原点パルス数がカウントパルス数と異なり、入力パルス数が規定パルス数と等しい場合の処理である。この場合、ステッピングモータ駆動部6は、駆動パルスをステッピングモータ5に入力せず、制御部7は、ステッピングモータに入力されない駆動パルスの数を原点パルス数に加算していることになる。そして、原点パルス数がカウントパルス数と等しくなった場合は、通常の回動処理を行う。本実施形態においては、原点パルス数「check_count」の減算値とスキップパルス数「skip_count」の減算値の合計が原点パルス数「check_count」の最大値であるカウントパルス数Nに達した場合、原点パルス数がカウントパルス数と等しいと判断する。
この状態で、パルス入力処理において、スキップパルス数「skip_count」が「0」であると判定され(ステップ206)、ステッピングモータ5は1パルス入力される(ステップ207)。このとき、指示棒2が回動範囲右端ROに向かって回動し始める。
そして、入力パルス数「pls_count」に「6」加算された状態で回動処理を繰り返すため、その後ステッピングモータ5が脱調することなく指示棒2が回動範囲右端ROに到達したときに入力パルス数「pls_count」が「100」である。すなわち、ステッピングモータ5が空回りするはずのパルス数分がすでに加算されているため、ステッピングモータ5が空回りしない。これにより、指示棒2の回動範囲右端RO超えによる障害物への接触、それに伴うノイズの発生等を抑制するとともに、指示棒の正確な往復回動を行うことができる。第2の脱調復帰処理は、原点検出センサ3が1つの場合に有効である。
次にエラー処理について説明する。指示棒2が原点位置方向へ回動し、入力パルス数「pls_count」が「100」であると仮定する。
このときステップ104からステップ106の処理を行い、原点検出センサ3の出力がONの状態であるかを判定する(ステップ107)。このとき、原点検出センサの出力がONの状態でない場合、制御部7がエラーと判定し、エラー処理を行う(ステップ111)。
この場合、ステッピングモータ5の不調により、甚だしいトルク不足状態が引き起こされているか、指示棒2が物理的に拘束されてしまっている状態等、メトロノームとしての機能を果たすことができないような状況が想定される。
図11はエラー処理の流れを示す図である。まず、ステッピングモータ5を停止し(ステップ301)、表示部10のエラー表示である赤LEDを点灯する(ステップ302)。これにより、回動処理が停止される。
すなわち、この場合は、指示棒2が原点位置に存在しないことを原点検出センサ3が検出し、入力パルス数が規定パルス数と等しいことを制御部7が判定する場合である。この場合、ステッピングモータ駆動部6は、駆動パルスをステッピングモータ5に入力せず、制御部7は、エラー処理を行う。
これにより、メトロノームとして機能を果たすことができないような場合に、エラーの表示等を通知することができる。
この場合、カウントパルス数Nは、は1つの往復回動の中で許容し得るステッピングモータ5の脱調回数を意味する。そのため、カウントパルス数N、すなわち原点位置から回動端までの間隔は、脱調の許容量として設定することができる。
なお、カウントパルス数Nは0以上の整数値を設定可能である。ただし、カウントパルス数Nが0のときはステッピングモータ5の脱調を許容せず、仮に脱調が生じた場合にはすぐにエラー検出される。またカウントパルス数Nが大きい数値になれば、ステッピングモータ5の脱調に対する許容度は大きくなる。しかし、脱調が起きたときに指示棒2が回動範囲端部で停留する時間が長くなりすぎると不自然な動作が目立つようになる。以上により、カウントパルス数Nは必要最小限の値とすることが好ましい。
また、本実施形態において、原点検出センサが1つの場合を説明したが、原点検出センサは少なくとも1つ以上有していればよく、2つ以上でもよい。このような本実施形態の変形例を、以下に説明する。
図15は、2つの原点検出センサの場合の指示棒2の動作態様を示す図である。図15において原点検出センサ及び指示棒以外の構成は省略する。原点検出センサが1つの場合と同様の構成については説明を省略する。また点線で示す指示棒は回動前の位置、実線で示す指示棒は回動後の位置である。
図15(a)は、指示棒2が回動範囲である回動範囲右端ROから回動範囲左端LOまで回動している状態を示す図である。この回動範囲は、規定パルス数Aで決まる。これは、原点検出センサが1つの場合と同様である。
次に原点位置について説明する。本実施形態において、第1のセンサは、原点位置のうち第1の原点位置に存在することを検出し、第2のセンサは、原点位置のうち第2の原点位置に存在することを検出する。また、本実施形態において、第1の原点位置は、回動範囲の中心に対して一方の側に位置し、第2の原点位置は、回動範囲の中心に対して他方の側に位置する。なお、各原点位置の配置はこれに限られない。例えば、両方の原点位置が一方の側でもよい。
また、本実施形態においては、第1のセンサは、回動範囲左端LO検出センサ15とし、第2のセンサは、回動範囲右端RO検出センサ16と設定する。なお、各センサは逆の検出センサであってもよい。
また、各原点位置は、原点検出センサが1つの場合と同様に、原点検出センサの出力がOFFの状態からONの状態に切り替わる位置である。また、第1の原点位置は、回動範囲左端LO側に対応する原点位置であり、第2の原点位置は、回動範囲右端RO側に対応する原点位置である。また、各原点位置は、対応する回動端と異なる位置である。また、原点検出センサが1つの場合と同様に各原点位置から対応する回動端まで、指示棒2が回動するためにカウントパルス数Nが規定される。
図15(b)は、指示棒2が回動範囲右端ROから第1の原点位置に存在することを回動範囲左端LO検出センサ15が検出するまで回動した状態を示す図である。この間、回動範囲左端LO検出センサ15の出力は、OFFの状態である。また、この間、回動範囲右端RO検出センサ16の出力は、ONの状態からOFFの状態に切替わり、第1の原点位置においてOFFの状態である。この間を、指示棒2は角度Bで回動する。このとき、ステッピングモータ5は、パルス数Bを入力される。
図15(c)は、指示棒2が回動範囲左端LOから第2の原点位置に存在することを回動範囲右端RO検出センサ16が検出するまで回動した状態を示す図である。この間、回動範囲右端RO検出センサ16の出力は、OFFの状態である。また、この間、回動範囲左端LO検出センサ15の出力は、ONの状態からOFFの状態に切替わり、第2の原点位置においてOFFの状態である。この間を、指示棒2は角度Bで回動する。このとき、ステッピングモータ5は、パルス数Bを入力される。このパルス数Bは、規定パルス数Aからカウントパルス数Nを引いたパルス数である。
なお、原点検出センサ及び指示棒2の構造や種類によって、原点検出センサの検出がON又はOFFの状態の範囲は変更される。このとき、原点位置も変更される。また、規定パルス数は、操作部9から入力されたテンポ等によって変更される。また、カウントパルス数Nは、原点位置によって変更される。例えば、各原点位置が対応する回動端の位置である場合、カウントパルス数Nは0である。また、カウントパルス数Nが正の整数で規定される場合、各原点位置は、対応する回動端と異なる位置である。
また、本実施形態において、カウントパルス数は、指示棒2が第1の原点位置から回動端まで回動するために規定される第1のカウントパルス数N1と、指示棒2が第2の原点位置から回動端まで回動するために規定される第2のカウントパルス数N2と、で構成される。
また、本実施形態において、原点パルス数は、指示棒2が第1の原点位置から回動端まで回動する間に入力される第1の原点パルス数と、指示棒2が第2の原点位置から回動端まで回動する間に入力される第2の原点パルス数と、で構成される。
すなわち、カウントパルス数の個数とは、原点検出センサの個数に対応して規定され、原点パルス数の個数はカウントパルス数の個数と一致する。なお、第1のカウントパルス数N1と第2のカウントパルス数N2とは異なる数でも等しい数でもよい。本実施形態においては、各カウントパルス数は両方「10」に規定される。
以下に、制御部7における指示棒2の回動制御について具体例を示しながら説明する。図16は、指示棒の回動処理の流れの一例を示すフローチャートである。図17は、パルス入力処理の流れの一例を示すフローチャートである。また、図18は、本実施形態の指示棒の動作を示す図である。なお、原点検出センサが1つの場合と同様の処理については、説明を省略する。また、指示棒2の通常の動作については、原点検出センサが1つの場合と同様の動作であるため、説明を省略する。
まず回動開始処理前に、各パラメータを初期状態に設定する。初期状態は、スキップパルス数を示すスキップパルス数「skip_count」がない以外は、原点検出センサが1つの場合と同様である。すなわち、入力パルス数「pls_count」は、「0」に設定され、原点パルス数「check_count」は、「0」に設定され、センサフラグ「sensor_flg」は、「1」に設定され、未完了フラグ「clock_skip」は、「0」に設定される。この状態で回動処理を開始する。本実施形態においては、スキップパルス数「skip_count」を設定する必要がない。また、本実施形態において、原点パルス数「check_count」に用いられる各カウントパルス数は「10」に規定する。
図18を用いて、指示棒2が回動範囲右端RO方向へ回動する間に脱調した場合の脱調処理について説明する。図18は、指示棒2が回動範囲右端RO方向へ回動する間に脱調した状態を示す図である。また、本実施形態では、指示棒2は回動範囲左端LOから回動を開始する。
まず、図16に示す回動処理を開始すると、パルス入力処理を行う(ステップ401)。図17に示す通り、パルス入力処理を開始すると、回動範囲左端LO検出センサ15、回動範囲右端RO検出センサ16の出力がONの状態であるかどうかを判定する(ステップ501、ステップ502)。なお、ステップ501とステップ502とは逆の順序でもよい。
このとき、指示棒2は、図15において実線で示す位置に配置されている。そのため、回動範囲左端LO検出センサ15の出力がONの状態であるため、センサフラグ「sensor_flg」が「0」であるかどうかを判定する(ステップ504)。
このとき、センサフラグ「sensor_flg」は「1」であるため、未完了フラグ「clock_skip」が「1」であるかどうかを判定する(ステップ506)。
未完了フラグ「clock_skip」は「0」のため、ステッピングモータ駆動部6がステッピングモータ5に1パルス入力する(ステップ507)。これにより、指示棒2は回動範囲右端ROに向かって回動する。そして、センサフラグ「sensor_flg」が「0」であるか判定する(ステップ508)。このときセンサフラグ「sensor_flg」は「1」のため、原点パルス数「check_count」を「1」減算する(ステップ509)。このとき、原点パルス数「check_count」は「−1」に変更される。そして、原点パルス数「check_count」が「0」であるかどうかを判定する(ステップ510)。このとき、原点パルス数「check_count」は「−1」のため、パルス入力処理から回動処理へ戻る。
次に、回動処理において、入力パルス数「pls_count」に「1」加算する。これで、入力パルス数「pls_count」が「1」に変更される。そして入力パルス数「pls_count」が「100」以上であるかどうかを判定する(ステップ403)。入力パルス数「pls_count」が「100」以上でないため、ステップ401を再度行う。これを入力パルス数「pls_count」が「100」以上に変更されるまで繰り返す。
また、回動処理を繰り返すと、回動範囲左端LO検出センサ15の出力がOFFの状態に切り替わる。このとき、回動範囲右端RO検出センサ16の出力はOFFの状態のため、パルス入力処理において、センサフラグ「sensor_flg」が「0」に変更される(ステップ503)。
図18(a)は、入力パルス数「pls_count」が「50」までステッピングモータ5が脱調せずに指示棒2が回動した状態を示す図である。このとき、指示棒は、回動範囲の中心に位置する。また、原点パルス数「check_count」は「−10」である。
この後、通常の動作を繰り返した場合、入力パルス数「pls_count」が「90」のときに、回動範囲右端RO検出センサ16の出力がONの状態になる。このとき、ステップ502において、回動範囲右端RO検出センサ16の出力がONの状態であると判定され、センサフラグ「sensor_flg」が「0」であるか判定する(ステップ504)このとき、センサフラグ「sensor_flg」は「0」であるため、センサフラグ「sensor_flg」を「1」に変更し、原点パルス数「check_count」を「10」に変更する(ステップ505)。この状態で、ステップ506からステップ508を行う。このとき、センサフラグ「sensor_flg」は「1」のため、原点パルス数「check_count」が「1」減算される(ステップ509)。これにより、原点パルス数「check_count」は「9」に変更される。そして、ステップ510を行い、パルス入力処理から回動処理に戻る。
そして、回動処理を繰り返すと、原点パルス数「check_count」が「0」に変更され(ステップ509)、原点パルス数「check_count」が「0」と判定され(ステップ510)、未完了フラグ「clock_skip」が「1」に変更される(ステップ511)。そして、回動処理に戻り、入力パルス数「pls_count」が「100」に変更される(ステップ402)。
このとき入力パルス数「pls_count」が「100」であると判定され(ステップ403)、入力パルス数「pls_count」が「0」に変更される。そして、指示棒2が回動範囲右端RO方向に回動していたかどうかを判定する(ステップ405)。
このとき、指示棒2は回動範囲右端RO方向に回動していたため、回動範囲右端RO検出センサ16の出力がONであるかどうかを判定する(ステップ407)。このとき、回動範囲右端RO検出センサ16の出力はONであるため、ステッピングモータ5の回転方向が反転され(ステップ409)、未完了フラグ「clock_skip」が「0」に変更され(ステップ410)、原点パルス数「check_count」が「0」に変更される(ステップ411)。
これが指示棒2の通常の動作である。そして、次に指示棒2は回動範囲左端LO方向に回動する。この後の動作は、上記の動作と同様である。
一方、入力パルス数「pls_count」が「50」に変更された後、ステッピングモータ5が4パルス数分脱調したと仮定する。図18(b)は、ステッピングモータ5が4パルス数分脱調した状態を示す図である。このとき、ステッピングモータ5は回動せずに、入力パルス数「pls_count」が「54」に変更されている。
そして回動処理を繰り返すと、回動範囲右端RO検出センサ16の出力がOFFの状態からONの状態に切替わる。このとき、入力パルス数「pls_count」は「90」でなく、「94」である。この後、回動処理を行い、ステッピングモータ5に1パルス入力することを続ける(ステップ507)。
この状態は、第2の原点パルス数が第2のカウントパルス数と異なり、入力パルス数が規定パルス数と異なる状態である。この状態の場合、ステッピングモータ駆動部6は、駆動パルスをステッピングモータ5に入力する。
回動処理を繰り返すと、入力パルス数「pls_count」が「100」に変更される。このとき、原点パルス数「check_count」は、「4」である。この場合、指示棒2は回動範囲右端ROに到達していない。図18(c)は、入力パルス数「pls_count」が「100」であるが、指示棒2が回動範囲右端ROに到達していない状態を示す図である。
この場合、通常の動作と同様の処理を行うため、ステッピングモータ5の回転方向が反転される(ステップ409)。すなわち、この状態は、原点検出センサが2つ以上有する場合であって、原点パルス数がカウントパルス数と異なり、入力パルス数が規定パルス数と等しいことを制御部7が判定する状態である。この状態の場合、ステッピングモータ駆動部6は、ステッピングモータ5の回転方向を反転する。
この後、回動処理を繰り返す。図18は(d)は、入力パルス数「pls_count」が「50」のときの状態を示す図である。このとき、入力パルス数「pls_count」が「50」であるが、指示棒は回動範囲の中心に位置せず、回動範囲左端LO側にずれている。
さらに回動処理を繰り返すと、回動範囲左端LO検出センサ15の出力がONの状態に切替わる。図18(e)は、回動範囲左端LO検出センサ15の出力がONの状態に切替わった状態を示す図である。この際、パルス入力処理において、センサフラグ「sensor_flg」が「1」に変更され、原点パルス数「check_count」が「10」に変更される(ステップ505)。図18(e)はこのときの状態を示す図である。このとき、入力パルス数「pls_count」は「90」でなく、「86」である。
そして、ステッピングモータ駆動部6がステッピングモータ5に1パルス入力し(ステップ506)、原点パルス数「check_count」が「1」減算され、「9」に変更される(ステップ509)。そして、回動処理に戻り、入力パルス数「pls_count」が「1」加算され、「87」に変更される(ステップ402)。
この状態は、第1の原点パルス数が第1のカウントパルス数と異なり、入力パルス数が規定パルス数と異なる状態である。この状態の場合、ステッピングモータ駆動部6は、駆動パルスをステッピングモータ5に入力する。
この後、回動処理を繰り返すと、指示棒2が回動範囲左端LOまで回動する。図18(f)は、指示棒2が回動範囲左端LOまで回動した状態を示す図である。このとき、原点パルス数「check_count」が「0」であるが、入力パルス数「pls_count」は「100」ではなく、「96」である。
この後も、ステッピングモータ5が回動を続けてしまう。このまま処理を継続すると指示棒2は回動範囲左端LOを超えた位置まで移動し、回動範囲がずれてしまう。さらに処理を継続し、ステッピングモータ5が脱調を繰り返すと、指示棒2が障害物に当たるなど、これ以上回動できないような物理的な位置に到達する。その後、ステッピングモータ5はノイズを発生しながら空回りするような現象が生じる。
そこで、本実施形態において、原点検出センサが1つの場合と同様に回動処理中に第1の脱調復帰処理を行う。
まず、原点パルス数「check_count」が「0」まで減算されると(ステップ509)、原点パルス数「check_count」が「0」であると判定され(ステップ510)、未完了フラグ「clock_skip」が「1」に変更される(ステップ511)。この後、入力パルス数「pls_count」が「100」に変更されるまで、パルス入力処理を繰り返す。この際、ステップ506で未完了フラグ「clock_skip」が「1」であると判定されるため、ステッピングモータ5に駆動パルスが入力されずに、パルス入力処理から回動処理に戻る。そして、入力パルス数「pls_count」が「1」加算されていく(ステップ402)。
この状態は、第1の原点パルス数が第1のカウントパルス数と等しく、入力パルス数が規定パルス数とを異なることを制御部7が判定する状態である。この状態の場合、ステッピングモータ駆動部6は、駆動パルスをステッピングモータ5に入力せず、制御部7は、ステッピングモータ5に入力されない駆動パルスの数を入力パルス数に加算する。
そして、入力パルス数「pls_count」が「100」に変更されると、ステッピングモータ5の回転方向が反転される(ステップ409)。そして、脱調状態から復帰し、指示棒2は通常の動作を行うことができる。
この状態は、第1の原点パルス数が第1のカウントパルス数と等しく、入力パルス数が規定パルス数と等しいことを制御部7が判定する状態である。この状態の場合、ステッピングモータ駆動部6は、ステッピングモータ5の回転方向を反転する。
また、指示棒2が回動範囲左端LO方向へ回動する間にステッピングモータ5が脱調した場合の脱調処理についても上記と同様に第1の脱調復帰処理を行う。この場合は一旦第1の原点側で第1の原点パルス数が第1のカウントパルス数と異なり、入力パルス数が規定パルス数と等しい状況になっても、通常どおり入力パルス数「pls_count」が「100」であると判定され(ステップ403)、入力パルス数「pls_count」が「0」に変更され、指示棒2が回動範囲右端RO方向に回動していたかどうかを判定される(ステップ405)。このとき、指示棒2は回動範囲左端LO方向に回動していたため、回動範囲左端LO検出センサ16の出力がONであるかどうかを判定される(ステップ406)。このとき、回動範囲左端LO検出センサ16の出力はONであるため、ステッピングモータ5の回転方向が反転され(ステップ409)、未完了フラグ「clock_skip」が「0」に変更され(ステップ410)、原点パルス数「check_count」が「0」に変更される(ステップ411)。そして、次に指示棒2は回動範囲右端RO方向に回動するが、このときの指示棒2の動作は指示棒2が回動範囲右端RO方向へ回動する間にステッピングモータ5が脱調した場合と同様な状況となる。この場合、第1の脱調復帰処理を行う。
すなわち、第2の原点パルス数が第2のカウントパルス数と等しく、入力パルス数が規定パルス数とを異なることを制御部7が判定する場合、ステッピングモータ駆動部6は、駆動パルスをステッピングモータ5に入力せず、制御部7は、ステッピングモータ5に入力されない駆動パルスの数を入力パルス数に加算する。
これにより、ステッピングモータ5の空回りによるノイズは発生しない。また、ステッピングモータ5を空回りさせずに脱調から復帰させるため、ステッピングモータ5が脱調を繰り返すことを抑制する。また、ステッピングモータ5を空回りさせないため、回転運動変換部4の歯車等の噛合が外れることはなく、ステッピングモータ5を脱調から復帰させる。そのため、メトロノームの設置状況にかかわらずに脱調復帰処理を行い、指示棒2の往復回動を続けることができる。また駆動パルスはステッピングモータ5に入力される、されないに関わらずその発生のタイミングで入力パルス数をカウントしているので指示棒2の往復回動は一定の周期性を失うことはない。
以上により、本実施形態におけるメトロノームは、音楽練習者に対して厳密な設置条件を要求することなく正確な拍子を報知することができ、快適に使用することができる。
さらに本実施形態においては、原点検出センサを2つ有しているため、回動範囲の両方の回動端において、脱調復帰処理を行うことができる。これにより、より確実にステッピングモータを脱調から復帰させることができる。特に、第1の原点位置は、回動範囲の中心に対して一方の側に位置し、第2の原点位置は、回動範囲の中心に対して他方の側に位置する場合は有効である。ただし、N1、N2の設定を調整すれば、必ずしも第1の原点位置は、回動範囲の中心に対して一方の側に位置し、第2の原点位置は、回動範囲の中心に対して他方の側に位置する必要はない。
以上、添付図面を参照しながら、本発明に係るメトロノームの好適な実施形態について説明したが、本発明はかかる例に限定されない。当業者であれば、本願で開示した技術的思想の範疇内において、各種の変更例又は修正例に想到し得ることは明らかであり、それらについても当然に本発明の技術的範囲に属するものと了解される。
例えば、本実施形態において、ステッピングモータを備える例を説明したが、ステッピングモータ以外のモータを備えてもよい。また、原点検出センサも本実施形態以外のセンサを用いてもよく、例えばリードスイッチ等でもよい。
また、原点検出センサは少なくとも1つ以上有していればよい。原点検出センサが多い場合、指示棒を多数の位置で脱調状態から復帰させることが可能である。
また、本実施形態において、原点検出センサの検出状態が切替わる原点位置は、原点検出センサの出力がOFFからONに切替わる位置であったが、逆でもよい。
また、本実施形態の操作部はリモコン等の遠隔操作ができるものでもよい。
また、カウントパルス数Nが0の場合、カウントパルス数及び原点パルス数を設定しなくてもよい。この場合、駆動パルスをステッピングモータに入力し、ステッピングモータを往復回転運動するステッピングモータ駆動部と、往復回転運動により往復回動する指示棒と、指示棒が回動範囲の回動端に存在することを検出する少なくとも1つ以上の原点検出センサと、を有する点は上述の例と同様である。
しかし、上述の例と異なり、記憶部は指示棒が回動端まで回動するために規定される規定パルス数を記憶し、制御部は、指示棒が回動端まで回動する間に入力された入力パルス数を計数し、規定パルス数と入力パルス数とを比較する。
また、指示棒が回動端に存在することを原点検出センサが検出し、入力パルス数と規定数と異なることを制御部が判定する場合、ステッピングモータ駆動部は、駆動パルスを前記ステッピングモータに入力せず、制御部は、ステッピングモータに入力されない駆動パルスの数を入力パルス数に加算する。
この場合でも、ステッピングモータの空回りによるノイズは発生しない。また、ステッピングモータを空回りさせずに脱調から復帰させるため、ステッピングモータが脱調を繰り返すことを抑制する。また、ステッピングモータを空回りさせないため、回転運動変換部の歯車等の噛合が外れることはなく、ステッピングモータを脱調から復帰させる。そのため、メトロノームの設置状況にかかわらずに脱調復帰処理を行い、指示棒の往復回動を続けることができる。よって、音楽練習者に対して厳密な設置条件を要求することなく正確な拍子を報知することができ、快適に使用することができる。
また、本発明の説明態様の1つを以下に付記する。すなわち、
(1)駆動パルスをステッピングモータに入力し、前記ステッピングモータを往復回転運動するステッピングモータ駆動部と、前記往復回転運動により往復回動する指示棒と、前記指示棒が回動範囲の原点位置に存在することを検出する少なくとも1つ以上の原点検出センサと、前記指示棒が前記回動範囲を回動するために規定される規定パルス数と、前記指示棒が前記原点位置から前記回動端(未前出)まで回動するために規定されるカウントパルス数と、を記憶する記憶部と、前記指示棒が前記回動範囲を回動する間に入力された入力パルス数と、前記指示棒が前記原点位置から前記回動端まで回動する間に入力された原点パルス数とを計数し、前記入力パルス数と前記規定パルス数とを比較するとともに、前記原点パルス数と前記カウントパルス数とを比較する制御部と、を有し、前記原点パルス数が前記カウントパルス数と等しく、前記入力パルス数が前記規定パルス数とを異なることを前記制御部が判定する場合、前記ステッピングモータ駆動部は、前記駆動パルスを前記ステッピングモータに入力せず、前記制御部は、前記ステッピングモータに入力されない前記駆動パルスの数を前記入力パルス数に加算することを特徴とするメトロノーム。
(2)前記原点パルス数が前記カウントパルス数と異なり、前記入力パルス数が前記規定パルス数と異なることを前記制御部が判定する場合、前記ステッピングモータ駆動部は、前記駆動パルスを前記ステッピングモータに入力し、前記原点パルス数が前記カウントパルス数と等しく、前記入力パルス数が前記規定パルス数と等しいことを前記制御部が判定する場合、前記ステッピングモータ駆動部は、前記ステッピングモータの回転方向を反転することを特徴とする上述のメトロノーム。
(3)前記原点検出センサは、前記原点位置のうち第1の原点位置に存在することを検出する第1のセンサと、前記原点位置のうち第2の原点位置に存在することを検出する第2のセンサと、を有することを特徴とする上述のメトロノーム。
(4)前記第1の原点位置は、前記回動範囲の中心に対して一方の側に位置し、前記第2の原点位置は、前記回動範囲の中心に対して他方の側に位置することを特徴とする上述のメトロノーム。
(5)前記原点位置は、前記回動端とは異なる位置であることを特徴とする上述のメトロノーム。
(6)前記指示棒が前記原点位置に存在しないことを前記原点検出センサが検出し、前記入力パルス数が前記規定パルス数と等しいことを前記制御部が判定する場合、前記ステッピングモータ駆動部は、前記駆動パルスを前記ステッピングモータに入力せず、前記制御部は、エラー処理を行うことを特徴とする上述のメトロノーム。
(7)駆動パルスをステッピングモータに入力し、前記ステッピングモータを往復回転運動するステッピングモータ駆動部と、前記往復回転運動により往復回動する指示棒と、前記指示棒が回動範囲の回動端に存在することを検出する少なくとも1つ以上の原点検出センサと、前記指示棒が前記回動端まで回動するために規定される規定パルス数を記憶する記憶部と、前記指示棒が前記回動端まで回動する間に入力された入力パルス数を計数し、前記規定パルス数と前記入力パルス数とを比較する制御部と、を有し、前記指示棒が前記回動端に存在することを前記原点検出センサが検出し、前記入力パルス数と前記規定数と異なることを前記制御部が判定する場合、前記ステッピングモータ駆動部は、前記駆動パルスを前記ステッピングモータに入力せず、前記制御部は、前記ステッピングモータに入力されない前記駆動パルスの数を前記入力パルス数に加算することを特徴とするメトロノーム。