INTERNATIONAL JOURNAL OF LATEST TECHNOLOGY IN ENGINEERING,
MANAGEMENT & APPLIED SCIENCE (IJLTEMAS)
ISSN 2278-2540 | DOI: 10.51583/IJLTEMAS | Volume XIV, Issue V, May 2025
www.ijltemas.in Page 1098
Several prior systems are similar to ours. Chenchireddyet al. (2022) built an Arduino-based MQ135 monitor with IOT: their device
measured gases like CO₂ and smoke, triggered alarms when thresholds were exceeded, and displayed readings both on an LCD and
on a web dashboard【1】. Harvey and Marsyaf (2019) developed a network of Arduino/MQ135 units. Their three devices collected
air data every 5 minutes over five days, storing values online. They reported that measured concentrations fell in a “medium”
category (51–100 PPM) and made results accessible via a web portal【2】. Other designs (e.g. Mohiddin et al., 2018) have
combined MQ135 with additional sensors (like CO or humidity) and used serial logging to computers【6】.
In summary, the literature confirms that MQ135 sensors can continuously monitor general air quality when properly interfaced and
calibrated. However, reported systems also note limitations in selectivity (the MQ135 responds to multiple gases) and the need for
calibration in each environment. Our work follows these examples by integrating MQ135 with Arduino and focusing on calibration
and data accuracy.
III. Methodology
Sensor Integration
The MQ135 sensor is a resistive gas sensor. It contains a heater coil (heating resistance ~30 Ω) that raises the sensor to operating
temperature when powered at 5 V【4】. As the target gas concentration increases, the sensing element’s resistance (Rs) drops. To
use the sensor with a microcontroller, we create a voltage divider: the MQ135’s variable resistance is paired with a fixed “load
resistor” (RL). The datasheet recommends RL on the order of 10–47 KΩ for optimal sensitivity【3】. In practice, commercial
MQ135 modules often include a small 1 KΩ resistor, which is too low; replacing it with a ~20 KΩ resistor greatly improves response
linearity【3】. In our design we used a 22 KΩ load resistor (as also suggested in reference guides【3】).
We power the MQ135 with a regulated 5 V supply (VC = 5.0 V, heater supply VH = 5.0 V【4】). The sensor’s analog output (taken
across RL) yields a voltage proportional to gas concentration. This AO pin is connected to the Arduino’s analog input pin A0. The
Arduino’s ADC (10-bit, 0–5 V range) reads this voltage as a 0–1023 digital value. Fig. 1 shows an example circuit: the MQ135
module is powered by +5V/GND, its AO pin goes to Arduino A0, and +5V also powers an optional LCD/OLED display and alert
indicators.
Signal Processing and Calibration
To translate the raw ADC reading into a gas concentration (PPM), we calibrate the sensor using known conditions. First, the MQ135
requires a warm-up period: the manufacturer notes that an initial heating time (up to tens of hours) is needed for stable operation
【4】. We preheated the sensor for about 24 hours before taking any reference readings【3】【4】. After warm-up, we measured
the sensor resistance in clean air to determine a baseline reference resistance R0R_0R0. In practice, this is done by placing the
sensor in fresh ambient air (assumed ~400 PPM CO₂) and calculating R0=Rs/fR_0 = R_s / fR0=Rs/f, where is a factor from the
datasheet curve corresponding to the known gas level.
In our Arduino code, we used an existing MQ135 library that automates this process【3】. The code initializes serial
communication and the display, waits for the preheat period, then reads the ADC value and computes the Rs/R0 ratio. Using the
sensor’s sensitivity characteristics (available from the datasheet【4】), the code converts this ratio into an estimated concentration
(PPM). The resulting gas concentration is then displayed as numeric value. In our implementation, we chose to calibrate around
CO₂ (since MQ135 is often used as an “air quality” or CO₂ proxy); the raw ADC values were mapped to CO₂ PPM using the
library’s formula.
The signal from the sensor can be noisy or affected by environmental factors. To mitigate this, one may average multiple ADC
readings or apply filters (e.g. taking several samples per second and averaging). In our prototype, we collected readings at 1-second
intervals and averaged each second, smoothing out rapid fluctuations. These concentration values are logged to the serial port (for
PC/Excel logging) and updated on the LCD display. Typical code flow: read sensor voltage, compute Rs = (VCC * RL / VOUT –
RL), compute ratio Rs/R0, and then apply the library’s formula to get PPM.
System Architecture
The overall system architecture is straightforward. Figure 1 illustrates the key connections: the MQ135 module is powered by 5
V/GND and its analog output goes to the Arduino’s A0 pin. The Arduino Uno (microcontroller) reads this analog voltage, processes
it, and then drives output devices. We used a 16×2 LCD (with I2C adapter) to display the current air quality value in PPM.
Additionally, a buzzer or LED indicators are connected to digital pins for threshold alerts. All components share the common 5 V
supply from either USB power or a regulated DC input. The Arduino logic (5V) matches the sensor output range, simplifying the
interface.
As an example, we prototyped the circuit on a breadboard (see Fig. 2). The MQ135 sensor board (blue module on the breadboard)
sits near the Arduino for short wiring. The analog AO pin is wired to A0 on the Uno. We connected a potentiometer (for LCD
contrast) and hooked up an I2C LCD display module (green board) via the Arduino’s SDA/SCL pins for text output. LEDs and a