Pulse Oximeter MAX30100 / MAX30102 is a cheap one and quite popular among hobbyists. Unfortunately, the cheapest module boards (which are sold by thousands on Aliexpress) contain a fatal error. I’ll tell you how to fix it.
Everything I said below applies equally to the new MAX30102 modules and old modules with discontinued MAX30100 chip since they are assembled on the same boards.
If you ordered the board shown in Fig. 1 – my congratulations, you have problems with power circuits. The sensor chip requires two separated supply voltages:
- 1,8V for ADC and sensor logic (1,7V – 2,0V)
- 3,3V for green and IR LEDs of sensor (3,1V – 5,25V)
Carefully look at the circuit of the module (Fig. 2). It involves two linear voltage regulators – U2 and U3. The first one make a + 3.3V from + 5V (or simply passes through the power supply + 3.3V). The second regulator is connected to the output of the first and generates supply voltage + 1.8V. It would seem that everything is correct? Really?
Now take a closer look at the pull-up resistors 4.7k for SCL, SDA and INT signal lines (a thick red line). They are connected to the supply + 1.8V!!! If such a module is connected to a 5V logic of Arduino board – it will not be visible on the I2C bus because the logic levels are too low. However, even with a 3V logic board the I2C bus will work unstably.
This error can easily be fixed as shown in Fig. 3. It is enough to cut the path in the place of the red cross and make a jumper as shown by the yellow line. The jumper does not need an insulated wire. You can take a tinned strand from a stranded wire. The board is covered with a protective mask and there is no short circuit to the copper pour.
That’s not all!
What do you think the Chinese did when they found out that they manufactured a billions boards with an error? Sit straight and breathe deeply. Instead of throw the wrong boards in the trash they decide to install on the board the regulator with 2.8V output voltage! It’s a vile blow to the back of a radio amateur – I can not call it otherwise. With this supply voltage the I2C bus normally works with 5V TTL Arduino boards. At first glance all going well. The module seems to be working and even measuring something. However, for the MAX3010x this voltage is far beyond the permissible range.
No, the sensor does not completely fail but make a measures mostly wrong. The MAX30100 Datasheet clearly states that compliance with the power range is necessary for the stable operation of the built-in counter (referring to the built-in timing block for the ADC and logic timers). As a result, we are surprised to find that a professional-level sensor works extremely unstable and is not at all as described in Internet articles. I spent the whole evening to understand what was going wrong.
Measure the voltage at the output of the second regulator. If there is + 1.8V then you are lucky. After cutting the track and installing the jumper the procedure is complete. Otherwise you will have to replace the regulator. We need a regulator XC6206P182MR. You can try to order it in your local store. But somewhere it may be easier and cheaper to order regulator on Ebay or Aliexpress. On Aliexpress a lot of 100 regulators are offered for $1.70. Be careful while ordering! Two digits after the letter P denote the operating voltage. In our case 18 means 1.8V.
Remove the wrong 2.8V regulator, cut the track, put the jumper, install 1.8V regulator on his place. Now that’s all!