这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【ArduinoNiclaVision】板载传感器的功能测试

共1条 1/1 1 跳转至

【ArduinoNiclaVision】板载传感器的功能测试

助工
2026-01-15 23:32:24     打赏

Arduino Nicla Vision板载传感器的功能测试

Arduino Nicla Vision 作为一款专为边缘计算和视觉应用设计的微型开发板,凭借其小巧尺寸、强大性能及丰富的传感器配置,成为机器人、物联网设备、可穿戴技术等领域的理想选择。本文将基于 OpenMV 官方入门教程核心逻辑,为你提供从硬件认知到实战上手的完整指引,帮助你快速解锁 Nicla Vision 的开发潜力。

image.png 

一、开发板核心特性速览

在开始实操前,先熟悉 Nicla Vision 的核心配置,这能让你更精准地规划开发需求:

² 主控芯片:搭载 ARM Cortex-M7 内核的微控制器,主频高达 480 MHz,具备强大的运算能力,可高效处理图像数据和复杂算法。

² 视觉传感器:集成全局快门摄像头,支持最高 1280×720 分辨率图像采集,搭配硬件加速的图像信号处理(ISP),能快速捕捉清晰画面。

² 辅助传感器:内置加速度计、陀螺仪、磁力计及环境光传感器,可实现多维度数据融合,适配运动检测、姿态识别等场景。

² 通信接口:支持 I2CSPIUART 等主流通信协议,同时兼容 Bluetooth Low EnergyBLE)和 Wi-Fi(部分版本),方便与其他设备或云端交互。

² 尺寸与功耗:采用超小尺寸设计(兼容面包板),低功耗模式下功耗仅几毫安,适合便携式和电池供电项目。

 image.png

二、Arduino Nicla Vision 开发模式

Arduino Nicla Vision 开发板兼具 OpenMV 固件开箱即用的计算机视觉开发优势,以及 Arduino IDE 兼容传统嵌入式生态的特性。

开发模式

核心优势

适用场景

OpenMV 固件(OpenMV IDE

视觉处理功能强大、API 简洁、开箱即用

专注于计算机视觉项目(如物体识别、追踪)、快速原型验证

Arduino IDE

兼容 Arduino 生态库、开发流程熟悉、硬件扩展性强

需结合多传感器联动、物联网集成、传统嵌入式控制逻辑的项目

三、OpenMV 固件模式

1. 开箱即用的 OpenMV 开发体验

OpenMV 是专注于嵌入式计算机视觉的开源平台,Nicla Vision 出厂预装该固件,无需额外烧录即可快速启动开发:

(1)  USB-C 数据线将 Nicla Vision 连接至电脑,开发板会被识别为 OpenMV 设备;

(2) 下载并安装 OpenMV IDE(支持 Windows/macOS/Linux);

(3) 打开 OpenMV IDE 后,软件自动识别开发板,可直接加载官方示例程序(如 [face_detection.py](face_detection.py)),点击运行即可实现视觉功能。

2. OpenMV 模式下板载传感器测试代码

运行方式:将 Nicla Vision 连接电脑 打开 OpenMV IDE → 复制代码到 IDE → 点击绿色运行按钮;

输出说明:摄像头代码输出实时帧率,IMU 代码输出加速度/陀螺仪数据,ToF 代码输出距离值,音频代码在 LCD 显示频谱。

以下代码可验证 OpenMV 模式下摄像头、IMUToF 距离传感器、音频传感器的基础功能,均适配 OpenMV IDE 运行环境。

1)摄像头传感器测试代码


import sensor
import time

sensor.reset()  # Reset and initialize the sensor.
sensor.set_pixformat(sensor.RGB565)  # Set pixel format to RGB565 (or GRAYSCALE)
sensor.set_framesize(sensor.QVGA)  # Set frame size to VGA (640x480)
sensor.skip_frames(time=2000)  # Wait for settings take effect.
clock = time.clock()  # Create a clock object to track the FPS.

while True:
    clock.tick()  # Update the FPS clock.
    img = sensor.snapshot()  # Take a picture and return the image.
    print(clock.fps())  # Note: OpenMV Cam runs about half as fast when connected
    # to the IDE. The FPS should increase once disconnected.

 image.png

 

