Arduino UNO Q カメラ接続で簡単AI画像認識

Arduino App Lab カメラでAI画像認識アイキャッチ

「Arduino UNO Q」に「USBカメラ」を接続し、「AI画像認識」によるリアルタイムな物体検出を行う方法を詳しく紹介します

開発環境の「Arduino App Lab」には、用途に応じて完成された機能を呼び出して使用できる「Bricks」という機能があり、ここから「AI画像認識」を簡単に組み込んで使用することができます。
USBカメラ」は特に設定は不要で、USBハブを使用して接続するだけで自動で認識されて使用することができます。
今回は「AI画像認識」を使用して、人間を検出した時だけ「UNO Q」基板上のLEDを点灯させたり、外部出力をONさせたり、http通信で別デバイス(M5ATOM)に通知することで、「来客検知」や「侵入検知」等に使用できるものを作製して動作確認を行います。

「Arduino UNO Q」の使い方や初期設定等は以下のリンク先で詳しく紹介しています。

Arduino UNO Q 使い方完全ガイド:App Lab設定からAI画像認識まで詳しく紹介
「Lチカ」から「AI」へ!Arduino UNO Qの使い方を徹底解説。開発環境App Labの導入から初期設定、AI実行、初期化方法まで初心者向けに詳しく紹介

スポンサーリンク

1.Arduino UNO Qとは

Arduino UNO Q」とは、電子工作を始めたばかりの方にも、ちょっとステップアップしてAIに挑戦したい方にもおすすめな次世代シングルボードコンピュータです。

これまでの「Arduino」は「マイコンで手軽に電子工作」が魅力でしたが、「UNO Q」は1枚のボードの中に、Linux OSが動く高性能プロセッサと、いつものArduinoスケッチを動かすマイコンの両方を搭載しています。

AIや画像処理などの高度な処理はLinux側センサーやGPIO(入出力)などの高速処理はマイコン側で処理し、これらの処理を1枚のボード上で連携させて利用できることが「UNO Q」の最大の魅力です。

動作確認には専用アプリの「Arduino App Lab」をパソコンにインストールして「UNO Q」ボードとUSBケーブルで接続して使用しますが、Wi-Fi経由の無線接続でも同様に使用することができます。

さらにRaspberry Pi」のようにモニタやキーボード、マウスを接続することで「UNO Q」単体をシングルボードコンピュータ(SBC)のLinuxマシンとして使用することもできます。

Arduino UNO Qシングルボードコンピュータモード
Arduino UNO Qシングルボードコンピュータモード
もちろんこの場合でも「Arduino App Lab」が最初からインストールされているため、パソコンがなくても「UNO Q」ボード単体で開発から動作確認まで行うことができます。(メモリ4GBモデル推奨)
基本的な開発はパソコンと直接接続したり、Wi-Fi経由で接続して使用できるため、「UNO Q」ボードとパソコン、USBケーブルがあれば使用することができます。
「UNO Q」はこれまでの「Arduino」の使いやすさを保ちながら、より本格的な開発や「AI」にもチャレンジできる次世代ボードで、初心者の第一歩としても、ステップアップ用としても最適な1枚です。
スポンサーリンク

2.USBカメラの接続

Arduino UNO Q」と「USBカメラ」との接続は以下のようにUSBハブで接続するだけで、自動で認識されます。

Arduino UNO QにUSBカメラ接続

今回は「USBカメラ」だけ接続するので、以下のような「2in1」のハブを使用すると安価でシンプルな構成で使用できるのでおすすめです。

Arduino UNO QにUSBカメラ接続
スポンサーリンク

3.サンプルアプリで動作確認

Arduino UNO Q」専用の開発環境「Arduino App Lab」にはカメラを使用して「AI画像認識」を行うサンプルアプリがいくつか用意されています。

まずはカメラの動作確認を行うために、以下の3つのサンプルアプリで動作確認を行なっていきます。

  1. 物体検出:Detect Objects on Camera
  2. 顔認識:Face Detector on Camera
  3. 人物検出:Person classifer on Camera

・物体検出:Detect Objects on Camera

