nova sps011 sensor

Dependencies:   EthernetInterface ThingCloud mbed-rtos mbed

Committer:
gert_lauritsen
Date:
Fri Jun 09 22:50:27 2017 +0000
Revision:
2:88dce59f9a99
Parent:
1:77bd7a299174
Opdateret kun de rigtige felter inden 0 'er

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gert_lauritsen 0:5daa2467c994 1 #include "mbed.h"
gert_lauritsen 0:5daa2467c994 2 #include "EthernetInterface.h"
gert_lauritsen 0:5daa2467c994 3 #include "thingspeak.h"
gert_lauritsen 2:88dce59f9a99 4 #include "Config.h"
gert_lauritsen 0:5daa2467c994 5
gert_lauritsen 0:5daa2467c994 6 #define samplingTime 280
gert_lauritsen 0:5daa2467c994 7 //#define apikey "EBQZGHVA0T7U04MZ"
gert_lauritsen 0:5daa2467c994 8 #define apikey "SOMJ5VHIL690SNC8" //single sensor
gert_lauritsen 2:88dce59f9a99 9 #define readapikey "73DW768IEIMGF66B" //single sensor
gert_lauritsen 2:88dce59f9a99 10
gert_lauritsen 2:88dce59f9a99 11 #define apiID 133611
gert_lauritsen 0:5daa2467c994 12 #define off 1
gert_lauritsen 0:5daa2467c994 13 #define on 0
gert_lauritsen 0:5daa2467c994 14 #define OldSensor 1
gert_lauritsen 0:5daa2467c994 15 #define N 100
gert_lauritsen 0:5daa2467c994 16
gert_lauritsen 0:5daa2467c994 17 EthernetInterface eth;
gert_lauritsen 0:5daa2467c994 18 char* thingSpeakKey = apikey;
gert_lauritsen 2:88dce59f9a99 19 char* thingSpeakReadKey = readapikey;
gert_lauritsen 2:88dce59f9a99 20
gert_lauritsen 0:5daa2467c994 21 THINGSPEAK Channel;
gert_lauritsen 0:5daa2467c994 22
gert_lauritsen 0:5daa2467c994 23 Serial pc(USBTX, USBRX); // serial comms over usb back to console
gert_lauritsen 0:5daa2467c994 24 Serial nova(p13, p14);
gert_lauritsen 0:5daa2467c994 25 char inbuff[25];
gert_lauritsen 0:5daa2467c994 26 char pInbuff;
gert_lauritsen 0:5daa2467c994 27
gert_lauritsen 0:5daa2467c994 28 float PM10;
gert_lauritsen 0:5daa2467c994 29 float PM25;
gert_lauritsen 0:5daa2467c994 30 uint16_t pm10, pm25;
gert_lauritsen 0:5daa2467c994 31 int stack;
gert_lauritsen 0:5daa2467c994 32
gert_lauritsen 1:77bd7a299174 33 float approxRollingAverage (float avg, float new_sample)
gert_lauritsen 1:77bd7a299174 34 {
gert_lauritsen 0:5daa2467c994 35 avg -= avg / N;
gert_lauritsen 0:5daa2467c994 36 avg += new_sample / N;
gert_lauritsen 0:5daa2467c994 37 return avg;
gert_lauritsen 0:5daa2467c994 38 }
gert_lauritsen 0:5daa2467c994 39
gert_lauritsen 0:5daa2467c994 40 void LogData()
gert_lauritsen 0:5daa2467c994 41 {
gert_lauritsen 0:5daa2467c994 42 Channel.AddFloat(PM10/stack);
gert_lauritsen 0:5daa2467c994 43 Channel.AddFloat(PM25/stack);
gert_lauritsen 2:88dce59f9a99 44 // Channel.AddFloat(0);
gert_lauritsen 2:88dce59f9a99 45 // Channel.AddFloat(0);
gert_lauritsen 2:88dce59f9a99 46 Channel.AddPosition(latitude[stationID],longitude[stationID]);
gert_lauritsen 1:77bd7a299174 47 stack=0;
gert_lauritsen 1:77bd7a299174 48 PM10=0;
gert_lauritsen 1:77bd7a299174 49 PM25=0;
gert_lauritsen 0:5daa2467c994 50 if (Channel.SendData(thingSpeakKey)) pc.printf("Upload Error \r");
gert_lauritsen 0:5daa2467c994 51 else pc.printf("Upload OK \r");
gert_lauritsen 2:88dce59f9a99 52 //Channel.ReadData(thingSpeakReadKey,apiID);
gert_lauritsen 0:5daa2467c994 53 }
gert_lauritsen 0:5daa2467c994 54
gert_lauritsen 1:77bd7a299174 55 int ReadNova()
gert_lauritsen 1:77bd7a299174 56 {
gert_lauritsen 1:77bd7a299174 57 int res=0;
gert_lauritsen 1:77bd7a299174 58 uint16_t old_pm10, old_pm25;
gert_lauritsen 1:77bd7a299174 59 if (nova.readable()) {
gert_lauritsen 1:77bd7a299174 60 inbuff[pInbuff]=nova.getc();
gert_lauritsen 1:77bd7a299174 61 if (inbuff[pInbuff]==0xAA) {
gert_lauritsen 1:77bd7a299174 62 pInbuff=-1;
gert_lauritsen 1:77bd7a299174 63 }
gert_lauritsen 1:77bd7a299174 64 if (inbuff[pInbuff]==0xAB) {
gert_lauritsen 1:77bd7a299174 65 if (old_pm10!=0) old_pm10=pm10;
gert_lauritsen 1:77bd7a299174 66 else old_pm10=5000;
gert_lauritsen 1:77bd7a299174 67 if (old_pm25!=0) old_pm25=pm25;
gert_lauritsen 1:77bd7a299174 68 else old_pm25=5000;
gert_lauritsen 1:77bd7a299174 69
gert_lauritsen 1:77bd7a299174 70 pm25=(inbuff[2]<<8)+inbuff[1];
gert_lauritsen 1:77bd7a299174 71 pm10=(inbuff[4]<<8)+inbuff[3];
gert_lauritsen 1:77bd7a299174 72 if ((pm25<(2*old_pm25)) && (pm10<(2*old_pm10))) { //Spike fra sortering
gert_lauritsen 1:77bd7a299174 73 PM10+=pm10/10.0;
gert_lauritsen 1:77bd7a299174 74 PM25+=pm25/10.0;
gert_lauritsen 1:77bd7a299174 75 stack++;
gert_lauritsen 1:77bd7a299174 76 pc.printf("PM10=%.1f PM2.5=%.1f Stack=%d \r",pm10/10.0,pm25/10.0,stack);
gert_lauritsen 1:77bd7a299174 77 res=1;
gert_lauritsen 1:77bd7a299174 78 }
gert_lauritsen 1:77bd7a299174 79 pInbuff=-1;
gert_lauritsen 1:77bd7a299174 80 }
gert_lauritsen 1:77bd7a299174 81 pInbuff++;
gert_lauritsen 1:77bd7a299174 82 }
gert_lauritsen 1:77bd7a299174 83 return res;
gert_lauritsen 0:5daa2467c994 84 }
gert_lauritsen 0:5daa2467c994 85
gert_lauritsen 0:5daa2467c994 86 DigitalOut myled(LED1);
gert_lauritsen 0:5daa2467c994 87
gert_lauritsen 1:77bd7a299174 88 int main()
gert_lauritsen 1:77bd7a299174 89 {
gert_lauritsen 0:5daa2467c994 90 pInbuff=0;
gert_lauritsen 0:5daa2467c994 91 stack=0;
gert_lauritsen 0:5daa2467c994 92 pc.printf("\n\r---------------------------------------------------------------\n\r");
gert_lauritsen 0:5daa2467c994 93 eth.init(); //Use DHCP
gert_lauritsen 0:5daa2467c994 94 eth.connect();
gert_lauritsen 0:5daa2467c994 95 pc.printf("IP Address is %s\n\r", eth.getIPAddress());
gert_lauritsen 0:5daa2467c994 96 while (true) {
gert_lauritsen 1:77bd7a299174 97 ReadNova();
gert_lauritsen 0:5daa2467c994 98 if (stack>=60) {
gert_lauritsen 0:5daa2467c994 99 LogData();
gert_lauritsen 0:5daa2467c994 100 }
gert_lauritsen 0:5daa2467c994 101 }
gert_lauritsen 0:5daa2467c994 102 }