Pulse Oximeter MAX30100/MAX30102 – how to fix wrong board

Русская версия

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.

Fig. 1. Module board MAX30100 / MAX30102 from Aliexpress

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?

Fig. 2. Schematic diagram of MAX30100 / MAX30102

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.

Fig. 3. Changes you have made on module board

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.

Final fix

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!


29 thoughts on “Pulse Oximeter MAX30100/MAX30102 – how to fix wrong board

  1. jose May 23, 2019 / 3:30 am

    Thank you very much!!


  2. Stefano P April 9, 2020 / 2:33 pm

    Thanks a lot!!!!!


    • Anonymous December 28, 2020 / 4:26 pm

      Do you sell a repaired and working sensor max30101 / 2?


      • Tom Tippelaar November 2, 2020 / 2:53 pm

        I measured for this type of board. The regulator supplies the correct 1.8V. The pullup resistors are connected to 3.3V. So that is okay I guess ?


  3. Lucas April 27, 2020 / 6:46 am

    Dear Valeriy Yatsenkov, thanks for sharing your fix.

    I’ve a question, I’ve saw some other topics on the internet, saying that it’s enough to remove the three SMD resistors and put then externally, between VIN and Arduino connections, like this(https://i2.wp.com/www.teachmemicro.com/wp-content/uploads/2018/03/Arduino-MAX30100-wiring-diagram.jpg).

    On other topic they said that that jumping from resistors to U3 regulator was enought, like this image suggests(https://user-images.githubusercontent.com/7552369/39305353-cd7e0174-4997-11e8-83a3-4e0f488f4f5b.png)

    I’m contacting you because your blog was the first that I found on the internet, when I was searching for that oximetry sensor. I’m currently doing a university paper for 2º semester at Computer Sciente, I’m here to ask you if those procedures that I said above, they actually works too? I’m trying to go for the easiest path, since I’ve not so much background in electronics. When I saw your blog post, I ordered the XC6206P182MR from aliexpress but I’m afraid that it maybe not arrive on time.

    So, what are your thoughts about those methods that I posted above? The second method is something simlar to yours, they are the same? It’s just the position of the jumper that changes?

    What about the first one?

    Again, thanks for sharing your research, as I said, I’m just a student looking to learn, so If you can clarify those questions I’ll be extremely grateful.

    Thanks in advance.




    • AKASH KUMAR MAHARANA September 18, 2020 / 7:18 pm

      so, did you find the fix? please reply. I am also stuck


  4. amin May 19, 2020 / 4:46 am

    hi, I hope you are fine.I have a question. Is there a sensor max30100 connection to Raspberry Pi that you have raised?


    • Valeriy Yatsenkov May 19, 2020 / 1:34 pm

      Dear Amin, sorry, I never connect this sensor to Raspberry Pi. Also I heard about some problem with RPi software implementation of I2C bus, because it is not hardware but bit-bang. But I never dived deep into this subject…


      • amin May 19, 2020 / 9:39 pm



  5. Andy June 3, 2020 / 7:16 pm

    We found the same problem and made the same fix way


    • amin June 12, 2020 / 7:51 pm

      hi,Thank you. I am also following this solution.


  6. Francisco Acero June 25, 2020 / 11:55 pm

    jajajaj bad solution, SDA and SLC interconnect with max, the communications are bidireccional, yo solution does not work. 5v int the max pins sda and scl.


  7. Darshn July 1, 2020 / 7:08 pm

    Thanks, for your efforts.
    And instead of cutting the track cant we solder a resistor in header pins of SCL,SDA,INT to 3.3V and removing all those 3 SMD resistors.


  8. chakravarthi n September 4, 2020 / 7:01 pm

    Dear sir,
    Thank you very much for the detailed information. I could successfully complete it and it is working now. Thanks a lot.


    • AMIN September 5, 2020 / 1:22 am

      hi,You’re welcome.Did you test with sensor max30100 connection to Raspberry Pi?


  9. siva February 15, 2021 / 10:53 pm

    hai friends anybody have max30102 aurdino code


  10. Sarath.SM. May 8, 2021 / 3:54 am

    Thank You.. it fixed my board!!


  11. Steeman, R.M. January 14, 2022 / 9:56 am

    SparkFun Logic Level Converter – Bi-Directional

    f you’ve ever tried to connect a 3.3V device to a 5V system, you know what a challenge it can be. The SparkFun bi-directional logic level converter is a small device that safely steps down 5V signals to 3.3V AND steps up 3.3V to 5V at the same time. This level converter also works with 2.8V and 1.8V devices.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s