CityRadar - Teensy Prototyp

Teensy ist ein Mikrocontroller mit relativ viel Rechenpower und Arbeitsspeicher. Die Version 4.1 hat eine integrierte SD-Karte zum Daten aufzeichnen.

Es gibt ein Audioboard mit dem man mit 44 kHz und 16 bit Signale aufzeichnen kann. Damit lassen sich auch die Signale von unserem Radarmodul aufzeichnen.

Mit dem Audio System Design Tool kann man die Audioflüsse virtuell „verdrahten“ und sich Programmcode ausgeben lassen den man auf den Teensy laden kann.

Um das Board zu programmieren wie hier beschrieben die Arduino-IDE 2.0 oder höher herunterladen und die Teensy Library installieren.

Unter File > Preferences „Additional Boards Managers URLS“ eintragen: https://www.pjrc.com/teensy/package_teensy_index.json

Unter Linux sollte man noch die Hinweise auf dieser Seite beachten (man mus libfuse installieren). Ausserdem muss noch eine udev-Regel eingerichtet werden:

sudo add-apt-repository universe
sudo apt install libfuse2

cd /etc/udev/rules.d
sudo wget https://www.pjrc.com/teensy/00-teensy.rules

Für uns relevant ist die AudioAnalyzeFFT1024 Funktion, die eine Fouriertransformation der Audiodaten berechnet. Die Berechnung läuft asynchron und über die available() Funktion können Daten abgefragt werden. Ein Beispiel-Sketch findet man unter File > Examples > Audio > Analysis > FFT.

Alternativ könnten wir auch die AudioAnalyzeNoteFrequency Funktion verwenden um die dominante Frequenz direkt zu ermitteln. Hier gibt es ein Beispiel-Sketch unter File > Examples > Audio > Analysis > NoteFrequency.

Unseren bisherigen Entwicklungsstand kann man von github runterladen als zip. Um den Code ausführen zu können muss noch die OpenAudio_ArduinoLibrary als zip heruntergeladen und installiert werden. Dazu in der Arudino IDE unter Sketch > Include Library > Add .ZIP Library auswählen.

Für die Visualisierung muss Processing heruntergeladen werden.

Hier ein erster Aufschlag für die Software.

teensy_audio_linein.ino (1,7 KB)
Der Controller (Teensy 4.1 + Audioboard) nimmt über Line In Daten auf. Der eine Kanal geht direkt an den PC, der andere über einen 6kHz Tiefpass an den PC. Zusätzlich wird vom gefilterten Kanal eine FFT gemacht. Dier Ergebnisse der FFT gehen per serieller Schnittstelle an den PC. Die Audiodaten können per Audacity o.ä. aufgenommen werden.

Für die FFT Daten habe ich ein Quick&Dirty Skript in Python geschrieben. Es nimmt eine vorgegebene Nummer an Messungen entgegen und plottet über einen vorgegebenen Frequenzbereich.
spectrum_receiver.py (828 Bytes)

Notizen für später:

MQTT Übertragung:

Anderer Digitalwandler:

Weitere Links:

Hier mal ein paar Bilder was der Prototyp mittlerweile messen kann:

Auto + Fußgänger:
Bildschirmfoto 2023-10-16 um 08.47.00

Auto mit Felgenbewegung sichtbar:
Bildschirmfoto 2023-10-16 um 08.48.31

Autos in zwei Richtungen und Fahrradfahrer:
Bildschirmfoto 2023-10-16 um 08.49.49

Teensy Workshop

1 „Gefällt mir“

Bauanleitung Akkuvariante

Teile

Aufbau

Platine vorbereiten

  1. Teensy Vusb-Verbindung trennen (mit Messer). Danach einmal an USB anstecken und sicherstellen dass der Teensy nicht mehr von USB versorgt wird.
  2. Knopfzellenbatterie an Teensy anlöten.
  3. 14-Pin Pinleiste mit kurzer Seite in Audio Board einsetzen
  4. Teensy auf die langen Stifte aufsetzen (Pins stehen über)
  5. Pins auf der Audio Board Seite festlöten
  6. von der Teensy Seite: 5V Pin und GND Pin (rechts und links vom USB) nach vorne biegen.
  7. Batteriekabel an die überstehenden Pins von Gnd und 5V des Teensy löten.
  8. Danach alle 14 Pins auch von der Teensy-Seite anlöten
  9. Batteriestecker an Batteriekabel löten.
  10. Die restlichen überlangen Pins können optional gekürzt werden.
  11. DC-DC mit 3.3V und Gnd des Teensy verbinden (siehe Foto)
  12. 6-Pin-Stecker mit langen Beinen anlöten:
    1. Pin 1 (Nummerierung wie am Radar-Modul) aus dem Stecker ziehen (wird nicht benötigt).
    2. Pin 5 und 6 umbiegen sodass sie in die line-in Anschlüsse des Audio Boards passen (siehe Foto).
    3. Enable (Pin 2) umbiegen und mit Pin 17 des Teensy verbinden (passt gerade so).
    4. Gnd (Pin 4) und Vcc (Pin 3) mit dem Output des DC-DC verbinden (siehe Foto). Hier muss man ca 4mm mit Lötzinn oder einem kurzen Draht überbrücken.
  13. 4-Pin Stecker: GND (Pin 9) über kurzes Kabel mit Gnd am linein oder mic in verbinden.

