Two HC-SR04 based security system using FRDM-K64F board.
Dependencies: mbed FXOS8700 FXAS21002 mbed-rtos EthernetInterface jsonlite M2XStreamClient
main.cpp@2:a52795efd2e8, 2019-12-16 (annotated)
- 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?
User | Revision | Line number | New 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 | } |