Arduino Nano 33 IoT - Control Fan

This guide explains how to use the Arduino Nano 33 IoT board to control a fan.

There are two ways to drive the fan: a relay or a MOSFET module. A relay can only switch the fan ON or OFF. A MOSFET module can do that too, and it can also change how fast the fan spins. This page shows both ways, so you can pick the one that fits your project.

Arduino Nano 33 IoT controls Fan

Hardware Preparation

1×Arduino Nano 33 IoT
1×Micro USB Cable
1×Relay
1×Alternatively, MOSFET Module (AOD4184, LR7843 or FR120N)
1×12V DC Cooling Fan
1×Alternatively, 5V DC Cooling Fan
1×12V Power Adapter
1×Breadboard
1×Jumper Wires
1×Optionally, DC Power Jack
1×Recommended: Screw Terminal Expansion Board for Arduino Nano
1×Recommended: Breakout Expansion Board for Arduino Nano
1×Recommended: Power Splitter for Arduino Nano

Or you can buy the following kits:

1×DIYables Sensor Kit (18 sensors/displays)
Disclosure: Some of the links provided in this section are Amazon affiliate links. We may receive a commission for any purchases made through these links at no additional cost to you.
Additionally, some of these links are for products from our own brand, DIYables .

Overview of DC Fan

Pinout

Fan Pinout
image source: diyables.io

A DC fan normally has two pins:

  • Negative pin (black): Connect this to the negative wire of the DC power supply.
  • Positive pin (red): Connect this to the positive wire of the DC power supply.

The DC power supply's voltage must be the same as what the fan needs. In this lesson, we will use fans that operate on 12VDC and 5VDC.

How to Control Fan

  • When a DC fan gets power from a 12V/5V power supply, it runs at full speed.
  • When a DC fan gets a 12V/5V PWM signal, you can control its speed.

This guide shows you how to use the Arduino Nano 33 IoT to turn a fan on and off. Another guide will explain how to control the fan’s speed.

Since the fan uses high voltage, you cannot hook it up directly to the Arduino Nano 33 IoT. Instead, you need to connect the fan to the Arduino through a relay. We have detailed guides about relays—including wiring, operation, and programming—in our Arduino Nano 33 IoT - Relay tutorial.

A MOSFET module can take the place of the relay. Its pins, its inside parts and its code are explained in the Arduino Nano 33 IoT - MOSFET Module tutorial.

Relay vs MOSFET Module for Fan

Relay MOSFET Module
What you can control Fan ON or OFF only Fan ON or OFF, plus fan speed (PWM)
Noise A click each time it switches No sound
Switching time Slow (a few milliseconds) Very fast
Wear The contacts wear out after many switches No moving parts
Kind of fan AC fan or DC fan DC fan only
Fan supply voltage Any voltage the relay is rated for About 6V or more
Isolation Yes, between coil and contacts Yes, by the PC817 optocoupler
Good choice when The fan runs on AC, or you only need ON/OFF You want a quiet 12V fan with speed control

For a 12V DC fan, the MOSFET module is usually the better pick, because you can slow the fan down when full speed is not needed. A 5V fan is not a good match for the module, since the module needs a load supply of about 6V or more. Keep the relay for a 5V fan or an AC fan.

Wiring Diagram

The wiring diagram between Arduino Nano and 33 IoT Fan

This image is created using Fritzing. Click to enlarge image

Remember, if you use a fan that runs on 5V, you should use a 5V power adapter.

Arduino Nano 33 IoT Code

The code below switches the fan on and off every 10 seconds.

/* * This Arduino Nano 33 IoT code was developed by newbiely.com * * This Arduino Nano 33 IoT code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-nano-iot/arduino-nano-33-iot-controls-fan */ #define RELAY_PIN 2 // The Arduino Nano 33 IoT pin connected to the fan the via the relay // The setup function runs once on reset or power-up void setup() { // initialize digital pin D2 as an output. pinMode(RELAY_PIN, OUTPUT); } // The loop function repeats indefinitely void loop() { digitalWrite(RELAY_PIN, HIGH); // turn on fan 10 seconds delay(10000); digitalWrite(RELAY_PIN, LOW); // turn off fan 10 seconds delay(10000); }

Detailed Instructions

