GY-80: BMP085 + 9-Axis Magnetic Acceleration Gyroscope Module

Hardware

The GY-80 board consists of a BMP085, ADXL345, L3G4200D and a HMC5883L.

Figure 1: GY-80 top
Figure 1: GY-80 top
Figure 2: GY-80 bottom
Figure 2: GY-80 bottom

BMP085

The BMP085 is a digital pressure and temperature sensor. It can  easure from 300 to 1100hPa and  as a pressure resolution of 0.01hPa. It can also measure temperature from 0 to 65°C with a resolution of 0.1°C. With both pressure and temperature readings combined the altitude can be calculated.

ADXL345

The ADXL345 is a 3-axis digital accelerometer. The sensors range is user selectable: ±2G, ±4G, ±8G and ±16G. The sensors bandwidth is also user selectable from 1600Hz to 3.125 Hz.

L3G4200D

The L3G4200D is a three-axis digital gyroscope. It has 3 user selectable scales: 250, 500 and 2000 dps.

HMC5883L

The HMC5883L is a 3-axis digital compass. Its full scale range is ±8 gauss.

Software

Because I want to read all the sensors with 1 Arduino I have chosen to communicate with all the sensors via I²C. After searching I came to the conclusion that I was best off using the Adafruit_sensor, Adafruit_ADXL345, Adafruit_BMP085_Unified and the L3G4200 library. The adafruit libraries can be found on: adafruit github and the L3G4200 can be found on: pololu github. I refer to the github pages of the owners of the libraries because that way you get the most up-to-date libraries and I don’t get in license troubles. I’ve written and combined code to make all the sensors work in one sketch. The code can be found here. The next step is to use the sensors data to control a helicopter.

Arduino pro mini 3.3V wireless nRF24L01+ board REV1.2, updated to include REV 1.2.2

The first batch of Arduino pro mini 3.3V wireless nRF24L01+ REV 1.2 boards has finally arrived.

This is the first board I ever designed and a good learning experience. The board was designed with Eagle 6.5 and manufactured by OSH Park. Making the design in Eagle was a bit more complicated then I at first thought it would be, because I couldn’t find any existing library that fulfilled my criteria. So I ended up creating a library for every different component in the design. Because I find that using autorouter in Eagle is quite useful if you have given it good design rules I created my own design rules for the autorouter. The dru file can be found here.

Hardware

The nRF24L01+ board is connected according to the RF24 library, see table 1. The IRQ pin of the nRF24L01+ can easily be disconnected from the D2 pin of the Arduino, this is especially useful because the D2 pin is one of the interrupt pins of the Arduino. The IRQ pin is connected when using a jumper connector on the IRQ connect pins.

Table 1: nRf24L01+ routing.

Signal: RF module pin: Arduino pin:
GND 1 GND
VCC 2 VCC
CE 3 9
CSN 4 10
SCK 5 13
MOSI 6 11
MISO 7 12
IRQ 8 2

As can be seen in Figure 2 the board has a 10 kΩ potentiometer and 4 dip-switches on it. The potentiometer also uses a connection with a jumper connector but now on the Pot connect pins. This means you can also disconnect the potentiometer from the Arduino freeing up the A7 pin. The 4 dip switches are wired to pins D3, D4, D5 and D6.

Figure 1: Render by OSH Park
Figure 1: Render by OSH Pak
Figure 2: Board without nRF24L01+ module and without Arduino
Figure 2: Board without nRF24L01+ module
and without Arduino
Figure 3: Board with nRF24L01+ moudule and Arduino
Figure 3: Board with nRF24L01+ moudule and Arduino

Progamming
The pro mini doesn’t have a built in USB connection, that is why you need some extra hardware to program the Arduino. I use Arduino Uno with the ATmega328 removed from the board, you could also buy an FTDI programmer which aren’t expensive. But if you already have an Arduino Uno lying around its free.


Software

The first thing you need to do is make sure you get a library for the nRF24L01 or nRF24L01+. I personally prefer and use the Rf24 and RF24Network library from maniacbug which can be found here. There are also a few examples that can be found in the library.

Update
On REV 1.2 I unfortunately made a mistake, which renders the dip switches useless. This was because I didn’t check how to properly connect the switches. I”m currently at the end stage of a REV 1.3 where the dip switch problem has been resolved and a few other enhancements where made. If REV 1.3 is finished I will upload them to this blog. REV 1.2 can be found here.

REV 1.2.2 upgrades
The REV 1.2.2 is the improved version of REV 1.2. The dip switches are now correctly connected to the Arduino, but require a 10k 0805 SMD resistor per switch. The IRQ connect and nRF24L01+ connections have switched places to ensure that the v, g, A7 and A6 connections are easily accessible when the nRF24L01+ module has been attached. Also a few minor silkscreen changes have been made. The REV 1.2.2 brd file can be found here.

Top view 1.2.2
Figure 4: Top view 1.2.2
Bottom view 1.2.2
Figure 5: Bottom view 1.2.2