Programmierprojekt_Schule/HuskyLens2_ColorRecognition_ESP32.ino
2026-07-15 12:15:51 +02:00

102 lines
3.1 KiB
C++

/*
HuskyLens 2 - Color Recognition Beispiel für ESP32
----------------------------------------------------
Bibliothek: DFRobot_HuskylensV2
https://github.com/DFRobot/DFRobot_HuskylensV2
Verkabelung (I2C, HuskyLens 2 extern per Power Bank versorgt):
HuskyLens SDA -> ESP32 SDA (Standard meist GPIO21, je nach Board)
HuskyLens SCL -> ESP32 SCL (Standard meist GPIO22, je nach Board)
HuskyLens GND -> ESP32 GND (gemeinsame Masse, zwingend nötig!)
Wichtig:
- Protokoll an der HuskyLens 2 selbst auf "I2C" oder "Auto Detect" stellen
(System Settings -> Protocol Type)
- Bibliothek vorher über den Arduino Library Manager installieren:
Suche nach "DFRobot_HuskylensV2"
*/
#include <Wire.h>
#include "DFRobot_HuskylensV2.h"
// HuskyLens-Objekt anlegen
HuskylensV2 huskylens;
// Falls dein ESP32-Board andere I2C-Pins nutzt, hier anpassen:
#define I2C_SDA 21
#define I2C_SCL 22
void setup() {
Serial.begin(115200);
delay(500);
// I2C mit den gewünschten Pins starten
Wire.begin(I2C_SDA, I2C_SCL);
Serial.println("Verbinde mit HuskyLens 2 ...");
// Warten, bis die HuskyLens erfolgreich initialisiert werden konnte
while (!huskylens.begin(Wire)) {
Serial.println("HuskyLens 2 nicht gefunden! Verkabelung/Protokoll pruefen.");
delay(500);
}
Serial.println("HuskyLens 2 verbunden!");
// Auf den Color-Recognition-Algorithmus umschalten
huskylens.switchAlgorithm(ALGORITHM_COLOR_RECOGNITION);
Serial.println("Color Recognition aktiviert. Halte ein Objekt vor die Kamera.");
}
void loop() {
// Neue Ergebnisse vom Sensor abrufen
huskylens.getResult(ALGORITHM_COLOR_RECOGNITION);
if (huskylens.available(ALGORITHM_COLOR_RECOGNITION)) {
int anzahl = huskylens.getCachedResultNum(ALGORITHM_COLOR_RECOGNITION);
Serial.print("Erkannte Farbobjekte: ");
Serial.println(anzahl);
// Das Objekt, das der Bildmitte am naechsten ist
void* zentrum = huskylens.getCachedCenterResult(ALGORITHM_COLOR_RECOGNITION);
if (zentrum != NULL) {
int id = RET_ITEM_NUM(zentrum, Result, ID);
int xCenter = RET_ITEM_NUM(zentrum, Result, xCenter);
int yCenter = RET_ITEM_NUM(zentrum, Result, yCenter);
int breite = RET_ITEM_NUM(zentrum, Result, width);
int hoehe = RET_ITEM_NUM(zentrum, Result, height);
Serial.print("Farb-ID: ");
Serial.print(id);
Serial.print(" | Position: (");
Serial.print(xCenter);
Serial.print(", ");
Serial.print(yCenter);
Serial.print(") | Groesse: ");
Serial.print(breite);
Serial.print("x");
Serial.println(hoehe);
// Beispiel: einfache Reaktion je nach erkannter Farb-ID
// (Die IDs werden vorher am Geraet selbst antrainiert/zugewiesen)
switch (id) {
case 1:
Serial.println("Blaues Objekt");
break;
case 2:
Serial.println("Rotes Objekt");
break;
default:
Serial.println(">> Unbekannte/nicht zugeordnete Farb-ID");
break;
}
}
} else {
Serial.println("Keine Farbe erkannt.");
}
delay(500);
}