Radarmodul zusammen stecken

  1. Radarmodul in 3D-Druck Halterung stecken (siehe Foto).
  2. Teensy an 3D-Druck Halterung anschrauben (siehe Foto). Dabei die Stecker des Radarmoduls aufstecken.
  3. 4-Pin Stecker am Radarmodul einstecken.
  4. Lasercut Teile seitlich an das Radarmodul anschrauben.
  5. SD-Karte in Audioboard einsetzen.

Gehäuse vorbereiten

  1. Grundplatte in Gehäuse schrauben.
  2. Gewinde in Befestigungslöcher (Rückseite) schneiden.
  3. Mastplatte mit M5-Schrauben und den Unterlegschrauben (im Lasercut Teil enthalten) an Rückseite anschrauben.
  4. Gummidichtung in Deckel einlegen (was zu lang ist abschneiden).

Zusammenbau

  1. Akku mit Kletterverschluss an Grundplatte befestigen.
  2. Knopfzelle in Knopzellenhalter einsetzen.
  3. Radarmodul mit Halterung in Schlitze in der Grundplatte stecken.
  4. Teensy mit Batterie verbinden.

Software installieren

  1. Sketch drauf laden
  2. Uhrzeit einstellen
  3. Mit Processing überprüfen ob der Radarsensor richtig funktioniert

Es passt zwar nicht ganz zu diesem Faden, die anderen zum Thema CityRadar sind jedoch schon geschlossen worden, so dass ich meine Frage dort mehr stellen kann, aber vielleicht dennoch interessant: Welche Quantisierung ist unbedingt notwendig?

Der verwendete ADC wandelt mit 16 Bit pro Sample (pro Kanal). Würden 12 Bit auch ausreichen, wenn die verkürzten 4 Bit ohnehin im Rauschen untergingen?

Vielleicht kann man den Qualitätsunterschied unkompliziert mit Audacity testen. Bitte keinen großen Aufwand betreiben. War nur mehrfach eine Überlegung.

Todos Teensy Prototyp Hardware

  • Teensy+Audioboard Hardware Aufbau
  • DC-DC Befestigung entscheiden
  • Lasercut Einlegeteile finalisieren
  • Pfahl-Befestigung
  • mehr Pin-Leisten für das Radar Frontend bestellen!!!
  • Schrauben besorgen!!!
  • Bauanleitung schreiben (70%)
    • Fotos für Bauanleitung
  • git repository aufräumen
    • IQ-Branch in main branch mergen
    • alte Entwicklungen ausgliedern
    • Readme für derzeitige Version erstellen
    • Hardware-Aufbau integrieren
  • „Batterieladegerät“ aus TC4056 bauen
  • mehr 3D-Druck Halterungen drucken
  • mehr Lasercut Teile schneiden

Todos Software

Die Auswertung fokussiert sich erstmal auf die Messung direkt an der Straße. Vom Balkon aus sind zu viele Autos gleichzeitig messbar. Hier muss ein Tracking der verschiedenen Geschwindigkeitsverläufe implementiert werden. Direkt an der Straße ist das einfacher da jeweils das vorderste Auto am meisten reflektiert und wahrscheinlich auch die Autos dahinter verdeckt.

  • dominante Frequenz bestimmen
  • Bewegungsrichtung aus IQ-Signal bestimmen
  • Verläufe von Geschwindigkeit, Signalstärke und Triggersignale (siehe unten) in csv-Datei speichern
  • noise-floor
    • einmal messen und hard coden
    • eventuell noise floor laufend bestimmen oder über Kalibrierphase am Anfang?
    • Abstand zum noise floor berechnen
    • Grenzwert für noise floor Abstand definieren (~5-6dB)
  • Triggersignal wenn Auto vorbei fährt (hohe Amplituden auf vielen Frequenzen)
    • Signalverlauf speichern
    • Triggersignal scheint verlässlich zu sein
    • Grenzwert festlegen
    • cooloff timer für nochmalige Überschreitung (um zu vermeiden dass das gleiche Auto mehrmals triggert)
  • maximale Geschwindigkeit nach Trigger bestimmen
    • vom Sensor weg:
      • timer für Ermittlung der maximalen Geschwindigkeit nach Trigger festlegen
    • zum Sensor hin:
      • Zwischenspeicher implementieren um auf Werte in der Vergangenheit zugreifen zu können
    • Wann wird Geschwindigkeitsermittlung beendet bzw. wann wird die History „vergessen“
      • wenn kein Signal mehr detektierbar (mit timeout)
      • wenn erneuter Trigger
  • Speicherung von Zähler und Geschwindigkeit für die Verkehrsstatistik (csv-Tabelle)
  • Hin- und Rückfahrten besser voneinander trennen
  • simple Fußgänger-Erkennung als „Amplitude unter 10km/h“
    • Grenzwert definieren
  • an verschiedenen Straßen testen
  • Python Programm zum Anzeigen der gespeicherten Rohdaten plus detektierte Signale als Kurvenverläufe

Für Januar 2024:

  • Fußgänger-Erkennung
    • Fußgänger über Oszillation im Signal detektieren (Arm- und Beinbewegung)
  • Fahrradfahrer-Erkennung
    • allein über Geschwindigkeit?
    • über Oszillation (Arm- und Beinbewegung)?
  • Target-Größe ermitteln
    • Signalampitude?
    • im Vorbeifahren (Seitenansicht)?