Initial Commit - Copy from Altus Metrum AltOS

This commit is contained in:
2024-06-25 19:03:04 +02:00
commit 13fc49c923
2048 changed files with 1206748 additions and 0 deletions

5
doc/.gitignore vendored Normal file
View File

@@ -0,0 +1,5 @@
*.html
*.pdf
*.raw
*.adoc
map-loading.svg

383
doc/Makefile.am Normal file
View File

@@ -0,0 +1,383 @@
#
# Copyright © 2018 Keith Packard <keithp@keithp.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
if FAKETIME
FAKETIME=TZ=UTC faketime -f '$(RELEASE_DATE) 00:00:00 i0'
endif
RELNOTES_INC=\
release-notes-1.9.18.inc \
release-notes-1.9.17.inc \
release-notes-1.9.16.inc \
release-notes-1.9.15.inc \
release-notes-1.9.14.inc \
release-notes-1.9.13.inc \
release-notes-1.9.12.inc \
release-notes-1.9.11.inc \
release-notes-1.9.10.inc \
release-notes-1.9.9.inc \
release-notes-1.9.8.inc \
release-notes-1.9.7.inc \
release-notes-1.9.6.inc \
release-notes-1.9.5.inc \
release-notes-1.9.4.inc \
release-notes-1.9.3.inc \
release-notes-1.9.2.inc \
release-notes-1.9.1.inc \
release-notes-1.9.inc \
release-notes-1.8.7.inc \
release-notes-1.8.6.inc \
release-notes-1.8.5.inc \
release-notes-1.8.4.inc \
release-notes-1.8.3.inc \
release-notes-1.8.2.inc \
release-notes-1.8.1.inc \
release-notes-1.8.inc \
release-notes-1.7.inc \
release-notes-1.6.8.inc \
release-notes-1.6.5.inc \
release-notes-1.6.4.inc \
release-notes-1.6.3.inc \
release-notes-1.6.2.inc \
release-notes-1.6.1.inc \
release-notes-1.6.inc \
release-notes-1.5.inc \
release-notes-1.4.2.inc \
release-notes-1.4.1.inc \
release-notes-1.4.inc \
release-notes-1.3.2.inc \
release-notes-1.3.1.inc \
release-notes-1.3.inc \
release-notes-1.2.1.inc \
release-notes-1.2.inc \
release-notes-1.1.1.inc \
release-notes-1.1.inc \
release-notes-1.0.1.inc \
release-notes-0.9.2.inc \
release-notes-0.9.inc \
release-notes-0.8.inc \
release-notes-0.7.1.inc
IMAGES=\
altosui.png \
ascent.png \
configure-altimeter.png \
configure-altosui.png \
configure-groundstation.png \
configure-pyro.png \
descent.png \
device-selection.png \
easymega.svg \
easymega-v1.0-bottom.jpg \
easymega-v1.0-top.jpg \
easymini.svg \
easymini-top.jpg \
easytimer.jpg \
fire-igniter.png \
graph-configure.png \
graph-map.png \
graph.png \
graph-stats.png \
ignitor.png \
landed.png \
launch-pad.png \
load-maps.png \
micropeak-app.png \
micropeak-back.jpg \
micropeak-device-dialog.png \
micropeak-dime.jpg \
micropeak-download.png \
micropeak-graph-configure.png \
micropeak-graph.png \
micropeak-nofont.svg \
micropeak-preferences.png \
micropeak-raw-data.png \
micropeak-save-dialog.png \
micropeak-statistics.png \
MicroPeakUSB-2.0-inuse.jpg \
MicroPeakUSB-2.0.jpg \
monitor-idle.png \
scan-channels.png \
site-map.png \
table.png \
telegps-configure.png \
telegps-graph-configure.png \
telegps-graph-graph.png \
telegps-graph-map.png \
telegps-graph-stats.png \
telegps-info.png \
telegps-location.png \
telegps-map.png \
telegps-preferences.png \
telegps-scan.png \
telegps-status.png \
telegps-table.png \
telegps-v1.0-top.jpg \
telemega.svg \
telemega-v1.0-top.jpg \
telemetrum.svg \
telemetrum-v1.1-thside.jpg \
telemetrum-v2.0-th.jpg \
telemini-v1.svg \
telemini-v1-top.jpg \
telemini-v3.svg \
telemini-v3.0-top.jpg \
telemini-v3.0-bottom.jpg \
altusmetrum-oneline.svg \
telegps-oneline.svg \
micropeak-oneline.svg
TXT_FILES=altusmetrum.txt
COMMON_INC_FILES=\
config-device.inc \
config-ui.inc \
load-maps.inc \
aprs-operation.inc \
pyro-examples.inc \
handling.inc \
release-head.inc
INC_FILES=\
header.inc \
dedication.inc \
intro.inc \
getting-started.inc \
usage.inc \
telemetrum.inc \
telemini.inc \
easymini-device.inc \
telemega.inc \
easymega.inc \
easytimer.inc \
installation.inc \
using-am-products.inc \
updating-firmware.inc \
frequency-cal.inc \
altosui.inc \
altosdroid.inc \
system-operation.inc \
pyro-channels.inc \
flight-data-recording.inc \
specs.inc \
$(COMMON_INC_FILES) \
release-notes.inc \
$(RELNOTES_INC)
ADOC_FILES=$(TXT_FILES:.txt=.adoc) $(INC_FILES:.inc=.adoc)
MOTORTEST_TXT_FILES=motortest.txt
MOTORTEST_INC_FILES=\
motortest-configuration.inc \
motortest-installation.inc \
motortest-intro.inc \
motortest-operation.inc
MOTORTEST_ADOC_FILES=$(MOTORTEST_TXT_FILES:.txt=.adoc) $(MOTORTEST_INC_FILES:.inc=.adoc)
TELELAUNCH_TXT_FILES=telelaunch.txt
TELELAUNCH_INC_FILES=\
header.inc \
telelaunch-acknowledgements.inc \
telelaunch-intro.inc \
telelaunch-configuration.inc \
telelaunch-operation.inc \
telelaunch-specs.inc \
telelaunch-updating-firmware.inc \
telelaunch-cables.inc \
telelaunch-troubleshooting.inc
TELELAUNCH_ADOC_FILES=$(TELELAUNCH_TXT_FILES:.txt=.adoc) $(TELELAUNCH_INC_FILES:.inc=.adoc)
TELEGPS_INC_FILES=\
telegps-dedication.inc \
telegps-quick-start.inc \
telegps-using.inc \
telegps-system-operation.inc \
telegps-application.inc \
telegps-specs.inc \
telegps-updating-firmware.inc \
telegps-release-notes.inc \
$(COMMON_INC_FILES)
TELEGPS_TXT_FILES=\
telegps.txt
TELEGPS_ADOC_FILES=$(TELEGPS_TXT_FILES:.txt=.adoc) $(TELEGPS_INC_FILES:.inc=.adoc)
MICROPEAK_TXT_FILES=\
micropeak.txt
MICROPEAK_INC_FILES=
MICROPEAK_ADOC_FILES=$(MICROPEAK_TXT_FILES:.txt=.adoc) $(MICROPEAK_INC_FILES:.inc=.adoc)
EASYMINI_TXT_FILES=\
easymini.txt
EASYMINI_INC_FILES=$(INC_FILES) easymini-release-notes.inc
EASYMINI_ADOC_FILES=$(EASYMINI_TXT_FILES:.txt=.adoc) $(EASYMINI_INC_FILES:.inc=.adoc)
OUTLINE_TXT_FILES=\
easymega-outline.txt \
easymini-outline.txt \
telemega-outline.txt \
telemetrum-outline.txt \
telemini-v1-outline.txt \
telemini-v3-outline.txt \
telegps-outline.txt
OUTLINE_ADOC_FILES=$(OUTLINE_TXT_FILES:.txt=.adoc)
OUTLINE_PDF_FILES=$(OUTLINE_TXT_FILES:.txt=.pdf)
SVG=\
easymini.svg \
telemega.svg \
telemetrum.svg \
telemini-v1.svg \
telemini-v3.svg \
easymega.svg
RELNOTES_HTML=$(RELNOTES_INC:.inc=.html)
ONEFILE_TXT_FILES=\
altos.txt \
companion.txt \
telemetry.txt \
map-loading.txt
ONEFILE_ADOC_FILES=$(ONEFILE_TXT_FILES:.txt=.adoc)
ONEFILE_PDF_FILES=$(ONEFILE_TXT_FILES:.txt=.pdf)
ONEFILE_HTML_FILES=$(ONEFILE_TXT_FILES:.txt=.html)
AM_HTML=am.html
PUBLISH_HTML=altusmetrum.html micropeak.html telegps.html easymini.html motortest.html telelaunch.html $(ONEFILE_HTML_FILES)
HTML=$(PUBLISH_HTML) $(RELNOTES_HTML)
if ASCIIDOCTOR_PDF
PDF=altusmetrum.pdf micropeak.pdf telegps.pdf easymini.pdf motortest.pdf telelaunch.pdf $(ONEFILE_PDF_FILES) \
$(OUTLINE_PDF_FILES)
endif
MAP_DOT_FILES=map-loading.dot
MAP_SVG_FILES=$(MAP_DOT_FILES:.dot=.svg)
STYLESHEET=am.css am-notoc.css
FONTS=\
fonts/DejaVuSansMono-BoldOblique.ttf \
fonts/DejaVuSansMono-Bold.ttf \
fonts/DejaVuSansMono-Oblique.ttf \
fonts/DejaVuSansMono.ttf \
fonts/OpenSans-Light.ttf \
fonts/OpenSans-LightItalic.ttf \
fonts/OpenSans-Regular.ttf \
fonts/OpenSans-Italic.ttf \
fonts/OpenSans-Semibold.ttf \
fonts/OpenSans-SemiboldItalic.ttf
ICONS=\
images/icons/caution.svg \
images/icons/important.svg \
images/icons/note.svg \
images/icons/tip.svg \
images/icons/warning.svg
PDF_CONFIG_FILES=altusmetrum-theme.yml
HTML_CONFIG_FILES=
PUBLISH_DOC=$(PUBLISH_HTML) $(PDF) $(IMAGES) $(MAP_SVG_FILES) $(STYLESHEET)
DOC=$(HTML) $(PDF) $(IMAGES) $(MAP_SVG_FILES) $(STYLESHEET)
SUFFIXES = .dot .svg .inc .txt .adoc .pdf .html
ATTRIBUTES=--attribute="revdate=$(DOC_DATE)" --attribute="version=$(VERSION)"
.dot.svg:
dot -Tsvg -o$@ $*.dot
.txt.adoc:
sed -e 's/^[ ]*//' -e 's/^\\//' $*.txt > $@
.inc.adoc:
sed -e 's/^[ ]*//' -e 's/^\\//' $*.inc > $@
.adoc.html:
asciidoctor $(ATTRIBUTES) -b html5 $*.adoc
.adoc.pdf:
asciidoctor-pdf $(ATTRIBUTES) -a optimize $*.adoc
all: $(HTML) $(PDF)
map-loading.adoc: $(MAP_SVG_FILES)
altusmetrum.pdf altusmetrum.html: $(ADOC_FILES) $(IMAGES)
motortest.pdf motortest.html: $(MOTORTEST_ADOC_FILES) $(IMAGES)
telelaunch.pdf telelaunch.html: $(TELELAUNCH_ADOC_FILES) $(IMAGES)
telegps.html telegps.pdf: $(TELEGPS_ADOC_FILES) $(IMAGES)
micropeak.pdf micropeak.html: $(MICROPEAK_ADOC_FILES) $(IMAGES)
easymini.pdf easymini.html: $(EASYMINI_ADOC_FILES) $(IMAGES)
telemini-v1-outline.pdf: telemini-v1-outline.txt telemini-v1.svg
telemini-v3-outline.pdf: telemini-v3-outline.txt telemini-v3.svg
install: all
WEB_ROOT=/home/bdale/web/
publish: $(PUBLISH_DOC) $(FONTS) $(ICONS)
cp -a $(PUBLISH_DOC) $(WEB_ROOT)/altusmetrum/AltOS/doc/
mkdir -p $(WEB_ROOT)/altusmetrum/AltOS/doc/fonts/
cp $(FONTS) $(WEB_ROOT)/altusmetrum/AltOS/doc/fonts/
mkdir -p $(WEB_ROOT)/altusmetrum/AltOS/doc/images/icons/
cp $(ICONS) $(WEB_ROOT)/altusmetrum/AltOS/doc/images/icons/
(cd $(WEB_ROOT)/altusmetrum ; \
git add $(WEB_ROOT)/altusmetrum/AltOS/doc/* ; \
git add $(WEB_ROOT)/altusmetrum/AltOS/doc/fonts/* ; \
git add $(WEB_ROOT)/altusmetrum/AltOS/doc/images/icons/* ;\
echo "update docs" | \
git commit -F - $(WEB_ROOT)/altusmetrum/AltOS/doc/* $(WEB_ROOT)/altusmetrum/AltOS/doc/fonts/* $(WEB_ROOT)/altusmetrum/AltOS/doc/images/icons ; \
git push)
publish-keithp: am.html $(DOC) $(FONTS)
ssh keithp.com 'mkdir -p ~keithp/public_html/altos/fonts ~keithp/public_html/altos/images/icons'
scp -p am.html $(DOC) keithp.com:~keithp/public_html/altos
scp -p $(FONTS) keithp.com:~keithp/public_html/altos/fonts
scp -p $(ICONS) keithp.com:~keithp/public_html/altos/images/icons
clean:
rm -f am.html $(HTML) $(PDF) $(ADOC_FILES) $(TELEGPS_ADOC_FILES) $(MICROPEAK_ADOC_FILES) $(TELELAUNCH_ADOC_FILES) $(MOTORTEST_ADOC_FILES)
distclean: clean
rm -f $(HTML) $(PDF)
$(PDF): $(PDF_CONFIG_FILES)
$(HTML): $(HTML_CONFIG_FILES)
am.html: Makefile make-am-html $(HTML)
sh ./make-am-html $(HTML) > $@

Binary file not shown.

After

Width:  |  Height:  |  Size: 511 KiB

BIN
doc/MicroPeakUSB-2.0.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 457 KiB

19
doc/RELNOTES Normal file
View File

@@ -0,0 +1,19 @@
Creating documentation for a new release of AltOS
* Write release notes in release-notes-${version}.inc.
* Make sure that doc/altusmetrum.txt has the right copyright year
* Make sure doc/altusmetrum-theme.yml has the right copyright year
* Make sure header.inc has the right copyright year
* Add references to that as appropriate from each of the documents:
release-notes.inc
easymini-release-notes.inc
telegps-release-notes.inc
* Add release-notes-${version}.inc to Makefile.am and git
* Make sure new hardware specs are documented in specs.inc

1408
doc/altos.txt Normal file

File diff suppressed because it is too large Load Diff

439
doc/altosdroid.inc Normal file
View File

@@ -0,0 +1,439 @@
== AltosDroid
AltosDroid provides the same flight monitoring capabilities as
AltosUI, but runs on Android devices. AltosDroid is designed
to connect to a TeleBT receiver over Bluetooth™ and (on
Android devices supporting USB On-the-go) TeleDongle and
TeleBT devices over USB. AltosDroid monitors telemetry data,
logging it to internal storage in the Android device, and
presents that data in a UI similar to the 'Monitor Flight'
window in AltosUI.
This manual will explain how to configure AltosDroid, connect
to TeleBT or TeleDongle, operate the flight monitoring
interface and describe what the displayed data means.
=== Installing AltosDroid
AltosDroid is available from the Google Play store. To
install it on your Android device, open the Google
Play Store application and search for
“altosdroid”. Make sure you don't have a space between
“altos” and “droid” or you probably won't find what
you want. That should bring you to the right page from
which you can download and install the application.
=== Charging TeleBT Battery
Before using TeleBT with AltosDroid, make sure the
internal TeleBT battery is charged. To do this,
attach a micro USB cable from a computer or other USB
power source to TeleBT. A dual LED on the circuit
board should illuminate, showing red while the battery
is charging, green when charging is completed, and
both red and green on at the same time if there is a
battery fault.
=== Connecting to TeleBT over Bluetooth™
Note that when turning TeleBT on, you may see a brief LED
flash, but there will be no "activity" indicated until you
pair with the device from AltosDroid.
Press the Android 'Menu' button or soft-key to see the
configuration options available. Select the 'Connect a
device' option and then the 'Scan for devices' entry
at the bottom to look for your TeleBT device. Select
your device, and when it asks for the code, enter
'1234'.
Subsequent connections will not require you to enter
that code, and your 'paired' device will appear in the
list without scanning.
=== Connecting to TeleDongle or TeleBT over USB
Get a special USB On-the-go adapter cable. These
cables have a USB micro-B male connector on one end
and a standard A female connector on the other
end. Plug in your TeleDongle or TeleBT device to the
adapter cable and the adapter cable into your phone
and AltosDroid should automatically start up. If it
doesn't, the most likely reason is that your Android
device doesn't support USB On-the-go.
=== AltosDroid Menu
The main AltosDroid menu has a selection of operation
and configuration options.
Connect a device::
Offers a menu of available TeleBT devices, and an
option to scan for additional devices.
Disconnect device::
Disconnects the current TeleBT or TeleDongle
device. You can reconnect TeleBT over bluetooth by
using Connect a Device. You can reconnect a USB device
by unplugging it and then plugging it back in.
Select radio frequency::
This selects which frequency to listen on by bringing
up a menu of pre-set radio frequencies. Pick the one
which matches your altimeter.
Select Tracker::
Switches the information displays to show data for a
different transmitting device. The map will always
show all of the devices in view. Trackers are shown
and selected by serial number, so make sure you note
the serial number of devices in each airframe.
Delete Track::
Deletes all information about a transmitting device.
Setup::
Offers additional configuration operations. See
<<_setup>>.
Idle Mode::
Communicate with an altimeter in Idle mode. See <<_idle_mode>>
Quit::
Shuts down AltosDroid.
=== Setup
Telemetry Rate::
Altus Metrum transmitters can be configured to operate
at lower data rates to improve transmission range. If
you have configured your device to do this, this menu
item allows you to change the receiver to match.
Units::
Selects which units used to report values.
Map Type::
Displays a menu of map types and lets you select
one. Hybrid maps include satellite images with a
roadmap overlaid. Satellite maps dispense with the
roadmap overlay. Roadmap shows just the roads. Terrain
includes roads along with shadows indicating changes
in elevation, and other geographical features.
Map Source::
Select between online and offline maps. Online maps
will show a 'move to current position' icon in the
upper right corner, while offline maps will have
copyright information all over the map. Otherwise,
they're pretty similar.
Preload Maps::
Brings up a dialog allowing you to download offline
map tiles so that you can have maps available even if
you have no network connectivity at the launch site.
Manage Frequencies::
This presents a dialog containing the current list of
frequencies that will be show in the 'Select radio
frequency' menu. You can change the label for existing
frequencies, delete or add new frequencies.
=== Idle Mode
Callsign::
Lets you configure the callsign used by AltosDroid to
communicate with the flight computer. The callsign on
the two devices must match or the communication will
fail. This provides a modest amount of protection
against accidentally controlling another persons
flight computer.
Monitor::
This provides similar information to monitoring the
telemetry stream from a flight computer in flight
mode. The title of the application will change to
include (idle) so you can tell this mode is active.
Reboot::
Remotely reboots the flight computer. This is useful
when the flight computers turned on while the airframe
is horizontal and you want to restart the flight
computers in pad mode after raising the airframe to
vertical.
Fire Igniters::
Remotely control igniters for ground testing recovery
systems.
=== AltosDroid Flight Monitoring
AltosDroid is designed to mimic the AltosUI flight
monitoring display, providing separate tabs for each
stage of your rocket flight along with a tab
containing a map of the local area with icons marking
the current location of the altimeter and the Android
device.
=== Pad
The 'Pad' tab shows information used to decide when
the rocket is ready for flight. The first elements
include red/green indicators, if any of these is red,
you'll want to evaluate whether the rocket is ready to
launch.
When the pad tab is selected, the voice responses will
include status changes to the igniters and GPS
reception, letting you know if the rocket is still
ready for launch.
Battery::
This indicates whether the Li-Po battery powering the
transmitter has sufficient charge to last for the
duration of the flight. A value of more than 3.8V is
required for a 'GO' status.
Receiver Battery::
This indicates whether the Li-Po battery powering the
TeleBT has sufficient charge to last for the duration
of the flight. A value of more than 3.8V is required
for a 'GO' status.
Data Logging::
This indicates whether there is space remaining
on-board to store flight data for the upcoming
flight. If you've downloaded data, but failed to erase
flights, there may not be any space left. TeleMetrum
and TeleMega can store multiple flights, depending on
the configured maximum flight log size. TeleGPS logs
data continuously. TeleMini v1.0 stores only a single
flight, so it will need to be downloaded and erased
after each flight to capture data. This only affects
on-board flight logging; the altimeter will still
transmit telemetry and fire ejection charges at the
proper times.
GPS Locked::
For a TeleMetrum or TeleMega device, this indicates
whether the GPS receiver is currently able to compute
position information. GPS requires at least 4
satellites to compute an accurate position.
GPS Ready::
For a TeleMetrum or TeleMega device, this indicates
whether GPS has reported at least 10 consecutive
positions without losing lock. This ensures that the
GPS receiver has reliable reception from the
satellites.
Apogee Igniter::
This indicates whether the apogee igniter has
continuity. If the igniter has a low resistance, then
the voltage measured here will be close to the Li-Po
battery voltage. A value greater than 3.2V is required
for a 'GO' status.
Main Igniter::
This indicates whether the main igniter has
continuity. If the igniter has a low resistance, then
the voltage measured here will be close to the Li-Po
battery voltage. A value greater than 3.2V is required
for a 'GO' status.
Igniter A-D::
This indicates whether the indicated additional pyro
channel igniter has continuity. If the igniter has a
low resistance, then the voltage measured here will be
close to the Li-Po battery voltage. A value greater
than 3.2V is required for a 'GO' status.
The Pad tab also shows the location of the Android
device.
=== Flight
The 'Flight' tab shows information used to evaluate
and spot a rocket while in flight. It displays speed
and height data to monitor the health of the rocket,
along with elevation, range and bearing to help locate
the rocket in the sky.
While the Flight tab is displayed, the voice
announcements will include current speed, height,
elevation and bearing information.
Speed::
Shows current vertical speed. During descent, the
speed values are averaged over a fairly long time to
try and make them steadier.
Height::
Shows the current height above the launch pad.
Max Speed::
Shows the maximum vertical speed seen during the
flight.
Max Height::
Shows the maximum height above launch pad.
Elevation::
This is the angle above the horizon from the android
devices current position.
Range::
The total distance from the android device to the
rocket, including both ground distance and difference
in altitude. Use this to gauge how large the rocket is
likely to appear in the sky.
Bearing::
This is the azimuth from true north for the rocket
from the android device. Use this in combination with
the Elevation value to help locate the rocket in the
sky, or at least to help point the antenna in the
general direction. This is provided in both degrees
and a compass point (like West South West). You'll
want to know which direction is true north before
launching your rocket.
Ground Distance::
This shows the distance across the ground to the
lat/lon where the rocket is located. Use this to
estimate what is currently under the rocket.
Latitude/Longitude::
Displays the last known location of the rocket.
Apogee Igniter::
This indicates whether the apogee igniter has
continuity. If the igniter has a low resistance, then
the voltage measured here will be close to the Li-Po
battery voltage. A value greater than 3.2V is required
for a 'GO' status.
Main Igniter::
This indicates whether the main igniter has
continuity. If the igniter has a low resistance, then
the voltage measured here will be close to the Li-Po
battery voltage. A value greater than 3.2V is required
for a 'GO' status.
=== Recover
The 'Recover' tab shows information used while
recovering the rocket on the ground after flight.
While the Recover tab is displayed, the voice
announcements will include distance along with either
bearing or direction, depending on whether you are
moving.
Bearing::
This is the azimuth from true north for the rocket
from the android device. Use this in combination with
the Elevation value to help locate the rocket in the
sky, or at least to help point the antenna in the
general direction. This is provided in both degrees
and a compass point (like West South West). You'll
want to know which direction is true north before
launching your rocket.
Direction::
When you are in motion, this provides the angle from
your current direction of motion towards the rocket.
Distance::
Distance over the ground to the rocket.
Tar Lat/Tar Lon::
Displays the last known location of the rocket.
My Lat/My Lon::
Displays the location of the Android device.
Max Height::
Shows the maximum height above launch pad seen during
the flight.
Max Speed::
Shows the maximum vertical speed seen during the
flight.
Max Accel::
Shows the maximum vertical acceleration seen during
the flight.
=== Map
The 'Map' tab shows a map of the area around the
rocket being tracked along with information needed to
recover it.
On the map itself, icons showing the location of the
android device along with the last known location of
each tracker. A blue line is drawn from the android
device location to the currently selected tracker.
Below the map, the distance and either bearing or
direction along with the lat/lon of the target and the
android device are shown
The Map tab provides the same voice announcements as
the Recover tab.
=== Downloading Flight Logs
AltosDroid always saves every bit of telemetry data it
receives. To download that to a computer for use with
AltosUI, remove the SD card from your Android device,
or connect your device to your computer's USB port and
browse the files on that device. You will find
'.telem' files in the TeleMetrum directory that will
work with AltosUI directly.

719
doc/altosui.inc Normal file
View File

@@ -0,0 +1,719 @@
== AltosUI
.AltosUI Main Window
image::altosui.png[width=450]
The AltosUI program provides a graphical user interface for
interacting with the Altus Metrum product family. AltosUI can
monitor telemetry data, configure devices and many other
tasks. The primary interface window provides a selection of
buttons, one for each major activity in the system. This
chapter is split into sections, each of which documents one of
the tasks provided from the top-level toolbar.
ifdef::radio[]
=== Monitor Flight
Selecting this item brings up a dialog box listing all
of the connected TeleDongle devices. When you choose
one of these, AltosUI will create a window to display
telemetry data as received by the selected TeleDongle
device.
.Device Selection Dialog
image::device-selection.png[width=300]
All telemetry data received are automatically recorded
in suitable log files. The name of the files includes
the current date and rocket serial and flight numbers.
The radio frequency being monitored by the TeleDongle
device is displayed at the top of the window. You can
configure the frequency by clicking on the frequency
box and selecting the desired frequency. AltosUI
remembers the last frequency selected for each
TeleDongle and selects that automatically the next
time you use that device.
Below the TeleDongle frequency selector, the window
contains a few significant pieces of information about
the altimeter providing the telemetry data stream:
* The configured call-sign
* The device serial number
* The flight number. Each altimeter remembers how
many times it has flown.
* The rocket flight state. Each flight passes through
several states including Pad, Boost, Fast, Coast,
Drogue, Main and Landed.
* The Received Signal Strength Indicator value. This
lets you know how strong a signal TeleDongle is
receiving. At the default data rate, 38400 bps, in
bench testing, the radio inside TeleDongle v0.2
operates down to about -106dBm, while the v3 radio
works down to about -111dBm. Weaker signals, or an
environment with radio noise may cause the data to
not be received. The packet link uses error
detection and correction techniques which prevent
incorrect data from being reported.
* The age of the displayed data, in seconds since the
last successfully received telemetry packet. In
normal operation this will stay in the low single
digits. If the number starts counting up, then you
are no longer receiving data over the radio link
from the flight computer.
Finally, the largest portion of the window contains a
set of tabs, each of which contain some information
about the rocket. They're arranged in 'flight order'
so that as the flight progresses, the selected tab
automatically switches to display data relevant to the
current state of the flight. You can select other tabs
at any time. The final 'table' tab displays all of the
raw telemetry values in one place in a
spreadsheet-like format.
==== Launch Pad
.Monitor Flight Launch Pad View
image::launch-pad.png[width=400]
The 'Launch Pad' tab shows information used to decide when the
rocket is ready for flight. The first elements include red/green
indicators, if any of these is red, you'll want to evaluate
whether the rocket is ready to launch:
Battery Voltage::
This indicates whether the Li-Po battery powering the
flight computer has sufficient charge to last for
the duration of the flight. A value of more than
3.8V is required for a 'GO' status.
Apogee Igniter Voltage::
This indicates whether the apogee
igniter has continuity. If the igniter has a low
resistance, then the voltage measured here will be close
to the Li-Po battery voltage. A value greater than 3.2V is
required for a 'GO' status.
Main Igniter Voltage::
This indicates whether the main
igniter has continuity. If the igniter has a low
resistance, then the voltage measured here will be close
to the Li-Po battery voltage. A value greater than 3.2V is
required for a 'GO' status.
On-board Data Logging::
This indicates whether there is space remaining
on-board to store flight data for the upcoming
flight. If you've downloaded data, but failed to erase
flights, there may not be any space left. Most of our
flight computers can store multiple flights, depending
on the configured maximum flight log size. TeleMini
v1.0 stores only a single flight, so it will need to
be downloaded and erased after each flight to capture
data. This only affects on-board flight logging; the
altimeter will still transmit telemetry and fire
ejection charges at the proper times even if the
flight data storage is full.
GPS Locked::
For a TeleMetrum or TeleMega device, this indicates
whether the GPS receiver is currently able to compute
position information. GPS requires at least 4
satellites to compute an accurate position.
GPS Ready::
For a TeleMetrum or TeleMega device, this indicates
whether GPS has reported at least 10 consecutive
positions without losing lock. This ensures that the
GPS receiver has reliable reception from the
satellites.
The Launchpad tab also shows the computed launch pad
position and altitude, averaging many reported
positions to improve the accuracy of the fix.
==== Ascent
.Monitor Flight Ascent View
image::ascent.png[width=400]
This tab is shown during Boost, Fast and Coast
phases. The information displayed here helps monitor the
rocket as it heads towards apogee.
The height, speed, acceleration and tilt are shown along
with the maximum values for each of them. This allows you to
quickly answer the most commonly asked questions you'll hear
during flight.
The current latitude and longitude reported by the GPS are
also shown. Note that under high acceleration, these values
may not get updated as the GPS receiver loses position
fix. Once the rocket starts coasting, the receiver should
start reporting position again.
Finally, the current igniter voltages are reported as in the
Launch Pad tab. This can help diagnose deployment failures
caused by wiring which comes loose under high acceleration.
==== Descent
.Monitor Flight Descent View
image::descent.png[width=400]
Once the rocket has reached apogee and (we hope)
activated the apogee charge, attention switches to
tracking the rocket on the way back to the ground, and
for dual-deploy flights, waiting for the main charge
to fire.
To monitor whether the apogee charge operated
correctly, the current descent rate is reported along
with the current height. Good descent rates vary based
on the choice of recovery components, but generally
range from 15-30m/s on drogue and should be below
10m/s when under the main parachute in a dual-deploy
flight.
With GPS-equipped flight computers, you can locate the
rocket in the sky using the elevation and bearing
information to figure out where to look. Elevation is
in degrees above the horizon. Bearing is reported in
degrees relative to true north. Range can help figure
out how big the rocket will appear. Ground Distance
shows how far it is to a point directly under the
rocket and can help figure out where the rocket is
likely to land. Note that all of these values are
relative to the pad location. If the elevation is near
90°, the rocket is over the pad, not over you.
Finally, the igniter voltages are reported in this tab
as well, both to monitor the main charge as well as to
see what the status of the apogee charge is. Note
that some commercial e-matches are designed to retain
continuity even after being fired, and will continue
to show as green or return from red to green after
firing.
==== Landed
.Monitor Flight Landed View
image::landed.png[width=400]
Once the rocket is on the ground, attention switches
to recovery. While the radio signal is often lost once
the rocket is on the ground, the last reported GPS
position is generally within a short distance of the
actual landing location.
The last reported GPS position is reported both by
latitude and longitude as well as a bearing and
distance from the launch pad. The distance should give
you a good idea of whether to walk or hitch a ride.
Take the reported latitude and longitude and enter
them into your hand-held GPS unit and have that
compute a track to the landing location.
Our flight computers will continue to transmit RDF
tones after landing, allowing you to locate the rocket
by following the radio signal if necessary. You may
need to get away from the clutter of the flight line,
or even get up on a hill (or your neighbor's RV roof)
to receive the RDF signal.
The maximum height, speed and acceleration reported
during the flight are displayed for your admiring
observers. The accuracy of these immediate values
depends on the quality of your radio link and how many
packets were received. Recovering the on-board data
after flight may yield more precise results.
To get more detailed information about the flight, you
can click on the 'Graph Flight' button which will
bring up a graph window for the current flight.
==== Table
.Monitor Flight Table View
image::table.png[width=400]
The table view shows all of the data available from the
flight computer. Probably the most useful data on
this tab is the detailed GPS information, which includes
horizontal dilution of precision information, and
information about the signal being received from the satellites.
==== Site Map
.Monitor Flight Site Map View
image::site-map.png[width=400]
When the TeleMetrum has a GPS fix, the Site Map tab
will map the rocket's position to make it easier for
you to locate the rocket, both while it is in the air,
and when it has landed. The rocket's state is
indicated by color: white for pad, red for boost, pink
for fast, yellow for coast, light blue for drogue,
dark blue for main, and black for landed.
The map's default scale is approximately 3m (10ft) per
pixel. The map can be dragged using the left mouse
button. The map will attempt to keep the rocket
roughly centered while data is being received.
You can adjust the style of map and the zoom level
with buttons on the right side of the map window. You
can draw a line on the map by moving the mouse over
the map with a button other than the left one pressed,
or by pressing the left button while also holding down
the shift key. The length of the line in real-world
units will be shown at the start of the line.
Images are fetched automatically via the Google Maps
Static API, and cached on disk for reuse. If map
images cannot be downloaded, the rocket's path will be
traced on a dark gray background instead.
You can pre-load images for your favorite launch sites
before you leave home; check out <<_load_maps>>.
==== Igniter
.Monitor Flight Additional Igniter View
image::ignitor.png[width=400]
TeleMega includes four additional programmable pyro
channels. The Ignitor tab shows whether each of them has
continuity. If an ignitor has a low resistance, then the
voltage measured here will be close to the pyro battery
voltage. A value greater than 3.2V is required for a 'GO'
status.
endif::radio[]
=== Save Flight Data
The altimeter records flight data to its internal
flash memory.
ifdef::radio[]
Data logged on board is recorded at a much
higher rate than the telemetry system can handle, and
is not subject to radio drop-outs. As such, it
provides a more complete and precise record of the
flight.
endif::radio[]
The 'Save Flight Data' button allows you to
read the flash memory and write it to disk.
Clicking on the 'Save Flight Data' button brings up a
list of connected flight computers and TeleDongle
devices. If you select a flight computer, the flight
data will be downloaded from that device directly.
ifdef::radio[]
If you select a TeleDongle device, flight data will be
downloaded from a flight computer over radio link via
the specified TeleDongle. See
<<_controlling_an_altimeter_over_the_radio_link>> for
more information.
endif::radio[]
After the device has been selected, a dialog showing
the flight data saved in the device will be shown
allowing you to select which flights to download and
which to delete. With version 0.9 or newer firmware,
you must erase flights in order for the space they
consume to be reused by another flight. This prevents
accidentally losing flight data if you neglect to
download data before flying again. Note that if there
is no more space available in the device, then no data
will be recorded during the next flight.
The file name for each flight log is computed
automatically from the recorded flight date, altimeter
serial number and flight number information.
=== Replay Flight
Select this button and you are prompted to select a flight
record file, either a .telem file recording telemetry data or a
.eeprom file containing flight data saved from the altimeter
flash memory.
Once a flight record is selected, the flight monitor interface
is displayed and the flight is re-enacted in real
time.
ifdef::radio[]
Check
<<_monitor_flight>> to learn how this window operates.
endif::radio[]
=== Graph Data
Select this button and you are prompted to select a flight
record file, either a .telem file recording telemetry data or a
.eeprom file containing flight data saved from
flash memory.
Note that telemetry files will generally produce poor graphs
due to the lower sampling rate and missed telemetry packets.
Use saved flight data in .eeprom files for graphing where possible.
Once a flight record is selected, a window with multiple tabs is
opened.
==== Flight Graph
.Flight Data Graph
image::graph.png[width=400]
By default, the graph contains acceleration (blue),
velocity (green) and altitude (red).
The graph can be zoomed into a particular area by
clicking and dragging down and to the right. Once
zoomed, the graph can be reset by clicking and
dragging up and to the left. Holding down control and
clicking and dragging allows the graph to be panned.
The right mouse button causes a pop-up menu to be
displayed, giving you the option save or print the
plot.
==== Configure Graph
.Flight Graph Configuration
image::graph-configure.png[width=400]
This selects which graph elements to show, and, at the
very bottom. It also lets you configure how
the graph is drawn:
* Whether to use metric or imperial units
* Whether to show a marker at each data
point. When displaying a small section of
the graph, these can be useful to know what
data values were recorded.
* How wide to draw the lines in the graph
* How to filter speed and acceleration data
computed from barometric data. Flight
computers with accelerometers never display
computed acceleration data, and only use
barometric data to compute speed during
descent. Flight computers without
accelerometers always compute both speed and
acceleration from barometric data. A larger
value smooths the data more.
==== Flight Statistics
.Flight Statistics
image::graph-stats.png[width=400]
Shows overall data computed from the flight.
ifdef::gps[]
==== Map
.Flight Map
image::graph-map.png[width=400]
Shows a satellite image of the flight area
overlaid with the path of the flight. The
flight path will have different colored
sections for each state of the flight (just
like the Site Map in Monitor Flight mode):
white for pad, red for boost, pink for fast,
yellow for coast, light blue for drogue, dark
blue for main, and black for landed.
The red concentric circles mark the launch
pad, the black concentric circles mark the
landing location. Data for the point along the
along the flight path nearest the cursor will
be displayed at the bottom of the window. This
data includes flight time (so you can
correlate data in the graph window), latitude,
longitude, height above ground and vertical
speed. The selected point will be highlighted
with concentric circles in the same color as
the flight path at that point.
endif::gps[]
=== Export Data
This tool takes the raw data files and makes them
available for external analysis. When you select this
button, you are prompted to select a flight data file,
which can be either a .eeprom or .telem. The .eeprom
files contain higher resolution and more continuous
data, while .telem files contain receiver signal
strength information. Next, a second dialog appears
which is used to select where to write the resulting
file.
ifdef::gps[]
It has a selector to choose between CSV and KML
file formats.
endif::gps[]
==== Comma Separated Value Format
This is a text file containing the data in a form
suitable for import into a spreadsheet or other
external data analysis tool. The first few lines of
the file contain the version and configuration
information from the altimeter, then there is a single
header line which labels all of the fields. All of
these lines start with a '#' character which many
tools can be configured to skip over.
The remaining lines of the file contain the data, with
each field separated by a comma and at least one
space. All of the sensor values are converted to
standard units, with the barometric data reported in
both pressure, altitude and height above pad units.
ifdef::gps[]
==== Keyhole Markup Language (for Google Earth)
This is the format used by Google Earth to provide an
overlay within that application. With this, you can
use Google Earth to see the whole flight path
in 3D.
endif::gps[]
=== Configure Altimeter
.Altimeter Configuration
image::configure-altimeter.png[width=350]
ifdef::radio[]
Select this button and then select either an altimeter or
TeleDongle Device from the list provided. Selecting a TeleDongle
device will use the radio link to configure a remote
altimeter.
endif::radio[]
ifndef::radio[]
Select this button and then select an altimeter.
endif::radio[]
The first few lines of the dialog provide information about the
connected device, including the product name,
software version and hardware serial number. Below that are the
individual configuration entries.
At the bottom of the dialog, there are four buttons:
Save::
This writes any changes to the configuration parameter
block in flash memory. If you don't press this button,
any changes you make will be lost.
Reset::
This resets the dialog to the most recently saved
values, erasing any changes you have made.
Reboot::
This reboots the device. Use this to switch from idle
to pad mode by rebooting once the rocket is oriented
for flight, or to confirm changes you think you saved
are really saved.
Close::
This closes the dialog. Any unsaved changes will be
lost.
The rest of the dialog contains the parameters to be configured.
include::config-device.adoc[]
=== Configure AltosUI
.Configure AltosUI Dialog
image::configure-altosui.png[width=230]
This button presents a dialog so that you can
configure the AltosUI global settings.
include::config-ui.adoc[]
ifdef::radio[]
=== Configure Groundstation
.Configure Groundstation Dialog
image::configure-groundstation.png[width=300]
Select this button and then select a TeleDongle or
TeleBT Device from the list provided.
The first few lines of the dialog provide information
about the connected device, including the product
name, software version and hardware serial
number. Below that are the individual configuration
entries.
Note that TeleDongle and TeleBT don't save any
configuration data, the settings here are recorded on
the local machine in the Java preferences
database. Moving the device to another machine, or
using a different user account on the same machine
will cause settings made here to have no effect.
At the bottom of the dialog, there are three
buttons:
Save::
This writes any changes to the local Java
preferences file. If you don't press this
button, any changes you make will be lost.
Reset::
This resets the dialog to the most recently
saved values, erasing any changes you have
made.
Close::
This closes the dialog. Any unsaved changes
will be lost.
The rest of the dialog contains the parameters
to be configured.
==== Frequency
This configures the frequency to use for both
telemetry and packet command mode. Set this
before starting any operation involving packet
command mode so that it will use the right
frequency. Telemetry monitoring mode also
provides a menu to change the frequency, and
that menu also sets the same Java preference
value used here.
==== RF Calibration
The radios in every Altus Metrum device are
calibrated at the factory to ensure that they
transmit and receive on the specified
frequency. To change a TeleDongle or TeleBT's
calibration, you must reprogram the unit
completely, so this entry simply shows the
current value and doesn't allow any changes.
==== Telemetry Rate
This lets you match the telemetry and packet
link rate from the transmitter. If they don't
match, the device won't receive any data.
endif::radio[]
=== Flash Image
This reprograms Altus Metrum devices with new
firmware.
ifdef::telemetrum,telemini[]
TeleMetrum v1.x, TeleDongle v0.2, TeleMini v1.0
and TeleBT v1.0 are all reprogrammed by using another
similar unit as a programming dongle (pair
programming).
endif::telemetrum,telemini[]
ifdef::telemega,easymega,easytimer,telemetrum[]
TeleMega, EasyMega, TeleMetrum v2 or newer,
EasyMini, EasyTimer, TeleBT v3 or newer and TeleDongle v3
or newer are all
endif::telemega,easymega,easytimer,telemetrum[]
ifndef::telemega,easymega,easytimer,telemetrum[]
EasyMini is
endif::telemega,easymega,easytimer,telemetrum[]
programmed directly
over USB (self programming). Please read
the directions for flashing devices in
<<_updating_device_firmware>>.
=== Fire Igniter
.Fire Igniter Window
image::fire-igniter.png[width=120]
This activates the igniter circuits in the flight
computer to help test recovery systems
deployment.
ifdef::radio[]
Because this command can operate over the
Packet Command Link, you can prepare the rocket as for
flight and then test the recovery system without
needing to snake wires inside the air-frame.
endif::radio[]
Selecting the 'Fire Igniter' button brings up the
usual device selection dialog. Pick the desired
device. This brings up another window which shows the
current continuity test status for all of the pyro
channels.
Next, select the desired igniter to fire. This will
enable the 'Arm' button.
Select the 'Arm' button. This enables the 'Fire'
button. The word 'Arm' is replaced by a countdown
timer indicating that you have 10 seconds to press the
'Fire' button or the system will deactivate, at which
point you start over again at selecting the desired
igniter.
ifdef::radio[]
=== Scan Channels
.Scan Channels Window
image::scan-channels.png[width=300]
This listens for telemetry packets on all of the
configured frequencies, displaying information about
each device it receives a packet from. You can select
which of the baud rates and telemetry formats should
be tried; by default, it only listens at 38400 baud
with the standard telemetry format used in v1.0 and
later firmware.
endif::radio[]
ifdef::gps[]
include::load-maps.adoc[]
endif::gps[]
ifdef::radio[]
=== Monitor Idle
.Monitor Idle Window
image::monitor-idle.png[width=500]
This brings up a dialog similar to the Monitor Flight
UI, except it works with the altimeter in “idle” mode
by sending query commands to discover the current
state rather than listening for telemetry
packets. Because this uses command mode, it needs to
have the TeleDongle and flight computer callsigns
match exactly. If you can receive telemetry, but
cannot manage to run Monitor Idle, then it's very
likely that your callsigns are different in some way.
You can change the frequency and callsign used to
communicate with the flight computer; they must both
match the configuration in the flight computer
exactly.
endif::radio[]

BIN
doc/altosui.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

354
doc/altusmetrum-oneline.svg Normal file
View File

@@ -0,0 +1,354 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg2"
width="444"
height="98"
version="1.0"
sodipodi:version="0.32"
inkscape:version="0.91 r13725"
sodipodi:docname="altusmetrum-oneline.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
inkscape:export-filename="/home/keithp/src/cc1111/altus-logo/bottom.png"
inkscape:export-xdpi="119.89881"
inkscape:export-ydpi="119.89881">
<metadata
id="metadata14">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs12">
<linearGradient
id="linearGradient4171">
<stop
id="stop4173"
offset="0"
style="stop-color:#da7000;stop-opacity:1;" />
<stop
style="stop-color:#a63852;stop-opacity:1;"
offset="0.24528302"
id="stop4175" />
<stop
id="stop4177"
offset="1"
style="stop-color:#7200a4;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient3165">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop3167" />
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop3169" />
</linearGradient>
<linearGradient
id="linearGradient3177">
<stop
style="stop-color:#da7000;stop-opacity:1;"
offset="0"
id="stop3179" />
<stop
id="stop3447"
offset="0.24528302"
style="stop-color:#a63852;stop-opacity:1;" />
<stop
style="stop-color:#7200a4;stop-opacity:1;"
offset="1"
id="stop3181" />
</linearGradient>
<linearGradient
id="linearGradient3169">
<stop
style="stop-color:#ff8a00;stop-opacity:1;"
offset="0"
id="stop3171" />
<stop
id="stop3445"
offset="0.71698111"
style="stop-color:#c24573;stop-opacity:0.98039216;" />
<stop
style="stop-color:#8500e7;stop-opacity:0.96078432;"
offset="1"
id="stop3173" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 121 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="191 : 121 : 1"
inkscape:persp3d-origin="95.5 : 80.666667 : 1"
id="perspective16" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3175"
cx="951.68713"
cy="2305.2668"
fx="951.68713"
fy="2305.2668"
r="951.68701"
gradientTransform="matrix(1,0,0,1.2664529,0,-321.14689)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3177"
id="linearGradient3183"
x1="170.6575"
y1="110.17125"
x2="614.24878"
y2="110.17125"
gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3165"
id="radialGradient3171"
cx="951.68713"
cy="1205.2668"
fx="951.68713"
fy="1205.2668"
r="951.68701"
gradientTransform="matrix(1,0,0,1.2664529,0,-321.14689)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3177"
id="linearGradient3781"
x1="193.16029"
y1="121.50799"
x2="589.83154"
y2="121.50799"
gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3008"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.2664529,0,-321.14689)"
cx="951.68713"
cy="2305.2668"
fx="951.68713"
fy="2305.2668"
r="951.68701" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3165"
id="radialGradient3010"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.2664529,0,-321.14689)"
cx="951.68713"
cy="1205.2668"
fx="951.68713"
fy="1205.2668"
r="951.68701" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3012"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.2664529,0,-321.14689)"
cx="951.68713"
cy="2305.2668"
fx="951.68713"
fy="2305.2668"
r="951.68701" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3165"
id="radialGradient3014"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.2664529,0,-321.14689)"
cx="951.68713"
cy="1205.2668"
fx="951.68713"
fy="1205.2668"
r="951.68701" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3016"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.2664529,0,-321.14689)"
cx="951.68713"
cy="2305.2668"
fx="951.68713"
fy="2305.2668"
r="951.68701" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3165"
id="radialGradient3018"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.2664529,0,-321.14689)"
cx="951.68713"
cy="1205.2668"
fx="951.68713"
fy="1205.2668"
r="951.68701" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4171"
id="linearGradient4229"
x1="47.299"
y1="31.709364"
x2="129.17451"
y2="31.709364"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4171"
id="linearGradient4176"
gradientUnits="userSpaceOnUse"
x1="47.299"
y1="31.709364"
x2="129.17451"
y2="31.709364" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4171"
id="linearGradient4178"
gradientUnits="userSpaceOnUse"
x1="47.299"
y1="31.709364"
x2="129.17451"
y2="31.709364" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4171"
id="linearGradient4180"
gradientUnits="userSpaceOnUse"
x1="47.299"
y1="31.709364"
x2="129.17451"
y2="31.709364" />
</defs>
<sodipodi:namedview
inkscape:cy="-41.854765"
inkscape:cx="115.51489"
inkscape:zoom="1.7366335"
inkscape:window-height="1404"
inkscape:window-width="1799"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
guidetolerance="10.0"
gridtolerance="10.0"
objecttolerance="10.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
showgrid="false"
inkscape:window-x="343"
inkscape:window-y="171"
inkscape:current-layer="svg2"
inkscape:window-maximized="0"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
units="px" />
<g
id="g4218"
style="fill:url(#linearGradient4229);fill-opacity:1"
transform="translate(20.153936,16.360317)">
<path
d="m 59.744607,35.548307 c 6.934865,0 15.789201,4.210453 17.399081,13.126708 0.619184,3.343596 1.362205,5.139231 4.458127,5.139231 2.167146,0 3.715107,-1.733717 3.715107,-4.953475 0,-1.919472 -1.671798,-13.064791 -9.783114,-28.358645 -3.529351,-6.687191 -5.634578,-9.845031 -9.225847,-9.845031 -4.334291,0 -6.315681,3.15784 -9.845032,9.845031 -8.111315,15.293854 -9.163928,26.439173 -9.163928,28.358645 0,2.972085 0.681102,4.953475 4.024698,4.953475 2.229064,0 3.529351,-1.362206 3.777025,-3.653188 0.433429,-4.148535 1.362205,-10.092705 3.034003,-14.612751 l 1.60988,0 z m 0.247673,-6.191844 c 1.60988,-3.838943 3.653188,-7.55405 6.129926,-11.269156 3.034003,4.829638 5.386904,10.030787 7.244457,15.355773 l -0.123837,0.123837 C 69.156209,30.223321 63.831224,29.356463 60.79722,29.356463 l -0.80494,0 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:61.91843796px;line-height:100%;font-family:'ITC Benguiat Gothic Std';-inkscape-font-specification:'ITC Benguiat Gothic Std Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient4176);fill-opacity:1;stroke:none"
id="path3362"
inkscape:connector-curvature="0" />
<path
d="m 99.370471,13.62918 c 0,-2.229064 -1.17645,-4.0246989 -3.715106,-4.0246989 -2.538656,0 -3.715106,1.7956349 -3.715106,4.0246989 l 0,36.160367 c 0,2.229064 1.17645,4.024699 3.715106,4.024699 2.538656,0 3.715106,-1.795635 3.715106,-4.024699 l 0,-36.160367 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:61.91843796px;line-height:100%;font-family:'ITC Benguiat Gothic Std';-inkscape-font-specification:'ITC Benguiat Gothic Std Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient4178);fill-opacity:1;stroke:none"
id="path3364"
inkscape:connector-curvature="0" />
<path
d="m 123.29227,28.861115 c 1.98139,0 3.59127,-1.052613 3.59127,-3.343595 0,-2.290983 -1.60988,-3.343596 -3.59127,-3.343596 l -5.44882,0 0,-5.263067 c 0,-2.229064 -1.17645,-4.024699 -3.71511,-4.024699 -2.53865,0 -3.7151,1.795635 -3.7151,4.024699 l 0,5.263067 -2.10523,0 c -2.04331,0 -3.65319,1.052613 -3.65319,3.343596 0,2.290982 1.60988,3.343595 3.65319,3.343595 l 2.10523,0 0,13.374383 c 0,11.392992 4.33429,11.392992 13.74589,11.392992 3.3436,0 5.01539,-1.114531 5.01539,-3.529351 0,-2.414819 -1.67179,-3.52935 -3.77702,-3.52935 l -3.96278,0 c -2.84825,0 -3.59127,-1.733717 -3.59127,-5.448823 l 0,-12.259851 5.44882,0 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:61.91843796px;line-height:100%;font-family:'ITC Benguiat Gothic Std';-inkscape-font-specification:'ITC Benguiat Gothic Std Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient4180);fill-opacity:1;stroke:none"
id="path3366"
inkscape:connector-curvature="0" />
</g>
<g
id="g4231"
style="fill:#78079a;fill-opacity:1"
transform="translate(20.153936,16.360317)">
<path
d="m 158.87506,25.827112 c 0,-2.229064 -1.17645,-4.024699 -3.71511,-4.024699 -2.53865,0 -3.7151,1.795635 -3.7151,4.024699 l 0,12.817116 c 0,5.758415 -2.72442,8.668582 -6.93487,8.668582 -3.3436,0 -5.01539,-2.105227 -5.01539,-6.439518 l 0,-15.04618 c 0,-2.229064 -1.17645,-4.024699 -3.71511,-4.024699 -2.53866,0 -3.71511,1.795635 -3.71511,4.024699 l 0,17.02757 c 0,6.315681 4.3343,11.145319 11.02149,11.145319 3.40551,0 5.88225,-0.990695 8.35899,-3.343596 0,1.547961 1.17645,3.343596 3.7151,3.343596 2.53866,0 3.71511,-1.795635 3.71511,-4.024698 l 0,-24.148191 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:61.91843796px;line-height:100%;font-family:'ITC Benguiat Gothic Std';-inkscape-font-specification:'ITC Benguiat Gothic Std Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#78079a;fill-opacity:1;stroke:none"
id="path3368"
inkscape:connector-curvature="0" />
<path
d="m 179.78124,53.62849 c 6.99678,0 12.19793,-3.15784 12.19793,-10.649971 0,-13.06479 -19.50431,-8.297071 -19.50431,-12.569443 0,-1.486042 1.54796,-1.547961 2.66249,-1.547961 l 10.83573,0 c 1.98139,0 3.59127,-1.052613 3.59127,-3.343595 0,-2.290983 -1.60988,-3.343596 -3.59127,-3.343596 l -10.4023,0 c -6.81103,0 -10.52613,2.538656 -10.52613,8.173234 0,12.940953 19.50431,6.191844 19.50431,12.569443 0,3.343595 -2.3529,4.024698 -5.32499,4.024698 l -11.14532,0 c -2.04331,0 -3.65319,1.052614 -3.65319,3.343596 0,2.290982 1.60988,3.343595 3.65319,3.343595 l 11.70259,0 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:61.91843796px;line-height:100%;font-family:'ITC Benguiat Gothic Std';-inkscape-font-specification:'ITC Benguiat Gothic Std Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#78079a;fill-opacity:1;stroke:none"
id="path3370"
inkscape:connector-curvature="0" />
<path
d="m 216.06544,26.446296 c -2.53866,-3.095922 -4.0247,-7.058702 -6.12993,-12.197932 -0.9907,-2.414819 -2.47674,-3.405514 -4.95348,-3.405514 -4.76771,0 -4.95347,3.653188 -5.94417,9.597358 -1.17645,6.996783 -2.22906,19.132797 -2.22906,26.191499 0,4.334291 0.30959,7.182539 3.83894,7.182539 3.46744,0 3.96278,-2.352901 3.96278,-5.263067 l 0,-9.783114 c 0,-5.386904 0.61919,-10.959563 1.48605,-16.656059 l 0.12383,0 c 0.9907,3.15784 5.51074,13.498219 9.84504,13.498219 4.33429,0 8.85433,-10.340379 9.84503,-13.498219 l 0.12383,0 c 0.86686,5.696496 1.48605,11.269155 1.48605,16.656059 l 0,9.783114 c 0,2.910166 0.49534,5.263067 3.96278,5.263067 3.52935,0 3.83894,-2.848248 3.83894,-7.182539 0,-7.058702 -1.05261,-19.194716 -2.22906,-26.191499 -0.9907,-5.94417 -1.17645,-9.597358 -5.94417,-9.597358 -2.47674,0 -3.96278,0.990695 -4.95348,3.405514 -2.10523,5.13923 -3.59127,9.10201 -6.12992,12.197932 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:61.91843796px;line-height:100%;font-family:'ITC Benguiat Gothic Std';-inkscape-font-specification:'ITC Benguiat Gothic Std Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#78079a;fill-opacity:1;stroke:none"
id="path3372"
inkscape:connector-curvature="0" />
<path
d="m 266.81728,53.62849 c 1.98139,0 3.59127,-1.052613 3.59127,-3.343595 0,-2.290982 -1.60988,-3.343596 -3.59127,-3.343596 l -7.98748,0 c -5.20115,0 -9.59735,-1.547961 -10.0927,-7.368294 l 18.94704,0 c 2.60057,0 3.034,-1.547961 3.034,-3.653188 0,-7.244457 -4.27237,-14.117404 -14.61275,-14.117404 -9.47352,0 -15.54153,7.244458 -15.54153,16.532223 0,9.225848 6.19185,15.293854 17.21333,15.293854 l 9.04009,0 z M 249.23245,34.000346 c 0.86685,-3.715107 3.96278,-6.006089 6.87294,-6.006089 2.91017,0 6.00609,2.290982 6.81103,6.006089 l -13.68397,0 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:61.91843796px;line-height:100%;font-family:'ITC Benguiat Gothic Std';-inkscape-font-specification:'ITC Benguiat Gothic Std Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#78079a;fill-opacity:1;stroke:none"
id="path3374"
inkscape:connector-curvature="0" />
<path
d="m 291.99582,28.861115 c 1.98139,0 3.59127,-1.052613 3.59127,-3.343595 0,-2.290983 -1.60988,-3.343596 -3.59127,-3.343596 l -5.44882,0 0,-5.263067 c 0,-2.229064 -1.17645,-4.024699 -3.7151,-4.024699 -2.53866,0 -3.71511,1.795635 -3.71511,4.024699 l 0,5.263067 -2.10523,0 c -2.04331,0 -3.65319,1.052613 -3.65319,3.343596 0,2.290982 1.60988,3.343595 3.65319,3.343595 l 2.10523,0 0,13.374383 c 0,11.392992 4.33429,11.392992 13.74589,11.392992 3.3436,0 5.0154,-1.114531 5.0154,-3.529351 0,-2.414819 -1.6718,-3.52935 -3.77703,-3.52935 l -3.96278,0 c -2.84825,0 -3.59127,-1.733717 -3.59127,-5.448823 l 0,-12.259851 5.44882,0 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:61.91843796px;line-height:100%;font-family:'ITC Benguiat Gothic Std';-inkscape-font-specification:'ITC Benguiat Gothic Std Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#78079a;fill-opacity:1;stroke:none"
id="path3376"
inkscape:connector-curvature="0" />
<path
d="m 301.26328,49.603792 c 0,2.414819 1.36221,4.210454 3.71511,4.210454 2.3529,0 3.7151,-1.795635 3.7151,-4.210454 l 0,-13.560138 c 0,-5.696496 1.79564,-7.182539 5.44883,-7.182539 2.66249,0 4.27237,-1.114532 4.27237,-3.467432 0,-2.105227 -1.11453,-3.59127 -3.83894,-3.59127 -3.46744,0 -5.82034,1.486043 -6.31568,4.891557 l -0.12384,0 -0.12384,-1.919472 c -0.24767,-2.786329 -1.98139,-2.972085 -3.34359,-2.972085 -2.16715,0 -3.40552,1.238369 -3.40552,3.777025 l 0,24.024354 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:61.91843796px;line-height:100%;font-family:'ITC Benguiat Gothic Std';-inkscape-font-specification:'ITC Benguiat Gothic Std Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#78079a;fill-opacity:1;stroke:none"
id="path3378"
inkscape:connector-curvature="0" />
<path
d="m 348.2584,25.827112 c 0,-2.229064 -1.17645,-4.024699 -3.71511,-4.024699 -2.53866,0 -3.71511,1.795635 -3.71511,4.024699 l 0,12.817116 c 0,5.758415 -2.72441,8.668582 -6.93486,8.668582 -3.3436,0 -5.01539,-2.105227 -5.01539,-6.439518 l 0,-15.04618 c 0,-2.229064 -1.17645,-4.024699 -3.71511,-4.024699 -2.53866,0 -3.71511,1.795635 -3.71511,4.024699 l 0,17.02757 c 0,6.315681 4.33429,11.145319 11.02149,11.145319 3.40551,0 5.88225,-0.990695 8.35898,-3.343596 0,1.547961 1.17645,3.343596 3.71511,3.343596 2.53866,0 3.71511,-1.795635 3.71511,-4.024698 l 0,-24.148191 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:61.91843796px;line-height:100%;font-family:'ITC Benguiat Gothic Std';-inkscape-font-specification:'ITC Benguiat Gothic Std Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#78079a;fill-opacity:1;stroke:none"
id="path3380"
inkscape:connector-curvature="0" />
<path
d="m 355.79019,49.789547 c 0,2.229064 1.17645,4.024699 3.7151,4.024699 2.53866,0 3.71511,-1.795635 3.71511,-4.024699 l 0,-12.631361 c 0,-5.820333 2.66249,-8.668581 5.94417,-8.668581 4.14853,0 5.01539,3.281677 5.01539,7.554049 l 0,13.745893 c 0,2.229064 1.17645,4.024699 3.71511,4.024699 2.53865,0 3.7151,-1.795635 3.7151,-4.024699 l 0,-12.631361 c 0,-5.820333 2.6625,-8.668581 5.94417,-8.668581 4.14854,0 5.0154,3.281677 5.0154,7.554049 l 0,13.745893 c 0,2.229064 1.17645,4.024699 3.7151,4.024699 2.53866,0 3.71511,-1.795635 3.71511,-4.024699 l 0,-16.841815 c 0,-6.315681 -4.33429,-11.145319 -11.02148,-11.145319 -4.08662,0 -7.30638,2.167146 -9.96887,4.643883 -2.84825,-3.529351 -5.07731,-4.643883 -8.66858,-4.643883 -3.03401,0 -5.6965,1.238369 -7.86364,3.343596 0,-1.733716 -1.05262,-3.343596 -3.3436,-3.343596 -2.29098,0 -3.34359,1.60988 -3.34359,3.59127 l 0,24.395864 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:61.91843796px;line-height:100%;font-family:'ITC Benguiat Gothic Std';-inkscape-font-specification:'ITC Benguiat Gothic Std Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#78079a;fill-opacity:1;stroke:none"
id="path3382"
inkscape:connector-curvature="0" />
</g>
<g
transform="matrix(0.02211373,0,0,0.02211373,20.216433,16.77932)"
id="g3"
style="fill:url(#radialGradient3175);fill-opacity:1;stroke:url(#radialGradient3171);stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none">
<g
transform="translate(20.61545,-27.69425)"
style="fill:url(#radialGradient3016);fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient3018);stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none"
id="g5">
<path
d="m 931.07168,1164.597 248.86992,-331.80265 416.1687,1338.32935 286.6484,267.1042 -520.4224,0 -270.2797,-262.2181 0,-1033.0627 -160.98492,106.6818 -160.98492,-106.6818 0,1033.0627 -270.2797,262.2181 -520.4224,0 286.6484,-267.1042 416.1687,-1338.32935 248.86992,331.80265 z"
id="path7"
style="fill:url(#radialGradient3008);fill-opacity:1;stroke:url(#radialGradient3010);stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none"
inkscape:connector-curvature="0" />
<path
d="m 931.07168,27.69425 224.03682,720.46517 -63.341,76.00913 L 931.07168,486.3269 770.37586,824.16855 707.03486,748.15942 931.07168,27.69425 Z"
id="path9"
style="fill:url(#radialGradient3012);fill-opacity:1;stroke:url(#radialGradient3014);stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none"
inkscape:connector-curvature="0" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 21 KiB

66
doc/altusmetrum-theme.yml Normal file
View File

@@ -0,0 +1,66 @@
extends: default
base:
font_family: Open Sans Light
font-size: 12
heading:
font_color: #78079a
font_size: 17
font:
catalog:
merge: true
Open Sans Light:
normal: OpenSans-Light.ttf
italic: OpenSans-LightItalic.ttf
bold: OpenSans-Semibold.ttf
bold_italic: OpenSans-SemiboldItalic.ttf
DejaVu Sans Mono:
normal: DejaVuSansMono.ttf
italic: DejaVuSansMono-Oblique.ttf
bold: DejaVuSansMono-Bold.ttf
bold_italic: DejaVuSansMono-BoldOblique.ttf
title_page:
align: right
logo:
top: 10%
title:
top: 75%
font_size: $heading_h1_font_size
font_color: #000000
font_style: bold
line_height: 0.9
subtitle:
font_size: $heading_h3_font_size
font_style: bold_italic
line_height: 1
authors:
margin_top: $base_font_size * 1.25
font_size: $base_font_size * 1.5
font_color: #000000
revision:
margin_top: $base_font_size * 1.25
admonition_label:
font_color: #c70909
font_style: bold
font_size: $heading_h2_font_size
page:
background_color: ffffff
layout: portrait
margin: [0.5in, 0.67in, 0.67in, 0.67in]
size: letter
footer:
height: 0.5in
border_color: #78079a
recto:
left:
content: '{page-number}'
right:
content: '© 2024 Bdale Garbee and Keith Packard. Creative Commons ShareAlike 3.0 License'
verso:
left:
content: $footer_recto_right_content
right:
content: '{page-number}'
codespan:
font_family: DejaVu Sans Mono
code:
font_family: DejaVu Sans Mono

75
doc/altusmetrum.txt Normal file
View File

@@ -0,0 +1,75 @@
= The Altus Metrum System: An Owner's Manual for Altus Metrum Rocketry Electronics
Keith Packard <keithp@keithp.com>; Bdale Garbee <bdale@gag.com>; Bob Finch; Anthony Towns
:title-logo-image: image:../themes/background.png[]
:revnumber: v{version}
:revdate: 1 Jan 1970
:icons:
:icontype: svg
:copyright: Bdale Garbee and Keith Packard 2024
:doctype: book
:numbered:
:stylesheet: am.css
:linkcss:
:toc:
:altusmetrum: 1
:radio: 1
:gps: 1
:telemetrum: 1
:telemini: 1
:easymini: 1
:telemega: 1
:easymega: 1
:telegps: 1
:easytimer: 1
:easymotor: 1
:application: AltosUI
:pdf-themesdir: .
:pdf-theme: altusmetrum
:pdf-fontsdir: fonts
include::header.adoc[]
include::dedication.adoc[]
include::intro.adoc[]
include::getting-started.adoc[]
include::usage.adoc[]
include::telemetrum.adoc[]
include::telemini.adoc[]
include::easymini-device.adoc[]
include::telemega.adoc[]
include::easymega.adoc[]
include::easytimer.adoc[]
include::installation.adoc[]
include::using-am-products.adoc[]
include::altosui.adoc[]
include::altosdroid.adoc[]
include::system-operation.adoc[]
include::pyro-examples.adoc[]
include::handling.adoc[]
include::updating-firmware.adoc[]
include::frequency-cal.adoc[]
include::flight-data-recording.adoc[]
include::specs.adoc[]
include::release-notes.adoc[]

344
doc/am-notoc.css Normal file
View File

@@ -0,0 +1,344 @@
/*
CSS stylesheet for XHTML produced by DocBook XSL stylesheets.
*/
@font-face {
font-family: 'Open Sans';
src: url('fonts/OpenSans-Regular.ttf');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Open Sans';
src: url('fonts/OpenSans-Italic.ttf');
font-weight: normal;
font-style: italic;
}
@font-face {
font-family: 'Open Sans';
src: url('fonts/OpenSans-Semibold.ttf');
font-weight: bold;
font-style: normal;
}
@font-face {
font-family: 'Open Sans';
src: url('fonts/OpenSans-SemiboldItalic.ttf');
font-weight: bold;
font-style: italic;
}
@font-face {
font-family: 'DejaVu Sans Mono';
src: url('fonts/DejaVuSansMono.ttf');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'DejaVu Sans Mono';
src: url('fonts/DejaVuSansMono-Oblique.ttf');
font-weight: normal;
font-style: oblique;
}
@font-face {
font-family: 'DejaVu Sans Mono';
src: url('fonts/DejaVuSansMono-Bold.ttf');
font-weight: bold;
font-style: normal;
}
@font-face {
font-family: 'DejaVu Sans Mono';
src: url('fonts/DejaVuSansMono-BoldOblique.ttf');
font-weight: bold;
font-style: oblique;
}
body {
font-family: "Open Sans",sans-serif;
font-size: 12pt;
margin: 2em 5em 2em 5em;
}
code, pre {
font-family: "DejaVu Sans Mono", monospace;
}
span.strong {
font-weight: bold;
}
body blockquote {
margin-top: .75em;
line-height: 1.5;
margin-bottom: .75em;
}
a:link {
color: #78079a;
}
a:visited {
color: #78079a;
}
h1, h2, h3, h4, h5, h6
{
color: #78079a;
font-family: "Open Sans",sans-serif;
}
td.icon {
width: 4em;
height: 3em;
}
td.icon img {
height: 100%;
width: 100%
}
div.toc {
display:none;
}
div.details {
padding-top: 1em;
padding-left: 3em;
}
span.author {
font-weight: bold;
color: #78079a;
}
span.email {
font-size: 10pt;
}
span#revnumber {
font-size: 8pt;
}
span#revdate {
font-size: 8pt;
}
span#revremark {
font-size: 8pt;
}
div#footer {
border-top: 2px solid #808080;
}
body h1 {
margin: .0em 0 0 -4%;
line-height: 1.3;
border-bottom: 2px solid #808080;
}
body h2 {
margin: 0.5em 0 0 -4%;
line-height: 1.3;
border-bottom: 2px solid #808080;
}
body h3 {
margin: .8em 0 0 -3%;
line-height: 1.3;
}
body h4 {
margin: .8em 0 0 -3%;
line-height: 1.3;
}
body h5 {
margin: .8em 0 0 -2%;
line-height: 1.3;
}
body h6 {
margin: .8em 0 0 -1%;
line-height: 1.3;
}
body hr {
border: none; /* Broken on IE6 */
}
body td {
line-height: 1.2
}
body th {
line-height: 1.2;
}
ol {
line-height: 1.2;
}
ul, body dir, body menu {
line-height: 1.2;
}
body h1, body h2, body h3, body h4, body h5, body h6 {
margin-left: 0
}
body pre {
margin: 0.5em 10% 0.5em 1em;
line-height: 1.0;
}
tt.literal, code.literal {
}
.programlisting, .screen {
border: 1px solid #808080;
background: #f4f4f4;
margin: 0.5em 10% 0.5em 0;
padding: 0.5em 1em;
}
div.sidebar {
background: #ffffee;
margin: 1.0em 10% 0.5em 0;
padding: 0.5em 1em;
border: 1px solid #808080;
}
div.sidebar * { padding: 0; }
div.sidebar div { margin: 0; }
div.sidebar p.title {
margin-top: 0.5em;
margin-bottom: 0.2em;
}
div.bibliomixed {
margin: 0.5em 5% 0.5em 1em;
}
div.glossary dt {
font-weight: bold;
}
div.glossary dd p {
margin-top: 0.2em;
}
dl {
margin: .8em 0;
line-height: 1.2;
}
dt {
margin-top: 0.5em;
}
dt span.term {
font-weight: bold;
}
div.variablelist dd p {
margin-top: 0;
}
div.itemizedlist li, div.orderedlist li {
margin-left: -0.8em;
margin-top: 0.5em;
}
ul, ol {
list-style-position: outside;
}
div.sidebar ul, div.sidebar ol {
margin-left: 2.8em;
}
div.itemizedlist p.title,
div.orderedlist p.title,
div.variablelist p.title
{
margin-bottom: -0.8em;
}
div.revhistory {
border-style: none;
}
div.revhistory table, div.revhistory th, div.revhistory td {
border-collapse: collapse;
border: 1px solid #808080;
padding: 0.25em;
}
div.revhistory th {
color: black;
}
/* Keep TOC and index lines close together. */
div.toc dl, div.toc dt
{
line-height: normal;
margin-top: 0;
margin-bottom: 0;
}
div.admonitionblock {
margin-top: 2em;
margin-bottom: 2em;
margin-left: 2em;
margin-right: 2em;
}
div.admonitionblock div {
margin-left: 0em;
margin-right: 1em;
}
div.admonitionblock div.title {
color: #c70909;
font-style: bold;
font-size: 24pt;
}
div#content table.tableblock {
border-style: solid;
border-width: 1px;
border-collapse: collapse;
}
div#content table.tableblock td,th {
border-right-style: solid;
border-right-width: 1px;
}
div#content table.tableblock tbody p {
margin-top: 0.25em;
margin-bottom: 0.25em;
margin-left: 0.25em;
margin-right: 0.25em;
}
div#content table.tableblock tbody tr:nth-child(odd) {
background: #cccccc;
}
div.imageblock{
margin-top: 1em;
margin-bottom: 1em;
}
div.imageblock img {
margin-bottom: 0.5em;
}
@media print {
div.navheader, div.navfooter { display: none; }
}

