= 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.
