I2C logic level converter
Arduino's and its clones come in many flavours, some work @ 5V others @ 3V3. If you want to communicate over the I2C bus between 2 Arduino's with different voltages you will need to convert the signals to the correct voltage. There are also lots of digital sensors (for example accelerometers, gyroscopes, ...) that are only 3V3 tolerant. You can not connect them to a 5V Arduino. You first need to convert the voltage. I2C uses 2 pins, SDA and SCL. So its easy to hook up a sensor or communicate between Arduino's. You also need to connect the grounds of the Arduino's.
To convert I2C signals we need a bi-directional logic level converter. I2C was invented by Philips, they have written an application note on how to convert I2C signals (see the link to the pdf on the top).
The easy way to convert I2C signals:
Sparkfun sells a logic level converter for less then 2$ -> https://www.sparkfun.com/products/8745 Buy it and hook up your I2C pins and your ready :)
We can of course make it ourself. On page 10 of the Philips application note there is a schematic for a bi-directional logic level converter. I redrew the schematic in Eagle and generated a simple PCB for it. The circuit only uses 4 resistors and 2 small logic level mosfets. I used 2N7000 mosfets and 4 2K2 resistors. Soldered the components and some pins on a small piece of perfboard and now I have a working logic level converter.
I2C is well supported by Arduino. The standard Arduino IDE comes with the wire library, this lib handles the I2C communication. It's not the easiest lib. If you want to keep things simpler there is another lib written that's very easy to implement. See here on the bottom of the page: http://www.gammon.com.au/forum/?id=10896