サンプルアプリ(Examples)の中で下画像のように「Detect Objects on Camera」をクリックすると、カメラで撮影された画像内に何が写っているかを認識して確認することができます。

Arduino App Lab AI画像認識アプリ

サンプルアプリ「Detect Objects on Camera」を選択したら、下画像のように[RUN]ボタンをクリックしてアプリを実行します。

Arduino App Lab アプリの起動

サンプルアプリが起動すると、下画像のようにブラウザが起動して、カメラで撮影された画像が表示されます。

Arduino App Lab AI画像認識アプリ動作確認

上画像のように人物が認識されると四角で囲われて「peason」と表示されます。

Arduino App Lab AI画像認識アプリ動作確認

顔の一部や、手だけでも人間っぽい画像は「person」として認識されます。

ブラウザ画面内右上の[Confidence]で認識の精度を調整できます。
初期値は0.5(50%)以上で検知されます。
Arduino App Lab AI画像認識アプリ動作確認

上画像のように「人物(person)」と「スマホ(ceil phone)」等、画面内に複数の物体が検出された場合にはそれぞれを認識して表示します。

Arduino App Lab AI画像認識アプリ動作確認

他にも、リモコンは上画像のように「remote」として認識されます。
その他にもパソコンやマウス、椅子やコップ、猫や犬、鳥等様々なものを検出して確認することができます。

ブラウザが起動しない場合やスマホのブラウザ等で確認したい場合は、App Labの画面下に表示されているIPアドレス(192.168.0.*** 環境によって異なります)をブラウザのアドレスバーに入力すると確認できます。

・顔認識:Face Detector on Camera

サンプルアプリ(Examples)の中の下画像「Face Detector on Camera」をクリックすると、カメラで撮影された画像内に人間の顔が認識されると四角で囲われて「face」と表示されます。

Arduino App Lab AI画像認識アプリ

サンプルアプリ「Face Detector on Camera」を起動して[RUN]ボタンをクリックしてアプリを実行すると、下画像のようにブラウザが起動してカメラの画像が表示され、画像の認識状況が確認できます。

Arduino App Lab AI画像認識アプリ動作確認

画像内に人間の顔が認識されると四角で囲われて「Face」と表示されます。


・人物検出:Person classifer on Camera

サンプルアプリ(Examples)の中の下画像「Person classifer on camera」をクリックすると、カメラで撮影された画像内に人物が写っていることを認識して確認することができます。

サンプルアプリ「Person classifer on camera」を起動して[RUN]ボタンをクリックしてアプリを実行すると、下画像のようにブラウザが起動してカメラの画像が表示され、画像の認識状況が確認できます。

Arduino App Lab AI画像認識アプリ動作確認

画像内に人物が認識されると「person」と表示されますが、四角で囲われることは無いので少しわかりにくいかもしれません。

スポンサーリンク

4.スケッチとの連携方法

カメラを使用した「サンプルアプリ」には「スケッチファイル」を使用しないものがほとんどです。

スケッチファイル」と連携してLED点灯や外部出力等を行うには「スケッチファイル」の追加が必要です。

新規でアプリファイルを作成する時は「スケッチファイル」が自動で生成されますが、「スケッチファイル」が存在しない「サンプルアプリ」でスケッチとの連携を行うには、手動でスケッチファイルを追加する必要があります。

ここでは「スケッチファイル」の無い「サンプルアプリ」に「スケッチファイル」を追加する方法を紹介します。

追加した「スケッチファイル」を使用して、カメラで人物を検知したときに「UNO Q」基板上のLEDを点灯させたり外部出力を行う方法、さらに外部デバイスへ検知状態を「http通信」で送信する方法についても詳しく紹介します。

スケッチファイル」を追加して使用するためには、単純に「sketch.ino」ファイルを作成するだけでは動作できません。
スケッチファイル」を使用するためには、設定(プロファイル)を記入した「sketch.yaml」ファイルが必要です。

・スケッチファイルの追加

