Look back to the last 3 years
It was a long time ago when I wrote the Results of the test week on Krk island post into the DiveIno blog. It was about how I performed many test dives on Krk Island, Croatia. I took several DiveIno versions with me. These worked well, but I highlighted some enhancement ideas at the end of the blog post. I wanted to further work on those, but life can be tricky, which made me to stop DiveIno development. There are many reasons for that. Let me try to summarize these in this post.
A few weeks later when I came back from Croatia, my wife was hospitalized for about 2 month. She was pregnant with our son. Fortunately everything worked out just fine and my son was born at the end of 2017 August. Both of them were healthy, but for me it was a really difficult time. Having a baby is a great pleasure, but it eliminates your free time, especially when you have a full day job as well.
After a few month spent in our city center apartment in Budapest, we decided to move into a family house at the suburbs of Budapest. We bought an old house and started to renovate. I was also forced to change my profession. It was another hard period of my life. No one helped us and it proved to be too much for me. I had TIA stroke and had to spend some time in the hospital. Fortunately I managed to fully recover since then, but I am not sure that I can go diving once again in my life.
In 2019 summer we finished the house renovation and moved into it. It took another couple of months to get used to our life here. In 2019 spring Covid-19 hit the world and I almost lost my day job, but got a little bit more free time. I had to make a plan about how I shall focus my energies. I sat down and thought through what happened regarding DiveIno in the last 3 years.
I was really motivated when I started the DiveIno project. I had a feeling that it interests other folks as well. That’s why I put together this website. I created a complete documentation about DiveIno in order to help others to get started. I shared the code on GitHub under MIT license, which means you can do whatever you want with it.
I invested lot of money and free time into this project. Hardware - including shipping - costs a lot. You have to buy other parts in order to experiment with it. Of course you need spare parts when something goes wrong. Software development is also costly. You devote your free - and even more - time to it.
Please don’t misunderstand me! I was happy to fund this project and dedicate my free time to it, because I had an internal motivation that I can do it. As a reward all I am looking for is some comments on the blog posts, a few stars on GitHub, some emails and maybe a small community of fellow divers who are interested about this topic. I would have been extremely happy, if someone else built their own DiveIno computer.
At the beginning there were no feedback from the Internet. In the real life, when I took DiveIno with me for a test dive, all other divers considered me as an “alien”. Kornel why do you spend so much effort on building a dive computer when you can go into any dive shop and buy one on the spot? My answer was, because I enjoy the way to make something unusal, which never existed before. I think this is what the maker culture should be about. They didn’t know what I am talking about and I was considered to be a “strange guy”.
After some time - around 2018 - I got some feedback from the Internet. It was even more contradictory. Most of them was not about the DiveIno product itself. They wanted to build something different and they needed my help for that. I was enthusiastic and helpful at the beginning, but when things turned into endless “free” labour I got really disappointed. I wanted to work on DiveIno in my free time not on other projects.
My motivation level was dropped significantly, because of this whole stuff. I put DiveIno on the side after some time. Maybe I made a mistake not advertising DiveIno on the right way, but I would rather spend my time making things then marketing them on the various Internet social channels.
DiveIno parts are built into the OtterBox Pursuit Series 40 dry case. It is not designed to host dive computer parts. Instead it keeps your stuff dry when you are on the beach. Once you close it, there is no simple way to interact with what’s inside. In short there are no physical buttons available for interaction:
- No way to turn DiveIno on and off
- No way to put DiveIno into dive mode
- No way to influence its behaviour under water
I tried to overcome these difficulties with many workarounds:
- Mini Remote Control for navigation
- Magnetic on/off switch and water activation
The Mini Remote Control works, but it has limitations. For instance you have to take it with you to the dive boat. It may not see the TSOP38238 IR Receiver Sensor. The buttons can be sticky. The remote control is not waterproof etc.
The magnetic on/off switch works, but you have to make sure that do not accidentally close it when you are in dive mode.
The water activation switch can activate the dive mode in DiveIno, when the air is very humid. Obviously this is not desired.
In order to charge DiveIno, you have to open the case and plug the charger into the PowerBoost 500 Charger module.
The Logbook and the Dive profile modes are really limited in DiveIno. There is no way to enter the dive location, attach a dive site map or just view more details about your dive. In order to do that the dives have to be downloaded from the device. Then these have to be transformed into UDCF format, which can be digested by divelogs.de. It is quite a tedious process. Plus you just give away your sensitive dive profile data.
These ergonomic problems have a negative impact on the overall user experience.
On top of that with the Arduino Mega 2560 microcontroller board DiveIno is not as responsive as it could be. Arduino Due offers better speed for DiveIno, which means prompt menu item transitions and display of every elapsed second in dive mode.
DiveIno is made of many hardware parts. Honestly it is a bit too much, because it adds complexity to the buildout. DiveIno Arduino Shield version partially solves this problem, because the necessary parts can be soldered onto a PCB board and can be used as an Arduino shield. It also supports Arduino Due, which provides better speed for internal calculations and display management.
However the Arduino Due board is not as stable as the Arduino Mega 2560 microcontroller board. It also consumes more energy.
The energy consumption of the TFT LCD Display Module is high. It has the biggest impact on battery life, because the screen must be always on during the dive. That’s why an OLED version could be much better. Unfortunately there are other problems with this screen module. The reset button on the top side is in an extremely wrong place. It mustn’t be pressed during the dive. I had to disable it on the PCB board. The other problem comes with the increased pressure under water. One of the problem of the OtterBox Pursuit Series 40 dry case is that it doesn’t keep its shape, if the pressure increases. It is not hard engouh for that. Its top side gets further and further pushed down when the pressure growth. It also pushes the LCD screen back down and if the push - the pressure - is too high, the screen becomes unreadable. The solution for this problem is to have a more rigid case - made from aluminium alloy or hard acrylic - or leave enough space between the top of the case and the LCD screen.
The OtterBox Pursuit Series 40 case has many issues. It is not hard enough. It doesn’t keep its shape under water on increased pressure level. The close pins will be rusty over time in sea water. Its sealing is not designed for long time under water usage. The rubber sealing O-ring can easily bend and if that happens the water comes into the case. The same thing will happen if a hairbreadth falls onto the O-ring. Water vapor is also a problem. The case can be overheated on direct sunlight and when it hits the cold water, water vapor gets created. Absorbent sacks application is a must, otherwise the electronics can be damaged. I guess because of these reasons, OtterBox discountinued the manufacturing of the case. Maybe I bought the last one on eBay.
The MS5803-14BA pressure sensor works really well, but on increased pressure some spikes can be expected. It has to be eliminated on the software side.
The Arduino IDE is not made to support complex development projects. Its editor is quite featureless and slow. Sloeber is a much better IDE alternative, but it also has its limitations. It is quite annoying when it starts to beg for money with a pop-up window. Its microcontroller board support is also not that great. Arduino Due sometimes not working and it has the same problem with other newer Arduino boards.
The current UI is not as pretty as it could be. I explained the details in the Graphical Main Menu post. Right now DiveIno uses the UTFT library. A better option would be to use the more standard Adafruit GFX library, but it requires a full UI rewrite.
The current DiveIno version - as it was in 2017 July - can be considered more like a working prototype than a final product, because of these issues. I think it reached the top of the Arduino platform capabilities. This is the maximum, which can be done with the current hardware and software setup.
The question naturally arise Where to go next?. Before I try to answer this question it might worth to gather the necessary improvement areas.
- Faster board
- Better ergonomics - screen design, interaction, overall size
- Better development platform
- Fewer hardware components
- Reduced power consumption - e.g. OLED screen
- Dry case replacement
Of course you can design a custom PCB for all hardware components and a custom waterproof housing, but it equals with a new off the shelf dive computer. I don’t want to go this way. I would like to keep the maker feeling both on hardware and software level.
I think two form factors are possible:
The small version has a watch style apperance. It has reduced capabilities. Just focus on what is needed during the dive. The rest can be done on a different device. The synchronization can happen after each dive or at the end of the day. Think about a basic dive computer and a laptop computer pair.
The large version can have more capabilities. It can be a fully integrated solution with dive planning, analytics, dive site information etc.
When I had time during the last 3 years I tried to solve some of the problems mentioned above with prototyping experiments.
The small form factor version can have such a layout:
The following parts were put onto the breadboard:
- Adafruit Feather M0 Bluefruit LE
- Adafruit Monochrome 1.3” 128x64 OLED graphic display
- Power switch
- One physical button
- SparkFun Pressure Sensor Breakout - MS5803-14BA
The Feather M0 Bluefruit LE board is fast, supports Bluetooth and can charge/powered by a LiPo battery. The OLED graphic display is small and has low power consumption. It works with the Adafruit GFX library.
The one physical button represents the diver interaction. When it get pressed, it can switch DiveIno into dive mode on the surface. During the dive it can be used for interaction with the dive computer.
Unfortunately it turned out that this setup have many limitations:
- The screen is too small. Hard to see it underwater.
- The screen is monochrome. I prefer different colors for different functionality.
- The board is unable to measure battery percentage. It is a must to see when your device runs out of power.
- The development experience on the Feather M0 Bluefruit LE board was quite inconvenient. It is supported by Arduino IDE, but it is not a good chocie for such a project. Sloeber had many problems with it mainly during sketch upload and monitoring.
I thought touch control can significantly improve the DiveIno User Experience. The diver can interact with the dive computer on the surface with just touching some controls on the screen. Before the dive, the device can be put into a watertight case. This concept is used for action cameras like GoPro.
I started the experiment with the following minimal configuration:
This setup has a better screen - unfortunately not OLED - with touch control. It also has a power switch button. The battery percentage display problem is also there, but the board can measure the battery voltage and from that the charge percentage can be calculated with an Arduino library.
The development exeperience issues were still there, so for development I switched over to the following configuration:
- Adafruit 2.8” TFT Touch Shield for Arduino with Capacitive touch
- Arduino Mega 2560
- SparkFun Pressure Sensor Breakout - MS5803-14BA
- Adafruit DS3231 Precision RTC Breakout
The idea was when the software becomes stable, a migration process can happen to the Adafruit Feather M0 Bluefruit LE configuration.
I got really far with the development. The result can be found in the DiveInoTouch repository.
The reason why I dropped this setup was an issue with the Adafruit GFX library. Custom fonts - like the monospace 7 segment font - doesn’t support transparent background. If the numeric values change frequently on the screen - like depth, pressure, time etc. - there is a considerable flicker effect. It makes the UI ugly. I was not the only one who noticed this problem. There was a pull request, which attempts to solve this issue, but it was not merged backed to the Adafruit GFX library codebase.
Another great plus was a custom icon set made only for this version of DiveIno. It can be seen on the following screenshots:
Home Screen for the main navigation menu.
Dive Screen in dive mode with random data.
Gauge Screen to display the current pressure, temperature and date.
Settings Screen to set surface pressure, oxygen percentage, measurement units and turn on/off sound.
Calendar Screen to set the current date and time.
About Screen to display the DiveIno logo and the version number.
When I searched for other development platforms I found the M5Stack ESP32 Basic Core development board. It is based on the ESP32 SoC. It has everything what I need on the hardware level in a small form factor. Battery can be upgraged to the desired level. There is an M5Stack accessory called Development Board Watch Kit, which can be used to make it portable.
The required hardware parts are the followings:
I have the first two parts on stock. The dry case can be developed later.
On the software side Microsoft Visual Studio Code IDE including the PlatformIO extension can be used to program the board with the Arduino programming language. The M5ez Arduino library helps to build a good looking UI. Unfortunately it had the flicker effect, but I fixed it in my pilot project called M5ezWatch.
As a summary it seems to be a really good candidate for the small form factor version of DiveIno.
I decided to pick Raspberry Pi 4 for the large form factor version of DiveIno.
Right now it is just a start. I need more time to experiment with the capabilities of this platform. It is not a microcontroller, but a complete PC running Linux. It offers more possibilies than a single microcontroller board.