Project tutorial
Residential Air Flowmeter

Residential Air Flowmeter © GPL3+

Have you ever wanted to measure the speed of air coming out of your vents at home? Well then we have the perfect project for you.

  • 13 respects

Components and supplies

Necessary tools and machines

09507 01
Soldering iron (generic)

About this project


We were tasked with creating an airflow flowmeter that could be used in a residential setting. Unfortunately, in today’s HVAC industry, the only airflow sensing devices on the market are for systems that are designed for industrial applications. The devices currently used to calculate the airflow rate in industrial-sized registers are either too big for residential registers or are not able to calculate the airflow rate due to the smaller airflow outputs of a residential HVAC system.

How It Works

To generate a signal from the airflow, we used a cup anemometer to catch the air. We made custom 3D-printed blades using Autodesk Inventor to optimize the fan blades performance in catching the air. We also 3D-printed an enclosure to place the anemometer in.

To read the signal that the anemometer outputted, a voltage sensor was chosen. The signal from the sensor also needed to be amplified in order to have a more accurate reading on the voltage sensor. The amplifier takes the output voltage from the anemometer and amplifies it by a factor of 10. This factor can be increased or decreased anywhere between 1.5 and 1000 times based on the input voltage.

An Arduino Uno was used to read the analog signal from the voltage sensor and control what was presented on the LCD screen. For this specific problem we wanted the wind speed in CFM so we displayed it as so on the screen.

The Build


The first step in construction is to start with the anemometer. Below are some photos of the device.

Look at the image labeled "Anemometer Top View". The point where the blades connect to the anemometer is a L-shaped and very thin. This will not hold up very well to high speeds so here is where we designed new blades. What we wanted where thicker blades and a more sturdy handle design. The purpose of the larger blades was to reduce the cross-sectional air gap between the blade and the housing unit (where the fan will sit), which in turn would increase the amount of air caught by the scoop and voltage produced by the motor. Below are photos of where the blades attach to the anemometer.

You may be thinking, will this make much of a difference? That is a great question. To answer that we conducted some stress analysis tests in Autodesk Inventor to see have much sturdier the new design is. The picture below shows the results.

We can see than the new blades are much more effective at high speeds. The STL files for the blades are attached in the files section. DO NOT ATTACH THE NEW BLADES YET.

Next we need to place the modified anemometer into the housing unit. The STL files for the housing unit are in the files section. With no blades in the anemometer, slide the anemometer up through the hole at the bottom of the housing. Gorilla the bottom of the anemometer to two thin wood circles (from Hobby Lobby). Drill 4 small holes through the circles and through the ABS plastic housing. One hole will be to thread the wire through, the other three will be for screws. The picture below shows how it will look.

Next we need to wire anemometer to the amplifier. Below is a picture of the amplifier.

*Note all wires attached to amplifier are male to male

Take two male to male wires, the colors do not matter, but I will call them by the colors we used in our project. Solder a red wire to the +S circle on the right. Solder the other end to the red wire coming from the anemometer. Solder a black wire to the -S circle on the right. Solder the other end to the yellow wire coming from the anemometer. Also adding electrical tape works well to keep them in place.

Next we need to wire the amplifier to a battery supply. Solder a yellow wire to the GND on the right side. Solder the other end to the black wire coming from a battery pack connector. Solder a white wire to the Vln circle on the right side. Solder the other end to the red wire coming from a battery pack connector.

Next we need to wire the amplifier to the voltage sensor. Solder a blue wire to the GND on the amplifier the other end to VCC on the voltage sensor. Solder a green wire to the Vout on the amplifier the other end to GND on the voltage sensor.

Now we will wire the voltage sensor to the Arduino and finish the wiring. The wiring diagram in the schematics section shows how to wire this part.

Finish Touches