If you are new to the Arduino Nano 33 IoT, be sure to check out our Getting Started with Arduino Nano 33 IoT tutorial. Then, follow these steps:

  • Connect the components to the Arduino Nano 33 IoT board as depicted in the diagram.
  • Use a USB cable to connect the Arduino Nano 33 IoT board to your computer.
  • Launch the Arduino IDE on your computer.
  • Select the Arduino Nano 33 IoT board and choose its corresponding COM port.
  • Copy the code above and paste it into the Arduino IDE.
  • Click the Upload button in the Arduino IDE to compile and send the code to your Arduino Nano 33 IoT board.
  • Check the fan's status.

Line-by-line Code Explanation

The Arduino Nano 33 IoT code above explains every line. Please read all the comments in the code!

How to Control Fan Speed with MOSFET Module

In this part, the relay is replaced by a MOSFET module. The Arduino Nano 33 IoT sends a PWM signal to it, so the fan can run fast, slow, or stop.

Wiring Diagram

The wiring diagram between Arduino Nano and 33 IoT cooling fan MOSFET module

This image is created using Fritzing. Click to enlarge image

From To
Arduino Nano 33 IoT D9 MOSFET module PWM
Arduino Nano 33 IoT GND MOSFET module GND
12V adapter + MOSFET module + terminal
Fan red wire (+) MOSFET module + terminal (shared with the adapter +)
Fan black wire (−) MOSFET module LOAD terminal
12V adapter − MOSFET module − terminal

A fan has a motor coil inside, so put a flyback diode (1N4007 or 1N5819) across the two fan wires. The side with the stripe (cathode) goes to the fan + wire, and the other side goes to the fan − wire. If your fan has a third yellow wire, leave it unconnected.

Arduino Nano 33 IoT Code - Fan Speed

The fan first runs at full speed for 2 seconds and stops for 2 seconds. Then it speeds up from 10% to 100% power, step by step, and slows down again.

/* * This Arduino Nano 33 IoT code was developed by newbiely.com * * This Arduino Nano 33 IoT code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-nano-iot/arduino-nano-33-iot-controls-fan */ const int MOSFET_PIN = 9; // Arduino Nano 33 IoT pin connected to the PWM pin of the MOSFET module void setup() { Serial.begin(9600); pinMode(MOSFET_PIN, OUTPUT); analogWrite(MOSFET_PIN, 0); // start with the load OFF } void setLoad(int percent) { int duty = map(percent, 0, 100, 0, 255); // convert 0-100% to 0-255 analogWrite(MOSFET_PIN, duty); Serial.print("Load power: "); Serial.print(percent); Serial.println("%"); } void loop() { // turn the load fully ON, then fully OFF Serial.println("Load: ON"); setLoad(100); delay(2000); Serial.println("Load: OFF"); setLoad(0); delay(2000); // increase the power step by step (PWM) for (int percent = 10; percent <= 100; percent += 10) { setLoad(percent); delay(500); } // decrease the power step by step (PWM) for (int percent = 90; percent >= 0; percent -= 10) { setLoad(percent); delay(500); } delay(1000); }

Detailed Instructions

  • Set up the Arduino IDE and the board as in the Quick Steps of the relay part above.
  • Wire the fan and the MOSFET module as in the diagram. Keep the 12V adapter unplugged while you wire.
  • Copy the code above, paste it into the Arduino IDE, and upload it to the Arduino Nano 33 IoT.
  • Plug in the 12V adapter.
  • Open the Serial Monitor at 9600 baud and listen to the fan speed going up and down.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano 33 IoT
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano 33 IoT' on 'COM15')
New Line
9600 baud
Load: ON Load power: 100% Load: OFF Load power: 0% Load power: 10% Load power: 20% Load power: 30% Load power: 40% Load power: 50% Load power: 60% Load power: 70% Load power: 80% Load power: 90% Load power: 100% Load power: 90% Load power: 80% Load power: 70% Load power: 60% Load power: 50% Load power: 40% Load power: 30% Load power: 20% Load power: 10% Load power: 0%
Ln 11, Col 1
Arduino Nano 33 IoT on COM15
2

Many fans do not start at very low power, so the fan may stay still at 10% or 20%. This is normal.

※ NOTE THAT:

The MOSFET module works with DC loads only, and its load supply must be about 6V or more. For an AC fan, use the relay.

Video Tutorial

※ OUR MESSAGES

  • As freelancers, We are AVAILABLE for HIRE. See how to outsource your project to us
  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!