The data presented here was obtained through various tests performed on different Shinjei PPD42 units. Each test will be described in more detail below.

Preparing the analysis environment

# Load libraries
require('openair')
## Loading required package: openair
## Loading required package: lazyeval
## Loading required package: dplyr
## 
## Attaching package: 'dplyr'
## 
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## 
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
## 
## Loading required package: maps
require('corrplot')
## Loading required package: corrplot

May 2013

This test was performed outdoors during May 2013 at a residence in Auckland’s North Shore. The data indicate that the sensor did respond to moderate concentrations during the test but did not report above noise levels during expected low concentration periods. There was no reference device during this test so the estimates of low and moderate were made refering to the general conditions throughout the city and may not necessarily reflect local sources impacting the device.

# Loading the data
shinyei_201305 <- read.csv("/data/GUSrepos/R_work/data/shinyei_201305.txt", sep="")
shinyei_201305$date=as.POSIXct(paste(shinyei_201305$Date,shinyei_201305$Time),tz='NZST')
shinyei_201305$Date<-NULL
shinyei_201305$Time<-NULL
summary(shinyei_201305)
##       Conc            Humdity       Temperature   
##  Min.   : 0.0000   Min.   :24.10   Min.   :18.50  
##  1st Qu.: 0.0000   1st Qu.:27.50   1st Qu.:20.40  
##  Median : 0.0000   Median :30.10   Median :20.70  
##  Mean   : 0.4835   Mean   :32.41   Mean   :20.68  
##  3rd Qu.: 0.0000   3rd Qu.:33.30   3rd Qu.:21.10  
##  Max.   :62.4800   Max.   :99.90   Max.   :22.10  
##       date                    
##  Min.   :2013-05-17 17:08:24  
##  1st Qu.:2013-05-18 08:56:00  
##  Median :2013-05-19 00:44:00  
##  Mean   :2013-05-19 00:44:00  
##  3rd Qu.:2013-05-19 16:32:00  
##  Max.   :2013-05-20 08:20:00
# Plot summaries
timePlot(shinyei_201305,pollutant = c('Conc'),normalise = 'mean', main = 'Raw data\nnormalised to the mean')
## Warning in checkPrep(mydata, vars, type, remove.calm = FALSE): Detected
## data with Daylight Saving Time, converting to UTC/GMT

timePlot(shinyei_201305,pollutant = c('Conc'),normalise = 'mean', avg.time = '10 min',main = '10 min average\nnormalised to the mean')
## Warning in checkPrep(mydata, vars, type, remove.calm = FALSE): Detected
## data with Daylight Saving Time, converting to UTC/GMT

timeVariation(shinyei_201305,pollutant = c('Conc'),normalise = 'TRUE',main = 'Temporal variation\nnormalised to the mean')
## Warning in checkPrep(mydata, vars, type, remove.calm = FALSE): Detected
## data with Daylight Saving Time, converting to UTC/GMT

Nov 2015

This test was performed indoors during November 2015 at my desk in a well sealed and air conditioned central Auckland office The data indicate that the sensor did not respond to the relatively low concentrations during the test. There was no reference device during this test so the estimates of low is refered to the expected conditions in this office space.

# Loading the data
shinyei_201511 <- read.csv("/data/GUSrepos/R_work/data/shinyei_201511.txt", sep=",")
shinyei_201511$date=as.POSIXct(shinyei_201511$date)
summary(shinyei_201511)
##       date                       low_pulse     ratio   concentration 
##  Min.   :2015-11-26 01:22:22   Min.   :0   Min.   :0   Min.   :0.62  
##  1st Qu.:2015-11-26 22:47:12   1st Qu.:0   1st Qu.:0   1st Qu.:0.62  
##  Median :2015-11-27 22:06:33   Median :0   Median :0   Median :0.62  
##  Mean   :2015-11-27 22:07:45   Mean   :0   Mean   :0   Mean   :0.62  
##  3rd Qu.:2015-11-28 21:25:54   3rd Qu.:0   3rd Qu.:0   3rd Qu.:0.62  
##  Max.   :2015-11-29 20:45:15   Max.   :0   Max.   :0   Max.   :0.62
# Plot summaries
timePlot(shinyei_201511,pollutant = c('low_pulse','ratio','concentration'),normalise = 'mean', main = 'Raw data\nnormalised to the mean')
## Warning in checkPrep(mydata, vars, type, remove.calm = FALSE): Detected
## data with Daylight Saving Time, converting to UTC/GMT

timePlot(shinyei_201511,pollutant = c('low_pulse','ratio','concentration'),normalise = 'mean', avg.time = '10 min',main = '10 min average\nnormalised to the mean')
## Warning in checkPrep(mydata, vars, type, remove.calm = FALSE): Detected
## data with Daylight Saving Time, converting to UTC/GMT

As there signals from the Shinjei device were constant, the time variation plot is irrelevant.

# timeVariation(shinyei_201511,pollutant = c('low_pulse','ratio','concentration'),normalise = 'TRUE',main = 'Temporal variation\nnormalised to the mean')

