Seeed Grove Laser PM2.5 Sensor values too low

This was working great for months but it was in a crappy case and it fell a few times and stopped worked. I thought the connections were poor so I updated the soldering but have been unable to get it working again. I keep getting all 0, 1, or 2 from PM1.0, PM2.5, and PM10.0 sensors even with smoke nearby which I know worked in the past.

I can hear/feel the fan come on sometimes but it’s not consistent.

I tried moving from 3.3v to 5v, tried different digital pins, and tried moving the board config to seeed_xiao_esp32c3

Did I break the sensors?

Config:

esp32:
  board: seeed_xiao_esp32c3
  framework:
    type: arduino
    platform_version: 6.7.0
  variant: ESP32C3

light:
  - platform: neopixelbus
    id: light_ring
    type: GRB
    variant: WS2813
    pin: GPIO3 # D1
    num_leds: 20
    name: "20 RGB Light"
    #restore_mode: RESTORE_AND_ON
    effects:
      # Colors from https://www.airnow.gov/how-to-use-this-site/
      - automation:
          name: AQI Good
          sequence:
            - light.addressable_set:
                id: light_ring
                range_from: 0
                range_to: 2
                color_brightness: 30%
                red: 0%
                green: 100%
                blue: 0%
            - light.addressable_set:
                id: light_ring
                range_from: 3
                range_to: 19
                red: 0%
                green: 0%
                blue: 0%
      - automation:
          name: AQI Moderate
          sequence:
            - light.addressable_set:
                id: light_ring
                range_from: 0
                range_to: 5
                color_brightness: 40%
                red: 100%
                green: 98%
                blue: 3%
            - light.addressable_set:
                id: light_ring
                range_from: 6
                range_to: 19
                red: 0%
                green: 0%
                blue: 0%
      - automation:
          name: AQI Unhealthy for Sensitive Groups
          sequence:
            - light.addressable_set:
                id: light_ring
                range_from: 0
                range_to: 8
                color_brightness: 50%
                red: 100%
                green: 49%
                blue: 0%
            - light.addressable_set:
                id: light_ring
                range_from: 9
                range_to: 19
                red: 0%
                green: 0%
                blue: 0%
      - automation:
          name: AQI Unhealthy
          sequence:
            - light.addressable_set:
                id: light_ring
                range_from: 0
                range_to: 11
                color_brightness: 70%
                red: 99%
                green: 16%
                blue: 1%
            - light.addressable_set:
                id: light_ring
                range_from: 12
                range_to: 19
                red: 0%
                green: 0%
                blue: 0%
      - automation:
          name: AQI Very Unhealthy
          sequence:
            - light.addressable_set:
                id: light_ring
                range_from: 0
                range_to: 15
                color_brightness: 80%
                red: 56%
                green: 25%
                blue: 58%
            - light.addressable_set:
                id: light_ring
                range_from: 16
                range_to: 19
                red: 0%
                green: 0%
                blue: 0%
      - automation:
          name: AQI Hazardous
          sequence:
            - light.addressable_set:
                id: light_ring
                range_from: 0
                range_to: 19
                color_brightness: 50%
                red: 100%
                green: 8%
                blue: 16%

      - addressable_color_wipe:
      - addressable_color_wipe:
          name: Color Wipe Effect With Custom Values
          colors:
            - red: 49%
              green: 100%
              blue: 100%
              num_leds: 1
            - red: 0%
              green: 0%
              blue: 0%
              num_leds: 1
          add_led_interval: 100ms
          reverse: false

i2c:
  sda: GPIO6 # D4
  scl: GPIO7 # D5
sensor:
  - platform: hm3301
    pm_1_0:
      name: "PM1.0"
    pm_2_5:
      name: "PM2.5"
    pm_10_0:
      name: "PM10.0"
    aqi:
      name: "AQI"
      calculation_type: "AQI"
      on_value_range:
        - below: 50
          then: 
            - light.turn_on:
                id: light_ring
                effect: AQI Good
        - above: 51.0
          below: 100.0
          then:
            - light.turn_on:
                id: light_ring
                effect: AQI Moderate
        - above: 101.0
          below: 150.0
          then:
            - light.turn_on:
                id: light_ring
                effect: AQI Unhealthy for Sensitive Groups
        - above: 151.0
          below: 200.0
          then:
            - light.turn_on:
                id: light_ring
                effect: AQI Unhealthy
        - above: 201.0
          below: 300.0
          then:
            - light.turn_on:
                id: light_ring
                effect: AQI Very Unhealthy
        - above: 301.0
          then:
            - light.turn_on:
                id: light_ring
                effect: AQI Hazardous

Hooked this up to my Arduino UNO and loaded Seeed_PM2_5_sensor_HM3301/examples/basic_demo/basic_demo.ino at 4e80ee71680259b60a5aa45e9c3e737224a37eb2 · Seeed-Studio/Seeed_PM2_5_sensor_HM3301 · GitHub and it’s doing the same thing

0  
FF  0  0  0  1  
0  1  0  1  0  
1  0  1  0  1  
0  0  0  0  0  
0  0  0  0  0  
0  0  
sensor num: 0
PM1.0 concentration(CF=1,Standard particulate matter,unit:ug/m3): 1
PM2.5 concentration(CF=1,Standard particulate matter,unit:ug/m3): 1
PM10 concentration(CF=1,Standard particulate matter,unit:ug/m3): 1
PM1.0 concentration(Atmospheric environment,unit:ug/m3): 1
PM2.5 concentration(Atmospheric environment,unit:ug/m3): 1
PM10 concentration(Atmospheric environment,unit:ug/m3): 1

Also shared this here: HM3301 Grove PM 2.5 displays static number - Grove - Seeed Studio Forum

It’s a pretty dynamic sensor (fan, laser, etc.) versus a lot of sensors that are just an IC; having several similar sensors myself (PMS5003), I would expect it wouldn’t take much of a fall to kill them.

Inspect your soldering. If you dropped it, throw it in trash, it’s very delicate sensor. If it’s in your home, leave your wife and the values start growing… :grinning:

Ah OK, sounds like it’s dead :pensive:

Nothing stands out as loose or broken but putting some pressure on the red and black wires labeled as Laser results in all the numbers jumping up and then either slowly lowering to 0 or near zero over a few seconds.


I wonder if this solder is too close and I should try de-soldering and resolder

Looks and sounds like cold joint, try to resolder all joints that have sphere shape