スケッチファイル」が無いアプリに「スケッチファイル」を追加する手順は以下になります。

  1. サンプルアプリのコピー
  2. 「sketch」フォルダの作成
  3. 「sketch.ino」ファイルの作成
  4. 「sketch.yaml」ファイルの作成
  5. スケッチライブラリ「Arduino_RouterBridge」の追加

以下から実際に「スケッチファイル」を追加する手順を、順を追って詳しく紹介していきます。

1.サンプルアプリのコピー

まずは例として「Detect Objects on Camera」使用するため、下画像のように「Detect Objects on Camera」をクリックします。

Arduino App Lab AI画像認識アプリ

サンプルアプリ「Detect Objects on Camera」を開いたら、下画像のように[Copy and edit app]をクリックしてアプリをコピーしていきます。

Arduino App Lab アプリのコピー

下画像のように、ファイル名を設定して[Create new]ボタンをクリックするとアプリをコピーすることができます。

Arduino App Lab アプリのコピー
アプリをコピーすることで、自由にファイルの追加や編集をすることができるようになります。

2.「sketch」フォルダの作成

サンプルアプリ「Detect Objects on Camera」には「スケッチファイル」がありませんが、アプリをコピーすることで追加することができるようになります。

アプリをコピーして開いたら、まずは「スケッチファイル」を作製するための「sketchフォルダ」を作成します。
下画像のように「Files」の横のアイコンをクリックして[Create new folder]をクリックします。

Arduino App Lab フォルダの追加

下画像のようにフォルダ名「sketch」を入力して[Enter]キーでフォルダを作成することができます。

Arduino App Lab フォルダの追加

3.「sketch.ino」ファイルの作成

次に「スケッチファイル」を作成していきます。
先程作成した「sketch」フォルダを[右クリック]して[Create file]をクリックします。

Arduino App Lab ファイルの追加

下画像のようにファイル名「sketch.ino」を入力して[Enter]キーを押すとファイルが作成されます。

Arduino App Lab ファイルの追加
作成した「sketch.ino」ファイルにプログラムを書いていきますが、コンパイルやライブラリの追加を行うには設定(プロファイル)を記入した「sketch.yaml」ファイル(ヤムルファイル)が必要なため、次から作成していきます。

4.「sketch.yaml」ファイルの作成

次に、「スケッチファイル」を使用するために必要な設定(プロファイル)を記入した「sketch.yaml」ファイル(ヤムルファイル)を作成していきます。

まずは下画像のように「sketch」フォルダの上で[右クリック]して[Create file]をクリックします。

Arduino App Lab ファイルの追加

次に拡張子なしで「sketch」というファイルを作成します。

Arduino App Lab スケッチ設定ファイルの追加

次に以下をコピーして、作成した「sketch」ファイルに貼り付けます。

profiles:
  default:
    platforms:
      - platform: arduino:zephyr
    libraries:
default_profile: default

貼り付けたものは下画像のようになります。

Arduino App Lab スケッチ設定ファイルの追加

次にこのファイルを有効にするために、ファイル名を拡張子ありの「sketch.yaml」に変更していきます。
まずは、下画像のように「sketch」ファイルの上で[右クリック]して[Rename]をクリックします。

Arduino App Lab スケッチ設定ファイルの追加

下画像のようにファイル名に拡張子をつけて「sketch.yaml」として[Enter]キーを押します。

Arduino App Lab スケッチ設定ファイルの追加

ファイル名が「sketch.yaml」に変わると、下画像のように「ヤムルファイル」として認識され、一部の文字色が変わります。

Arduino App Lab スケッチ設定ファイルの追加

ヤムルファイル」が作成されることで「sketck.ino」のコンパイルやライブラリの追加を行うことができるようになります。

拡張子をつけて「sketch.yaml」ファイルとして保存したものは編集することはできません。コンパイルやライブラリの追加等を行うと自動で更新されていきます。

5.スケッチライブラリ「Arduino_RouterBridge」の追加

最後に、「python」や「bricks」と連携するためのライブラリ「Arduino _RouterBridge」をインストールします。

下画像のように「Sketch Library」横のアイコンをクリックします。

Arduino App Lab スケッチライブラリの追加

