<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.engineersofinnovation.nl/index.php?action=history&amp;feed=atom&amp;title=Height_sensors</id>
	<title>Height sensors - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.engineersofinnovation.nl/index.php?action=history&amp;feed=atom&amp;title=Height_sensors"/>
	<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=Height_sensors&amp;action=history"/>
	<updated>2026-09-20T10:53:28Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=Height_sensors&amp;diff=341&amp;oldid=prev</id>
		<title>Aran Dokoupil: /* The sensors */</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=Height_sensors&amp;diff=341&amp;oldid=prev"/>
		<updated>2026-08-17T21:12:22Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;The sensors&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 21:12, 17 August 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l39&quot;&gt;Line 39:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 39:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== The sensors ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== The sensors ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;We use &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;cheap &lt;/del&gt;'''DYP A02''' RS-485 ultrasonic sensors. The sensor does all the timing itself: it is a Modbus RTU slave that answers a register read with a distance in millimetres, so the interface board never sees a raw echo.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;We use '''DYP A02''' RS-485 ultrasonic sensors. The sensor does all the timing itself: it is a Modbus RTU slave that answers a register read with a distance in millimetres, so the interface board never sees a raw echo.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://www.dypcn.com/uploads/A02-Datasheet.pdf A02 datasheet]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://www.dypcn.com/uploads/A02-Datasheet.pdf A02 datasheet]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Aran Dokoupil</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=Height_sensors&amp;diff=340&amp;oldid=prev</id>
		<title>Aran Dokoupil at 21:12, 17 August 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=Height_sensors&amp;diff=340&amp;oldid=prev"/>
		<updated>2026-08-17T21:12:04Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 21:12, 17 August 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The '''height sensors''' measure the distance between the hull and the water surface, which is what tells the crew and the [[Autopilot]] — how high the boat is flying on its [[Foils|foils]]. Two ultrasonic sensors look down at a slight angle outward from the nose of the hull. They are not read directly by anything: a dedicated RS485-to-[[CAN-bus|CAN]] interface board polls them and rebroadcasts each reading on the bus, where the [[Dashboard|display]],  [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Autopilot&lt;/del&gt;]], and the [[Datalogger|datalogger]] pick it up.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The '''height sensors''' measure the distance between the hull and the water surface, which is what tells the crew and the [[Autopilot]] — how high the boat is flying on its [[Foils|foils]]. Two ultrasonic sensors look down at a slight angle outward from the nose of the hull. They are not read directly by anything: a dedicated RS485-to-[[CAN-bus|CAN]] interface board polls them and rebroadcasts each reading on the bus, where the [[Dashboard|display]],  [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;autopilot&lt;/ins&gt;]], and the [[Datalogger|datalogger]] pick it up.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[File:Height-Controller.jpeg|thumb|The RS485-to-CAN interface board that polls the height sensors]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[File:Height-Controller.jpeg|thumb|The RS485-to-CAN interface board that polls the height sensors]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Aran Dokoupil</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=Height_sensors&amp;diff=339&amp;oldid=prev</id>
		<title>Aran Dokoupil at 21:11, 17 August 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=Height_sensors&amp;diff=339&amp;oldid=prev"/>
		<updated>2026-08-17T21:11:54Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 21:11, 17 August 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The '''height sensors''' measure the distance between the hull and the water surface, which is what tells the crew &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;— &lt;/del&gt;and &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;eventually &lt;/del&gt;the [[Autopilot]] — how high the boat is flying on its [[Foils|foils]]. Two ultrasonic sensors look &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;straight &lt;/del&gt;down from the nose of the hull. They are not read directly by anything: a dedicated RS485-to-[[CAN-bus|CAN]] interface board polls them and rebroadcasts each reading on the bus, where the [[Dashboard|display]] and the [[Datalogger|datalogger]] pick it up.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The '''height sensors''' measure the distance between the hull and the water surface, which is what tells the crew and the [[Autopilot]] — how high the boat is flying on its [[Foils|foils]]. Two ultrasonic sensors look down &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;at a slight angle outward &lt;/ins&gt;from the nose of the hull. They are not read directly by anything: a dedicated RS485-to-[[CAN-bus|CAN]] interface board polls them and rebroadcasts each reading on the bus, where the [[Dashboard|display]]&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;,  [[Autopilot]], &lt;/ins&gt;and the [[Datalogger|datalogger]] pick it up.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[File:Height-Controller.jpeg|thumb|The RS485-to-CAN interface board that polls the height sensors]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[File:Height-Controller.jpeg|thumb|The RS485-to-CAN interface board that polls the height sensors]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Aran Dokoupil</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=Height_sensors&amp;diff=338&amp;oldid=prev</id>
		<title>Aran Dokoupil at 21:10, 17 August 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=Height_sensors&amp;diff=338&amp;oldid=prev"/>
		<updated>2026-08-17T21:10:33Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 21:10, 17 August 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The '''height sensors''' measure the distance between the hull and the water surface, which is what tells the crew — and eventually the [[Autopilot]] — how high the boat is flying on its [[Foils|foils]]. Two ultrasonic sensors look straight down from the nose of the hull. They are not read directly by anything: a dedicated RS485-to-[[CAN-bus|CAN]] interface board polls them and rebroadcasts each reading on the bus, where the [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Instrumentation Panel&lt;/del&gt;|display]] and the [[Datalogger|datalogger]] pick it up.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The '''height sensors''' measure the distance between the hull and the water surface, which is what tells the crew — and eventually the [[Autopilot]] — how high the boat is flying on its [[Foils|foils]]. Two ultrasonic sensors look straight down from the nose of the hull. They are not read directly by anything: a dedicated RS485-to-[[CAN-bus|CAN]] interface board polls them and rebroadcasts each reading on the bus, where the [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Dashboard&lt;/ins&gt;|display]] and the [[Datalogger|datalogger]] pick it up.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[File:Height-Controller.jpeg|thumb|The RS485-to-CAN interface board that polls the height sensors]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[File:Height-Controller.jpeg|thumb|The RS485-to-CAN interface board that polls the height sensors]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Aran Dokoupil</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=Height_sensors&amp;diff=334&amp;oldid=prev</id>
		<title>Aran Dokoupil at 18:45, 17 August 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=Height_sensors&amp;diff=334&amp;oldid=prev"/>
		<updated>2026-08-17T18:45:00Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 18:45, 17 August 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The '''height sensors''' measure the distance between the hull and the water surface, which is what tells the crew — and eventually the [[Autopilot]] — how high the boat is flying on its [[Foils|foils]]. Two ultrasonic sensors look straight down from the nose of the hull. They are not read directly by anything: a dedicated RS485-to-[[CAN-bus|CAN]] interface board polls them and rebroadcasts each reading on the bus, where the [[Instrumentation Panel|display]] and the [[Datalogger|datalogger]] pick it up.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The '''height sensors''' measure the distance between the hull and the water surface, which is what tells the crew — and eventually the [[Autopilot]] — how high the boat is flying on its [[Foils|foils]]. Two ultrasonic sensors look straight down from the nose of the hull. They are not read directly by anything: a dedicated RS485-to-[[CAN-bus|CAN]] interface board polls them and rebroadcasts each reading on the bus, where the [[Instrumentation Panel|display]] and the [[Datalogger|datalogger]] pick it up.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[File:Height-Controller.jpeg|thumb|The RS485-to-CAN interface board that polls the height sensors]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== At a glance ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== At a glance ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l47&quot;&gt;Line 47:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 49:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Interface board ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Interface board ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[File:Height-Controller.jpeg|thumb|The RS485-to-CAN interface board that polls the height sensors]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The board is the Altium project &amp;lt;code&amp;gt;AKD-CAN_Interface&amp;lt;/code&amp;gt;. It is the '''same PCB as the e-paper dashboard''' in the cockpit — that board fits a display on SPI2 where this one fits the RS-485 channels. The height-sensor unit itself lives under the deck, a little forward of the throttle near the pilot cabin.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The board is the Altium project &amp;lt;code&amp;gt;AKD-CAN_Interface&amp;lt;/code&amp;gt;. It is the '''same PCB as the e-paper dashboard''' in the cockpit — that board fits a display on SPI2 where this one fits the RS-485 channels. The height-sensor unit itself lives under the deck, a little forward of the throttle near the pilot cabin.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Aran Dokoupil</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=Height_sensors&amp;diff=333&amp;oldid=prev</id>
		<title>Aran Dokoupil: /* Interface board */</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=Height_sensors&amp;diff=333&amp;oldid=prev"/>
		<updated>2026-08-17T18:42:12Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Interface board&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 18:42, 17 August 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l69&quot;&gt;Line 69:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 69:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Each channel is one half-duplex transceiver (TI '''SN65HVD3088E''', 20 Mbit/s, 1/8 unit load) running from the board's '''5 V''' rail, with DE and RE tied together so the part either drives or listens. The microcontroller runs at 3.3 V, so the transceiver's receiver output and the detect line both present 5 V logic to it — every pin in the table above is a 5 V-tolerant FT pin&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, which is why this is allowed rather than merely lucky&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Each channel is one half-duplex transceiver (TI '''SN65HVD3088E''', 20 Mbit/s, 1/8 unit load) running from the board's '''5 V''' rail, with DE and RE tied together so the part either drives or listens. The microcontroller runs at 3.3 V, so the transceiver's receiver output and the detect line both present 5 V logic to it — every pin in the table above is a 5 V-tolerant FT pin.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;'''Note:''' the schematic symbol is named &amp;lt;code&gt;ISL83078E&amp;lt;/code&gt;, but the BOM's part choice is the TI &amp;lt;code&gt;SN65HVD3088E&amp;lt;/code&gt;. Both are 5 V, 8-pin, pin-compatible RS-485 transceivers, so the sheet is right either way — but check the fitted part before quoting a datasheet number.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Sensor connector ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Sensor connector ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Aran Dokoupil</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=Height_sensors&amp;diff=332&amp;oldid=prev</id>
		<title>Aran Dokoupil: /* Interface board */</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=Height_sensors&amp;diff=332&amp;oldid=prev"/>
		<updated>2026-08-17T18:41:22Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Interface board&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 18:41, 17 August 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l49&quot;&gt;Line 49:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 49:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[File:Height-Controller.jpeg|thumb|The RS485-to-CAN interface board that polls the height sensors]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[File:Height-Controller.jpeg|thumb|The RS485-to-CAN interface board that polls the height sensors]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The board is the Altium project &amp;lt;code&amp;gt;AKD-CAN_Interface&amp;lt;/code&amp;gt;. It is the '''same PCB as the e-paper dashboard''' in the cockpit — that board fits a display on SPI2 where this one fits the RS-485 channels. The height-sensor unit itself lives under the deck, a little forward of the throttle near the pilot cabin&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, not in the cockpit&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The board is the Altium project &amp;lt;code&amp;gt;AKD-CAN_Interface&amp;lt;/code&amp;gt;. It is the '''same PCB as the e-paper dashboard''' in the cockpit — that board fits a display on SPI2 where this one fits the RS-485 channels. The height-sensor unit itself lives under the deck, a little forward of the throttle near the pilot cabin.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== RS-485 channels ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== RS-485 channels ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Aran Dokoupil</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=Height_sensors&amp;diff=331&amp;oldid=prev</id>
		<title>Aran Dokoupil: Created page with &quot;The '''height sensors''' measure the distance between the hull and the water surface, which is what tells the crew — and eventually the Autopilot — how high the boat is flying on its foils. Two ultrasonic sensors look straight down from the nose of the hull. They are not read directly by anything: a dedicated RS485-to-CAN interface board polls them and rebroadcasts each reading on the bus, where the display and the...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=Height_sensors&amp;diff=331&amp;oldid=prev"/>
		<updated>2026-08-17T18:39:57Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;The &amp;#039;&amp;#039;&amp;#039;height sensors&amp;#039;&amp;#039;&amp;#039; measure the distance between the hull and the water surface, which is what tells the crew — and eventually the &lt;a href=&quot;/wiki/Autopilot&quot; title=&quot;Autopilot&quot;&gt;Autopilot&lt;/a&gt; — how high the boat is flying on its &lt;a href=&quot;/wiki/Foils&quot; title=&quot;Foils&quot;&gt;foils&lt;/a&gt;. Two ultrasonic sensors look straight down from the nose of the hull. They are not read directly by anything: a dedicated RS485-to-&lt;a href=&quot;/wiki/CAN-bus&quot; title=&quot;CAN-bus&quot;&gt;CAN&lt;/a&gt; interface board polls them and rebroadcasts each reading on the bus, where the &lt;a href=&quot;/wiki/Instrumentation_Panel&quot; title=&quot;Instrumentation Panel&quot;&gt;display&lt;/a&gt; and the...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;The '''height sensors''' measure the distance between the hull and the water surface, which is what tells the crew — and eventually the [[Autopilot]] — how high the boat is flying on its [[Foils|foils]]. Two ultrasonic sensors look straight down from the nose of the hull. They are not read directly by anything: a dedicated RS485-to-[[CAN-bus|CAN]] interface board polls them and rebroadcasts each reading on the bus, where the [[Instrumentation Panel|display]] and the [[Datalogger|datalogger]] pick it up.&lt;br /&gt;
&lt;br /&gt;
== At a glance ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Height sensing summary&lt;br /&gt;
|-&lt;br /&gt;
! Property !! Value&lt;br /&gt;
|-&lt;br /&gt;
| Sensors || 2 × DYP A02 ultrasonic, RS-485 / Modbus RTU&lt;br /&gt;
|-&lt;br /&gt;
| Reading || Distance to the water surface, in millimetres&lt;br /&gt;
|-&lt;br /&gt;
| Sensor positions || As far forward as possible, port and starboard of the hull nose&lt;br /&gt;
|-&lt;br /&gt;
| Update rate || 8 Hz per sensor (16 Hz combined, staggered)&lt;br /&gt;
|-&lt;br /&gt;
| Interface board || RS485-to-CAN interface, STM32L471RGT6 — 4 channels, 2 in use&lt;br /&gt;
|-&lt;br /&gt;
| Board location || Under the deck, just forward of the [[Throttle|throttle]], near the pilot cabin&lt;br /&gt;
|-&lt;br /&gt;
| Bus || CAN 2.0A, 1 Mbit/s, 11-bit standard identifiers&lt;br /&gt;
|-&lt;br /&gt;
| CAN identifiers || &amp;lt;code&amp;gt;0x011&amp;lt;/code&amp;gt; front left, &amp;lt;code&amp;gt;0x012&amp;lt;/code&amp;gt; front right&lt;br /&gt;
|-&lt;br /&gt;
| Application type || &amp;lt;code&amp;gt;0x02&amp;lt;/code&amp;gt; — its address in the bootloader protocol&lt;br /&gt;
|-&lt;br /&gt;
| Firmware || Rust, &amp;lt;code&amp;gt;embassy&amp;lt;/code&amp;gt;, binary &amp;lt;code&amp;gt;height-sensor-controller&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Firmware source || &amp;lt;code&amp;gt;firmware/&amp;lt;/code&amp;gt; in the [https://github.com/Engineers-of-Innovation/eoi-can eoi-can] monorepo&lt;br /&gt;
|-&lt;br /&gt;
| Hardware source || Altium project &amp;lt;code&amp;gt;AKD-CAN_Interface&amp;lt;/code&amp;gt; (Altium 365)&lt;br /&gt;
|-&lt;br /&gt;
| Field update || Over CAN, no debug probe needed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== The sensors ==&lt;br /&gt;
&lt;br /&gt;
We use cheap '''DYP A02''' RS-485 ultrasonic sensors. The sensor does all the timing itself: it is a Modbus RTU slave that answers a register read with a distance in millimetres, so the interface board never sees a raw echo.&lt;br /&gt;
&lt;br /&gt;
* [https://www.dypcn.com/uploads/A02-Datasheet.pdf A02 datasheet]&lt;br /&gt;
* [https://www.dypcn.com/uploads/A02-Output-Interfaces.pdf A02 output interfaces]&lt;br /&gt;
&lt;br /&gt;
Both sensors are mounted as far forward as they fit, one to port and one to starboard of the nose, pointing down at the water. Each one passes through the hull on a '''miniature 5-pin Binder connector''' which is watertight even when unmated, so a sensor can be unplugged without opening the hull up. Wire colours for that harness are listed on the [[Foils]] page.&lt;br /&gt;
&lt;br /&gt;
'''What the number means.''' It is the raw distance from the sensor face to whatever the ultrasonic pulse hit — nothing more. It is not corrected for pitch, roll or sensor offset, and a wave crest passing under the nose reads as the boat dropping. Treat it as a ride-height indication, not a calibrated altitude.&lt;br /&gt;
&lt;br /&gt;
== Interface board ==&lt;br /&gt;
[[File:Height-Controller.jpeg|thumb|The RS485-to-CAN interface board that polls the height sensors]]&lt;br /&gt;
&lt;br /&gt;
The board is the Altium project &amp;lt;code&amp;gt;AKD-CAN_Interface&amp;lt;/code&amp;gt;. It is the '''same PCB as the e-paper dashboard''' in the cockpit — that board fits a display on SPI2 where this one fits the RS-485 channels. The height-sensor unit itself lives under the deck, a little forward of the throttle near the pilot cabin, not in the cockpit.&lt;br /&gt;
&lt;br /&gt;
=== RS-485 channels ===&lt;br /&gt;
&lt;br /&gt;
The schematic repeats one RS-485 channel sheet four times, so there are '''four identical sensor channels''', numbered 2 to 5 after the USART each one lands on. The firmware only uses two of them.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ RS-485 channel allocation&lt;br /&gt;
|-&lt;br /&gt;
! Channel !! USART !! TX !! RX !! DIR (DE) !! Detect !! Used for !! CAN ID&lt;br /&gt;
|-&lt;br /&gt;
| 2 || USART2 || PA2 || PA3 || PA1 || PA0 || Height sensor front '''left''' || &amp;lt;code&amp;gt;0x011&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 3 || USART3 || PC4 || PC5 || PB1 || PB2 || Height sensor front '''right''' || &amp;lt;code&amp;gt;0x012&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 4 || UART4 || PC10 || PC11 || PA15 || PA12 || ''unused'' || &amp;lt;code&amp;gt;0x013&amp;lt;/code&amp;gt; (reserved)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || UART5 || PC12 || PD2 || PB4 || PB5 || ''unused'' || &amp;lt;code&amp;gt;0x014&amp;lt;/code&amp;gt; (reserved)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each channel is one half-duplex transceiver (TI '''SN65HVD3088E''', 20 Mbit/s, 1/8 unit load) running from the board's '''5 V''' rail, with DE and RE tied together so the part either drives or listens. The microcontroller runs at 3.3 V, so the transceiver's receiver output and the detect line both present 5 V logic to it — every pin in the table above is a 5 V-tolerant FT pin, which is why this is allowed rather than merely lucky.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' the schematic symbol is named &amp;lt;code&amp;gt;ISL83078E&amp;lt;/code&amp;gt;, but the BOM's part choice is the TI &amp;lt;code&amp;gt;SN65HVD3088E&amp;lt;/code&amp;gt;. Both are 5 V, 8-pin, pin-compatible RS-485 transceivers, so the sheet is right either way — but check the fitted part before quoting a datasheet number.&lt;br /&gt;
&lt;br /&gt;
=== Sensor connector ===&lt;br /&gt;
&lt;br /&gt;
One 5-contact M8 female panel-mount connector per channel.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Pin !! Signal !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Sensor supply || '''5 V.''' Selected by a 0603 link: one jumper to 5 V, an alternative to 24 V. Fit '''one''' — populating both shorts 5 V to 24 V.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || RS-485 A / Y ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || RS-485 B / Z ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Presence detect || 100 kΩ pull-up to 5 V. Pull to ground to signal &amp;quot;sensor connected&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GND ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''This is the board's own pin order.''' It is not necessarily the order of the Binder connector in the hull, and it is not the A02's own cable colour code — check the harness rather than assuming the numbering carries across.&lt;br /&gt;
&lt;br /&gt;
=== Power and bus ===&lt;br /&gt;
&lt;br /&gt;
24 V arrives on the [[CAN-bus]] connector through a resettable PTC fuse (30 V, 100 mA hold) and feeds two Würth fixed step-down modules, one producing 5 V for the RS-485 side and one producing 3.3 V for the microcontroller. The CAN transceiver is an MCP2542FD. The safety line passes straight through between the two CAN connectors and is not connected to the microcontroller, so this board neither reads nor breaks the safety circuit.&lt;br /&gt;
&lt;br /&gt;
=== Board temperature ===&lt;br /&gt;
&lt;br /&gt;
A Würth WSEN-TIDS sensor on I²C2 (PB10/PB11, address &amp;lt;code&amp;gt;0x3F&amp;lt;/code&amp;gt;) reports the PCB temperature once per second on &amp;lt;code&amp;gt;0x210&amp;lt;/code&amp;gt;, in hundredths of a degree. This is a board health measurement — it is how you tell whether the sealed compartment under the deck is cooking.&lt;br /&gt;
&lt;br /&gt;
== How the firmware reads them ==&lt;br /&gt;
&lt;br /&gt;
Each sensor is a Modbus RTU slave at address &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;, spoken to at '''9600 baud, 8 data bits, no parity, 2 stop bits'''. One read is a single holding register at &amp;lt;code&amp;gt;0x0101&amp;lt;/code&amp;gt;, and the response is the distance in millimetres.&lt;br /&gt;
&lt;br /&gt;
Sending the request is what starts the ultrasonic ping, so the request and the measurement are the same event. A read normally completes in about 100 ms, which is also used as the response timeout.&lt;br /&gt;
&lt;br /&gt;
'''The two sensors are never pinged at the same time.''' A sequencer alternates front-left, front-right, front-left, … and only starts the next sensor once the previous read has finished, because two overlapping ultrasonic pings at the front of the hull can hear each other and produce a plausible but wrong distance. When reads complete promptly the sequencer paces itself to a 62.5 ms slot, giving 8 Hz per sensor and 16 Hz combined; if reads run to the full timeout the combined rate falls back toward 10 Hz on its own.&lt;br /&gt;
&lt;br /&gt;
Before each request the receive buffer is drained, so a late response from a previous timed-out read cannot be mistaken for the current one.&lt;br /&gt;
&lt;br /&gt;
The presence-detect pin is sampled first. If it reads high the channel is reported as &amp;lt;code&amp;gt;NotPluggedIn&amp;lt;/code&amp;gt; and no Modbus traffic is generated at all. Any failure to build, send, receive or parse the Modbus frame reports &amp;lt;code&amp;gt;ModbusError&amp;lt;/code&amp;gt;. In both cases the height field is sent as 0 — '''0 mm is not a measurement''', always read the state byte first.&lt;br /&gt;
&lt;br /&gt;
== CAN messages ==&lt;br /&gt;
&lt;br /&gt;
The board joins the bus at 1 Mbit/s with 11-bit identifiers. All multi-byte fields are little-endian.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Frames the height-sensor board sends&lt;br /&gt;
|-&lt;br /&gt;
! ID !! Message !! DLC !! Rate&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x011&amp;lt;/code&amp;gt; || HeightSensorFrontLeft || 3 || every 125 ms&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x012&amp;lt;/code&amp;gt; || HeightSensorFrontRight || 3 || every 125 ms&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x035&amp;lt;/code&amp;gt; || Bootloader response || 2–8 || on request only&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x210&amp;lt;/code&amp;gt; || TemperatureHeightSensorsController || 2 || every 1 s&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0x013&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;0x014&amp;lt;/code&amp;gt; are reserved for the two unused channels and are not transmitted.&lt;br /&gt;
&lt;br /&gt;
=== 0x011 and 0x012 — height sensor reading ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Byte !! Field !! Type !! Values&lt;br /&gt;
|-&lt;br /&gt;
| 0 || State || u8 enum || 0 = NotPluggedIn, 1 = ModbusError, 2 = Operational, 0xFF = Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 1–2 || Height || u16 LE || Distance to the water surface in mm. 0 whenever the state is not Operational.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 0x210 — TemperatureHeightSensorsController ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Byte !! Field !! Type !! Values&lt;br /&gt;
|-&lt;br /&gt;
| 0–1 || Board temperature || i16 LE || Hundredths of a degree Celsius. 2500 = 25.00 °C.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Received ===&lt;br /&gt;
&lt;br /&gt;
The application uses an accept-all hardware filter and ignores everything that does not concern it. The only frames it acts on are the bootloader ones: the discovery broadcast &amp;lt;code&amp;gt;0x030&amp;lt;/code&amp;gt;, its own command identifier &amp;lt;code&amp;gt;0x031 + (0x02 − 1) × 3 = 0x034&amp;lt;/code&amp;gt;, and firmware write data on &amp;lt;code&amp;gt;0x036&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Firmware update over CAN ==&lt;br /&gt;
&lt;br /&gt;
The first 80 KB of flash holds a CAN bootloader, so the board can be updated without pulling it out from under the deck. It owns application type &amp;lt;code&amp;gt;0x02&amp;lt;/code&amp;gt;, which gives it the identifier block &amp;lt;code&amp;gt;0x034&amp;lt;/code&amp;gt; (command) / &amp;lt;code&amp;gt;0x035&amp;lt;/code&amp;gt; (response) / &amp;lt;code&amp;gt;0x036&amp;lt;/code&amp;gt; (write data); the bootloader's hardware filter rejects every other block, so a command aimed at another board cannot touch this one.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
eoi-flash-tool scan                                        # what is on the bus?&lt;br /&gt;
eoi-flash-tool flash height-sensor-controller              # target comes from the ELF&lt;br /&gt;
eoi-flash-tool --board height-sensor-controller version    # which build is on it?&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The protocol, the flash layout and the addressing scheme are shared with the other boards and are documented in full on the [[Rudder controller]] page.&lt;br /&gt;
&lt;br /&gt;
== Diagnostics ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Reading the board without a debugger&lt;br /&gt;
|-&lt;br /&gt;
! Symptom !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| Green LED toggling once per second || Application running normally&lt;br /&gt;
|-&lt;br /&gt;
| Red LED double-flashing || Sitting in the bootloader, waiting or flashing&lt;br /&gt;
|-&lt;br /&gt;
| No LED activity || No power, or a boot hang&lt;br /&gt;
|-&lt;br /&gt;
| State byte 1 (ModbusError) || No valid reply within 100 ms. Sensor unpowered, A/B swapped, broken cable, or a flooded sensor.&lt;br /&gt;
|-&lt;br /&gt;
| State byte 0 (NotPluggedIn) || Detect pin reads high, so the connector is seen as empty&lt;br /&gt;
|-&lt;br /&gt;
| Height plausible but frozen || The sensor is answering with a stale value; power-cycle the channel&lt;br /&gt;
|-&lt;br /&gt;
| On the bus but dropping frames || Suspect the 16 MHz crystal. The firmware falls back to the internal oscillator, whose ±1 % accuracy is not good enough for 1 Mbit/s.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A 4-second independent hardware watchdog is petted once per second by the heartbeat task, so wedged firmware resets itself instead of sitting silent on the bus. Detailed logging is available over SWD through &amp;lt;code&amp;gt;defmt&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A sensor can be exercised on the bench without any hardware: &amp;lt;code&amp;gt;firmware/tools/height_sensor_sim.py&amp;lt;/code&amp;gt; pretends to be the Modbus slave on a USB RS-485 adapter, with a fixed or swept distance.&lt;br /&gt;
&lt;br /&gt;
== Known gaps ==&lt;br /&gt;
&lt;br /&gt;
* '''Half the channels are unused.''' Channels 4 and 5 are fitted and wired, and &amp;lt;code&amp;gt;0x013&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;0x014&amp;lt;/code&amp;gt; are allocated to them, but no position on the boat has been decided yet, so no firmware reads them.&lt;br /&gt;
* '''The detect pin's pull direction is contradictory.''' The board pulls the line up to 5 V through 100 kΩ, so an empty connector should read high — but the firmware also enables the microcontroller's internal pull-down on that pin. That pull-down is 40 kΩ typical (25–55 kΩ), which drags the line to somewhere around 1.4 V, below the input threshold, so an absent sensor is likely to be reported as &amp;lt;code&amp;gt;ModbusError&amp;lt;/code&amp;gt; rather than &amp;lt;code&amp;gt;NotPluggedIn&amp;lt;/code&amp;gt;. The pin wants no internal pull at all — the microcontroller datasheet requires the internal pulls to be disabled on any pin held above VDD anyway. Worth confirming on the bench.&lt;br /&gt;
* '''No filtering.''' Each frame is one ping. There is no averaging, no rate limiting and no outlier rejection, so single bad echoes go straight onto the bus. Any smoothing has to happen in the consumer.&lt;br /&gt;
* '''The bus-wide reference is out of date.''' [https://github.com/Engineers-of-Innovation/eoi-can/blob/main/CAN_MESSAGES.md CAN_MESSAGES.md] still describes the height field as &amp;quot;raw, unit undecided&amp;quot;. The firmware sends millimetres. This page follows the firmware.&lt;br /&gt;
* '''The rotary switch is not read.''' A sealed 4-bit hex switch is fitted and wired, but no firmware uses it. It was presumably intended for a node address or a variant selection.&lt;br /&gt;
* '''No temperature compensation.''' The speed of sound varies with air temperature by roughly 0.17 % per °C, which is about 2 mm per °C at a 1 m range. The A02 is left to its own internal compensation, whatever that is.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Foils]] — what the ride height is measured for, and the sensor harness wire colours&lt;br /&gt;
* [[Autopilot]] — the intended consumer of these readings&lt;br /&gt;
* [[CAN-bus]] — bus wiring, cable pinout and the bus-wide identifier map&lt;br /&gt;
* [[Rudder controller]] — sister board, and the full bootloader protocol&lt;br /&gt;
* [[Instrumentation Panel]] — where the readings are displayed&lt;br /&gt;
* [[Datalogger]] — where they are recorded&lt;br /&gt;
* [[Altium PCB]] — house PCB design conventions&lt;/div&gt;</summary>
		<author><name>Aran Dokoupil</name></author>
	</entry>
</feed>