The hardest parts are done! Now that everything is wired up we can set the electronics on the flowmeter. Use a piece of foam board to be the ceiling for the top of the fan housing. We used gorilla glue to keep it in place. You can then place the electronics on the foam board and use more foam board to enclose the electronics. In the pictures below you can see how the foam was used to enclose the electronics.

Also, holes were cut in the foam to allow the Arduino and the amplifier access to their respective 9V battery power supply sources. This can be seen in the picture below.

Next we will build the funnel. We used PVC material for the boards of the funnel. There were 4 boards shaped like trapezoids. To connect the boards to each other we used gorilla glue and caulking. The same method was used to connect the funnel to the fan housing. At the large end of the funnel, weather stripping was placed around the perimeter. This was done to create a seal for when the funnel is pressed up to a vent. The cross section of the large end of the funnel is 14'' by 14''. The picture below shows a front view of the funnel.


Once everything was built we calibrated our flowmeter. We tested it with a device that knew the exact airflow. Our first code displayed the voltage read by the sensor on LCD screen. We then used that data collected to create equations to make the LCD screen display CFM. The data below shows how we calibrated it.

On the graph you can see two curves, the intial airflow and the actual airflow. They are different because when we are funneling down the air, the speed will slightly decrease. Here we will use the best fit equation for the actual airflow,

y = 1.1409x^2 + 44.958x, in our arduino code. The code will be broken into three parts, areas with wind speeds of zero, small to medium wind speeds, and large wind speeds. You could the best fit equation above to model the entire wind speed of the flow, but we found a better equation to model the small to medium range. The ranges will be depicted by the following equations:

Large CFM:

y = 1.1409x^2 + 44.958x

Medium to Low CFM

y = 40x +20

Zero CFM:

y = 0

You can find the code in the later section.

Once you have uploaded the code to the Arduino you have finished the flowmeter!

Calibration it Yourself (Optional)

So let’s say you want to calibrate it yourself. Maybe you want your airflow measured in m/s or mph. Here we will walk you through the steps to calibrate it.

Step 1: Find a way to find the actual flow rate first.

The cheapest way to do this is to buy an anemometer from the store. Here is one that would work. Anemometer

Step 2: Place the anemometer in front of a fan that has different speed settings. The fan could be one like this shown in the picture below.

Step 3: Record the wind speed the anemometer at each different setting.

Step 4: You have to have the flowmeter read the output voltage of the fan. To do this, upload the code titled “Voltage Sensor Code” to the Arduino.

Step 5: Now that you have the flowmeter reading voltage, record the voltage at each different fan speed setting.

Step 6: Use Excel to create a scatter plot of “Wind Speed vs. Voltage”.

Step 7: Use the trendline feature to find an equation to that accurately models the “Wind Speed vs. Voltage”.

Step 8: If you feel that your trendline is not very linear, you can find separate equation for the lower and upper portions of the graph.

Step 9: Now you can substitute your equations for my equations in the “Flowmeter Code”. Once you upload the code to the Arduino you are set!


