# EMC2101 Fan Controller and Temperature sensor

## Overview

![](https://cdn-learn.adafruit.com/assets/assets/000/138/583/medium800/adafruit_products_a.png?1753814374)

Cooling fans...They're everywhere, and they serve the important purpose of keeping things cool, generally electronics. One might rightfully think: "these fans are pretty good at moving air to keep things cool; maybe I can use one of these neat computer fans to keep my widget frosty" followed closely by throwing up one's hands in confusion at the sight of a 3 or even 4-pin connector. OK, power takes two pins but what are these other pins for and how do I use them to convince this fan to keep my things chilly?

The&nbsp;EMC2101 from Microchip/SMSC&nbsp;is a&nbsp;fan controller with temperature monitoring&nbsp;and it will take care of all of that for you. With programmable PWM output and tachometer input, with both internal and external temperature sensing, with a 1°C accuracy, it's a perfect friend for any 3 or 4-pin PC fan you may find.

![](https://cdn-learn.adafruit.com/assets/assets/000/138/584/medium800/adafruit_products_20250710_194340.jpg?1753814417)

Four pin PC fans have a power and ground pin (those are often red and black) and then two more pins. One of those extra pins, the PWM pin, allows you to set a the speed of the fan. The last TACH pin is for a tachometer output that allows the EMC2101 to monitor the speed of the fan to make sure it's working as expected. Instead of using an PWM output and counter input on your microcontroller, this chip will take care of that all for you, all over every-day I2C.

In addition to allowing you to control a fan, the EMC2101 includes an internal temperature sensor, as well as connections for an **&nbsp;external temperature sensing diode**. If you use an external temperature sensor, you can even configure a&nbsp;**look up table (LUT)**&nbsp;that allows you to set different fan speeds depending on the temperature, and the EMC2101 will&nbsp; **automatically adjust the speed** &nbsp; **depending on the temperature**.

![](https://cdn-learn.adafruit.com/assets/assets/000/138/585/medium800/adafruit_products_b.png?1753814563)

This neat little chip can easily be used to help provide cooling or ventilation to your next project. You might even be able to use it to help quiet down an existing project or hack a noisy piece of electronics that has a loud fan. By allowing you to run a fan at slower speeds when cooling needs are moderate, the EMC2101 can help ease the vibration noise caused by fans running at full speed.

![](https://cdn-learn.adafruit.com/assets/assets/000/097/825/medium800/adafruit_products__edit4808_side_detail.png?1607991886)

Delivered to you on our custom Stemma QT form factor PCB, the Adafruit EMC2101 breakout is ready to help you integrate a fan into your project by making it easy to use with a range of devices. A voltage regulator and 5V tolerant pins allow you to use it with 3.3V or 5V microcontrollers or single board computers. The included included [SparkFun qwiic](https://www.sparkfun.com/qwiic) compatible [STEMMA QT](https://learn.adafruit.com/introducing-adafruit-stemma-qt) connectors for the I2C bus allow you to make easy solderless connections to your controlling device, and the standard headers make breadboard prototyping easy.

Our libraries, wiring diagrams, and example code for Arduino, CircuitPython and Python complete the package. How fan-tastic!

# EMC2101 Fan Controller and Temperature sensor

## Pinouts

![](https://cdn-learn.adafruit.com/assets/assets/000/138/579/medium800/adafruit_products_Untitled.png?1753813917)

## Power Pins

- **VIN** - this is the power pin. Since the sensor chip uses 3 VDC, we have included a voltage regulator on board that will take 3-5VDC and safely convert it down. To power the board, give it the same power as the logic level of your microcontroller - e.g. for a 5V microcontroller like Arduino, use 5V
- **3Vo** &nbsp;- this is the 3.3V output from the voltage regulator, you can grab up to 100mA from this if you like
- **GND** - common ground for power and logic

Info: Fan power is routed separately. See example wiring connections shown later in guide.

## I2C Logic Pins

- **SCL** - I2C clock pin, connect to your microcontroller I2C clock line. This pin is level shifted so you can use 3-5V logic, and there's a **10K pullup** on this pin.
- **SDA** - I2C data pin, connect to your microcontroller I2C data line. This pin is level shifted so you can use 3-5V logic, and there's a **10K pullup** on this pin.
- [**STEMMA QT**](https://learn.adafruit.com/introducing-adafruit-stemma-qt) **&nbsp;-** These connectors allow you to connect to dev boards with **STEMMA QT** or **Qwiic** connectors or to other things with [various associated accessories](https://www.adafruit.com/?q=JST%20SH%204)

## Other Pins

- **TACH** -Tachometer input for 4-pin fans or alert/interrupt pin (must solder jumper on back)
- **ALERT** - This is the same pin as TACH but jumpered on back. It can also be used for interrupts
- **FAN** -The fan control output pin for 3 or 4 pin fans. **Defaults to PWM output** but can be configured to use a DAC to output a DC voltage
- **DN -** External temperature diode negative pin
- **DP -&nbsp;** External temperature diode positive pin

![](https://cdn-learn.adafruit.com/assets/assets/000/138/582/medium800/adafruit_products_Untitled1.png?1753814167)

 **Jumpers**

- **FAN -** Cut this jumper to disable the built-in pull-up on the **Fan** pin when using the DAC/DC voltage output
- **TACH -** solder this jumper to enable the pull-up on the Tach pin when using the **Tach** pin for alerts

Either jumper can be bridged with solder later to re-enable the pullup after cutting the jumper

# EMC2101 Fan Controller and Temperature sensor

## Arduino

Using the EMC2101 with Arduino is a simple matter of wiring up the sensor to your Arduino-compatible microcontroller, installing the [Adafruit EMC2101](https://github.com/adafruit/Adafruit_EMC2101) library we've written, and running the provided example code.

## I2C Wiring

Use this wiring if you want to connect via I2C interface. The I2C address for the EMC2101 is **0x4C.**

Here is how to wire the sensor to a board using a breadboard, using a NPN transistor as a makeshift temperature diode. The examples show a Metro but wiring will work the same for an Arduino or other compatible board.

&nbsp;

Danger: 

Info: Fan voltage at the barrel connector can be as needed for powering the fan being used (ex: 12V). However, the signals from the EMC2101 will remain 3.3-5V logic level (as set by VIN).

![](https://cdn-learn.adafruit.com/assets/assets/000/097/932/medium800/adafruit_products_image.png?1608143040)

- Connect&nbsp;**board VIN (red wire)** to&nbsp; **Arduino 5V** &nbsp;if you are running a **5V** board Arduino (Uno, etc.).&nbsp;If your board is **3V,** connect to that instead.
- Connect **board GND (black wire)&nbsp;**to&nbsp; **Arduino**  **GND**
- Connect **board SCL (yellow wire)&nbsp;**to&nbsp; **Arduino**  **SCL**
- Connect **board SDA (blue wire)&nbsp;**to&nbsp; **Arduino**  **SDA**
- Connect **board DP (orange wire)** to **Transistor**  **Base**
- Connect **board DN** **(gray wire)** to **Transistor**  **Emitter**
- Connect **transistor Collector (orange wire)** to T **ransistor**  **Base**
- Connect **board FAN** to fan PWM input
- Connect **board TACH** to fan Tach output
- Connect **DC jack positive** pin to **Fan V+** input
- Connect **DC jack GND** to **Fan V-/GND** input
- Connect **DC jack GND** to **Arduino GND**

## Library Installation

You can install the **Adafruit EMC2101** library for Arduino using the Library Manager in the Arduino IDE.

![](https://cdn-learn.adafruit.com/assets/assets/000/097/679/medium800/adafruit_products_a_ARDUINO_-_library_manager_menu.png?1607715286)

Click the&nbsp; **Manage Libraries ...** menu item, search for **Adafruit EMC2101** ,&nbsp;and select the&nbsp; **Adafruit EMC2101** &nbsp;library:

![](https://cdn-learn.adafruit.com/assets/assets/000/097/677/medium800/adafruit_products_image.png?1607714818)

Follow the same process for the&nbsp; **Adafruit BusIO** &nbsp;library.

![](https://cdn-learn.adafruit.com/assets/assets/000/097/680/medium800/adafruit_products_aa_ARDUINO-_BusIO_Lib_Manager.png?1607715289)

## Load Example

Open up&nbsp; **File -\> Examples -\> Adafruit EMC2101 -\> adafruit\_emc2101\_test**

![](https://cdn-learn.adafruit.com/assets/assets/000/097/837/medium800/adafruit_products_image.png?1607999238)

After opening the demo file, upload to your Arduino wired up to the EMC2101. Once you upload the code, you will see the Internal and External **Temperature, Fan speed and PWM duty cycle** values being printed when you open the Serial Monitor ( **Tools-\>Serial Monitor** ) at **115200 baud** , similar to this:

![](https://cdn-learn.adafruit.com/assets/assets/000/097/698/medium800/adafruit_products_image.png?1607721182)

## Example Code

&nbsp;

https://github.com/adafruit/Adafruit_EMC2101/blob/master/examples/adafruit_emc2101_test/adafruit_emc2101_test.ino

# EMC2101 Fan Controller and Temperature sensor

## Arduino Docs

# EMC2101 Fan Controller and Temperature sensor

## Python & CircuitPython

It's easy to use the **EMC2101** with Python or CircuitPython, and the [Adafruit CircuitPython EMC2101](https://github.com/adafruit/Adafruit_CircuitPython_EMC2101) module. This module allows you to easily write Python code that reads temperature and fan speed from the **EMC2101** sensor, as well as setting the fan speed.

You can use this sensor with any CircuitPython microcontroller board or with a computer that has GPIO and Python [thanks to Adafruit\_Blinka, our CircuitPython-for-Python compatibility library](https://learn.adafruit.com/circuitpython-on-raspberrypi-linux).  
  
We will show how to wire up the EMC2101 to a microcontroller and fan, along with a NPN Bipolar Junction Transistor (BJT) as a makeshift temperature diode.

Danger: 

Info: Fan voltage at the barrel connector can be as needed for powering the fan being used (ex: 12V). However, the signals from the EMC2101 will remain 3.3-5V logic level (as set by VIN).

## CircuitPython Microcontroller Wiring

First wire up a EMC2101 to your board exactly as shown below. Here's an example of wiring a Feather M4 to the sensor with I2C using standard **0.100" pitch** headers to wire it up on a breadboard:

![](https://cdn-learn.adafruit.com/assets/assets/000/097/835/medium800/adafruit_products_image.png?1607998844)

- Connect&nbsp;**board VIN (red wire)** to&nbsp; **Feather 3V**
- Connect **board GND (black wire)&nbsp;**to **Feather** &nbsp; **GND**
- Connect **board SCL (yellow wire)&nbsp;**to **Feather** &nbsp; **SCL**
- Connect **board SDA (blue wire)&nbsp;**to **Feather** &nbsp; **SDA**
- Connect **board DP (orange wire)** to **Transistor**  **Base**
- Connect **board DN** **(gray wire)** to **Transistor**  **Emitter**
- Connect **transistor Collector (orange wire)** to T **ransistor**  **Base**
- Connect **board FAN (blue wire)**&nbsp;to fan **PWM input**
- Connect **board TACH** **(green wire)** to fa **n Tach output**
- Connect **DC jack positive** pin to **Fan V+** input
- Connect **DC jack GND** to **Fan V-/GND** input
- Connect **DC jack GND** to **Feather GND**

## Python Computer Wiring

Since there's _dozens_ of Linux computers/boards you can use, we will show wiring for Raspberry Pi. For other platforms, [please visit the guide for CircuitPython on Linux to see whether your platform is supported](https://learn.adafruit.com/circuitpython-on-raspberrypi-linux).&nbsp;

Here is an example of how to wire up a Raspberry Pi to the EMC2101&nbsp;and fan, along with a NPN Bipolar Junction Transistor (BJT) as a makeshift temperature diode.

![](https://cdn-learn.adafruit.com/assets/assets/000/097/836/medium800/adafruit_products_image.png?1607999072)

- Connect&nbsp;**board VIN (red wire)&nbsp;**to&nbsp; **RPi 3V**
- Connect**&nbsp;board GND (black wire)&nbsp;**to **RPi** &nbsp; **GND**
- Connect**&nbsp;board SCL (yellow wire)&nbsp;**to **RPi** &nbsp; **SCL**
- Connect**&nbsp;board SDA (blue wire)&nbsp;**to **RPi** &nbsp; **SDA**
- Connect&nbsp;**board DP (orange wire)**&nbsp;to&nbsp; **Transistor** &nbsp; **Base**
- Connect&nbsp; **board DN** &nbsp;**(gray wire)**&nbsp;to **&nbsp;Transistor** &nbsp; **Emitter**
- Connect&nbsp;**transistor Collector (orange wire)**&nbsp;to T **ransistor** &nbsp; **Base**
- Connect&nbsp;**board FAN (blue wire)**&nbsp;to fan&nbsp; **PWM input**
- Connect&nbsp; **board TACH** &nbsp;**(green wire)**&nbsp;to fa **n Tach output**
- Connect&nbsp; **DC jack positive** &nbsp;pin to&nbsp; **Fan V+** &nbsp;input
- Connect&nbsp; **DC jack GND** &nbsp;to&nbsp; **Fan V-/GND&nbsp;** input
- Connect&nbsp; **DC jack GND** &nbsp;to **RPi**** &nbsp;GND**

## CircuitPython Installation of EMC2101 Library

You'll need to install the [Adafruit CircuitPython EMC2101](https://github.com/adafruit/Adafruit_CircuitPython_EMC2101) library on your CircuitPython board.

First make sure you are running the&nbsp;[latest version of Adafruit CircuitPython](https://learn.adafruit.com/welcome-to-circuitpython/installing-circuitpython)&nbsp;for your board.

Next you'll need to install the necessary libraries&nbsp;to use the hardware--carefully follow the steps to find and install these libraries from&nbsp;[Adafruit's CircuitPython library bundle](https://circuitpython.org/libraries).&nbsp; Our CircuitPython starter guide has [a great page on how to install the library bundle](https://learn.adafruit.com/welcome-to-circuitpython/circuitpython-libraries).

&nbsp;

Before continuing make sure your board's **lib** folder or root filesystem has the **adafruit\_EMC2101.mpy** file as well as the **adafruit\_register and adafruit\_bus\_device** folders.

Next&nbsp;[connect to the board's serial REPL&nbsp;](https://learn.adafruit.com/welcome-to-circuitpython/the-repl)so you are at the CircuitPython` ``>>>`` `prompt.

## Python Installation of EMC2101 Library

You'll need to install the **Adafruit\_Blinka** library that provides the CircuitPython support in Python. This may also require enabling I2C on your platform and verifying you are running Python 3.&nbsp;[Since each platform is a little different, and Linux changes often, please visit the CircuitPython on Linux guide to get your computer ready](https://learn.adafruit.com/circuitpython-on-raspberrypi-linux)!

Once that's done, from your command line run the following command:

- `sudo pip3 install adafruit-circuitpython-emc2101`

If your default Python is version 3 you may need to run 'pip' instead. Just make sure you aren't trying to use CircuitPython on Python 2.x, it isn't supported!

## CircuitPython & Python Usage
Info: 

To demonstrate the usage of the sensor we'll initialize it to set and read the fan speed and read the external and internal temperatures from the board's Python REPL.

Run the following code to import the necessary modules and initialize the I2C connection with the sensor:

```python
import board
from adafruit_emc2101 import EMC2101

i2c = board.I2C()

emc = EMC2101(i2c)
```

![](https://cdn-learn.adafruit.com/assets/assets/000/102/051/medium800/adafruit_products_emc2101.png?1620391810)

Now you're ready to read values from the sensor using these properties:

- **internal\_temperature** - The temperature of the EMC2101 itself, a value in degrees Celsius.
- **external\_temperature** - The temperature measured by the external sensor, a value in degrees Celsius.

```python
print("External temperature:", emc.external_temperature, "C")
print("Internal temperature:", emc.internal_temperature, "C")
```

![](https://cdn-learn.adafruit.com/assets/assets/000/097/720/medium800/adafruit_products_image.png?1607730655)

And of course you can also use the corresponding properties to read and set the fan speed:

- **manual\_fan\_speed** - The speed of the fan when not controlled by the LUT
- **fan\_speed** - The speed of the fan in **R** evolutions **P** er **M** inute (RPM)

```python
emc.manual_fan_speed = 25
print("Fan speed:", emc.fan_speed, "RPM")
```

![](https://cdn-learn.adafruit.com/assets/assets/000/097/719/medium800/adafruit_products_image.png?1607730463)

## Example Code
https://github.com/adafruit/Adafruit_CircuitPython_EMC2101/blob/main/examples/emc2101_simpletest.py

# EMC2101 Fan Controller and Temperature sensor

## Python Docs

# EMC2101 Fan Controller and Temperature sensor

## Additional Features

## Measurement Frequency

Depending on your application, you may not need to measure the temperature continuously if for example it doesn't change quickly. You can specify the EMC2101's temperature conversion/measurement rate which will affect the power usage of the EMC2101; more frequent measurements will use more power.

[Python - Documentation](https://circuitpython.readthedocs.io/projects/emc2101/en/latest/api.html#adafruit_emc2101.EMC2101.conversion_rate)

[Arduino - Documentation](https://adafruit.github.io/Adafruit_EMC2101/html/class_adafruit___e_m_c2101.html#a9b231b41c82e2d28367d240006bd63ab)

[Arduino - Example](https://github.com/adafruit/Adafruit_EMC2101/blob/master/examples/adafruit_emc2101_test/adafruit_emc2101_test.ino#L21)

## Internal and External Temperature

The EMC2101 supports measuring both the temperature of the EMC2101 itself as the internal temperature, as well as the temperature of an externally connected "diode".

![](https://cdn-learn.adafruit.com/assets/assets/000/097/898/medium800/adafruit_products_npn_pnp_diagram.png?1608085736 Taken from the EMC2101 Datasheet: http://ww1.microchip.com/downloads/en/DeviceDoc/2101.pdf)

I've put diode in quotes above because we've only been able to successfully measure external temperature using a NPN BJT transistor with the collector and base tied together which acts like a diode. PNP BJT's should also work with the base and emitter connected. The diagram from the datasheet above shows how connecting the pins of a BJT lets it act like a diode.

[Python - Documentation](https://circuitpython.readthedocs.io/projects/emc2101/en/latest/api.html#adafruit_emc2101.EMC2101.internal_temperature)

[Python - Example Code](https://circuitpython.readthedocs.io/projects/emc2101/en/latest/examples.html#simple-test)

[Arduino - Documentation](https://adafruit.github.io/Adafruit_EMC2101/html/class_adafruit___e_m_c2101.html#a1f97fe1bc2e5e7b6cd1a2d355e38a5f1)

[Arduino - Example](https://github.com/adafruit/Adafruit_EMC2101/blob/master/examples/adafruit_emc2101_test/adafruit_emc2101_test.ino)

Warning: 

[Python - Documentation](https://circuitpython.readthedocs.io/projects/emc2101/en/latest/api.html#adafruit_emc2101.EMC2101.dac_output_enabled)

[Arduino - Documentation](https://adafruit.github.io/Adafruit_EMC2101/html/class_adafruit___e_m_c2101.html#a01a5564c14a494b99e2d0a658ce0ee6e)

## Look Up Table Support

As an alternative to adjusting the speed directly with your code, the EMC2101 allows you to set up a Look Up Table (LUT) that specifies how fast the fan should spin for a given temperature. One important note is that the LUT only works automatically based on the external temperature.

[Python - LUT Documentation](https://circuitpython.readthedocs.io/projects/emc2101/en/latest/api.html#adafruit_emc2101.EMC2101.lut_temperature_hysteresis)

[Python - LUT Example](https://circuitpython.readthedocs.io/projects/emc2101/en/latest/examples.html#lut-usage-example)

[Arduino - Documentation](https://adafruit.github.io/Adafruit_EMC2101/html/class_adafruit___e_m_c2101.html#ac1c6f7e442fa296fff83fd12a48678e2)

[Arduino - LUT Example](https://github.com/adafruit/Adafruit_EMC2101/blob/master/examples/lut_test/lut_test.ino)

## LUT Hysteresis

If the current temperature is very close to a LUT temperature, the fan may "thrash" by changing the fan speed excessively as the temperature fluctuates between above and below the LUT temperature.

To prevent thrashing, the EMC2101 applies a hysteresis value to the measured temperature which is an additional number of degrees below the LUT temperature that the measurement must be before switching to the lower LUT entry.

[Python - Documentation](https://circuitpython.readthedocs.io/projects/emc2101/en/latest/api.html#adafruit_emc2101.EMC2101.lut_temperature_hysteresis)

[Arduino - Documentation](https://adafruit.github.io/Adafruit_EMC2101/html/class_adafruit___e_m_c2101.html#afe45fc12ad82dc877ead40ae578eb8b2)

[Arduino - LUT Example](https://github.com/adafruit/Adafruit_EMC2101/blob/master/examples/lut_test/lut_test.ino)

## Forcing a Manual Temperature

For testing the LUT, the EMC2101 allows you to set a temperature that the LUT will use instead of the external temperature. Each time you set a forced/manual temperature, the EMC2101 will consult the LUT to find the corresponding fan speed. The keen eyed may notice that you can use this to hack LUT support for other values than the external temperature sensor by regularly updating the forced temperature based on another measurement.

[Python - Documentation](https://circuitpython.readthedocs.io/projects/emc2101/en/latest/api.html#adafruit_emc2101.EMC2101.forced_ext_temp)

[Python - LUT Example](https://circuitpython.readthedocs.io/projects/emc2101/en/latest/examples.html#lut-usage-example)

[Arduino - Documentation](https://adafruit.github.io/Adafruit_EMC2101/html/class_adafruit___e_m_c2101.html#a663f8fa600b97f3795b96ed261b3e391)

[Arduino - LUT Example](https://github.com/adafruit/Adafruit_EMC2101/blob/master/examples/lut_test/lut_test.ino)

## PWM Tuning

It can sometimes be necessary to adjust the PWM frequency to suit your application or prevent a motor from making audible noise. These features allow you to specify the base PWM clock, divisor and frequency.  
  
[Python - Documentation](https://circuitpython.readthedocs.io/projects/emc2101/en/latest/api.html#adafruit_emc2101.EMC2101.pwm_frequency)

Python - PWM Example

[Arduino - Documentation](https://adafruit.github.io/Adafruit_EMC2101/html/class_adafruit___e_m_c2101.html#a2610da0958d92c7fde85aad291f0cd5e)

[Arduino - Example](https://github.com/adafruit/Adafruit_EMC2101/blob/master/examples/adafruit_emc2101_test/adafruit_emc2101_test.ino)

## PWM vs DAC Output

By default the EMC2101 sets the speed of the fan by outputting a PWM signal compatible with 4 and 3-pin fans. A transistor in the fan uses this signal to change the amount of its operating voltage.

The EMC2101 can alternatively be configured to output a steady DC voltage instead of a pulsed signal, should your application require it. The voltage range is from **0** to approximately **3.24V** with the same 6-bit resolution as the PWM output.

## Fan Spinup Drive and Time

The EMC2101 allows you to specify how the fan should be started from a stop by specifying a spinup speed and time. Sometimes fans have to build up momentum before slowing down to a lower speed, and these settings help with that. Fortunately the default settings are good enough for most cases.  
  
[Python - Documentation](https://circuitpython.readthedocs.io/projects/emc2101/en/latest/api.html#adafruit_emc2101.EMC2101.spinup_drive)

[Arduino - Documentation](https://adafruit.github.io/Adafruit_EMC2101/html/class_adafruit___e_m_c2101.html#ae2c14b4bcd3e300390b7ff29f833506b)

## Fan Minimum Speed

This setting allows you to specify the minimum speed of your fan. 4-pin fans will often still report a small speed on their tach output when stopped, and this setting allows you to say "anything below this speed is off" so you don't think the fan is still on when it is not.

[Python - Documentation](https://circuitpython.readthedocs.io/projects/emc2101/en/latest/api.html#adafruit_emc2101.EMC2101.tach_limit)

[Arduino - Documentation](https://adafruit.github.io/Adafruit_EMC2101/html/class_adafruit___e_m_c2101.html#ab89c7633acc76a53828559c2d57788e3)

[Arduino - Fan Tuning Example](https://github.com/adafruit/Adafruit_EMC2101/blob/master/examples/fan_tuning/fan_tuning.ino)

Info: 

Per the Intel specification "_4-Wire Pulse Width Modulation (PWM) Controlled Fans_", fan response to a PWM signal below 20% duty cycle is undetermined. As a result, **some PC fans may not fully stop** , even with 0% duty cycle.

![](https://cdn-learn.adafruit.com/assets/assets/000/112/680/medium800/adafruit_products_pcfan.jpg?1656365877)

This can vary from fan to fan. Ideally, this information will be given in a fan's datasheet. For example, this if from the datasheet for a Delta Electronics AUB0912VH fan:

![](https://cdn-learn.adafruit.com/assets/assets/000/112/681/medium800/adafruit_products_fanrpm.jpg?1656366060)

As can be seen, the RPM never goes to 0, even with 0% duty cycle.

# EMC2101 Fan Controller and Temperature sensor

## Downloads

## Files

- [EMC2101 Datasheet](http://ww1.microchip.com/downloads/en/DeviceDoc/2101.pdf)
- [EagleCAD files on GitHub](https://github.com/adafruit/Adafruit-EMC2101-PCB)
- [3D Models on GitHub](https://github.com/adafruit/Adafruit_CAD_Parts/tree/main/4808%20EMC2101%20STEMMA%20QT)
- [Fritzing object in the Adafruit Fritzing Library](https://github.com/adafruit/Fritzing-Library/blob/master/parts/Adafruit%20EMC2101.fzpz)

## Schematic
![](https://cdn-learn.adafruit.com/assets/assets/000/097/689/medium800/adafruit_products_image.png?1607717463)

## Fab Print
![](https://cdn-learn.adafruit.com/assets/assets/000/097/900/medium800/adafruit_products_image.png?1608093633)


## Primary Products

### Adafruit EMC2101 I2C PC Fan Controller and Temperature Sensor

[Adafruit EMC2101 I2C PC Fan Controller and Temperature Sensor](https://www.adafruit.com/product/4808)
Cooling fans...They're everywhere, and they serve the important purpose of keeping things cool, generally electronics. One might rightfully think: "these fans are pretty good at moving air to keep things cool; maybe I can use one of these neat computer fans to keep my widget...

In Stock
[Buy Now](https://www.adafruit.com/product/4808)
[Related Guides to the Product](https://learn.adafruit.com/products/4808/guides)

## Featured Products

### STEMMA QT / Qwiic JST SH 4-pin to Premium Male Headers Cable

[STEMMA QT / Qwiic JST SH 4-pin to Premium Male Headers Cable](https://www.adafruit.com/product/4209)
This 4-wire cable is a little over 150mm / 6" long and fitted with JST-SH female 4-pin connectors on one end and premium Dupont male headers on the other. Compared with the chunkier JST-PH these are 1mm pitch instead of 2mm, but still have a nice latching feel, while being easy to insert...

Out of Stock
[Buy Now](https://www.adafruit.com/product/4209)
[Related Guides to the Product](https://learn.adafruit.com/products/4209/guides)
### 4-pin JST PH to JST SH Cable - STEMMA to QT / Qwiic

[4-pin JST PH to JST SH Cable - STEMMA to QT / Qwiic](https://www.adafruit.com/product/4424)
Are you a maker in the midst of&nbsp;a [**STEMMA**](https://learn.adafruit.com/introducing-adafruit-stemma-qt/what-is-stemma) dilemma? This 200mm long 4-wire cable is a fantastic chimera-cable fitted with **STEMMA QT / Sparkfun Qwiic JST SH** on one end,...

In Stock
[Buy Now](https://www.adafruit.com/product/4424)
[Related Guides to the Product](https://learn.adafruit.com/products/4424/guides)
### STEMMA QT / Qwiic JST SH 4-pin Cable with Premium Female Sockets

[STEMMA QT / Qwiic JST SH 4-pin Cable with Premium Female Sockets](https://www.adafruit.com/product/4397)
This 4-wire cable is a little over 150mm / 6" long and fitted with JST-SH female 4-pin connectors on one end and premium female headers on the other. Compared with the chunkier JST-PH these are 1mm pitch instead of 2mm, but still have a nice latching feel, while being easy to insert and...

Out of Stock
[Buy Now](https://www.adafruit.com/product/4397)
[Related Guides to the Product](https://learn.adafruit.com/products/4397/guides)
### STEMMA QT / Qwiic JST SH 4-pin Cable - 100mm Long

[STEMMA QT / Qwiic JST SH 4-pin Cable - 100mm Long](https://www.adafruit.com/product/4210)
This 4-wire cable is a little over 100mm / 4" long and fitted with JST-SH female 4-pin connectors on both ends. Compared with the chunkier JST-PH these are 1mm pitch instead of 2mm, but still have a nice latching feel, while being easy to insert and remove.

<a...></a...>

Out of Stock
[Buy Now](https://www.adafruit.com/product/4210)
[Related Guides to the Product](https://learn.adafruit.com/products/4210/guides)

## Related Guides

- [FunHouse IoT Fume Extractor and Air Quality Sensor](https://learn.adafruit.com/funhouse-fume-extractor-iot-air-quality-sensor.md)
- [Professor Bubbleton’s Breathing Head in a Jar](https://learn.adafruit.com/professor-bubbleton-s-breathing-head-in-a-jar.md)
- [Adafruit SPA06-003 - Temperature + Pressure Sensor](https://learn.adafruit.com/adafruit-spa06-003-temperature-pressure-sensor.md)
- [Adafruit H3LIS331 and LIS331 High-g 3-Axis Accelerometers](https://learn.adafruit.com/adafruit-h3lis331-and-lis331hh-high-g-3-axis-accelerometers.md)
- [NeoPixel Light Slate](https://learn.adafruit.com/neopixel-light-slate.md)
- [CircuitPython BLE Multi-Temperature Monitoring](https://learn.adafruit.com/circuitpython-multi-temperature-ble-monitoring.md)
- [Adafruit Voice Bonnet](https://learn.adafruit.com/adafruit-voice-bonnet.md)
- [RGB Matrix Dreidel Game](https://learn.adafruit.com/rgb-matrix-dreidel-game.md)
- [Adafruit Trinket M0](https://learn.adafruit.com/adafruit-trinket-m0-circuitpython-arduino.md)
- [ Adafruit DRV8833 DC/Stepper Motor Driver Breakout Board](https://learn.adafruit.com/adafruit-drv8833-dc-stepper-motor-driver-breakout-board.md)
- [Adafruit QT Py CH32V203](https://learn.adafruit.com/adafruit-qt-py-ch32v203.md)
- [Adafruit PyPortal Titano](https://learn.adafruit.com/adafruit-pyportal-titano.md)
- [Adafruit NeoPixel FeatherWing](https://learn.adafruit.com/adafruit-neopixel-featherwing.md)
- [Adafruit SensorLab - Gyroscope Calibration](https://learn.adafruit.com/adafruit-sensorlab-gyroscope-calibration.md)
- [No-Code Seedling Frost Alert Device with Adafruit IO and WipperSnapper](https://learn.adafruit.com/no-code-seedling-frost-and-sun-alert-with-adafruit-io-and-wippersnapper.md)
