camera_capture.ino

Arduino Nicla Vision · Archivo : camera_capture.ino · Lenguaje : Arduino · Uso : Capturer une image avec la caméra GC2145

La cámara GC2145 de 2 MP de la Nicla Vision captura en QVGA escala de grises con la librería Camera del core: este sketch calcula el brillo medio de cada imagen: un ojo digital para seguir la luz de una sala o iniciar visión embebida (Edge Impulse).

Hardware

Una Arduino Nicla Vision (STM32H7 M7+M4, 23×23 mm) con cámara GC2145, IMU LSM6DSOX, micrófono PDM, ToF (VL53Lx), módulo ESP32 Wi-Fi/BLE y LED RGB (LEDR/G/B). La placa sola; el GC2145 va montado al frente con su conector FPC. 8 MB de PSRAM embarcados para las tramas.

Cableado

Sin cableado: la cámara está en el bus paralelo DCMI interno. Docs-db confirma GC2145 (no HM01B0, reservado a otras placas).

Funcionamiento

cam.begin(CAMERA_R320x240, GREYSCALE, 20) inicializa el sensor en 320×240 gris a ~20 fps; grabFrame rellena el búfer PSRAM; la media de los bytes grises da la luminancia, suficiente para un umbral día/noche.

Ejecución

Programación desde Arduino IDE (core ArduinoCore-mbed) por USB-C; librerías Camera, PDM, LSM6DSOX, WiFiNINA y ArduinoBLE.

Variantes

Pasar a RGB565 para color, enviar la trama en JPEG por el Wi-Fi NINA, o conectar un modelo TinyML (Edge Impulse) para reconocimiento de objetos.

camera_capture.ino

// Caméra GC2145 2 MP embarquée : capture QVGA noir & blanc,
// puis luminosité moyenne de l'image (détection jour/nuit).
// Bibliothèque Camera du core ArduinoCore-mbed (Nicla Vision).

#include "Camera.h"

#define LARGEUR 320
#define HAUTEUR 240

Camera cam;
uint8_t *image;

void setup() {
  Serial.begin(115200);
  if (!cam.begin(CAMERA_R320x240, GREYSCALE, 20)) {
    Serial.println("Caméra GC2145 absente");
    while (1) { ; }
  }
  image = (uint8_t *)psram::malloc(cam.frameSize());
}

void loop() {
  if (cam.grabFrame(image) == 0) {
    // Luminosité moyenne = moyenne des pixels gris 0-255
    uint32_t somme = 0;
    for (uint32_t i = 0; i < cam.frameSize(); i++) {
      somme += image[i];
    }
    uint8_t moyenne = somme / cam.frameSize();
    Serial.print("luminosite moyenne = ");
    Serial.println(moyenne);
    // image[] contient la trame brute : la traiter ou la transmettre
  } else {
    Serial.println("Capture échouée");
  }
  delay(1000);
}

← Volver a la ficha