nova sps011 sensor
Dependencies: EthernetInterface ThingCloud mbed-rtos mbed
main.cpp@2:88dce59f9a99, 2017-06-09 (annotated)
- 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?
User | Revision | Line number | New 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 | } |