Two HC-SR04 based security system using FRDM-K64F board.
Dependencies: mbed FXOS8700 FXAS21002 mbed-rtos EthernetInterface jsonlite M2XStreamClient
Revision 2:a52795efd2e8, committed 2019-12-16
- Comitter:
- amasudch
- Date:
- Mon Dec 16 07:09:51 2019 +0000
- Parent:
- 1:5e587e213940
- Commit message:
- ECE_533_Final_Project_Author_Ahmed_Masud_Chowdhury
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 5e587e213940 -r a52795efd2e8 main.cpp --- a/main.cpp Tue Apr 25 23:41:37 2017 +0000 +++ b/main.cpp Mon Dec 16 07:09:51 2019 +0000 @@ -1,103 +1,194 @@ -/* - * Copyright (c) 2015 - 2016, Freescale Semiconductor, Inc. - * Copyright 2016-2017 NXP - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * o Redistributions of source code must retain the above copyright notice, this list - * of conditions and the following disclaimer. - * - * o Redistributions in binary form must reproduce the above copyright notice, this - * list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * o Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include "FXAS21002.h" -#include "FXOS8700.h" #include "mbed.h" #include "M2XStreamClient.h" #include "EthernetInterface.h" +//Sonar 1 PinOuts + DigitalOut trigger1(PTA1); + DigitalOut trigger2(PTA2); + +//Sonar 2 PinOuts + DigitalIn echo1(PTB9); + DigitalIn echo2(PTB23); + +Timer sonar1, sonar2, loop_timer; + // Initialize Serial port Serial pc(USBTX, USBRX); -// Initialize pins for I2C communication for sensors. Set jumpers J6,J7 in FRDM-STBC-AGM01 board accordingly. -FXOS8700 accel(D14,D15); -FXOS8700 mag(D14,D15); -FXAS21002 gyro(D14,D15); +// Set Sensor Stream details +char deviceId[] = "f2f53c114b0b1707ff849d387f173d17"; // Device you want to push to +char streamTrig_1[] = "Trigger_from_sensor_1"; // Stream you want to push to +char streamTrig_2[] = "Trigger_from_sensor_2"; // Stream you want to push to +char m2xKey[] = "9464d9e65f761bc5511bc085333a522b"; // Your M2X API Key or Master API Key + +//Variable Declaration +int distance1_current = 0; +int distance1_previous = 0; +int correction1 = 0; + +int distance2_current = 0; +int distance2_previous = 0; +int correction2 = 0; + +int change_in_distance1; +int change_in_distance2; + +int loop_time; + +int sensitivity_threshold; + +//function declaration +int sonar1_correction(); +int sonar1_distance(int correction1); + +int sonar2_correction(); +int sonar2_distance(int correction1); + +//Functions +int sonar1_distance(int correction1){ + trigger1 = 1; + sonar1.reset(); + wait_us(10.0); + trigger1 = 0; + + //wait for echo1 high + while (echo1==0) {}; + + //echo1 high, so start timer + sonar1.start(); + + //wait for echo1 low + while (echo1==1) {}; + + //stop timer and read value + sonar1.stop(); + + //subtract software overhead timer delay and scale to cm + distance1_current = (sonar1.read_us()-correction1)/58.0; + return distance1_current; +} -// Set Sensor Stream details -char deviceId[] = "8b34bc421abf15b7ec6471fa19513a98"; // Device you want to push to -char streamAcc[] = "acc_rms"; // Stream you want to push to -char streamMag[] = "mag_rms"; // Stream you want to push to -char streamGyr[] = "gyr_rms"; // Stream you want to push to -char m2xKey[] = "737018ea33de7760ab346c85ae2d9d27"; // Your M2X API Key or Master API Key +int sonar2_distance(int correction2){ + trigger2 = 1; + sonar2.reset(); + wait_us(10.0); + trigger2 = 0; + + //wait for echo1 high + while (echo2==0) {}; + + //echo1 high, so start timer + sonar2.start(); + + //wait for echo1 low + while (echo2==1) {}; + + //stop timer and read value + sonar2.stop(); + + //subtract software overhead timer delay and scale to cm + distance2_current = (sonar2.read_us()-correction2)/58.0; + return distance2_current; +} + +int sonar1_correction(){ + // measure actual software polling timer delays FOR SONAR 1 + // delay used later in time correction1 + // start timer + sonar1.start(); + + // min software polling delay to read echo pin + while (echo1==2) {}; + + // stop timer + sonar1.stop(); + + // read timer + correction1 = sonar1.read_us(); + + //printf("Approximate software overhead timer delay is %d uS\n\r",correction1); + return correction1; +} + +int sonar2_correction(){ + // measure actual software polling timer delays FOR SONAR 1 + // delay used later in time correction1 + // start timer + sonar2.start(); + + // min software polling delay to read echo pin + while (echo2==2) {}; + + // stop timer + sonar2.stop(); + + // read timer + correction2 = sonar2.read_us(); + return correction2; +} int main() { + // Intialize Ethernet connection -EthernetInterface eth; -eth.init(); -eth.connect(); -printf("Success. Connected!. Device IP Address is %s\r\n", eth.getIPAddress()); - - // Initialize the M2X client -Client client; -M2XStreamClient m2xClient(&client, m2xKey); -int ret; - + EthernetInterface eth; + eth.init(); + eth.connect(); + printf("Success. Connected!. Device IP Address is %s\r\n", eth.getIPAddress()); + + // Initialize the M2X client + Client client; + M2XStreamClient m2xClient(&client, m2xKey); + int ret; - // Configure Accelerometer FXOS8700, Magnetometer FXOS8700 & Gyroscope FXAS21002 - accel.accel_config(); - mag.mag_config(); - gyro.gyro_config(); + + correction1 = sonar1_correction(); + correction2 = sonar2_correction(); - float accel_data[3]; float accel_rms=0.0; - float mag_data[3]; float mag_rms=0.0; - float gyro_data[3]; float gyro_rms=0.0; - - printf("Begin Data Acquisition from FXOS8700 and FXAS21002....\r\n\r\n"); - wait(0.5); + // Initialize Sensors + distance1_previous = sonar1_distance(correction1); + distance2_previous = sonar2_distance(correction1); + + sensitivity_threshold = 15; - while(1) - { - accel.acquire_accel_data_g(accel_data); - accel_rms = sqrt(((accel_data[0]*accel_data[0])+(accel_data[1]*accel_data[1])+(accel_data[2]*accel_data[2]))/3); - printf("%4.2f,\t%4.2f,\t%4.2f,\t",accel_data[0],accel_data[1],accel_data[2]); - wait(0.01); - - mag.acquire_mag_data_uT(mag_data); - printf("%4.2f,\t%4.2f,\t%4.2f,\t",mag_data[0],mag_data[1],mag_data[2]); - mag_rms = sqrt(((mag_data[0]*mag_data[0])+(mag_data[1]*mag_data[1])+(mag_data[2]*mag_data[2]))/3); - wait(0.01); - - gyro.acquire_gyro_data_dps(gyro_data); - printf("%4.2f,\t%4.2f,\t%4.2f\r\n",gyro_data[0],gyro_data[1],gyro_data[2]); - gyro_rms = sqrt(((gyro_data[0]*gyro_data[0])+(gyro_data[1]*gyro_data[1])+(gyro_data[2]*gyro_data[2]))/3); - wait(0.01); - - ret = m2xClient.updateStreamValue(deviceId, streamAcc, accel_rms); - printf("send() returned %d\r\n", ret); - ret = m2xClient.updateStreamValue(deviceId, streamMag, mag_rms); - printf("send() returned %d\r\n", ret); - ret = m2xClient.updateStreamValue(deviceId, streamGyr, gyro_rms); - printf("send() returned %d\r\n", ret); - wait(1); + while(1){ + + loop_timer.reset(); + loop_timer.start(); + + distance1_current = sonar1_distance(correction1); + distance2_current = sonar2_distance(correction1); + + + change_in_distance1=abs(distance1_current-distance1_previous); + change_in_distance2=abs(distance2_current-distance2_previous); + + printf("correction1: %d , distance1: %d \n\r", correction1, distance1_current); + printf("Change in distance for sensor 1 = %d\n\r", change_in_distance1); + if(change_in_distance1 > sensitivity_threshold){ + printf("Sensor 1 is triggered.\n\r"); + printf("send() returned %d\r\n", ret); + ret = m2xClient.updateStreamValue(deviceId, streamTrig_1, distance1_current); + wait(2.0); + } + + + printf("correction2: %d , distance2: %d \n\r", correction2, distance2_current); + printf("Change in distance for sensor 2 = %d\n\r", change_in_distance2); + if(change_in_distance2 > sensitivity_threshold){ + printf("Sensor 2 is triggered.\n\r"); + printf("send() returned %d\r\n", ret); + ret = m2xClient.updateStreamValue(deviceId, streamTrig_2, distance2_current); + wait(2.0); + } + + distance1_previous=distance1_current; + distance2_previous=distance2_current; + + loop_timer.stop(); + loop_time=loop_timer.read_us(); + printf("Loop time = %d us\n\r", loop_time); + printf("\n"); } } \ No newline at end of file