下画像のようなウインドウが表示されたら、検索窓に「router」と入力します。
Arduino _RouterBridge」が表示されたら[Install]ボタンをクリックしてインストールしていきます。

Arduino App Lab スケッチライブラリの追加

下画像のように「installed」が表示されたらインストール完了です。

Arduino App Lab スケッチライブラリの追加

以上で「スケッチファイル」の無いアプリに「スケッチファイル」を追加して使用できるようになりました。

次は実際に追加したスケッチを使用して、「AI物体認識」アプリで人間を検知した時だけ「UNO Q」基板上の「LEDを点灯」させたり、「外部出力」を行ったり、「http通信で遠隔で通知」する方法を紹介します。

・人物を検知したときだけLED点灯と外部出力

AI物体検出」を行うサンプルアプリ「Detect Objects on Camera」に「スケッチファイル」を追加する方法を紹介しましたが、ここからは追加した「スケッチファイル」使用して「人物を検知したときだけLED点灯と外部出力」を行う方法を紹介していきます。

スケッチファイルの準備

まずは追加した「スケッチファイル」に以下のコードをコピペして貼り付けます。

// SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc)
// SPDX-FileCopyrightText: Copyright (C) 2026 Logikara
// SPDX-License-Identifier: MPL-2.0

#include "Arduino_RouterBridge.h"

void setup() {
    pinMode(LED_BUILTIN, OUTPUT);
    pinMode(13, OUTPUT);  // D13 を出力に設定

    Bridge.begin();
    Bridge.provide("set_led_state", set_led_state);
}

void loop() {
}

void set_led_state(bool state) {
    // LOW state means LED is ON
    digitalWrite(LED_BUILTIN, state ? LOW : HIGH);

    // D13 も 出力(検知でHIGH)
    digitalWrite(13, state ? HIGH : LOW);
}
このコードは、「Lチカ」のサンプルアプリ「Blink LED」のスケッチに外部出力(13ピン)を追加したものです。

実際にコピペして貼り付けたものは下画像のようになります。

Arduino App Lab スケッチファイルの作成

pythonファイルの準備

次に「pythonファイル」を以下のコードに置き換えます。
現在の「pythonファイル」を削除して、以下のコードをコピペして貼り付けます。

# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc)
# SPDX-FileCopyrightText: Copyright (C) 2026 Logikara
# SPDX-License-Identifier: MPL-2.0

from arduino.app_utils import App, Bridge
from arduino.app_bricks.web_ui import WebUI
from arduino.app_bricks.video_objectdetection import VideoObjectDetection
from datetime import datetime, UTC, timedelta
import time

ui = WebUI()
detection_stream = VideoObjectDetection(confidence=0.5, debounce_sec=0.0)

ui.on_message("override_th", lambda sid, threshold: detection_stream.override_threshold(threshold))

led_state = False
last_person_time = None
PERSON_TIMEOUT = 1.0  # 秒:この時間 Person が見えなければ LED を消す


def send_detections_to_ui(detections: dict):
    global led_state, last_person_time

    now = datetime.now(UTC)
    person_detected = False

    # Web UI へ送信
    for key, values in detections.items():
        for value in values:
            entry = {
                "content": key,
                "confidence": value.get("confidence"),
                "timestamp": now.isoformat()
            }
            ui.send_message("detection", message=entry)

        # Person 検出チェック
        if key.lower() == "person" and len(values) > 0:
            person_detected = True

    # Person が検出された場合
    if person_detected:
        last_person_time = now
        if not led_state:
            Bridge.call("set_led_state", True)
            led_state = True


# ★ 定期的に LED を消灯するためのループ
def loop():
    global led_state, last_person_time

    time.sleep(0.2)  # 200ms 間隔でチェック

    if last_person_time is None:
        return

    now = datetime.now(UTC)
    elapsed = (now - last_person_time).total_seconds()

    if elapsed > PERSON_TIMEOUT:
        if led_state:
            Bridge.call("set_led_state", False)
            led_state = False


detection_stream.on_detect_all(send_detections_to_ui)

App.run(user_loop=loop)

実際にコピペして貼り付けたものは下画像のようになります。

