Two HC-SR04 based security system using FRDM-K64F board.

Dependencies:   mbed FXOS8700 FXAS21002 mbed-rtos EthernetInterface jsonlite M2XStreamClient

Committer:
amasudch
Date:
Mon Dec 16 07:09:51 2019 +0000
Revision:
2:a52795efd2e8
Parent:
1:5e587e213940
ECE_533_Final_Project_Author_Ahmed_Masud_Chowdhury

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AswinSivakumar 0:4fd1b0bd1594 1 #include "mbed.h"
AswinSivakumar 0:4fd1b0bd1594 2 #include "M2XStreamClient.h"
AswinSivakumar 0:4fd1b0bd1594 3 #include "EthernetInterface.h"
AswinSivakumar 0:4fd1b0bd1594 4
amasudch 2:a52795efd2e8 5 //Sonar 1 PinOuts
amasudch 2:a52795efd2e8 6 DigitalOut trigger1(PTA1);
amasudch 2:a52795efd2e8 7 DigitalOut trigger2(PTA2);
amasudch 2:a52795efd2e8 8
amasudch 2:a52795efd2e8 9 //Sonar 2 PinOuts
amasudch 2:a52795efd2e8 10 DigitalIn echo1(PTB9);
amasudch 2:a52795efd2e8 11 DigitalIn echo2(PTB23);
amasudch 2:a52795efd2e8 12
amasudch 2:a52795efd2e8 13 Timer sonar1, sonar2, loop_timer;
amasudch 2:a52795efd2e8 14
AswinSivakumar 0:4fd1b0bd1594 15 // Initialize Serial port
AswinSivakumar 0:4fd1b0bd1594 16 Serial pc(USBTX, USBRX);
AswinSivakumar 0:4fd1b0bd1594 17
amasudch 2:a52795efd2e8 18 // Set Sensor Stream details
amasudch 2:a52795efd2e8 19 char deviceId[] = "f2f53c114b0b1707ff849d387f173d17"; // Device you want to push to
amasudch 2:a52795efd2e8 20 char streamTrig_1[] = "Trigger_from_sensor_1"; // Stream you want to push to
amasudch 2:a52795efd2e8 21 char streamTrig_2[] = "Trigger_from_sensor_2"; // Stream you want to push to
amasudch 2:a52795efd2e8 22 char m2xKey[] = "9464d9e65f761bc5511bc085333a522b"; // Your M2X API Key or Master API Key
amasudch 2:a52795efd2e8 23
amasudch 2:a52795efd2e8 24 //Variable Declaration
amasudch 2:a52795efd2e8 25 int distance1_current = 0;
amasudch 2:a52795efd2e8 26 int distance1_previous = 0;
amasudch 2:a52795efd2e8 27 int correction1 = 0;
amasudch 2:a52795efd2e8 28
amasudch 2:a52795efd2e8 29 int distance2_current = 0;
amasudch 2:a52795efd2e8 30 int distance2_previous = 0;
amasudch 2:a52795efd2e8 31 int correction2 = 0;
amasudch 2:a52795efd2e8 32
amasudch 2:a52795efd2e8 33 int change_in_distance1;
amasudch 2:a52795efd2e8 34 int change_in_distance2;
amasudch 2:a52795efd2e8 35
amasudch 2:a52795efd2e8 36 int loop_time;
amasudch 2:a52795efd2e8 37
amasudch 2:a52795efd2e8 38 int sensitivity_threshold;
amasudch 2:a52795efd2e8 39
amasudch 2:a52795efd2e8 40 //function declaration
amasudch 2:a52795efd2e8 41 int sonar1_correction();
amasudch 2:a52795efd2e8 42 int sonar1_distance(int correction1);
amasudch 2:a52795efd2e8 43
amasudch 2:a52795efd2e8 44 int sonar2_correction();
amasudch 2:a52795efd2e8 45 int sonar2_distance(int correction1);
amasudch 2:a52795efd2e8 46
amasudch 2:a52795efd2e8 47 //Functions
amasudch 2:a52795efd2e8 48 int sonar1_distance(int correction1){
amasudch 2:a52795efd2e8 49 trigger1 = 1;
amasudch 2:a52795efd2e8 50 sonar1.reset();
amasudch 2:a52795efd2e8 51 wait_us(10.0);
amasudch 2:a52795efd2e8 52 trigger1 = 0;
amasudch 2:a52795efd2e8 53
amasudch 2:a52795efd2e8 54 //wait for echo1 high
amasudch 2:a52795efd2e8 55 while (echo1==0) {};
amasudch 2:a52795efd2e8 56
amasudch 2:a52795efd2e8 57 //echo1 high, so start timer
amasudch 2:a52795efd2e8 58 sonar1.start();
amasudch 2:a52795efd2e8 59
amasudch 2:a52795efd2e8 60 //wait for echo1 low
amasudch 2:a52795efd2e8 61 while (echo1==1) {};
amasudch 2:a52795efd2e8 62
amasudch 2:a52795efd2e8 63 //stop timer and read value
amasudch 2:a52795efd2e8 64 sonar1.stop();
amasudch 2:a52795efd2e8 65
amasudch 2:a52795efd2e8 66 //subtract software overhead timer delay and scale to cm
amasudch 2:a52795efd2e8 67 distance1_current = (sonar1.read_us()-correction1)/58.0;
amasudch 2:a52795efd2e8 68 return distance1_current;
amasudch 2:a52795efd2e8 69 }
AswinSivakumar 0:4fd1b0bd1594 70
amasudch 2:a52795efd2e8 71 int sonar2_distance(int correction2){
amasudch 2:a52795efd2e8 72 trigger2 = 1;
amasudch 2:a52795efd2e8 73 sonar2.reset();
amasudch 2:a52795efd2e8 74 wait_us(10.0);
amasudch 2:a52795efd2e8 75 trigger2 = 0;
amasudch 2:a52795efd2e8 76
amasudch 2:a52795efd2e8 77 //wait for echo1 high
amasudch 2:a52795efd2e8 78 while (echo2==0) {};
amasudch 2:a52795efd2e8 79
amasudch 2:a52795efd2e8 80 //echo1 high, so start timer
amasudch 2:a52795efd2e8 81 sonar2.start();
amasudch 2:a52795efd2e8 82
amasudch 2:a52795efd2e8 83 //wait for echo1 low
amasudch 2:a52795efd2e8 84 while (echo2==1) {};
amasudch 2:a52795efd2e8 85
amasudch 2:a52795efd2e8 86 //stop timer and read value
amasudch 2:a52795efd2e8 87 sonar2.stop();
amasudch 2:a52795efd2e8 88
amasudch 2:a52795efd2e8 89 //subtract software overhead timer delay and scale to cm
amasudch 2:a52795efd2e8 90 distance2_current = (sonar2.read_us()-correction2)/58.0;
amasudch 2:a52795efd2e8 91 return distance2_current;
amasudch 2:a52795efd2e8 92 }
amasudch 2:a52795efd2e8 93
amasudch 2:a52795efd2e8 94 int sonar1_correction(){
amasudch 2:a52795efd2e8 95 // measure actual software polling timer delays FOR SONAR 1
amasudch 2:a52795efd2e8 96 // delay used later in time correction1
amasudch 2:a52795efd2e8 97 // start timer
amasudch 2:a52795efd2e8 98 sonar1.start();
amasudch 2:a52795efd2e8 99
amasudch 2:a52795efd2e8 100 // min software polling delay to read echo pin
amasudch 2:a52795efd2e8 101 while (echo1==2) {};
amasudch 2:a52795efd2e8 102
amasudch 2:a52795efd2e8 103 // stop timer
amasudch 2:a52795efd2e8 104 sonar1.stop();
amasudch 2:a52795efd2e8 105
amasudch 2:a52795efd2e8 106 // read timer
amasudch 2:a52795efd2e8 107 correction1 = sonar1.read_us();
amasudch 2:a52795efd2e8 108
amasudch 2:a52795efd2e8 109 //printf("Approximate software overhead timer delay is %d uS\n\r",correction1);
amasudch 2:a52795efd2e8 110 return correction1;
amasudch 2:a52795efd2e8 111 }
amasudch 2:a52795efd2e8 112
amasudch 2:a52795efd2e8 113 int sonar2_correction(){
amasudch 2:a52795efd2e8 114 // measure actual software polling timer delays FOR SONAR 1
amasudch 2:a52795efd2e8 115 // delay used later in time correction1
amasudch 2:a52795efd2e8 116 // start timer
amasudch 2:a52795efd2e8 117 sonar2.start();
amasudch 2:a52795efd2e8 118
amasudch 2:a52795efd2e8 119 // min software polling delay to read echo pin
amasudch 2:a52795efd2e8 120 while (echo2==2) {};
amasudch 2:a52795efd2e8 121
amasudch 2:a52795efd2e8 122 // stop timer
amasudch 2:a52795efd2e8 123 sonar2.stop();
amasudch 2:a52795efd2e8 124
amasudch 2:a52795efd2e8 125 // read timer
amasudch 2:a52795efd2e8 126 correction2 = sonar2.read_us();
amasudch 2:a52795efd2e8 127 return correction2;
amasudch 2:a52795efd2e8 128 }
AswinSivakumar 0:4fd1b0bd1594 129
AswinSivakumar 0:4fd1b0bd1594 130 int main()
AswinSivakumar 0:4fd1b0bd1594 131 {
amasudch 2:a52795efd2e8 132
AswinSivakumar 0:4fd1b0bd1594 133 // Intialize Ethernet connection
amasudch 2:a52795efd2e8 134 EthernetInterface eth;
amasudch 2:a52795efd2e8 135 eth.init();
amasudch 2:a52795efd2e8 136 eth.connect();
amasudch 2:a52795efd2e8 137 printf("Success. Connected!. Device IP Address is %s\r\n", eth.getIPAddress());
amasudch 2:a52795efd2e8 138
amasudch 2:a52795efd2e8 139 // Initialize the M2X client
amasudch 2:a52795efd2e8 140 Client client;
amasudch 2:a52795efd2e8 141 M2XStreamClient m2xClient(&client, m2xKey);
amasudch 2:a52795efd2e8 142 int ret;
AswinSivakumar 0:4fd1b0bd1594 143
amasudch 2:a52795efd2e8 144
amasudch 2:a52795efd2e8 145 correction1 = sonar1_correction();
amasudch 2:a52795efd2e8 146 correction2 = sonar2_correction();
AswinSivakumar 0:4fd1b0bd1594 147
amasudch 2:a52795efd2e8 148 // Initialize Sensors
amasudch 2:a52795efd2e8 149 distance1_previous = sonar1_distance(correction1);
amasudch 2:a52795efd2e8 150 distance2_previous = sonar2_distance(correction1);
amasudch 2:a52795efd2e8 151
amasudch 2:a52795efd2e8 152 sensitivity_threshold = 15;
AswinSivakumar 0:4fd1b0bd1594 153
amasudch 2:a52795efd2e8 154 while(1){
amasudch 2:a52795efd2e8 155
amasudch 2:a52795efd2e8 156 loop_timer.reset();
amasudch 2:a52795efd2e8 157 loop_timer.start();
amasudch 2:a52795efd2e8 158
amasudch 2:a52795efd2e8 159 distance1_current = sonar1_distance(correction1);
amasudch 2:a52795efd2e8 160 distance2_current = sonar2_distance(correction1);
amasudch 2:a52795efd2e8 161
amasudch 2:a52795efd2e8 162
amasudch 2:a52795efd2e8 163 change_in_distance1=abs(distance1_current-distance1_previous);
amasudch 2:a52795efd2e8 164 change_in_distance2=abs(distance2_current-distance2_previous);
amasudch 2:a52795efd2e8 165
amasudch 2:a52795efd2e8 166 printf("correction1: %d , distance1: %d \n\r", correction1, distance1_current);
amasudch 2:a52795efd2e8 167 printf("Change in distance for sensor 1 = %d\n\r", change_in_distance1);
amasudch 2:a52795efd2e8 168 if(change_in_distance1 > sensitivity_threshold){
amasudch 2:a52795efd2e8 169 printf("Sensor 1 is triggered.\n\r");
amasudch 2:a52795efd2e8 170 printf("send() returned %d\r\n", ret);
amasudch 2:a52795efd2e8 171 ret = m2xClient.updateStreamValue(deviceId, streamTrig_1, distance1_current);
amasudch 2:a52795efd2e8 172 wait(2.0);
amasudch 2:a52795efd2e8 173 }
amasudch 2:a52795efd2e8 174
amasudch 2:a52795efd2e8 175
amasudch 2:a52795efd2e8 176 printf("correction2: %d , distance2: %d \n\r", correction2, distance2_current);
amasudch 2:a52795efd2e8 177 printf("Change in distance for sensor 2 = %d\n\r", change_in_distance2);
amasudch 2:a52795efd2e8 178 if(change_in_distance2 > sensitivity_threshold){
amasudch 2:a52795efd2e8 179 printf("Sensor 2 is triggered.\n\r");
amasudch 2:a52795efd2e8 180 printf("send() returned %d\r\n", ret);
amasudch 2:a52795efd2e8 181 ret = m2xClient.updateStreamValue(deviceId, streamTrig_2, distance2_current);
amasudch 2:a52795efd2e8 182 wait(2.0);
amasudch 2:a52795efd2e8 183 }
amasudch 2:a52795efd2e8 184
amasudch 2:a52795efd2e8 185 distance1_previous=distance1_current;
amasudch 2:a52795efd2e8 186 distance2_previous=distance2_current;
amasudch 2:a52795efd2e8 187
amasudch 2:a52795efd2e8 188 loop_timer.stop();
amasudch 2:a52795efd2e8 189 loop_time=loop_timer.read_us();
amasudch 2:a52795efd2e8 190 printf("Loop time = %d us\n\r", loop_time);
amasudch 2:a52795efd2e8 191 printf("\n");
AswinSivakumar 0:4fd1b0bd1594 192 }
AswinSivakumar 0:4fd1b0bd1594 193
AswinSivakumar 0:4fd1b0bd1594 194 }