Ikea Vindriktning Serial UART

Hello :slightly_smiling_face:

I read several projects which are about the Ikea Vindriktning Air Quality Sensor and I would experiment with it as well, but while most projects use some easy to use/setup solutions like Tasmota, I would like to use a more basic but maybe also more complicated approach.

Currently I have the Vindriktning board (REST) connected to an Arduino Uno (D0 RX) and use the following code to read the UART serial communication coming from the Vindriktning:

int incomingByte = 0; // for incoming serial data

void setup() {
  Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
}

void loop() {
  // send data only when you receive data:
  if (Serial.available() > 0) {
    // read the incoming byte:
    incomingByte = Serial.read();

    // say what you got:
    Serial.print("I received: ");
    Serial.println(incomingByte, DEC);
  }
}

I am receiving the following - seven data pushes come through and then it pauses for 20 seconds until seven data pushes come through again. Below are 2 of such data pushes:

20:57:51.146 -> I received: 22
20:57:51.146 -> I received: 17
20:57:51.146 -> I received: 11
20:57:51.193 -> I received: 0
20:57:51.193 -> I received: 0
20:57:51.193 -> I received: 2
20:57:51.239 -> I received: 205
20:57:51.239 -> I received: 0
20:57:51.239 -> I received: 0
20:57:51.285 -> I received: 10
20:57:51.285 -> I received: 45
20:57:51.285 -> I received: 0
20:57:51.331 -> I received: 0
20:57:51.331 -> I received: 2
20:57:51.331 -> I received: 171
20:57:51.379 -> I received: 1
20:57:51.379 -> I received: 0
20:57:51.379 -> I received: 0
20:57:51.425 -> I received: 0
20:57:51.425 -> I received: 26

20:57:53.339 -> I received: 22
20:57:53.339 -> I received: 17
20:57:53.339 -> I received: 11
20:57:53.385 -> I received: 0
20:57:53.385 -> I received: 0
20:57:53.385 -> I received: 2
20:57:53.432 -> I received: 161
20:57:53.432 -> I received: 0
20:57:53.432 -> I received: 0
20:57:53.478 -> I received: 9
20:57:53.478 -> I received: 181
20:57:53.478 -> I received: 0
20:57:53.524 -> I received: 0
20:57:53.524 -> I received: 2
20:57:53.524 -> I received: 129
20:57:53.570 -> I received: 1
20:57:53.570 -> I received: 0
20:57:53.617 -> I received: 0
20:57:53.617 -> I received: 0
20:57:53.617 -> I received: 233

The LED was red as I used some candle smoke to trigger the sensor. I am quite puzzled regarding the interpretation of the numbers and hope that someone here can help me. The first 3 (22, 17, 11) are always the same, the zeros mostly as well, the other numbers change.

Per this article the LED should be green if there is less than 35 µg/m3 PM10 in the air, yellow for 36 to 85 µg/m3 and red as of 86 µg/m3.

The sensor in this product is supposed to be the PM1006, a very similar sensor with a product specification sheet is the PM1006K and the product sheet can be found here:
https://en.gassensor.com.cn/ParticulateMatterSensor/info_itemid_105.html

I looked into it and tried to understand but failed, also as I am tapping the serial of the board to which the sensor is connected and not the sensor itself, I might read something that is different to the content in the specification sheet.

Anyways, appreciate if someone can guide me on how I best interpetate the serial numbers as for µg/m3.

Cheers

This article shows how to connect to the device and has sample code to read and decode the output from it. the code is designed to work with the esp8266 but you may be able to just strip out the SerialCom class and modify it to your needs or just use it to get an idea on how to read/decode/check the data coming in from the sensor.