2LSM6DSOX IMU 传感器测试代码


import time
from lsm6dsox import LSM6DSOX
from machine import Pin
from machine import SPI

lsm = LSM6DSOX(SPI(5), cs=Pin("PF6", Pin.OUT_PP, Pin.PULL_UP))

while True:
    print("Accelerometer: x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}".format(*lsm.accel()))
    print("Gyroscope:     x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}".format(*lsm.gyro()))
    print("")
    time.sleep_ms(100)

image.png

 

3VL53L1X ToF 距离传感器测试代码


from machine import I2C
from vl53l1x import VL53L1X
import time

tof = VL53L1X(I2C(2))

while True:
    print(f"Distance: {tof.read()}mm")
    time.sleep_ms(50)

 image.png

 

4)音频传感器测试代码


import image
import audio
from ulab import numpy as np
from ulab import utils

CHANNELS = 1
SIZE = 256 // (2 * CHANNELS)

raw_buf = None
fb = image.Image(SIZE + 50, SIZE, image.RGB565, copy_to_fb=True)
audio.init(channels=CHANNELS, frequency=16000, gain_db=24, highpass=0.9883)


def audio_callback(buf):
    # NOTE: do Not call any function that allocates memory.
    global raw_buf
    if raw_buf is None:
        raw_buf = buf


# Start audio streaming
audio.start_streaming(audio_callback)


def draw_fft(img, fft_buf):
    fft_buf = (fft_buf / max(fft_buf)) * SIZE
    fft_buf = np.log10(fft_buf + 1) * 20
    color = (0xFF, 0x0F, 0x00)
    for i in range(0, SIZE):
        img.draw_line(i, SIZE, i, SIZE - int(fft_buf[i]), color, 1)


def draw_audio_bar(img, level, offset):
    blk_size = SIZE // 10
    color = (0xFF, 0x00, 0xF0)
    blk_space = blk_size // 4
    for i in range(0, int(round(level / 10))):
        fb.draw_rectangle(
            SIZE + offset,
            SIZE - ((i + 1) * blk_size) + blk_space,
            20,
            blk_size - blk_space,
            color,
            1,
            True,
        )


while True:
    if raw_buf is not None:
        pcm_buf = np.frombuffer(raw_buf, dtype=np.int16)
        raw_buf = None

        if CHANNELS == 1:
            fft_buf = utils.spectrogram(pcm_buf)
            l_lvl = int((np.mean(abs(pcm_buf[1::2])) / 32768) * 100)
        else:
            fft_buf = utils.spectrogram(pcm_buf[0::2])
            l_lvl = int((np.mean(abs(pcm_buf[1::2])) / 32768) * 100)
            r_lvl = int((np.mean(abs(pcm_buf[0::2])) / 32768) * 100)

        fb.clear()
        draw_fft(fb, fft_buf)
        draw_audio_bar(fb, l_lvl, 0)
        if CHANNELS == 2:
            draw_audio_bar(fb, r_lvl, 25)
        fb.flush()

# Stop streaming
audio.stop_streaming()

 image.png

四、心得体会

通过对Arduino Nicla Vision开发板OpenMV模式的实操体验,深刻感受到其在嵌入式计算机视觉开发中的便捷性与高效性。该模式最大的优势在于“开箱即用”,无需复杂的固件烧录与环境配置,连接电脑后借助OpenMV IDE即可快速上手,对新手友好度极高。其简洁的API接口的让视觉功能开发门槛大幅降低,无论是基础的摄像头图像采集,还是结合IMUToF传感器的数据融合测试,都能通过简短代码实现,极大提升了原型验证的效率。

同时也发现,OpenMV模式更适合聚焦视觉核心需求的场景,其封闭性的固件生态虽降低了使用难度,但在个性化硬件扩展上略逊于Arduino IDE模式。总体而言,对于追求高效开发、专注嵌入式视觉应用的开发者,OpenMV模式无疑是Arduino Nicla Vision开发板的最优选择,既能满足快速验证想法的需求,也能为后续复杂项目奠定基础。





关键词: ArduinoNiclaVision     板载     功能测    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]