Somewhere along the way, I spent a several weeks designing and redesigning alternative buoy shapes in CAD. I started at version V03 and ended up working my way to version V10, but I always came across the same issues…limited space inside the buoy meant I had to limit the number of onboard sensors. I had initially planned to use an Arduino Due as the brains of the project since it had a faster clock speed and larger memory compared to the standard Uno board. I also liked the idea that the Due ran at 3.3V for low power consumption which would translate to longer battery life for greater deployment times. However I could not get the Due to work with I2C when connected to my IMU so I gave up and decided to use an older Mega 2560 I had lying around which seemed to work.
But the Mega took up a large amount of space inside the small buoy and it needed at least 6 volts to operate (ideally 7-12V) and I really didn’t need all the extra pins. Ignoring the voltage issue for the moment, I had also planned to eventually integrate solar panels into the project to prolong battery life and had purchased a 3.7V 6600 mAh Li-po battery and solar charger circuit from Adafruit. Finally, I had a Sodaq GPRS Bee module to transmit the temperature and wave height data back to shore over a cellular network; Doran Beach in Northern California has cellphone reception at least a 1/4 mile off the coast so this would be a good location for ocean testing. All of these components made it pretty crammed inside the small 150mm diameter sphere, and I still planned to incorporate GPS, an Xbee for short range radio communication, an IMU, temperature sensor, lights, salinity sensor and maybe even a color sensor.
Obviously there were better solutions. Ideally I would find a microcontroller that ran at 3.3V for low power consumption, had built in solar charging capabilities, and could easily connect to a cellular network for data transfer. I had previously seen the Sodaq Moja, a microcontroller based on the Atmel 328P chip with onboard flash memory and grove slots for quick and easy sensor wiring. But the Moja was almost as large as the Mega and I was not a big fan of the standard groove connectors since I wanted to use sensors from other vendors and was looking for a platform with more prototyping flexibility.
Then, out of the blue, the awesome people as Sodaq sent me an email and offered to mail me one of their new products to test, the Sodaq Ndogo. The microcontroller was designed by Gregory Knauff and built around the Atmel Mega 1284P chip. Best of all, it has everything I was looking for already built into a small compact package. The Ndgo runs on 3.3V with a clock speed of 8Mhz, has a built in solar and Li-po charging circuit with two JST plugs, plenty of digital and analog pins for my application (but not as many as the Mega, but it has 9 digital and 7 analog plus two UARTS, I2C and SPI special pins to access the GSM/GRPS module ), and comes with a SIM800H quad-band GSM/GPRS radio and SIM card slot already mounted on the board.
The team at Sodaq has a series of libraries and examples to help you get started with the Ndogo (and their other boards) and in general the majority of the Arduino sketches seem to be plug and play. You will need to install special hardware files for the Arduino IDE to be able to communicate with the Ndogo, and I had to install FTDI drivers on my macbook pro running OS X Yosemite before the Ndogo USB port would show up. One think to keep in mind is that the Ndogo runs at 8MHz, so there may be some timing issues when sending large amounts of data at high speeds. There is a special SodaqSoftSerial.h library for the Ndogo, and initially I had problems integrating this with the Adafruit GPS module sketches. Being at a slower clock speed, the Ndogo would miss bits of data when printing all of the GPS data to the serial monitor. After working with Gabriel from Sodaq, we figured that increasing the Ndogo SodaqSoftSerial buffer size helped reduce the error. Afterwards I also realized I didn’t really need all the data streaming from the GPS module and was able limit the data stream to half the number of characters. These two fixes solved the problem for me, but there are also several other suggestions online for this specific problem if you have similar issues.
First impressions, once I had the Ndogo up and connected to the computer it was fairly straight forward to use. Thus far I’ve tested it with an Xbee, LSM9DS0 IMU from Adafruit, GPS module, analog temperature sensor, and the standard RGB LEDS. The smaller footprint and low power consumption is great for remote data logging projects and it fits perfectly inside my latest buoy design. I have not yet tested the SIM800H GSM/GPRS capabilities yet, but will update this post once I do.
Big thanks to the Sodaq team for letting me test their latest board, it is the perfect microcontroller for the wave measurement buoy!