391
doc/am.css Normal file
View File

@@ -0,0 +1,391 @@
/*
CSS stylesheet for XHTML produced by DocBook XSL stylesheets.
*/
@font-face {
font-family: 'Open Sans';
src: url('fonts/OpenSans-Regular.ttf');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Open Sans';
src: url('fonts/OpenSans-Italic.ttf');
font-weight: normal;
font-style: italic;
}
@font-face {
font-family: 'Open Sans';
src: url('fonts/OpenSans-Semibold.ttf');
font-weight: bold;
font-style: normal;
}
@font-face {
font-family: 'Open Sans';
src: url('fonts/OpenSans-SemiboldItalic.ttf');
font-weight: bold;
font-style: italic;
}
@font-face {
font-family: 'DejaVu Sans Mono';
src: url('fonts/DejaVuSansMono.ttf');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'DejaVu Sans Mono';
src: url('fonts/DejaVuSansMono-Oblique.ttf');
font-weight: normal;
font-style: oblique;
}
@font-face {
font-family: 'DejaVu Sans Mono';
src: url('fonts/DejaVuSansMono-Bold.ttf');
font-weight: bold;
font-style: normal;
}
@font-face {
font-family: 'DejaVu Sans Mono';
src: url('fonts/DejaVuSansMono-BoldOblique.ttf');
font-weight: bold;
font-style: oblique;
}
body {
font-family: "Open Sans",sans-serif;
font-size: 12pt;
margin: 0;
}
code, pre {
font-family: "DejaVu Sans Mono", monospace;
}
span.strong {
font-weight: bold;
}
body blockquote {
margin-top: .75em;
line-height: 1.5;
margin-bottom: .75em;
}
a:link {
color: #78079a;
}
a:visited {
color: #78079a;
}
h1, h2, h3, h4, h5, h6
{
color: #78079a;
font-family: "Open Sans",sans-serif;
}
div#content, div#header, div#footer {
margin-left: 440px;
margin-right: 2em;
margin-top: 2em;
margin-bottom: 2em;
}
div.toc {
position: fixed;
left: 0px;
top: 92px;
bottom: 0;
width: 390px;
margin-right: 0;
margin-left: 0;
padding-left: 10px;
padding-right: 10px;
float: left;
border-right: 2px solid #808080;
border-collapse: collapse;
overflow: auto;
}
div#logo img {
position: fixed;
left: 0px;
top: 0px;
width: 410px;
height: 92px;
margin-top: 0px;
margin-bottom: 0px;
border-right: 2px solid #808080;
border-bottom: 2px solid #808080;
}
td.icon {
width: 4em;
height: 3em;
}
td.icon img {
height: 100%;
width: 100%
}
div.toc a:link {
text-decoration: none;
}
div.toc a:visited {
text-decoration: none;
}
div.toc a:hover {
text-decoration: underline;
}
div.toc a:active {
text-decoration: underline;
}
div.details {
padding-top: 1em;
padding-left: 3em;
}
span.author {
font-weight: bold;
color: #78079a;
}
span.email {
font-size: 10pt;
}
span#revnumber {
font-size: 8pt;
}
span#revdate {
font-size: 8pt;
}
span#revremark {
font-size: 8pt;
}
div#footer {
border-top: 2px solid #808080;
}
body h1 {
margin: .0em 0 0 -4%;
line-height: 1.3;
border-bottom: 2px solid #808080;
}
body h2 {
margin: 0.5em 0 0 -4%;
line-height: 1.3;
border-bottom: 2px solid #808080;
}
body h3 {
margin: .8em 0 0 -3%;
line-height: 1.3;
}
body h4 {
margin: .8em 0 0 -3%;
line-height: 1.3;
}
body h5 {
margin: .8em 0 0 -2%;
line-height: 1.3;
}
body h6 {
margin: .8em 0 0 -1%;
line-height: 1.3;
}
body hr {
border: none; /* Broken on IE6 */
}
body td {
line-height: 1.2
}
body th {
line-height: 1.2;
}
ol {
line-height: 1.2;
}
ul, body dir, body menu {
line-height: 1.2;
}
body h1, body h2, body h3, body h4, body h5, body h6 {
margin-left: 0
}
body pre {
margin: 0.5em 10% 0.5em 1em;
line-height: 1.0;
}
tt.literal, code.literal {
}
.programlisting, .screen {
border: 1px solid #808080;
background: #f4f4f4;
margin: 0.5em 10% 0.5em 0;
padding: 0.5em 1em;
}
div.sidebar {
background: #ffffee;
margin: 1.0em 10% 0.5em 0;
padding: 0.5em 1em;
border: 1px solid #808080;
}
div.sidebar * { padding: 0; }
div.sidebar div { margin: 0; }
div.sidebar p.title {
margin-top: 0.5em;
margin-bottom: 0.2em;
}
div.bibliomixed {
margin: 0.5em 5% 0.5em 1em;
}
div.glossary dt {
font-weight: bold;
}
div.glossary dd p {
margin-top: 0.2em;
}
dl {
margin: .8em 0;
line-height: 1.2;
}
dt {
margin-top: 0.5em;
}
dt span.term {
font-weight: bold;
}
div.variablelist dd p {
margin-top: 0;
}
div.itemizedlist li, div.orderedlist li {
margin-left: -0.8em;
margin-top: 0.5em;
}
ul, ol {
list-style-position: outside;
}
div.sidebar ul, div.sidebar ol {
margin-left: 2.8em;
}
div.itemizedlist p.title,
div.orderedlist p.title,
div.variablelist p.title
{
margin-bottom: -0.8em;
}
div.revhistory {
border-style: none;
}
div.revhistory table, div.revhistory th, div.revhistory td {
border-collapse: collapse;
border: 1px solid #808080;
padding: 0.25em;
}
div.revhistory th {
color: black;
}
/* Keep TOC and index lines close together. */
div.toc dl, div.toc dt
{
line-height: normal;
margin-top: 0;
margin-bottom: 0;
}
div.admonitionblock {
margin-top: 2em;
margin-bottom: 2em;
margin-left: 2em;
margin-right: 2em;
}
div.admonitionblock div {
margin-left: 0em;
margin-right: 1em;
}
div.admonitionblock div.title {
color: #c70909;
font-style: bold;
font-size: 24pt;
}
div#content table.tableblock {
border-style: solid;
border-width: 1px;
border-collapse: collapse;
}
div#content table.tableblock td,th {
border-right-style: solid;
border-right-width: 1px;
}
div#content table.tableblock tbody p {
margin-top: 0.25em;
margin-bottom: 0.25em;
margin-left: 0.25em;
margin-right: 0.25em;
}
div#content table.tableblock tbody tr:nth-child(odd) {
background: #cccccc;
}
div.imageblock{
margin-top: 1em;
margin-bottom: 1em;
}
div.imageblock img {
margin-bottom: 0.5em;
}
@media print {
div.navheader, div.navfooter { display: none; }
}

