camera_capture.ino

Arduino Nicla Vision · Fichier : camera_capture.ino · Langage : Arduino · Usage : Capturer une image avec la caméra GC2145

La caméra GC2145 2 MP de la Nicla Vision capture en QVGA noir et blanc via la bibliothèque Camera du core : ce sketch calcule la luminosité moyenne de chaque image — un œil numérique pour suivre la lumière d’une pièce ou amorcer une vision embarquée (Edge Impulse).

Matériel requis

Une Arduino Nicla Vision (STM32H7 double cœur M7+M4, 23×23 mm) avec caméra GC2145 2 MP, IMU LSM6DSOX, micro PDM, capteur ToF (famille VL53Lx), module sans fil ESP32 (Wi-Fi/BLE) et LED RGB (LEDR=23, LEDG=24, LEDB=25). La carte seule ; le capteur GC2145 est monté en façade avec son connecteur FPC. 8 Mo de PSRAM embarqués pour les trames.

Câblage

Aucun câblage : la caméra est sur le bus parallèle DCMI interne. La docs-db confirme GC2145 (et non HM01B0, réservé aux autres cartes).

Fonctionnement

cam.begin(CAMERA_R320x240, GREYSCALE, 20) initialise le capteur en 320×240 gris à ~20 fps ; grabFrame remplit le tampon PSRAM ; la moyenne des octets gris donne la luminance, suffisante pour un seuil jour/nuit.

Exécution

Programmation via Arduino IDE (core ArduinoCore-mbed, target NICLA_VISION) sur le port USB-C ; bibliothèques Camera, PDM, Arduino_LSM6DSOX, WiFiNINA et ArduinoBLE fournies.

Variantes

Passer en RGB565 pour la couleur, envoyer la trame en JPEG sur le Wi-Fi NINA, ou brancher un modèle TinyML (Edge Impulse) pour la reconnaissance d’objet.

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);
}

← Retour à la fiche