Arduino App Lab pythonファイルの作成

スケッチファイル」と「pythonファイル」の準備ができたら、[RUN]ボタンをクリックしてアプリを実行します。

アプリが起動して、カメラが人物「person」を検出すると、下画像のように「UNO Q」基板上の赤色LEDが点灯し、同時に13ピンが出力されます。

下画像では13ピンとGND間に「抵抗内蔵の青色LED」を接続して点灯させるようにしています。

Arduino UNO Q AI画像認識動作確認

・LED点灯と同時に外部デバイスへ遠隔データ(http)送信

AI物体検出」を行うサンプルアプリ「Detect Objects on Camera」で「人物を検知したときだけLED点灯と外部出力」を行いましたが、ここではさらに「人物を検出した時に外部デバイスへ遠隔データ(http)送信」する方法を紹介します。

「スケッチファイル」は同じものを使用し、「pythonファイル」だけ一部変更したものに置き換えます。

pythonファイルの準備

pythonファイル」に以下のコードをコピペして貼り付けて置き換えます。

以下サンプルプログラムの「12行目」の送信先デバイスの「IPアドレス」は使用するデバイスに合わせて設定してください。
# SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc)
# SPDX-FileCopyrightText: Copyright (C) 2026 Logikara
# SPDX-License-Identifier: MPL-2.0

from arduino.app_utils import App, Bridge
from arduino.app_bricks.web_ui import WebUI
from arduino.app_bricks.video_objectdetection import VideoObjectDetection
from datetime import datetime, UTC, timedelta
import time
import requests # httpリクエスト送信用

DEVICE_IP = "192.168.0.***" # 送信先デバイスのIPアドレスを設定してください

ui = WebUI()
detection_stream = VideoObjectDetection(confidence=0.5, debounce_sec=0.0)

ui.on_message("override_th", lambda sid, threshold: detection_stream.override_threshold(threshold))

led_state = False
last_person_time = None
PERSON_TIMEOUT = 1.0  # 秒:この時間 Person が見えなければ LED を消す
    
# 外部デバイスへLEDの状態を httpリクエスト送信
def notify_device(state: bool):
    url = f"http://{DEVICE_IP}/led/{1 if state else 0}"
    try:
        requests.get(url, timeout=2)
    except Exception as e:
        print("Device notify error:", e)

# 物体検出結果をUIへ送信
def send_detections_to_ui(detections: dict):
    global led_state, last_person_time

    now = datetime.now(UTC)
    person_detected = False

    # Web UI へ送信
    for key, values in detections.items():
        for value in values:
            entry = {
                "content": key,
                "confidence": value.get("confidence"),
                "timestamp": now.isoformat()
            }
            ui.send_message("detection", message=entry)

        # Person 検出チェック
        if key.lower() == "person" and len(values) > 0:
            person_detected = True

    # Person が検出された場合
    if person_detected:
        last_person_time = now
        if not led_state:
            Bridge.call("set_led_state", True)
            notify_device(True) # 外部デバイスへ検知(True)送信
            led_state = True

# 定期的に LED を消灯するためのループ
def loop():
    global led_state, last_person_time

    time.sleep(0.2)  # 200ms 間隔でチェック

    if last_person_time is None:
        return

    now = datetime.now(UTC)
    elapsed = (now - last_person_time).total_seconds()

    if elapsed > PERSON_TIMEOUT:
        if led_state:
            Bridge.call("set_led_state", False)
            notify_device(False) # 外部デバイスへ未検知(False)送信
            led_state = False

detection_stream.on_detect_all(send_detections_to_ui)

App.run(user_loop=loop)

実際にコピペして貼り付けたものは下画像のようになります。

Arduino App Lab pythonファイルの作成

pythonファイル」を置き換えたら[Run]ボタンをクリックしてアプリを実行します。

アプリが起動して、カメラが人物「person」を検出すると、下画像のように「UNO Q」基板上の赤色LEDが点灯するのと同時に「http通信」で検知したことを遠隔で通知します。