116
doc/aprs-operation.inc Normal file
View File

@@ -0,0 +1,116 @@
=== APRS
{aprsdevices} can send APRS if desired, and the
interval between APRS packets can be configured. As
each APRS packet takes a full second to transmit, we
recommend an interval of at least 5 seconds to avoid
consuming too much battery power or radio channel
bandwidth. You can configure the time within each
minute that APRS transmits by changing the APRS offset
value. When the GPS signal is locked and knows the
current time, the APRS offset selects the time with
each minute for the first APRS transmission;
subsequent transmissions occur each APRS interval
seconds thereafter. You can configure the APRS
interval and APRS offset using {application}; that
process is described in <<{configure_section}>>.
AltOS supports both compressed and uncompressed APRS
position report data formats. The compressed format
provides for higher position precision and shorter
packets than the uncompressed APRS format. We've found
some older APRS receivers that do not handle the
compressed format. The Kenwood TH-72A requires the use
of uncompressed format to display altitude information
correctly. The Yaesu FT1D requires the use of
compressed format to display altitude information.
APRS packets include an SSID (Secondary Station Identifier)
field that allows one operator to have multiple
transmitters. AltOS allows you to set this to a single digit
from 0 to 9, allowing you to fly multiple transmitters at the
same time while keeping the identify of each one separate in
the receiver. By default, the SSID is set to the last digit of
the device serial number.
The APRS packet format includes a comment field that
can have arbitrary text in it. AltOS uses this to send
status information as shown in the following table.
.Altus Metrum APRS Comments
[options="header",cols="1,1,3"]
|====
|Field |Example |Description
|1
|L
|GPS Status U for unlocked, L for locked
|2
|6
|Number of Satellites in View
|3
|B4.0
|Altimeter Battery Voltage
ifdef::altusmetrum[]
|4
|A3.7
|Apogee Igniter Voltage
|5
|M3.7
|Main Igniter Voltage
|6
|1286
|Device Serial Number
endif::altusmetrum[]
ifdef::telegps[]
|4
|1286
|Device Serial Number
endif::telegps[]
|====
ifdef::altusmetrum[]
Here's an example of an APRS comment showing GPS lock with 6
satellites in view, a primary battery at 4.0V, and
apogee and main igniters both at 3.7V from device 1286.
....
L6 B4.0 A3.7 M3.7 1286
....
endif::altusmetrum[]
ifdef::telegps[]
Here's an example of an APRS comment showing GPS lock with 6
satellites in view and a primary battery at 4.0V from device 1876.
....
L6 B4.0 1876
....
endif::telegps[]
Make sure your primary battery is above 3.8V
ifdef::altusmetrum[]
any connected igniters are above 3.5V
endif::altusmetrum[]
and GPS is locked with at least 5 or 6 satellites in
view before flying. If GPS is switching between L and
U regularly, then it doesn't have a good lock and you
should wait until it becomes stable.
If the GPS receiver loses lock, the APRS data
transmitted will contain the last position for which
GPS lock was available. You can tell that this has
happened by noticing that the GPS status character
switches from 'L' to 'U'. Before GPS has locked, APRS
will transmit zero for latitude, longitude and
altitude.

