OpenWave : Development of an Open-Source and Low-cost wave sensor

Post #1 (2nd February 2019)

This blog post will document the process of developing a wave sensor which I’m calling OpenWave for use on data buoys such as the one shown below:


Ocean wave measurement has a wide range of applications including weather forecast model validation, warning systems for extreme weather events, testing a locations suitability for wave energy harvesting as well as wave measurement for the design specification of sea structures such as oil rigs, piers, lighthouses etc.

There are currently several commercially available wave sensors on the market. The issue is they are prohibitively expensive, costing around ten thousand euros which is too much for many academic and commercial uses. The hardware of the sensors is relatively inexpensive but the proprietary algorithms developed by the manufacturers effectively allows them to set the price. The goal of this project is to develop a wave sensor and make the hardware and software open-source.

I have written a literature review which investigates the academic articles and general information surrounding IMU wave sensing devices. Several people have written academic articles detailing their use of low-cost 9DOF(Degrees of Freedom) devices to measure waves, proving that it is indeed possible. 9DOF IMU sensors contain three seperate sensors, an accelerometer, a gyroscope and a magnetometer.  The accelerometer measures acceleration, the gyroscope measures angular velocity and the magnetometer measures the earths magnetic field. Each of these sensors is sensitive to 3 separate axes giving a total of 9 axes of measurement. A great video which goes into more detail about why 9 Degrees of Freedom are necessary for stable orientation measurement is available here. One study looking at low cost inertial wave measurement detailed a wave sensor made using an arduino and a cheap 9DOF IMU sensor and compared it to a commercially available sensor with extremely high cross correlation between both sensors. Unfortunately the people that performed this study only disclosed their results but kept the algorithms they used private. They have now gone on to sell a commercial product using the algorithms they developed. Which I think is actually quite encouraging for this project!

The literature review is available to view here.

Investigation of IMU sensing modules

After researching various 9DOF IMU modules available such as the MPU-6050 or the MPU-9250 it became clear that the sensor fusion was going to be an extremely laborious part of the project. Sensor fusion refers to combining the accelerometer, gyroscope and magnetometer data to allow for a stable AHRS (Attitude and Heading Reference System). An interesting development in recent years has been the inclusion of a DMP (Digital Motion Processor) in IMU chips. The idea being that some of the calculations required could be done on the IMU chip itself instead of having a separate processor do all of the sensor fusion. Both the MPU-6050 and the MPU-9250 include DMPs but they only perform sensor fusion on the accelerometer and gyroscope data, leaving the magnetometer data up to the external processor to handle. Then I came across a fairly new development, which is 9DOF modules with a built in arm processor that does all of the sensor fusion and spits out meaningful data over I2C. One such example is the BNO55 and it outputs the following data :

  • Absolute Orientation (Euler Vector, 100Hz) Three axis orientation data based on a 360° sphere
  • Absolute Orientation (Quaterion, 100Hz) Four point quaternion output for more accurate data manipulation
  • Angular Velocity Vector (100Hz) Three axis of ‘rotation speed’ in rad/s
  • Acceleration Vector (100Hz) Three axis of acceleration (gravity + linear motion) in m/s^2
  • Magnetic Field Strength Vector (20Hz) Three axis of magnetic field sensing in micro Tesla (uT)
  • Linear Acceleration Vector (100Hz) Three axis of linear acceleration data (acceleration minus gravity) in m/s^2
  • Gravity Vector (100Hz) Three axis of gravitational acceleration (minus any movement) in m/s^2
  • Temperature (1Hz) Ambient temperature in degrees celsius

Developing a wave sensor is going to be complicated enough without the added overhead of trying to manually implement kalman filters and perform sensor fusion on a seperate processor. The BNO55 will save a significant amount of software development time. Adafruit sell a breakout board for it which I have ordered and expect to arrive early next week.

Project Timeline:

I’ve spent the past few days researching various IMU modules and have settled on the BNO55. The breakout board has been purchased and will be here in the next few days. As the gantt chart below indicates I will use this time before the breakout arrives to prepare a rotating arm (like the one shown in image below) to aid in testing the wave measurement algorithms.

Example Image of Rotating Arm

Click for full size image:


Project Timeline Gantt Chart

The aim is to have the rotating arm built by the time the BNO55 breakout board arrives. This means I can get testing straight away. I’ve allowed one day for connecting the BNO55 to a processor, getting everything talking etc. From there the initial proof of concept algorithm development will begin which I’ve allowed one week for. This will include attempting to measure “wave height” which in this case should be the diameter of the rotating atm and also wave direction. These two initial parameters are just to make sure that the BNO55 is indeed capable of doing the job required. I’ll go into the rest of the timeline in the next post as at this early stage it is likely to change.

