Initial Commit - Copy from Altus Metrum AltOS
5
doc/.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
*.html
|
||||
*.pdf
|
||||
*.raw
|
||||
*.adoc
|
||||
map-loading.svg
|
383
doc/Makefile.am
Normal 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) > $@
|
BIN
doc/MicroPeakUSB-2.0-inuse.jpg
Normal file
After Width: | Height: | Size: 511 KiB |
BIN
doc/MicroPeakUSB-2.0.jpg
Normal file
After Width: | Height: | Size: 457 KiB |
19
doc/RELNOTES
Normal 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
439
doc/altosdroid.inc
Normal 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
@@ -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
After Width: | Height: | Size: 14 KiB |
354
doc/altusmetrum-oneline.svg
Normal 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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
After Width: | Height: | Size: 54 KiB |
250
doc/companion.txt
Normal 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
@@ -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
@@ -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
After Width: | Height: | Size: 129 KiB |
BIN
doc/configure-altosui.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
doc/configure-groundstation.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
doc/configure-pyro.png
Normal file
After Width: | Height: | Size: 62 KiB |
26
doc/dedication.inc
Normal 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
After Width: | Height: | Size: 54 KiB |
BIN
doc/device-selection.png
Normal file
After Width: | Height: | Size: 14 KiB |
11
doc/easymega-outline.txt
Normal 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"]
|
BIN
doc/easymega-v1.0-bottom.jpg
Normal file
After Width: | Height: | Size: 1.3 MiB |
BIN
doc/easymega-v1.0-top.jpg
Normal file
After Width: | Height: | Size: 554 KiB |
126
doc/easymega.inc
Normal 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
@@ -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
@@ -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
@@ -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"]
|
||||
|
129
doc/easymini-release-notes.inc
Normal 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
After Width: | Height: | Size: 665 KiB |
33
doc/easymini.svg
Normal 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
@@ -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
@@ -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
After Width: | Height: | Size: 785 KiB |
BIN
doc/fire-igniter.png
Normal file
After Width: | Height: | Size: 7.7 KiB |
4
doc/fix-html
Executable file
@@ -0,0 +1,4 @@
|
||||
#!/bin/sh
|
||||
sed -i \
|
||||
-e 's/<[?]xml [^>]*>//' \
|
||||
-e 's/<!DOCTYPE [^>]*>//' "$@"
|
89
doc/flight-data-recording.inc
Normal 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.
|
BIN
doc/fonts/DejaVuSansMono-Bold.ttf
Normal file
BIN
doc/fonts/DejaVuSansMono-BoldOblique.ttf
Normal file
BIN
doc/fonts/DejaVuSansMono-Oblique.ttf
Normal file
BIN
doc/fonts/DejaVuSansMono.ttf
Normal file
BIN
doc/fonts/OpenSans-Bold.ttf
Normal file
BIN
doc/fonts/OpenSans-BoldItalic.ttf
Normal file
BIN
doc/fonts/OpenSans-ExtraBold.ttf
Normal file
BIN
doc/fonts/OpenSans-ExtraBoldItalic.ttf
Normal file
BIN
doc/fonts/OpenSans-Italic.ttf
Normal file
BIN
doc/fonts/OpenSans-Light.ttf
Normal file
BIN
doc/fonts/OpenSans-LightItalic.ttf
Normal file
BIN
doc/fonts/OpenSans-Regular.ttf
Normal file
BIN
doc/fonts/OpenSans-Semibold.ttf
Normal file
BIN
doc/fonts/OpenSans-SemiboldItalic.ttf
Normal file
71
doc/frequency-cal.inc
Normal 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
@@ -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
After Width: | Height: | Size: 102 KiB |
BIN
doc/graph-map.png
Normal file
After Width: | Height: | Size: 2.9 MiB |
BIN
doc/graph-stats.png
Normal file
After Width: | Height: | Size: 112 KiB |
BIN
doc/graph.png
Normal file
After Width: | Height: | Size: 207 KiB |
43
doc/handling.inc
Normal 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
@@ -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
After Width: | Height: | Size: 50 KiB |
58
doc/images/icons/caution.svg
Normal 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 |
57
doc/images/icons/important.svg
Normal 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
@@ -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
@@ -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 |
65
doc/images/icons/warning.svg
Normal 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
@@ -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
@@ -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
@@ -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
After Width: | Height: | Size: 45 KiB |
BIN
doc/launch-pad.png
Normal file
After Width: | Height: | Size: 73 KiB |
64
doc/load-maps.inc
Normal 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
After Width: | Height: | Size: 559 KiB |
30
doc/make-am-html
Executable 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
@@ -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
@@ -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
After Width: | Height: | Size: 51 KiB |
BIN
doc/micropeak-back.jpg
Normal file
After Width: | Height: | Size: 907 KiB |
BIN
doc/micropeak-device-dialog.png
Normal file
After Width: | Height: | Size: 9.9 KiB |
BIN
doc/micropeak-dime.jpg
Normal file
After Width: | Height: | Size: 1.3 MiB |
BIN
doc/micropeak-download.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
doc/micropeak-flight-foam.png
Normal file
After Width: | Height: | Size: 86 KiB |
BIN
doc/micropeak-flight-nofoam.png
Normal file
After Width: | Height: | Size: 96 KiB |
BIN
doc/micropeak-foam.jpg
Normal file
After Width: | Height: | Size: 798 KiB |
BIN
doc/micropeak-graph-configure.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
doc/micropeak-graph.png
Normal file
After Width: | Height: | Size: 85 KiB |
224
doc/micropeak-nofont.svg
Normal 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 |
199
doc/micropeak-oneline-font.svg
Normal 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
@@ -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 |
BIN
doc/micropeak-preferences.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
doc/micropeak-raw-data.png
Normal file
After Width: | Height: | Size: 84 KiB |
BIN
doc/micropeak-save-dialog.png
Normal file
After Width: | Height: | Size: 9.9 KiB |
BIN
doc/micropeak-statistics.png
Normal file
After Width: | Height: | Size: 51 KiB |
561
doc/micropeak.txt
Normal 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
After Width: | Height: | Size: 63 KiB |
18
doc/motortest-configuration.inc
Normal 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.
|
||||
|