BIN
doc/ascent.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

250
doc/companion.txt Normal file
View File

@@ -0,0 +1,250 @@
= AltOS Companion Port
Keith Packard <keithp@keithp.com>; Bdale Garbee <bdale@gag.com>
:doctype: article
:copyright: Bdale Garbee and Keith Packard 2018
:stylesheet: am.css
:linkcss:
:pdf-themesdir: .
:pdf-theme: altusmetrum
:pdf-fontsdir: fonts
:toc:
include::header.adoc[]
== Companion Port
Many Altus Metrum products come with an eight pin Micro MaTch
connector, called the Companion Port. This is often used to
program devices using a programming cable. However, it can
also be used to connect TeleMetrum to external companion
boards (hence the name).
The Companion Port provides two different functions:
* Power. Both battery-level and 3.3V regulated power are
available. Note that the amount of regulated power is not
huge; TeleMetrum contains a 150mA regulator and uses, at
peak, about 120mA or so. For applications needing more than
a few dozen mA, placing a separate regulator on them and
using the battery for power is probably a good idea.
* SPI. The flight computer operates as a SPI master, using
a protocol defined in this document. Companion boards
provide a matching SPI slave implementation which supplies
telemetry information for the radio downlink during flight
== Companion SPI Protocol
The flight computer implements a SPI master communications
channel over the companion port, and uses this to get
information about a connected companion board and then to get
telemetry data for transmission during flight.
At startup time, the flight computer sends a setup request
packet, and the companion board returns a board identifier,
the desired telemetry update period and the number of data
channels provided. The flight computer doesn't interpret the
telemetry data at all, simply packing it up and sending it
over the link. Telemetry packets are 32 bytes long, and
companion packets use 8 bytes as a header leaving room for a
maximum of 12 16-bit data values.
Because of the limits of the AVR processors used in the first
two companion boards, the SPI data rate is set to 187.5kbaud.
== SPI Message Formats
This section first defines the command message format sent from
the flight computer to the companion board, and then the various
reply message formats for each type of command message.
.Companion Command Message
[options="border",cols="1,3,3,9"]
|====
|Offset
|Data Type
|Name
|Description
|0
|uint8_t
|command
|Command identifier
|1
|uint8_t
|flight_state
|Current flight computer state
|2
|uint16_t
|tick
|Flight computer clock (100 ticks/second)
|4
|uint16_t
|serial
|Flight computer serial number
|6
|uint16_t
|flight
|Flight number
|8
|
|
|
|====
.Companion Command Identifiers
[options="border",cols="1,3,9"]
|====
|Value
|Name
|Description
|1
|SETUP
|Supply the flight computer with companion
information
|2
|FETCH
|Return telemetry information
|3
|NOTIFY
|Tell companion board when flight state changes
|====
The flight computer will send a SETUP message shortly after
power-up and will then send FETCH messages no more often than
the rate specified in the SETUP reply. NOTIFY messages will be
sent whenever the flight state changes.
'flight_state' records the current state of the flight,
whether on the pad, under power, coasting to apogee or
descending on the drogue or main chute.
'tick' provides the current flight computer clock, which
be used to synchronize data recorded on the flight computer
with that recorded on the companion board in post-flight analysis.
'serial' is the product serial number of the flight computer,
'flight' is the flight sequence number. Together, these two
uniquely identify the flight and can be recorded with any
companion board data logging to associate the companion data
with the proper flight.
NOTIFY commands require no reply at all, they are used solely
to inform the companion board when the state of the flight, as
computed by the flight computer, changes. Companion boards can
use this to change data collection parameters, disabling data
logging until the flight starts and terminating it when the
flight ends.
=== SETUP reply message
.SETUP reply contents
[options="border",cols="1,3,3,9"]
|====
|Offset
|Data Type
|Name
|Description
|0
|uint16_t
|board_id
|Board identifier
|2
|uint16_t
|board_id_inverse
|~board_id—used to tell if a board is present
|4
|uint8_t
|update_period
|Minimum time (in 100Hz ticks) between FETCH commands
|5
|uint8_t
|channels
|Number of data channels to retrieve in FETCH command
|6
|
|
|
|====
The SETUP reply contains enough information to uniquely
identify the companion board to the end user as well as for
the flight computer to know how many data values to expect in
reply to a FETCH command, and how often to fetch that data.
To detect the presence of a companion board, the flight
computer checks to make sure that board_id_inverse is the
bit-wise inverse of board_id. Current companion boards use
USB product ID as the board_id, but the flight computer does
not interpret this data and so it can be any value.
=== FETCH reply message
.FETCH reply contents
[options="border",cols="1,3,3,9"]
|====
|Offset
|Data Type
|Name
|Description
|0
|uint16_t
|data0
|0th data item
|2
|uint16_t
|data1
|1st data item
|...
|
|
|
|====
The FETCH reply contains arbitrary data to be reported
over the flight computer telemetry link. The number of
16-bit data items must match the 'channels' value
provided in the SETUP reply message.
== History and Motivation
To allow cross-programming, the original TeleMetrum and
TeleDongle designs needed to include some kind of
connector. With that in place, adding the ability to connect
external cards to TeleMetrum was fairly simple. We set the
software piece of this puzzle aside until we had a companion
board to use.
The first companion board was TeleScience. Designed to collect
temperature data from the nose and fin of the airframe, the main
requirement for the companion port was that it be able to report
telemetry data during flight as a back-up in case the
TeleScience on-board data was lost.
The second companion board, TelePyro, provides 8 additional
channels for deployment, staging or other activities. To avoid
re-programming the TeleMetrum to use TelePyro, we decided to
provide enough information over the companion link for it to
independently control those channels.
Providing a standard, constant interface between the flight
computer and companion boards allows for the base flight
computer firmware to include support for companion boards.

287
doc/config-device.inc Normal file
View File

@@ -0,0 +1,287 @@
ifdef::altusmetrum[]
==== Main Deploy Altitude
This sets the altitude (above the recorded pad
altitude) at which the 'main' igniter will fire. The
drop-down menu shows some common values, but you can
edit the text directly and choose whatever you
like. If the apogee charge fires below this altitude,
then the main charge will fire two seconds after the
apogee charge fires.
==== Apogee Delay
When flying redundant electronics, it's often
important to ensure that multiple apogee charges don't
fire at precisely the same time, as that can over
pressurize the apogee deployment bay and cause a
structural failure of the air-frame. The Apogee Delay
parameter tells the flight computer to fire the apogee
charge a certain number of seconds after apogee has
been detected.
==== Apogee Lockout
Apogee lockout is the number of seconds after launch
where the flight computer will not fire the apogee
charge, even if the rocket appears to be at
apogee. This is often called 'Mach Delay', as it is
intended to prevent a flight computer from
unintentionally firing apogee charges due to the
pressure spike that occurrs across a mach
transition. Altus Metrum flight computers include a
Kalman filter which is not fooled by this sharp
pressure increase, and so this setting should be left
at the default value of zero to disable it.
[WARNING]
Firmware versions older than 1.8.6 have a
bug which resets the time since launch to zero each
time a motor starts burning. Update firmware to get
the correct behavior.
endif::altusmetrum[]
ifdef::radio[]
==== Frequency
This configures which of the frequencies to use for
both telemetry and packet command mode. Note that if
you set this value via packet command mode, the
TeleDongle frequency will also be automatically
reconfigured to match so that communication will
continue afterwards.
==== RF Calibration
The radios in every Altus Metrum device are calibrated
at the factory to ensure that they transmit and
receive on the specified frequency. If you need to
you can adjust the calibration by changing this value.
Do not do this without understanding what the value
means, read the appendix on calibration and/or the
source code for more information. To change a
TeleDongle's calibration, you must reprogram the unit
completely.
==== Telemetry/RDF/APRS Enable
Enables the radio for transmission during
flight. When disabled, the radio will not
transmit anything during flight at all.
==== Limit transmit to 10mW
Reduces transmit power to no more than 10mW. This is
useful when operating under some UK radio regulations.
==== Telemetry baud rate
This sets the modulation bit rate for data
transmission for both telemetry and packet
link mode. Lower bit rates will increase range
while reducing the amount of data that can be
sent and increasing battery consumption. All
telemetry is done using a rate 1/2 constraint
4 convolution code, so the actual data
transmission rate is 1/2 of the modulation bit
rate specified here.
==== APRS Interval
How often to transmit GPS information via APRS
(in seconds). When set to zero, APRS
transmission is disabled.
ifdef::altusmetrum[]
This option is
available on TeleMetrum v2 or newer and TeleMega
boards. TeleMetrum v1 boards cannot transmit
APRS packets.
endif::altusmetrum[]
Note that a single APRS packet
takes nearly a full second to transmit, so
enabling this option will prevent sending any
other telemetry during that time.
==== APRS SSID
Which SSID to report in APRS packets. By
default, this is set to the last digit of the
serial number, but can be configured to any
value from 0 to 9.
==== APRS Format
Whether to send APRS data in Compressed or
Uncompressed format. Compressed format is
smaller and more precise. Uncompressed
format is older, but may work better with your
device. The Kenwood TH-D72 only displays
altitude information with Uncompressed
format, while the Yaesu FT1D only displays
altitude with Compressed format. Test before
you fly to see which to use.
==== APRS Offset
The delay from the top of the minute before sending
the first APRS packet of the minute. Coordinating
values for this parameter between multiple devices can
allow a single receiver to reliably receive APRS
packets from multiple devices. Note that this offset only
takes effect while the GPS signal is locked so that the
transmitting device knows the current time.
==== Callsign
This sets the call sign included in each
telemetry packet. Set this as needed to
conform to your local radio regulations.
endif::radio[]
ifdef::altusmetrum[]
==== Maximum Flight Log Size
This sets the space (in kilobytes) allocated
for each flight log. The available space will
be divided into chunks of this size. A smaller
value will allow more flights to be stored, a
larger value will record data from longer
flights.
==== Ignitor Firing Mode
This configuration parameter allows the two standard ignitor
channels (Apogee and Main) to be used in different
configurations.
Dual Deploy::
This is the usual mode of operation; the
'apogee' channel is fired at apogee and the
'main' channel at the height above ground
specified by the 'Main Deploy Altitude' during
descent.
Redundant Apogee::
This fires both channels at apogee, the
'apogee' channel first followed after a two
second delay by the 'main' channel.
Redundant Main::
This fires both channels at the height above
ground specified by the Main Deploy Altitude
setting during descent. The 'apogee' channel
is fired first, followed after a two second
delay by the 'main' channel.
Separation & Apogee::
This fires the 'main' channel when the first motor
burns out and fires the 'apogee' charge at apogee.
ifdef::telemetrum,telemega,easymega,easytimer[]
==== Pad Orientation
Because they include accelerometers,
TeleMetrum, TeleMega and EasyMega are
sensitive to the orientation of the board. By
default, they expect the antenna end to point
forward. This parameter allows that default to
be changed, permitting the board to be mounted
with the antenna pointing aft instead.
Antenna Up::
In this mode, the antenna (or beeper, for devices
without an antenna) of the flight computer must point
forward, in line with the expected flight path.
Antenna Down::
In this mode, the antenna (or beeper, for devices
without an antenna) end of the flight computer must
point aft, in line with the expected flight path.
endif::telemetrum,telemega,easymega,easytimer[]
==== Beeper Frequency
The beeper on all Altus Metrum flight
computers works best at 4000Hz, however if you
have more than one flight computer in a single
airframe, having all of them sound at the same
frequency can be confusing. This parameter
lets you adjust the base beeper frequency
value.
endif::altusmetrum[]
ifdef::telegps[]
==== Logging Trigger Motion
This sets the amount of motion that TeleGPS
needs to see before logging the new
position. Motions smaller than this are
skipped, which saves storage space.
==== Position Reporting Interval
The interval between TeleGPS position reports,
both over the air and in the log. Increase
this to reduce the frequency of radio
transmissions and the length of time available
in the log.
endif::telegps[]
ifdef::telemega,easymega,easytimer,telemetrum[]
==== Calibrate Accelerometer
This opens a separate window to recalibrate the
accelerometers. Follow the instructions, orienting the
flight computer with the antenna end, or end opposite
the screw terminals, in the case of EasyMega, first up
and then down.
When the calibration is complete, return to the
Configure Altimeter window and save the new
calibration values.
endif::telemega,easymega,easytimer,telemetrum[]
ifdef::telemega,easymega,easytimer[]
==== Configure Pyro Channels
.Additional Pyro Channel Configuration
image::configure-pyro.png[width=400]
This opens a separate window to configure the
additional pyro channels available on TeleMega,
EasyMega and EasyTimer. One column is presented for
each channel. Each row represents a single
parameter, if enabled the parameter must meet
the specified test for the pyro channel to be
fired.
Select conditions and set the related value;
the pyro channel will be activated when *all*
of the conditions are met. Each pyro channel
has a separate set of configuration values, so
you can use different values for the same
condition with different channels.
At the bottom of the window, the 'Pyro Firing
Time' configuration sets the length of time
(in seconds) which each of these pyro channels
will fire for.
Once you have selected the appropriate
configuration for all of the necessary pyro
channels, you can save the pyro configuration
along with the rest of the flight computer
configuration by pressing the 'Save' button in
the main Configure Flight Computer window.
include::pyro-channels.adoc[]
endif::telemega,easymega,easytimer[]

113
doc/config-ui.inc Normal file
View File

@@ -0,0 +1,113 @@
ifdef::radio[]
==== Voice Settings
{application} provides voice announcements during
flight so that you can keep your eyes on the
sky and still get information about the
current flight status. However, sometimes you
don't want to hear them.
Enable::
Turns all voice announcements on and off
Test Voice::
Plays a short message allowing you to verify
that the audio system is working and the volume settings
are reasonable
endif::radio[]
==== Log Directory
{application} logs all telemetry data and saves all
flash data to this directory. This
directory is also used as the staring point
when selecting data files for display or
export.
Click on the directory name to bring up a
directory choosing dialog, select a new
directory and click 'Select Directory' to
change where {application} reads and writes data
files.
ifdef::radio[]
==== Callsign
This value is transmitted in each command
packet sent from TeleDongle and received from
an altimeter. It is not used in telemetry
mode, as the callsign configured in the
altimeter board is included in all telemetry
packets. Configure this with the {application}
operators call sign as needed to comply with
your local radio regulations.
Note that to successfully command a flight
computer over the radio (to configure the
altimeter, monitor idle, or fire pyro
charges), the callsign configured here must
exactly match the callsign configured in the
flight computer. This matching is case
sensitive.
endif::radio[]
==== Imperial Units
This switches between metric units (meters)
and imperial units (feet and miles). This
affects the display of values use during
flight monitoring, configuration, data
graphing and all of the voice
announcements. It does not change the units
used when exporting to CSV files, those are
always produced in metric units.
==== Serial Debug
This causes all communication with a connected
device to be dumped to the console from which
{application} was started. If you've started it from
an icon or menu entry, the output will simply
be discarded. This mode can be useful to debug
various serial communication issues.
==== Font size
Selects the set of fonts used in the flight
monitor window. Choose between the small,
medium and large sets.
==== Look & feel
Switches between the available Java user
interface appearances. The default selection
is supposed to match the native window system
appearance for the target platform.
==== Menu position
Selects the initial position for the main
{application} window that includes all of the
command buttons.
ifdef::gps[]
==== Map Cache Size
Sets the number of map 'tiles' kept in memory
while the application is running. More tiles
consume more memory, but will make panning
around the map faster.
endif::gps[]
ifdef::radio[]
==== Manage Frequencies
This brings up a dialog where you can
configure the set of frequencies shown in the
various frequency menus. You can add as many
as you like, or even reconfigure the default
set. Changing this list does not affect the
frequency settings of any devices, it only
changes the set of frequencies shown in the
menus.
endif::radio[]

