An Arduino Time-Lapse Camera Using ArduCam
This Article is written by one of our customer, the original article can be found from here.
AN ARDUINO TIME-LAPSE CAMERA USING ARDUCAM
While experimenting with my pinhole cameras, I did a lot of thinking about capturing and displaying the passage of time. Day and night, the change of seasons, sunrise, sunset, moonrise, moonset, tides, rush hour, busy times at restaurants, even life and death marks the passage of time.
There are plenty of commercially-available time-lapse photography devices. These require either an AC power source, a solar panel or a beefy battery, expensive photography equipment, and are large and easy to spot. Between the size and the expense, this strongly limits the duration of time lapse I would be able to take even if such a device wasn’t prone to being stolen by the first philistine that came across it. My goal is to make the smallest, most energy efficient and least expensive camera possible so that I am free to set them everywhere and see what the passage of time shows me.
To do this, I decided to give ArduCam a try.
Actually, I found ArduCam pretty disappointing and difficult to use for a few reasons:
- The open source libraries don’t use any modern version control system like GitHub. They’re just a few files. What’s more, they fail to compile under Linux without changing the
#includestatements to correct for case-sensitivity.
- While the ArduCam website shows full-resolution images pulled from “supported” camera modules, the ArduCam Rev. B shield is unable to take bitmap images greater than 320 by 240 pixels because it has only a 3 megabit buffer. For cameras with on-board JPEG compression it is able to take higher-resolution images, but they come out looking fuzzier than a Georgia peach because they must be made to fit in the buffer. If these images were indeed taken with an ArduCam shield, they weren’t done with any code made available on their website.
- The first “supported” camera I bought, the MT9D111, failed to take any worthwhile picture at any resolution. I was only able to get it working with the OV2640 module.
|Sample image taken with the “supported” MT9D111 camera using an example from the open-source ArduCam code.|
- Arduino Uno Rev. 3
- ArduCam Rev. B Shield
- OV2640 Camera Module
- 2GB MicroSD Card
- 4 AA batteries
Assembly is positively trivial. Everything just fits together. Build time is under a minute.
Note that while the ArduCam board can be made to work with the Arduino Mega, it requires some rewiring because the pinouts are not exactly the same. The power efficiency could have been improved somewhat with a DC step-down buck converter, but I decided against doing this because even if the power efficiency was greater the image resolution was unacceptable.
The first iteration of my code simply took a picture, then waited a minute using
delay before taking another, repeating until the camera ran out of battery. This managed to take 364 bitmap images until it ran out of juice. Thesecond iteration of my code made use of the Sleep_n0m1 library to place the Arduino in sleep mode and wake it up each minute. I had hoped that this would improve battery life substantially, but instead it managed only to take 370 images before running out of battery.
avconv -f image2 -i %08d.BMP output.avi
Overall, this was an enlightening exercise but it’s clear that if I want a very long-term and reasonably high-quality time lapse photo solution, the platform for that is not going to be ArduCam.