Low cost autonomous underwater camera for long term deployments
Functional diagram of the pipecam
x-fritzing-fzz - 7.81 kB - 03/29/2018 at 11:35
The main script that handles taking of photos
x-python - 4.11 kB - 03/29/2018 at 11:10
A Fritzing schematic of a Pi Zero + Arduino Nano combo concept for future use.
x-fritzing-fzz - 40.31 kB - 03/29/2018 at 11:36
I recently got a chance to drop the project in a tank filled with West Coast rock Lobster at the local research aquarium during feeding time. The camera was set to do 15min videos overnight.
Here is a timelapse made from the first 15min of footage:
While I'm still busy with the low power electronics, I'm trying to use the camera to get a feel for the capabilities and limitations... and to figure out how to make it user friendly.
So over the last weekend I did two ~5hour drops, both from about 10:00 to 15:00 for the best lighting.
The first was a 30sec interval time-lapse at the entrance of a small cave.
About two hours into the deployment, an octopus discovers the camera, fiddles with it and points it into the cave. Which is both delightful and frustrating. The time-lapse misses most of the action. The pipecamera does not deal with low light conditions that well at this stage :\
In case you missed it, here is the culprit:
The rest of the photos taken are very dark, fortunately there are some interesting fish hiding in the cave, but it's too dark to do a time-lapse of these photos. I will consider rather setting the exposure to 'auto' in the future to deal with such... interferances.
The second deployment was done from 10:30 - 15:30.
Because I missed so much action in the time-lapse the day before, I decided to just go with continuous video.
I placed the camera under a small overhang looking out to a small rocky outcrop. The camera eventually shifts in the surge, which is the reason for the skew video later on. I will need to look into adding a bit more weight in the future.
At first I thought the footage was pretty boring, but the problem with having 5 hours of footage is that you just skip through it, often missing some of the fun stuff that are only a few seconds long. The little outcrop actually got quite a few visitors.
After a second round of looking at the results (on recommendation from my video journalist wife), here are some of the highlights:
A school of fish visiting the deployment:
A cuttlefish hunting past the frame (LOVE IT):
Below I took a about a 10min snippet over two videos and converted it into a time-lapse. This is the kind of footage I'm interested in getting more of:
Here is some results and comments on the first overnight deployment.
Details and findings:
* 7-19 * * * script.py >> output.txt
And here is a video of the results:
Now for some bench tests before we put it in the water again.
Dylan and I completed a rush V1.5 as described in the previous log.
The new version sports a flashy transparent housing, but is essentially still the same concept with upgraded parts.
The internal mounting has also been changed so that the on/off switch and recharge port is accessible by only removing the lens.
The next phase of the project is just to hammer it: Test it as much as possible, tweak settings, refine user interaction and push the housing to see what it's actual limits in the water are. We will construct a second camera to test this phase. One of my continuing questions is whether we need to do video or time-lapse: The short answer is "it depends"
As an intro in this phase I dropped the pipecam into a local kelp forest for a bit to test the new video modes (Take ~15min videos very 15mins).
A short clip from the results of this test:
Next test is hopefully a week deployment in a marina?
Four main things have become clear from the first set of tests.
1. Power will need to be increase/managed
The sealed lead acid battery is a cheap but bulky solution. The 12V 2.4Ah battery costs about R130. I have the space to easily double up on that battery, so that gives me 12V ~4.8Ah for about R260. BUT I can get a power bank with a similar form factor at 5V with 10 Ah of capacity at a prices of ~R270 PLUS I don't need the DC regulator board. So it's a bit of a no-brainer. I'll be swapping over to a lithium ion power bank.
I have also decided to change from the Raspberry Pi 3, to the Pi Zero W to clamp down on the overhead. This means a loss of 4xUSB slots, which I will need to recover with an external USB hub which may mean a little bit of a extra power penalty.
2. Storage space needs to be increased
Good video chows space. No way around it. I need to beef up my storage capacity to match the battery endurance. Time-lapse operations are a lot easier on storage, but video needs to be of good to maximum quality to make it worth it. My preference so far is the SanDisk Cruzer Blade flash drives, because of the small size and ease with which it can be removed from the Raspberry Pi after operations. I also like that they come in way-out colours, which make them easy to ID.
3. Housing need further tests
A minor/slow leak was found on the housing during the second test. Luckily the internals were protected by the internal mounting which lifts the electronics off the bottom. I have my suspicions on what is causing the leak.
I handed over the housing over to Dylan (the mechanical wiz and partner in the project) for testing and he will be building the a new housing while I focus on some software and electronics.
4. The Raspberry Pi V2 module is NOT robust
Part of the reason why I'll be looking at the electronics: Looks like I fried a V2 camera module, even after taking care to handle it as little as possible. I will need to look into having a case 3D printed. The board itself is notoriously prone to static and has a rather fiddly ribbon cable. The board sports a crypto-chip to discourage cheap clones, which I can forgive to an extent. Still- for ~R400 it is still hard to beat. It's strike one for the module. I've had to order a new module, hopefully I can refine my design so that there is even less interaction with the board and it can prove that it's still the best choice for the project.
For the first water test I've set the camera to 2 photos per minute and deployed it for about an 1 hour in ~2m of water (at a beach close by). Where I tested the camera there are LOTS of octopus, so they made for good subjects.
The small 2.4Ah lead acid battery can do around ~5 hours with the current configuration.
Being impatient I moved the camera around a few times, but this turned out to be good for the tests.
Below are some of the results:
And here is a time lapse:
Notes and issues:
Moving forward (the immediate future).
Do another test:
There has been considerable progress in this project. This is mainly because I have been asking for help (who knew).
The new housing allows for a great seal and easy access to the electronics. The key to the progress has been the PVC union used to hold the lens and letting go of the tethered idea. The pipe used is still the 110mm waste pipe, but the new heavy duty fittings has given me the confidence that this project will perform the way mechanically as I hoped.
Summary of what has changed since the last log
The parts (costs in South African Rands)
I approached a friend for help. I gave him the housing and within and hour he had it rigged up and was pressure testing the housing.
These tests revealed a few things:
1. The housing- as is does not leak.
2. The housing could hold 2bar of pressue
3. The 5mm perspex lens leaked when pushed beyond 2bar
4. A 10mm lens was cut, it held 4 bar no problem.
4 bar is good enough for what I need.
From my last field test I learned that I need to pay more attention to the internal mountings of the units.
Here is some of the work I've done on the software side to get the project to alpha testing:
Here are two photos to compare a raspistill and python-picam photo:
Default photo taken from python-picam:
Photo taken using the raspistill command (exposure mode set to 'beach')
It's already obvious that there is a need for more power and better power management. A slightly longer housing will suit more batteries better.
Internal mountings should NOT be overlooked as easy. I will consider a small distribution board to tidy up the wiring and mount the RTC in a sensible way. The current internal cradle is made from hardboard, but a plastic or perspex one would be nice.
For power management I would include a Arduino via I2C to the raspberry pi to give current and voltage reading from the battery. The Arduino could then control the interval of switching the Raspi ON/OFF. The Arduino can also sport an LDR to only switch pi if the light levels are sufficient.
On the software I would make a simple web page displaying the following diagnostics:
Software also need to be able to handle low power states and full disk events
The pipecam is ready for a set of Alpha tests. I had to stop myself from throwing it in the water straight away. The dry test will help correct the photography and...Read more »
The housing is one of the two key parts of this project: the "underwater" part of "underwater camera".
Here I've failed a few times already. This log aims to show the failures and explain how they were tested and why they failed, specifically looking at the lens interface.
These are mostly jumbled thoughts with many typos and grammar mistakes.
The first idea was to use an off-the-shelf, screw-on access stopend for the lens on the one end and a female stopend on the other.
Then, to create a seal I made an o-ring. Making a custom o-ring is actually pretty easy. In this case I bought an o-ring from the pool section at a local hardware store and cut it to the length I needed for it to fit. I then used a drop of superglue to tack the two ends together. Hold in place for a few seconds and you should have a surprisingly robust o-ring.
The housing is then suppose to close with the o-ring seating under the lens, held in place by the screw on cap.
This approach *might* work with a smaller o-ring.
For my second attempt at a housing I swapped the end caps around, using the female stopend as a lens holder.
I drilled the female stopend with a hole saw.
I the glued the perspex lens to the drilled stopend with PVC-weld and then glued the assembly the pipe with some pressure to clamp the lens tight to create the seal.
I then glued on the threaded access stopend to the back and used black silicon glue as a sealant, and screwed it on to create the back seal. I use black glue because it's easier to see where I've missed a spotted when cleaning the thread after opening it.
Housing 2 was used for a field testing on land while housing 3 was being brainstormed. The field test actually revealed that there is still a lot of thing to consider with regards to how the Raspberry Pi and electronics will be mount internally.
Here is a discussion on my choice of camera by means of looking at some failures of previous attempts.
Originally I tried to hack a second-hand digital camera's buttons and controls to IO pins of an Arduino or Raspberry Pi.
Camera makes I've taken apart in my attempts:
Of these makes, I found the Canon & Fuji the easiest to open up and work with.
I've decided that using a raspberry pi with python would be a easier approach for me, because I already have the background. For this, I considered the following:
This project would allow pretty much full control of the camera over USB with some commands. Gphoto is a great option if you already have a secondhand camera that is supported by the package. I decided not to go that direction because of the variability in what secondhand cameras I would be able to find and would prefer to get something pretty standard and reliable.
Easy to integrate into a Raspberry Pi, or network, but usually they are grainy and don't deal with low light very well. The fact that you can pick them up for really cheap, makes it appealing, but the image quality becomes close to unusable.
Projects like OpenROV have had great success with decent webcams. I tried sourcing the camera used in the OpenROV project, the Genius WideCam, locally, without much luck. I was told by some dealers that this was considered 'old stock' and will be discontinued in their stores. So considering availability and price, I decided that this would not be the route to go.