BIN
doc/configure-altimeter.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

BIN
doc/configure-altosui.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
doc/configure-pyro.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

26
doc/dedication.inc Normal file
View File

@@ -0,0 +1,26 @@
[dedication]
== Acknowledgments
Thanks to Bob Finch, W9YA, NAR 12965, TRA 12350 for writing “The
Mere-Mortals Quick Start/Usage Guide to the Altus Metrum Starter
Kit” which formed the basis of the original Getting Started chapter
in this manual. Bob was one of our first customers for a production
TeleMetrum, and his continued enthusiasm and contributions
are immensely gratifying and highly appreciated!
And thanks to Anthony (AJ) Towns for major contributions including
the AltosUI graphing and site map code and associated documentation.
Free software means that our customers and friends can become our
collaborators, and we certainly appreciate this level of
contribution!
Have fun using these products, and we hope to meet all of you
out on the rocket flight line somewhere.
[verse]
Bdale Garbee, KB0G
NAR #87103, TRA #12201
[verse]
Keith Packard, K7WQ
NAR #88757, TRA #12200

BIN
doc/descent.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

BIN
doc/device-selection.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

11
doc/easymega-outline.txt Normal file
View File

@@ -0,0 +1,11 @@
:notitle:
:doctype: article
== EasyMega Outline and Hole Pattern
This image, when printed, provides a precise template for the
mounting holes in EasyMega. EasyMega has overall dimensions of
1.250 x 2.250 inches, and the mounting holes are 0.125 inches from
each board edge. That means the mounting holes are in a rectangle
measuring 1.000 x 2.00 inches, sized for use with 4-40 or M3 screws.
image::easymega.svg[align="center"]

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

BIN
doc/easymega-v1.0-top.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 554 KiB

126
doc/easymega.inc Normal file
View File

@@ -0,0 +1,126 @@
== EasyMega
.EasyMega Board
image::easymega-v1.0-top.jpg[width=400]
EasyMega is a 1¼ inch by 2¼ inch circuit board. It was
designed to easily fit in a 38mm coupler. Like TeleMetrum,
EasyMega has an accelerometer and so it must be mounted so that
the board is aligned with the flight axis. It can be mounted
either antenna up or down.
=== EasyMega Screw Terminals
EasyMega has two sets of nine screw terminals on the end of
the board opposite the telemetry antenna. They are as follows:
.EasyMega Screw Terminals
[options="header",grid="all",cols="2,3,10"]
|====
|Terminal #|Terminal Name|Description
|Top 1
|Switch Input
|Switch connection to positive battery terminal
|Top 2
|Switch Output
|Switch connection to flight computer
|Top 3
|GND
|Ground connection for use with external active switch
|Top 4
|Main -
|Main pyro channel connection to pyro circuit
|Top 5
|Main +++
|Main pyro channel common connection to battery +++
|Top 6
|Apogee -
|Apogee pyro channel connection to pyro circuit
|Top 7
|Apogee +++
|Apogee pyro channel common connection to battery +++
|Top 8
|D -
|D pyro channel connection to pyro circuit
|Top 9
|D +++
|D pyro channel common connection to battery +++
|Bottom 1
|GND
|Ground connection for negative pyro battery terminal
|Bottom 2
|Pyro
|Positive pyro battery terminal
|Bottom 3
|Lipo
|Power switch output. Use to connect main battery to pyro battery input
|Bottom 4
|A -
|A pyro channel connection to pyro circuit
|Bottom 5
|A +++
|A pyro channel common connection to battery +++
|Bottom 6
|B -
|B pyro channel connection to pyro circuit
|Bottom 7
|B +++
|B pyro channel common connection to battery +++
|Bottom 8
|C -
|C pyro channel connection to pyro circuit
|Bottom 9
|C +++
|C pyro channel common connection to battery +++
|====
=== Using a Separate Pyro Battery with EasyMega
EasyMega provides explicit support for an external pyro
battery. All that is required is to remove the jumper
between the lipo terminal (Bottom 3) and the pyro terminal
(Bottom 2). Then hook the negative pyro battery terminal to
ground (Bottom 1) and the switched positive pyro battery to
the pyro battery input (Bottom 2). Note that you must include
a switch between the pyro battery and the board for safety,
as the on-board power switch circuit only supports the primary
battery! You can then use the existing pyro screw
terminals to hook up all of the pyro charges.
=== Using Only One Battery With EasyMega
Because EasyMega has built-in support for a separate pyro
battery, if you want to fly with just one battery running
both the computer and firing the charges, you need to
connect the flight computer battery to the pyro
circuit. EasyMega has two screw terminals for this—hook a
wire from the Lipo terminal (Bottom 3) to the Pyro terminal
(Bottom 2).
=== Using an Active Switch with EasyMega
As explained above, an external active switch requires three
connections, one to the positive battery terminal, one to
the flight computer positive input and one to ground.
The positive battery terminal is available on Top terminal
1, the positive flight computer input is on Top terminal
2. Ground is on Top terminal 3.

33
doc/easymega.svg Normal file
View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
width="2.5in"
height="1.5in"
viewBox="0 0 250 150"
preserveaspectratio="none"
id="svg2"
version="1.1">
<g transform="translate(12.5,12.5)"
style="fill:none;stroke:#000000;stroke-width:1;stroke-linejoin:miter;font-size:24">
<!-- outline -->
<rect width="225" height="125" x="0" y="0"/>
<!-- holes -->
<path d="M12.5,12.5 m-6.25,0 a6.25,6.25,0,1,0,12.5,0 a6.25,6.25,0,1,0,-12.5,0 l12.5,0 m-6.25,-6.25 l0,12.5"/>
<path d="M212.5,12.5 m-6.25,0 a6.25,6.25,0,1,0,12.5,0 a6.25,6.25,0,1,0,-12.5,0 l12.5,0 m-6.25,-6.25 l0,12.5"/>
<path d="M12.5,112.5 m-6.25,0 a6.25,6.25,0,1,0,12.5,0 a6.25,6.25,0,1,0,-12.5,0 l12.5,0 m-6.25,-6.25 l0,12.5"/>
<path d="M212.5,112.5 m-6.25,0 a6.25,6.25,0,1,0,12.5,0 a6.25,6.25,0,1,0,-12.5,0 l12.5,0 m-6.25,-6.25 l0,12.5"/>
<!-- arrow -->
<path d="M50,62.5 l125,0"/>
<path style="fill:#000000;stroke:none" d="M175,57.5 l10,5 l-10,5 z"/>
<!-- label -->
<text x="112.5" y="57.5" style="fill:#000000;stroke:none" text-anchor="middle">EasyMega</text>
<g transform="rotate(90)">
<text x="62.5" y="-190" style="fill:#000000;stroke:none" text-anchor="middle">UP</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

118
doc/easymini-device.inc Normal file
View File

@@ -0,0 +1,118 @@
== EasyMini
.EasyMini Board
image::easymini-top.jpg[width=400]
EasyMini is built on a 0.8 inch by 1½ inch circuit board. It's
designed to fit in a 24mm coupler tube.
You usually don't need to configure EasyMini at all; it's set
up to do dual-deployment with an event at apogee to separate
the airframe and deploy a drogue and another event at 250m
(820ft) to deploy the main. Install EasyMini in your airframe,
hook up a battery, igniters and a power switch and you're
ready to fly.
=== EasyMini Screw Terminals
EasyMini has two sets of four screw terminals near one end of the
board. Using the picture
above, the top four have connections for the main pyro
circuit and an external battery and the bottom four have
connections for the apogee pyro circuit and the power
switch. Counting from the left, the connections are as follows:
.EasyMini Screw Terminals
[options="header",grid="all",cols="2,3,10"]
|====
|Terminal #|Terminal Name|Description
|Top 1
|Main -
|Main pyro channel connection to pyro circuit
|Top 2
|Main +++
|Main pyro channel common connection to battery +++
|Top 3
|Battery +++
|Positive external battery terminal
|Top 4
|Battery -
|Negative external battery terminal
|Bottom 1
|Apogee -
|Apogee pyro channel connection to pyro circuit
|Bottom 2
|Apogee +++
|Apogee pyro channel common connection to battery +++
|Bottom 3
|Switch Output
|Switch connection to flight computer
|Bottom 4
|Switch Input
|Switch connection to positive battery terminal
|====
=== Connecting A Battery To EasyMini
There are two possible battery connections on
EasyMini. You can use either method; both feed
through the power switch terminals.
One battery connection is the standard Altus Metrum
white JST plug. This mates with single-cell Lithium
Polymer batteries sold by Altus Metrum.
The other is a pair of screw terminals marked 'Battery
+' and 'Battery -'. Connect a battery from 4 to 12
volts to these terminals, being careful to match polarity.
=== Charging Lithium Batteries
Because EasyMini allows for batteries other than the
standard Altus Metrum Lithium Polymer cells, it cannot
incorporate a battery charger circuit. Therefore, when
using a Litium Polymer cell, you'll need an external
charger. These are available from Altus Metrum, or
from Spark Fun.
=== Using a Separate Pyro Battery with EasyMini
As described above, using an external pyro battery involves
connecting the negative battery terminal to the flight
computer ground, connecting the positive battery terminal to
one of the igniter leads and connecting the other igniter
lead to the per-channel pyro circuit connection.
To connect the negative pyro battery terminal to EasyMini
ground, connect it to the negative external battery
connection, top terminal 4.
Connecting the switched positive battery terminal to the pyro
charges must be done separate from EasyMini, by soldering
them together or using some other connector. Note that for
safety, you must put a switch between the pyro battery and
the rest of the circuit!
The other lead from each pyro charge is then inserted into
the appropriate per-pyro channel screw terminal (top
terminal 1 for the Main charge, bottom terminal 1 for the
Apogee charge).
=== Using an Active Switch with EasyMini
As explained above, an external active switch requires three
connections, one to the positive battery terminal, one to
the flight computer positive input and one to ground. Use
the negative external battery connection, top terminal 4 for
ground.
The positive battery terminal is available on bottom
terminal 4, the positive flight computer input is on the
bottom terminal 3.

13
doc/easymini-outline.txt Normal file
View File

@@ -0,0 +1,13 @@
:notitle:
:doctype: article
== EasyMini/EasyMotor/EasyTimer Outline and Hole Pattern
This image, when printed, provides a precise template for the
mounting holes in EasyMini, EasyMotor, and EasyTimer. Each of
these products has overall dimensions of 0.800 x 1.500 inches,
and the mounting holes are 0.125 inches from each board edge.
That means the mounting holes are in a rectangle measuring
0.550 x 1.250 inches apart, sized for use with 4-40 or M3 screws.
image::easymini.svg[align="center"]

View File

@@ -0,0 +1,129 @@
[appendix]
== Release Notes
:leveloffset: 2
include::release-notes-1.9.18.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.9.17.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.9.16.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.9.15.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.9.14.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.9.13.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.9.12.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.9.11.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.9.10.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.9.9.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.9.8.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.9.7.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.9.6.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.9.5.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.9.4.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.9.3.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.9.1.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.9.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.8.7.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.8.6.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.8.5.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.8.4.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.8.3.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.8.2.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.8.1.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.8.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.7.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.6.8.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.6.5.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.6.4.adoc[]
:leveloffset: 2
include::release-notes-1.6.3.adoc[]
<<<<
:leveloffset: 2
include::release-notes-1.6.2.adoc[]
:leveloffset: 0

BIN
doc/easymini-top.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 665 KiB

33
doc/easymini.svg Normal file
View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
width="1.75in"
height="1.05in"
viewBox="0 0 175 105"
preserveaspectratio="none"
id="svg2"
version="1.1">
<g transform="translate(12.5,12.5)"
style="fill:none;stroke:#000000;stroke-width:1;stroke-linejoin:miter;font-size:20">
<!-- outline -->
<rect width="150" height="80" x="0" y="0"/>
<!-- holes -->
<path d="M12.5,12.5 m-6.25,0 a6.25,6.25,0,1,0,12.5,0 a6.25,6.25,0,1,0,-12.5,0 l12.5,0 m-6.25,-6.25 l0,12.5"/>
<path d="M137.5,12.5 m-6.25,0 a6.25,6.25,0,1,0,12.5,0 a6.25,6.25,0,1,0,-12.5,0 l12.5,0 m-6.25,-6.25 l0,12.5"/>
<path d="M12.5,67.5 m-6.25,0 a6.25,6.25,0,1,0,12.5,0 a6.25,6.25,0,1,0,-12.5,0 l12.5,0 m-6.25,-6.25 l0,12.5"/>
<path d="M137.5,67.5 m-6.25,0 a6.25,6.25,0,1,0,12.5,0 a6.25,6.25,0,1,0,-12.5,0 l12.5,0 m-6.25,-6.25 l0,12.5"/>
<!-- arrow -->
<path d="M25,40 l100,0"/>
<path style="fill:#000000;stroke:none" d="M125,35 l10,5 l-10,5 z"/>
<!-- label -->
<text x="75" y="35" style="fill:#000000;stroke:none" text-anchor="middle">EasyMini</text>
<g transform="rotate(90)">
<text x="40" y="-133" style="fill:#000000;stroke:none" text-anchor="middle">UP</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

47
doc/easymini.txt Normal file
View File

@@ -0,0 +1,47 @@
= EasyMini Owner's Manual
Keith Packard <keithp@keithp.com>; Bdale Garbee <bdale@gag.com>
:title-logo-image: image:../themes/background.png[]
:revnumber: v{version}
:revdate: 01 Jan 1970
:copyright: Bdale Garbee and Keith Packard 2022
:doctype: book
:numbered:
:toc:
:stylesheet: am.css
:linkcss:
:altusmetrum: 1
:easymini: 1
:application: AltosUI
:pdf-themesdir: .
:pdf-theme: altusmetrum
:pdf-fontsdir: fonts
include::header.adoc[]
include::dedication.adoc[]
include::intro.adoc[]
include::getting-started.adoc[]
include::usage.adoc[]
include::easymini-device.adoc[]
include::installation.adoc[]
include::using-am-products.adoc[]
include::altosui.adoc[]
include::system-operation.adoc[]
include::handling.adoc[]
include::updating-firmware.adoc[]
include::flight-data-recording.adoc[]
include::specs.adoc[]
include::easymini-release-notes.adoc[]

120
doc/easytimer.inc Normal file
View File

@@ -0,0 +1,120 @@
== EasyTimer
.EasyTimer Board
image::easytimer.jpg[width=400]
EasyTimer is built on a 0.8 inch by 1½ inch circuit board. It's
designed to fit in a 24mm coupler tube.
EasyTimer is designed to control events during ascent. It has
an accelerometer and gyroscope that can measure acceleration
and rotation and compute speed and tilt angle. EasyTimer has
two pyro channels which can be configured to fire at various
points during flight. Because EasyTimer has no barometric
sensor, it cannot be used to fire recovery charges at apogee
or during descent. EasyTimer is configured using the AltosUI
application which is available for Linux, Mac OS X and Windows.
=== EasyTimer Screw Terminals
EasyTimer has two sets of four screw terminals near
one end of the board. Using the picture above, the top
four have connections for pyro channel B and an
external battery and the bottom four have connections
for pyro circuit A and the power switch. Counting from
the left, the connections are as follows:
.EasyTimer Screw Terminals
[options="header",grid="all",cols="2,3,10"]
|====
|Terminal #|Terminal Name|Description
|Top 1
|B -
|Pyro channel B connection to pyro circuit
|Top 2
|B +++
|Pyro channel B common connection to battery +++
|Top 3
|Battery +++
|Positive external battery terminal
|Top 4
|Battery -
|Negative external battery terminal
|Bottom 1
|A -
|Pyro channel A connection to pyro circuit
|Bottom 2
|A +++
|Pyro channel A common connection to battery +++
|Bottom 3
|Switch Output
|Switch connection to flight computer
|Bottom 4
|Switch Input
|Switch connection to positive battery terminal
|====
=== Connecting A Battery To EasyTimer
There are two possible battery connections on
EasyTimer. You can use either method; both feed
through the power switch terminals.
One battery connection is the standard Altus Metrum
white JST plug. This mates with single-cell Lithium
Polymer batteries sold by Altus Metrum.
The other is a pair of screw terminals marked 'Battery
+' and 'Battery -'. Connect a battery from 4 to 12
volts to these terminals, being careful to match polarity.
=== Charging Lithium Batteries
Because EasyTimer allows for batteries other than the
standard Altus Metrum Lithium Polymer cells, it cannot
incorporate a battery charger circuit. Therefore, when
using a Litium Polymer cell, you'll need an external
charger. These are available from Altus Metrum, or
from Spark Fun.
=== Using a Separate Pyro Battery with EasyTimer
As described above, using an external pyro battery involves
connecting the negative battery terminal to the flight
computer ground, connecting the positive battery terminal to
one of the igniter leads and connecting the other igniter
lead to the per-channel pyro circuit connection.
To connect the negative pyro battery terminal to EasyTimer
ground, connect it to the negative external battery
connection, top terminal 4.
Connecting the switched positive battery terminal to the pyro
charges must be done separate from EasyTimer, by soldering
them together or using some other connector. Note that for
safety, you must put a switch between the pyro battery and
the rest of the circuit!
The other lead from each pyro charge is then inserted into
the appropriate per-pyro channel screw terminal (top
terminal 1 for pyro channel A charge, bottom terminal 1 for
pyro channel B charge).
=== Using an Active Switch with EasyTimer
As explained above, an external active switch requires three
connections, one to the positive battery terminal, one to
the flight computer positive input and one to ground. Use
the negative external battery connection, top terminal 4 for
ground.
The positive battery terminal is available on bottom
terminal 4, the positive flight computer input is on the
bottom terminal 3.

BIN
doc/easytimer.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 785 KiB

BIN
doc/fire-igniter.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

4
doc/fix-html Executable file
View File

@@ -0,0 +1,4 @@
#!/bin/sh
sed -i \
-e 's/<[?]xml [^>]*>//' \
-e 's/<!DOCTYPE [^>]*>//' "$@"

View File

@@ -0,0 +1,89 @@
[appendix]
== Flight Data Recording
Each flight computer logs data at 100 samples per second
during ascent and 10 samples per second during
ifdef::telemini[]
descent, except for TeleMini v1.0, which records ascent at 10 samples
per second and descent at 1 sample per second.
endif::telemini[]
ifndef::telemini[]
descent.
endif::telemini[]
Data are logged to
an on-board flash memory part, which can be partitioned into
several equal-sized blocks, one for each flight.
.Data Storage on Altus Metrum altimeters
[options="header",cols="1,1,1,1"]
|====
|Device |Bytes per Sample |Total Storage |Minutes at Full Rate
ifdef::telemetrum[]
|TeleMetrum v1.0 |8 |1MB |20
|TeleMetrum v1.1 v1.2 |8 |2MB |40
|TeleMetrum v2.0 |16 |8MB |80
|TeleMetrum v3.0 |16 |8MB |80
endif::telemetrum[]
ifdef::telemini[]
|TeleMini v1.0 |2 |5kB |4
|TeleMini v3.0 |16 |512kB |5
endif::telemini[]
ifdef::easymini[]
|EasyMini |16 |1MB |10
endif::easymini[]
ifdef::telemega[]
|TeleMega |32 |8MB |40
endif::telemega[]
ifdef::easymega[]
|EasyMega |32 |8MB |40
endif::easymega[]
|====
The on-board flash is partitioned into separate flight logs,
each of a fixed maximum size. Increase the maximum size of
each log and you reduce the number of flights that can be
stored. Decrease the size and you can store more flights.
Configuration data is also stored in the flash memory on
ifdef::telemetrum[TeleMetrum v1.x,]
ifdef::telemini[TeleMini v3.0 and]
ifdef::easymini[EasyMini.]
This consumes 64kB
of flash space. This configuration space is not available
for storing flight log data.
ifdef::telemetrum,telemega,easymega[]
TeleMetrum v2 or newer, TeleMega and EasyMega
store configuration data in a bit of eeprom available within
the processor chip, leaving that space available in flash for
more flight data.
endif::telemetrum,telemega,easymega[]
To compute the amount of space needed for a single flight, you
can multiply the expected ascent time (in seconds) by 100
times bytes-per-sample, multiply the expected descent time (in
seconds) by 10 times the bytes per sample and add the two
together. That will slightly under-estimate the storage (in
bytes) needed for the flight.
ifdef::telemetrum[]
For instance, a TeleMetrum v2 or newer flight spending
20 seconds in ascent and 150 seconds in descent will take
about (20 * 1600) + (150 * 160) = 56000 bytes of storage. You
could store dozens of these flights in the on-board flash.
endif::telemetrum[]
The default size allows for several flights on each flight
ifdef::telemini[]
computer, except for TeleMini v1.0, which
only holds data for a single flight.
endif::telemini[]
ifndef::telemini[]
computer.
endif::telemini[]
You can adjust the size.
Altus Metrum flight computers will not overwrite existing
flight data, so be sure to download flight data and erase it
from the flight computer before it fills up. The flight
computer will still successfully control the flight even if it
cannot log data, so the only thing you will lose is the data.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
doc/fonts/OpenSans-Bold.ttf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

71
doc/frequency-cal.inc Normal file
View File

@@ -0,0 +1,71 @@
[appendix]
== Frequency Calibration
All products that have radio interfaces require calibration of the radio
frequency. Normally, this calibration is done once during the production
process and the resulting cal value is saved into non-volatile memory. The
procedure decribed here should only be used outside of the factory if you
are really convinced the radio calibration is bad, and you have access to
the required tools to do the calibration.
Because this procedure is only rarely needed in the field, we have not
written any fancy user interface for doing it .. some interaction with
and careful typing in a command-like style interface are required!
=== Background Information
The radio system on each board uses a quartz crystal to control
a frequency synthesizer that can be programmed to a range of operating
frequencies. While these crystals are very stable, they have an accuracy
specification that means once the base frequency they set is multiplied up
to the typical operating range of our products, any variation also gets
multiplied. The objective of the calibration process is, indirectly, to
measure the actual operating frequency of the crystal and adjust the way
the frequency synthesizer is programmed to account for this variation.
The frequency may shift a few tens of Hz over the full operating temperature
range, and it may also shift a bit over time as the crystal ages. But once
properly calibrated, none of those changes are likely to ever cause any
operational problem, as the shift in operating frequency due to these factors
is tiny compared to the bandwidth of our transmitted signal.
=== Required Equipment
The calibration process requires the ability to precisely measure the actual
frequency of a steady CW carrier on or about the intended operating frequency
in the vicinity of 435 MHz.
In production, we use an HP 5385A that is locked to a 10 MHz reference that
is in turn locked to GPS, which provides a highly accurate calibration. Any
reasonably accurate frequency counter is likely to be sufficient.
You also need a computer with terminal program and USB cable to attach to
the board in question, along with a battery and power switch suitable for
powering the board up.
=== RF Calibration Procedure
Using the terminal program, connect to the board over USB. You will find
that you are now interacting with a command interpreter on the board. Using
'?' will show the available commands. Of interest for this process are the
'C' command which turns on a steady transmitted carrier on the currently
selected operating frequency, and the 'c' subcommands that allow interaction
with the saved configuration.
Use the 'c s' command to discover and note the current radio calibration
value, and the operating frequency the board is configured for in kHz.
Set up your frequency counter with a suitable antenna near the board's
antenna and use the 'C' command to turn on a steady carrier. Let the
frequency stabilize, and note what it is to as many digits as are steady
on your counter's display.
To calculate the new calibration value, the equation is:
. (intended_frequency / measured_frequency) * current_cal_value
Set the new calibration value using 'c f <value>', then use 'c w' to save
that cal value into non-volatile memory. You can use the 'C' command again
to confirm the operating frequency is now within a few 10's of Hz of the
intended operating frequency.

