The software side of this project provides various front-end applications for the hardware team to enable data creation and data visualization. The GUI and the Interactive Underwater Submarine Simulator are the two sources providing four data inputs. The data gets encoded and sent to dsPIC33EP64GS502 microcontroller via UART using the FTDI board. On the receive side, the error correction schemes Golay and Hamming are applied to the data. The data is then shown on the GUI as well as being plotted in real time using Matplotlib.

Packet Generation (GUI)

The graphical user interface helps the user control how the packets get created and allows them to choose which error correcting algorithms to use. The user is able to input decimal, hex, and binary values into the confidence, distance, heading, depth and task fields which make up the entire packet. The user can also choose to get the data from the simulator or a random generating packet script. The full and individual pieces of the packet can be seen on the right hand side of the GUI

Packet Generation (Simulator)

The robo sub simulator allows the user to generate real time data as they collect the coins in the water. The GUI captures this information and forms a packet.

Live Data Plotting

As the data gets updated from the GUI or simulator, the receive side will display the live data. This information includes confidence, heading, depth, distance (from mother sub) and tasks completed.

Communication Overview

The dsPIC microcontroller on the send side initiates the communication by sending a "Request to Send" signal to the PC. The PC receives this signal and fetches the packet from either the GUI or the robo sub simulator. Once the packet is obtained it is sent down the dsPIC where it gets stored into a memory buffer. From here the packet is sent across the water using FSK ( implemented by the hardware team ). The packet is then reconstructed on the receiving dsPIC. Once the full packet is obtained it is sent up to the PC to get passed through the error correcting algorithms.


The GUI and packet encoding/decoding are written in python. Some libraries used are tkinter (for GUI), matplotlib(for graphing), and ftd2xx(for communication with FTDI chip).