Dec 14th 2015

This test was performed indoors during December 2015 at my desk in a well sealed and air conditioned central Auckland office. The main difference between the previous tests is the use of a modified firmware using interrupts to catch the pulses given by the sensor:

volatile unsigned long Tstart,Tend,t_1,t_2,Tlow,Ttot,t_0;
float  ratio,conc;
//Interrupt functions
void  T_falling(){
  t_1=millis();
}
void  T_rising(){
 t_2=millis()-t_1;
 Tlow=Tlow+t_2;
}
//SETUP
void  setup(){
 Serial.begin(57600);
 Serial.println("Time\tTlow\tTtot");
 Tlow=0;
 t_0=millis();
 Ttot=0;
 attachInterrupt(0,T_falling,FALLING);
 attachInterrupt(1,T_rising,RISING);
}
//MAIN LOOP
void loop(){
 delay(1000);
 Serial.print(t_0);
 Serial.print("\t");
 Serial.print(Tlow);
 Serial.print("\t");
 Ttot = millis() - t_0;
 Serial.println(Ttot);
 Ttot=0;
 Tlow=0;
 t_0=millis();
}

The data indicate that the sensor did not respond to the relatively low concentrations during the test, except during what probably was the cleaning staff walking around the sensor and may relate to “dust” lifted by vacuuming or walking on the carpet. There was no reference device during this test so the estimates of low is refered to the expected conditions in this office space.

# Loading the data
shinyei_201512 <- read.csv("/home/gustavo/data/Dust_tests/desktop_20151214/shinyei1.txt", sep="")
shinyei_201512$date=as.POSIXct(shinyei_201512$date,tz='GMT')
summary(shinyei_201512)
##       date                          Time               Tlow          
##  Min.   :2015-12-14 01:17:22   Min.   :   48092   Min.   :    0.000  
##  1st Qu.:2015-12-14 06:44:13   1st Qu.:19649778   1st Qu.:    0.000  
##  Median :2015-12-14 12:11:08   Median :39241076   Median :    0.000  
##  Mean   :2015-12-14 12:11:08   Mean   :39241100   Mean   :    1.415  
##  3rd Qu.:2015-12-14 17:38:03   3rd Qu.:58832375   3rd Qu.:    0.000  
##  Max.   :2015-12-14 23:05:00   Max.   :78423680   Max.   :22663.000  
##       Ttot     
##  Min.   : 999  
##  1st Qu.:1000  
##  Median :1000  
##  Mean   :1001  
##  3rd Qu.:1001  
##  Max.   :1002
# Plot summaries
timePlot(shinyei_201512,pollutant = c('Tlow'), main = 'Raw data', xlab = 'GMT time')

timePlot(shinyei_201512,pollutant = c('Tlow'), avg.time = '10 min',main = '10 min average', xlab = 'GMT time')

timeVariation(shinyei_201512,pollutant = c('Tlow'),main = 'Temporal variation')

Dec 15th 2015

This test was performed indoors during December 2015 at my desk in a well sealed and air conditioned central Auckland office. The main difference between the previous tests is the use of a Grimm Aerosol Spectrometer as a reference instrument recording data as 10 minutes average.

The data indicate that the sensor did respond to the relatively low concentrations during the test. The Shinyei’s response correlates more strongly (\(r^2\) 0.76) with the Grimm spectrometer counts of particles larger than 800nm which is close to the sensor’s specification of measuring particles larger than 1\(\mu m\) (1000nm).

For the device tested here, the best linear fit against the n800 channel corresponds to: \[N_{800} = (100\pm30) + (200\pm40)*10^3 * ratio\]

# Loading the data (shinyei)
shinyei_201512_2 <- read.csv("/home/gustavo/data/Dust_tests/desktop_20151215/shinyei_20151215.txt", sep="")
shinyei_201512_2$date=as.POSIXct(shinyei_201512_2$date,tz='GMT')
# From Shinyei's datasheet, the particle number concentration is related to the "low pulse occupancy time" as a percentage.
shinyei_201512_2$ratio = shinyei_201512_2$Tlow/(shinyei_201512_2$Ttot)
# (grimm spectrometer)
grimm_201512 <- read.csv("/home/gustavo/data/Dust_tests/desktop_20151215/grimm_20151215.parsed", sep="")
grimm_201512$date <- as.POSIXct(grimm_201512$date,tz = 'GMT')
shinyei_grimm <- merge(shinyei_201512_2,grimm_201512,by='date',all=TRUE)
# Correlation calculations to find Shinyei's size information
for_correl <- timeAverage(shinyei_grimm,avg.time = '30 min')
find_channels <- cor(for_correl[,c(5,7:21)],use = 'pairwise')
# Plot summaries
timePlot(shinyei_grimm,pollutant = c('n300','n500','n800','n10000','ratio'),avg.time = '30 min')

corrplot(find_channels,method = 'circle',diag=FALSE)