バーコード/QRコード検出

English page

Arduino UNO Qにビデオカメラを接続して映像をキャプチャし、その中に含まれるバーコードやQRコードを検出することができます。

配線

SBC mode

上記の画像の「Single Board Computer Mode」のように、PD対応のUSBハブを用意し、そこにUSBのACアダプタとArduino UNO Qを接続します。
また、Webカメラ(もしくはUSB接続のビデオキャプチャとビデオカメラ)をUSBハブに接続します。

Brickの追加

コード検出の機能を使う場合は、ファームウェアのプログラムに、コード検出のBrickを追加することが必要です。
Arduino App Labでファームウェアのプログラムを開いて、画面左上の「Bricks」のところにある「Add Brick」のボタンをクリックします。

Add brick

「Add App Brick」のダイアログボックスが開きます。
Brickのリストの中で「Camera Code Detection」を選択し、「Add Brick」のボタンをクリックします。

Camera Code Detection

「Add Brick」のボタンをクリックすると、「Success」のダイアログボックスが表示されます。
右上の×のボタンをクリックして、ダイアログボックスを閉じます。

なお、Camera Code DetectionのBrickを追加した後で、USBハブにカメラを接続していない状態でファームウェアのプログラムを起動しようとすると、「missing required device: no camera found」のエラーが発生します。
カメラを使わないプログラムを作りたい場合は、ファームウェアのプログラムから、Camera Code DetectionのBrickを削除することが必要です。
ファームウェアのプログラムを開いて、画面左上のBrick一覧の個所で「Camera Code Detection」のBrickを右クリックし、メニューの「Remove」を選ぶと、Brickを削除することができます。

Delete code detector

基本的なプログラムのパターン

コード検出を行う基本的なプログラムは、以下のようなパターンになります。

コード検出を行うプログラムの基本的なパターン

初期化の部分では、Arduino UNO Qに接続した後、カメラを初期化して変数に代入します。
次に、検出器を初期化します。その際に、先に初期化しておいたカメラの変数を、パラメータとして指定します。
初期化の際に「画像表示」のチェックボックスをオンにすると、ポップアップウィンドウが開いて、カメラの映像が表示されます。
また、初期化された検出器は、変数に代入しておきます。

繰り返しの部分では、まず検出器で検出した結果を変数に代入します。
検出した結果は、リストの形になります。
バーコードやQRコードが検出された場合、検出された個数の要素を持つリストが得られます。
したがって、そのリストの長さが0でないかどうかを条件判断することで、コードが検出されたかどうかがわかります。
コードが検出された場合は、検出結果のリストから個々の要素を順に取り出しながら繰り返して、処理を行ってきます。
繰り返しの中では、タイプと値のブロックを使って、検出されたコードのタイプと値を得ることができます。

検出結果のタイプ

検出結果の値

検出結果のリセット

一度検出されたコードは、プログラムを終了するまで記憶され、再度検出されないようになっています。
すべての検出済み状態をリセットして、再度検出できる状態に戻すには、「すべての検出済み状態のリセット」のブロックを使います。

すべての検出済み状態のリセット

また、特定の検出結果だけをリセットしたい場合は、「検出済み状態のリセット」のブロックを使います。
文字列のパラメータの個所に、リセットしたい文字列を指定します。

検出済み状態のリセット

事例

以下のプログラムは、バーコードやQRコードを検出して、そのたびに検出されたコードの種類と文字列を表示する例です。

コード検出のプログラムの例

このプログラムは、こちらからダウンロードすることができます。