Posted in OpenWave | Tagged , , , | 2 Comments

Laser Cutting Circuit Diagrams In Plywood Using Inkscape


This circuit diagram was designed in Inkscape with all of the electrical symbols taken from the WikiMedia commons electrical symbol library. It’s got transistors, voltage sources, LEDs, resistors etc all in SVG format.

There are a few steps in Inkscape to convert a circuit diagram to something that can be laser cut.

Step 1: Convert everything to a path using the stroke to path option (found in path>stroke to path). Take a look at these pictures to get an idea of what this does.

Take these two images, they both look the same in normal view mode, but viewing them in ‘outline’ mode is effectively what the laser cutter works off.



This example is just a resistor taken from the wikimedia commons library and line attached to either end of the resistor. The lines are red just so you can differentiate them from the resistor. Notice in the stroke only image its a single line which is not what we want. We want to cut out the outline of the shape – the stroke to path option does this.

We’re not home free yet though – if you look at the stroke to path outline image you can see where the lines and resistor meet are still seperate entities. We want to combine them into a single line. This is done using the ‘union’ tool found in path>union. You can only select two items at a time to ‘union’ together so doing a whole circuit diagram is a little tedious. Take a look at the image below to see what the image looks like after the ‘union’ tool has been applied:


That’s it! circuit diagram is now good to laser cut. union-ex









Circuit diagram viewed in ‘outline’ mode:



Circuit diagram viewed in ‘normal’ mode:


Click Here to download SVG of circuit diagram

Posted in how to, Inkscape, laser cutter | Tagged , , | Leave a comment

Laser Cut Mount for PS3 Eye Toy and Laser Line Scanner

A few years ago I made a 2d line scanner using a webcam and a laser. It worked pretty well but two major improvements needed were the addition of a line laser as opposed to a dot and using a camera with a higher framerate. For version 2 of this project I went with the ps3 eye toy camera which can do 60FPS at 640×480 px or 120FPS at 320×240 px. The camera cost around 10 euros including postage from ebay. The line laser was also bought from ebay for a few euros. It is just a laser diode with a lens which turns the laser into a line. I wanted to design a mount that would hold the camera and laser as well as allow for easy rotation for scanning of rooms etc. The 3D model of the mount was designed in google sketchup and then exported to Inkscape for laser cutting. See below for pictures of the finished mount:


Here is the exported inkscape SVG files:

SVG file available for download here

I made some changes to the design in Inkscape so the 3D model doesn’t match the 2D laser cutting plans. Hopefully I’ll get this up and running in the next week or two. Updates to follow!

Posted in Hardware, laser cutter, Robots, Uncategorized | Tagged , , , , | 2 Comments

Bare bones programming of the TM4c123G ARM Cortex m4 microcontroller

This post will document one possible way of getting an LED blinking with the tm4c123g microcontroller. I’ll be using the TIVA C Launchpad for this example:



A toolchain is needed to compile and link our code. I used this one:
I’m running windows atm so to install this just download and run the .exe and add the bin folder to the path directory and it’s good to go.

For this example I downloaded the TivaWare peripheral driver C library which contains functions for things like setting the clock speed and accessing GPIO pins etc. Download it here

A program to flash the micro is also needed. I went with the LMFLASH PROGRAMMER utility made by TI. It comes with a GUI or you can use the command line. Download it here:
The GUI is nice and simple – pretty similar to the standalone pickit programmer gui.

There is a really handy github repo available here that has a basic blink led example and a makefile. You’ll need the TivaWare library mentioned above to use it.

Step 1:
clone/download the example git repo to your computer. Some slight modification of the makefile is needed, mainly change the TIVAWARE_PATH variable to wherever you installed the TivaWare library. On my computer it’s C:\ti\TivaWare_C_Series-

Step 2:
Compile the example code to make a .bin file, ready to be flashed to the uC. To do this, go to the example just downloaded from github and run ‘make’. It will compile and link the code and store the .bin file in a folder called ‘build’

Step 3:



Open up the LMFLASH programmer utility. Under the ‘configuration’ tab select the TM4C123G Launchpad and then go to the ‘program’ tab where you will be asked to select the .bin file we just made. Hit program and if all goes well you should see the red led on the board flashing! (you may need to hit the reset button first)

Posted in ARM, Development Boards, Hardware, how to, Microcontrollers | Tagged , , , , , | 2 Comments