下画像では「http通信」の受信デバイスとして「M5Atom Matrix」を使用しています。
M5Atom Matrix」は人物が検知されたことを受信すると本体のLEDマトリックスが緑に点灯、人物が検知されなくなると白色に点灯します。

Arduino UNO Q AI画像認識、遠隔通知動作確認

M5Atom Matrix」にはリレーユニットを接続しているため、人物を検知するとリレーがONするようにしています。

このリレーの接点を使用して、「ランプを点灯」させたり、「チャイムを鳴らす」等、離れた場所の「来客検知」や「侵入検知」等に使用することができます。

・http通信受信デバイス(M5Atom Matrix)の準備

受信デバイスとして使用した「M5Atom Matrix」のプログラムも以下で紹介しておきます。
ArduinoIDE」で書き込んで使用してください。

「ArduinoIDE」のインストール方法は以下のリンク先で詳しく紹介しています。

M5StackシリーズのためのArduino IDEのインストール方法と初期設定、使い方紹介
ArduinoIDEバージョン2のインストール方法から初期設定、スケッチ例の書き込み、コピペでの使い方まで詳しく紹介します。インストールはArduinoでも同じです。

動作については下画像のようになります。

Arduino UNO Q AI画像認識ATOM遠隔通知

電源ONして、Wi-Fi接続中にLEDが青色点灯します。

Arduino UNO Q AI画像認識ATOM遠隔通知

Wi-Fi接続が完了するとLEDは白色点灯します。
人物を検知していない時も白色点灯し、リレーはOFFします。

Arduino UNO Q AI画像認識ATOM遠隔通知

人物を検知した時は緑色点灯し、リレーも同時にONします。

M5Atomでも以下の同じサンプルプログラムで動作確認できます。

サンプルプログラムは以下になります。
コピペで貼り付けて実行してください。コピーは下の黒塗り部右上のアイコンクリックでもできます。

M5Atomの「IPアドレス」(必要に応じて「ゲートウェイ」と「サブネットマスク」の設定)と、Wi-Fiルーターの「SSID」と「パスワード」はご自身の環境に合わせて正しく設定してください。
#include <M5Atom.h>    // Atomのヘッダファイル(Arduino.h /Wire.h /FastLED.h含む)
#include <WiFi.h>
#include <WebServer.h>

#define RELAY_PIN 26  // リレー接続ピン(Groveコネクタ)
WebServer server(80); // ポート設定

// 固定IPアドレスの設定
IPAddress local_IP(192,168,0,***); // IPアドレス設定(***部に使用可能なアドレスを設定)
IPAddress gateway(192,168,0,1);      // デフォルトゲートウェイ設定
IPAddress subnet(255,255,255,0);     // サブネットマスク設定

// 変数宣言
const char* ssid     = "自宅のWi-FiルーターのSSIDを設定";     // Wi-Fi SSID
const char* password = "自宅のWi-Fiルーターのパスワードを設定"; // Wi-Fi パスワード
bool on_frag = false; // Matlix ONフラグ

// 関数 -------------------------------------------------
// ************* Matrix LED 全点灯色設定 *************
void matrixColor(uint8_t r, uint8_t g, uint8_t b) {
  for (int i = 0; i < 25; i++) {  //matrix行ループ
    M5.dis.drawpix(i, CRGB(r,g,b)); // フルカラーLED指定色で点灯
  }
  FastLED.show(); // フルカラーLED指定色で点灯
}
void matrixSkyBlue() { matrixColor(0,255,255); } // 水色(赤, 緑, 青)※3色それぞれの明るさを0〜255で指定
void matrixBlue() { matrixColor(0,100,255); }    // 青色
void matrixGreen() { matrixColor(0,255,0); }     // 緑色
void matrixWhite() { matrixColor(100,100,100); } // 白色

