@ -0,0 +1,3 @@ | |||
# Air_Quality_Sensor_PPD42 | |||
Testing out the PPD42 Air Quality Sensor, with an MSP430 Launchpad and graphing the data with GNUplot. |
@ -0,0 +1,42 @@ | |||
/* | |||
Blink | |||
The basic Energia example. | |||
Turns on an LED on for one second, then off for one second, repeatedly. | |||
Change the LED define to blink other LEDs. | |||
Hardware Required: | |||
* LaunchPad with an LED | |||
This example code is in the public domain. | |||
*/ | |||
// most launchpads have a red LED | |||
//#define LED RED_LED | |||
//see pins_energia.h for more LED definitions | |||
#define LED GREEN_LED | |||
#define DUSTSENSORPIN 1 | |||
// the setup routine runs once when you press reset: | |||
void setup() { | |||
// initialize the digital pin as an output. | |||
pinMode(LED, OUTPUT); | |||
pinMode(DUSTSENSORPIN, INPUT); | |||
Serial.begin(4800); | |||
} | |||
// the loop routine runs over and over again forever: | |||
void loop() { | |||
Serial.println("test"); | |||
digitalWrite(LED, HIGH); // turn the LED on (HIGH is the voltage level) | |||
delay(1000); // wait for a second | |||
digitalWrite(LED, LOW); // turn the LED off by making the voltage LOW | |||
delay(1000); // wait for a second | |||
int DustSensorState = digitalRead(DUSTSENSORPIN); | |||
Serial.print("Sensor reads:"); | |||
Serial.println(DustSensorState); | |||
} | |||
@ -0,0 +1,8 @@ | |||
#include <stdio.h> | |||
char *dtostrf (double val, signed char width, unsigned char prec, char *sout) { | |||
char fmt[20]; | |||
sprintf(fmt, "%%%d.%df", width, prec); | |||
sprintf(sout, fmt, val); | |||
return sout; | |||
} |
@ -0,0 +1,9 @@ | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
char *dtostrf (double val, signed char width, unsigned char prec, char *sout); | |||
#ifdef __cplusplus | |||
} | |||
#endif |
@ -0,0 +1,44 @@ | |||
#ifndef __PGMSPACE_H_ | |||
#define __PGMSPACE_H_ 1 | |||
#include <inttypes.h> | |||
#define PROGMEM | |||
#define PGM_P const char * | |||
#define PSTR(str) (str) | |||
#define _SFR_BYTE(n) (n) | |||
typedef void prog_void; | |||
typedef char prog_char; | |||
typedef unsigned char prog_uchar; | |||
typedef int8_t prog_int8_t; | |||
typedef uint8_t prog_uint8_t; | |||
typedef int16_t prog_int16_t; | |||
typedef uint16_t prog_uint16_t; | |||
typedef int32_t prog_int32_t; | |||
typedef uint32_t prog_uint32_t; | |||
#define memcpy_P(dest, src, num) memcpy((dest), (src), (num)) | |||
#define strcpy_P(dest, src) strcpy((dest), (src)) | |||
#define strcat_P(dest, src) strcat((dest), (src)) | |||
#define strcmp_P(a, b) strcmp((a), (b)) | |||
#define strstr_P(a, b) strstr((a), (b)) | |||
#define strlen_P(a) strlen((a)) | |||
#define sprintf_P(s, f, ...) sprintf((s), (f), __VA_ARGS__) | |||
#define pgm_read_byte(addr) (*(const unsigned char *)(addr)) | |||
#define pgm_read_word(addr) (*(const unsigned short *)(addr)) | |||
#define pgm_read_dword(addr) (*(const unsigned long *)(addr)) | |||
#define pgm_read_float(addr) (*(const float *)(addr)) | |||
#define pgm_read_byte_near(addr) pgm_read_byte(addr) | |||
#define pgm_read_word_near(addr) pgm_read_word(addr) | |||
#define pgm_read_dword_near(addr) pgm_read_dword(addr) | |||
#define pgm_read_float_near(addr) pgm_read_float(addr) | |||
#define pgm_read_byte_far(addr) pgm_read_byte(addr) | |||
#define pgm_read_word_far(addr) pgm_read_word(addr) | |||
#define pgm_read_dword_far(addr) pgm_read_dword(addr) | |||
#define pgm_read_float_far(addr) pgm_read_float(addr) | |||
#endif |
@ -0,0 +1,69 @@ | |||
//--- made by SKA --- | |||
//--- test EtherEncLib | |||
// adapted by Renato Aloi | |||
// May 2015 | |||
// removed SD Card part for future implementation | |||
#include <SPI.h> | |||
#include <EtherEncLib.h> | |||
#if (ESP8266) | |||
#include <pgmspace.h> | |||
#else | |||
#include <avr/pgmspace.h> | |||
#endif | |||
static unsigned char ipaddr[] = { 192, 168, 1, 125 }; | |||
static unsigned char macaddr[] = { 0x00, 0x11, 0x22, 0x44, 0x00, 0x25 }; | |||
EtherEncLib eElib(80); | |||
const PROGMEM char resp200Txt[] = {"HTTP/1.0 200 OK\n\rContent-Type: text/html\n\rPragma: no-cache\n\r\n\r"}; | |||
void setup() | |||
{ | |||
#if (ESP8266) | |||
Serial.begin(115200); | |||
pinMode(5,OUTPUT); //--- ? -- SS pin must be output # by Renato Aloi | |||
#else | |||
Serial.begin(9600); | |||
pinMode(10,OUTPUT); //--- ? -- SS pin must be output # by Renato Aloi | |||
#endif | |||
eElib.begin(ipaddr,macaddr); | |||
Serial.println(F("------ program start -----------")); | |||
//Serial.println(F("NO SDCARD version")); // by Renato Aloi | |||
} | |||
void loop() { | |||
if ( eElib.available() ) | |||
{ | |||
Serial.println(eElib.getParams()); | |||
eElib.print((char *)&resp200Txt[0],strlen_P(&resp200Txt[0])); | |||
if (eElib.isIndexHtml) | |||
{ | |||
eElib.print("<HTML><body><H1>Hello World!</H1>"); | |||
eElib.print("<form method=POST>"); | |||
eElib.print("<input type=text name=nome />"); | |||
eElib.print("<input type=submit value=OK />"); | |||
eElib.print("</form></body>"); | |||
eElib.print("</HTML>"); | |||
} | |||
else if (eElib.isPost) | |||
{ | |||
eElib.print("<HTML><body><H1>POST Params: "); | |||
eElib.print(eElib.getParams()); | |||
eElib.print("</H1></body>"); | |||
eElib.print("</HTML>"); | |||
} | |||
else if (eElib.isGet) | |||
{ | |||
eElib.print("<HTML><body><H1>GET Params: "); | |||
eElib.print(eElib.getParams()); | |||
eElib.print("</H1></body>"); | |||
eElib.print("</HTML>"); | |||
} | |||
eElib.close(); | |||
} | |||
} |
@ -0,0 +1,8 @@ | |||
#include <stdio.h> | |||
char *dtostrf (double val, signed char width, unsigned char prec, char *sout) { | |||
char fmt[20]; | |||
sprintf(fmt, "%%%d.%df", width, prec); | |||
sprintf(sout, fmt, val); | |||
return sout; | |||
} |
@ -0,0 +1,9 @@ | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
char *dtostrf (double val, signed char width, unsigned char prec, char *sout); | |||
#ifdef __cplusplus | |||
} | |||
#endif |
@ -0,0 +1,44 @@ | |||
#ifndef __PGMSPACE_H_ | |||
#define __PGMSPACE_H_ 1 | |||
#include <inttypes.h> | |||
#define PROGMEM | |||
#define PGM_P const char * | |||
#define PSTR(str) (str) | |||
#define _SFR_BYTE(n) (n) | |||
typedef void prog_void; | |||
typedef char prog_char; | |||
typedef unsigned char prog_uchar; | |||
typedef int8_t prog_int8_t; | |||
typedef uint8_t prog_uint8_t; | |||
typedef int16_t prog_int16_t; | |||
typedef uint16_t prog_uint16_t; | |||
typedef int32_t prog_int32_t; | |||
typedef uint32_t prog_uint32_t; | |||
#define memcpy_P(dest, src, num) memcpy((dest), (src), (num)) | |||
#define strcpy_P(dest, src) strcpy((dest), (src)) | |||
#define strcat_P(dest, src) strcat((dest), (src)) | |||
#define strcmp_P(a, b) strcmp((a), (b)) | |||
#define strstr_P(a, b) strstr((a), (b)) | |||
#define strlen_P(a) strlen((a)) | |||
#define sprintf_P(s, f, ...) sprintf((s), (f), __VA_ARGS__) | |||
#define pgm_read_byte(addr) (*(const unsigned char *)(addr)) | |||
#define pgm_read_word(addr) (*(const unsigned short *)(addr)) | |||
#define pgm_read_dword(addr) (*(const unsigned long *)(addr)) | |||
#define pgm_read_float(addr) (*(const float *)(addr)) | |||
#define pgm_read_byte_near(addr) pgm_read_byte(addr) | |||
#define pgm_read_word_near(addr) pgm_read_word(addr) | |||
#define pgm_read_dword_near(addr) pgm_read_dword(addr) | |||
#define pgm_read_float_near(addr) pgm_read_float(addr) | |||
#define pgm_read_byte_far(addr) pgm_read_byte(addr) | |||
#define pgm_read_word_far(addr) pgm_read_word(addr) | |||
#define pgm_read_dword_far(addr) pgm_read_dword(addr) | |||
#define pgm_read_float_far(addr) pgm_read_float(addr) | |||
#endif |
@ -0,0 +1,136 @@ | |||
#include <math.h> | |||
//--- made by SKA --- | |||
//--- test EtherEncLib | |||
// adapted by Renato Aloi | |||
// May 2015 | |||
// removed SD Card part for future implementation | |||
#include <SPI.h> | |||
#include <EtherEncLib.h> | |||
#if (ESP8266) | |||
#include <pgmspace.h> | |||
#else | |||
#include <avr/pgmspace.h> | |||
#endif | |||
static unsigned char ipaddr[] = { 192, 168, 1, 125 }; | |||
static unsigned char macaddr[] = { 0x00, 0x11, 0x22, 0x44, 0x00, 0x25 }; | |||
EtherEncLib eElib(80); | |||
const PROGMEM char resp200Txt[] = {"HTTP/1.0 200 OK\n\rContent-Type: text/html\n\rPragma: no-cache\n\r\n\r"}; | |||
//sensor start | |||
int DustSensePin = 13; | |||
unsigned long duration; | |||
unsigned long starttime; | |||
unsigned long sampletime_ms = 30000;//sample 30s ; | |||
unsigned long lowpulseoccupancy = 0; | |||
float ratio = 0; | |||
float concentration = 0; | |||
void setup() | |||
{ | |||
#if (ESP8266) | |||
Serial.begin(115200); | |||
pinMode(5,OUTPUT); //--- ? -- SS pin must be output # by Renato Aloi | |||
#else | |||
Serial.begin(9600); | |||
pinMode(8,OUTPUT); //--- ? -- SS pin must be output # by Renato Aloi | |||
#endif | |||
eElib.begin(ipaddr,macaddr); | |||
Serial.println(F("------ program start -----------")); | |||
//Serial.println(F("NO SDCARD version")); // by Renato Aloi | |||
pinMode(DustSensePin,INPUT); | |||
starttime = millis();//get the current time; | |||
} | |||
void loop() { | |||
duration = pulseIn(DustSensePin, LOW); | |||
lowpulseoccupancy = lowpulseoccupancy+duration; | |||
if ((millis()-starttime) > sampletime_ms)//if the sample time == 30s | |||
{ | |||
ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 | |||
//float exponential power - DOESN"T BUILD | |||
//concentration = 1.1*powf(ratio,3)-3.8*powf(ratio,2)+520*ratio+0.62; // using spec sheet curve | |||
//leaner exponential power | |||
concentration = 1.1*ipow(ratio,3)-3.8*ipow(ratio,2)+520*ratio+0.62; // using spec sheet curve | |||
//Serial.print(lowpulseoccupancy); | |||
//Serial.print(","); | |||
//Serial.print(ratio); | |||
//Serial.print(","); | |||
//Serial.println(concentration); | |||
//lowpulseoccupancy = 0; | |||
starttime = millis(); | |||
Serial.println("DataGet"); | |||
} | |||
if ( eElib.available() ) | |||
{ | |||
Serial.println(eElib.getParams()); | |||
eElib.print((char *)&resp200Txt[0],strlen_P(&resp200Txt[0])); | |||
if (eElib.isIndexHtml) | |||
{ | |||
eElib.print("<HTML><body><H1>Hello World!</H1>"); | |||
//eElib.print("<form method=POST>"); | |||
eElib.print("<br>"); | |||
eElib.print((int)lowpulseoccupancy); | |||
eElib.print("<br>"); | |||
eElib.print((int)ratio); | |||
eElib.print("<br>"); | |||
eElib.print((int)concentration); | |||
eElib.print("<br>"); | |||
//eElib.print("</form></body>"); | |||
eElib.print("</body></HTML>"); | |||
//Serial.print(lowpulseoccupancy); | |||
//Serial.print(","); | |||
//Serial.print(ratio); | |||
//Serial.print(","); | |||
//Serial.println(concentration); | |||
} | |||
/* | |||
else if (eElib.isPost) | |||
{ | |||
eElib.print("<HTML><body><H1>POST Params: "); | |||
eElib.print(eElib.getParams()); | |||
eElib.print("</H1></body>"); | |||
eElib.print("</HTML>"); | |||
} | |||
else if (eElib.isGet) | |||
{ | |||
eElib.print("<HTML><body><H1>GET Params: "); | |||
eElib.print(eElib.getParams()); | |||
eElib.print("</H1></body>"); | |||
eElib.print("</HTML>"); | |||
}*/ | |||
eElib.close(); | |||
} | |||
} | |||
int ipow(int base, int exp) | |||
{ | |||
int result = 1; | |||
for (;;) | |||
{ | |||
if (exp & 1) | |||
result *= base; | |||
exp >>= 1; | |||
if (!exp) | |||
break; | |||
base *= base; | |||
} | |||
return result; | |||
} |
@ -0,0 +1,8 @@ | |||
#include <stdio.h> | |||
char *dtostrf (double val, signed char width, unsigned char prec, char *sout) { | |||
char fmt[20]; | |||
sprintf(fmt, "%%%d.%df", width, prec); | |||
sprintf(sout, fmt, val); | |||
return sout; | |||
} |
@ -0,0 +1,9 @@ | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
char *dtostrf (double val, signed char width, unsigned char prec, char *sout); | |||
#ifdef __cplusplus | |||
} | |||
#endif |
@ -0,0 +1,173 @@ | |||
#include <math.h> | |||
//--- made by SKA --- | |||
//--- test EtherEncLib | |||
// adapted by Renato Aloi | |||
// May 2015 | |||
// removed SD Card part for future implementation | |||
#include <SPI.h> | |||
#include <EtherEncLib.h> | |||
#if (ESP8266) | |||
#include <pgmspace.h> | |||
#else | |||
#include <avr/pgmspace.h> | |||
#endif | |||
static unsigned char ipaddr[] = { 192, 168, 1, 125 }; | |||
static unsigned char macaddr[] = { 0x00, 0x11, 0x22, 0x44, 0x00, 0x25 }; | |||
EtherEncLib eElib(80); | |||
const PROGMEM char resp200Txt[] = {"HTTP/1.0 200 OK\n\rContent-Type: text/html\n\rPragma: no-cache\n\r\n\r"}; | |||
//sensor start | |||
int DustSensePin = 13; | |||
//copy and paste for 50 zeros | |||
//this should probably not be global... | |||
//Int means max 65535 or so. May need to move to long | |||
//making this too high runs into memory problems | |||
//This resolution will be relatively good enough for now. | |||
//If we need more space, then store only the first value in an unsigned int or long, then | |||
//bit shift it down to reduce size, and store in array in a lower size var. | |||
unsigned int reading[30] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; | |||
unsigned long sampletime_ms = 60000;//sample 30s ; | |||
unsigned long starttime = 0; | |||
unsigned char x = 0; | |||
unsigned char toplimit = 0; | |||
unsigned long sum = 0; //highest number possible - 32 bit unsigned, so 4 billion | |||
unsigned int average = 0; | |||
unsigned int sumcutdown = 0; | |||
void setup() | |||
{ | |||
Serial.println(F("Setup begin")); | |||
#if (ESP8266) | |||
Serial.begin(115200); | |||
pinMode(5,OUTPUT); //--- ? -- SS pin must be output # by Renato Aloi | |||
#else | |||
Serial.begin(9600); | |||
pinMode(8,OUTPUT); //--- ? -- SS pin must be output # by Renato Aloi | |||
#endif | |||
eElib.begin(ipaddr,macaddr); | |||
Serial.println(F("------ program start -----------")); | |||
//Serial.println(F("NO SDCARD version")); // by Renato Aloi | |||
pinMode(DustSensePin,INPUT); | |||
starttime = millis();//get the current time; | |||
} | |||
void loop() { | |||
reading[x] = pulseIn(DustSensePin, LOW, 500000); | |||
//Print out readings on serial, as they come | |||
if (reading[x] != 0){ | |||
Serial.println(reading[x]); | |||
x=x+1; | |||
if(x>50){ | |||
x = 0; | |||
} | |||
} | |||
if ((millis()-starttime) > sampletime_ms){ | |||
//reset these, no need to display on webpage anymore | |||
sum = 0; | |||
average = 0; | |||
toplimit = x; // don't read the zeros | |||
/* | |||
if(toplimit == 0){ | |||
toplimit = 1; //to avoid divide by zero, in case sum / toplimit is both zero | |||
} | |||
*/ | |||
for (x=0; x<toplimit; x++){ | |||
sum = sum + reading[x]; | |||
} | |||
average = sum / toplimit; | |||
//see work docs. Bit shift to allow for lower resolution for built in print functions. | |||
//outputting an int - 16 bit, but we originally have a 32 bit) | |||
sumcutdown = sum >> 4; | |||
//Serial.print("Average Get!: "); | |||
//Serial.println(average); //average when 0 is 65535, so it's invalid (dividing by zero - sum divided by top limit which are both zero) | |||
//but we don't even want the average. It's just for testing here. | |||
Serial.print("Sum Get!: "); | |||
Serial.println(sum); //this is what we care about | |||
Serial.print("Sumcutdown Get!: "); | |||
Serial.println(sumcutdown); //bit shifted | |||
//reset everything that can be reset after a minute | |||
x = 0; | |||
toplimit = 0; | |||
for (x=0; x<toplimit; x++){ | |||
reading[x] = 0; | |||
} | |||
starttime = millis(); | |||
} | |||
if ( eElib.available() ) | |||
{ | |||
Serial.println(eElib.getParams()); | |||
eElib.print((char *)&resp200Txt[0],strlen_P(&resp200Txt[0])); | |||
if (eElib.isIndexHtml) | |||
{ | |||
eElib.print("<pre><H1>Hello World!</H1>"); | |||
//eElib.print("<form method=POST>"); | |||
eElib.print("<br>"); | |||
eElib.print("The Sum is: "); | |||
eElib.print((unsigned)sumcutdown); | |||
//eElib.print("</form></body>"); | |||
eElib.print("</pre>"); | |||
} | |||
/* | |||
else if (eElib.isPost) | |||
{ | |||
eElib.print("<HTML><body><H1>POST Params: "); | |||
eElib.print(eElib.getParams()); | |||
eElib.print("</H1></body>"); | |||
eElib.print("</HTML>"); | |||
} | |||
else if (eElib.isGet) | |||
{ | |||
eElib.print("<HTML><body><H1>GET Params: "); | |||
eElib.print(eElib.getParams()); | |||
eElib.print("</H1></body>"); | |||
eElib.print("</HTML>"); | |||
}*/ | |||
eElib.close(); | |||
} | |||
} | |||
//unused | |||
/* | |||
int ipow(int base, int exp) | |||
{ | |||
int result = 1; | |||
for (;;) | |||
{ | |||
if (exp & 1) | |||
result *= base; | |||
exp >>= 1; | |||
if (!exp) | |||
break; | |||
base *= base; | |||
} | |||
return result; | |||
}*/ |
@ -0,0 +1,44 @@ | |||
#ifndef __PGMSPACE_H_ | |||
#define __PGMSPACE_H_ 1 | |||
#include <inttypes.h> | |||
#define PROGMEM | |||
#define PGM_P const char * | |||
#define PSTR(str) (str) | |||
#define _SFR_BYTE(n) (n) | |||
typedef void prog_void; | |||
typedef char prog_char; | |||
typedef unsigned char prog_uchar; | |||
typedef int8_t prog_int8_t; | |||
typedef uint8_t prog_uint8_t; | |||
typedef int16_t prog_int16_t; | |||
typedef uint16_t prog_uint16_t; | |||
typedef int32_t prog_int32_t; | |||
typedef uint32_t prog_uint32_t; | |||
#define memcpy_P(dest, src, num) memcpy((dest), (src), (num)) | |||
#define strcpy_P(dest, src) strcpy((dest), (src)) | |||
#define strcat_P(dest, src) strcat((dest), (src)) | |||
#define strcmp_P(a, b) strcmp((a), (b)) | |||
#define strstr_P(a, b) strstr((a), (b)) | |||
#define strlen_P(a) strlen((a)) | |||
#define sprintf_P(s, f, ...) sprintf((s), (f), __VA_ARGS__) | |||
#define pgm_read_byte(addr) (*(const unsigned char *)(addr)) | |||
#define pgm_read_word(addr) (*(const unsigned short *)(addr)) | |||
#define pgm_read_dword(addr) (*(const unsigned long *)(addr)) | |||
#define pgm_read_float(addr) (*(const float *)(addr)) | |||
#define pgm_read_byte_near(addr) pgm_read_byte(addr) | |||
#define pgm_read_word_near(addr) pgm_read_word(addr) | |||
#define pgm_read_dword_near(addr) pgm_read_dword(addr) | |||
#define pgm_read_float_near(addr) pgm_read_float(addr) | |||
#define pgm_read_byte_far(addr) pgm_read_byte(addr) | |||
#define pgm_read_word_far(addr) pgm_read_word(addr) | |||
#define pgm_read_dword_far(addr) pgm_read_dword(addr) | |||
#define pgm_read_float_far(addr) pgm_read_float(addr) | |||
#endif |
@ -0,0 +1,35 @@ | |||
#!/usr/bin/python | |||
''' | |||
Original data collection script by Ben Kenney - July 2012 | |||
This program reads data coming from the serial port and saves that data to a text file. It expects data in the following format with a comma (,) as a separator: | |||
"value1,value2" | |||
It assumes that the Arduino shows up in /dev/ttyACM0 on the Raspberry Pi which should happen if you're using Debian. | |||
''' | |||
import serial | |||
from time import strftime | |||
from datetime import datetime, time | |||
ser = serial.Serial('/dev/ttyACM0',9600) | |||
startTime = datetime.now() | |||
try: | |||
while 1: | |||
line=ser.readline().rstrip() | |||
# temp,outsidetemp=line.split(",") | |||
# we have more data. | |||
# I don't know what they are yet... | |||
read1,read2,read3=line.split(","); | |||
now = datetime.now() | |||
elapsedTime = now-startTime | |||
elapsedSeconds = (elapsedTime.microseconds+(elapsedTime.days*24*3600+elapsedTime.seconds)*10**6)/10**6 | |||
#this is the original | |||
# | |||
# f=open('/home/pi/sensors/sensordata/temperaturedata.csv','a') | |||
# | |||
f=open('./temperaturedata.csv','a') | |||
print >>f,("%s,%s,%s,%s,%s"%(now.strftime("%Y-%m-%d %H:%M:%S"),elapsedSeconds,read1,read2,read3)) | |||
f.close() | |||
except KeyboardInterrupt: | |||
print "\ndone" |
@ -0,0 +1,397 @@ | |||
2019-01-05 19:59:18,27,112105,0.37,194.46 | |||
2019-01-05 19:59:48,58,104586,0.35,181.49 | |||
2019-01-05 20:00:20,90,73314,0.24,127.49 | |||
2019-01-05 20:00:51,120,269665,0.90,465.77 | |||
2019-01-05 20:01:22,151,271773,0.91,469.39 | |||
2019-01-05 20:01:53,183,116528,0.39,202.09 | |||
2019-01-05 20:02:24,213,162353,0.54,281.09 | |||
2019-01-05 20:02:55,245,168318,0.56,291.37 | |||
2019-01-05 20:03:26,275,137650,0.46,238.52 | |||
2019-01-05 20:03:56,306,300888,1.00,519.45 | |||
2019-01-05 20:04:27,337,118525,0.40,205.54 | |||
2019-01-05 20:04:58,368,156318,0.52,270.70 | |||
2019-01-05 20:05:29,399,253288,0.84,437.61 | |||
2019-01-05 20:06:01,430,285557,0.95,493.09 | |||
2019-01-05 20:06:32,461,115118,0.38,199.66 | |||
2019-01-05 20:07:03,492,157681,0.53,273.04 | |||
2019-01-05 20:07:34,523,313713,1.05,541.49 | |||
2019-01-05 20:08:05,554,54871,0.18,95.61 | |||
2019-01-05 20:08:37,586,76294,0.25,132.64 | |||
2019-01-05 20:09:09,618,215227,0.72,372.13 | |||
2019-01-05 20:09:39,649,257114,0.86,444.19 | |||
2019-01-05 20:10:10,680,105383,0.35,182.86 | |||
2019-01-05 20:10:41,711,231989,0.77,400.97 | |||
2019-01-05 20:11:12,742,157832,0.53,273.30 | |||
2019-01-05 20:11:43,772,4873,0.02,9.07 | |||
2019-01-05 20:12:15,804,143329,0.48,248.31 | |||
2019-01-05 20:12:46,836,157660,0.53,273.01 | |||
2019-01-05 20:13:18,867,291728,0.97,503.70 | |||
2019-01-05 20:13:49,899,0,0.00,0.62 | |||
2019-01-05 20:14:21,930,106930,0.36,185.53 | |||
2019-01-05 20:14:53,962,119659,0.40,207.49 | |||
2019-01-05 20:15:25,994,135758,0.45,235.26 | |||
2019-01-05 20:15:55,1025,208761,0.70,361.00 | |||
2019-01-05 20:16:26,1056,71436,0.24,124.24 | |||
2019-01-05 20:16:57,1086,95620,0.32,166.01 | |||
2019-01-05 20:17:29,1118,31204,0.10,54.67 | |||
2019-01-05 20:18:00,1149,240325,0.80,415.31 | |||
2019-01-05 20:18:31,1180,0,0.00,0.62 | |||
2019-01-05 20:19:02,1212,105936,0.35,183.82 | |||
2019-01-05 20:19:34,1243,219215,0.73,378.99 | |||
2019-01-05 20:20:05,1274,351948,1.17,607.21 | |||
2019-01-05 20:20:37,1306,130260,0.43,225.78 | |||
2019-01-05 20:21:08,1338,215783,0.72,373.09 | |||
2019-01-05 20:21:39,1369,235589,0.79,407.16 | |||
2019-01-05 20:22:11,1400,164932,0.55,285.54 | |||
2019-01-05 20:22:42,1431,0,0.00,0.62 | |||
2019-01-05 20:23:14,1463,35366,0.12,61.87 | |||
2019-01-05 20:23:46,1495,277039,0.92,478.45 | |||
2019-01-05 20:24:16,1526,112808,0.38,195.68 | |||
2019-01-05 20:24:47,1557,66890,0.22,116.39 | |||
2019-01-05 20:25:19,1588,148889,0.50,257.89 | |||
2019-01-05 20:25:50,1620,79933,0.27,138.92 | |||
2019-01-05 20:26:21,1650,63640,0.21,110.77 | |||
2019-01-05 20:26:53,1682,195845,0.65,338.77 | |||
2019-01-05 20:27:24,1713,137990,0.46,239.11 | |||
2019-01-05 20:27:55,1745,177355,0.59,306.93 | |||
2019-01-05 20:28:26,1775,60739,0.20,105.75 | |||
2019-01-05 20:28:56,1806,130597,0.44,226.36 | |||
2019-01-05 20:29:28,1837,135349,0.45,234.55 | |||
2019-01-05 20:29:59,1868,150300,0.50,260.32 | |||
2019-01-05 20:30:29,1899,65524,0.22,114.03 | |||
2019-01-05 20:31:00,1929,57514,0.19,100.18 | |||
2019-01-05 20:31:31,1960,70784,0.24,123.12 | |||
2019-01-05 20:32:03,1992,102506,0.34,177.90 | |||
2019-01-05 20:32:35,2024,272364,0.91,470.41 | |||
2019-01-05 20:33:06,2055,76847,0.26,133.59 | |||
2019-01-05 20:33:37,2087,163264,0.54,282.66 | |||
2019-01-05 20:34:09,2119,183813,0.61,318.06 | |||
2019-01-05 20:34:40,2150,118392,0.39,205.31 | |||
2019-01-05 20:35:12,2182,56292,0.19,98.07 | |||
2019-01-05 20:35:44,2213,110316,0.37,191.38 | |||
2019-01-05 20:36:15,2245,57770,0.19,100.62 | |||
2019-01-05 20:36:46,2276,55322,0.18,96.39 | |||
2019-01-05 20:37:18,2308,15465,0.05,27.42 | |||
2019-01-05 20:37:50,2339,110808,0.37,192.22 | |||
2019-01-05 20:38:21,2370,0,0.00,0.62 | |||
2019-01-05 20:38:52,2401,119861,0.40,207.84 | |||
2019-01-05 20:39:23,2432,0,0.00,0.62 | |||
2019-01-05 20:39:55,2464,96303,0.32,167.19 | |||
2019-01-05 20:40:26,2495,58463,0.19,101.82 | |||
2019-01-05 20:40:56,2526,110397,0.37,191.52 | |||
2019-01-05 20:41:28,2557,14068,0.05,25.00 | |||
2019-01-05 20:41:59,2588,187023,0.62,323.58 | |||
2019-01-05 20:42:30,2619,163577,0.55,283.20 | |||
2019-01-05 20:43:01,2651,86249,0.29,149.83 | |||
2019-01-05 20:43:32,2682,0,0.00,0.62 | |||
2019-01-05 20:44:04,2713,5917,0.02,10.87 | |||
2019-01-05 20:44:35,2745,32574,0.11,57.04 | |||
2019-01-05 20:45:07,2776,76487,0.25,132.97 | |||
2019-01-05 20:45:38,2807,0,0.00,0.62 | |||
2019-01-05 20:46:09,2838,0,0.00,0.62 | |||
2019-01-05 20:46:40,2870,97250,0.32,168.82 | |||
2019-01-05 20:47:12,2901,109043,0.36,189.18 | |||
2019-01-05 20:47:43,2932,0,0.00,0.62 | |||
2019-01-05 20:48:14,2964,42779,0.14,74.70 | |||
2019-01-05 20:48:45,2995,61407,0.20,106.91 | |||
2019-01-05 20:49:17,3027,3324,0.01,6.38 | |||
2019-01-05 20:49:48,3058,0,0.00,0.62 | |||
2019-01-05 20:50:20,3090,81240,0.27,141.18 | |||
2019-01-05 20:50:51,3121,84123,0.28,146.16 | |||
2019-01-05 20:51:22,3152,36415,0.12,63.69 | |||
2019-01-05 20:51:54,3183,13840,0.05,24.60 | |||
2019-01-05 20:52:25,3214,0,0.00,0.62 | |||
2019-01-05 20:52:56,3245,207695,0.69,359.17 | |||
2019-01-05 20:53:27,3276,106434,0.35,184.68 | |||
2019-01-05 20:53:58,3308,46466,0.15,81.07 | |||
2019-01-05 20:54:30,3339,0,0.00,0.62 | |||
2019-01-05 20:55:01,3370,0,0.00,0.62 | |||
2019-01-05 20:55:32,3401,0,0.00,0.62 | |||
2019-01-05 20:56:03,3432,186647,0.62,322.94 | |||
2019-01-05 20:56:34,3463,0,0.00,0.62 | |||
2019-01-05 20:57:05,3494,23174,0.08,40.77 | |||
2019-01-05 20:57:36,3525,0,0.00,0.62 | |||
2019-01-05 20:58:07,3556,0,0.00,0.62 | |||
2019-01-05 20:58:38,3588,1859,0.01,3.84 | |||
2019-01-05 20:59:10,3620,100086,0.33,173.72 | |||
2019-01-05 20:59:41,3651,0,0.00,0.62 | |||
2019-01-05 21:00:12,3682,0,0.00,0.62 | |||
2019-01-05 21:00:43,3713,0,0.00,0.62 | |||
2019-01-05 21:01:15,3745,173269,0.58,299.90 | |||
2019-01-05 21:01:46,3776,0,0.00,0.62 | |||
2019-01-05 21:02:17,3807,0,0.00,0.62 | |||
2019-01-05 21:02:48,3838,0,0.00,0.62 | |||
2019-01-05 21:03:19,3869,0,0.00,0.62 | |||
2019-01-05 21:03:50,3900,93400,0.31,162.18 | |||
2019-01-05 21:04:21,3931,92569,0.31,160.74 | |||
2019-01-05 21:04:52,3962,31062,0.10,54.42 | |||
2019-01-05 21:05:23,3993,0,0.00,0.62 | |||
2019-01-05 21:05:54,4024,0,0.00,0.62 | |||
2019-01-05 21:06:25,4055,0,0.00,0.62 | |||
2019-01-05 21:06:56,4086,0,0.00,0.62 | |||
2019-01-05 21:07:28,4117,0,0.00,0.62 | |||
2019-01-05 21:07:59,4148,0,0.00,0.62 | |||
2019-01-05 21:08:30,4179,0,0.00,0.62 | |||
2019-01-05 21:09:02,4211,73329,0.24,127.51 | |||
2019-01-05 21:09:32,4242,61186,0.20,106.53 | |||
2019-01-05 21:10:03,4273,0,0.00,0.62 | |||
2019-01-05 21:10:34,4304,0,0.00,0.62 | |||
2019-01-05 21:11:05,4334,71914,0.24,125.07 | |||
2019-01-05 21:11:36,4366,0,0.00,0.62 | |||
2019-01-05 21:12:07,4397,0,0.00,0.62 | |||
2019-01-05 21:12:39,4429,30147,0.10,52.84 | |||
2019-01-05 21:13:10,4460,0,0.00,0.62 | |||
2019-01-05 21:13:41,4490,1152,0.00,2.62 | |||
2019-01-05 21:14:12,4521,0,0.00,0.62 | |||
2019-01-05 21:14:43,4552,0,0.00,0.62 | |||
2019-01-05 21:15:14,4583,0,0.00,0.62 | |||
2019-01-05 21:15:45,4614,44602,0.15,77.85 | |||
2019-01-05 21:16:16,4645,0,0.00,0.62 | |||
2019-01-05 21:16:47,4677,0,0.00,0.62 | |||
2019-01-05 21:17:18,4708,0,0.00,0.62 | |||
2019-01-05 21:17:49,4739,0,0.00,0.62 | |||
2019-01-05 21:18:20,4770,0,0.00,0.62 | |||
2019-01-05 21:18:52,4802,26478,0.09,46.49 | |||
2019-01-05 21:19:23,4832,49802,0.17,86.84 | |||
2019-01-05 21:19:54,4863,0,0.00,0.62 | |||
2019-01-05 21:20:25,4894,60540,0.20,105.41 | |||
2019-01-05 21:20:56,4926,26185,0.09,45.98 | |||
2019-01-05 21:21:27,4956,136028,0.45,235.72 | |||
2019-01-05 21:21:58,4987,80906,0.27,140.60 | |||
2019-01-05 21:22:29,5018,0,0.00,0.62 | |||
2019-01-05 21:23:00,5049,0,0.00,0.62 | |||
2019-01-05 21:23:31,5081,4882,0.02,9.08 | |||
2019-01-05 21:24:02,5112,0,0.00,0.62 | |||
2019-01-05 21:24:34,5143,0,0.00,0.62 | |||
2019-01-05 21:25:05,5174,0,0.00,0.62 | |||
2019-01-05 21:25:35,5205,80813,0.27,140.44 | |||
2019-01-05 21:26:07,5236,0,0.00,0.62 | |||
2019-01-05 21:26:38,5268,135012,0.45,233.97 | |||
2019-01-05 21:27:09,5299,0,0.00,0.62 | |||
2019-01-05 21:27:40,5330,0,0.00,0.62 | |||
2019-01-05 21:28:11,5361,0,0.00,0.62 | |||
2019-01-05 21:28:42,5392,0,0.00,0.62 | |||
2019-01-05 21:29:13,5423,93174,0.31,161.79 | |||
2019-01-05 21:29:44,5454,0,0.00,0.62 | |||
2019-01-05 21:30:15,5485,0,0.00,0.62 | |||
2019-01-05 21:30:46,5516,0,0.00,0.62 | |||
2019-01-05 21:31:17,5547,0,0.00,0.62 | |||
2019-01-05 21:31:48,5578,0,0.00,0.62 | |||
2019-01-05 21:32:19,5609,0,0.00,0.62 | |||
2019-01-05 21:32:51,5640,0,0.00,0.62 | |||
2019-01-05 21:33:22,5672,73552,0.25,127.90 | |||
2019-01-05 21:33:54,5703,19057,0.06,33.64 | |||
2019-01-05 21:34:25,5734,50732,0.17,88.45 | |||
2019-01-05 21:34:56,5765,0,0.00,0.62 | |||
2019-01-05 21:35:27,5796,0,0.00,0.62 | |||
2019-01-05 21:35:58,5828,0,0.00,0.62 | |||
2019-01-05 21:36:29,5859,0,0.00,0.62 | |||
2019-01-05 21:37:00,5890,0,0.00,0.62 | |||
2019-01-05 21:37:31,5921,0,0.00,0.62 | |||
2019-01-05 21:38:02,5952,0,0.00,0.62 | |||
2019-01-05 21:38:33,5983,0,0.00,0.62 | |||
2019-01-05 21:39:04,6014,0,0.00,0.62 | |||
2019-01-05 21:39:35,6045,0,0.00,0.62 | |||
2019-01-05 21:40:07,6076,0,0.00,0.62 | |||
2019-01-05 21:40:38,6108,72037,0.24,125.28 | |||
2019-01-05 21:41:09,6139,0,0.00,0.62 | |||
2019-01-05 21:41:40,6170,0,0.00,0.62 | |||
2019-01-05 21:42:11,6201,0,0.00,0.62 | |||
2019-01-05 21:42:42,6232,0,0.00,0.62 | |||
2019-01-05 21:43:14,6264,47213,0.16,82.37 | |||
2019-01-05 21:43:45,6295,0,0.00,0.62 | |||
2019-01-05 21:44:16,6326,0,0.00,0.62 | |||
2019-01-05 21:44:48,6357,0,0.00,0.62 | |||
2019-01-05 21:45:18,6388,50656,0.17,88.32 | |||
2019-01-05 21:45:49,6419,0,0.00,0.62 | |||
2019-01-05 21:46:20,6450,0,0.00,0.62 | |||
2019-01-05 21:46:51,6481,0,0.00,0.62 | |||
2019-01-05 21:47:23,6512,0,0.00,0.62 | |||
2019-01-05 21:47:54,6543,0,0.00,0.62 | |||
2019-01-05 21:48:25,6574,66683,0.22,116.03 | |||
2019-01-05 21:48:56,6606,0,0.00,0.62 | |||
2019-01-05 21:49:27,6637,0,0.00,0.62 | |||
2019-01-05 21:49:58,6668,0,0.00,0.62 | |||
2019-01-05 21:50:30,6699,68944,0.23,119.94 | |||
2019-01-05 21:51:00,6730,154978,0.52,268.39 | |||
2019-01-05 21:51:31,6761,0,0.00,0.62 | |||
2019-01-05 21:52:02,6792,0,0.00,0.62 | |||
2019-01-05 21:52:34,6824,172412,0.57,298.42 | |||
2019-01-05 21:53:05,6855,0,0.00,0.62 | |||
2019-01-05 21:53:36,6886,0,0.00,0.62 | |||
2019-01-05 21:54:07,6917,0,0.00,0.62 | |||
2019-01-05 21:54:38,6948,0,0.00,0.62 | |||
2019-01-05 21:55:09,6979,0,0.00,0.62 | |||
2019-01-05 21:55:41,7010,0,0.00,0.62 | |||
2019-01-05 21:56:12,7041,0,0.00,0.62 | |||
2019-01-05 21:56:43,7072,0,0.00,0.62 | |||
2019-01-05 21:57:14,7103,0,0.00,0.62 | |||
2019-01-05 21:57:44,7134,98041,0.33,170.19 | |||
2019-01-05 21:58:16,7165,117605,0.39,203.95 | |||
2019-01-05 21:58:47,7196,0,0.00,0.62 | |||
2019-01-05 21:59:18,7227,0,0.00,0.62 | |||
2019-01-05 21:59:49,7258,0,0.00,0.62 | |||
2019-01-05 22:00:20,7289,0,0.00,0.62 | |||
2019-01-05 22:00:51,7321,0,0.00,0.62 | |||
2019-01-05 22:01:22,7352,0,0.00,0.62 | |||
2019-01-05 22:01:53,7383,104330,0.35,181.05 | |||
2019-01-05 22:02:24,7414,0,0.00,0.62 | |||
2019-01-05 22:02:56,7445,0,0.00,0.62 | |||
2019-01-05 22:03:27,7476,0,0.00,0.62 | |||
2019-01-05 22:03:58,7508,16235,0.05,28.75 | |||
2019-01-05 22:04:29,7539,0,0.00,0.62 | |||
2019-01-05 22:05:01,7571,111599,0.37,193.59 | |||
2019-01-05 22:05:32,7602,0,0.00,0.62 | |||
2019-01-05 22:06:03,7633,0,0.00,0.62 | |||
2019-01-05 22:06:34,7664,0,0.00,0.62 | |||
2019-01-05 22:07:05,7695,0,0.00,0.62 | |||
2019-01-05 22:07:36,7726,0,0.00,0.62 | |||
2019-01-05 22:08:07,7757,0,0.00,0.62 | |||
2019-01-05 22:08:38,7788,0,0.00,0.62 | |||
2019-01-05 22:09:09,7818,35293,0.12,61.74 | |||
2019-01-05 22:09:40,7850,0,0.00,0.62 | |||
2019-01-05 22:10:11,7881,216688,0.72,374.64 | |||
2019-01-05 22:10:42,7912,0,0.00,0.62 | |||
2019-01-05 22:11:13,7943,0,0.00,0.62 | |||
2019-01-05 22:11:44,7974,0,0.00,0.62 | |||
2019-01-05 22:12:16,8006,59634,0.20,103.84 | |||
2019-01-05 22:12:48,8038,60228,0.20,104.87 | |||
2019-01-05 22:13:19,8069,0,0.00,0.62 | |||
2019-01-05 22:13:50,8100,0,0.00,0.62 | |||
2019-01-05 22:14:21,8131,0,0.00,0.62 | |||
2019-01-05 22:14:52,8162,0,0.00,0.62 | |||
2019-01-05 22:15:23,8193,0,0.00,0.62 | |||
2019-01-05 22:15:55,8224,0,0.00,0.62 | |||
2019-01-05 22:16:26,8255,0,0.00,0.62 | |||
2019-01-05 22:16:57,8286,0,0.00,0.62 | |||
2019-01-05 22:17:28,8317,0,0.00,0.62 | |||
2019-01-05 22:17:59,8348,0,0.00,0.62 | |||
2019-01-05 22:18:30,8380,80824,0.27,140.46 | |||
2019-01-05 22:19:01,8411,0,0.00,0.62 | |||
2019-01-05 22:19:32,8442,0,0.00,0.62 | |||
2019-01-05 22:20:04,8473,0,0.00,0.62 | |||
2019-01-05 22:20:35,8504,0,0.00,0.62 | |||
2019-01-05 22:21:06,8535,0,0.00,0.62 | |||
2019-01-05 22:21:37,8566,0,0.00,0.62 | |||
2019-01-05 22:22:08,8597,0,0.00,0.62 | |||
2019-01-05 22:22:39,8628,0,0.00,0.62 | |||
2019-01-05 22:23:10,8659,0,0.00,0.62 | |||
2019-01-05 22:23:41,8691,52550,0.18,91.60 | |||
2019-01-05 22:24:12,8722,0,0.00,0.62 | |||
2019-01-05 22:24:43,8753,0,0.00,0.62 | |||
2019-01-05 22:25:14,8784,0,0.00,0.62 | |||
2019-01-05 22:25:46,8816,158085,0.53,273.74 | |||
2019-01-05 22:26:17,8847,0,0.00,0.62 | |||
2019-01-05 22:26:48,8878,0,0.00,0.62 | |||
2019-01-05 22:27:19,8909,0,0.00,0.62 | |||
2019-01-05 22:27:50,8940,0,0.00,0.62 | |||
2019-01-05 22:28:22,8971,0,0.00,0.62 | |||
2019-01-05 22:28:53,9003,350,0.00,1.23 | |||
2019-01-05 22:29:25,9034,0,0.00,0.62 | |||
2019-01-05 22:29:56,9065,0,0.00,0.62 | |||
2019-01-05 22:30:27,9096,0,0.00,0.62 | |||
2019-01-05 22:30:58,9127,0,0.00,0.62 | |||
2019-01-05 22:31:28,9158,34950,0.12,61.15 | |||
2019-01-05 22:31:59,9189,93440,0.31,162.25 | |||
2019-01-05 22:32:30,9220,0,0.00,0.62 | |||
2019-01-05 22:33:01,9251,0,0.00,0.62 | |||
2019-01-05 22:33:32,9282,0,0.00,0.62 | |||
2019-01-05 22:34:03,9313,0,0.00,0.62 | |||
2019-01-05 22:34:35,9344,0,0.00,0.62 | |||
2019-01-05 22:35:06,9375,0,0.00,0.62 | |||
2019-01-05 22:35:37,9406,0,0.00,0.62 | |||
2019-01-05 22:36:08,9437,0,0.00,0.62 | |||
2019-01-05 22:36:39,9468,0,0.00,0.62 | |||
2019-01-05 22:37:10,9499,0,0.00,0.62 | |||
2019-01-05 22:37:41,9530,0,0.00,0.62 | |||
2019-01-05 22:38:12,9561,0,0.00,0.62 | |||
2019-01-05 22:38:43,9592,0,0.00,0.62 | |||
2019-01-05 22:39:14,9623,0,0.00,0.62 | |||
2019-01-05 22:39:45,9655,0,0.00,0.62 | |||
2019-01-05 22:40:16,9686,17692,0.06,31.27 | |||
2019-01-05 22:40:48,9717,0,0.00,0.62 | |||
2019-01-05 22:41:19,9748,0,0.00,0.62 | |||
2019-01-05 22:41:50,9779,0,0.00,0.62 | |||
2019-01-05 22:42:21,9810,0,0.00,0.62 | |||
2019-01-05 22:42:52,9841,0,0.00,0.62 | |||
2019-01-05 22:43:23,9872,0,0.00,0.62 | |||
2019-01-05 22:43:54,9903,0,0.00,0.62 | |||
2019-01-05 22:44:24,9934,138506,0.46,240.00 | |||
2019-01-05 22:44:55,9965,0,0.00,0.62 | |||
2019-01-05 22:45:26,9996,0,0.00,0.62 | |||
2019-01-05 22:45:57,10027,113363,0.38,196.63 | |||
2019-01-05 22:46:28,10058,0,0.00,0.62 | |||
2019-01-05 22:46:59,10089,89254,0.30,155.02 | |||
2019-01-05 22:47:30,10120,0,0.00,0.62 | |||
2019-01-05 22:48:02,10151,0,0.00,0.62 | |||
2019-01-05 22:48:33,10182,0,0.00,0.62 | |||
2019-01-05 22:49:04,10213,0,0.00,0.62 | |||
2019-01-05 22:49:35,10244,0,0.00,0.62 | |||
2019-01-05 22:50:06,10275,0,0.00,0.62 | |||
2019-01-05 22:50:37,10306,0,0.00,0.62 | |||
2019-01-05 22:51:08,10337,0,0.00,0.62 | |||
2019-01-05 22:51:39,10368,0,0.00,0.62 | |||
2019-01-05 22:52:10,10399,0,0.00,0.62 | |||
2019-01-05 22:52:41,10431,0,0.00,0.62 | |||
2019-01-05 22:53:12,10462,0,0.00,0.62 | |||
2019-01-05 22:53:43,10493,0,0.00,0.62 | |||
2019-01-05 22:54:14,10524,0,0.00,0.62 | |||
2019-01-05 22:54:45,10555,64193,0.21,111.72 | |||
2019-01-05 22:55:16,10585,69420,0.23,120.76 | |||
2019-01-05 22:55:47,10616,0,0.00,0.62 | |||
2019-01-05 22:56:18,10647,0,0.00,0.62 | |||
2019-01-05 22:56:49,10678,0,0.00,0.62 | |||
2019-01-05 22:57:20,10710,0,0.00,0.62 | |||
2019-01-05 22:57:51,10741,0,0.00,0.62 | |||
2019-01-05 22:58:22,10772,0,0.00,0.62 | |||
2019-01-05 22:58:53,10803,0,0.00,0.62 | |||
2019-01-05 22:59:25,10834,159184,0.53,275.63 | |||
2019-01-05 22:59:56,10865,0,0.00,0.62 | |||
2019-01-05 23:00:28,10897,22835,0.08,40.18 | |||
2019-01-05 23:00:59,10928,0,0.00,0.62 | |||
2019-01-05 23:01:30,10959,0,0.00,0.62 | |||
2019-01-05 23:02:01,10990,0,0.00,0.62 | |||
2019-01-05 23:02:32,11021,0,0.00,0.62 | |||
2019-01-05 23:03:04,11053,29230,0.10,51.25 | |||
2019-01-05 23:03:35,11084,0,0.00,0.62 | |||
2019-01-05 23:04:06,11115,0,0.00,0.62 | |||
2019-01-05 23:04:37,11146,0,0.00,0.62 | |||
2019-01-05 23:05:08,11178,0,0.00,0.62 | |||
2019-01-05 23:05:39,11209,0,0.00,0.62 | |||
2019-01-05 23:06:10,11240,0,0.00,0.62 | |||
2019-01-05 23:06:41,11271,0,0.00,0.62 | |||
2019-01-05 23:07:12,11302,0,0.00,0.62 | |||
2019-01-05 23:07:43,11333,0,0.00,0.62 | |||
2019-01-05 23:08:14,11364,0,0.00,0.62 | |||
2019-01-05 23:08:46,11395,0,0.00,0.62 | |||
2019-01-05 23:09:17,11426,0,0.00,0.62 | |||
2019-01-05 23:09:48,11457,734711,2.45,1267.49 | |||
2019-01-05 23:10:19,11488,0,0.00,0.62 | |||
2019-01-05 23:10:51,11520,31315,0.10,54.86 | |||
2019-01-05 23:11:22,11551,0,0.00,0.62 | |||
2019-01-05 23:11:53,11582,0,0.00,0.62 | |||
2019-01-05 23:12:24,11613,0,0.00,0.62 | |||
2019-01-05 23:12:55,11644,0,0.00,0.62 | |||
2019-01-05 23:13:26,11676,36580,0.12,63.97 | |||
2019-01-05 23:13:57,11707,0,0.00,0.62 | |||
2019-01-05 23:14:28,11738,0,0.00,0.62 | |||
2019-01-05 23:14:59,11769,0,0.00,0.62 | |||
2019-01-05 23:15:30,11800,0,0.00,0.62 | |||
2019-01-05 23:16:01,11830,69449,0.23,120.81 | |||
2019-01-05 23:16:32,11861,0,0.00,0.62 | |||
2019-01-05 23:17:03,11892,0,0.00,0.62 | |||
2019-01-05 23:17:34,11923,0,0.00,0.62 | |||
2019-01-05 23:18:05,11955,0,0.00,0.62 | |||
2019-01-05 23:18:37,11986,78615,0.26,136.64 | |||
2019-01-05 23:19:08,12017,0,0.00,0.62 | |||
2019-01-05 23:19:39,12048,7157,0.02,13.02 | |||
2019-01-05 23:20:10,12079,0,0.00,0.62 | |||
2019-01-05 23:20:41,12110,0,0.00,0.62 | |||
2019-01-05 23:21:11,12141,94516,0.32,164.10 | |||
2019-01-05 23:21:42,12172,0,0.00,0.62 | |||
2019-01-05 23:22:13,12203,0,0.00,0.62 | |||
2019-01-05 23:22:44,12234,0,0.00,0.62 | |||
2019-01-05 23:23:15,12265,0,0.00,0.62 | |||
2019-01-05 23:23:47,12296,0,0.00,0.62 | |||
2019-01-05 23:24:18,12327,0,0.00,0.62 | |||
2019-01-05 23:24:49,12358,0,0.00,0.62 |
@ -0,0 +1,93 @@ | |||
#include <math.h> | |||
int DustSensePin = 13; | |||
//let's start with 100 readings. (copy and paste) | |||
unsigned int airreading[100] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; | |||
unsigned long starttime = 0; | |||
unsigned long sampletime_ms = 60000;//sample 60s == 60000 ; | |||
unsigned long lowpulseoccupancy = 0; | |||
float ratio = 0; | |||
float concentration = 0; | |||
unsigned int x = 0; | |||
unsigned int toplimit = 0; | |||
unsigned long sum = 0; //highest number possible - 32 bit unsigned, so 4 billion | |||
unsigned int average = 0; | |||
void setup() | |||
{ | |||
Serial.begin(9600); | |||
Serial.println("Starting Air Sensor, please wait for readings..."); | |||
pinMode(DustSensePin,INPUT); | |||
starttime = millis();//get the current time; | |||
} | |||
void loop() | |||
{ | |||
airreading[x] = pulseIn(DustSensePin, LOW, 500000); | |||
/*lowpulseoccupancy = lowpulseoccupancy+duration; | |||
if ((millis()-starttime) > sampletime_ms)//if the sample time == 30s | |||
{ | |||
ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100 | |||
concentration = 1.1*powf(ratio,3)-3.8*powf(ratio,2)+520*ratio+0.62; // using spec sheet curve | |||
Serial.print(lowpulseoccupancy); | |||
Serial.print(","); | |||
Serial.print(ratio); | |||
Serial.print(","); | |||
Serial.println(concentration); | |||
lowpulseoccupancy = 0; | |||
starttime = millis(); | |||
} | |||
*/ | |||
//if ((millis()-starttime) > sampletime_ms){ | |||
//KISS. Relative readings only. | |||
//Something else keeps the time. | |||
if (airreading[x] != 0){ | |||
Serial.println(airreading[x]); | |||
x=x+1; | |||
if(x>100){ | |||
x = 0; | |||
} | |||
} | |||
//starttime = millis(); | |||
//} | |||
//KISS. Average for a minute, and store that data in a webpage (that part will be in ethernet sensor test 3). | |||
// | |||
if ((millis()-starttime) > sampletime_ms){ | |||
toplimit = x; // don't read the zeros | |||
if(toplimit == 0){ | |||
toplimit = 1; //to avoid divide by zero, in case sum / toplimit is both zero | |||
} | |||
for (x=0; x<toplimit; x++){ | |||
sum = sum + airreading[x]; | |||
} | |||
average = sum / toplimit; | |||
Serial.print("Average Get!: "); | |||
Serial.println(average); //average when 0 is 65535, so it's invalid (dividing by zero - sum divided by top limit which are both zero) | |||
//but we don't even want the average. It's just for testing here. | |||
Serial.print("Sum Get!: "); | |||
Serial.println(sum); //this is what we care about | |||
//reset everything after a minute | |||
sum = 0; | |||
average = 0; | |||
x = 0; | |||
toplimit = 0; | |||
for (x=0; x<toplimit; x++){ | |||
airreading[x] = 0; | |||
} | |||
starttime = millis(); | |||
} | |||
} |
@ -0,0 +1,5 @@ | |||
\relax | |||
\@writefile{toc}{\contentsline {section}{\numberline {1}Overview}{1}} | |||
\@writefile{toc}{\contentsline {section}{\numberline {2}Work Log}{1}} | |||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}Parts List}{1}} | |||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}Beginning}{2}} |
@ -0,0 +1,98 @@ | |||
This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2015/dev/Debian) (preloaded format=pdflatex 2018.11.28) 14 MAY 2019 01:24 | |||
entering extended mode | |||
restricted \write18 enabled. | |||
%&-line parsing enabled. | |||
**/home/layoutdev/Desktop/code/documentation_general/Electronics_Projects_2018/ | |||
Air_Quality_Sensor_PPD42/docs/1.tex | |||
(/home/layoutdev/Desktop/code/documentation_general/Electronics_Projects_2018/A | |||
ir_Quality_Sensor_PPD42/docs/1.tex | |||
LaTeX2e <2014/05/01> | |||
Babel <3.9l> and hyphenation patterns for 2 languages loaded. | |||
(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls | |||
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class | |||
(/usr/share/texlive/texmf-dist/tex/latex/base/size11.clo | |||
File: size11.clo 2014/09/29 v1.4h Standard LaTeX file (size option) | |||
) | |||
\c@part=\count79 | |||
\c@section=\count80 | |||
\c@subsection=\count81 | |||
\c@subsubsection=\count82 | |||
\c@paragraph=\count83 | |||
\c@subparagraph=\count84 | |||
\c@figure=\count85 | |||
\c@table=\count86 | |||
\abovecaptionskip=\skip41 | |||
\belowcaptionskip=\skip42 | |||
\bibindent=\dimen102 | |||
) (./1.aux) | |||
\openout1 = `1.aux'. | |||
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 6. | |||
LaTeX Font Info: ... okay on input line 6. | |||
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 6. | |||
LaTeX Font Info: ... okay on input line 6. | |||
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 6. | |||
LaTeX Font Info: ... okay on input line 6. | |||
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 6. | |||
LaTeX Font Info: ... okay on input line 6. | |||
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 6. | |||
LaTeX Font Info: ... okay on input line 6. | |||
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 6. | |||
LaTeX Font Info: ... okay on input line 6. | |||
LaTeX Font Info: External font `cmex10' loaded for size | |||
(Font) <12> on input line 8. | |||
LaTeX Font Info: External font `cmex10' loaded for size | |||
(Font) <8> on input line 8. | |||
LaTeX Font Info: External font `cmex10' loaded for size | |||
(Font) <6> on input line 8. | |||
(./1.toc | |||
LaTeX Font Info: External font `cmex10' loaded for size | |||
(Font) <10.95> on input line 3. | |||
) | |||
\tf@toc=\write3 | |||
\openout3 = `1.toc'. | |||
LaTeX Font Info: External font `cmex10' loaded for size | |||
(Font) <9> on input line 14. | |||
LaTeX Font Info: External font `cmex10' loaded for size | |||
(Font) <5> on input line 14. | |||
LaTeX Font Info: Try loading font information for OMS+cmr on input line 19. | |||
(/usr/share/texlive/texmf-dist/tex/latex/base/omscmr.fd | |||
File: omscmr.fd 2014/09/29 v2.5h Standard LaTeX font definitions | |||
) | |||
LaTeX Font Info: Font shape `OMS/cmr/m/n' in size <10.95> not available | |||
(Font) Font shape `OMS/cmsy/m/n' tried instead on input line 19. | |||
[1 | |||
{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] | |||
Overfull \hbox (89.30338pt too wide) in paragraph at lines 33--37 | |||
\OT1/cmr/m/n/10.95 lar board is the and as ex-plained here: http://energia.nu/p | |||
in-maps/guide[]msp430g2launchpad/ | |||
[] | |||
[2] (./1.aux) ) | |||
Here is how much of TeX's memory you used: | |||
265 strings out of 495020 | |||
3242 string characters out of 6181323 | |||
49970 words of memory out of 5000000 | |||
3545 multiletter control sequences out of 15000+600000 | |||
10030 words of font info for 35 fonts, out of 8000000 for 9000 | |||
14 hyphenation exceptions out of 8191 | |||
23i,8n,19p,536b,187s stack positions out of 5000i,500n,10000p,200000b,80000s | |||
</usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cm | |||
bx10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx12.p | |||
fb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></us | |||
r/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr12.pfb></usr/share | |||
/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr6.pfb></usr/share/texlive | |||
/texmf-dist/fonts/type1/public/amsfonts/cm/cmr8.pfb></usr/share/texlive/texmf-d | |||
ist/fonts/type1/public/amsfonts/cm/cmr9.pfb></usr/share/texlive/texmf-dist/font | |||
s/type1/public/amsfonts/cm/cmsy10.pfb> | |||
Output written on 1.pdf (2 pages, 99694 bytes). | |||
PDF statistics: | |||
43 PDF objects out of 1000 (max. 8388607) | |||
30 compressed objects within 1 object stream | |||
0 named destinations out of 1000 (max. 500000) | |||
1 words of extra memory for PDF output out of 10000 (max. 10000000) | |||
@ -0,0 +1,59 @@ | |||
\documentclass[11pt]{article} | |||
%Gummi|065|=) | |||
\title{\textbf{Air Quality Sensor}} | |||
\author{Steak Electronics} | |||
\date{2018 (revised 2019)} | |||
\begin{document} | |||
\maketitle | |||
\tableofcontents | |||
\section{Overview} | |||
To know when I need to clean my room. I usually vacuum every two or three weeks, but sometimes am lazy and I need a reminder. The dust sensor will be more motivation to get me to clean, when I see the dust levels increase. \footnote{Technically, I also get a rash from excess dust, which is another great motivator.} | |||
\section{Work Log} | |||
\subsection{Parts List} | |||
\begin{itemize} | |||
\item Shinyei PPD42NS Air Quality Sensor | |||
\item MSP-EXP430G2553 V1.5 | |||
\item 5V adapter (required as MSP is 3.3V only) | |||
\item SD Card adapter | |||
\item Ethernet Module | |||
\item Energia version 0101E0012 (or later, possibly) | |||
\end{itemize} | |||
\subsection{Beginning} | |||
Here are some things I learned working on this project. | |||
\textbf{IDE} | |||
I'm using Energia from energia.nu which is an Arduino IDE clone for TI Launchpads. This will allow for rapid development. And ease me into the TI platform. | |||
\textbf{MSP-EXP430G2 V1.5} | |||
There are different version of this. My particular board is the | |||
and as explained here: http://energia.nu/pin-maps/guide\_msp430g2launchpad/ and http://energia.nu/pin-maps/guide\_msp430g2launchpad/ | |||
You need to rotate the UART jumpers to get UART to display correctly. Oddly enough you can choose a different chip in the boards list and serial will print out right... But switch the jumpers and the correct board will work with UART. Otherwise, it does not work out of the box for serial.print. Though the blink example sketch works. | |||
\textbf{Dust Sensor} | |||
The code for the dust sensor is found online easily. The pinout is tricky as the colours of the wire are nonsense, but the pinout seems to be the same for all sensors, and is: PIN 1 (closest to black box) GND, PIN 3, VDD (5+V), PIN 4 output A. there is also an output B for different readings (I think size) of dust. I'm not that particular (no pun intended) about my dust so I will go with the one most people are using. | |||
\textbf{3.3V only on TI} | |||
The TI takes input of USB but only outputs 3.3V. Fail. I'll through a 5V PSU on the board. It won't be connected to USB for its use anyways. | |||
\textbf{POW function} | |||
There is a pow function (power exponent) in arduino. In TI, I changed it to powf, and included math.h. | |||
I'm not sure if my change was correct. | |||
EDIT: looks like there is a LED tied to pin 14. I'm moving to pin 13. I meant to use 13 earlier but accidentally used the wrong pin and kept using it. Oops. | |||
EDIT 2: Actually, I was reading from the wrong pin in software. Maybe I will leave it on the LED pin as you can see when the dust is firing off the sensor. Hm.... Neat. | |||
EDIT 3: Yes, so I had to use powf instead of pow, and it works. The accidental incorrect pin was a bonus as it allows me to see visually how often the sensor is going off. Over time, I should have a vague grasp of the dust levels just looking at the light. Actually, I won't. Nevermind. The dust sensor reading, is too irregular for that. | |||
\end{document} |
@ -0,0 +1,38 @@ | |||
\documentclass[11pt]{article} | |||
%Gummi|065|=) | |||
\title{\textbf{Computer Switch Board}} | |||
\author{Steak Electronics} | |||
\date{03/17/19} | |||
\begin{document} | |||
\maketitle | |||
\section{Requirements} | |||
\begin{itemize} | |||
\item large pcb board | |||
\item fused power input - EDIT: instead I will have a case around the nano, 3d printed, and have the case connect into the pcb, i.e. cutouts for the case in the pcb, and clips on case. the rest of the pcb will be fused somewhere, after the nano. but nano powers it. | |||
\item arduino nano | |||
\item switch to activate things | |||
\item rotary to change number | |||
\item 7 digit display to list number, and shift register, resistors | |||
\item explanation of what numbers do on board | |||
\item 3d printed cover over nano | |||
\end{itemize} | |||
\section{build notes} | |||
The 7 segment symbols are abstracted in kicad. Job security for engineers. | |||
The example gave a common Vcc, with all pins being connected to GND, and sinked when on. | |||
The data sheet of the 7seg, omits the schematic. but does show that it is common anode, or common vcc. Pin 3 is left out, but that is VCC. | |||
\end{document} |
@ -0,0 +1,4 @@ | |||
\contentsline {section}{\numberline {1}Overview}{1} | |||
\contentsline {section}{\numberline {2}Work Log}{1} | |||
\contentsline {subsection}{\numberline {2.1}Parts List}{1} | |||
\contentsline {subsection}{\numberline {2.2}Beginning}{2} |
@ -0,0 +1,8 @@ | |||
\relax | |||
\@writefile{toc}{\contentsline {section}{\numberline {1}Overview}{1}} | |||
\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Shinyei Dust sensor PPD42\relax }}{1}} | |||
\@writefile{toc}{\contentsline {section}{\numberline {2}Work Log}{1}} | |||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}Parts List}{1}} | |||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}Beginning}{2}} | |||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Work Log 08/2018}{3}} | |||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.4}Work Log 12/2018}{3}} |
@ -0,0 +1,228 @@ | |||
This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2015/dev/Debian) (preloaded format=pdflatex 2018.11.28) 14 MAY 2019 01:31 | |||
entering extended mode | |||
restricted \write18 enabled. | |||
%&-line parsing enabled. | |||
**/home/layoutdev/Desktop/code/documentation_general/Electronics_Projects_2018/ | |||
Air_Quality_Sensor_PPD42/docs/2.tex | |||
(/home/layoutdev/Desktop/code/documentation_general/Electronics_Projects_2018/A | |||
ir_Quality_Sensor_PPD42/docs/2.tex | |||
LaTeX2e <2014/05/01> | |||
Babel <3.9l> and hyphenation patterns for 2 languages loaded. | |||
(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls | |||
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class | |||
(/usr/share/texlive/texmf-dist/tex/latex/base/size11.clo | |||
File: size11.clo 2014/09/29 v1.4h Standard LaTeX file (size option) | |||
) | |||
\c@part=\count79 | |||
\c@section=\count80 | |||
\c@subsection=\count81 | |||
\c@subsubsection=\count82 | |||
\c@paragraph=\count83 | |||
\c@subparagraph=\count84 | |||
\c@figure=\count85 | |||
\c@table=\count86 | |||
\abovecaptionskip=\skip41 | |||
\belowcaptionskip=\skip42 | |||
\bibindent=\dimen102 | |||
) | |||
(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty | |||
Package: graphicx 2014/04/25 v1.0g Enhanced LaTeX Graphics (DPC,SPQR) | |||
(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty | |||
Package: keyval 2014/05/08 v1.15 key=value parser (DPC) | |||
\KV@toks@=\toks14 | |||
) | |||
(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty | |||
Package: graphics 2009/02/05 v1.0o Standard LaTeX Graphics (DPC,SPQR) | |||
(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty | |||
Package: trig 1999/03/16 v1.09 sin cos tan (DPC) | |||
) | |||
(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/graphics.cfg | |||
File: graphics.cfg 2010/04/23 v1.9 graphics configuration of TeX Live | |||
) | |||
Package graphics Info: Driver file: pdftex.def on input line 91. | |||
(/usr/share/texlive/texmf-dist/tex/latex/pdftex-def/pdftex.def | |||
File: pdftex.def 2011/05/27 v0.06d Graphics/color for pdfTeX | |||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty | |||
Package: infwarerr 2010/04/08 v1.3 Providing info/warning/error messages (HO) | |||
) | |||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty | |||
Package: ltxcmds 2011/11/09 v1.22 LaTeX kernel commands for general use (HO) | |||
) | |||
\Gread@gobject=\count87 | |||
)) | |||
\Gin@req@height=\dimen103 | |||
\Gin@req@width=\dimen104 | |||
) | |||
(/usr/share/texlive/texmf-dist/tex/latex/caption/caption.sty | |||
Package: caption 2013/05/02 v3.3-89 Customizing captions (AR) | |||
(/usr/share/texlive/texmf-dist/tex/latex/caption/caption3.sty | |||
Package: caption3 2013/05/02 v1.6-88 caption3 kernel (AR) | |||
Package caption3 Info: TeX engine: e-TeX on input line 57. | |||
\captionmargin=\dimen105 | |||
\captionmargin@=\dimen106 | |||
\captionwidth=\dimen107 | |||
\caption@tempdima=\dimen108 | |||
\caption@indent=\dimen109 | |||
\caption@parindent=\dimen110 | |||
\caption@hangindent=\dimen111 | |||
) | |||
\c@ContinuedFloat=\count88 | |||
) (./2.aux) | |||
\openout1 = `2.aux'. | |||
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 8. | |||
LaTeX Font Info: ... okay on input line 8. | |||
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 8. | |||
LaTeX Font Info: ... okay on input line 8. | |||
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 8. | |||
LaTeX Font Info: ... okay on input line 8. | |||
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 8. | |||
LaTeX Font Info: ... okay on input line 8. | |||
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 8. | |||
LaTeX Font Info: ... okay on input line 8. | |||
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 8. | |||
LaTeX Font Info: ... okay on input line 8. | |||
(/usr/share/texlive/texmf-dist/tex/context/base/supp-pdf.mkii | |||
[Loading MPS to PDF converter (version 2006.09.02).] | |||
\scratchcounter=\count89 | |||
\scratchdimen=\dimen112 | |||
\scratchbox=\box26 | |||
\nofMPsegments=\count90 | |||
\nofMParguments=\count91 | |||
\everyMPshowfont=\toks15 | |||
\MPscratchCnt=\count92 | |||
\MPscratchDim=\dimen113 | |||
\MPnumerator=\count93 | |||
\makeMPintoPDFobject=\count94 | |||
\everyMPtoPDFconversion=\toks16 | |||
) (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty | |||
Package: pdftexcmds 2011/11/29 v0.20 Utility functions of pdfTeX for LuaTeX (HO | |||
) | |||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifluatex.sty | |||
Package: ifluatex 2010/03/01 v1.3 Provides the ifluatex switch (HO) | |||
Package ifluatex Info: LuaTeX not detected. | |||
) | |||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty | |||
Package: ifpdf 2011/01/30 v2.3 Provides the ifpdf switch (HO) | |||
Package ifpdf Info: pdfTeX in PDF mode is detected. | |||
) | |||
Package pdftexcmds Info: LuaTeX not detected. | |||
Package pdftexcmds Info: \pdf@primitive is available. | |||
Package pdftexcmds Info: \pdf@ifprimitive is available. | |||
Package pdftexcmds Info: \pdfdraftmode found. | |||
) | |||
(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty | |||
Package: epstopdf-base 2010/02/09 v2.5 Base part for package epstopdf | |||
(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty | |||
Package: grfext 2010/08/19 v1.1 Manage graphics extensions (HO) | |||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvdefinekeys.sty | |||
Package: kvdefinekeys 2011/04/07 v1.3 Define keys (HO) | |||
)) | |||
(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty | |||
Package: kvoptions 2011/06/30 v3.11 Key value format for package options (HO) | |||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty | |||
Package: kvsetkeys 2012/04/25 v1.16 Key value parser (HO) | |||
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/etexcmds.sty | |||
Package: etexcmds 2011/02/16 v1.5 Avoid name clashes with e-TeX commands (HO) | |||
Package etexcmds Info: Could not find \expanded. | |||
(etexcmds) That can mean that you are not using pdfTeX 1.50 or | |||
(etexcmds) that some package has redefined \expanded. | |||
(etexcmds) In the latter case, load this package earlier. | |||
))) | |||
Package grfext Info: Graphics extension search list: | |||
(grfext) [.png,.pdf,.jpg,.mps,.jpeg,.jbig2,.jb2,.PNG,.PDF,.JPG,.JPE | |||
G,.JBIG2,.JB2,.eps] | |||
(grfext) \AppendGraphicsExtensions on input line 452. | |||
(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg | |||
File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv | |||
e | |||
)) | |||
Package caption Info: Begin \AtBeginDocument code. | |||
Package caption Info: End \AtBeginDocument code. | |||
LaTeX Font Info: External font `cmex10' loaded for size | |||
(Font) <12> on input line 10. | |||
LaTeX Font Info: External font `cmex10' loaded for size | |||
(Font) <8> on input line 10. | |||
LaTeX Font Info: External font `cmex10' loaded for size | |||
(Font) <6> on input line 10. | |||
(./2.toc) | |||
\tf@toc=\write3 | |||
\openout3 = `2.toc'. | |||
LaTeX Font Info: External font `cmex10' loaded for size | |||
(Font) <10.95> on input line 16. | |||
LaTeX Font Info: External font `cmex10' loaded for size | |||
(Font) <9> on input line 16. | |||
LaTeX Font Info: External font `cmex10' loaded for size | |||
(Font) <5> on input line 16. | |||
<../pics/dustsensor.JPG, id=1, 667.49374pt x 499.8675pt> | |||
File: ../pics/dustsensor.JPG Graphic file (type jpg) | |||
<use ../pics/dustsensor.JPG> | |||
Package pdftex.def Info: ../pics/dustsensor.JPG used on input line 19. | |||
(pdftex.def) Requested size: 200.24966pt x 149.9614pt. | |||
LaTeX Font Info: Try loading font information for OMS+cmr on input line 26. | |||
(/usr/share/texlive/texmf-dist/tex/latex/base/omscmr.fd | |||
File: omscmr.fd 2014/09/29 v2.5h Standard LaTeX font definitions | |||
) | |||
LaTeX Font Info: Font shape `OMS/cmr/m/n' in size <10.95> not available | |||
(Font) Font shape `OMS/cmsy/m/n' tried instead on input line 26. | |||
[1 | |||
{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map} <../pics/dustsensor.JPG>] | |||
Overfull \hbox (89.30338pt too wide) in paragraph at lines 40--44 | |||
\OT1/cmr/m/n/10.95 lar board is the and as ex-plained here: http://energia.nu/p | |||
in-maps/guide[]msp430g2launchpad/ | |||
[] | |||
[2] <../pics/woodboard.JPG, id=18, 803.0pt x 602.25pt> | |||
File: ../pics/woodboard.JPG Graphic file (type jpg) | |||
<use ../pics/woodboard.JPG> | |||
Package pdftex.def Info: ../pics/woodboard.JPG used on input line 69. | |||
(pdftex.def) Requested size: 240.90186pt x 180.67639pt. | |||
[3 <../pics/woodboard.JPG>] | |||
Overfull \hbox (34.19756pt too wide) in paragraph at lines 75--82 | |||
[]\OT1/cmr/m/n/10.95 I'm go-ing to use this li-brary: https://github.com/reaper | |||
7/EtherEncLib/releases | |||
[] | |||
[4] (./2.aux) ) | |||
Here is how much of TeX's memory you used: | |||
2580 strings out of 495020 | |||
41135 string characters out of 6181323 | |||
95813 words of memory out of 5000000 | |||
5786 multiletter control sequences out of 15000+600000 | |||
10030 words of font info for 35 fonts, out of 8000000 for 9000 | |||
14 hyphenation exceptions out of 8191 | |||
38i,8n,38p,752b,228s stack positions out of 5000i,500n,10000p,200000b,80000s | |||
</usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cm | |||
bx10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx12.p | |||
fb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></us | |||
r/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr12.pfb></usr/share | |||
/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr6.pfb></usr/share/texlive | |||
/texmf-dist/fonts/type1/public/amsfonts/cm/cmr8.pfb></usr/share/texlive/texmf-d | |||
ist/fonts/type1/public/amsfonts/cm/cmr9.pfb></usr/share/texlive/texmf-dist/font | |||
s/type1/public/amsfonts/cm/cmsy10.pfb> | |||
Output written on 2.pdf (4 pages, 281052 bytes). | |||
PDF statistics: | |||
51 PDF objects out of 1000 (max. 8388607) | |||
34 compressed objects within 1 object stream | |||
0 named destinations out of 1000 (max. 500000) | |||
11 words of extra memory for PDF output out of 10000 (max. 10000000) | |||
@ -0,0 +1,88 @@ | |||
\documentclass[11pt]{article} | |||
%Gummi|065|=) | |||
\usepackage{graphicx} | |||
\usepackage{caption} | |||
\title{\textbf{Air Quality Sensor}} | |||
\author{Steak Electronics} | |||
\date{2018 (revised 2019)} | |||
\begin{document} | |||
\maketitle | |||
\tableofcontents | |||
\section{Overview} | |||
To know when I need to clean my room. I usually vacuum every two or three weeks, but sometimes am lazy and I need a reminder. The dust sensor will be more motivation to get me to clean, when I see the dust levels increase. \footnote{Technically, I also get a rash from excess dust, which is another great motivator.} | |||
\begin{center} | |||
\includegraphics[scale=0.3]{../pics/dustsensor.JPG} | |||
\captionof{figure}{Shinyei Dust sensor PPD42} | |||
\end{center} | |||
\section{Work Log} | |||
\subsection{Parts List} | |||
\begin{itemize} | |||
\item Shinyei PPD42NS Air Quality Sensor | |||
\item MSP-EXP430G2553 V1.5 | |||
\item 5V adapter (required as MSP is 3.3V only) | |||
\item SD Card adapter | |||
\item Ethernet Module | |||
\item Energia version 0101E0012 (or later, possibly) | |||
\end{itemize} | |||
\subsection{Beginning} | |||
Here are some things I learned working on this project. | |||
\textbf{IDE} | |||
I'm using Energia from energia.nu which is an Arduino IDE clone for TI Launchpads. This will allow for rapid development. And ease me into the TI platform. | |||
\textbf{MSP-EXP430G2 V1.5} | |||
There are different version of this. My particular board is the | |||
and as explained here: http://energia.nu/pin-maps/guide\_msp430g2launchpad/ and http://energia.nu/pin-maps/guide\_msp430g2launchpad/ | |||
You need to rotate the UART jumpers to get UART to display correctly. Oddly enough you can choose a different chip in the boards list and serial will print out right... But switch the jumpers and the correct board will work with UART. Otherwise, it does not work out of the box for serial.print. Though the blink example sketch works. | |||
\textbf{Dust Sensor} | |||
The code for the dust sensor is found online easily. The pinout is tricky as the colours of the wire are nonsense, but the pinout seems to be the same for all sensors, and is: PIN 1 (closest to black box) GND, PIN 3, VDD (5+V), PIN 4 output A. there is also an output B for different readings (I think size) of dust. I'm not that particular (no pun intended) about my dust so I will go with the one most people are using. | |||
\textbf{3.3V only on TI} | |||
The TI takes input of USB but only outputs 3.3V. Fail. I'll through a 5V PSU on the board. It won't be connected to USB for its use anyways. | |||
\textbf{POW function} | |||
There is a pow function (power exponent) in arduino. In TI, I changed it to powf, and included math.h. | |||
I'm not sure if my change was correct. | |||
EDIT: looks like there is a LED tied to pin 14. I'm moving to pin 13. I meant to use 13 earlier but accidentally used the wrong pin and kept using it. Oops. | |||
EDIT 2: Actually, I was reading from the wrong pin in software. Maybe I will leave it on the LED pin as you can see when the dust is firing off the sensor. Hm.... Neat. | |||
EDIT 3: Yes, so I had to use powf instead of pow, and it works. The accidental incorrect pin was a bonus as it allows me to see visually how often the sensor is going off. Over time, I should have a vague grasp of the dust levels just looking at the light. Actually, I won't. Nevermind. The dust sensor reading, is too irregular for that. | |||
\subsection{Work Log 08/2018} | |||
I've put everything on a single piece of plywood, and need to do some more work on the code. I've decided to forgo the SD card, as I don't want to deal with reading a 2MB sd card with the buffer provided by the SRAM. I'm not quite sure how to manage that, and whether it's possible to read such large data files. I did some quick research and did not find what I wanted. It is likely possible, but let's do something simpler. Instead, I will use the EEPROM to store the last 5 minutes of data or so, and then have the server read the data every five minutes. This keeps the client simple, and puts the burden of complexity on the server. | |||
In addition, I don't want to read SD cards manually, as that is cumbersome, though possibly scripts could be made. | |||
The PPD42 was made sure to be put vertically. | |||
\begin{center} | |||
\includegraphics[scale=0.3]{../pics/woodboard.JPG} | |||
\end{center} | |||
\subsection{Work Log 12/2018} | |||
I have decided to change how I do this slightly. Instead of an SD card, I will connect on the LAN and use thingspeak from a locally hosted instance (and deployed with docker, possibly) or some other aggregating server to pull the data. I'll also make a shield, to simplify deployment. That might not be necessary, but I can make a shield in a few hours, and pcbs are cheap. These options such as thingspeak sometimes have graphing / plotting included. | |||
I'm going to use this library: | |||
https://github.com/reaper7/EtherEncLib/releases | |||
so git clone that, then | |||
git tags -l | |||
git checkout tags/v0.4.2 | |||
to get the latest release (or a newer one if possible). | |||
The pinout for the ENC is viewable at the figure to the right. This is from the 43oh.com forum. | |||
\footnote{You will see later, that this library turns out to be not developed enough, and results in overall failure for this project. Next time, use a well vetted library!} | |||
\end{document} |
@ -0,0 +1,59 @@ | |||
\documentclass[11pt]{article} | |||
%Gummi|065|=) | |||
\title{\textbf{Air Quality Sensor}} | |||
\author{Steak Electronics} | |||
\date{2018 (revised 2019)} | |||
\begin{document} | |||
\maketitle | |||
\tableofcontents | |||
\section{Overview} | |||
To know when I need to clean my room. I usually vacuum every two or three weeks, but sometimes am lazy and I need a reminder. The dust sensor will be more motivation to get me to clean, when I see the dust levels increase. \footnote{Technically, I also get a rash from excess dust, which is another great motivator.} | |||
\section{Work Log} | |||
\subsection{Parts List} | |||
\begin{itemize} | |||
\item Shinyei PPD42NS Air Quality Sensor | |||
\item MSP-EXP430G2553 V1.5 | |||
\item 5V adapter (required as MSP is 3.3V only) | |||
\item SD Card adapter | |||
\item Ethernet Module | |||
\item Energia version 0101E0012 (or later, possibly) | |||
\end{itemize} | |||
\subsection{Beginning} | |||
Here are some things I learned working on this project. | |||
\textbf{IDE} | |||
I'm using Energia from energia.nu which is an Arduino IDE clone for TI Launchpads. This will allow for rapid development. And ease me into the TI platform. | |||
\textbf{MSP-EXP430G2 V1.5} | |||
There are different version of this. My particular board is the | |||
and as explained here: http://energia.nu/pin-maps/guide\_msp430g2launchpad/ and http://energia.nu/pin-maps/guide\_msp430g2launchpad/ | |||
You need to rotate the UART jumpers to get UART to display correctly. Oddly enough you can choose a different chip in the boards list and serial will print out right... But switch the jumpers and the correct board will work with UART. Otherwise, it does not work out of the box for serial.print. Though the blink example sketch works. | |||
\textbf{Dust Sensor} | |||
The code for the dust sensor is found online easily. The pinout is tricky as the colours of the wire are nonsense, but the pinout seems to be the same for all sensors, and is: PIN 1 (closest to black box) GND, PIN 3, VDD (5+V), PIN 4 output A. there is also an output B for different readings (I think size) of dust. I'm not that particular (no pun intended) about my dust so I will go with the one most people are using. | |||
\textbf{3.3V only on TI} | |||
The TI takes input of USB but only outputs 3.3V. Fail. I'll through a 5V PSU on the board. It won't be connected to USB for its use anyways. | |||