Foils
The foils of the solar boat is a system that is comprised of the following:
- Wing design
- Foil assembly
- Autopilot
A small overview is given below what any of these signify in the hydrofoils.
Wing design
The wing design is based on the calculation of the airfoil database website: http://airfoiltools.com/plotter/index
From this database an implementation has been made into matlab to tweak some parameters as well as a plot for generating the wing shape.
The matlab scripts are on the git and can be found here.
Foil assembly
The foil assembly connects the wing to the foil mast and then to the hull of the boat.
Autopilot
The autopilot is the control electronics that controls the servos of the foil assembly. This a signal PCB with that measures the angle of the solar boat and adjust accordingly towards keeping the hull above the water.
Height sensors
We use ultrasonic height sensors for sensing distance between water and our hull. Currently we use cheap A02 RS485 sensors from DYP.
Datasheets can be found https://www.dypcn.com/uploads/A02-Datasheet.pdf and https://www.dypcn.com/uploads/A02-Output-Interfaces.pdf
Data from this sensor is being processed by our RS485 to CAN interface.
Pinout
| Pin# | Wire Colour | Signal on wire |
|---|---|---|
| 1 | Blue | |
| 2 | Black | |
| 3 | White | |
| 4 | Brown | |
| 5 | Gray |
CAN Messages
All multi-byte values are little-endian. Any state byte not listed maps to Unknown on the receiver side.
| Message | CAN ID | DLC | Byte | Field | Type | Values / Range |
|---|---|---|---|---|---|---|
| ServoRudderSetpoint | 0x010 | 2 | 0–1 | Setpoint | u16 LE | 1000–2000 |
| HeightSensorFrontLeft | 0x011 | 3 | 0 | State | u8 enum | 0=NotPluggedIn, 1=ModbusError, 2=Operational, 0xFF=Unknown |
| 1–2 | Height value | u16 LE | distance in mm | |||
| HeightSensorFrontRight | 0x012 | 3 | 0 | State | u8 enum | 0=NotPluggedIn, 1=ModbusError, 2=Operational, 0xFF=Unknown |
| 1–2 | Height value | u16 LE | distance in mm | |||
| HeightSensor (placement TBD) | 0x013 | 3 | 0 | State | u8 enum | 0=NotPluggedIn, 1=ModbusError, 2=Operational, 0xFF=Unknown |
| 1–2 | Height value | u16 LE | distance in mm | |||
| HeightSensor (placement TBD) | 0x014 | 3 | 0 | State | u8 enum | 0=NotPluggedIn, 1=ModbusError, 2=Operational, 0xFF=Unknown |
| 1–2 | Height value | u16 LE | distance in mm | |||
| ServoRudderStatus | 0x020 | 3 | 0 | State | u8 enum | 0=Uninitialized, 1=Operational, 0xFF=Unknown |
| 1–2 | Current setpoint | u16 LE | 1000–2000 | |||
| ServoRudderCommand | 0x021 | 1 | 0 | Command | u8 enum | 0=Initialize |