This repository shows how to build a Seatalk Autopilot Remote Control device based on an Arduino Pro Micro and a simple 433 MHz KeyFob. It has been tested successfully with different Raymarine autopilots.
My special thanks to users of www.segeln-forum.de for testing.
With the 433 MHz sender you can send -1 / +1 degree and -10 / +10 degrees. With a 6 key KeyFob or an additional one you can also send Auto/Standby commands.
Since version 1.5 the AP remote control reacts also on commands received via USB-Serial interface. Supported commands: "-1", "+1", "-10", "+10", "A" and "S". Both Newline and or CR are accepted at end of command from serial. This interfcae shall allow external applications like AvNav to control the AP functions.
The circuit diagram and the PCB layout are shown in the hardware section of this repository.
I made the PCB available at aisler.net (https://aisler.net/p/LCDCUVMF). Minimum number is three pieces for about 24 EUR. So it makes sense to buy once and share with others interested in the remote control.
The circuit implements mainly an interface between the Seatalk bus (12 Volt) and the Arduino (5 Volt). The easiest way was to use the 74LS07 open collector driver device. This is much easier than most of the other implementations I have seen so far. The PCB also contains the voltage regulator (12-14 Volt from Seatalk bus to 5 Volt for the Arduino) and a 433 MHz receiver. Please select/buy the right ProMicro device (5 Volt). There are also 3.3 Volt devices available. But the 3.3 Volt devices will not work.
Please also select a high quality receiver which fits to the PCB design (RXB6, Superhet). As antenna please use a short wire (e.g. 17,3 cm).
The PCB also allows the connection of a standard OLED device (SSD1306) to show the current apparent wind speed. But this is optional.
The voltage regulator (7805) may get quite hot (90 mA * 9 Volt = 0,81 Watt). This is usually not a problem, because it within the specification of the 7805 (< 1,4 Watt).
An alternative which is not getting hot is the following replacement which has the same pin layout as the 7805: https://www.reichelt.de/de/en/dc-dc-converter-5-v-1-a-single-r-78e50-10-p177268.html?&nbc=1
A standard 4 button 433 MHz KeyFob is used to send (+1 / -1 degree) and (+10 / -10 degrees) course changes to the autopilot. The used Seatalk codes are derived from Thomas Knauf (http://www.thomasknauf.de/rap/seatalk2.htm ). Many thanks for this excellent piece of work.
The software is sending a beep to the Raymarine devices (Seatalk alarm function). This helps to get a feedback regarding the recognition of of a pressed key. The LED on the PCB blinks in addition if keys are successfully recognised. This should also help with trouble shooting. It is also possible to connect an active 5 Volt buzzer to pin 20 (A2) and GND of the ProMicro.
Since version 1.1 it supports now also Auto and Standby remote control. You have to use a 6 button KeyFob or an additional 2 or 4 button remote for controling Auto/Standby function.
MFDs with Lighthose II will react on the Seatalk alarm function with a short beep. Unfortunately, Lighthouse III is ignoring this alarm. If you prefer to use Lighthouse III then please connect an additonal buzzer to pin 20 of the ProMicro.
It seems that there are different types of 7407 devices available with slightly different electrical charcteristics. See issue "R3 wrong value?" for details. If you get a "Send Error" problem (with 12 Volt connected) then the solution is to lower the value of R3. It is important to check two voltages. With Seatalk signal line high (12 Volt) the voltage on pin 3 of 7407 (or alternatively on cathode of D1, which is easier to measure) should be above 2 Volt. When Seatalk pulled to GND (low) the voltage on pin 3 should be less than 0.8 Volt.
It's usually better to use the 74LS07 variant of the device, because it needs less power then the original TTL 7407. Alternatively, you can use also the CMOS version of the 7407 device M74HC07. This device does not consume any relevant current on the input.
The Seatalk communication is a 9 bit serial protocol. This is not directly supported from Arduino. But I found a working 9 bit hardware serial implementation. For convenience, I have added the working source code here, because there are different versions available (in github and elsewhere).
Caution: The 9 bit hardware serial implementaion is depending on the version of the Ardunio IDE and the ProMicro board information. IDE 1.6.13 and board version 1.6.15 are working with the files in "NewHWSworking". Later versions (e.g. 1.8.10) changed the hardware serial implementation and the 9 bit changes will work work with files in "HardwareSerial9bit". For the Leonardo board please use the Arduino AVR Boards version 1.8.3. Since version 1.8.4 the code has changed again and the 9 bit implementation is not working.
For newer IDE versions the three files from "HardwareSerial9bit" (or "NewHWSworking" for older IDE) have to be copied into the Arduino directory on your local PC e.g.: "C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino".
As Arduino board for the ProMicro you can either use the standard Arduino "Leonardo" board information or the ProMicro SparkFun implementation: https://learn.sparkfun.com/tutorials/pro-micro--fio-v3-hookup-guide . Both will work.
Make sure that you install the ProMicro Board Addon using the Board Manager as described in the hookup guide: https://learn.sparkfun.com/tutorials/pro-micro--fio-v3-hookup-guide#windows_boardaddon
The software is using several additional Arduino libraries (RCSwitch, Adafruit_GFX, Adafruit_SSD1306). These libraries have to be downloaded and installed. The easiest way is to add the libraries with the IDE Library Manager.
- https://github.com/sui77/rc-switch
- https://github.com/adafruit/Adafruit-GFX-Library
- https://github.com/adafruit/Adafruit_SSD1306
You should change the four codes in the software to individual random numbers. The same codes have to be copied to the "_433_Programming_New.ino". Only for programming you will also need a 433 MHz sender connected to the ProMicro. I used a ProMicro on a "bread board" to program the codes.
Send each code individually and programm the keys of the remote according to the programming description of your KeyFob. Press "Send" button in serial console for next key.
Key 1 = button A = -1 degree
Key 2 = button B = +1 degree
Key 3 = button C = -10 degrees
Key 4 = button D = +10 degrees
If you use Auto/Standby function you also have to program the two additional buttons accordingly. After programming you can check directly if codes are programmed correctly. Just press the key on the remote and check if the shown value is correct.
Have fun with the remote control.
Please be aware that this repository is only for educational purpose, to learn how to use the Seatalk protocol. Use it on your own risk and do not use it for critical systems in real life environments.
- J1 Connector, AKL 101-03, 3-pin, 5,08 mm Link
- J2 RXB6 433 Mhz receiver Link
- J4 Arduino ProMicro, 5 Volt Link oder Link
- U1 7805 (alternative: 173950578 MagI3C DC-DC Power Module) Link or Link2
- U2 7407N (alternative: 74LS07) Link or Link
- D1 Zenerdiode 5.1 Volt (0.5 Watt) Link
- D2 LED, rot, 3 mm Link
- R1,R5 Resistor 10 KOhm, 1/4 watt Link
- R2 Resistor 68 KOhm, 1/4 watt Link
- R3 Resistor 27 KOhm, 1/4 watt Link
- R4 Resistor 270 Ohm, 1/4 watt Link
Optional:
For programming: 433MHz transmitter Link or Link2
Remote Control (KeyFob): Link or Link2 or Link3
- Version 1.5 - 16.12.20: Added command receive from USB-Serial to allow control from AvNav.
- Version 1.4 - 28.11.20: Changed R2 and R3 back to 68 KOhm / 27 kOhm. 6.8 KOhm would impact the Seatalk high voltage level too much.
- Version 1.4 - 27.11.20: Changed R2 and R3 to 6.8 KOhm to eliminate problems with some 74LS07 devices (see issue "R3 wrong value?" for details).
- Version 1.4 - 27.07.20: Use of millis() funtion to avoid delay() and timer counter in loop(). Improved detection of 433MHz keys.
- Version 1.3 - 13.12.19: Added definition for certain OLED displays that require this to work properly.
- Version 1.2 - 21.09.19: Added buzzer support on pin 20 (active 5 Volt buzzer works without additional transistor).
- Version 1.1 - 03.08.19: Added support for Auto and Standby (Key 5 and 6).
- Added new programming code (_433_Programming_New.ino) to simplify programming of KeyFob without recompiling and upload for each key.