pylon:
The Sensor is connected to the Pins 20 (SDA) and 21 (SCL) to the 3.3V and to GND.
Two problems here:
- Your sensor operates on 3V3 and your arduino is giving him 5V on the I2C lines (the Wire library activates the internal weak pullups). Some sensor may be fried by that, your's seem to be quite tolerant but still you have only the weak pullups (if I remember correctly about 20k).
The internal pull-ups are very weak, with external 4k7 pull-ups to 3V3 the bus will function happily at 3V3, since the lines are pulled up to only 3.5V or so. You can also go and remove the pull-up enabling in twi_init() in twi.c if it bothers you. The pull ups are nominally 30k so are too weak to do any damage.
- If you insert pullups (2k2) to 3V3 you have the correct value for the sensor but you're at the limit (60-70% of VCC means logical 1, so for 5V it's 3V-3V5).
The Arduino input high threshold is guaranteed <= 0.6 Vdd, so is <= 3.0V - this is compatible with 3V3 CMOS signals (just, lower noise immunity but it works). Table 28-1 in the 48/88/168/328 datasheet. Furthermore with the weak pull ups helping the noise margin is 0.5V rather than 0.3V, so it actually helps!
The correct solution is to insert a level converter (Logic Level Converter - Microcontroller Accessories Interface - Boxtec Onlineshop).
For most signals from the Arduino I'd agree, but the I2C bus I claim is an exception. The level converter you link to won't work for the I2C bus though, since its not bi-directional. The I2C bus is open-drain specifically to allow easy-interworking with 5 and 3.3V I believe.