98
doc/getting-started.inc Normal file
View File

@@ -0,0 +1,98 @@
== Getting Started
The first thing to do after you open the box is to hook up a
battery and charge it if necessary.
=== Batteries
ifdef::telemetrum,telemega,easymega[]
For TeleMetrum, TeleMega and EasyMega, the battery can be charged by plugging it into the
corresponding socket of the device and then using the USB
cable to plug the flight computer into your computer's USB socket. The
on-board circuitry will charge the battery whenever it is plugged
in, because the on-off switch does NOT control the
charging circuitry.
endif::telemetrum,telemega,easymega[]
The Lithium Polymer
ifdef::easytimer[EasyTimer, ]
ifdef::telemini[TeleMini and]
EasyMini battery can be charged by disconnecting it
from the board and plugging it into a standalone
battery charger such as link:http://altusmetrum.org/LipoCharger[LipoCharger], and
connecting that via a USB cable to a laptop or other
USB power source.
You can also choose to use another battery with
ifdef::easytimer[EasyTimer and]
EasyMini, anything supplying between 4 and 12 volts should
work fine (like a standard 9V battery), but if you are planning
to fire pyro charges, ground testing is required to verify that
the battery supplies enough current to fire your chosen e-matches.
ifdef::telemetrum,telemega,easymega[]
[NOTE]
====
On TeleMetrum v1 boards, when the GPS chip is initially
searching for satellites, TeleMetrum will consume more current
than it pulls from the USB port, so the battery must be
attached in order to get satellite lock. Once GPS is locked,
the current consumption goes back down enough to enable charging
while running. So it's a good idea to fully charge the battery
as your first item of business so there is no issue getting and
maintaining satellite lock. The yellow charge indicator led
will go out when the battery is nearly full and the charger goes
to trickle charge. It can take several hours to fully recharge a
deeply discharged battery.
TeleMetrum v2 or newer, TeleMega and EasyMega use a
higher power battery charger, allowing them to charge
the battery while running the board at maximum
power. When the battery is charging, or when the board
is consuming a lot of power, the red LED will be
lit. When the battery is fully charged, the green LED
will be lit. When the battery is damaged or missing,
both LEDs will be lit, which appears yellow.
====
endif::telemetrum,telemega,easymega[]
ifdef::radio[]
=== Ground Station Hardware
There are two ground stations available, the TeleDongle USB to
RF interface and the TeleBT Bluetooth/USB to RF interface. If
you plug either of these in to your Mac or Linux computer it should
“just work”, showing up as a serial port device. Windows systems need
driver information that is part of the AltOS download to know that the
existing USB modem driver will work. We therefore recommend installing
our software before plugging in TeleDongle if you are using a Windows
computer. If you are using an older version of Linux and are having
problems, try moving to a fresher kernel (2.6.33 or
newer).
endif::radio[]
=== Linux/Mac/Windows Ground Station Software
Next you should obtain and install the AltOS software.
The AltOS distribution includes the AltosUI ground
station program, current firmware images for all of
the hardware, and a number of standalone utilities
that are rarely needed. Pre-built binary packages are
available for Linux, Microsoft Windows, Mac OSX. Full
source code and build instructions are also
available. The latest version may always be downloaded
from http://altusmetrum.org/AltOS
ifdef::radio[]
=== Android Ground Station Software
TeleBT can also connect to an Android device over
BlueTooth or USB. The
link:https://play.google.com/store/apps/details?id=org.altusmetrum.AltosDroid[AltosDroid
Android application] is available from the
link:https://play.google.com[Google Play system].
You don't need a data plan to use AltosDroid, but
without network access, you'll want to download
offline map data before wandering away from the
network.
endif::radio[]

BIN
doc/graph-configure.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

BIN
doc/graph-map.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

BIN
doc/graph-stats.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

BIN
doc/graph.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 KiB

43
doc/handling.inc Normal file
View File

@@ -0,0 +1,43 @@
[appendix]
== Handling Precautions
All Altus Metrum products are sophisticated electronic devices.
When handled gently and properly installed in an air-frame, they
will deliver impressive results. However, as with all electronic
devices, there are some precautions you must take.
[WARNING]
The Lithium Polymer rechargeable batteries have an
extraordinary power density. This is great because we can fly with
much less battery mass than if we used alkaline batteries or previous
generation rechargeable batteries... but if they are punctured
or their leads are allowed to short, they can and will release their
energy very rapidly!
Thus we recommend that you take some care when handling our batteries
and consider giving them some extra protection in your air-frame. We
often wrap them in suitable scraps of closed-cell packing foam before
strapping them down, for example.
The barometric sensors used on all of our flight computers are
sensitive to sunlight. In normal mounting situations, the baro sensor
and all of the other surface mount components
are “down” towards whatever the underlying mounting surface is, so
this is not normally a problem. Please consider this when designing an
installation in an air-frame with a see-through plastic payload bay. It
is particularly important to
consider this with TeleMini v1.0, both because the baro sensor is on the
“top” of the board, and because many model rockets with payload bays
use clear plastic for the payload bay! Replacing these with an opaque
cardboard tube, painting them, or wrapping them with a layer of masking
tape are all reasonable approaches to keep the sensor out of direct
sunlight.
The barometric sensor sampling port must be able to “breathe”,
both by not being covered by foam or tape or other materials that might
directly block the hole on the top of the sensor, and also by having a
suitable static vent to outside air.
As with all other rocketry electronics, Altus Metrum altimeters must
be protected from exposure to corrosive motor exhaust and ejection
charge gasses.

13
doc/header.inc Normal file
View File

@@ -0,0 +1,13 @@
ifndef::backend-pdf[]
[#logo]
[link=https://altusmetrum.org]
image::altusmetrum-oneline.svg[Altus Metrum]
endif::[]
[license]
== License
Copyright © 2024 Bdale Garbee and Keith Packard
This document is released under the terms of the link:http://creativecommons.org/licenses/by-sa/3.0/[Creative Commons ShareAlike 3.0 License]

BIN
doc/ignitor.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

View File

@@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="0 0 384 512"
version="1.1"
id="svg4"
sodipodi:docname="caution.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1574"
inkscape:window-height="1186"
id="namedview6"
showgrid="false"
inkscape:zoom="1.592106"
inkscape:cx="193.80909"
inkscape:cy="256"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg4" />
<path
d="M216 23.858c0-23.802-30.653-32.765-44.149-13.038C48 191.851 224 200 224 288c0 35.629-29.114 64.458-64.85 63.994C123.98 351.538 96 322.22 96 287.046v-85.51c0-21.703-26.471-32.225-41.432-16.504C27.801 213.158 0 261.332 0 320c0 105.869 86.131 192 192 192s192-86.131 192-192c0-170.29-168-193.003-168-296.142z"
id="path2"
style="fill:#bf3400;fill-opacity:1" />
</svg>
<!--
Font Awesome Free 5.4.2 by @fontawesome - https://fontawesome.com
License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
-->

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="0 0 512 512"
version="1.1"
id="svg4"
sodipodi:docname="important.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="944"
inkscape:window-height="866"
id="namedview6"
showgrid="false"
inkscape:zoom="0.4609375"
inkscape:cx="378.57627"
inkscape:cy="256"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg4" />
<path
d="M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"
id="path2"
style="fill:#bf0000;fill-opacity:1" />
</svg>
<!--
Font Awesome Free 5.4.2 by @fontawesome - https://fontawesome.com
License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
-->

After

Width:  |  Height:  |  Size: 2.0 KiB

57
doc/images/icons/note.svg Normal file
View File

@@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="0 0 512 512"
version="1.1"
id="svg4"
sodipodi:docname="note.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1737"
inkscape:window-height="1219"
id="namedview6"
showgrid="false"
inkscape:zoom="1.8527527"
inkscape:cx="257.55137"
inkscape:cy="256"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg4" />
<path
d="M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"
id="path2"
style="fill:#19407c;fill-opacity:1" />
</svg>
<!--
Font Awesome Free 5.4.2 by @fontawesome - https://fontawesome.com
License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
-->

After

Width:  |  Height:  |  Size: 2.0 KiB

57
doc/images/icons/tip.svg Normal file
View File

@@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="0 0 352 512"
version="1.1"
id="svg4"
sodipodi:docname="tip.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1737"
inkscape:window-height="1304"
id="namedview6"
showgrid="false"
inkscape:zoom="2.0057983"
inkscape:cx="175.98644"
inkscape:cy="256"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg4" />
<path
d="M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z"
id="path2"
style="fill:#dfd000;fill-opacity:1" />
</svg>
<!--
Font Awesome Free 5.4.2 by @fontawesome - https://fontawesome.com
License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
-->

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="0 0 576.00019 512"
version="1.1"
id="svg4"
sodipodi:docname="warning.svg"
width="576.00018"
height="512"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2557"
inkscape:window-height="1544"
id="namedview6"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="2.4379272"
inkscape:cx="170.99331"
inkscape:cy="256"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg4" />
<path
d="m 569.51729,440.013 c 18.458,31.994 -4.711,71.987 -41.577,71.987 H 48.054283 C 11.117287,512 -11.944713,471.945 6.4772867,440.013 L 246.42329,23.985005 c 18.467,-32.0090001 64.72,-31.9510001 83.154,0 z M 288.00029,354 c -25.405,0 -46,20.595 -46,46 0,25.405 20.595,46 46,46 25.405,0 46,-20.595 46,-46 0,-25.405 -20.595,-46 -46,-46 z m -43.673,-165.346 7.418,136 c 0.347,6.364 5.609,11.346 11.982,11.346 h 48.546 c 6.373,0 11.635,-4.982 11.982,-11.346 l 7.418,-136 c 0.375,-6.874 -5.098,-12.654 -11.982,-12.654 h -63.383 c -6.884,0 -12.356,5.78 -11.981,12.654 z"
id="path2"
style="fill:#bf6900;fill-opacity:1"
inkscape:connector-curvature="0" />
</svg>
<!--
Font Awesome Free 5.4.2 by @fontawesome - https://fontawesome.com
License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
-->

After

Width:  |  Height:  |  Size: 2.4 KiB

32
doc/install-html Executable file
View File

@@ -0,0 +1,32 @@
#!/bin/sh
destination=
state=arg
for file in "$@"; do
case $state in
arg)
case $file in
-d)
state=destination
;;
*)
base=`basename $file`
case "$destination" in
"")
echo "Need -d destination option before files" 1>&2
exit 1
;;
*)
sed \
-e 's/<[?]xml [^>]*>//' \
-e 's/<!DOCTYPE [^>]*>//' "$file" > "$destination/$base"
;;
esac
;;
esac
;;
destination)
destination=$file
state=arg
;;
esac
done

68
doc/installation.inc Normal file
View File

@@ -0,0 +1,68 @@
== Installation
A typical installation involves attaching
only a suitable battery, a single pole switch for
power on/off, and two pairs of wires connecting e-matches for the
apogee and main ejection charges. All Altus Metrum products are
designed for use with single-cell batteries with 3.7 volts
nominal.
EasyMini may also be used with other
batteries as long as they supply between 4 and 12 volts.
The battery connectors are a standard 2-pin JST connector; you
can purchase suitable batteries from the any vendor selling
Altus Metrum products. These batteries are
single-cell Lithium Polymer batteries that nominally provide 3.7
volts. Other vendors sell similar batteries for RC aircraft
using mating connectors, however the polarity for those is
generally reversed from the batteries used by Altus Metrum
products. In particular, the Tenergy batteries supplied for use
in Featherweight flight computers are not compatible with Altus
Metrum flight computers or battery chargers.
[WARNING]
Check polarity and voltage before connecting any battery not
purchased from Altus Metrum.
[WARNING]
Spark Fun sells batteries that have a matching connector with
the correct polarity. However, these batteries include an
integrated current limiting circuit. That circuit will cause
the battery to shut down when firing the igniter circuit. Do
not use these batteries unless you remove the current limiting
circuit.
By default, we use the unregulated output of the battery
directly to fire ejection charges. This works marvelously
with standard low-current e-matches like the J-Tek from MJG
Technologies, and with Quest Q2G2 igniters. However, if you
want or need to use a separate pyro battery, check out
<<_using_a_separate_pyro_battery>> for instructions on how to wire
that up. The altimeters are designed to work with an external
pyro battery of no more than 15 volts.
Ejection charges are wired directly to the screw terminal block
at the aft end of the altimeter. You'll need a very small straight
blade screwdriver for these screws, such as you might find in a
jeweler's screwdriver set.
ifndef::telemini[]
The screw terminal block is also used for the power switch leads.
endif::telemini[]
ifdef::telemini[]
Except for TeleMini v1.0, the flight computers also use the
screw terminal block for the power switch leads. On TeleMini v1.0,
the power switch leads are soldered directly to the board and
can be connected directly to a switch.
endif::telemini[]
ifdef::radio[]
For most air-frames, the integrated antennas are more than
adequate. However, if you are installing in a carbon-fiber or
metal electronics bay which is opaque to RF signals, you may need to
use off-board external antennas instead. In this case, you can
replace the stock UHF antenna wire with an edge-launched SMA connector,
and, on TeleMetrum v1, you can unplug the integrated GPS
antenna and select an appropriate off-board GPS antenna with
cable terminating in a U.FL connector.
endif::radio[]

64
doc/intro.inc Normal file
View File

@@ -0,0 +1,64 @@
== Introduction and Overview
Welcome to the Altus Metrum community! Our circuits and software reflect
our passion for both hobby rocketry and Free Software. We hope their
capabilities and performance will delight you in every way, but by
releasing all of our hardware and software designs under open licenses,
we also hope to empower you to take as active a role in our collective
future as you wish!
Our goal is to include in this document all of the information required
to successfully configure and use Altus Metrum products. But
documentation is a lot like software in that it can contain "bugs",
and can probably always be improved! If you have questions that
aren't answered in this manual, or just need a little help figuring
things out, we strongly suggest joining the Altus Metrum user email
list, which you can do by visiting
https://lists.gag.com/mailman/listinfo/altusmetrum. There's a lot
of useful information in the mailing list archives!
The first device created for our community was TeleMetrum, a dual
deploy altimeter with fully integrated GPS and radio telemetry
as standard features, and a “companion interface that will
support optional capabilities in the future. The later versions
of TeleMetrum, v2 and newer, have all of the same features but with
improved sensors and radio to offer increased performance.
Our second device was TeleMini, a dual deploy altimeter with
radio telemetry and radio direction finding. The first version
of this device was only 13mm by 38mm (½ inch by 1½ inches) and
could fit easily in an 18mm air-frame. The latest version, v3.0,
includes a beeper, higher power radio, extended on-board
flight logging and an improved barometric sensor.
TeleMega is our most sophisticated device, including six pyro
channels (four of which are fully programmable), integrated GPS,
integrated gyroscopes for staging/air-start inhibit and high
performance telemetry.
EasyMini is a dual-deploy altimeter with logging and built-in
USB data download.
EasyMega is essentially a TeleMega board with the GPS receiver
and telemetry transmitter removed. It offers the same 6 pyro
channels and integrated gyroscopes for staging/air-start inhibit.
TeleDongle v0.2 was our first ground station, providing a USB to RF
interfaces for communicating with the altimeters. Combined with
your choice of antenna and notebook computer, TeleDongle and our
associated user interface software form a complete ground
station capable of logging and displaying in-flight telemetry,
aiding rocket recovery, then processing and archiving flight
data for analysis and review. The latest version, TeleDongle
v3, has all new electronics with a higher performance radio
for improved range.
For a slightly more portable ground station experience that also
provides direct rocket recovery support, TeleBT offers flight
monitoring and data logging using a Bluetooth™ connection between
the receiver and an Android device that has the AltosDroid
application installed from the Google Play store.
More products will be added to the Altus Metrum family over time, and
we currently envision that this will be a single, comprehensive manual
for the entire product family.

BIN
doc/landed.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

BIN
doc/launch-pad.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

64
doc/load-maps.inc Normal file
View File

@@ -0,0 +1,64 @@
=== Load Maps
.Load Maps Window
image::load-maps.png[width=500]
Before heading out to a new launch site, you can use
this to load satellite images in case you don't have
internet connectivity at the site. Try not to wait
until the last minute, though, particularly if you're
heading to a major launch. If too many people are
all trying to download map data at once, Google may
limit access until the next day.
There's a drop-down menu of launch sites we know
about; if your favorites aren't there, please let us
know the lat/lon and name of the site. The contents of
this list are actually downloaded from our server at
run-time, so as new sites are sent in, they'll get
automatically added to this list. If the launch site
isn't in the list, you can manually enter the lat/lon
values
There are four different kinds of maps you can view;
you can select which to download by selecting as many
as you like from the available types:
Hybrid::
A combination of satellite imagery and road data. This
is the default view.
Satellite::
Just the satellite imagery without any annotation.
Roadmap::
Roads, political boundaries and a few geographic
features.
Terrain::
Contour intervals and shading that show hills and
valleys.
You can specify the range of zoom levels to download;
smaller numbers show more area with less
resolution. The default level, 0, shows about
3m/pixel. One zoom level change doubles or halves that
number. Larger zoom levels show more detail, smaller
zoom levels less.
The Map Radius value sets how large an area around the
center point to download. Select a value large enough
to cover any plausible flight from that site. Be aware
that loading a large area with a high maximum zoom
level can attempt to download a lot of data. Loading
hybrid maps with a 10km radius at a minimum zoom of -2
and a maximum zoom of 2 consumes about 120MB of
space. Terrain and road maps consume about 1/10 as
much space as satellite or hybrid maps.
Clicking the 'Load Map' button will fetch images from
Google Maps; note that Google limits how many images
you can fetch at once, so if you load more than one
launch site, you may get some gray areas in the map
which indicate that Google is tired of sending data to
you. Try again later.

BIN
doc/load-maps.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 559 KiB

30
doc/make-am-html Executable file
View File

@@ -0,0 +1,30 @@
#!/bin/sh
cat << 'EOF'
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content=
"text/html; charset=utf-8" />
<title>Altus Metrum Documentation</title>
<link rel="stylesheet" type="text/css" href="am.css" />
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1" />
</head>
<body>
<h1>Altus Metrum Documentation</h1>
EOF
for i in "$@"; do
echo '<p>'
grep '<title>' $i | head -1 | sed -e 's/.*<title>//' -e 's;</title>.*;;'
pdf=`basename "$i" .html`.pdf
echo '<a href="'$i'">html</a>'
echo '<a href="'$pdf'">pdf</a>'
echo '</p>'
done
cat << 'EOF'
</body>
</html>
EOF

35
doc/map-loading.dot Normal file
View File

@@ -0,0 +1,35 @@
digraph map_loading {
edge [arrowsize=0.5; style="setlinewidth(2)"]
node [style=filled; fontcolor=white; color=invis; shape=box; arrowsize=0.5; fontname="DejaVu Sans,sans-serif"; fontsize=12; height=0.2;];
edge [decorate=true; fontname="DejaVu Sans,sans-serif"; fontsize=8];
graph [fontname="DejaVu Sans,sans-serif"; fontsize=15; ]
rankdir="TB";
ranksep=0.5;
nodesep=0.5;
color=invis;
fillcolor="#c0c0c0";
fontcolor="white";
app -> apache [label="AltOS Map URI"]
apache -> app [label="Google Map tile"]
apache -> cgi_script [label="AltOS Map URI"]
cgi_script -> cache_manager [label="AltOS Tile Request"]
cgi_script -> apache [label="Google Map tile"]
cache_manager -> cgi_script [label="AltOS Tile Reply"]
cache_manager -> disk_files [label="AltOS tile files" dir="both"]
cache_manager -> google_maps [label="Google Map URI"]
google_maps -> cache_manager [label="Google Map tile"]
app [color="#885931" label="Application"]
apache [color="#d12127" label="Apache Web Server"]
cgi_script [color="#551a8b" label="AltOS Map CGI Script"]
cache_manager [color="#c75b1c" label="AltOS Map Cache Manager"]
disk_files [color="#4f81bd" label="File System"]
google_maps [color="#4cbb44" label="Google Maps"]
}

229
doc/map-loading.txt Normal file
View File

@@ -0,0 +1,229 @@
= Loading Map Tiles from Google Maps
Keith Packard <keithp@keithp.com>
:title-logo-image: image:load-maps.png[]
:copyright: Keith Packard 2018
:doctype: article
:stylesheet: am-notoc.css
:linkcss:
:pdf-themesdir: .
:pdf-theme: altusmetrum
:pdf-fontsdir: fonts
== The Google Maps Problem
Until recently, Google Maps could be used without fee to fetch map
tiles. Applications could load map tiles anonymously or using a key;
when used anonymously, the number of tiles that could be loaded per
day and the rate at which tiles could be loaded was throttled to make
the API practical only for development purpose. With an application
key, the number of tiles available per day was much higher, and there
was no rate limiting. This was usually sufficient for Altos Metrum
customer use.
However, this has changed and now there is no way to load map tiles
anonymously, and any application key must be tied to a credit
card. The tile cap for free usage is now monthly instead of
daily. Because the key is tied to a credit card, we should not ship it
with the application any longer. And because the cap is monthly
instead of daily, we need some way to control usage by our
applications.
=== The Proposed Solution — An Intermediate Service
To give us some measure of control over tile loading, we will want to
interpose a server controlled by us between the application and Google
Maps. This will let us store the Google Maps key in a secure location,
and also control tile loading by each user.
image::map-loading.svg[align="center"]
== AltOS Map Service
This service receives a URL request and replies with either a map tile
or an error. It is functionally equivalent to the Google Maps service,
except that it can control use of the Google Maps API.
=== AltOS Map CGI Script
The AltOS Map CGI Script is a straightforward script which connects to
the AltOS Map Cache Manager, transmits a URL describing the desired
map tile and receives back a filename (or error), then sends the
contents of that file back through Apache to the requesting
application. The name of the script is 'altos-map'.
==== Inputs
The AltOS Map CGI Script will parse the provided AltOS Map URI or
AltOS Version URI.
==== Outputs
For AltOS Map URLs, the CGI Script will return either the contents of
the associated Google Map tile or an error indicating what failed:
_200 OK_: The map tile image data or version information
_400 Bad Request_: The URL is malformed or not compatible with the
version supported by the service
_403 Forbidden_: The map tile is outside the areas supported by the
current AltOS Map service area
_408 Request Timeout_: Attempts to fetch the tile from Google Maps
timed out.
_503 Service Unavailable_: The service is temporarily refusing to
satisfy this request due to resource limitations.
=== AltOS Map Cache Manager
This is a service running on the local machine and available over a
local network socket. It translates an AltOS Map URL into a local
filename containing the contents of the associated Google Maps
tile. The name of the cache manager is 'altos-mapd'. It will listen
for requests on port 16717.
=== AltOS Map URI
AltOS uses a limited subset of the Google Maps, and the AltOS Map URIs
only encode those elements which we currently use. This specification
describes AltOS Map URI format version 1.0.0. The application is
required to provide URIs compatible with the format supported by the
server. The elements of the elements are:
* Latitude of center point
* Longitude of center point
* Zoom level (from bushes to planets)
Encoding this in a URI is straightforward:
\ altos-map?lat=<lat>&lon=<lon>&zoom=<zoom>
Latitude and longitude are both encoded using decimal degrees with 6
digits following the decimal point.
Zoom levels can range from 1 (world) to 20 (buildings). Higher zoom
levels show smaller areas at greater detail.
The only Google Map type supported by version 1.0.0 of the service is
“hybrid”, which combines road graphics on top of satellite images.
Version 1.0.0 always returns images which are 512x512 pixels.
If we need additional elements in the URL, we can add them in the
future and bump the supported version number.
=== AltOS Version URI
To allow applications to discover what AltOS Map URI version is supported by the
AltOS Map service, the application may query the version of the API
supported using the Version URI. The application provides the version
that it supports and the AltOS Map service returns a version not
greater than the client version:
\ altos-map?version=<client-major>.<client-minor>.<client-revision>
\ →
\ <server-major>.<server-minor>.<server.revision>
=== AltOS Tile Request
The AltOS Map CGI Script parses the Map URI and passes that
information to the AltOS Map Cache Manager using the AltOS Tile
Specifier syntax. This is a JSON representation of the same data
provided by the URI:
\ {
\ "lat": <latitude>,
\ "lon": <longitude>,
\ "zoom": <zoom-level>,
\ "remote_addr": "<IPv4 or IPv6 address of requesting client>"
\ }
Latitude and longitude are both encoded using decimal degrees with 6
digits following the decimal point.
=== AltOS Tile Reply
Sent back from the Cache Manager to the CGI Script, this encodes the
status of the request and the filename of any tile data available. It
is encoded in JSON format:
\ {
\ "status": <HTTP status>,
\ "filename": "<absolute path to image file>",
\ "content_type": "<HTTP content-type>"
\ }
The “filename” and “content-type” elements are only included when
the status is _200 OK_.
=== AltOS Tile Filename
While the current AltOS Map URI version only supports a limited subset
of the Google Maps functionality, we'll encode more of that data in
filenames to allow for easy expansion of functionality in the
future. The elements of an AltOS Tile filename consist of :
* Latitude, with N/S indicator (instead of a sign)
* Longitude, with E/W indicator (instead of a sign)
* Map type.
* Zoom level
* Scale factor. Scale, and the preceding hyphen are omitted for a scale factor of 1.
* Image format suffix. '.jpg' for JPEG files and '.png' for PNG files.
Latitude and longitude are both encoded using decimal degrees with 6
digits following the decimal point.
Map type is one of :
_hybrid_: Road graphics over satellite images
_roadmap_: Symbolic road map
_satellite_: Un-annotated satellite images
_terrain_: Topographic map
Here's what map filenames look like:
\ map-{N,S}<lat>,{E,W}<lon>-<type>-<zoom>[-<scale>].<format>
\
\ map-N36.508532,W107.823944-hybrid-18.jpg
To transmit this name from the AltOS Map Cache Manager back to the
Altos Map CGI script, the filename will be wrapped in a JSON string
== Implementation
The AltOS Map CGI Script and AltOS Map Cache Manager will both be
implemented in Java as much of the required Google Maps infrastructure
is already available in that language.
=== Access Control
No access control to the service is planned at this point. If
necessary, we could implement username/password access control for each
user of the service.
=== Location Restrictions
To avoid unbounded usage, and confine the utility of this service to
AltOS users, the service will only offer map tiles whose center
location is within 10 miles of one of the sites registered in
our launch sites database.
To allow testing of the registered launch site database, a database of
privileged clients will be supported. Privileged clients will have
unlimited access to the service.
=== Per-Client Restrictions
We should implement a per-day limit on the number of tiles provided to
a particular requesting client. We can also rate limit clients to a
certain number of tiles per minute to reduce the bandwidth consumed
out of our server.
=== Cache Lifetime Restrictions.
The Google Maps API allows for caching of map data for no more than 30
days. To honor this, the Cache Manager will re-fetch any requested
tiles when the cached version is older than this. If the fetch fails,
the cache manager will continue to serve the data from the cached
version of the file.

