I'm working on a project in which I want to use a variety of sensors which are all compatible with the I2C interface:SHT35, TSL2591, AS7262, SenseAir K30. I'm not too sure what power pin, 3.3V or 5V, I should use to have viable I2C functionality.
The modules and sensor have the following absolute voltage ratings.
SHT35 2.4 - 5V
TSL2591 3.3V or 5V (Breakout board has a 5V to 3.3V voltage regulator)
AS7262 2.6 - 3.7V
K30 5 - 14V
Will using a 3.3v with two 4.7k ohm resistors be sufficient? I'm afraid I'll fry the AS7262 when I use the 5V for pullup.
EDIT: I noticed 3 out of 4 modules I'm getting have I2C pullup resistors on the breakout board (10k), will they still work when I need to add another 4.7k for the module without pullups (K30)? I supose they will but if anyone has more experience with this I'd love to know.
I noticed 3 out of 4 modules I'm getting have I2C pullup resistors on the breakout board (10k), will they still work when I need to add another 4.7k for the module without pullups (K30)?
No, you'll have to remove the pull-ups from the breakout boards. As the K30 doesn't have an I2C interface you should be able to run all sensors on 3.3V. Depending on the type of Arduino you're going to use you might have to modify some libraries. And for the 3.3V pull-ups you should use 3.3kΩ resistors with that many sensors. Keep in mind that the complete I2C bus length shouldn't exceed 50cm, the shorter the better.
Removing restors seems good. I want to connect the K30 to the same I2C interface as the other sensors.
I'm leaning towards using my Uno.
I want to connect the K30 to the same I2C interface as the other sensors.
That's not possible as it doesn't have an I2C interface as I already wrote. That sensor has a serial interface that uses the ModBus protocol but on CMOS logical levels, so you need a level converter for that.
The UNO is a 5V Arduino. The standard Wire library activates the internal pull-up resistors, so the I2C lines are pulled to 5V. With external resistors you might get that to a lower level (about 3.5V) but that might be already to high for some sensors. So it might be necessary to patch the Wire library to deactivate the internal pull-ups.
The Senseair K30 does have an I2C interface, it's just not documented real well.
The K30 specifications can be found here: K30 | Air quality & Gas sensing technology from Senseair
There is a diagram on Page 4 of that specification that shows where the I2C connections can be found on the PCB. You will also find the K30 I2C App Note there.
The K30 does not have any I2C pull ups onboard. External pull-ups should be to 3.3V, not 5V. The I2C interface operates at 100KHz and uses a request/response interface protocol. If you want to read a register, you must first write a "Read RAM/Read EE" command along with the register address. The response will contain the register read data and the completion status. There should be some example K30 I2C code on GitHub.
Perry L Hunt, Sr. Applications Engineer, AKM & Senseair AB