Flowmeter CodeC/C++
1.	#include <LiquidCrystal.h>  
3.	LiquidCrystal lcd(12, 11, 5, 4, 3, 2);                                          
4.	// These are the pins that will be used  
6.	 // Below are the values of the resistors in the sensor 
7.	float R1=30000;                    
9.	float R2=7500;  
11.	void setup()   
12.	{  
14.	Serial.begin (9600);  
15.	lcd.begin(16, 2);                                                              
16.	 // This allows the LCD screen to be used  
19.	}  
21.	void loop()                                                                     
22.	// Beginning of the loop  
23.	{  
25.	int sensorValue = analogRead(A0);                                              
26.	 // Reads  the sensor value  
28.	float voltage = ((5*sensorValue*(R1+R2))/(1024*R2));                           
29.	 // Equation for the real voltage   
32.	//*********************************************************//  
33.	// The equation for CFM is a piecewise function of voltage,   
34.	// so if statements were used to divide the functions into  
35.	// their respective regions below  
36.	//*********************************************************//  
39.	if (voltage > 1)                                                               
40.	 // First region of the function for large CFM  
41.	{  
43.	float cfm = (1.1409*(voltage))*((voltage))+44.258*(voltage);      
45.	Serial.println(cfm);                                                           
46.	 // Displays CFM  
47.	lcd.print("CFM = ");  
48.	lcd.setCursor(0, 1);  
49.	lcd.print(cfm);  
50.	delay(1000);                                                                   
51.	 // 1000 ms delay  
52.	lcd.clear();                                                                   
53.	 // Clears for repeat  
54.	delay(1000);  
56.	}  
58.	else if (.01 < voltage < 1)                                                    
59.	 // Second region for middle to low CFM  
60.	{  
62.	float cfm = (40*(voltage)+20);  
64.	Serial.println(cfm);                                                           
65.	// Displays CFM  
66.	lcd.print("CFM = ");  
67.	lcd.setCursor(0, 1);  
68.	lcd.print(cfm);  
69.	delay(1000);                                                                  
70.	 // 1000 ms delay  
71.	lcd.clear();                                                                   
72.	 // Clears for repeat  
73.	delay(1000);  
75.	}  
77.	else                                                                           
78.	 // If fan is not spinning, the CFM will be zero  
79.	{  
80.	  float cfm = 0;  
82.	  Serial.println(cfm);  
83.	lcd.print("CFM = ");  
84.	lcd.setCursor(0, 1);  
85.	lcd.print(cfm);  
86.	delay(1000);  
87.	lcd.clear();  
88.	delay(1000);  
89.	}  
92.	}  
Code for Voltage SensorC/C++
This is the code to read the voltage if you want to calibrate it yourself
 // Below are the values of the resistors in the sensor
float R1=30000;                                                         
float R2=7500;

void setup() {

Serial.begin (9600);

void loop() {

// Reads the sensor value
int sensorValue = analogRead(A0);                                      

// Equation for the real voltage
float voltage = ((5*sensorValue*(R1+R2))/(1024*R2));                  

// Prints voltage on computer
Voltage Sensor CodeC/C++
This is the code you use to calibrate the Flowmeter yourself.
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);                                    // These are the pins that will be used

// Below are the values of the resistors in the sensor
float R1=30000;                                                         
float R2=7500;

void setup() 
// This allows the LCD screen to be used
Serial.begin (9600);
lcd.begin(16, 2);                                                       


void loop()                                                           
// Reads the sensor value  
int sensorValue = analogRead(A0);                                      

// Equation for the real voltage
float voltage = ((5*sensorValue*(R1+R2))/(1024*R2));                   

// Shows voltage on the LCD screen
lcd.print("V = ");
lcd.setCursor(0, 1);


Custom parts and enclosures

Housing STL File
Fan Blade STL file


Wiring Diagram
Wiringdiagram edbmt2qgt3



  • 1 project

Additional contributors

  • 3-d models and construction by Zack Schaetz
  • Amplifier and planning by Seth Oldham
  • Funnel and sealing by Josh Berger

Published on

June 18, 2019

Members who respect this project

Kayaking tDefaultDefaultPhotoSalviadorPhotoDefault

and 6 others

See similar projects
you might like

Similar projects you might like

Simple Ultrasonic Distance Measurer With LCD Display

Project showcase by onatto22

  • 25 respects

Simple Data Statistics (Temperature)

by paskino

  • 12 respects

Food Detector

Project tutorial by crispylel

  • 99 respects

Hot Air Balloon or Weather Satellite Navigation System

Project tutorial by Patel Darshil

  • 16 respects

Temperature and Humidity Logger Per Hour

Project tutorial by lefteris1993

  • 12 respects

Air Garden

Project tutorial by Team Plant Protector

  • 1 comment
  • 13 respects
Add projectSign up / Login