BIN
doc/micropeak-app.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

BIN
doc/micropeak-back.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 907 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

BIN
doc/micropeak-dime.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

BIN
doc/micropeak-download.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

BIN
doc/micropeak-foam.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 798 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
doc/micropeak-graph.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

224
doc/micropeak-nofont.svg Normal file
View File

@@ -0,0 +1,224 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="45.75"
height="50.5"
id="svg2"
version="1.1"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="micropeak-nofont.svg">
<defs
id="defs4">
<linearGradient
id="linearGradient5343">
<stop
style="stop-color:#7200a4;stop-opacity:1;"
offset="0"
id="stop5345" />
<stop
style="stop-color:#da7000;stop-opacity:1;"
offset="1"
id="stop5347" />
</linearGradient>
<marker
inkscape:stockid="Arrow2Send"
orient="auto"
refY="0"
refX="0"
id="Arrow2Send"
style="overflow:visible">
<path
id="path3798"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-0.3,0,0,-0.3,0.69,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Send"
orient="auto"
refY="0"
refX="0"
id="Arrow1Send"
style="overflow:visible">
<path
id="path3780"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend"
style="overflow:visible">
<path
id="path3792"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend"
style="overflow:visible">
<path
id="path3768"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lend"
style="overflow:visible">
<path
id="path3786"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
inkscape:connector-curvature="0" />
</marker>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5343"
id="linearGradient5349"
x1="255.48561"
y1="275.90405"
x2="280.61411"
y2="275.90405"
gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="16.321712"
inkscape:cx="39.182144"
inkscape:cy="19.678463"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1871"
inkscape:window-height="1383"
inkscape:window-x="653"
inkscape:window-y="147"
inkscape:window-maximized="0"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-241.93841,-252.5196)">
<g
style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#7200a4;fill-opacity:1;stroke:none;font-family:Minion Pro;-inkscape-font-specification:Minion Pro"
id="text2985">
<path
d="m 257.20241,268.30647 c 0,-1.07999 -0.396,-1.872 -1.584,-1.872 -1.188,0 -1.584,0.79201 -1.584,1.872 l 0,8.676 c 0,2.88 -2.052,5.112 -4.824,5.112 -3.06,0 -4.104,-1.872 -4.104,-5.076 l 0,-8.712 c 0,-1.07999 -0.396,-1.872 -1.584,-1.872 -1.188,0 -1.584,0.79201 -1.584,1.872 l 0,21.924 c 0,1.08 0.396,1.872 1.584,1.872 1.188,0 1.584,-0.792 1.584,-1.872 l 0,-6.156 c 0.792,0.612 2.088,0.972 3.564,0.972 2.304,0 4.428,-0.792 5.652,-2.988 l 0.072,0.072 0,1.26 c 0,0.864 0.54,1.44 1.404,1.44 0.864,0 1.404,-0.576 1.404,-1.44 l 0,-15.084"
style="font-size:36px;font-weight:500;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#7200a4;font-family:ITC Benguiat Gothic Std;-inkscape-font-specification:ITC Benguiat Gothic Std Medium"
id="path3003"
inkscape:connector-curvature="0" />
</g>
<path
style="fill:none;stroke:url(#linearGradient5349);stroke-width:2.9000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:none"
d="m 256.93561,290.70327 c 3.04022,-0.24413 4.30317,-2.66932 5.38268,-5.56604 1.68059,-4.50963 3.67214,-15.86904 8.62227,-20.55527 4.0668,-3.85 8.22354,-3.46656 8.22354,-3.46656"
id="path2991"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cssc" />
<path
sodipodi:type="star"
style="fill:none;stroke:#da7000;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path5341"
sodipodi:sides="5"
sodipodi:cx="279.29056"
sodipodi:cy="261.05426"
sodipodi:r1="7.2514729"
sodipodi:r2="3.6257365"
sodipodi:arg1="1.0731354"
sodipodi:arg2="1.7014539"
inkscape:flatsided="false"
inkscape:rounded="0"
inkscape:randomized="0"
d="m 282.7522,267.42614 -3.93403,-2.77705 -4.51792,1.66641 1.42544,-4.59964 -2.98096,-3.78185 4.815,-0.0657 2.67559,-4.00372 1.55039,4.55904 4.63457,1.30742 -3.85681,2.88333 z"
inkscape:transform-center-x="-0.29194889"
inkscape:transform-center-y="-0.40889198" />
<g
style="font-size:10px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#7200a4;fill-opacity:1;stroke:none;font-family:ITC Benguiat Gothic Std;-inkscape-font-specification:ITC Benguiat Gothic Std Bold"
id="text5351">
<path
d="m 245.09283,298.56959 c -0.41,-0.49999 -0.65,-1.14 -0.99,-1.97 -0.16,-0.38999 -0.4,-0.55 -0.8,-0.55 -0.77,0 -0.8,0.59001 -0.96,1.55 -0.19,1.13 -0.36,3.09001 -0.36,4.23 0,0.7 0.05,1.16 0.62,1.16 0.56,0 0.64,-0.38 0.64,-0.85 l 0,-1.58 c 0,-0.86999 0.1,-1.77 0.24,-2.69 l 0.02,0 c 0.16,0.51 0.89,2.18 1.59,2.18 0.7,0 1.43,-1.67 1.59,-2.18 l 0.02,0 c 0.14,0.92 0.24,1.82001 0.24,2.69 l 0,1.58 c 0,0.47 0.08,0.85 0.64,0.85 0.57,0 0.62,-0.46 0.62,-1.16 0,-1.13999 -0.17,-3.1 -0.36,-4.23 -0.16,-0.95999 -0.19,-1.55 -0.96,-1.55 -0.4,0 -0.64,0.16001 -0.8,0.55 -0.34,0.83 -0.58,1.47001 -0.99,1.97"
id="path3006"
inkscape:connector-curvature="0" />
<path
d="m 250.6994,298.46959 c 0,-0.35999 -0.19,-0.65 -0.6,-0.65 -0.41,0 -0.6,0.29001 -0.6,0.65 l 0,3.87 c 0,0.36 0.19,0.65 0.6,0.65 0.41,0 0.6,-0.29 0.6,-0.65 l 0,-3.87 m -0.6,-2.65 c -0.37,0 -0.66,0.26001 -0.66,0.74 0,0.48 0.29,0.74 0.66,0.74 0.37,0 0.66,-0.26 0.66,-0.74 0,-0.47999 -0.29,-0.74 -0.66,-0.74"
id="path3008"
inkscape:connector-curvature="0" />
<path
d="m 253.96283,297.87959 c -1.31999,0 -2.16,1.00001 -2.16,2.19 0,1.35 1.04001,2.89 3.46,2.89 0.94,0 1.2,-0.17 1.2,-0.56 0,-0.44999 -0.2,-0.58 -1.03,-0.58 -1.33999,0 -2.31,-0.58 -2.31,-1.78 0,-0.51999 0.38,-1.02 1.08,-1.02 l 1.51,0 c 0.34,0 0.61,-0.18 0.61,-0.57 0,-0.38999 -0.27,-0.57 -0.61,-0.57 l -1.75,0"
id="path3010"
inkscape:connector-curvature="0" />
<path
d="m 257.17283,302.30959 c 0,0.39 0.22,0.68 0.6,0.68 0.38,0 0.6,-0.29 0.6,-0.68 l 0,-2.19 c 0,-0.91999 0.29,-1.16 0.88,-1.16 0.43,0 0.69,-0.18 0.69,-0.56 0,-0.33999 -0.18,-0.58 -0.62,-0.58 -0.56,0 -0.94,0.24001 -1.02,0.79 l -0.02,0 -0.02,-0.31 c -0.04,-0.44999 -0.32,-0.48 -0.54,-0.48 -0.35,0 -0.55,0.20001 -0.55,0.61 l 0,3.88"
id="path3012"
inkscape:connector-curvature="0" />
<path
d="m 265.06268,300.41959 c 0,-1.45999 -0.9,-2.6 -2.46,-2.6 -1.56,0 -2.46,1.14001 -2.46,2.6 0,1.46 0.9,2.6 2.46,2.6 1.56,0 2.46,-1.14 2.46,-2.6 m -1.26,0 c 0,0.8 -0.38,1.52 -1.2,1.52 -0.82,0 -1.2,-0.72 -1.2,-1.52 0,-0.79999 0.38,-1.52 1.2,-1.52 0.82,0 1.2,0.72001 1.2,1.52"
id="path3014"
inkscape:connector-curvature="0" />
<path
d="m 266.07908,302.30959 c 0,0.38 0.2,0.68 0.63,0.68 0.43,0 0.63,-0.3 0.63,-0.68 l 0,-2.07 c 2.5,-0.67999 3.6,-1.44 3.6,-2.74 0,-0.83999 -0.54,-1.42 -1.58,-1.42 l -2.65,0 c -0.43,0 -0.63,0.22001 -0.63,0.54 l 0,5.69 m 1.26,-5.15 1.46,0 c 0.74,0 0.88,0.16 0.88,0.43 0,0.61 -1.68,1.31 -2.34,1.45 l 0,-1.88"
id="path3016"
inkscape:connector-curvature="0" />
<path
d="m 275.53549,302.95959 c 0.32,0 0.58,-0.17 0.58,-0.54 0,-0.36999 -0.26,-0.54 -0.58,-0.54 l -1.29,0 c -0.84,0 -1.55,-0.25 -1.63,-1.19 l 3.06,0 c 0.42,0 0.49,-0.25 0.49,-0.59 0,-1.16999 -0.69,-2.28 -2.36,-2.28 -1.53,0 -2.51,1.17001 -2.51,2.67 0,1.49 1,2.47 2.78,2.47 l 1.46,0 m -2.84,-3.17 c 0.14,-0.59999 0.64,-0.97 1.11,-0.97 0.47,0 0.97,0.37001 1.1,0.97 l -2.21,0"
id="path3018"
inkscape:connector-curvature="0" />
<path
d="m 281.2219,299.57959 c 0,-1.22999 -0.62,-1.7 -1.68,-1.7 l -1.75,0 c -0.33,0 -0.59,0.17001 -0.59,0.54 0,0.37 0.26,0.54 0.59,0.54 l 1.83,0 c 0.27,0 0.4,0.14001 0.4,0.65 l -0.42,0 c -1.17,0 -2.78,0.39001 -2.78,1.83 0,0.96 0.74,1.58 1.75,1.58 0.69,0 1.23,-0.18 1.55,-0.58 0.03,0.38 0.18,0.58 0.51,0.58 0.44,0 0.59,-0.25 0.59,-0.66 l 0,-2.78 m -1.14,1.57 c 0,0.57 -0.58,0.91 -1.14,0.91 -0.6,0 -0.92,-0.27 -0.92,-0.68 0,-0.46999 0.67,-0.87 2.06,-0.87 l 0,0.64"
id="path3020"
inkscape:connector-curvature="0" />
<path
d="m 283.9183,300.21959 c 1.34,0.08 1.87,1.30001 1.85,1.87 -0.02,0.63 0.19,0.9 0.6,0.9 0.47,0 0.6,-0.33 0.6,-0.66 0,-0.75999 -0.24,-2.1 -1.66,-2.61 l 0,-0.02 c 0.68,-0.2 1.32,-0.79 1.32,-1.39 0,-0.28999 -0.2,-0.49 -0.54,-0.49 -0.21,0 -0.43,0.12 -0.58,0.39 -0.3,0.56 -0.82,0.94 -1.59,1.01 l 0,-2.72 c 0,-0.35999 -0.19,-0.65 -0.6,-0.65 -0.41,0 -0.6,0.29001 -0.6,0.65 l 0,5.84 c 0,0.36 0.19,0.65 0.6,0.65 0.41,0 0.6,-0.29 0.6,-0.65 l 0,-2.12"
id="path3022"
inkscape:connector-curvature="0" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -0,0 +1,199 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="400"
height="54"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="micropeak-oneline-font.svg">
<defs
id="defs4">
<linearGradient
id="linearGradient5343">
<stop
style="stop-color:#7200a4;stop-opacity:1;"
offset="0"
id="stop5345" />
<stop
style="stop-color:#da7000;stop-opacity:1;"
offset="1"
id="stop5347" />
</linearGradient>
<marker
inkscape:stockid="Arrow2Send"
orient="auto"
refY="0"
refX="0"
id="Arrow2Send"
style="overflow:visible">
<path
id="path3798"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-0.3,0,0,-0.3,0.69,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Send"
orient="auto"
refY="0"
refX="0"
id="Arrow1Send"
style="overflow:visible">
<path
id="path3780"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend"
style="overflow:visible">
<path
id="path3792"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend"
style="overflow:visible">
<path
id="path3768"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lend"
style="overflow:visible">
<path
id="path3786"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
inkscape:connector-curvature="0" />
</marker>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5343"
id="linearGradient5349"
x1="255.48561"
y1="275.90405"
x2="280.61411"
y2="275.90405"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.9246394,0,0,1.9246394,-223.70579,-247.62056)" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.8852983"
inkscape:cx="103.59377"
inkscape:cy="27.872251"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="2560"
inkscape:window-height="1582"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-241.93841,-249.0196)">
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:30.79423141px;line-height:125%;font-family:'Minion Pro';-inkscape-font-specification:'Minion Pro';letter-spacing:0px;word-spacing:0px;fill:#7200a4;fill-opacity:1;stroke:none"
x="237.36546"
y="300.57535"
id="text2985"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan2989"
x="237.36546"
y="300.57535"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:69.28701782px;line-height:125%;font-family:'ITC Benguiat Gothic Std';-inkscape-font-specification:'ITC Benguiat Gothic Std Medium';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#7200a4;fill-opacity:1">μ</tspan></text>
<path
style="fill:none;stroke:url(#linearGradient5349);stroke-width:5.58145428;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:none"
d="m 270.8026,311.8784 c 5.85134,-0.46986 8.28205,-5.13748 10.35972,-10.71262 3.23453,-8.67942 7.06755,-30.54218 16.59477,-39.56149 7.82712,-7.40985 15.82735,-6.67187 15.82735,-6.67187"
id="path2991"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cssc" />
<path
sodipodi:type="star"
style="fill:none;stroke:#da7000;stroke-width:2.11710358;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path5341"
sodipodi:sides="5"
sodipodi:cx="313.82785"
sodipodi:cy="254.81477"
sodipodi:r1="13.956471"
sodipodi:r2="6.9782352"
sodipodi:arg1="1.0731354"
sodipodi:arg2="1.7014539"
inkscape:flatsided="false"
inkscape:rounded="0"
inkscape:randomized="0"
d="m 320.49027,267.07835 -7.57159,-5.34482 -8.69538,3.20724 2.74347,-8.85265 -5.73728,-7.27871 9.26715,-0.12642 5.14955,-7.70573 2.98393,8.77452 8.91988,2.51631 -7.42297,5.54937 z"
inkscape:transform-center-x="-0.56191834"
inkscape:transform-center-y="-0.78695059" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:70.16494751px;line-height:125%;font-family:'ITC Benguiat Gothic Std';-inkscape-font-specification:'ITC Benguiat Gothic Std Medium';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#7200a4;fill-opacity:1;stroke:none"
x="331.6398"
y="300.51898"
id="text5351"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5353"
x="331.6398"
y="300.51898">MicroPeak</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.4 KiB

265
doc/micropeak-oneline.svg Normal file
View File

@@ -0,0 +1,265 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="320"
height="63"
id="svg2"
version="1.1"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="micropeak-oneline-font.svg">
<defs
id="defs4">
<linearGradient
id="linearGradient4151">
<stop
id="stop4153"
offset="0"
style="stop-color:#da7000;stop-opacity:1;" />
<stop
style="stop-color:#a63852;stop-opacity:1;"
offset="0.15000001"
id="stop4159" />
<stop
style="stop-color:#7200a4;stop-opacity:1;"
offset="1"
id="stop4157" />
</linearGradient>
<linearGradient
id="linearGradient4141">
<stop
style="stop-color:#7200a4;stop-opacity:1;"
offset="0"
id="stop4143" />
<stop
id="stop4149"
offset="0.5"
style="stop-color:#7200a4;stop-opacity:0.49803922;" />
<stop
style="stop-color:#7200a4;stop-opacity:0;"
offset="1"
id="stop4145" />
</linearGradient>
<linearGradient
id="linearGradient5343">
<stop
style="stop-color:#7200a4;stop-opacity:1;"
offset="0"
id="stop5345" />
<stop
style="stop-color:#da7000;stop-opacity:1;"
offset="1"
id="stop5347" />
</linearGradient>
<marker
inkscape:stockid="Arrow2Send"
orient="auto"
refY="0"
refX="0"
id="Arrow2Send"
style="overflow:visible">
<path
id="path3798"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-0.3,0,0,-0.3,0.69,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Send"
orient="auto"
refY="0"
refX="0"
id="Arrow1Send"
style="overflow:visible">
<path
id="path3780"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend"
style="overflow:visible">
<path
id="path3792"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend"
style="overflow:visible">
<path
id="path3768"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lend"
style="overflow:visible">
<path
id="path3786"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
inkscape:connector-curvature="0" />
</marker>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5343"
id="linearGradient5349"
x1="255.48561"
y1="275.90405"
x2="280.61411"
y2="275.90405"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.58566,0,0,1.58566,-141.69631,-171.10662)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4151"
id="linearGradient4147"
x1="320.71625"
y1="261.24799"
x2="561.98907"
y2="261.24799"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.98765434,0,0,0.98765434,6.9381316,3.6077944)" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.040214"
inkscape:cx="63.523011"
inkscape:cy="51.339868"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1871"
inkscape:window-height="1383"
inkscape:window-x="0"
inkscape:window-y="160"
inkscape:window-maximized="0"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-241.9891,-229.23188)">
<g
style="font-size:57.89221573px;font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#7200a4;fill-opacity:1;stroke:none;font-family:ITC Benguiat Gothic Std;-inkscape-font-specification:ITC Benguiat Gothic Std Medium"
id="text2985">
<path
d="m 266.5354,253.96513 c 0,-1.73676 -0.63682,-3.01039 -2.54726,-3.01039 -1.91044,0 -2.54726,1.27363 -2.54726,3.01039 l 0,13.95203 c 0,4.63137 -3.29986,8.22069 -7.75755,8.22069 -4.92084,0 -6.59972,-3.0104 -6.59972,-8.1628 l 0,-14.00992 c 0,-1.73676 -0.63681,-3.01039 -2.54725,-3.01039 -1.91044,0 -2.54726,1.27363 -2.54726,3.01039 l 0,35.25636 c 0,1.73677 0.63682,3.0104 2.54726,3.0104 1.91044,0 2.54725,-1.27363 2.54725,-3.0104 l 0,-9.89957 c 1.27363,0.98417 3.35775,1.56309 5.73133,1.56309 3.7051,0 7.12075,-1.27363 9.08908,-4.80505 l 0.11579,0.11578 0,2.02623 c 0,1.38941 0.86838,2.31569 2.25779,2.31569 1.38941,0 2.2578,-0.92628 2.2578,-2.31569 l 0,-24.25684"
style="line-height:125%;fill:#7200a4;font-family:ITC Benguiat Gothic Std;-inkscape-font-specification:ITC Benguiat Gothic Std Medium"
id="path4162" />
</g>
<path
style="fill:none;stroke:url(#linearGradient5349);stroke-width:4.59841394;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:none"
d="m 265.7162,289.84993 c 4.82076,-0.38711 6.82338,-4.23263 8.53511,-8.82584 2.66483,-7.15075 5.82277,-25.16291 13.67197,-32.59367 6.44857,-6.10479 13.03975,-5.49679 13.03975,-5.49679"
id="path2991"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cssc" />
<path
sodipodi:type="star"
style="fill:none;stroke:#da7000;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path5341"
sodipodi:sides="5"
sodipodi:cx="279.29056"
sodipodi:cy="261.05426"
sodipodi:r1="7.2514729"
sodipodi:r2="3.6257365"
sodipodi:arg1="1.0731354"
sodipodi:arg2="1.7014539"
inkscape:flatsided="false"
inkscape:rounded="0"
inkscape:randomized="0"
d="m 282.7522,267.42614 -3.93403,-2.77705 -4.51792,1.66641 1.42544,-4.59964 -2.98096,-3.78185 4.815,-0.0657 2.67559,-4.00372 1.55039,4.55904 4.63457,1.30742 -3.85681,2.88333 z"
inkscape:transform-center-x="-0.46292579"
inkscape:transform-center-y="-0.64836539"
transform="matrix(1.58566,0,0,1.58566,-141.69632,-171.10662)" />
<g
style="font-size:54.73445892px;font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient4147);fill-opacity:1;stroke:none;font-family:ITC Benguiat Gothic Std;-inkscape-font-specification:ITC Benguiat Gothic Std Medium"
id="text5351">
<path
d="m 339.95106,263.95674 c 3.3388,0 8.26491,-10.67322 9.46907,-13.30048 l 0.10947,0 c 1.64203,8.97645 1.86097,18.06238 1.86097,26.54622 0,2.13464 0.60208,3.3388 2.40831,3.3388 1.64203,0 2.40832,-1.31363 2.40832,-3.3388 0,-7.44388 -1.4231,-23.6453 -2.90093,-30.37763 -0.38314,-1.86097 -1.36836,-4.26929 -3.1746,-4.26929 -3.06512,0 -4.32402,7.17023 -10.18061,15.38039 -5.85658,-8.21016 -7.11548,-15.38039 -10.1806,-15.38039 -1.80624,0 -2.79146,2.40832 -3.1746,4.26929 -1.47783,6.73233 -2.90093,22.93375 -2.90093,30.37763 0,2.02517 0.76628,3.3388 2.40832,3.3388 1.80623,0 2.40831,-1.20416 2.40831,-3.3388 0,-8.48384 0.21894,-17.56977 1.80624,-26.54622 l 0.10947,0 c 1.25889,2.62726 6.185,13.30048 9.52379,13.30048"
style=""
id="path4165" />
<path
d="m 368.22997,255.25396 c 0,-1.64203 -0.60209,-2.84619 -2.40832,-2.84619 -1.80624,0 -2.40832,1.20416 -2.40832,2.84619 l 0,22.44113 c 0,1.64203 0.60208,2.84619 2.40832,2.84619 1.80623,0 2.40832,-1.20416 2.40832,-2.84619 l 0,-22.44113 m -2.40832,-12.20579 c -1.7515,0 -2.57252,1.53257 -2.57252,3.1746 0,1.64203 0.82102,3.1746 2.57252,3.1746 1.7515,0 2.57252,-1.53257 2.57252,-3.1746 0,-1.64203 -0.82102,-3.1746 -2.57252,-3.1746"
style=""
id="path4167" />
<path
d="m 391.19962,275.88885 c -6.67759,0 -11.98684,-4.15983 -11.98684,-11.49424 0,-5.0903 2.79146,-7.66282 9.57853,-7.66282 l 6.23973,0 c 1.47782,0 2.46305,-0.65682 2.46305,-2.07991 0,-1.4231 -0.98523,-2.07991 -2.46305,-2.07991 l -9.30486,0 c -7.17021,0 -11.65844,5.03558 -11.65844,11.65844 0,9.96166 8.26491,16.14667 15.70879,16.14667 l 6.5134,0 c 1.53256,0 2.62725,-0.71155 2.62725,-2.24412 0,-1.53256 -1.09469,-2.24411 -2.62725,-2.24411 l -5.09031,0"
style=""
id="path4169" />
<path
d="m 403.02227,277.69509 c 0,1.64203 0.60208,2.84619 2.40831,2.84619 1.80624,0 2.40832,-1.20416 2.40832,-2.84619 l 0,-14.50463 c 0,-4.26929 3.39354,-6.45867 7.38915,-6.45867 1.7515,0 2.46305,-0.82102 2.46305,-2.35358 0,-1.5873 -1.03995,-2.13465 -2.84619,-2.13465 -3.503,0 -5.85659,1.31363 -6.89654,4.7619 l -0.10947,0 0,-1.5873 c 0,-1.64203 -0.60208,-2.84619 -2.40832,-2.84619 -1.80623,0 -2.40831,1.20416 -2.40831,2.84619 l 0,22.27693"
style=""
id="path4171" />
<path
d="m 431.7801,276.54566 c -4.98083,0 -8.31964,-4.7619 -8.31964,-10.07114 0,-5.30923 3.33881,-10.07114 8.31964,-10.07114 5.03556,0 8.37437,4.76191 8.37437,10.07114 0,5.30924 -3.33881,10.07114 -8.37437,10.07114 m 0,4.15982 c 7.44388,0 13.191,-6.185 13.191,-14.28569 0,-7.55335 -5.74712,-14.17623 -13.191,-14.17623 -7.44388,0 -13.13627,6.62288 -13.13627,14.17623 0,8.10069 5.69239,14.28569 13.13627,14.28569"
style=""
id="path4173" />
<path
d="m 456.22673,263.84727 c 6.73233,-2.40832 21.18224,-5.03558 21.18224,-14.6141 0,-4.37875 -3.50301,-6.5134 -7.82703,-6.5134 l -15.92773,0 c -1.69677,0 -2.24411,1.09469 -2.24411,2.62725 l 0,32.34807 c 0,1.69676 0.76628,2.84619 2.40831,2.84619 1.64204,0 2.40832,-1.14943 2.40832,-2.84619 l 0,-13.84782 m 12.47946,-16.63928 c 1.9157,0 3.3388,0.65682 3.3388,2.79146 0,4.9261 -10.29009,6.62287 -15.81826,8.92172 l 0,-11.71318 12.47946,0"
style=""
id="path4175" />
<path
d="m 485.16159,263.08099 c 0.71154,-3.50301 3.22934,-6.67761 8.48384,-6.67761 4.43348,0 7.22495,2.8462 7.44388,6.67761 l -15.92772,0 m 18.06237,3.72194 c 2.62725,0 2.68199,-0.60208 2.68199,-2.90093 0,-6.89653 -5.41872,-11.65844 -12.20579,-11.65844 -8.15542,0 -13.90255,5.58293 -13.90255,13.79309 0,9.63325 6.07553,14.34043 13.30047,14.34043 l 10.50902,0 c 1.47783,0 2.46305,-0.65682 2.46305,-2.07991 0,-1.4231 -0.98522,-2.07991 -2.46305,-2.07991 l -10.39955,0 c -4.48822,0 -8.64804,-3.06514 -8.2649,-9.41433 l 18.28131,0"
style=""
id="path4177" />
<path
d="m 527.28745,270.52487 c 0,4.7619 -2.68199,6.45867 -7.22495,6.45867 -4.10508,0 -6.45867,-1.47783 -6.45867,-4.7619 0,-5.14503 7.38916,-6.6776 13.68362,-6.6776 l 0,4.98083 m -4.43349,-13.46467 c 3.3388,0 4.43349,0.76628 4.43349,3.11986 l 0,1.64203 c -7.06074,0.43788 -18.50025,1.0947 -18.50025,10.61849 0,5.19977 4.4335,8.2649 10.50902,8.2649 3.72194,0 5.47345,-0.98522 8.31964,-3.11986 0,1.7515 0.71155,2.79146 2.24411,2.79146 1.53256,0 2.24411,-1.03996 2.24411,-2.79146 l 0,-15.16145 c 0,-4.87136 -1.31363,-9.8522 -8.53857,-9.8522 l -10.12588,0 c -1.5873,0 -2.62725,0.71155 -2.62725,2.24411 0,1.53257 1.03995,2.24412 2.62725,2.24412 l 9.41433,0"
style=""
id="path4179" />
<path
d="m 538.94589,277.69509 c 0,1.64203 0.60208,2.84619 2.40832,2.84619 1.80623,0 2.40832,-1.20416 2.40832,-2.84619 l 0,-13.40995 c 9.14064,1.2589 12.09631,4.15983 13.40994,13.46468 0.21894,1.53256 0.43788,2.79146 2.35358,2.79146 1.5873,0 2.46305,-0.82102 2.46305,-2.57252 0,-6.23972 -3.22934,-13.40995 -9.57853,-15.32565 l 0,-0.10947 c 3.06513,-1.03995 7.49862,-4.5977 7.49862,-8.15543 0,-1.20416 -0.82102,-2.18938 -1.7515,-2.18938 -1.80624,0 -2.18938,1.25889 -3.94088,3.72194 -1.97044,2.90093 -5.69239,4.87137 -9.30486,4.87137 l -1.14942,0 0,-15.38038 c 0,-1.64204 -0.60209,-2.8462 -2.40832,-2.8462 -1.80624,0 -2.40832,1.20416 -2.40832,2.8462 l 0,32.29333"
style=""
id="path4181" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
doc/micropeak-raw-data.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

