Nvidia Jetson Nano
Nun habe ich endlich meinen Nvidia JetSon Nano in Betrieb genommen. Das System war einfach einzurichten und mit den kostenfreien Fundamentals Kurs von Nvidia konnte ich auch schnell ein Ergebnis erzielen und auch gleich testen, wie sich das System verhält. Wirklich tolles System auch wenn der Preis für das Entwicklungssystem doch ein wenig teuer ist. Was ich auch empfehlen kann/muss ist ein 5 V Netzteil mit mind. 3 Ampere. Ich selbst habe es für den Anfang mit einem regelbaren Netzteil getestet, aber dies kommt mit seinen 2 Ampere schnell an die Grenzen. Vor allem, wenn es bei der Gesichtserkennung zum berechnen geht brauch das System gut und gern mehr als 1,5 – 2 Ampere.
Als Kamera habe ich eine Logitech Web Cam verwendet. Es geht aber auch ein Raspberry Kamera Modul. Hierfür sind zwei Ports, auf dem Jetson Board, verfügbar. Zusätzlich benötigt man auch eine SD Karte. Ich habe mir dafür eine 64GB SD Karte zugelegt. Das Image für die Karte kann man von der Nvidia Webseite herunterladen unter : https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#intro
Nvidia Jetson Nano Zertifikat
Cool ist, dass es auch kostenfreie Kurse auf der Nvidia Seite gibt. Ich habe zwei dieser Kurse abgelegt : Getting started with AI on Jetson Nano und den Getting started with deepstream for video analytics on Jetson Nano. Die Kurse findet man hier : https://www.nvidia.com/en-us/deep-learning-ai/education/
Mikrofon Vorverstärker MAX 9814
Ich habe mir eine Entwicklungsplatine für den MAX9814 zukommen lassen. Es ist dort auch schon eine Mikrofonkapsel verbaut. Diese kann ich somit, ohne großen Aufwand, auch gleich testen. Der MAX9814 kommt vom Hersteller MAXIM Integrated und ist ein kostengünstiger aber doch auch hochwertiger Mikrofon Vorverstärker mit AGC (Automatischer Verstärker Kontrolle – Automatic Gain Control ).
Die herausgeführte Pin-Belegung auf der Platine sind : AR – OUT – GAIN – VDD – GND. Der A/R Pin ist der Attack and Release Ratio Select. Diesen kann man auf GND oder VDD legen und somit die Ratio für den Attack und Release ändern. Nach meinen Tests musste ich aber feststellen, dass dies keinen wirklichen Unterschied macht und somit bleibt dieser Pin bei mir unbeschaltet. Dann kommt der A
usgangs-Pin als OUT Bezeichnet. Mit dem Pin GAIN, kann man die Verstärkung des Mikrofonsignals fix einstellen. Legt man den GAIN Pin auf VDD bekommt man eine Verstärkung von 40 dB. Wird der GAIN Pin auf GND gelegt, hat man 50 dB Verstärkung und wenn man diesen GAIN Pin unbeschaltet lässt, gibt es 60 dB Verstärkung. Bei meinem Test liegt der GAIN Pin auf VDD, also 40 dB Verstärkung. Die Pins VDD und GND sollten klar sein.
Zur Entkoppelung des Ausgangssignals habe ich einen 100uF Kondensator dazwischen geschaltet. Somit kommt keine Gleichspannung auf meinen Lautsprecher oder auch Kopfhörer. Ausserdem ist ein 150 Ohm Widerstand im Ausgang, mit dem ich das Ausgangssignal drossel. Somit sieht das ganze wie folgt aus ( siehe Bild mit Oszi ). Hier sieht man ein 1 kHz Signal, dass ich mit einem Frequenzgenerator und einem Lautsprecher abspiele und durch das Mikrofon wieder aufnehme. Zusätzlich noch ein 10 kHz Signal im Vergleich.
Operationsverstärker
Letzte Woche wollte ich mit einem Operationsverstärker vier LEDs ansteuern. Dies soll mit einem Poti passieren. Durch die Veränderung des Widerstandes soll nacheinander LEDs aufleuchten. Dafür habe ich einen LM324N von STMicro verwendet. Dann waren noch ein paar Vorwiderstände für die LEDs nötig und natürklich ein paar Widerstände für den invertierenden Eingang. Die Schaltung ist als Impendanzwandler ( Spannungsfolger ) aufgebaut.
Raspberry Pi Pico
Habe heute meine Raspberry Pi Picos bekommen. Einen davon habe ich gleich einmal getestet, mit einen simplen Blinky und PWM Programm. Diese Examples kommen gleich mit, wenn man das SDK installiert.
Vorab habe ich mir das Setup Script von GitHub geholt:
wget https://raw.githubusercontent.com/raspberrypi/pico-setup/master/pico_setup.sh
Dann nur noch das Script ausführbar machen : chmod +x pico_setup.sh und mit ./pico_setup.sh starten. Danach den Raspberry Pi ( ich verwende eine virtuelle Maschine dafür ) neu starten. Wenn der Rechner wieder verfügbar soll/muss das Repository ge-cloned werden. Vorher vielleicht noch einen Ordner erstellen …..
cd ~/
mkdir pico
cd pico
git clone -b master https://github.com/raspberrypi/pico-sdk.git
cd pico-sdk
git submodule update –init
cd ..
git clone -b master https://github.com/raspberrypi/pico-examples.git
Zum Schluß werden noch ein paar Werkzeuge benötigt die man sich wie folgt holt :
sudo apt update
sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential
Als nächstes habe ich den PICO_SDK_Pfad noch gesetzt in :
export PICO_SDK_PATH=../../pico-sdk
und mit cmake .. abgeschlossen. Um mein Blinky endlich auf dem Raspberry Pi Pico testen zu können, musste ich jetzt nur noch das UF2 binary File im Ordner blink generieren :
cd blink
make -j4
Um den Build jetzt auf meinen Pico zu bekommen, musste ich ihn nur noch an einem Micro-USB Kabel anstecken. Der Pico hat sich sofort als Wechselträger gemeldet. Jetzt nur noch das UF2 binary File mit Copy-Paste rüberkopieren und schon läufts. Übrigens, wenn man einen neue UF2 binary File auf den Pico kopieren möchte, sollte man vor dem einstecken des Micro-USB Kabels den BOTSEL Taster ( weisse Taster auf dem Board ) drücken und gedrückt halten während man das Mikro-USB Kabel einsteckt.
Viel Spass beim Testen.
NF Signalverfolger
Nun ja, ich bin mit Fritzing nicht so sehr geübt, aber ich wollte die Schaltung auf ein Breadboard bringen. Das habe ich auch getan. Der Signalverfolger war und ist mir eine große Hilfe wenn man z.B. Audioverstärker repariert. Mit diesem relativ einfachen Tool, bestehend aus zwei OPs in einem 8 Pin DIP Gehäuse, ein paar Widerstände und Endkoppel-Kondensatoren kann man ganz einfach schwache Audio Signale bis zur Endstufe verfolgen. Wichtig sind nur die Endkoppelkondensatoren, die die Gleichspannungsanteile in der Schaltung des Verstärker von dem NF Signalberfolger abhalten.
Im Schaltungsaufbau habe ich noch keine Gleichspg. Entkoppelkondensatoren verwendet.
Hall Sensor im ESP32
Der ESP32 kommt mit einem eingebauten Temperatursensor sowie eines Hallsensors. Leider kann man in den älteren ESPs den Temperatursensor nicht wirklich verwenden, da dieser zu nahe an dem Microcontroller verbaut ist und somit falsche Temperaturwerte liefert. Hierfür muss man auf einen externen Temperatursensor zurückgreifen. Der Hallsensor überzeugt mich auch nicht ganz, aber man kann es einfach mal testen und ausprobieren. Dazu verwende ich MicroPython und einen ESP32_WROOM-32 DevKit. Dafür habe ich mir die .bin Datei von der MicroPython Seite heruntergeladen sowie das Werkeug ESPTOOL.
pip install esptool
Mit folgenden Befehl habe ich den Flashspeicher erst einmal gelöscht.
esptool.py –chip esp32 –port /dev/ttyUSB0 erase_flash
Dann die neue Firmware drauf ( –port gibt den Port an dem der ESP dran hängt, 0x1000 ist die Startadresse ab der die Firmware geladen werden soll ):
esptool.py –chip esp32 –port /dev/ttyUSB0 –baud 460800 write_flash -z 0x1000 esp32-20210902-v1.17.bin
Für kleine Sketche in Micro-Python verwende ich Thonny. Hier der Code dazu :
import esp32, time
auslesewerte = 500
while True:
value = 0;
for i in range(auslesewerte):
value += esp32.hall_sensor()
time.sleep_us(10)
print((value // auslesewerte) + 22)
Dann nur noch den Plotter einschalten und mit dem Magneten testen ( der Sensor ist übrigens im Metallgehäuse des WROOM :
TRENZ Cyclone1000
Habe von einen Kollegen den Trenz Cyclone1000 zum Testen bekommen. Da ich gerade an FPGA Prozessoren arbeite, kommt mir das Eval Board für ca. 55 – 60 Euro genau richtig. Das Board kommt mit dem Arrow USB Programmer2 als JTAG mit. Auf dem Board gibt es ein 3–Achsen-Accelerometer, Pins für Arduino MKR Add-On Boards, 8 Leds, 2 Taster. Ausserdem arbeitet ein Cyclone 10 LP 10CL025YU256C8G auf dem Board und 64MBit SDRAM (166MHz) rundet das ganze ab.
Für den Anfang habe ich das Schieberegister ( Blinky Tutorial ) einfach mal nachgstellt. Es gibt hiefür eine schöne Hands-On Anleitung wie man das macht. „Programmiert“ wird das ganze mit Quartus Prime Lite Edition. Das ganze kann aber auch mit Vivado nachgestellt werden. Zumindestens möchte ich ein paar Screenshoots zeigen die die Komplixität auch einmal zeigen soll. Ich denke deshalb macht man im Hobby Bereich weniger mit FPGA und mehr mit Microcontrollern. Will man aber Prozesse parallel laufen lassen, ist ein FPGA schon genial, obwohl diese aber auch einen größeren Leistungsverbrauch haben.
Leider habe ich in dem Tutorial keine einzige Zeile Code schreiben müssen. Da ich gerade einen FPGA Kurs mache, war/ist das Tutorial zwar ein schöner Spass, aber der Lerneffekt ist nicht so groß. Da muss man doch im Nachgang nochmals unter die Haube schauen.
Hier nun die Screenshoots :
Das PIN Layout finde ich wirklich cool. Hier werden die Ports den entsprechenden PINs am FPGA zugewiesen. Die LED[7..0] Gruppe wird der Output Gruppe zugewiesen und unten zieht man dann die einzelnen LEDs auf den PIN z.B. N5 usw.
Consolen BMI Rechner
Ich habe einen kleinen BMI Rechner für die Console geschrieben. Nichts besonderes, aber erfüllt ihren Zweck.
/*
Consolen BMI Rechner
written by Juergen Langfeld
April, 2022
*/
#include <iostream>
#include <iomanip>
using namespace std;
double BMIRechner(double Gewicht, double Koerpergroesse)
{
double BMI;
BMI = Gewicht / (Koerpergroesse * Koerpergroesse);
return BMI;
}
int main()
{
double Gewicht;
double Groesse;
double BMI;
cout << „Geben Sie bitte ihr Gewicht ein: “ << endl;
cin >> Gewicht;
cout << „Geben Sie bitte ihre Groesse ein: “ << endl;
cin >> Groesse;
BMI = BMIRechner(Gewicht, Groesse);
cout << fixed << setprecision(2);
cout << „Ihr BMI lautet: “ << BMI << endl;
return 0;
}
Hier als kompiliertes und ausführbares Programm : BMI_Rechner
DatenLogger mit Python und Rohde & Schwarz HMP2030
Ich wollte letztlich die Stromstärke eines Moduls tracken, wie sich diese im laufenden Zustand verändert. Dafür hatte ich ein HMP2030 mit RS232 Schnittstelle zur Verfügung. Das Script möchte ich noch erweitern. Es sollte das aktuelle Datum und die Uhrzeit mit einfliessen und, zusätzlich zum Textfile, eine Kennlinie mit NumPy ausgeben. Dies wird aber später folgen. Anbei nun das Datenlogger File und der Python Code dazu.
HMP2030
Wenn man das Python Script laufen lässt ( natürlich muss Python3 sowie das Plugin RSInstruments installiert sein ), bekommt man folgende Ausgabe :
Voltage: 24.000 Volt
Currency: 0.9249 Ampere
Currency: 0.8653 Ampere
Currency: 0.8696 Ampere
Currency: 0.8865 Ampere
Currency: 0.9049 Ampere
Voltage: 24.000 Volt
Currency: 0.9147 Ampere
Currency: 0.9151 Ampere
Currency: 0.9152 Ampere
Currency: 0.9465 Ampere
Currency: 0.9156 Ampere
Voltage: 24.000 Volt
Currency: 0.9156 Ampere
Currency: 0.9159 Ampere
Currency: 0.9030 Ampere
Currency: 0.9285 Ampere
Currency: 0.9161 Ampere
Voltage: 24.000 Volt
Currency: 0.9030 Ampere
Currency: 0.9032 Ampere
Currency: 0.9164 Ampere
Currency: 0.9187 Ampere
Currency: 0.9208 Ampere
Wie erwähnt, wird das ganze noch erweitert. Have fun …
Arduino Zertifizierung
Jetzt habe ich mir vorgenommen die Arduino Entry Zertifizierung zu machen. Habe mir das Lernpaket gekauft und möchte einmal sehen, was man da lernt und wie die Lerneinheiten aufgebaut sind. Als Ausbilder finde ich das ganz nützlich und kann vielleicht auch unseren Auszubildenden dies näher bringen. In der Ausbildung zum Elektroniker ist dies auch ein Gebiet was gefordert wird. Hier ein paar Bilder, was das Starter-Kit beinhaltet.
Auch ein guter Kurs von UDEMY
Arduino Projekt „Farbmischende Lampe“
Ein schönes Projekt ist die farbmischende Lampe. Mit drei Photowiderstände und einer Dreifarben LED wird dies auf einfachste Weise umgesetzt. Für den Sketch werden sechs constanten für die LED Pins und Sensor Pins erstellt. Danach werden die Werte als integer Werte deklariert. Der pinMode für die LEDs wird als Output definiert. Danach geht es in die Schleife, in der man die Sensor Werte über analogRead abfrägt.Wichtig ist vielleicht noch, dass diese Werte, PWM Werte sind und von 0 – 1023 gehen. Um diese als Einschaltdauer von 0 – 255 zu definieren, muss der Sensorwert durch vier geteilt werden z.B. redValue = redSensorValue / 4;
Wenn dann der Sketch steht, sollte das ganze so aussehen :
Viel Spass beim nachbauen …
LPC1768 – Alt aber doch cool
Ich wollte einen schnellen Sägezahngenerator bauen. Dafür hatte ich noch einen alten LPC1768 im Bastelkoffer. Mit dem freien mbed Keil konnte ich das ganze schnell und einfach umsetzen. Was ich dazu brauchte war nur das https://studio.keil.arm.com/
Folgende Codezeilen haben mich zum Ziel geführt. Eine WHILE Schleife .. ist klar … und dann zwei for Abfragen. Das wars …
Das ganze sieht dann so aus … bei 5 kHz
Da das ganze noch sehr stufig aussieht, habe ich einfach die FOR Schleife verändert und dann kommt auch ein schöner Sägezahn raus …
Nun bin ich Arduino Zertifiziert
Python Entry Kurs Zertifikat
Raspberry Pi Hole
Ich habe zwei Raspberry Pi Hole’s zusammengebaut und konfiguriert. Ein Pi Hole funktioniert mit einem Raspberry Pi 3, Touchdisplay im Kiosk Mode und der zweite ist ein Raspberry Pi Zero ( ohne WLAN ) und einem kleinen Display ( keines von Adafruit ) mit einen SSD1306 Treiberansteuerung.
Für den Zusammenbau des Pi Zero, habe ich mich ziemlich an folgende Anleitung gehalten : https://learn.adafruit.com/pi-hole-ad-blocker-with-pi-zero-w?view=all
Das ganze sieht dann, für beide Pi Holes’s ,wie folgt aus :
Die Halterung habe ich mit meinem 3 D Drucker ausgedruckt. Ist soweit Ok aber es gibt besseres.
Viel Spass beim nachbauen