Menu Close

Air Quality Testing using MQ135 Sensor with Pico

Display the air quality status (like “Good”, “Poor”, etc.) on a 16×2 LCD based on the voltage output from the MQ135 sensor connected to Raspberry Pi Pico.

Connections:

  • MQ135 Sensor
  • VCC → Pico VBUS Pin 40
  • GND → Pico GND
  • AOUT → Pico ADC0 (physical pin 31 / GPIO26)
  • I2C LCD (16×2):
  • VCC → Pico VBUS Pin 40
  • GND → Pico GND
  • SDA → Pico GP0 (pin 1)
  • SCL → Pico GP1 (pin 2)

Code:

from machine import ADC, Pin, SoftI2C
from pico_i2c_lcd import I2cLcd
from time import sleep

# LCD setup
i2c = SoftI2C(sda=Pin(0), scl=Pin(1), freq=400000)
lcd = I2cLcd(i2c, 0x3f, 2, 16)

# MQ135 analog pin setup
mq135 = ADC(Pin(26))  # ADC0 (Physical pin 31)

def get_quality(voltage):
    if voltage < 0.5:
        return "Excellent"
    elif voltage < 1.0:
        return "Good"
    elif voltage < 1.5:
        return "Moderate"
    elif voltage < 2.0:
        return "Poor"
    else:
        return "Very Poor"

lcd.clear()
lcd.putstr("Air Quality Meter")
sleep(2)
lcd.clear()

while True:
    raw = mq135.read_u16()
    voltage = (raw / 65535) * 3.3

    quality = get_quality(voltage)

    lcd.move_to(0, 0)
    lcd.putstr("Volt:{:.2f}V     ".format(voltage))
    lcd.move_to(0, 1)
    lcd.putstr("Air: {:<11}".format(quality))

    sleep(1)

Download Code:

When you run this code:

Line 1 of LCD shows live sensor voltage

Line 2 displays air quality like “Good”, “Poor”, etc.

Values update every second

Leave a Reply