561
doc/micropeak.txt Normal file
View File

@@ -0,0 +1,561 @@
= MicroPeak Owner's Manual
Keith Packard <keithp@keithp.com>; Bdale Garbee <bdale@gag.com>
:revnumber: v{version}
:revdate: 01 Jan 1970
:copyright: Bdale Garbee and Keith Packard 2021
:stylesheet: am.css
:linkcss:
:toc:
:doctype: book
:numbered:
:pdf-themesdir: .
:pdf-theme: altusmetrum
:pdf-fontsdir: fonts
include::header.adoc[]
[dedication]
== Acknowledgements
Thanks to John Lyngdal for suggesting that we build something
like this.
Have fun using these products, and we hope to meet all of you
out on the rocket flight line somewhere.
[verse]
Bdale Garbee, KB0G
NAR #87103, TRA #12201
[verse]
Keith Packard, K7WQ
NAR #88757, TRA #12200
== Using MicroPeak
MicroPeak is designed to be easy to use. Requiring no external
components, flying takes just a few steps
Install the battery::
Fit a CR1025 battery into the plastic carrier. The positive
(\+) terminal should be towards the more open side of the
carrier. Slip the carrier into the battery holder with the
positive (+) terminal facing away from the circuit board.
.MicroPeak and Battery
image::micropeak-back.jpg[width=430]
Install MicroPeak in your rocket::
This can be as simple as preparing a soft cushion of wadding
inside a vented model payload bay. Wherever you mount it,
make sure you protect the barometric sensor from corrosive
ejection gasses as those will damage the sensor, and shield
it from light as that can cause incorrect sensor readings.
Turn MicroPeak on::
Slide the switch so that the actuator covers the '1' printed
on the board. MicroPeak will report the maximum height of
the last flight in decimeters using a sequence of flashes on
the LED. A sequence of short flashes indicates one digit. A
single long flash indicates zero. The height is reported in
decimeters, so the last digit will be tenths of a meter. For
example, if MicroPeak reports 5 4 4 3, then the maximum
height of the last flight was 544.3m, or 1786 feet.
Finish preparing the rocket for flight::
After the previous flight data have been reported, MicroPeak
waits for one minute before starting to check for
launch. This gives you time to finish assembling the
rocket. As those activities might cause pressure changes
inside the airframe, MicroPeak might accidentally detect
boost. If you need to do anything to the airframe after the
one minute window passes, make sure to be careful not to
disturb the altimeter. The LED will remain dark during the
one minute delay, but after that, it will start blinking
once every 3 seconds.
Fly the rocket::
Once the rocket passes about 30m in height (100 feet), the
micro-controller will record the ground pressure and track
the pressure seen during the flight. In this mode, the LED
flickers rapidly. When the rocket lands, and the pressure
stabilizes, the micro-controller will record the minimum
pressure pressure experienced during the flight, compute the
height represented by the difference in air pressure and
blink that value out on the LED. After that, MicroPeak
powers down to conserve battery power.
Recover the data::
Turn MicroPeak off and then back on. MicroPeak will blink
out the maximum height for the last flight. Turn MicroPeak
back off to conserve battery power.
== The MicroPeak USB adapter
.MicroPeak USB Adapter
image::MicroPeakUSB-2.0.jpg[width=430,align="center"]
MicroPeak stores barometric pressure information for the first
48 seconds of the flight in on-board non-volatile memory. The
contents of this memory can be downloaded to a computer using
the MicroPeak USB adapter.
=== Installing the MicroPeak software
The MicroPeak application runs on Linux, Mac OS X and
Windows. You can download the latest version from
http://altusmetrum.org/MicroPeak
On Mac OS X and Windows, the FTDI USB device driver
needs to be installed. A compatible version of this
driver is included with the MicroPeak application, but
you may want to download a newer version from
http://www.ftdichip.com/FTDrivers.htm
=== Downloading Micro Peak data
* Plug the MicroPeak USB adapter in to your computer.
* Start the MicroPeak application.
image::micropeak-nofont.svg[width=50,align="center"]
* Click on the Download button at the top of the
window.
.MicroPeak Application
image::micropeak-app.png[width=430,align="center"]
* Select from the listed devices. There will probably
be only one.
.MicroPeak Device Dialog
image::micropeak-device-dialog.png[width=220,align="center"]
* The application will now wait until it receives
valid data from the MicroPeak USB adapter.
.MicroPeak Download Dialog
image::micropeak-download.png[width=200,align="center"]
* The MicroPeak USB adapter has a small
phototransistor under the hole in the center of the
box. Locate this, turn on the MicroPeak and place
the orange LED on the MicroPeak directly inside the
hole, resting the MicroPeak itself on the box. You
should see the blue LED on the MicroPeak USB adapter
blinking in time with the orange LED on the
MicroPeak board itself.
.MicroPeak Downloading
image::MicroPeakUSB-2.0-inuse.jpg[width=430,align="center"]
* After the maximum flight height is reported,
MicroPeak will pause for a few seconds, blink the
LED four times rapidly and then send the data in one
long blur on the LED. The MicroPeak application
should receive the data. When it does, it will
present the data in a graph and offer to save the
data to a file. If not, you can power cycle the
MicroPeak board and try again.
.MicroPeak Save Dialog
image::micropeak-save-dialog.png[width=220,align="center"]
* Once the data are saved, a graph will be displayed
with height, speed and acceleration values computed
from the recorded barometric pressure data. See
<<_analyzing_micropeak_data> for more details on that.
=== Analyzing MicroPeak Data
The MicroPeak application can present flight data in
the form of a graph, a collection of computed
statistics or in tabular form.
MicroPeak collects raw barometric pressure data which
is then used to compute the remaining data. Altitude
is computed through a standard atmospheric
model. Absolute error in this data will be affected by
local atmospheric conditions. Fortunately, these
errors tend to mostly cancel out, so the error in the
height computation is much smaller than the error in
altitude would be.
Speed and acceleration are computed by first smoothing
the height data with a Gaussian window averaging
filter. For speed data, this average uses seven
samples. For acceleration data, eleven samples are
used. These were chosen to provide reasonably smooth
speed and acceleration data, which would otherwise be
swamped with noise.
The File menu has operations to open existing flight
logs, Download new data from MicroPeak, Save a copy of
the flight log to a new file, Export the tabular data
(as seen in the Raw Data tab) to a file, change the
application Preferences, Close the current window or
close all windows and Exit the application.
==== MicroPeak Graphs
.MicroPeak Graph
image::micropeak-graph.png[width=430,align="center"]
Under the Graph tab, the height, speed and acceleration values
are displayed together. You can zoom in on the graph by
clicking and dragging to sweep out an area of
interest. Right-click on the plot to bring up a menu that will
let you save, copy or print the graph.
==== MicroPeak Flight Statistics
.MicroPeak Flight Statistics
image::micropeak-statistics.png[width=430,align="center"]
The Statistics tab presents overall data from
the flight. Note that the Maximum height value
is taken from the minumum pressure captured in
flight, and may be different from the apparant
apogee value as the on-board data are sampled
twice as fast as the recorded values, or
because the true apogee occurred after the
on-board memory was full. Each value is
presented in several units as appropriate.
==== Raw Flight Data
.MicroPeak Raw Flight Data
image::micropeak-raw-data.png[width=430,align="center"]
A table consisting of the both the raw barometric pressure
data and values computed from that for each recorded time.
==== Configuring the Graph
.MicroPeak Graph Configuration
image::micropeak-graph-configure.png[width=430,align="center"]
This selects which graph elements to show, and lets you
switch between metric and imperial units
=== Setting MicroPeak Preferences
.MicroPeak Preferences
image::micropeak-preferences.png[width=170,align="center"]
The MicroPeak application has a few user settings which are
configured through the Preferences dialog, which can be
accessed from the File menu.
Log Directory::
The Log Directory is where flight data will be
saved to and loaded from by default. Of
course, you can always navigate to other
directories in the file chooser windows, this
setting is just the starting point.
Imperial Units::
If you prefer to see your graph data in feet
and miles per hour instead of meters and
meters per second, you can select Imperial
Units.
Serial Debug::
To see what data is actually arriving over the
serial port, start the MicroPeak application
from a command prompt and select the Serial
Debug option. This can be useful in debugging
serial communication problems, but most people
need never choose this.
Font Size::
You can adjust the size of the text in the
Statistics tab by changing the Font size
preference. There are three settings, with
luck one will both fit on your screen and
provide readable values.
Look & Feel::
The Look & feel menu shows a list of available
application appearance choices. By default,
the MicroPeak application tries to blend in
with other applications, but you may choose
some other appearance if you like.
Note that MicroPeak shares a subset of the
AltosUI preferences, so if you use both of
these applications, change in one application
will affect the other.
== Protecting MicroPeak from Sunlight
The MS5607 barometric sensor is sensitive to direct light. When light
shines through the holes in the cover to the components inside, the
reported pressure can vary wildly from the actual pressure. This
causes the reported altitude to have errors of thousands of
feet.
MicroPeak should be installed in an opaque compartment in the airframe
and not subjected to sunlight. Alternatively, a small piece of
adhesive-backed open-cell foam can be attached to the device so that
it covers the barometric sensor and protects it from direct light.
Here's what happens when MicroPeak is exposed to sunlight. At apogee,
I exposed MicroPeak to varying amounts of sunlight and you can see the
wild swings in altitude resulting from that:
.MicroPeak in Sunlight
image::micropeak-flight-nofoam.png[width=430]
You can carefully cutting a piece of adhesive-backed open-cell foam
and attach it to MicroPeak. It's important to press the adhesive to
the circuit board and not to the top of the barometric sensor or the
sensor may become blocked and not operate at all. Once you've attached
the foam, you should test MicroPeak on the ground to make sure it's
still working.
.MicroPeak with Foam
image::micropeak-foam.jpg[width=430]
That MicroPeak was in the same barometric chamber as the one which
generated the above results and the resulting flight data looks
correct:
.MicroPeak in Sunlight with Foam
image::micropeak-flight-foam.png[width=430]
[appendix]
== Handling Precautions
All Altus Metrum products are sophisticated electronic
devices. When handled gently and properly installed in an
air-frame, they will deliver impressive results. However, as
with all electronic devices, there are some precautions you
must take.
[WARNING]
The CR1025 Lithium batteries have an extraordinary power
density. This is great because we can fly with much less
battery mass... but if they are punctured or their contacts
are allowed to short, they can and will release their energy
very rapidly! Thus we recommend that you take some care when
handling MicroPeak to keep conductive material from coming in
contact with the exposed metal elements.
The barometric sensor used in MicroPeak is sensitive to
sunlight. Please consider this when designing an
installation. Many model rockets with payload bays use clear
plastic for the payload bay. Replacing these with an opaque
cardboard tube, painting them, or wrapping them with a layer
of masking tape are all reasonable approaches to keep the
sensor out of direct sunlight.
The barometric sensor sampling ports must be able to
"breathe", both by not being covered by solid foam or tape or
other materials that might directly block the hole on the top
of the sensor, and also by having a suitable static vent to
outside air.
One good solution is to use a small rectangle of Poron
50-30031-12X12P or equivalent to cover the sensor. This is an
open cell foam in 1/32" thickness with an adhesive backing. It
seems to do a good job of blocking sun while still allowing
airflow to and from the sensor internals.
As with all other rocketry electronics, Altus Metrum
altimeters must be protected from exposure to corrosive motor
exhaust and ejection charge gasses.
[appendix]
== Technical Information
=== Barometric Sensor
MicroPeak uses the Measurement Specialties MS5607
sensor. This has a range of 120kPa to 1kPa with an
absolute accuracy of 150Pa and a resolution of 2.4Pa.
The pressure range corresponds roughly to an altitude
range of -1500m (-4900 feet) to 31000m (102000 feet),
while the resolution is approximately 20cm (8 inches)
near sea level and 60cm (24in) at 10000m (33000 feet).
Ground pressure is computed from an average of 16
samples, taken while the altimeter is at rest. The
flight pressure used to report maximum height is
computed from a Kalman filter designed to smooth out
any minor noise in the sensor values. The flight
pressure recorded to non-volatile storage is
unfiltered, coming directly from the pressure sensor.
=== Micro-controller
MicroPeak uses an Atmel ATtiny85
micro-controller. This tiny CPU contains 8kB of flash
for the application, 512B of RAM for temporary data
storage and 512B of EEPROM for non-volatile storage of
previous flight data.
The ATtiny85 has a low-power mode which turns off all
of the clocks and powers down most of the internal
components. In this mode, the chip consumes only .1μA
of power. MicroPeak uses this mode once the flight has
ended to preserve battery power.
=== Lithium Battery
The CR1025 battery used by MicroPeak holds 30mAh of
power, which is sufficient to run for over 40
hours. Because MicroPeak powers down on landing, run
time includes only time sitting on the launch pad or
during flight.
The large positive terminal (+) is usually marked,
while the smaller negative terminal is not. Make sure
you install the battery with the positive terminal
facing away from the circuit board where it will be in
contact with the metal battery holder. A small pad on
the circuit board makes contact with the negative
battery terminal.
Shipping restrictions may prevent us from including a
CR1025 battery with MicroPeak. If so, many stores
carry CR1025 batteries as they are commonly used in
small electronic devices such as flash lights.
=== Atmospheric Model
MicroPeak contains a fixed atmospheric model which is
used to convert barometric pressure into altitude. The
model was converted into a 469-element piece-wise
linear approximation which is then used to compute the
altitude of the ground and apogee. The difference
between these represents the maximum height of the
flight.
The model assumes a particular set of atmospheric
conditions, which, while a reasonable average, cannot
represent the changing nature of the real
atmosphere. Fortunately, for flights reasonably close
to the ground, the effect of this global inaccuracy
are largely canceled out when the computed ground
altitude is subtracted from the computed apogee
altitude, so the resulting height is more accurate
than either the ground or apogee altitudes.
Because the raw pressure data is recorded to
non-volatile storage, you can use that, along with a
more sophisticated atmospheric model, to compute your
own altitude values.
=== Mechanical Considerations
MicroPeak is designed to be rugged enough for typical
rocketry applications. It contains two moving parts,
the battery holder and the power switch, which were
selected for their ruggedness.
The MicroPeak battery holder is designed to withstand
impact up to 150g without breaking contact (or, worse
yet, causing the battery to fall out). That means it
should stand up to almost any launch you care to try,
and should withstand fairly rough landings.
The power switch is designed to withstand up to 50g
forces in any direction. Because it is a sliding
switch, orienting the switch perpendicular to the
direction of rocket travel will serve to further
protect the switch from launch forces.
=== MicroPeak Programming Interface
MicroPeak exposes a standard 6-pin AVR programming
interface, but not using the usual 2x3 array of pins
on 0.1" centers. Instead, there is a single row of
tiny 0.60mm × 0.85mm pads on 1.20mm centers exposed
near the edge of the circuit board. We couldn't find
any connector that was small enough to include on the
circuit board.
In lieu of an actual connector, the easiest way to
connect to the bare pads is through a set of Pogo
pins. These spring-loaded contacts are designed to
connect in precisely this way. We've designed a
programming jig, the MicroPeak Pogo Pin board which
provides a standard AVR interface on one end and a
recessed slot for MicroPeak to align the board with
the Pogo Pins.
The MicroPeak Pogo Pin board is not a complete AVR
programmer, it is an interface board that provides a
3.3V regulated power supply to run the MicroPeak via
USB and a standard 6-pin AVR programming interface
with the usual 2x3 grid of pins on 0.1" centers. This
can be connected to any AVR programming dongle.
The AVR programming interface cannot run faster than ¼
of the AVR CPU clock frequency. Because MicroPeak runs
at 250kHz to save power, you must configure your AVR
programming system to clock the AVR programming
interface at no faster than 62.5kHz, or a clock period
of 32µS.
[appendix]
== On-board data storage
The ATtiny85 has 512 bytes of non-volatile storage, separate
from the code storage memory. The MicroPeak firmware uses this
to store information about the last completed
flight. Barometric measurements from the ground before launch
and at apogee are stored, and used at power-on to compute the
height of the last flight.
In addition to the data used to present the height of the last
flight, MicroPeak also stores barometric information sampled
at regular intervals during the flight. This is the
information captured with the MicroPeak USB adapter. It can
also be read from MicroPeak through any AVR programming tool.
.MicroPeak EEPROM Data Storage
[options="border",cols="2,1,7"]
|====
|Address |Size (bytes) |Description
|0x000 |4 |Average ground pressure (Pa)
|0x004 |4 |Minimum flight pressure (Pa)
|0x008 |2 |Number of in-flight samples
|0x00a … 0x1fe |2 |Instantaneous flight pressure (Pa) low 16 bits
|====
All EEPROM data are stored least-significant byte first. The
instantaneous flight pressure data are stored without the
upper 16 bits of data. The upper bits can be reconstructed
from the previous sample, assuming that pressure doesn't
change by more more than 32kPa in a single sample
interval. Note that this pressure data is *not* filtered in
any way, while both the recorded ground and apogee pressure
values are, so you shouldn't expect the minimum instantaneous
pressure value to match the recorded minimum pressure value
exactly.
MicroPeak samples pressure every 96ms, but stores only every
other sample in the EEPROM. This provides for 251 pressure
samples at 192ms intervals, or 48.192s of storage. The clock
used for these samples is a factory calibrated RC circuit
built into the ATtiny85 and is accurate only to within ±10% at
25°C. So, you can count on the pressure data being accurate,
but speed or acceleration data computed from this will be
limited by the accuracy of this clock.

BIN
doc/monitor-idle.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

View File

@@ -0,0 +1,18 @@
== Configuration
There is very little that must be configured to make EasyMotor work.
In fact, the default configuration from the factory is typically
sufficient without change.
=== Connecting to a Unit
To change any EasyMotor configuration, you need to attach
a battery and a power switch, then use a micro USB cable
to connect the board to a computer running AltosUI.
=== Changing the Configuration
All available configuration options can be set using the
“Configure Altimeter” menu selection within the AltosUI
program.

Some files were not shown because too many files have changed in this diff Show More