Inhaltsverzeichnis:
Jeder, der sich für Elektronik interessiert, stößt früher oder später auf das geheimnisvoll klingende Wort Arduino. Auch wenn man auf den ersten Blick nichts Besonderes damit verbindet, kann es die Phantasie beflügeln, wenn man sich die im Internet verfügbaren Informationen ansieht. Schließlich wird der Arduino fast überall als großartige Plattform für Elektronik-Anfänger vorgestellt, um das Programmieren zu lernen. Wenn Sie sich außerdem den ersten besseren Kurs zu dieser Plattform ansehen, werden Sie feststellen, dass er sich durch relative Einfachheit auszeichnet und Sie mit wenig Aufwand wirklich erstaunliche Ergebnisse erzielen können.
Der Erfolg des Arduino ist vor allem auf seine Einfachheit, die geringe Einstiegshürde und die daraus resultierende Popularität zurückzuführen. Rund um diese aus Italien stammenden Boards hat sich im Laufe der Jahre eine große und äußerst engagierte Gemeinschaft gebildet, die ihre eigenen Erfahrungen, Projekte, aber auch aufgetretene Probleme, die manchmal gemeinsam gelöst werden können, miteinander teilt. Eine große Gemeinschaft bedeutet auch eine große Menge an verfügbaren Ressourcen. Sie bieten Anfängern Tutorials und fertige Code-Bibliotheken, um selbst den ungewöhnlichsten Sensor zu betreiben. In einem Satz kann man sagen, dass es bei Arduino um Einfachheit und Gemeinschaft geht, was den Einstieg in Ihr eigenes Programmierabenteuer leicht macht.
Es gibt eine ganze Reihe von Boards, die mit dem Arduino-Logo signiert sind, und die Zeiten, in denen der einzige weithin bekannte Vertreter dieser Familie der klassische UNO war, sind unwiederbringlich vorbei. Obwohl Modelle mit dem AVR-Prozessor immer noch erhältlich sind, fallen sie Jahr für Jahr hinter den Konkurrenten ARM zurück. Dies hat unter anderem zur Arduino Nano-Serie geführt, deren Herzstück zum Beispiel der RP2040 sein kann, der vor der Raspberry Pi Foundation entwickelt wurde. Darüber hinaus werden von MKR-Boards drahtlose Kommunikationslösungen angeboten, die von ESP- und LoRa-Chips angetrieben werden. Auch die als PRO bezeichneten Geräte verdienen eine Erwähnung. Diese Boards sind für anspruchsvollere Anwendungen konzipiert und richten sich an Ingenieure und fortgeschrittene Sonntags-Heimwerker. Die Branche der professionellen Lösungen, die Arduino anbietet, wird ständig weiterentwickelt, was unter anderem zu einem Mikro-SPS-Controller für industrielle Anwendungen geführt hat. Wir werden die Beschreibung dieses ansonsten interessanten Geräts jedoch für ein anderes Mal aufheben und uns mit einem anderen Vertreter der PRO-Serie, dem Arduino Nicla Vision, beschäftigen.
USB-Kamera oder Mikrocontroller?
Der Nicla Vision Arduino sieht von außen eher unscheinbar aus und könnte zweifellos mit kleinen Kameramodulen verwechselt werden, die auf dem Markt erhältlich sind. Doch der Schein trügt, denn auf diesem kleinen Stück Laminat befinden sich eine ganze Reihe von Komponenten.
Das Gehirn der gesamten Konstruktion ist der ARM STM32H747AII6 Dual-Core Cortex M7/M4 Prozessor, der auf bis zu 480MHz beschleunigt. Für ein so kleines Modul ist es eine recht effiziente Einheit. Das auffälligste Merkmal des Nicla Vision ist natürlich das eingebaute Kameramodul GC2145. Die Auflösung beträgt 2 Mpx, was zwar recht gering erscheint, aber für klassische Projekte der künstlichen Intelligenz und Bildanalyse ausreicht. Die drahtlose Kommunikation mit der Außenwelt erfolgt über den LBEE5KL-Chip, der Standards wie WIFI und Bluetooth unterstützt. Darüber hinaus enthielt das Board auch die 6-Achsen-IMU LSM6DSOX, den Entfernungssensor VL53L1CBV0FY, das Verschlüsselungsmodul SE050C2 und das Mikrofon MP34DT05. Erwähnenswert ist auch der verfügbare Speicher. Das Programm kann maximal 2 MB belegen und 1 MB RAM verwenden, plus 16 MB nichtflüchtigen Flash-Speicher für zusätzliche Daten.
Auf der anderen Seite des Laminats werden Sie nicht allzu viele Komponenten finden. Hier befinden sich eine microUSB-Buchse für die Stromversorgung und Programmierung, ein Anschluss für eine externe Batterie und der ESLOV-Anschluss, der eine Erweiterung des I2C-Busses ist.
Nicla Vision als klassischer Arduino
Das Nicla Vision Modul ist in erster Linie ein Board der Arduino-Familie und kann genau als klassischer Vertreter dieser Serie verwendet werden. Zusätzlich zu den zahlreichen Bauteilen auf der Platine gibt es eine Reihe von Lötfeldern, an denen Goldpin-Stecker befestigt werden können. Es gibt nicht viele Anschlüsse, aber unter ihnen finden wir grundlegende Schnittstellen wie UART, I2C und SPI. Darüber hinaus unterstützt das Modul zwei analoge Eingänge und JTAG-Kommunikation und arbeitet mit 3,3V.
Nachdem Sie das Modul an den Computer angeschlossen und die Arduino IDE gestartet haben, sollte das Programm das angeschlossene Board automatisch erkennen. Um es zu verwenden, benötigen Sie das entsprechende Toolkit, dessen Download von der Umgebung in einer entsprechenden Meldung vorgeschlagen wird.
An dieser Stelle sollte auch auf die integrierte LED-Diode des Nicla Vision geachtet werden. Es handelt sich um eine dreifarbige Konstruktion, die den aktuellen Status des Moduls durch ihre Leuchtfarbe anzeigt. Sie sollte nach dem ersten Start blau blinken. Das bedeutet, dass der Standard-Python-Skript läuft, auf das wir später zurückkommen werden. Außerdem blinkt der Halbleiter grün, um anzuzeigen, dass die Programmierung gerade läuft. Am wenigsten wünschenswert ist es jedoch, wenn alle leuchtenden Segmente gleichzeitig aktiviert sind. Dann wird die Farbe weiß angezeigt, was auf einen Hardware-Fehler hinweist, was wiederum bedeutet, dass der Arduino defekt ist.
Die Verwendung eines Dual-Core-ARM-Prozessors für das klassische LED-Blinken ist zwar etwas übertrieben, aber es ist ein idealer Weg, um zu überprüfen, ob mit dem Board alles in Ordnung ist. Wenn das Beispiel ‘blink led’ hochgeladen wird, können wir beobachten, wie das grüne Segment der dreifarbigen LED synchron ein- und ausgeschaltet wird. Diese kann zwar den Status des Boards signalisieren, ist aber, wie bereits erwähnt, auch mit einer seiner Leitungen verbunden, so dass wir sie steuern können.
#include //http://librarymanager/All#NTPClient
#include
#include
const char *ssid = "";
const char *password = "";
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP);
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
timeClient.begin();
}
void loop() {
timeClient.update();
time_t nowEpoch = timeClient.getEpochTime();
struct tm *nowStruct = gmtime(&nowEpoch);
int year = nowStruct->tm_year + 1900;
int day = nowStruct->tm_mday;
Serial.print("Year: ");
Serial.print(year);
Serial.print(" Day: ");
Serial.print(day);
Serial.print(" Time: ");
Serial.println(timeClient.getFormattedTime());
delay(1000);
}
Eine viel interessantere Möglichkeit, den Betrieb des Arduino Nicla Vision zu testen, wäre das Hochladen eines einfachen Programms über das WIFI-Netzwerk. Seine Aufgabe ist es, das aktuelle Jahr, den Tag des Monats und die Uhrzeit auf der Grundlage der Netzwerkdaten im Monitor der seriellen Schnittstelle anzuzeigen. Die NTPClient-Bibliothek wird für dieses Programm benötigt und kann heruntergeladen werden, indem Sie mit dem Mauszeiger auf den Link neben der Deklaration fahren und dabei die Strg-Taste gedrückt halten. Denken Sie daran, Informationen über das betreffende WIFI-Netzwerk in den Code aufzunehmen, ssid – Netzwerkname, password – Zugangspasswort.
Nach der Inbetriebnahme sollten wir in regelmäßigen Abständen das Jahr, den Tag und die Uhrzeit sehen.
Wenn Sie nach der Ausführung des Codes die Meldung “Failed to mount the filesystem containing the WiFi firmware” sehen, muss die Firmware des Netzwerkmoduls aktualisiert werden. Dies geschieht durch Öffnen des Beispiels File >Examples> STM32H747_System >WiFiFirmwareUpdater. Der Aktualisierungsprozess kann einige Minuten dauern und sein Status kann im Monitor der seriellen Schnittstelle beobachtet werden.
Bild- und Objekterkennung
In Vorbereitung auf dieses Material habe ich eine kurze Umfrage auf meinem Instagram-Profil gepostet, in der ich gefragt habe, welches der Arduino Nicla Vision-Themen am interessantesten sei. Der eindeutige Sieger war die Klassifizierung von Bildern, was nicht allzu überraschend ist, denn alles, was in irgendeiner Weise mit künstlicher Intelligenz zu tun hat, kommt heutzutage gut an. Deshalb werde ich in diesem Abschnitt ein wenig über die Möglichkeiten der eingebauten Kamera und ihre grundlegende Inbetriebnahme sprechen.
Um jedoch mit der Kamera arbeiten zu können, müssen wir das Board richtig vorbereiten. Der erste Schritt besteht darin, die entsprechende Firmware hochzuladen, d.h. die Software, die in den vorgefertigten Beispielen File> Examples> STM32H747_System> STM32H747_manageBootloader zu finden ist. Sobald der Programmiervorgang erfolgreich abgeschlossen ist, starten Sie den seriellen Monitor und folgen Sie den Anweisungen. Der gesamte Prozess beschränkt sich auf das Senden eines einzigen ‘Y’, um die Zustimmung zur Aktualisierung zu signalisieren. Das kann einige Zeit dauern, aber der Fortschritt des Prozesses kann vom Computerbildschirm aus beobachtet werden.
Der nächste Schritt ist das Herunterladen der OpenMV IDE-Software, mit der Sie eine Verbindung zu Nicla Vision herstellen und ein in MicroPython geschriebenes Skript ausführen können. Dieses Programm ist kostenlos und seine Installation ist recht intuitiv, so dass ich es für unnötig halte, näher darauf einzugehen.
Nach dem Start von OpenMV sollten Sie ein Bild sehen, das dem oben gezeigten ähnelt. Wir können das Programmlayout grob in zwei Teile unterteilen. Auf der linken Seite finden wir den standardmäßig ausgeführten Code, vom Hersteller ‘hello world’ genannt. Im rechten Bereich finden Sie das Kamerabildfenster und die zugehörigen Diagramme; zu diesem Zeitpunkt ist das Board noch nicht mit der IDE verbunden, daher sind diese Bereiche leer.
Wenn Sie den Arduino mit OpenMV verbinden möchten, klicken Sie auf die Schaltflächen “connect” und dann “start” in der unteren linken Ecke.
Bei der ersten Inbetriebnahme werden wir möglicherweise nach einem zusätzlichen Update der Nicla Vision Software gefragt. Wir stimmen zu.
Wenige Augenblicke nach dem Anschluss an das Arduino-Modul sollte das Bild der Kamera auf dem Bildschirm erscheinen, da dies die Aufgabe ist, die das Standardprogramm ausführt, das, wenn Sie es sich ansehen, nicht allzu kompliziert ist. Es besteht aus einem Aufruf und der Initialisierung der Kamera und einer while-Schleife, die das Bild aufnimmt. Außerdem finden Sie unten in der Umgebung so etwas wie das “serielle Terminal”. Wenn es aktiviert ist, sehen Sie die Anzahl der Bilder pro Sekunde, die bei der Übertragung aufgezeichnet werden.
Diese Art von einfachem Programm veranschaulicht recht gut die technischen Möglichkeiten der integrierten Kamera von Nicla Vision. Es wäre übertrieben zu sagen, dass das Bild gut ist. Meiner Meinung nach ist es durchschnittlich, aber für einfache Anwendungen wie die einfache Identifizierung oder die Erkennung größerer Objekte ist es ausreichend.
In den Beispielen, die im Programm zu finden sind, gibt es auch einen Code, der beschrieben wird als. Dank dessen wird der Arduino in der Lage sein, menschliche Gesichter zu erkennen. Dies ist eine der einfacheren Anwendungen für künstliche Intelligenz, die erfolgreich auf Nicla Vision ausgeführt werden können. Im Internet gibt es eine ganze Reihe gut beschriebener Anleitungen zur Kombination von Arduino und KI. Ich werde sie daher nicht wiederholen, sondern Ihnen die entsprechenden Links zur Verfügung stellen. In der Originaldokumentation finden wir ein Projekt zur Klassifizierung von Bildern. Es verwendet die Edge Impulse-Plattform, mit deren Hilfe Sie sogar Ihr eigenes Modell erstellen können, das alles erkennt, was Sie wollen. Darüber hinaus steht auf der Edge Impulse-Website ein Projekt zur Verfügung, mit dem Sie die vom Objektiv erfassten Elemente zählen können. Eine interessante Anwendung von Nicla Vision ist auch die Übertragung von Echtzeit-Videos auf eine Website.
Betrieb des Abstandssensors
Wie ich bereits erwähnt habe, ist der Nicla Vision Arduino auch mit einem VL53L1X Entfernungssensor ausgestattet. Seine Verwendung könnte eine interessante Entwicklung für KI-Projekte sein, insbesondere wenn wir Objekte erkennen wollen, die sich direkt vor dem Kameraobjektiv befinden. Wenn wir die IMU verwenden möchten, müssen wir lediglich (über den Bibliotheksmanager) die Bibliothek ‘VL53L1X ToF’ von Pololu hinzufügen.
#include "VL53L1X.h"
VL53L1X proximity;
bool blinkState = false;
int reading = 0;
int timeStart = 0;
int blinkTime = 2000;
void setup() {
Serial.begin(115200);
Wire1.begin();
Wire1.setClock(400000); // use 400 kHz I2C
proximity.setBus(&Wire1);
pinMode(LEDB, OUTPUT);
digitalWrite(LEDB, blinkState);
if (!proximity.init()) {
Serial.println("Failed to detect and initialize sensor!");
while (1);
}
proximity.setDistanceMode(VL53L1X::Long);
proximity.setMeasurementTimingBudget(10000);
proximity.startContinuous(10);
}
void loop() {
reading = proximity.read();
Serial.println(reading);
if (millis() - timeStart >= reading) {
digitalWrite(LEDB, blinkState);
timeStart = millis();
blinkState = !blinkState;
}
}
Das Programm zur Bedienung des Abstandssensors ist recht kurz und besteht aus mehreren Teilen. Zu Beginn definieren wir die im Code verwendeten Variablen, initialisieren den Sensor, den Datenbus und die eingebettete LED. In der Hauptschleife wird eine digitale Entfernungsmessung durchgeführt, die an den Computer gesendet wird und anhand derer der Status der Diode bestimmt wird.
Nachdem Sie dieses Beispiel ausgeführt haben, können Sie beobachten, wie sich die Frequenz der LED ändert, wenn sich der Abstand des Objekts von der Platine verringert. Außerdem kann die Entfernung über das Terminal mit serieller Schnittstelle verfolgt werden.
Unterstützung für integriertes Mikrofon
Neben der Kamera und dem Entfernungssensor verfügt der Arduino Nicla Vision auch über ein Mikrofon, mit dem der STM-Prozessor sehr gut zurechtkommt. In der einfachsten Konfiguration können wir ein Beispielprogramm für Arduino-Boards verwenden, für das keine zusätzlichen Bibliotheken erforderlich sind.
#include
// default number of output channels
static const char channels = 1;
// default PCM output frequency
static const int frequency = 16000;
// Buffer to read samples into, each sample is 16-bits
short sampleBuffer[512];
// Number of audio samples read
volatile int samplesRead;
// Blinking
bool state = false;
int timeStart = 0;
void setup() {
Serial.begin(9600);
pinMode(LEDB, OUTPUT);
while (!Serial);
// Configure the data receive callback
PDM.onReceive(onPDMdata);
// Optionally set the gain
// Defaults to 20 on the BLE Sense and 24 on the Portenta Vision Shield
// PDM.setGain(30);
// Initialize PDM with:
// - one channel (mono mode)
// - a 16 kHz sample rate for the Arduino Nano 33 BLE Sense
// - a 32 kHz or 64 kHz sample rate for the Arduino Portenta Vision Shield
if (!PDM.begin(channels, frequency)) {
Serial.println("Failed to start PDM!");
while (1);
}
}
void loop() {
// Wait for samples to be read
if (samplesRead) {
// Print samples to the serial monitor or plotter
for (int i = 0; i sampleBuffer[2]) {
digitalWrite(LEDB, state);
state = !state;
}
}
}
/**
Callback function to process the data from the PDM microphone.
NOTE: This callback is executed as part of an ISR.
Therefore using `Serial` to print messages inside this function isn't supported.
* */
void onPDMdata() {
// Query the number of available bytes
int bytesAvailable = PDM.available();
// Read into the sample buffer
PDM.read(sampleBuffer, bytesAvailable);
// 16-bit, 2 bytes per sample
samplesRead = bytesAvailable / 2;
}
Das Programm basiert auf der in der IDE integrierten Datenbank mit Funktionen, die in der Datei PDM.h versteckt sind, und ist recht vielseitig, da es einen oder zwei Kanäle verarbeiten kann. Nicla Vision ist mit einem einzigen Mikrofon ausgestattet, so dass wir nur eine Leitung verwenden.
Der Code gibt nicht nur den Wert der Variable zurück, die dem Geräuschpegel entspricht, sondern setzt auch die eingebaute LED auf der Grundlage dieses Wertes in Gang. Wie im vorherigen Beispiel handelt es sich um eine blau leuchtende Struktur, die ihren Zustand je nach Geräuschpegel ändert. Sie brauchen nur etwas zu sagen und die Diode reagiert entsprechend.
Für wen ist Nicla Vision?
Trotz der Tatsache, dass Nicla Vision unter dem Logo der PRO Arduino-Serie signiert ist, kann es meiner Meinung nach durchaus die Wahl von Sonntagsheimwerkern sein. Das Modul ist recht umfangreich ausgestattet, was ein ziemlicher Vorteil ist, aber noch wichtiger ist seine Benutzerfreundlichkeit. Der Hersteller hat einen umfangreichen Wissensbestand erarbeitet, so dass auch ohne viel Erfahrung die im Modul eingebauten Elemente sicher in Betrieb genommen werden können. Darüber hinaus sind die zahlreichen Peripheriegeräte und der recht leistungsstarke Mikrocontroller ein Vorteil für Profis, die ein kleines Modul für ein zu entwickelndes Gerät oder zumindest eine Plattform für das Prototyping suchen. Darüber hinaus macht die Unterstützung durch Umgebungen und Ressourcen für künstliche Intelligenz den Arduino Nicla Vision zu einer guten Wahl, um Ihr Abenteuer mit diesem Teil der Technologie zu beginnen.
Quellen:
- https://docs.arduino.cc/tutorials/nicla-vision/user-manual/
Wie hilfreich war dieser Beitrag?
Klicke auf die Sterne um zu bewerten!
Durchschnittliche Bewertung 5 / 5. Stimmenzahl: 8
Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.