本発明の実施形態の例を図面に基づいて説明する。
[1.システムの全体構成]図1は、本発明の実施形態に係る制御システムの全体構成を示す。図1に示すように、本実施形態に係る制御システム1は基礎パーツ10とユーザ端末20とサーバシステム3とライブラリ提供サーバ40とを含む。
基礎パーツ10は電子工作の基礎となるパーツである。ユーザは基礎パーツ10に電子部品を接続し、プログラムを作成して実行することによって基礎パーツ10に接続された電子部品を制御することができ、所望の機能を有する物を作成することができる。基礎パーツ10の詳細に関しては後述する(図2,3参照)。
ユーザ端末20は、ユーザが基礎パーツ10を制御するために使用するコンピュータである。例えば、ユーザ端末20は、例えばスマートフォン、タブレット型コンピュータ、ラップトップ型コンピュータ、又はデスクトップ型コンピュータ等である。
図1に示すように、ユーザ端末20は制御部21と記憶部22と通信部23と撮影部24と操作部25と表示部26と音声出力部27とを含む。制御部21は少なくとも1つのプロセッサを含み、記憶部22に記憶されたプログラムに従って処理を実行する。記憶部22は主記憶部(例えばRAM)及び補助記憶部(例えば不揮発性の半導体メモリ、ハードディスクドライブ、又はソリッドステートドライブ)を含み、プログラムやデータを記憶する。通信部23は、インターネット等を含むネットワークNを介して他の装置とデータ通信するためのものである。
撮影部24は例えばCCD等の撮像素子である。操作部25は、ユーザが各種操作を行うためのものである。表示部26は各種画面を表示するためのものであり、例えば液晶ディスプレイ又は有機ELディスプレイ等である。図1では操作部25と表示部26とが別個に表されているが、操作部25と表示部26とはタッチパネルとして一体的に構成されてもよい。操作部25と表示部26とをタッチパネルとして一体的に構成することは必須ではなく、操作部25は、キーボード、マウス、タッチパッド(トラックパッド)、又はレバー(スティック)等のように、表示部26と別個に設けられてもよい。音声出力部27は音声を出力するためのものであり、例えばスピーカ又はヘッドホン等である。
サーバシステム3は1又は複数のサーバ30とデータベース34とを含む。サーバ30はサーバコンピュータである。図1に示すように、サーバ30は制御部31、記憶部32、及び通信部33を含む。制御部31、記憶部32、及び通信部33は制御部21、記憶部22、及び通信部23と同様である。サーバ30はデータベース34にアクセスすることが可能である。データベース34はサーバ30とは別のサーバコンピュータ内に構築されていてもよいし、サーバ30内に構築されていてもよい。
プログラムやデータはネットワークNを介して遠隔地からユーザ端末20又はサーバ30に供給されて、記憶部22又は記憶部32に記憶される。なお、情報記憶媒体(例えば光ディスク又はメモリカード等)に記憶されたプログラムやデータを読み取るための構成要素(例えば光ディスクドライブ又はメモリーカードスロット等)がユーザ端末20又はサーバ30に備えられていてもよい。そして、プログラムやデータが情報記憶媒体を介してユーザ端末20又はサーバ30に供給されてもよい。
図1では一つの基礎パーツ10のみが示されているが、実際には複数の基礎パーツ10が存在する。同様に、図1では一つのユーザ端末20のみが示されているが、実際には複数のユーザ端末20が存在する。
サーバシステム3は基礎パーツ10やユーザ端末20から見て外部ネットワーク上に配置される。複数の基礎パーツ10の各々からインターネット等を含むネットワークNを介してサーバシステム3に共通に通信接続可能である。また、複数のユーザ端末20の各々からもインターネット等を含むネットワークNを介してサーバシステム3に共通に通信接続可能である。
また、図1では一つのサーバ30のみが示されているが、サーバシステム3は複数のサーバ30を含んでもよい。例えば、メインのサーバ30への接続数(アクセス数)が閾値よりも多くなった場合に、サブのサーバ30への接続が行われるようにしてもよい。
ライブラリ提供サーバ40は、ユーザ端末20からネットワークN及びサーバシステム3を介して基礎パーツ10を制御するためのプログラムを作成しやすくするためのAPI(アプリケーションプログラムインタフェース)のライブラリが記憶されたサーバコンピュータである。
例えば、ユーザ端末20からサーバシステム3に通信接続するためのAPIや、ユーザ端末20から基礎パーツ10を制御するためのコマンドを送信するためのAPIのライブラリがライブラリ提供サーバ40に記憶されている。これらのライブラリは基礎パーツ10の提供者によって作成され、ライブラリ提供サーバ40に登録される。本実施形態では、ユーザ端末20とサーバシステム3とがWebSocketを介して通信接続されるようになっており、WebSocketを介して通信接続するためのAPIのライブラリ等がライブラリ提供サーバ40に登録されている。
ライブラリ提供サーバ40はユーザ端末20から見て外部ネットワーク上に配置され、複数のユーザ端末20の各々からネットワークNを介して共通にアクセス可能である。言い換えれば、ライブラリ提供サーバ40は複数のユーザ端末20の各々に共通のライブラリを提供可能である。なお、ライブラリ提供サーバ40はサーバシステム3内のサーバ30によって実現されてもよい。
[2.基礎パーツの構成]図2は基礎パーツ10の外観の一例を示し、図3は基礎パーツ10のハードウェア構成の一例を示す。
[2−1]図2は基礎パーツの表面側を上方から見た様子を示す図である。基礎パーツ10は、小型の基板上に各種チップやディスプレイ等が取り付けられた構成を有する。図2,3に示すように、基礎パーツ10は制御部11と記憶部12と通信部13とUSB端子14と操作部15と表示部16とを含む。制御部11は記憶部12、通信部13、USB端子14、操作部15や、表示部16と例えばI2C(Inter-Integrated Circuit)バスで接続される。
制御部11は第1プロセッサ11Aと第2プロセッサ11Bとを含む。第1プロセッサ11Aと第2プロセッサ11Bとは例えばI2Cバスで接続されており、相互に通信可能である。図2に示す例では、第1プロセッサ11Aと第2プロセッサ11Bとが基礎パーツ10の表面側に設けられておらず、裏面側に設けられている。
記憶部12は主記憶部(例えばRAM)及び補助記憶部(例えば不揮発性の半導体メモリ、ハードディスクドライブ、又はソリッドステートドライブ)を含み、プログラムやデータを記憶する。図2に示す例では、記憶部12に相当する素子が基礎パーツ10の表面側に設けられておらず、裏面側に設けられている。
通信部13は、インターネット等を含むネットワークNを介して他の装置とデータ通信するためのものである。例えば、通信部13は無線LAN通信規格に則った通信を行うためのものである。このため、基礎パーツ10は、通信部13を介して、別途設置された無線LANアクセスポイントと無線通信接続される。なお、通信部13は、無線LAN通信規格以外の通信規格に則った通信を行うためのものであってもよい。例えば、通信部13は、携帯電話網又は有線LANを介して通信を行うためのものであってもよい。図2に示す例では、通信部13に相当する素子が基礎パーツ10の表面側に設けられている。
USB端子14はUSBインタフェース規格に則った端子である。本実施形態では、USB端子14は基礎パーツ10を駆動するための電力を供給するために用いられる。すなわち、USB端子14はUSBケーブルを介して電源と接続される。図2に示す例では、USB端子14が基礎パーツ10の左側側面に設けられている。なお、基礎パーツ10へ電力を供給するための方法はUSB端子14を用いる方法に限られず、他の方法を採用してもよい。
操作部15は、ユーザが各種操作を行うためのものである。後述するように、操作部15は、基礎パーツ10に対して無線LANの設定(SSIDやパスワード等の設定)を行う際に用いられる。図2に示す例では、ダイヤル式の操作部15が基礎パーツ10の奥側側面に設けられている。
表示部16は基礎パーツ10に関する各種情報を表示するためのものであり、例えば有機ELディスプレイ又は液晶ディスプレイ等である。図2に示す例では、表示部16が基礎パーツ10の表面側に設けられている。
また図2,3に示すように、基礎パーツ10は12個の端子17−0,17−1,17−2,17−3,17−4,17−5,17−6,17−7,17−8,17−9,17−10,17−11を含む。
端子17−0〜17−11は、汎用の各種電子部品を接続するための端子である。例えば、LED、サーボモータ、DCモータ、ボリューム(可変抵抗)、ボタン、加速度センサ、又は温度センサ等を端子17−0〜17−11に接続できる。当然のことながら、これら以外の電子部品も端子17−0〜17−11に接続できる。図2に示す例では、端子17−0〜17−11が基礎パーツ10の手前側側面に設けられている。本実施形態では12個の端子17−0〜17−11を設けているが、11個以下の端子を設けてもよいし、13個以上の端子を設けてもよい。なお以下では、端子17−0〜17−11の各々を総称して「端子17」と記載する場合がある。
後述するように、ユーザはユーザ端末20でプログラムを入力し、当該プログラムを当該ユーザ端末20で実行させることによって、基礎パーツ10に接続された電子部品を制御できる。例えば、ユーザはユーザ端末20でプログラムを実行させることによって、端子17に接続されたLEDを光らせたり、端子17に接続されたサーボモータを回転させたりすることができる。また例えば、ユーザはユーザ端末20でプログラムを実行させることによって、基礎パーツ10の端子17に接続されたボタンが押下された場合に当該基礎パーツ10の別の端子17に接続されたLEDを光らせたり、他の基礎パーツ10の端子17に接続されたLEDを光らせたりすることもできる。
さらに図3に示すように、基礎パーツ10は、端子17−0〜17−11にそれぞれ対応する入出力部18−0,18−1,・・・,18−11を含む。
入出力部18−0は制御部11と端子17−1との間に接続される。図3に示すように、入出力部18−0はモータドライバ18A−0とバススイッチ18B−0とを含む。図3に示すように、第1プロセッサ11Aはモータドライバ18A−0とバススイッチ18B−0との両方に接続されている。同様に、第2プロセッサ11Bもモータドライバ18A−0とバススイッチ18B−0との両方に接続されている。さらに、第2プロセッサ11Bは端子17−0とも接続されている。なお、モータドライバ18A−0には電子ヒューズ(図示せず)が接続される。
同様に、入出力部18−1は制御部11と端子17−1との間に接続される。図3に示すように、入出力部18−1はモータドライバ18A−1とバススイッチ18B−1とを含む。入出力部18−1、モータドライバ18A−1や、バススイッチ18B−1は、入出力部18−0、モータドライバ18A−0や、バススイッチ18B−0と同様の構成を有する。
また、入出力部18−11は制御部11と端子17−11との間に接続される。図3に示すように、入出力部18−11はモータドライバ18A−11とバススイッチ18B−11とを含む。入出力部18−11、モータドライバ18A−11や、バススイッチ18B−11も、入出力部18−0、モータドライバ18A−0や、バススイッチ18B−0と同様の構成を有する。
図3では省略しているが、端子17−2〜17−10の各々に対しても、入出力部18−0と同様の入出力部がそれぞれ設けられる。
なお以下では、入出力部18−0,18−1,・・・,18−11の各々を総称して「入出力部18」として記載する場合がある。同様に、モータドライバ18A−0,18A−1,・・・,18A−11の各々を総称して「モータドライバ18A」と記載し、バススイッチ18B−0,18B−1,・・・,18B−11の各々を総称して「バススイッチ18B」と記載する場合がある。
[2−2]制御部11(第1プロセッサ11A及び第2プロセッサ11B)は、端子17に接続された電子部品の種類に応じて、入出力部18(モータドライバ18A及びバススイッチ18B)を制御する。図4A〜図4Dは入出力部18に対する制御の例について説明するための図である。
図4Aは、3Vの信号を供給する必要がある電子部品が端子17に接続された場合の入出力部18に対する制御を示す。この場合、第2プロセッサ11Bはモータドライバ18Aを無効(Disable)に設定し、バススイッチ18Bを有効(Enable)に設定する。その結果、第1プロセッサ11Aは3V又は0Vの信号をバススイッチ18Bを介して端子17に出力する。
図4Bは、大きい信号を供給する必要がある電子部品や高負荷の電子部品が端子17に接続された場合の入出力部18に対する制御を示す。図4Bでは、図4Aの場合よりも大きい5Vの信号を供給する必要がある電子部品が端子17に接続された場合の入出力部18に対する制御を示す。この場合、第2プロセッサ11Bはモータドライバ18Aを有効に設定し、バススイッチ18Bを無効に設定する。その結果、第1プロセッサ11Aは5V又は0Vの信号をモータドライバ18Aを介して端子17に出力する。第1プロセッサ11Aが3Vの信号をモータドライバ18Aに入力した場合にモータドライバ18Aが5Vの信号を端子17に出力する。
図4Cは、3V又は5Vのデジタル信号を基礎パーツ10に入力するような電子部品が端子17に接続された場合の入出力部18に対する制御を示す。この場合、第2プロセッサ11Bはモータドライバ18Aを無効に設定し、バススイッチ18Bを有効に設定する。その結果、端子17から入力されたデジタル信号がバススイッチ18Bを介して第1プロセッサ11Aに供給される。
図4Dは、アナログ信号を基礎パーツ10に入力するような電子部品が端子17に接続された場合の入出力部18に対する制御を示す。この場合、第2プロセッサ11Bはモータドライバ18Aを無効に設定し、バススイッチ18Bも無効に設定する。その結果、端子17から入力されたアナログ信号がA/D変換回路(図示せず)を介して第2プロセッサ11Bに入力される。そして、入力された信号が第2プロセッサ11Bから第1プロセッサ11Aに供給される。
以上のような構成を有することによって、基礎パーツ10では各種部品を端子17に接続することが可能である。例えば、基礎パーツ10では、必要な電圧や電流又は負荷の異なる各種部品を端子17に接続することが可能である。具体的には、個々の端子17に対してモータドライバ18Aとバススイッチ18Bとの両方が接続されており、端子17に接続される電子部品に応じてそれらが切り替えられるようになっている。すなわち、大きい電圧(又は電流)が必要な電子部品や高負荷の電子部品が端子17に接続された場合にはモータドライバ18Aを介して制御を行い、小さい電圧が必要な電子部品や低負荷の電子部品が端子17に接続された場合にはバススイッチ18Bを介して制御を行うようになっている。さらに、デジタル信号を基礎パーツ10に入力するような電子部品と、アナログ信号を基礎パーツ10に入力するような電子部品とのどちらも端子17に接続することが可能である。
[2−3]先述したように、基礎パーツ10は第1プロセッサ11Aと第2プロセッサ11Bとの2つのプロセッサを含んでいる。これらの第1プロセッサ11Aと第2プロセッサ11Bとは互いの状態や入出力を監視している。図5A〜図5Dは、第1プロセッサ11Aと第2プロセッサ11Bとの2つのプロセッサを用いた監視について説明するための図である。
図5Aは正常に動作している場合の例について示す。図5Aに示す例では、第1プロセッサ11Aが5Vの信号を端子17に出力している(A1)。第2プロセッサ11Bは端子17の電圧をアナログ値で読み取ることができるようになっており(A2)、第2プロセッサ11Bは読み取った電圧値(例えば4.7V)を第1プロセッサ11Aに通知する(A3)。そして、第1プロセッサ11Aは、第2プロセッサ11Bから通知された電圧値が所定の正常範囲内であるため、端子17への出力が正常に行われたと判定する(A4)。
図5Bは異常が発生した場合の例について示す。図5Bに示す例では、第1プロセッサ11Aが、例えばモータのVCC端子が接続された端子17に5Vの信号を出力している(B1)。しかしながら、例えば、モータのコイルが短絡していた場合には、モータのVCC端子が接続された端子17もGND端子と同様に0Vになる場合がある。この場合、図5Aに示した例と同様、第2プロセッサ11Bは端子17の電圧値を読み取り(B2)、第2プロセッサ11Bは読み取った電圧値(例えば0V)を第1プロセッサ11Aに通知する(B3)。この場合、第1プロセッサ11Aは、第2プロセッサ11Bから通知された電圧値が所定の正常範囲外であるため、異常が発生していると判定する(B4)。この場合、例えば、第1プロセッサ11Aは端子17への出力を停止する。
図5Cは第1プロセッサ11Aで異常が発生した場合の例について示す。第1プロセッサ11Aは、通信部13の制御や、後述するような、サーバシステム3を介して受信されるコマンドの実行等の各種処理を行う。このため、何らかの原因によって処理が正常に行われず、第1プロセッサ11Aが停止したり、暴走したりする場合がある。この場合、第1プロセッサ11Aと第2プロセッサ11Bとの間の通信が正常に行われなくなるため、第2プロセッサ11Bは第1プロセッサ11Aで異常が発生したと判定し(C1)、端子17に接続された電子部品を保護すべく、入出力部18を入力モード(図4C又は4Dに示した状態)に設定する(C2)。
図5Dは第2プロセッサ11Bで異常が発生した場合の例について示す。第2プロセッサ11Bは第1プロセッサ11Aよりも端子17に近い部分に接続されているため、端子17に接続された電子部品(回路)によって電気的又は物理的に悪影響を受ける可能性があり、その結果、第2プロセッサ11Bで異常が発生する場合がある。この場合、第1プロセッサ11Aと第2プロセッサ11Bとの間の通信が正常に行われなくなるため、第1プロセッサ11Aは第2プロセッサ11Bで異常に発生したと判定し(D1)、異常の発生を示す通知を表示部16に表示したり、サーバシステム3に送信したりする(D2)。なお、例えば、サーバシステム3に送信された通知は、サーバシステム3によってユーザ端末20に送信される。
以上のように、本実施形態では、個々の端子17に対して2つのプロセッサ(第1プロセッサ11A及び第2プロセッサ11B)を用意し、一方のプロセッサ(第1プロセッサ11A)によって行われた制御が正常に行われたかを他方のプロセッサ(第2プロセッサ11B)が監視するようになっている。また、プロセッサ同士が互いの状態を監視するようになっている。このため、異常が発生した場合に適切に対処できるようになっている。
[3.基礎パーツの使用手順]ユーザが基礎パーツ10を使用する場合に行う手順について説明する。先述したように、ユーザはユーザ端末20でプログラムを編集し、当該プログラムをユーザ端末20で実行させることによって、基礎パーツ10に接続された電子部品を制御できる。例えば、ユーザはユーザ端末20でプログラムを実行させることによって、端子17に接続されたLEDを光らせたり、端子17に接続されたサーボモータを回転させたりすることができる。以下、そのためにユーザが行う手順について説明する。
[3−1]まず、プログラムを編集するためのプログラム編集画面をユーザ端末20の表示部26に表示させるまでの手順について説明する。
最初に、ユーザはUSBケーブルを介して、基礎パーツ10のUSB端子14に電源を接続する。基礎パーツ10のUSB端子14に電源が接続されると、基礎パーツ10が起動する。この場合、無線LANの設定がなされていなければ(又は、無線LANの設定はなされているが、無線LANに接続できなければ)、制御部11は、無線LANに接続するための情報の入力を受け付けるための画面を表示部16に表示する。この場合、ユーザは操作部15を操作して、例えばSSIDやパスワード等の情報を入力する。
基礎パーツ10が無線LANに接続されると、例えば図6に示すような処理が実行される。図6に示すように、基礎パーツ10の制御部11は接続要求を通信部13によってサーバ30に送信し(S1000)、サーバ30は接続要求を通信部33によって受信する(S3000)。基礎パーツ10の記憶部12には、基礎パーツ10を一意に識別するための識別情報であるIDが記憶されており、このIDが接続要求とともにサーバ30に送信される。
接続要求がサーバ30で受信された場合、サーバ30の制御部31は、接続要求とともに受信したIDがデータベース34に登録されているか否かを判定することによって、当該IDが正当であるか否かを確認する(S3002)。そして、IDが正当であることが確認された場合、制御部31はランダムに生成したランダムデータを通信部33によって基礎パーツ10に返信し(S3004)、基礎パーツ10はこのランダムデータを通信部13によって受信する(S1002)。
ランダムデータが基礎パーツ10で受信された場合、制御部11は、記憶部12に記憶された秘密鍵を基づいて署名データを生成する(S1004)。そして、制御部11は、この署名データを、ステップS1002で受信されたランダムデータのハッシュ値とともに、通信部13によってサーバ30に送信し(S1006)、サーバ30はこれらの署名データとハッシュ値とを通信部33によって受信する(S3006)。
署名データとハッシュ値とがサーバ30で受信された場合、制御部31は、データベース34に記憶された公開鍵とハッシュ値とに基づき、署名データが正当であるか否かを判定する(S3008)。そして、署名データが正当であることが確認された場合、基礎パーツ10とサーバ30との間に通信接続(WebSocketによる常時接続)が確立される。この場合、制御部31は、基礎パーツ10に関する情報を示す情報画面データを生成し、情報画面データを通信部33によって基礎パーツ10に送信する(S3010)。
基礎パーツ10は情報画面データを通信部13によって受信し(S1008)、制御部11は情報画面データに基づいて情報画面を表示部16に表示する(S1010)。
図7は、基礎パーツ10の表示部16に表示される情報画面の一例を示す図である。図7に示すように、情報画面G100は表示要素E101,E102,E103を含む。
表示要素E101は基礎パーツ10のIDを示す。図7に示す例では、基礎パーツ10のIDが「0000−0000」であることが示されている。表示要素E102は、基礎パーツ10を制御するためのプログラムを編集するためのプログラム編集画面をユーザ端末20に表示するためにアクセスすべきURLを示す。このURLが示すウェブサイト(ウェブページ)はサーバ30によって提供される。なお、このウェブサイトを提供するサーバ30は、以上に説明したステップS3000〜S3010を実行するサーバ30とは別のサーバであってもよい。
また、表示要素E103は、基礎パーツ10のIDと上記のURLとが埋め込まれたQRコード(登録商標)である。ここではQRコードを利用しているが、QRコード以外のコード画像を利用してもよい。
なお、ステップS1006では、基礎パーツ10の位置に関する情報をサーバ30に送信してもよい。そして、ステップS3010では、制御部31は、基礎パーツ10の位置に合ったウェブサイトのURLを表示要素E102として表示し、かつ、当該URLが埋め込まれたQRコードをE103として表示する情報画面データを基礎パーツ10に送信してもよい。例えば、基礎パーツ10が日本国内にある場合には、日本国内にあるサーバ30によって提供されるウェブサイトのURLを示す表示要素E102,E103を情報画面G100に表示し、基礎パーツ10が米国内にある場合には、米国内にあるサーバ30によって提供されるウェブサイトのURLを示す表示要素E102,E103を情報画面G100に表示してもよい。
例えば、ユーザは情報画面G100に表示されたQRコードをユーザ端末20の撮影部24に読み取らせる。この場合、ユーザ端末20の制御部21は、読み取られたQRコードに埋め込まれたURL及びIDを抽出する(S2000)。また、制御部21はウェブブラウザを起動し、ステップS2000で抽出したURLに基づき、HTTP要求を通信部23によってサーバ30に送信し(S2002)、サーバ30はHTTP要求を通信部33によって受信する(S3012)。なお、このHTTP要求にはQRコードから抽出されたIDも含まれる。
HTTP要求がサーバ30で受信された場合、制御部31は、HTTP要求とともに受信したIDがデータベース34に登録されているか否かを判定することによって、当該IDが正当であるか否かを確認する(S3014)。そして、受信したIDが正当であることが確認された場合、制御部31は、当該IDに関連付けて記憶されるプログラムデータを読み出す(S3016)。
本実施形態においては、図8に示すように、各基礎パーツ10のIDに関連付けてプログラムデータがデータベース34に記憶される。例えば、初期状態では、サンプルプログラムのデータが各基礎パーツ10のIDと関連付けて記憶される。また、ユーザが基礎パーツ10用にプログラムを作成した後では、ユーザが作成したプログラムのデータが基礎パーツ10のIDと関連付けてデータベース34に保存される。このため、ステップS3016では、制御部31は、ステップS3012で受信したIDと関連付けて記憶されるプログラムデータをデータベース34から読み出す。なお、図8に示す例では、一つのIDに対して一つのプログラムデータが記憶されているが、一つのIDに対して複数のプログラムデータが記憶されてもよい。
ステップS3016の実行後、制御部31は、読み出したプログラムデータを含むHTTP応答を通信部33によってユーザ端末20に返信し(S3018)、ユーザ端末20はHTTP応答を通信部23によって受信する(S2004)。そして、制御部21は、HTTP応答に基づいてプログラム編集画面を表示部26に表示する(S2006)。
図9はプログラム編集画面の一例を示す。図9に示すように、プログラム編集画面G200は、表示要素E201,E202と、行番号領域A203と、編集領域A204とを含む。表示要素E201はプログラムの対象になる基礎パーツ10のIDを示す。表示要素E202はプログラムを保存して実行するためのボタンである。行番号領域A203は行番号を示す。編集領域A204は、ユーザがプログラムを編集するための領域であり、ユーザによって編集されたプログラムが表示される。例えば、ユーザは、表示部26に表示されるソフトウェアキーボードや、ユーザ端末20と有線又は無線接続されたキーボード等を用いて、プログラムを編集する。
なお、以上では、ユーザが情報画面G100に表示されたQRコードをユーザ端末20の撮影部24に読み取らせる場合について説明したが、ユーザはユーザ端末20でウェブブラウザを起動し、情報画面G100に表示されたURL(表示要素E102)を入力し、基礎パーツ10のIDの入力要求に応じて、情報画面G100に表示されたID(表示要素E101)を入力することによっても、図9と同様のプログラム編集画面G200をユーザ端末20の表示部26に表示させることができる。
[4.プログラム例(1)]基礎パーツ10を制御するためのプログラムの一例について説明する。
本実施形態に係る制御システム1では、ユーザはJavaスクリプト(登録商標)等の公知のプログラム言語を使用して、基礎パーツ10を制御するためのプログラムを作成できる。ここでは、Javaスクリプトを使用して作成されたプログラムの例について説明するが、他のプログラム言語を使用することも可能である。
図9(編集領域A204)に示すプログラム(HTMLコード)は、図10に示すような、サーボモータ50が接続された基礎パーツ10を制御するためのプログラムの一例である。具体的には、図9に示すプログラムは、ウェブブラウザに表示されたONボタンが押下(クリック又はタップ等)された場合にサーボモータ50を90度回転させ、ウェブブラウザに表示されたOFFボタンが押下された場合にサーボモータ50を元の状態(0度の状態)に戻すプログラムである。なお、図10に示す例では、サーボモータ50のマイナス線(GND)51が端子17−0に接続され、プラス線(VCC)52が端子17−1に接続され、信号線53が端子17−2に接続されている。なお、サーボモータ50は他の端子17に接続されていてもよい。
図9に示すプログラムのうちの第5行目部分では、ライブラリ提供サーバ40に記憶されているライブラリを取り込んでいる。先述したように、このライブラリはユーザ端末20をサーバシステム3と通信接続したり、基礎パーツ10に接続される各種電子部品を制御したりするためのAPIのライブラリを含んでいる。ユーザは通信接続に関する詳細な知識や電子部品の制御に関する詳細な知識を有していなくも、ライブラリを取り込んでAPIを利用することによって容易にプログラムを作成できる。例えば、本実施形態に係る制御システム1では、ユーザ端末20がWebSocketを介してサーバシステム3に接続するが、ユーザはWebSocketに関する詳細な知識を有していなくても、ライブラリを取り込んでAPIを利用することによって容易にプログラムを作成できる。
また、図9に示すプログラムのうちの第9,10行目部分は、ONボタン及びOFFボタンを表示するための部分に相当する。
また、図9に示すプログラムのうちの第11〜23行目部分は、基礎パーツ10に接続されたサーボモータ50を制御するためのJavaスクリプト部分に相当する。Javaスクリプト部分ではAPIが利用されている。第16〜18行目部分は、ONボタンが押下された場合にサーボモータ50を90度回転させるための部分に相当し、第19〜21行目部分は、OFFボタンが押下された場合にサーボモータ50を元の状態(0度の状態)に戻すための部分に相当する。Javaスクリプト部分の詳細については後述する。
プログラム編集画面G200の表示要素E202が押下された場合、編集領域A204に表示されたプログラム(HTMLコード)の保存及び実行が行われる。
すなわち、表示要素E202が押下された場合、表示要素E201に示されたID(0000−0000)とともに、編集領域A204に表示されたプログラムがユーザ端末20からサーバ30に送信される。この場合、サーバ30は、受信したIDに関連付けてデータベース34に記憶されたプログラムを、受信したプログラムに置き換える。
また、表示要素E202が押下された場合、編集領域A204に表示されたプログラム(HTMLコード)が実行される。この場合、図11に示すような実行画面G300がユーザ端末20の表示部26に表示される。図11に示す実行画面G300は表示要素E301,E302,E303,E304を含む。表示要素E301は表示要素E201と同様である。表示要素E302は実行画面G300を閉じて、プログラム編集画面G200に戻るためのボタンである。表示要素E303はOKボタンであり、表示要素E304はOFFボタンである。表示要素E303(OKボタン)が押下された場合には、基礎パーツ10に接続されたサーボモータ50が90度回転した状態になり、表示要素E304(OFFボタン)が押下された場合には、基礎パーツ10に接続されたサーボモータ50が元の状態(0度の状態)に戻る。
ここで、図9に示すプログラム(HTMLコード)のうちのJavaスクリプト部分(第11〜23行目部分)について詳細に説明する。図12は、Javaスクリプト部分が実行されることによって、ユーザ端末20とサーバ30と基礎パーツ10とにおいて実行される処理の一例を示す。
図9に示すプログラムの第12行目部分では、プログラムによる制御対象として、ID「0000−0000」の基礎パーツ10が指定されている。また、第13行目部分では、当該基礎パーツ10との通信接続が要求されている。
この第12〜13行目部分が実行されることによって、図12に示すステップS2100が実行される。すなわち、ユーザ端末20の制御部21は、ID「0000−0000」の基礎パーツ10への接続要求を通信部23によってサーバ30に送信する(S2100)。この場合、接続要求とともにID「0000−0000」がユーザ端末20からサーバ30に送信される。なお、後述するように、ユーザ端末20と基礎パーツ10とが直接的に通信接続されるわけではなく、ユーザ端末20と基礎パーツ10との間ではサーバ30を介してコマンド等のデータが授受されることになるため、接続要求は「中継要求」ということもできる。
サーバ30は、ユーザ端末20から送信された接続要求を通信部33によって受信する(S3100)。この場合、サーバ30の制御部31は、接続要求とともに受信したIDがデータベース34に登録されているか否かを判定することによって、当該IDが正当であるか否かを確認する(S3102)。
そして、IDが正当であることが確認された場合、制御部31は、受信したID「0000−0000」の基礎パーツ10とサーバ30との間に通信接続が確立されているか否かを判定する(S3104)。先述したように、基礎パーツ10への電力供給が開始されて基礎パーツ10が起動された場合に図6に示したステップS1000〜S1006,S3000〜S3008の処理が実行されることによって、基礎パーツ10とサーバ30との間に通信接続が確立される。そして、基礎パーツ10への電力供給が中止されるまでこの通信接続が維持される。このため、ステップS3104では、このような通信接続が維持されているか否かが確認される。
受信したID「0000−0000」の基礎パーツ10とサーバ30との間に通信接続が確立されていることが確認された場合、制御部31は、基礎パーツ10との接続がOKであることを通信部33によってユーザ端末20に通知し(S3106)、ユーザ端末20は当該通知を通信部23によって受信する(S2102)。この場合、サーバ30とユーザ端末20との間で所定の手順が実行されることによって通信接続(WebSocketによる常時接続)が確立される。
その後、図9に示すプログラムの第14行目部分が実行される。第14行目部分では、ID「0000−0000」の基礎パーツ10に接続された電子部品の種類がサーボモータ50であることが指定されるとともに、サーボモータ50のマイナス線(GND)51、プラス線(VCC)52、信号線53が端子17−0,17−1,17−2にそれぞれ接続されていることが指定されている。
第14行目部分が実行されることによって、図12に示すステップS2104が実行される。すなわち、制御部21は、サーボモータ50のマイナス線(GND)51、プラス線(VCC)52、信号線53がID「0000−0000」の基礎パーツ10の端子17−0,17−1,17−2にそれぞれ接続されていることを指定する指定コマンドを通信部23によってサーバ30に送信する(S2104)。この場合、サーボモータ50が接続された端子17−0,17−1,17−2の各々について、図4A〜4Dに示した制御モードのうちのどの制御モードで制御すべきかがライブラリに基づいて判断され、当該判断結果を示す指定コマンドがサーバ30に送信される。例えば、「{io0:0,io1:1,pwm0:{io:2,freq:1000}」のようなコマンドがユーザ端末20からサーバ30に送信される
サーバ30は、ユーザ端末20から送信された指定コマンドを通信部33によって受信する(S3108)。そして、サーバ30の制御部31は、ステップS3108で受信したコマンドが適切であるか否かを判定する(S3110)。
例えば、サーバ30の記憶部32には、ユーザ端末20から受信したコマンドが適切であるか否かを判定するための判定基準が記憶されている。例えば、適切なコマンド又は不適切なコマンドの類型が判定基準として記憶されている。このため、制御部31は、ステップS3108で受信したコマンドが適切なコマンドの類型(又は不適切なコマンドの類型)に合致するか否かを判定する。例えば、ステップS3108で受信したコマンドが適切なコマンドの類型に合致しない場合や、ステップS3108で受信したコマンドが不適切なコマンドの類型に合致する場合に、制御部31はステップS3108で受信したコマンドが適切でないと判定する。
また例えば、サーバ30の記憶部32には、ID「0000−0000」の基礎パーツ10に関して、ユーザ端末20から受信したコマンドの履歴が判定基準として記憶される。そして、制御部31は、当該履歴に基づいて、ステップS3108で受信したコマンドが適切であるか否かを判定する。例えば、ステップS3108で受信したコマンドよりも先に実行されるべきコマンドが未だ受信されていない場合に、制御部31はステップS3108で受信したコマンドが適切でないと判定する。
図12では省略しているが、ステップS3108で受信したコマンドが適切でないと判定された場合、制御部31はその旨を通信部33によってユーザ端末20に通知する。そして、通知内容がユーザ端末20の表示部26に表示される。
一方、ステップS3108で受信したコマンドが適切であると判定された場合、制御部31は、ステップS3108で受信したコマンドを基礎パーツ10の制御部11が解釈可能な形式に変換し、変換後のコマンドを通信部33によってID「0000−0000」の基礎パーツ10に送信する(S3112)。この場合、ステップS3108で受信したコマンドが、例えば「0x03,0x00,0x02,0x00,0x02」のような中間コード(バイトコード)のコマンドに変換され、変換後のコマンドがID「0000−0000」の基礎パーツ10に送信される。
ID「0000−0000」の基礎パーツ10は、サーバ30から送信されたコマンドを通信部13によって受信する(S1100)。この場合、基礎パーツ10の制御部11は、ステップS1100で受信したコマンドに応じた制御を実行する(S1102)。記憶部12には、サーバ30から受信されることがある各コマンドに対応する制御内容を定めたデータが記憶されており、制御部11は当該データを参照することによって、ステップS1102で受信したコマンドに対応する制御内容を特定する。
ステップS1102において、例えば、制御部11は、サーボモータ50のマイナス線(GND)51、プラス線(VCC)52、信号線53が接続された端子17−0,17−1,17−2の各々について、図4A〜4Dに示した制御モードのうちのどの制御モードで制御するのかを示すデータを記憶部12に記憶させる。また、この場合、第2プロセッサ11Bは、サーボモータ50が接続された端子17−0,17−1,17−2の入出力部18−0,18−1,18−2の各々に対して、図4Bに示したような制御を行う。また、第1プロセッサ11Aはマイナス線(GND)51が接続された端子17−0に0Vの信号を出力し、プラス線(VCC)52が接続された端子17−1に5Vの信号を出力する。
また、図9に示すプログラムでは、表示部26に表示された表示要素E303(OKボタン)が押下された場合に第17行目部分が実行される。この第17行目部分では、サーボモータ50を90度回転させる処理が実行される。この第17行目部分が実行されることによって、図12に示すステップS2106が実行される。すなわち、図12に示すように、制御部21は、ID「0000−0000」の基礎パーツ10の端子17−0,17−1,17−2に接続されたサーボモータ50を90度回転させるためのコマンドを通信部23によってサーバ30に送信する(S2106)。この場合、例えば「{pwm0:{duty:0.01}}」のようなコマンドがユーザ端末20からサーバ30に送信される。
サーバ30は、ユーザ端末20から送信されたコマンドを通信部33によって受信する(S3114)。そして、サーバ30の制御部31は、ステップS3114で受信したコマンドが適切であるか否かを判定する(S3116)。ステップS3116はステップS3110と同様である。
ステップS3114で受信したコマンドが適切であると判定された場合、制御部31は、当該コマンドを基礎パーツ10の制御部11が解釈可能な形式に変換し、変換後のコマンドを通信部33によってID「0000−0000」の基礎パーツ10に送信する(S3118)。この場合、ステップS3114で受信したコマンドが中間コード(バイトコード)のコマンドに変換され、変換後のコマンドがID「0000−0000」の基礎パーツ10に送信される。
ID「0000−0000」の基礎パーツ10は、サーバ30から送信されたコマンドを通信部13によって受信する(S1104)。そして、基礎パーツ10の制御部11は、受信したコマンドに応じた制御を実行する(S1106)。この場合、例えば、第1プロセッサ11Aは、サーボモータ50を90度回転させるための信号を、サーボモータ50の信号線53が接続された端子17−2に出力する。なお、この場合、第2プロセッサ11Bは、サーボモータ50の信号線53が接続された端子17−2の入出力部18−2に対して、図4Bに示したような制御を行う。
また、図9に示すプログラムでは、表示部26に表示された表示要素E304(OFFボタン)が押下された場合に第20行目部分が実行される。この第20行目部分では、サーボモータ50を元の状態(0度)の状態に戻す処理が実行される。この第20行目部分が実行されることによって、図12に示すステップS2108が実行される。すなわち、図12に示すように、制御部21は、ID「0000−0000」の基礎パーツ10の端子17−0,17−1,17−2に接続されたサーボモータ50を元の状態(0度)の状態に戻すためのコマンドをサーバ30に送信する(S2108)。この場合、例えば「{{pwm0:{duty:0.02}}」のようなコマンドがユーザ端末20からサーバ30に送信される。
サーバ30は、ユーザ端末20から送信されたコマンドを通信部33によって受信する(S3120)。そして、サーバ30の制御部31は、ステップS3120で受信したコマンドが適切であるか否かを判定する(S3122)。ステップS3122はステップS3110と同様である。
ステップS3120で受信したコマンドが適切であると判定された場合、制御部31は、当該コマンドを基礎パーツ10の制御部11が解釈可能な形式に変換し、変換後のコマンドを通信部33によってID「0000−0000」の基礎パーツ10に送信する(S3124)。この場合、ステップS3120で受信したコマンドが中間コード(バイトコード)のコマンドに変換され、変換後のコマンドがID「0000−0000」の基礎パーツ10に送信される。
ID「0000−0000」の基礎パーツ10は、サーバ30から送信されたコマンドを通信部13によって受信する(S1108)。この場合、基礎パーツ10の制御部11は、受信したコマンドに応じてサーボモータ50の制御を実行する(S1110)。この場合、例えば、第1プロセッサ11Aは、サーボモータ50を初期状態(0度の状態)に戻すための信号を、サーボモータ50の信号線53が接続された端子17−2に出力する。なお、この場合、第2プロセッサ11Bは、サーボモータ50の信号線53が接続された端子17−2の入出力部18−2に対して、図4Bに示したような制御を行う。
以上のように、本実施形態に係る制御システム1では、ユーザ端末20におけるユーザの操作に応じて、基礎パーツ10に接続されたサーボモータ50を回転させるようなシステムを実現できる。
なお、以上に説明した例では、サーボモータ50を基礎パーツ10に接続したが、サーボモータ50以外の電子部品を基礎パーツ10に接続してもよい。例えば、LEDを基礎パーツ10に接続し、ユーザ端末20におけるユーザの操作に応じて、基礎パーツ10に接続されたLEDを光らせるようにしてもよい。
また、ユーザ端末20で所定のイベントの発生が検知された場合に、基礎パーツ10に接続された電子部品を制御するようにしてもよい。例えば、所定のハッシュタグが付された投稿がなされたことが検知された場合や、所定のメールアドレス宛のメールが受信されたことが検知された場合に、基礎パーツ10に接続されたサーボモータ50を回転させたり、LEDを点灯させたりするようにしてもよい。
[5.プログラム例(2)]基礎パーツ10を制御するためのプログラムの他の一例について説明する。
ここでは、2つの基礎パーツ10を連携させるようなプログラムの例について説明する。具体的には、図13に示すような、ボリューム60とLED70とが接続された第1基礎パーツ10−1と、サーボモータ50が接続された第2基礎パーツ10−2とを連携させるようなプログラムの例について説明する。なお、第1基礎パーツ10−1はID「0000−0000」の基礎パーツ10であり、第2基礎パーツ10−2はID「1111−1111」の基礎パーツ10であることとする。また、ボリューム60は、ユーザがつまみ部64を回すことによって抵抗値が変化し、当該抵抗値によってつまみ部64の位置(つまみ部64がどの程度回されたか)を判別可能な電子部品である。例えば、つまみ部64の位置を示す数値として「0」から「1」までの間の数値がボリューム60から第1基礎パーツ10−1に入力される。「0」はつまみ部64が回されていない状態(つまみ部64の初期位置)に相当し、「1」はつまみ部64が最大限回された状態に相当し、「0.5」はつまみ部64が半分程度まで回された状態に相当する。
図13に示す例では、第1基礎パーツ10−1において、ボリューム60の第1ピン61、第2ピン62、第3ピン63がそれぞれ端子17−0,17−1,17−2に接続され、LED70のアノード71及びカソード72がそれぞれ端子17−10,17−11に接続されている。なお、ボリューム60やLED70は他の端子17に接続されていてもよい。一方、第2基礎パーツ10−2において、サーボモータ50のマイナス線(GND)51、プラス線(VCC)52、信号線53がそれぞれ端子17−0,17−1,17−2に接続されている。なお、サーボモータ50は他の端子17に接続されていてもよい。
図14は、図9と同様にプログラム編集画面G200の一例を示しており、図14の編集領域A204には、ユーザが第1基礎パーツ10−1に接続されたボリューム60のつまみ部64を回した場合に、つまみ部64が半分以上回されたら、第1基礎パーツ10−1に接続されたLED70を点灯させたり、つまみ部64の位置に対応する角度だけ、第2基礎パーツ10−2に接続されたサーボモータ50を回転させたりするためのプログラム(HTMLコード)が表示されている。
図14(編集領域A204)に示すプログラムのうちの第1〜5行目部分は、図9(編集領域A204)に示すプログラムのうちの第1〜5行目部分と同じである。
また、図14に示すプログラムのうちの第9〜27行目部分は、上記連携を実現するためのJavaスクリプト部分に相当している。図15A〜図15Cは、Javaスクリプト部分が実行されることによって、ユーザ端末20とサーバ30と基礎パーツ10とにおいて実行される処理の一例を示す。
図14に示すプログラムの第10行目部分では、プログラムによる第1の制御対象として、ID「0000−0000」の第1基礎パーツ10−1が指定されている。また、第11行目部分では、第1基礎パーツ10−1との通信接続が要求されている。
これらの部分が実行されることによって、図15Aに示すステップS2200が実行される。すなわち、ユーザ端末20の制御部21は、ID「0000−0000」の第1基礎パーツ10−1への接続要求を通信部23によってサーバ30に送信する(S2200)。この場合、接続要求とともにID「0000−0000」がユーザ端末20からサーバ30に送信される。なお、後述するように、ユーザ端末20と第1基礎パーツ10−1とが直接的に通信接続されるわけではなく、ユーザ端末20と第1基礎パーツ10−1との間ではサーバ30を介してコマンド等のデータが授受されることになるため、接続要求は「中継要求」ということもできる。
サーバ30は、ユーザ端末20から送信された接続要求を通信部33によって受信する(S3200)。この場合、サーバ30の制御部31は、接続要求とともに受信したIDがデータベース34に登録されているか否かを判定することによって、当該IDが正当であるか否かを確認する(S3202)。そして、IDが正当であることが確認された場合、制御部31は、受信したID「0000−0000」の第1基礎パーツ10−1とサーバ30との間に通信接続が確立されているか否かを判定する(S3204)。これらステップS3202,S3204は図12のステップS3102,S3104と同様である。
第1基礎パーツ10−1とサーバ30との間に通信接続が確立されていることが確認された場合、制御部31は、第1基礎パーツ10−1との接続がOKであることを通信部33によってユーザ端末20に通知し(S3206)、ユーザ端末20は当該通知を通信部23によって受信する(S2202)。この場合、サーバ30とユーザ端末20との間で所定の通信が実行されることによって通信接続(WebSocketによる常時接続)が確立される。
その後、図14に示すプログラムの第12,13行目部分が実行される。第12行目部分では、プログラムによる第2の制御対象として、ID「1111−1111」の第2基礎パーツ10−2が指定されている。また、第13行目部分では、第2基礎パーツ10−2との通信接続が要求されている。
これらの部分が実行されることによって、図15Aに示すステップS2204が実行される。すなわち、ユーザ端末20の制御部21は、ID「1111−1111」の第2基礎パーツ10−2への接続要求を通信部23によってサーバ30に送信する(S2204)。この場合、接続要求とともにID「1111−1111」がユーザ端末20からサーバ30に送信される。なお、後述するように、ユーザ端末20と第2基礎パーツ10−2とが直接的に通信接続されるわけではなく、ユーザ端末20と第2基礎パーツ10−2との間ではサーバ30を介してコマンド等のデータが授受されることになるため、接続要求は「中継要求」ということもできる。
サーバ30は、ユーザ端末20から送信された接続要求を通信部33を介して受信する(S3208)。この場合、サーバ30の制御部31は、接続要求とともに受信したIDがデータベース34に登録されているか否かを判定することによって、当該IDが正当であるか否かを確認する(S3210)。そして、IDが正当であることが確認された場合、制御部31は、受信したID「1111−1111」の第2基礎パーツ10−2とサーバ30との間に通信接続が確立されているか否かを判定する(S3212)。これらステップS3210,S3212は図12のステップS3102,S3104と同様である。
第2基礎パーツ10−2とサーバ30との間に通信接続が確立されていることが確認された場合、制御部31は、第2基礎パーツ10−2との接続がOKであることを通信部33によってユーザ端末20に通知し(S3214)、ユーザ端末20は当該通知を通信部23によって受信する(S2206)。
その後、図14に示すプログラムの第14行目部分が実行される。第14行目部分では、ID「0000−0000」の第1基礎パーツ10−1に接続された電子部品の種類がボリューム60(ポテンショメータ)であることが指定されるとともに、ボリューム60の第1ピン61、第2ピン62、第3ピン63がそれぞれ端子17−0,17−1,17−2にそれぞれ接続されていることが指定されている。
第14行目部分が実行されることによって、図15Bに示すステップS2208が実行される。すなわち、ユーザ端末20の制御部21は、ボリューム60(ポテンショメータ)の第1ピン61、第2ピン62、第3ピン63がID「0000−0000」の第1基礎パーツ10−1の端子17−0,17−1,17−2にそれぞれ接続されていることを指定する指定コマンドをサーバ30に送信する(S2208)。この場合、ボリューム60が接続された端子17−0,17−1,17−2の各々について、図4A〜4Dに示した制御モードのうちのどの制御モードで制御すべきかがライブラリに基づいて判断され、当該判断結果を示す指定コマンドがサーバ30に送信される。
サーバ30は、ユーザ端末20から送信された指定コマンドを通信部33によって受信する(S3216)。そして、サーバ30の制御部31は、ステップS3216で受信したコマンドが適切であるか否かを判定する(S3218)。ステップS3218は図12のステップS3110と同様である。
ステップS3216で受信したコマンドが適切であると判定された場合、制御部31は、ステップS3216で受信したコマンドを第1基礎パーツ10−1の制御部11が解釈可能な形式に変換し、変換後のコマンドを通信部33によってID「0000−0000」の第1基礎パーツ10−1に送信する(S3220)。この場合、ステップS3216で受信したコマンドが中間コード(バイトコード)のコマンドに変換され、変換後のコマンドがID「0000−0000」の第1基礎パーツ10−1に送信される。
ID「0000−0000」の第1基礎パーツ10−1は、サーバ30から送信されたコマンドを通信部13によって受信する(S1200)。この場合、第1基礎パーツ10−1の制御部11は、受信したコマンドに応じた制御を実行する(S1202)。例えば、制御部11は、ボリューム60の第1ピン61、第2ピン62、第3ピン63が接続された端子17−0,17−1,17−2の各々について、図4A〜4Dに示した制御モードのうちのどの制御モードで制御するのかを示すデータを記憶部12に記憶する。この場合、第2プロセッサ11Bは、端子17−0,17−2の入出力部18−0,18−2に対して、図4Aに示したような制御を行い、端子17−1の入出力部18−1に対して、図4Dに示したような制御を行うことによって、ボリューム60からの入力を端子17−1を介して受け付ける状態とする。
その後、図14に示すプログラムの第15行目部分が実行される。第15行目部分では、ID「0000−0000」の第1基礎パーツ10−1に接続された電子部品の種類がLED70であることが指定されるとともに、LED70のアノード71、カソード72が端子17−10,17−11にそれぞれ接続されていることが指定されている。
第15行目部分が実行されることによって、図15Bに示すステップS2210が実行される。すなわち、ユーザ端末20の制御部21は、LED70のアノード71、カソード72がID「0000−0000」の第1基礎パーツ10−1の端子17−10,17−11にそれぞれ接続されていることを指定する指定コマンドを通信部23によってサーバ30に送信する(S2210)。この場合、LED70が接続された端子17−10,17−11の各々について、図4A〜4Dに示した制御モードのうちのどの制御モードで制御すべきかがライブラリに基づいて判断され、当該判断結果を示す指定コマンドがサーバ30に送信される。
サーバ30は、ユーザ端末20から送信された指定コマンドを通信部33によって受信する(S3222)。そして、サーバ30の制御部31は、ステップS3222で受信したコマンドが適切であるか否かを判定する(S3224)。ステップS3224は図12のステップS3110と同様である。
ステップS3222で受信したコマンドが適切であると判定された場合、制御部31は、ステップS3222で受信したコマンドを第1基礎パーツ10−1の制御部11が解釈可能な形式に変換し、変換後のコマンドを通信部33によってID「0000−0000」の第1基礎パーツ10−1に送信する(S3226)。この場合、ステップS3222で受信したコマンドが中間コード(バイトコード)のコマンドに変換され、変換後のコマンドがID「0000−0000」の第1基礎パーツ10−1に送信される。
ID「0000−0000」の第1基礎パーツ10−1は、サーバ30から送信されたコマンドを通信部13によって受信する(S1204)。この場合、第1基礎パーツ10−1の制御部11は、受信したコマンドに応じた制御を実行する(S1206)。例えば、制御部11は、LED70のアノード71、カソード72が接続された端子17−10,17−11の各々について、図4A〜4Dに示した制御モードのうちのどの制御モードで制御するのかを示すデータを記憶部12に記憶する。
その後、図14に示すプログラムの第16行目部分が実行される。第16行目部分では、ID「1111−1111」の第2基礎パーツ10−2に接続された電子部品の種類がサーボモータ50であることが指定されるとともに、サーボモータ50のマイナス線(GND)51、プラス線(VCC)52、信号線53が端子17−0,17−1,17−2にそれぞれ接続されていることを指定されている。
第16行目部分が実行されることによって、図15Bに示すステップS2212が実行される。すなわち、ユーザ端末20の制御部21は、サーボモータ50のマイナス線(GND)51、プラス線(VCC)52、信号線53がID「1111−1111」の第2基礎パーツ10−2の端子17−0,17−1,17−2にそれぞれ接続されていることを指定する指定コマンドをサーバ30に送信する(S2212)。この場合、サーボモータ50が接続された端子17−0,17−1,17−2の各々について、図4A〜4Dに示した制御モードのうちのどの制御モードで制御すべきかがライブラリに基づいて判断され、当該判断結果を示す指定コマンドがサーバ30に送信される。
サーバ30は、ユーザ端末20から送信された指定コマンドを通信部33によって受信する(S3228)。そして、サーバ30の制御部31は、ステップS3228で受信したコマンドが適切であるか否かを判定する(S3230)。ステップS3230は図12のステップS3110と同様である。
ステップS3228で受信したコマンドが適切であると判定された場合、制御部31は、ステップS3228で受信したコマンドを第2基礎パーツ10−2の制御部11が解釈可能な形式に変換し、変換後のコマンドを通信部33によってID「1111−1111」の第2基礎パーツ10−2に送信する(S3232)。この場合、ステップS3228で受信したコマンドが中間コード(バイトコード)のコマンドに変換され、変換後のコマンドがID「1111−1111」の第2基礎パーツ10−2に送信される。
ID「1111−1111」の第2基礎パーツ10−2は、サーバ30から送信されたコマンドを通信部13によって受信する(S1300)。この場合、第2基礎パーツ10−2の制御部11は、受信したコマンドに応じた制御を実行する(S1302)。例えば、制御部11は、サーボモータ50のマイナス線(GND)51、プラス線(VCC)52、信号線53が接続された端子17−0,17−1,17−2の各々について、図4A〜4Dに示した制御モードのうちのどの制御モードで制御するのかを示すデータを記憶部12に記憶する。この場合、第2プロセッサ11Bは、端子17−0,17−1,17−2の入出力部18−0,18−1,18−2の各々に対して、図4Bに示したような制御を行う。また、第1プロセッサ11Aは、入出力部18−0,18−1(モータドライバ18A−0,18A−1)を介して、マイナス線(GND)51が接続された端子17−0に0Vの信号を出力し、プラス線(VCC)52が接続された端子17−1に5Vの信号を出力する。
以上の処理が実行された後、図15Cに示すように、第1基礎パーツ10−1の制御部11は、ボリューム60のつまみ部64の位置を通信部13によってサーバ30に通知する(S1208)。先述の通り、つまみ部64の位置を示す数値として「0」から「1」までの間の数値がボリューム60からの入力に基づいて取得され、当該数値がサーバ30に通知される。なお、この通知は定期的に繰り返し実行される。
サーバ30は、第1基礎パーツ10−1から送信された通知を通信部13によって受信する(S3234)。この場合、サーバ30は、通信部33によって、上記の通知をユーザ端末20の制御部21が解釈可能な形式でユーザ端末20に送信する(S3236)。
ユーザ端末20は、サーバ30から送信された通知を通信部23によって受信する(S2214)。この場合、ユーザ端末20の制御部21は、ボリューム60のつまみ部64の位置が変化したか否かを判定する(S2216)。すなわち、制御部21は、前回通知された数値と今回通知された数値とが異なるか否かを判定する。そして、ボリューム60のつまみ部64の位置が変化した場合には、図14に示すプログラムのうちの第18〜23行目が実行される。なお、図14に示すプログラムでは、サーバ30から送信された通知(ボリューム60のつまみ部64の位置を示す数値)が変数「position」に格納されるようになっている。また、ボリューム60のつまみ部64の位置が変化していない場合には、図14に示すプログラムのうちの第18〜23行目は実行されないため、以下に説明する処理も実行されない。
第18〜22行目部分は、ボリューム60のつまみ部64の位置を示す数値が0.5よりも大きければ、第1基礎パーツ10−1に接続されたLED70をオンし、ボリューム60のつまみ部64の位置を示す数値が0.5よりも大きくなければ、第1基礎パーツ10−1に接続されたLED70をオフする処理に相当する。第18〜22行目部分が実行されることによって、図15CのステップS2218が実行される。すなわち、ユーザ端末20の制御部21は、上記数値が0.5よりも大きい場合には、ID「0000−0000」の第1基礎パーツ10−1の端子17−10,17−11に接続されたLED70をオンするためのコマンドを通信部23によってサーバ30に送信し、上記数値が0.5よりも大きくない場合には、ID「0000−0000」の第1基礎パーツ10−1の端子17−10,17−11に接続されたLED70をオフするためのコマンドを通信部23によってサーバ30に送信する(S2218)。
サーバ30は、ユーザ端末20から送信されたコマンドを通信部33によって受信する(S3238)。そして、サーバ30の制御部31は、ステップS3238で受信したコマンドが適切であるか否かを判定する(S3240)。ステップS3240は図12のステップS3110と同様である。
ステップS3238で受信したコマンドが適切であると判定された場合、制御部31は、ステップS3238で受信したコマンドを第1基礎パーツ10−1の制御部11が解釈可能な形式に変換し、変換後のコマンドを通信部33によってID「0000−0000」の第1基礎パーツ10−1に送信する(S3242)。この場合、ステップS3238で受信したコマンドが中間コード(バイトコード)のコマンドに変換され、変換後のコマンドがID「0000−0000」の第1基礎パーツ10−1に送信される。
ID「0000−0000」の第1基礎パーツ10−1は、サーバ30から送信されたコマンドを通信部13によって受信する(S1210)。この場合、第1基礎パーツ10−1の制御部11は、受信したコマンドに応じてLED70の制御を実行する(S1212)。すなわち、受信したコマンドに応じて、制御部11は端子17−10,17−11に接続されたLED70をオン又はオフする。LED70をオンする場合には、第2プロセッサ11Bは、端子17−10,17−11の入出力部18−10,18−11に対して、図4Aに示したような制御を行い、第1プロセッサ11AはLED70を点灯させるために3Vの信号を端子17−10に出力し、0Vの信号を端子17−11に出力する。
また、図14に示すプログラムのうちの第23行目部分は、第2基礎パーツ10−2の端子17−0,17−1,17−2に接続されたサーボモータ50を、第1基礎パーツ10−1に接続されたボリューム60のつまみ部64の位置に応じた角度だけ回転させる処理に相当している。図14に示す例では、サーボモータ50を、ボリューム60のつまみ部64の位置を示す数値(0〜1)に180度を乗じて得られる角度だけ回転させるようになっている。第23行目部分が実行されることによって、図15CのステップS2220が実行される。すなわち、ユーザ端末20の制御部21は、ID「1111−1111」の第2基礎パーツ10−2の端子17−0,17−1,17−2に接続されたサーボモータ50を、第1基礎パーツ10−1に接続されたボリューム60のつまみ部64の位置に応じた角度だけ回転させるためのコマンドをサーバ30に送信する(S2220)。
サーバ30は、ユーザ端末20から送信されたコマンドを通信部33によって受信する(S3244)。そして、サーバ30の制御部31は、ステップS3244で受信したコマンドが適切であるか否かを判定する(S3246)。ステップS3246は図12のステップS3110と同様である。
ステップS3244で受信したコマンドが適切であると判定された場合、制御部31は、ステップS3244で受信したコマンドを第2基礎パーツ10−2の制御部11が解釈可能な形式に変換し、変換後のコマンドを通信部33によってID「1111−1111」の第2基礎パーツ10−2に送信する(S3248)。この場合、ステップS3244で受信したコマンドが中間コード(バイトコード)のコマンドに変換され、変換後のコマンドがID「1111−1111」の第2基礎パーツ10−2に送信される。
ID「1111−1111」の第2基礎パーツ10−2は、サーバ30から送信されたコマンドを通信部13によって受信する(S1304)。この場合、第2基礎パーツ10−2の制御部11は、受信したコマンドに応じてサーボモータ50の制御を実行する(S1306)。すなわち、受信したコマンドに応じて、制御部11は端子17−0,17−1,17−2に接続されたサーボモータ50を回転させる。この場合、第2プロセッサ11Bは、端子17−0,17−1,17−2の入出力部18−0,18−1,18−12に対して、図4Bに示したような制御を行い、第1プロセッサ11Aは、サーボモータ50を駆動させるための信号として0V,5Vの信号をそれぞれモータドライバ18A−0,18A−1を介して端子17−0,17−1に出力し、サーボモータ50をコマンドによって指定された角度だけ回転させるための信号をモータドライバ18A−2を介して端子17−2に出力する。
以上のように、本実施形態に係る制御システム1では、第1基礎パーツ10−1に接続されたボリューム60に対するユーザの操作に応じて、第1基礎パーツ10−1に接続されたLED70をオン/オフさせたり、第2パーツ10−2に接続されたサーボモータ50を回転させたりするようなシステムを実現できる。
すなわち、第1基礎パーツ10−1に接続された電子部品に対して行われた操作を、第1基礎パーツ10−1に接続された他の電子部品に反映させるようなシステムを実現できる。また、第1基礎パーツ10−1に接続された電子部品に対して行われた操作を、他の第2基礎パーツ10−2に接続された電子部品に反映させるようなシステムも実現できる。例えば、第1基礎パーツ10−1を第2基礎パーツ10−2のコントローラとして機能させることができる。具体的には、例えば、複数の電子部品を第2基礎パーツ10−2に接続することによってロボット等を作成し、このロボット等を操作するためのコントローラを第1基礎パーツ10−1によって作成することもできる。
なお、以上に説明した例では、ユーザの操作を受け付ける電子部品の一例としてボリューム60を用いたが、ボリューム60以外の電子部品を用いることもできる。例えば、ボタン等の電子部品を用いることもできる。
また、ユーザの操作を受け付ける電子部品の代わりに、センサを第1基礎パーツ10−1に接続してもよい。例えば、センサの検出結果が端子17から入力され、第1基礎パーツ10−1の制御部11はセンサの検出結果をサーバ30に通知し、サーバ30は当該通知をユーザ端末20に送信し、ユーザ端末20の制御部21は、センサの検出結果に基づいて、サーボモータ50を回転させたり、LED70をオンしたりするコマンドをサーバ30に送信するようにしてもよい。具体的には、例えば、温度センサを第1基礎パーツ10−1に接続し、LED70を第2基礎パーツ10−2に接続し、ユーザ端末20の制御部21は、温度センサによって検出された温度が閾値以上(又は以下)になった場合にLED70をオンさせるようにしてもよい。この場合、第1基礎パーツ10−1と第2基礎パーツ10−2とを別の場所に配置してもよい。このようにすれば、第1基礎パーツ10−1の配置場所の温度を、離れた場所で第2基礎パーツ10−2を用いて監視することができる。
なお、基礎パーツ10に接続されたボリューム又はボタン等に対する操作や基礎パーツ10に接続されたセンサの検出結果を、ユーザ端末20の表示部26に表示される画面に反映させることもできる。すなわち、基礎パーツ10に接続されたボリューム又はボタン等に対する操作や基礎パーツ10に接続されたセンサの検出結果に基づいて、ユーザ端末20の表示部26に表示される画面の表示内容を更新させるようにしてもよい。
[6.機能ブロック]以上に説明した制御システム1で実現される機能ブロックを図16に示す。
図16に示すように、ユーザ端末20は、取得部200と、読取部210と、表示制御部220と、受付部230と、実行部240と、コマンド送信部250と、通知受信部260とを含む。これらの機能ブロックはユーザ端末20の制御部21を主として実現される。すなわち、制御部21がプログラム(図9,14等参照)に従って処理(図12,15A〜15C参照)を実行することによって、これらの機能ブロックとして機能する。
また、図16に示すように、サーバシステム3(サーバ30)は、コマンド中継部310と、判定部320と、制限部330と、通知中継部340とを含む。これらの機能ブロックはサーバ30の制御部31を主として実現される。すなわち、制御部31がプログラムに従って処理(図12,15A〜15C参照)を実行することによって、これらの機能ブロックとして機能する。
さらに、図16に示すように、制御システム1はライブラリ記憶部400を含む。ライブラリ記憶部400はライブラリ提供サーバ40によって実現される。
[6−1]ライブラリ記憶部400は、基礎パーツ10の端子17に接続された電子部品に関する制御(電子部品制御)を制御部11に実行させるためのAPI(アプリケーションプログラミングインタフェース)のライブラリを記憶する。ユーザ端末20の取得部200は、ネットワークNを介して、ライブラリ記憶部400に記憶されるライブラリを取得する。
[6−2]基礎パーツ10(第1基礎パーツ10−1)の制御部11は、当該基礎パーツ10の制御部11に電子部品制御を実行させるためのプログラムを編集するためのプログラム編集画面をユーザ端末20に表示させるための情報を基礎パーツ10の表示部16に表示する。ユーザ端末20の読取部210は、基礎パーツ10の表示部16に表示された情報を読み取る。ユーザ端末20の表示制御部220は、読取部210によって読み取られた情報に基づいて、プログラム編集画面をユーザ端末20の表示部26に表示する。
例えば、基礎パーツ10の制御部11は情報画面G100(図7参照)を表示部16に表示する。ユーザ端末20の読取部210は情報画面G100内のQRコード(表示要素E103)を読み取る。ユーザ端末20の表示制御部220は、読取部210によって読み取られたQRコードから、基礎パーツ10のIDとプログラム編集画面G200のURLとを抽出し、それらのID及びURLに基づいて、プログラム編集画面G200(図9,14参照)を表示部26に表示する。
[6−3]ユーザ端末20の受付部230は、ライブラリ記憶部400に記憶されるライブラリを使用して基礎パーツ10の制御部11に電子部品制御を実行させるためのプログラムの入力を受け付ける。例えば、受付部230は、プログラム編集画面G200(編集領域A204)を介してプログラムの入力を受け付ける。ユーザ端末20の実行部240は、取得部200によって取得されたライブラリに基づいてプログラムを実行する。
[6−4]ユーザ端末20のコマンド送信部250は、プログラムの実行に応じて、基礎パーツ10(第1基礎パーツ10−1等)の制御部11に電子部品制御を実行させるためのコマンドをサーバシステム3に送信する。
サーバシステム3のコマンド中継部310は、ユーザ端末20から送信されたコマンドを受信し、受信したコマンドに基づくコマンドを基礎パーツ10(第1基礎パーツ10−1等)に送信する。例えば、コマンド中継部310は、ユーザ端末20から受信したコマンドを基礎パーツ10の制御部11によって解釈可能なコマンドに変換し、変換後のコマンドを基礎パーツ10に送信する。具体的には、例えば、コマンド中継部310は、ユーザ端末20から受信したコマンドをバイトコードのコマンドに変換して基礎パーツ10に送信する。なお、ユーザ端末20から受信したコマンドの形式が基礎パーツ10の制御部11によって解釈可能な形式である場合、コマンド中継部310は、ユーザ端末20から受信したコマンドを変換することなくそのままの形式で基礎パーツ10に送信してもよい。
なお、ユーザ端末20のコマンド送信部250は、コマンドを1つずつサーバシステム3に送信し、コマンド中継部310は、ユーザ端末20から受信したコマンドに基づくコマンドを1つずつ基礎パーツ10に送信する。1つのコマンドは1つのパケットで送信される。
基礎パーツ10(第1基礎パーツ10−1)の通信部13は、サーバシステム3(コマンド中継部310)から送信されたコマンドを受信し、基礎パーツ10(第1基礎パーツ10−1)の制御部11は、通信部13によって受信されたコマンドに基づいて、電子部品制御を実行する。
例えば、ユーザ端末20のコマンド送信部250は、電子部品の種類と、電子部品が接続された端子17とを指定する指定コマンドをサーバシステム3に送信する。サーバシステム3のコマンド中継部310は、ユーザ端末20から送信された指定コマンドを受信し、当該指定コマンドに基づく指定コマンドを基礎パーツ10(第1基礎パーツ10−1)に送信する。基礎パーツ10の制御部11は、受信された指定コマンドに基づいて、複数の端子17のうちの、電子部品が接続された端子17と、当該端子17に接続された電子部品の種類とを特定し、その後に受信される、当該種類の電子部品に関するコマンドに応じて、当該電子部品に関する制御を、特定された端子17に対して実行する。
[6−5]サーバシステム3の判定部320は、所定の判定基準に基づいて、ユーザ端末20から受信したコマンドが適切であるか否かを判定する。サーバシステム3の制限部330は、判定部320の判定結果に基づいて、コマンド中継部310による基礎パーツ10へのコマンドの送信を制限する。例えば、ユーザ端末20から受信したコマンドが適切でない場合に、制限部330は、コマンド中継部310による基礎パーツ10へのコマンドの送信を制限(抑止)する。一方、ユーザ端末20から受信したコマンドが適切である場合に、制限部330は、コマンド中継部310による基礎パーツ10へのコマンドの送信を制限せずに許容する。
[6−6]基礎パーツ10−1の制御部11は、操作を受け付ける電子部品、又は、センサである電子部品が端子17に接続されている場合に、操作の受付結果又はセンサの検出結果を示す通知を、通信部13を介して、サーバシステム3に送信する。例えば、ボリューム60やボタン等が「操作を受け付ける電子部品」の一例に相当する。また例えば、加速度センサ又は温度センサ等が「センサである電子部品」の一例に相当する。
サーバシステム3の通知中継部340は、基礎パーツ10から送信された通知を受信し、当該通知に基づく通知をユーザ端末20に送信する。例えば、基礎パーツ10から受信した通知の形式がユーザ端末20で解釈可能な形式でない場合、通知中継部340は、基礎パーツ10から受信した通知をユーザ端末20で解釈可能な形式の通知に変換し、変換後の通知をユーザ端末20に送信する。一方、基礎パーツ10から送信された通知の形式がユーザ端末20で解釈可能な形式である場合、通知中継部340は、基礎パーツ10から受信した通知を変換することなくそのままの形式でユーザ端末20に送信する。
ユーザ端末20の通知受信部260は、サーバシステム3(通知中継部340)から送信された通知を受信する。ユーザ端末20のコマンド送信部250は、通知受信部260によって受信された通知に応じたコマンドをサーバシステム3に送信する。
例えば、通知受信部260は、第1基礎パーツ10−1から送信され、かつ、サーバシステム3の通知中継部340によって中継された通知を受信し、コマンド送信部250は、当該通知に応じて、第1基礎パーツ10−1の制御部11に電子部品制御を実行させるためのコマンドをサーバシステム3に送信する。
また例えば、通知受信部260は、第1基礎パーツ10−1から送信され、かつ、サーバシステム3の通知中継部340によって中継された通知を受信し、実行部240は、当該通知に応じて、第1基礎パーツ10−1とは別の第2基礎パーツ10−2の制御部11に電子部品制御を実行させるための処理(プログラム)を実行し、コマンド送信部250は、第1基礎パーツ10−1とは別の第2基礎パーツ10−2の制御部11に電子部品制御を実行させるためのコマンドをサーバシステム3に送信する。この場合、サーバシステム3のコマンド中継部310は、受信したコマンドに基づくコマンドを第2基礎パーツ10−2に送信する。なお、表示制御部220は、通知受信部260によって受信された通知に基づいて表示部26の表示内容を更新してもよい。
[7.効果・変形例]以上に説明した制御システム1によれば、ユーザ端末20で編集したプログラムをユーザ端末20で実行することによって、基礎パーツ10の端子17に接続された電子部品に関する制御を実行することができる。基礎パーツ10の制御部11に実行させるためのプログラムを基礎パーツ10上の記憶部12に書き込む必要なくなるため、ユーザが基礎パーツ10の端子17に接続された電子部品に関する制御を実行するためのプログラムを実行しやすくなる。
また制御システム1によれば、ユーザ端末20でプログラムを実行し、中間コードのコマンドを基礎パーツ10に1つずつ順次送信するようにしたため、プログラムを基礎パーツ10の記憶部12に書き込む場合に比べて、基礎パーツ10側で必要なメモリ量を低減でき、通信量も低減できる。また、プログラムを基礎パーツ10の記憶部12に書き込む場合には、プログラムを基礎パーツ10の記憶部12に書き込むために時間がかかってしまうが、制御システム1によれば、即座にプログラムを実行することができる。さらに、制御システム1によれば、ユーザ端末20でプログラムが実行されるため、基礎パーツ10の記憶部12に格納しきれないような大きなサイズのプログラムを実行することもできる。
また制御システム1によれば、ユーザ端末20のウェブブラウザからプログラムを実行することが可能であるため、特別なプログラミング環境を別途用意する必要がなく、スマートフォンやタブレット型コンピュータでも、プログラムの作成や実行を行うことができる。制御システム1によれば、Websocketによって異なるドメインのユーザ端末20からでもサーバ30に常時接続することができ、ユーザ端末20のウェブブラウザからサーバ30を介して基礎パーツ10を制御できる。常時接続であるため、ユーザ端末20の表示部26に表示されたボタンが押下された場合に即座に基礎パーツ10に接続されたサーボモータ50を回転させたり、LED70を点灯させたりすることができる。
また制御システム1によれば、ユーザ端末20のウェブブラウザからプログラムを実行することが可能であるため、複数のユーザ端末20で同じプログラムを同時に実行することもできる。すなわち、一台のユーザ端末20では処理しきれない重い処理を複数のユーザ端末20で分散処理することも行いやすくなる。
また制御システム1によれば、ユーザ端末20のウェブブラウザからプログラムを実行するため、仮にユーザが作成したプログラムに問題があったとしても、ユーザ端末20のウェブブラウザに問題が生じるだけすむ場合が多く、サーバ30や基礎パーツ10に影響が及びにくい。
また制御システム1によれば、ユーザ端末20でプログラムを実行するため、プログラムを部分的に実行することも可能である。例えば、ユーザ端末20でプログラムを1行ずつ実行することもでき、プログラムの実行中に問題が発生した場合には、当該箇所を修正したプログラムを再度途中から実行することもできる。すなわち、プログラムを実行しながら、プログラムを修正することもできる。プログラムを基礎パーツ10の記憶部12に書き込む場合には、プログラムに問題があると、基礎パーツ10に接続できなってしまう場合があるが、制御システム1によれば、そのような事態の発生を防ぐことができる。
また制御システム1によれば、ライブラリを利用することによって、ユーザはWebsocketや電子部品制御に関して詳しい知識を有していなくてもプログラムを作成することができる。また、複数のユーザ端末20から共通にアクセスされるライブラリ提供サーバ40によってライブラリを提供するようにしたため、ライブラリに変更を加える場合にも、ライブラリ提供サーバ40に記憶されるライブラリを変更するだけですむ。
また制御システム1によれば、ユーザ端末20のウェブブラウザからプログラムを実行するため、ウェブブラウザで利用可能な既存の各種ライブラリを利用することもできる。ウェブブラウザで利用可能なライブラリは豊富に存在するところ、それらを利用することができる。例えば、オンラインストレージへデータを書き込むためのライブラリを利用することによって、基礎パーツ10の端子17に接続されたセンサの検出結果をオンラインストレージに保存するというようなこともユーザ端末20のウェブブラウザによって比較的容易に実行できるようになる。
また制御システム1によれば、基礎パーツ10の表示部16に表示される情報(図7:表示要素E103(QRコード)等)をユーザ端末20に読み取らせるだけで、当該基礎パーツ10を制御するためのプログラムを編集するためのプログラム編集画面G200をユーザ端末20の表示部26に表示させることができ、即座にプログラムの作成を行うことができる。
また制御システム1によれば、基礎パーツ10の表示部16に表示される情報(図7:表示要素E102,E103)をサーバ30で生成するようにしたため(図6:ステップS3010)、基礎パーツ10に応じて上記情報を変えることができる。例えば、基礎パーツ10の位置に応じて、基礎パーツ10の表示部16に表示要素E102として表示されるURL(基礎パーツ10の表示部16に表示される表示要素E103(QRコード)に埋め込まれるURL)を変えることができる。具体的には、例えば、基礎パーツ10が日本国内にある場合には日本国内にあるサーバ30のURLとし、基礎パーツ10が米国内にある場合には米国内にあるサーバ30のURLとすることができる。このようにすることによって、通信遅延を軽減することができる。
また制御システム1によれば、ユーザ端末20と基礎パーツ10との間でサーバ30を介してデータを授受するため、ユーザ端末20と基礎パーツ10とは互いのIPアドレスを知らなくてもデータを授受できる。さらに制御システム1によれば、ユーザ端末20と基礎パーツ10との間でサーバ30を介してデータを授受するため、サーバ30でデータを蓄積しておくことによって、ユーザ端末20と基礎パーツ10との一方の通信接続が一時的に切断された場合であっても、通信接続が回復された場合に切断前の続きから処理を実行できるようになる。
また制御システム1によれば、コマンドをユーザ端末20から基礎パーツ10にサーバ30を介して送信するため、サーバ30でコマンドが適切であるか否かを確認し、不適切なコマンドが基礎パーツ10に送信されるのを抑制できる。また、コマンドが不適切である場合にユーザ端末20に警告を通知することによって、ユーザにプログラムの修正を促すこともできる。さらに、不適切なコマンドの事例をサーバシステム3で蓄積し、蓄積結果に応じた情報提供を各ユーザに対して行うこともできる。
また制御システム1によれば、1つのプログラム(1つのユーザ端末20)で複数の基礎パーツ10を制御することができる。
また制御システム1によれば、ユーザは各種電子部品を任意の端子17に接続することができる。例えば、制御システム1では、図4A〜4Dに示したような制御が実行されることによって、ユーザは電子部品で必要な電圧・電流の大きさ、電子部品の負荷や、電子部品の入出力を気にすることなく、電子部品を任意の端子17に接続することができる。
また制御システム1によれば、基礎パーツ10が2つのプロセッサ(第1プロセッサ11A及び第2プロセッサ11B)を含み、これらの2つのプロセッサが図5A〜5Dに示したような監視・制御を実行することによって、問題が生じた場合に即座に対処することができる。
なお、本発明は以上に説明した実施形態に限定されるものではない。例えば、3つ以上の基礎パーツ10を連携させるようにしてもよい。また例えば、複数のプログラム(複数のユーザ端末20)で1又は複数の基礎パーツ10を制御するようにしてもよい。具体的には、例えば、1つの基礎パーツ10に接続されたボタンが押下された場合に、その旨を複数のユーザ端末20に通知し、ボタンの押下に応じた処理をそれら複数のユーザ端末20で実行させるようにしてもよい。
[8.付記]以上のような記載から、本発明は例えば以下のように把握される。
1)本発明の一態様に係る制御システムは、電子部品を接続可能な端子と、通信部と、前記端子に接続された電子部品に関する電子部品制御を実行する制御部とを含み、1又は複数の電子部品を接続することが可能な基礎パーツと、サーバシステムと、ユーザ端末と、複数のユーザ端末から共通にアクセスされる記憶手段であって、前記基礎パーツの前記制御部に前記電子部品制御を実行させるためのAPI(アプリケーションプログラミングインタフェース)のライブラリを記憶するライブラリ記憶手段と、を含み、前記ユーザ端末は、前記ライブラリ記憶手段に記憶されるライブラリを取得する取得手段と、前記ライブラリを使用して前記基礎パーツの前記制御部に前記電子部品制御を実行させるためのプログラムの入力を受け付ける受付手段と、前記ライブラリに基づいて前記プログラムを実行する実行手段と、前記プログラムの実行に応じて、前記基礎パーツの前記制御部に前記電子部品制御を実行させるためのコマンドを前記サーバシステムに送信するコマンド送信手段と、を含み、前記サーバシステムは、前記ユーザ端末から送信されたコマンドを受信し、当該コマンドに基づくコマンドを前記基礎パーツに送信するコマンド中継手段を含み、前記基礎パーツの前記通信部は、前記サーバシステムから送信されたコマンドを受信し、前記基礎パーツの前記制御部は、前記通信部によって受信されたコマンドに基づいて、前記電子部品制御を実行する。
本発明の一態様に係る制御方法は、電子部品を接続可能な端子と、通信部と、前記端子に接続された電子部品に関する電子部品制御を実行する制御部とを含み、1又は複数の電子部品を接続することが可能な基礎パーツを制御するための制御方法において、ユーザ端末が、複数のユーザ端末から共通にアクセスされるライブラリ記憶手段に記憶される、前記基礎パーツの前記制御部に前記電子部品制御を実行させるためのAPI(アプリケーションプログラミングインタフェース)のライブラリを取得するステップと、前記ユーザ端末が、前記ライブラリを使用して前記基礎パーツの前記制御部に前記電子部品制御を実行させるためのプログラムの編集を受け付けるステップと、前記ユーザ端末が、前記ライブラリに基づいて前記プログラムを実行するステップと、前記ユーザ端末が、前記プログラムの実行に応じて、前記基礎パーツの前記制御部に前記電子部品制御を実行させるためのコマンドをサーバシステムに送信するステップと、前記サーバシステムが、前記ユーザ端末から送信されたコマンドを受信し、当該コマンドに基づくコマンドを前記基礎パーツに送信するステップと、前記基礎パーツの前記通信部は、前記サーバシステムから送信されたコマンドを受信するステップと、前記基礎パーツの前記制御部は、前記通信部によって受信されたコマンドに基づいて、前記電子部品制御を実行するステップとを含む。
本発明の一態様に係る基礎パーツは、電子部品を接続可能な端子と、前記端子に接続された電子部品に関する制御を実行する制御部と、サーバシステムと通信するための通信部と、を含み、前記通信部は、前記ユーザ端末で編集されたプログラムの実行に応じて前記ユーザ端末から前記サーバシステムに送信されたコマンドに基づいて前記サーバシステムから送信されたコマンドを受信し、前記制御部は、前記通信部によって受信されたコマンドに基づいて、前記端子に接続された電子部品に関する制御を実行する。
2)本発明の一態様では、前記基礎パーツの前記制御部は、操作を受け付ける電子部品、又は、センサである電子部品が前記端子に接続されている場合に、前記操作の受付結果又は前記センサの検出結果を示す通知を、前記通信部を介して、前記サーバシステムに送信し、前記サーバシステムは、前記基礎パーツから送信された通知を受信し、当該通知に基づく通知を前記ユーザ端末に送信する通知中継手段を含み、前記ユーザ端末は、前記サーバシステムから送信された通知を受信する通知受信手段を含み、前記ユーザ端末の前記コマンド送信手段は、前記通知受信手段によって通知が受信された場合に、当該通知に応じたコマンドを前記サーバシステムに送信するようにしてもよい。
3)本発明の一態様では、前記ユーザ端末の前記コマンド送信手段は、前記通知受信手段によって通知が受信された場合に、当該通知に応じた前記電子部品制御を前記基礎パーツの前記制御部に実行させるためのコマンドを前記サーバシステムに送信するようにしてもよい。
4)本発明の一態様では、第1基礎パーツと第2基礎パーツとを含み、前記第1基礎パーツの前記制御部は、前記操作を受け付ける電子部品、又は、前記センサである電子部品が前記第1基礎パーツの前記端子に接続されている場合に、前記操作の受付結果又は前記センサの検出結果を示す通知を、前記通信部を介して、前記サーバシステムに送信し、前記サーバシステムの前記通知中継手段は、前記第1基礎パーツから送信された通知を受信し、当該通知に基づく通知を前記ユーザ端末に送信し、前記ユーザ端末の前記コマンド送信手段は、前記通知受信手段によって通知が受信された場合に、当該通知に応じた前記電子部品制御を前記第2基礎パーツの前記制御部に実行させるためのコマンドを前記サーバシステムに送信し、前記サーバシステムの前記コマンド中継手段は、前記通知に応じた前記電子部品制御を前記第2基礎パーツの前記制御部に実行させるための前記コマンドを受信し、当該コマンドに基づくコマンドを前記第2基礎パーツに送信し、前記第2基礎パーツの前記通信部は、前記サーバシステムから送信されたコマンドを受信し、前記第2基礎パーツの前記制御部は、前記通信部によって受信されたコマンドに基づき、前記通知に応じた前記電子部品制御を実行するようにしてもよい。
5)本発明の一態様では、前記基礎パーツは、前記電子部品を接続可能な複数の端子を含み、前記プログラムは、前記電子部品の種類と、前記複数の端子のうちの、前記電子部品が接続された端子とを指定する部分を含み、前記ユーザ端末の前記コマンド送信手段は、前記電子部品の種類と、前記電子部品が接続された端子とを指定する指定コマンドを前記サーバシステムに送信し、前記サーバシステムの前記コマンド中継手段は、前記ユーザ端末から送信された指定コマンドを受信し、当該指定コマンドに基づく指定コマンドを前記基礎パーツに送信し、前記基礎パーツの前記通信部は、前記サーバシステムから送信された指定コマンドを受信し、前記基礎パーツの前記制御部は、前記通信部によって受信された指定コマンドに基づいて、前記複数の端子のうちの、前記電子部品が接続された端子と、当該端子に接続された電子部品の種類とを特定し、その後に前記通信部を介して受信される、当該電子部品に関するコマンドに基づいて、当該電子部品に関する電子部品制御を、特定された前記端子に対して実行するようにしてもよい。
6)本発明の一態様では、前記基礎パーツは表示部を含み、前記基礎パーツの前記制御部は、前記プログラムを編集をするためのプログラム編集画面を前記ユーザ端末に表示させるための情報を前記表示部に表示し、前記ユーザ端末は、前記表示部に表示された情報を読み取る読取手段と、前記読取手段によって読み取られた情報に基づいて、前記プログラム編集画面を前記ユーザ端末の表示部に表示する表示制御手段と、を含み、前記ユーザ端末の前記受付手段は、前記プログラム編集画面を介して前記プログラムの入力を受け付けるようにしてもよい。
7)本発明の一態様では、前記サーバシステムは、所定の判定基準に基づいて、前記ユーザ端末から送信されたコマンドが適切であるか否かを判定する判定手段と、前記判定手段の判定結果に基づいて、前記コマンド中継手段による前記基礎パーツへのコマンドの送信を制限する制限手段と、を含むようにしてもよい。
8)本発明の一態様では、前記基礎パーツでは、個々の端子ごとにモータドライバとバススイッチとが接続され、前記基礎パーツの前記制御部は、前記端子に接続された電子部品の種類に基づいて選択される前記モータドライバと前記バススイッチとのうちの一方を介して、当該端子に接続された電子部品を制御するようにしてもよい。
9)本発明の一態様では、前記基礎パーツの前記制御部は、前記端子に接続された電子部品を動作させるために必要な電圧又は電流が所定の基準未満である場合に、当該端子に接続された前記バススイッチを介して、当該端子に接続された電子部品を制御し、前記端子に接続された電子部品を動作させるために必要な電圧又は電流が前記所定の基準以上である場合に、当該端子に接続された前記モータドライバを介して、当該端子に接続された電子部品を制御するようにしてもよい。
10)本発明の一態様では、前記基礎パーツの前記制御部は、第1プロセッサと第2プロセッサとを含み、前記第1プロセッサは、前記端子に接続された電子部品に対する制御を実行し、前記第2プロセッサは、前記端子の状態を監視し、当該監視の結果を前記第1プロセッサに提供し、前記第1プロセッサは、前記第2プロセッサから提供された前記監視の結果に応じた制御を実行するようにしてもよい。
11)本発明の一態様では、前記第2プロセッサは、前記第1プロセッサの状態を監視し、前記第1プロセッサが不調状態になった場合に、前記第1プロセッサによる前記端子に接続された電子部品に対する制御を制限するようにしてもよい。
12)本発明の一態様では、前記サーバシステムの前記コマンド中継手段は、前記ユーザ端末から受信されたコマンドをバイトコードのコマンドに変換して前記基礎パーツに送信するようにしてもよい。
13)本発明の一態様では、前記基礎パーツの前記制御部は、前記通信部を介して前記サーバシステムに通信接続要求を送信し、前記通信接続要求に応じて、前記基礎パーツと前記サーバシステムとの間で通信接続が確立され、前記基礎パーツが前記通信部を介して前記サーバシステムから前記コマンドを受信可能な状態になるようにしてもよい。