// **************** サーバー設定 ****************
void handleRoot() { // ルートアクセス処理
  matrixBlue(); // ルートアクセス表示用Matrix LEDを青色に点灯
  String msg = "Welcome AtomMatrix! IP: "; // 応答メッセージ作成
  msg += WiFi.localIP().toString(); // IPアドレスを文字列に変換してメッセージに追加
  server.send(200, "text/plain", msg);  // クライアントに応答(HTTPステータスコード200、コンテンツタイプ"text/plain"、内容msg)
  Serial.println("Root Access");
}
void onSignal() { // ONアクセス処理
  on_frag = true; // Matlix ONフラグtrue
  server.send(200, "text/html", "ON!"); // クライアントにON応答
  Serial.println("ON!");
}
void offSignal() { // OFFアクセス処理
  on_frag = false; // Matlix ONフラグfalse
  server.send(200, "text/html", "OFF!"); // クライアントにOFF応答
  Serial.println("OFF!");
}

// 初期設定 -----------------------------------------------
void setup() {
  M5.begin(true, false, true); //本体初期化(UART, I2C, LED)
  Serial.begin(9600); // シリアル通信開始

  // WiFi接続
  WiFi.config(local_IP, gateway, subnet);// 固定IPアドレス設定実行
  WiFi.begin(ssid, password); // Wi-Fi接続開始

  while (WiFi.status() != WL_CONNECTED) { //接続完了していなければループ
    matrixSkyBlue(); // 接続中表示用Matrix LEDを水色に点灯
    delay(500); // 500ms遅延
    Serial.print(".");
  }

  // IPアドレス、SSID確認
  Serial.print("\nSSID: ");     // SSID表示
  Serial.println(WiFi.SSID());
  Serial.print("IP address: "); // IPアドレス表示
  Serial.println(WiFi.localIP());

  // サーバー設定
  server.on("/", handleRoot);     // ルートアクセス処理をサーバーに登録
  server.on("/led/1", onSignal);  // ONアクセス処理をサーバーに登録
  server.on("/led/0", offSignal); // OFFアクセス処理をサーバーに登録
  server.begin(); // サーバー開始

  // リレー接続ピン(Groveコネクタ)の初期化
  pinMode(RELAY_PIN, OUTPUT);   // RELAY_PINを出力モードに設定
  digitalWrite(RELAY_PIN, LOW); // リレーOFF

  matrixWhite(); // Matrix LEDを白色に点灯
}
// メイン -------------------------------------------------
void loop() {
  M5.update();  // M5Atomの状態更新
  server.handleClient();  //クライアントからのアクセス処理

  if (on_frag || M5.Btn.isPressed()) {  // Matlix ONフラグtrue、またはボタンONなら
    matrixGreen();        // Matrix LEDを緑色に点灯
    digitalWrite(RELAY_PIN, HIGH); // リレーON
  } else {                // Matlix ONフラグfalse、かつボタンOFFなら
    matrixWhite();        // Matrix LEDを消灯
    digitalWrite(RELAY_PIN, LOW); // リレーOFF
  }
  delay(500);  //遅延時間(ms)
}
スポンサーリンク

5.まとめ

Arduino UNO Q」に「USBカメラ」を接続し、「AI画像認識」によるリアルタイムな物体検出を行う方法を詳しく紹介しました。

開発環境「Arduino App Lab」に用意された「Bricks」を活用することで、難しい機械学習の知識がなくても、手軽にAI機能を組み込んだアプリを制作することができます。

カメラを使用した「物体検出」「顔検出」「人物検出」は、サンプルアプリを実行するだけで簡単に動作確認を行うことができました。

また、「スケッチファイル」を追加してハードウェア制御と連携させることで、「人物を検知したときだけLEDを点灯させる」「外部出力を制御する」といった、より実用的な仕組みも構築できます。

さらに、「HTTP通信」を活用することで、「M5Atom」などの外部デバイスと連携し、離れた場所への通知までできることも確認しました。

これらの仕組みを応用すれば、「来客検知」や「防犯システム」、「見守り装置」など、さまざまなIoT用途に展開することが可能です。

Arduino UNO Q」は、従来のArduinoの手軽さに加えて、LinuxとAI処理を組み合わせた柔軟な開発ができるため、これからAIや画像処理にチャレンジしたい方にも非常におすすめできるボードです。

ぜひ皆さんも、自分だけの「AI × IoT」システムの開発にチャレンジしてみてください。

コメント

タイトルとURLをコピーしました