---
title: "LIDAR Höhenmesser"
date: 2017-08-29T23:07:52+02:00
draft: false
---
![](/lidar/abb/gehaeuse.png)

## Zusammenfassung und Inhaltsverzeichnis {#zusammenfassung-und-inhaltsverzeichnis}

Hier wird kurz die Funktion eines LIDAR Höhenmessers mit Audioansage für die
UL-Fliegerei erläutert.

**Hinweis:**Dies ist noch eine Baustelle und das Gerät noch nicht
fertig, Wer mag, darf gern ab und zu vorbei schauen.

-   [Allgemeines](index.html#Allgemeines), wie es zu dieser Seite kam
-   [Funktionsbeschreibung](index.html#Funktion) des Gesamtkonstrukts
-   [Schaltplan LIDAR-Altimeter](index.html#schematic)
-   [Mechanischer Aufbau](index.html#mechanik)
-   [Code für den Microrechner](index.html#code)

**HINWEIS**: Bei diesem Hobbyprojekt handelt es sich um einen Prototypen
einer Idee und nicht um ein fertiges Produkt. Insbesondere die
Flugsicherheit darf bei der Benutzung niemals vernachlässigt werden, es
handelt sich nur um ein Informationsgerät welches unvorhersagbar falsche
Werte ausgeben kann! Ich kann keinerlei Verantwortung für den Nachbau
und die Benutzung eines solchen Geräts übernehmen. **Nachbau und
Verwendung erfolgen auf eigenes Risiko!!!**

-   [Code for the micro controller](index.html#code)

## Allgemeines{#Allgemeines}

Beim Betrieben des Flugsports kommt man immer wieder einmal ins Grübeln
über die eigene Landetechnik. Gerade wenn man mehrere Flugzeugklassen
(z.B. Segelflugzeuge und Ultraleicht) fliegt, sind andere Schwerpunkte
bei der Landung zu erkennen. Allein schon der Unterschied zwischen den
im motorgetriebenen Flug üblichen Wöbklappen (Flower-Klappen) und den im
Segelflug gebräuchlichen Bremsklappen (Schempp-Hirth-Klappen) ist in der
Wirkungsweise und dem Flugverhalten in der Landung immens.

Daher beneidet man schnell die Verkehrsflieger um die automatische
Computerstimme, die ihnen während des Landeanflugs zu aktuelle Höhe über
Grund zuruft. Ziel dieses Projekts ist es, diese durch einfach zu
beschaffende Technik auch dem Hobbypiloten zur Verfügung zu stellen.

## Funktionsbeschreibung{#Funktion}

Mittels eines käuflich zu erwerbenden vollintegrierten Moduls der Firma
Garmin, sind heute Laserentfernungsmesser recht einfach in
Microcontroller-Anwendungen zu integrieren

Wo es früher nur den berühmten \"Disto\" gab, kann man heute für kleines
Geld ein Modul erwerben, dass (angeblich) Entfernungen bis zu 40m
erkennen kann. Dieses Wunderwerk der Hochintegration misst die Laufzeit
eines Laserimpulses und errechnet daraus die Entfernung zu einem Objekt,
in diesem Fall idealerweise dem Boden.

## Schaltplan des LIDAR Höhenmessers{#schematic}

![Schaltplan des Hoehenmessers](/lidar/abb/schematic.svg)

Das PWM-Signal des μCs wird durch R1/C8 geglättet und somit zu einem
normalen Audiosignal gewandelt.

Wirklich interessant ist in dieser Schaltung nur, dass der Audio-Ausgang
vollständig differentiell ausgeführt werden kann. Wenn Tr1 bestückt und
C10/C11 weg gelassen werden, so kann man einen 600 Ω-Übertrager
verwenden, um das Signal zu symmetrieren. Den Übertrager könnte man
notfalls auch aus einem alten Telefon bekommen, im konkreten Falle wurde
er aber bei einem Einzelhandelsversender beschafft.\
Dieser Ausgang kann dann am z.B. am Funkgerät an den AUX-Eingang und
Masse angeschlossen werden, somit ergibt sich eine Art Stromschleife die
wesentlich weniger von elektromagnetischer Einstrahlung betroffen wird.\
Alternativ kann auch Tr1 wegelassen werden und stattdessen C10/C11
bestückt werden, dann erhält man einen normalen asymmetrischen
Tonausgang, welcher dann eher störanfällig ist. Damit entfält jedoch der
Vorteil der erhöhten Störicherheit.

Um einen Betrieb mit zwei Betriebsspannungen (positiv und negativ) zu
vermeiden, wird ausgenutzt, dass der Ruhepegel des unsigned PWM-Signals
sowieso bei 50%, d.H. bei etwa 2.5V liegt. So wird die zweite Seiten des
Übertragers auch auf 2.5V gehalten, damit wird auch eine
Gleichspannungsbelastung und evtl. Sättigung des Kerns vermieden. Das
erfolgt über den zweiten OPV in U3, welcher mittels eine
Spannungsteilers bei ca. 2.5V gehalten wird.

## Mechanischer Aufbau{#mechanik}

An die mechanische Umsetzung werden gerade bei diesem Projekt mehrere
Anforderungen gestellt.

1.  Einfache Montage: Wenige Löcher im Rumpf
2.  Regensicherheit: Potentielles Regenwasser soll möglichst nicht
    eindringen können
3.  Niedriger Luftwiederstand: Der Einbau des Geräts an das
    Luftsportgerät sollte keinen unnötigen Kraftstofmehraufwand
    verursachen

![Aussenansicht](/lidar/abb/aussen.png)

Daher wurde ein Geäuse mittels OpenSCAD entworfen, welches auf einer
hohlen Topfenform basiert. Diese solle einen recht geringen
Luftwiderstand haben. Linsen des LIDAR sind in zwei Öffnungen im Boden
des Gehäuses untergebracht, welches plan ist. Dieses wird dann bei der
Endmontage mittels einer d&umml;nnen Acrylglasplatte (hier ist noch zu
testen, ob diese bei der Wellenlänge des Lasers ausreichend transparent
ist).

![Uebersicht des Zusammenbaus](abb/zusammenbau.png)

Im Innenren sind acht Dome angebracht, auf welche das LIDAR-Modul und
die Leiterplatte aufgeschraubt werden können.

Das Ganze wird bei Montage mit vier Schrauben am Luftsportgerät fixiert.

## Code für den Microrechner{#code}

Die Aufgabe des Micocontrollers ist es, die I<super>2</super>C-Kommunikation mit dem
LIDAR-Modul zu halten und gleichzeitig dies ermittelte Höhe in
Sprachansagen umzusetzen.

Um schneller zu Ergebnissen zu kommen, wurde ein Aurdino-Nano als
Prototypenplattform genutzt. Hiermit war die Implementation der
I^2^C-Kommunikation durch die von Garmin gelieferte Bibliothek sehr
einfach.

Spannender gestaltet sich die Sprachausgabe auf einem einfachen 8bit
Microcontroller ohne externem Speicher. Natürlich könnte man z.B. über
SPI eine externes Flash-ROM nutzen, aber die Herausforderung war die
Minimierung der Bauteilanzahl.

Die neuste Generation der Software verwendet ein sehr traditionsreiches
Verfahren der Sprachcodierung: LPC (Linear Predictive Coding), welches
schon im heute historischen Speak&Spell verwendet wurde. Die Arduino
Bibliothek \"Talkie\" implementiert einen Bitstream-Decoder, welcher TMS
5220 Code interpretiert und als Audio per PWM ausgiebt.

Zur Herstellung solcher Audiodaten wird das Programm BlueWizard
(<https://github.com/patrick99e99/BlueWizard>) für Mac oder
plattformunabhängig mein Python-Port PythonWizard
(<https://github.com/ptwz/python_wizard>) verwendet. Die Erstellung der
Sprachsamples an sich erfolgt in MacOS über den sehr felxiblen \"say\"
Befehl.

Ebenso ist es nicht ganz trivial, aus den Messwerten des LIDAR eine
stetige, möglichst wenig zitternde Höheninformation zu machen. Dies
geschieht momentan so, dass ein Burst von bis zu 15 Messungen in einem
Zeitfenster von 1/3 s ausgelöst werden. Messwerte unter 10cm und über 50
Metern werden direkt verworfen. Diese werden nach der Größe absteigend
sortiert. Sind mindestens vier Werte gültig, so wird der drittgrößte Wert
benutzt. Dieser wird dann in Fuß umgerechnet und an die Sprachausgabe
übergeben.\
Beim ersten Flug mit dem Gerät wurden alle Rohmesserte ausgegeben, um
die vorigen Algorithmen noch zu verbessern.

![Ergebnisse des ersten Fluges](abb/flight_test.svg)

Das obige Bild zeigt die durch den beschriebenen Filteralgorithmus
nachträglich ausgewerteten Höhen bei einer Landung. Das Profil sieht
deshalb so seltsam aus, da sich vor dem Flugplatz eine Waldkante, ein
Tal und eine Böschung befinden. All diese Geländemerkmale werden hier
schön abgebildet.

[ ]{lang="en"}

## [About]{#About}

In hobby aviation sometimes you think about your own landing technique,
especially when you\'re flying different classes of aircraft (like
gliders and microlight/LSA) which have operational differences when
landing. When considering the technical implementation of landing aid
available, like the spoilers mostly used in gliders are working
completely different from the (Fowler) flaps used in microlight/LSA that
influence the planes behavior in lading significantly.

Therefore you come to envy commercial aviators that have this automated
computer voice calling ou the altitude during final descent. My goals
was to bring this convenience to hobby pilots.

## [Functional description]{#Function}

Using a commercially available LIDAR module by Garmin it is nearly
trivial to integrate a laser distance sensor into micro controller
applications.

Back in the day, the only laser based distance measurement device
available to the common public was the \"Disto\" made by Leica. Today
you can buy a rather small module that has a claimed range of up to
130ft. Both of these technological marvels use a laser impulses travel
time and give you the distance to a target. In this case hopefully it is
the ground.

## [LIDAR Altimeter schematic]{#schematic}

![Altimeter schematic diagram](abb/schematic.svg){width="90%"}

The PWM signal from the μC is smoothed out by R1/C8 to create an audio
waveform for use with the op-amps.

The only really interesting part is the option of a fully differential
sound output here if C10/C11 are not populated, and Tr1 is a simple 600
Ω audio transformer, which could even be salvaged from an old telephone.
The one used in this model has been bought from a major german
electronics distributor.\
Alternatively you could also populate C10/C11 and leave Tr1 out to get
single ended audio output, which might be more susceptible to electrical
noise pickup.

In order to not have two power rails (one positive and one negative),
the PWM output of the μC is idling at 50%. Therefore about 2.5V are to
be seen at the output of U3/A, the opposite side of the transformer is
held at about 2.5V by the other part of the op-amp that simply uses a
voltage divider as a reference.

## [Mechanical implementation]{#mechanics}

The menchanical design of this device has some more constraints compared
to my other projects, namly:

1.  Simple mounting: Minimize amount of holes in the fuselage
2.  Water protection: Ingress of potential rain water should be avoided
3.  Low drag: Mounting the device to our LSA should not create too much
    drag which would lead to decreased fuel efficency.

![External view](abb/aussen.png){width="50%"}

Therefore a droplet shaped case was designed using OpenSCAD, which
should help with the aerodynamic drag. The lenses of the LIDAR module go
through the flattended bottom of the device, as shown above. This will
propably be covered with a disc of acrylic glass (depends on how well
the LIDARs wavelength can propagate through it).

![Overview of assembly](abb/zusammenbau.png){width="50%"}

On the inside, there are eight cylinders to mount both the LIDAR unit
and my own PCB.

The whole device will be installed on the aircraft using four small M3
type holes.

## [Code for the microcontroller]{#code}

The micro controllers job is to translate data aquired from the LIDAR
module using I^2^C- to voice output.

In order to quickly build a simple prototype, an Arduino Nano was used.
Especially implementing the I^2^C communication was quite simple, as
Garmin supplied open source libraries to communicate with their units.

More challenging is making such an 8 bit micro controller speak. Sure, I
could have used an SPI flash to store samples, but this would increase
the BOM and I tried to keep the circuit as simple as possible..

Die neuste Generation der Software verwendet ein sehr traditionsreiches
Verfahren der Sprachcodierung: LPC (Linear Predictive Coding), welches
schon im heute historischen Speak&Spell verwendet wurde. Die Arduino
Bibliothek \"Talkie\" implementiert einen Bitstream-Decoder, welcher TMS
5220 Code interpretiert und als Audio per PWM ausgiebt. The current code
iteration uses quite a long established scheme of encoding speech data:
LPC (Linear Predictive Coding), which was e.g. the basis of the
classical Spaek\"Spell toy. The \"Talkie\" library for Arduino
implements a TMS 5220 compatible LPC bitstream decoder that plays the
audio back through the AVR\'s PWM facility.

In order to encode audio into a TMS 5220 compatible bitstream one can
either use the mac programBlueWizard
(<https://github.com/patrick99e99/BlueWizard>) or my cross platform
(command line only) python port PythonWizard
(<https://github.com/ptwz/python_wizard>). The speech samples them
selves where created using the very powerful \"say\" command in macOS.

Also, it is not trivial to create a nice and smooth height value out of
the quite noisy LIDAR information. The module returns its height in
centimeters, which makes for a nice resolution and some headroom to work
with when averaging. Currently the height processing works as follows: A
burst of maximum 15 height measurements is triggered within 1/3rd of a
second. All values under 10cm and over 5000cm are currently discarded
immediately. The resulting values are sorted in descending order, if at
least five values are valid, the calculation proceeds. As it seems the
LIDAR makes most mistakes towards the lower end of measurements,
guessing the hight too low, the third biggest altitude is taken for
further calculation. The resulting height in centimeters is converted to
feet and passed to the speech routines. During its maiden flight, all
raw values where sent to my laptop on board of the plane. These have
been used to fine-tune the algorithm described above.

![Postprocessed results of maiden flight](abb/flight_test.svg)

The plot above shows the results of the post processed raw data of the
first flight. The profile looks a bit strange, because the terrain
before the runway consists of quite a high forrest, a small valley and
quite a steep slope up towards the airfield. All of which has been quite
well detected here.

## [Downloads]{#en-downloads}

[ Alle Quellcodes stehen unter <https://github.com/ptwz/lidar_altimeter>
zur Verfügung. ]{lang="de"} [ All sources are available from
<https://github.com/ptwz/lidar_altimeter>. ]{lang="en"}\
\$Revision: 1.4 \$, \$Date: 2017/09/10 16:55:54 \$
