2019年 秋期 応用情報技術者試験 問7

学習機能付き赤外線リモートコントローラの設計に関する次の記述を読んで、設問1〜3に答えよ。

G社は、赤外線リモートコントローラ(以下、赤外線リモコンという)を製造している会社である。今回、複数の異なる機器を1台で操作できる統合型の赤外線リモコン(以下、統合リモコンという)を開発することになった。

統合リモコンには、各種のボタンがあり、このボタンを押して機器を操作する。

統合リモコンには、主要メーカの赤外線リモコン及び操作対象の機器の情報があらかじめ登録されており、登録された機器を選択すると、その機器の赤外線リモコンとして使用できる。一方、登録されていない機器については、その機器の赤外線リモコンの信号を解析してボタンごとに登録することによって、その機器の赤外線リモコンとして使用できる。この解析機能・登録機能を学習機能という。

【赤外線リモコンの信号】

赤外線リモコンを使用する環境には、蛍光灯、LED照明などからの人工光と、太陽などからの自然光があり、これらの光を外部光という。外部光には、赤外光が含まれていることがある。

赤外線リモコンは、38〜40 kHzで点滅を繰り返す赤外光を使用する。赤外線リモコンの信号には、連続して点滅を繰り返す状態(以下、ON状態という)と、消灯している状態(以下、OFF状態という)がある。

ON状態とOFF状態それぞれの長さの組合せには、ボタンごとに固有のパターンがある。最初のON状態から最後のON状態までの各状態の長さの組合せを制御パターンという。制御パターンは最大60ミリ秒で完了する。一つの制御パターンの中で、ON状態及びOFF状態の最短時間はそれぞれ350マイクロ秒である。

赤外線リモコンの信号の例を図1に示す。

図1 赤外線リモコンの信号の例

赤外線リモコンによって操作される機器は、制御パターンを読み取り、その制御パターンに対応した処理を行う。

【統合リモコンの学習機能における操作】

学習機能によって一つのボタンを学習させるときの操作は、次のとおりである。

(1) 利用者は、統合リモコンの"特定のボタン"を2秒以上押し続ける。

(2) 利用者は、学習対象の赤外線リモコン(以下、学習対象リモコンという)を操作して、統合リモコンに赤外光を送る。統合リモコンは、解析機能によって赤外光から抽出した制御パターンを登録する。

【解析機能で使用するハードウェア】

解析機能では、制御部、赤外線センサ、タイマ及びカウンタを使用する。解析機能で使用するハードウェアの構成を図2に示す。

図2 解析機能で使用するハードウェアの構成

・赤外線センサは、赤外光から38〜40 kHzの信号を取り出し、ON状態からOFF状態、又はOFF状態からON状態に遷移したことを制御部に通知する。

・タイマは設定した時間になると、制御部に通知する。

・カウンタは16ビットで1マイクロ秒ごとにカウント値が1加算され、カウント値が65,535に達すると、次のカウントで0に戻る。統合リモコンの解析機能が動作している間は、常にカウントしている。

【制御パターン抽出プログラム】

制御パターン抽出プログラムは、学習対象リモコンの赤外光を解析して制御パターンを抽出するプログラムで、ON状態の長さ及びOFF状態の長さを、添字が0から始まる配列T[]に格納する。配列T[]に格納された要素の個数を変数Nに格納する。

配列T[]及び変数Nは32ビットの符号付き整数型である。

制御パターン抽出プログラムは、イベントを待ち、イベントを受けると、そのイベントに応じた処理を行う。イベントには、OFF状態に遷移したときに赤外線センサから通知されるOFFイベント、ON状態に遷移したときに赤外線センサから通知されるONイベント、及びタイマから通知されるタイマイベントがある。これらのイベントは、FIFO動作するキューに格納される。

ONイベント及びOFFイベントは、同じイベントが連続して通知されることはない。

制御パターン抽出プログラムは、次のように処理する。

・制御パターンの抽出に成功したときは変数rstにTrueを、失敗したときは変数rstにFalseを設定する。

・学習対象リモコンの赤外光が一定時間検出されないときは、変数rstにFalseを設定する。

・最初に通知されたイベントがOFFイベントのときは、変数rstにFalseを設定する。

・最初に通知されたONイベントから一定時間が経過すると、プログラムを終了する。このとき、最後に赤外線センサから通知されたイベントがONイベントの場合は、変数rstにFalseを設定する。

・制御パターンの抽出が成功し、kを0から始まる整数としたとき、T[2×k]には、a状態の長さが、T[2×k+1]には、b状態の長さが格納される。

制御パターン抽出プログラムは、表1に示す関数を使用する。

表1 使用する関数の仕様
関数機能など
startSensor()赤外線センサを有効にする。以降、赤外線センサは、ONイベント又はOFFイベントを通知する。
stopSensor()赤外線センサを無効にし、タイマを止める。次にFIFO動作するキューを空にする。以降、赤外線センサからのイベント通知は行われない。
waitEvent()タイマイベント、ONイベント、及びOFFイベントを待つ。通知されたイベントを戻り値として返す。
setTimer(time)time(ミリ秒)で指定された時間後、タイマイベントを通知するようにタイマに設定する。既に設定されているときに再度設定すると、新しい設定に置き換わる。
getCount()カウンタのカウント値を32ビットの符号付き整数型の戻り値として返す。カウンタのカウント値は16ビットであり、上位16ビットは常に0である。

制御パターン抽出プログラムのフローを図3に示す。

出典:令和元年度 秋期 応用情報技術者試験 午後 問7