ECE 4180 final project- GPS based home automation: code for mbed controlling home devices

Dependencies:   mbed-rtos mbed

Committer:
ajayke
Date:
Mon Apr 28 17:58:19 2014 +0000
Revision:
0:d9970d37dd77
GPS based home automation: mbed controlling devices

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ajayke 0:d9970d37dd77 1 #include "mbed.h"
ajayke 0:d9970d37dd77 2 #include "rtos.h"
ajayke 0:d9970d37dd77 3 AnalogIn light_1(p20); //light sensor
ajayke 0:d9970d37dd77 4 AnalogIn proxi_2(p15); // for detecting motion within the house
ajayke 0:d9970d37dd77 5 DigitalIn proxi_1(p5); // for security
ajayke 0:d9970d37dd77 6 DigitalOut relay_1(p8);// power switch tail for controlling the lamp
ajayke 0:d9970d37dd77 7 DigitalOut relay_2(p22);// power switch tail for controlling the fan
ajayke 0:d9970d37dd77 8 DigitalIn P11(p11); // Digital inputs p10,p11,p12,p13,p14,p16,p17 for communication between two mbeds; p18 and p19 for handshake signals;
ajayke 0:d9970d37dd77 9 DigitalIn P12(p12);
ajayke 0:d9970d37dd77 10 DigitalIn P13(p13);
ajayke 0:d9970d37dd77 11 DigitalIn P14(p14);
ajayke 0:d9970d37dd77 12 DigitalIn P10(p10);
ajayke 0:d9970d37dd77 13 DigitalIn P16(p16);
ajayke 0:d9970d37dd77 14 DigitalIn P17(p17);
ajayke 0:d9970d37dd77 15 DigitalOut P18(p18);
ajayke 0:d9970d37dd77 16 DigitalIn P19(p19);
ajayke 0:d9970d37dd77 17 DigitalOut myled(LED1);
ajayke 0:d9970d37dd77 18 DigitalOut led2(LED2); // device 2
ajayke 0:d9970d37dd77 19 DigitalOut led3(LED3); //device 3
ajayke 0:d9970d37dd77 20 DigitalOut led4(LED4); //device 4
ajayke 0:d9970d37dd77 21 Serial pc(USBTX,USBRX);
ajayke 0:d9970d37dd77 22 float light_thresh=0.4; // set threshold value for light sensor
ajayke 0:d9970d37dd77 23 float ir_value=0.4; // set threshold value for IR sensor to detect the presence inside the house
ajayke 0:d9970d37dd77 24 int P111;
ajayke 0:d9970d37dd77 25 int P112;
ajayke 0:d9970d37dd77 26 int P113;
ajayke 0:d9970d37dd77 27 int P114;
ajayke 0:d9970d37dd77 28 int P115;
ajayke 0:d9970d37dd77 29 int P116;
ajayke 0:d9970d37dd77 30 int P117;
ajayke 0:d9970d37dd77 31 Mutex bulb; //for locking and unlocking the lamp
ajayke 0:d9970d37dd77 32 Mutex pc_lock; //for virtual COM port
ajayke 0:d9970d37dd77 33
ajayke 0:d9970d37dd77 34
ajayke 0:d9970d37dd77 35 void security_thread(void const *args) // thread for detecting presence near the house
ajayke 0:d9970d37dd77 36 {
ajayke 0:d9970d37dd77 37 while(true)
ajayke 0:d9970d37dd77 38 {
ajayke 0:d9970d37dd77 39
ajayke 0:d9970d37dd77 40 wait(2);
ajayke 0:d9970d37dd77 41 if(P116==1) // check if security feature is enabled or not
ajayke 0:d9970d37dd77 42 {
ajayke 0:d9970d37dd77 43 if(proxi_1==0) // check the status of proximity sensor
ajayke 0:d9970d37dd77 44 {
ajayke 0:d9970d37dd77 45 bulb.lock();
ajayke 0:d9970d37dd77 46 led2=1; //switch on device 2
ajayke 0:d9970d37dd77 47 relay_2=1; //switch on the fan
ajayke 0:d9970d37dd77 48 bulb.unlock();
ajayke 0:d9970d37dd77 49 wait(3);
ajayke 0:d9970d37dd77 50 led2=0; //switch off device 2
ajayke 0:d9970d37dd77 51 relay_2=0; //switch off the fan
ajayke 0:d9970d37dd77 52 wait(3);
ajayke 0:d9970d37dd77 53
ajayke 0:d9970d37dd77 54
ajayke 0:d9970d37dd77 55
ajayke 0:d9970d37dd77 56 }
ajayke 0:d9970d37dd77 57
ajayke 0:d9970d37dd77 58
ajayke 0:d9970d37dd77 59 }
ajayke 0:d9970d37dd77 60
ajayke 0:d9970d37dd77 61
ajayke 0:d9970d37dd77 62 }
ajayke 0:d9970d37dd77 63
ajayke 0:d9970d37dd77 64
ajayke 0:d9970d37dd77 65 }
ajayke 0:d9970d37dd77 66
ajayke 0:d9970d37dd77 67 int main() {
ajayke 0:d9970d37dd77 68
ajayke 0:d9970d37dd77 69 P19.mode(PullUp);
ajayke 0:d9970d37dd77 70 proxi_1.mode(PullUp);
ajayke 0:d9970d37dd77 71
ajayke 0:d9970d37dd77 72 P18=1; // Initialize the hand shake signal
ajayke 0:d9970d37dd77 73 P116=0; // Make sure the security feature is turned off by default
ajayke 0:d9970d37dd77 74 Thread security(security_thread);
ajayke 0:d9970d37dd77 75
ajayke 0:d9970d37dd77 76 while(1) {
ajayke 0:d9970d37dd77 77
ajayke 0:d9970d37dd77 78 label: while(P19==1) // wait till the mbed receives data from the master mbed
ajayke 0:d9970d37dd77 79 {
ajayke 0:d9970d37dd77 80
ajayke 0:d9970d37dd77 81 }
ajayke 0:d9970d37dd77 82
ajayke 0:d9970d37dd77 83 if(P19==0) //make sure if the read signal is a correct one by waiting for one second and checking again
ajayke 0:d9970d37dd77 84 { wait(1);
ajayke 0:d9970d37dd77 85 if(P19!=0)
ajayke 0:d9970d37dd77 86 goto label;
ajayke 0:d9970d37dd77 87 }
ajayke 0:d9970d37dd77 88 //store the status of the digital input pins
ajayke 0:d9970d37dd77 89 P111=(int)P11; // D1
ajayke 0:d9970d37dd77 90 P112=(int)P12; // D2
ajayke 0:d9970d37dd77 91 P113=(int)P13; // D3
ajayke 0:d9970d37dd77 92 P114=(int)P14; // D4
ajayke 0:d9970d37dd77 93 P115=(int)P10; // manual=0;automatic=1
ajayke 0:d9970d37dd77 94 P116=(int)P16; //security on=1, off=0
ajayke 0:d9970d37dd77 95 P117=(int)P17; //near=0, far=1
ajayke 0:d9970d37dd77 96
ajayke 0:d9970d37dd77 97 pc_lock.lock();
ajayke 0:d9970d37dd77 98 pc.printf("\n P11: %d, P12: %d, P13: %d, P14:%d, P15:%d, P16:%d, P17:%d\n Proxi_2 %f\n ",P111,P112,P113,P114,P115,P116,P117,(float)proxi_2);
ajayke 0:d9970d37dd77 99
ajayke 0:d9970d37dd77 100 pc_lock.unlock();
ajayke 0:d9970d37dd77 101 P18=0; //Indicate the reception of data by pulling p18 low
ajayke 0:d9970d37dd77 102
ajayke 0:d9970d37dd77 103 // blink LED1 to indicate that data has been received
ajayke 0:d9970d37dd77 104 myled = 1;
ajayke 0:d9970d37dd77 105 wait(2);
ajayke 0:d9970d37dd77 106 myled = 0;
ajayke 0:d9970d37dd77 107 wait(2);
ajayke 0:d9970d37dd77 108 P18=1;
ajayke 0:d9970d37dd77 109
ajayke 0:d9970d37dd77 110
ajayke 0:d9970d37dd77 111 if((float)proxi_2<ir_value) // check presence inside house
ajayke 0:d9970d37dd77 112
ajayke 0:d9970d37dd77 113 {
ajayke 0:d9970d37dd77 114
ajayke 0:d9970d37dd77 115 if(P115==1) // check if automatic mode is turned on
ajayke 0:d9970d37dd77 116 {
ajayke 0:d9970d37dd77 117 if(P117==0) //check if the user is near the home location
ajayke 0:d9970d37dd77 118 {
ajayke 0:d9970d37dd77 119 if((float)light_1<light_thresh) //check value of light sensor, turn on light if it is less than the threshold
ajayke 0:d9970d37dd77 120 relay_1=1;
ajayke 0:d9970d37dd77 121 else relay_1=0; //turn off light if there is enough ambient light
ajayke 0:d9970d37dd77 122 pc.printf("Light sensor: %f \n",(float)light_1);
ajayke 0:d9970d37dd77 123 bulb.lock();
ajayke 0:d9970d37dd77 124 led2=1; //turn on device2
ajayke 0:d9970d37dd77 125 relay_2=1; //turn on the fan
ajayke 0:d9970d37dd77 126 bulb.unlock();
ajayke 0:d9970d37dd77 127 led3=1; //turn on device 3
ajayke 0:d9970d37dd77 128 led4=1; //turn on device 4
ajayke 0:d9970d37dd77 129
ajayke 0:d9970d37dd77 130
ajayke 0:d9970d37dd77 131 }
ajayke 0:d9970d37dd77 132 else //user is far away from home loation; turn off all devices
ajayke 0:d9970d37dd77 133 {
ajayke 0:d9970d37dd77 134 relay_1=0;
ajayke 0:d9970d37dd77 135 bulb.lock();
ajayke 0:d9970d37dd77 136 led2=0;
ajayke 0:d9970d37dd77 137 relay_2=0;
ajayke 0:d9970d37dd77 138 bulb.unlock();
ajayke 0:d9970d37dd77 139 led3=0;
ajayke 0:d9970d37dd77 140 led4=0;
ajayke 0:d9970d37dd77 141
ajayke 0:d9970d37dd77 142
ajayke 0:d9970d37dd77 143
ajayke 0:d9970d37dd77 144 }
ajayke 0:d9970d37dd77 145
ajayke 0:d9970d37dd77 146
ajayke 0:d9970d37dd77 147
ajayke 0:d9970d37dd77 148
ajayke 0:d9970d37dd77 149 }
ajayke 0:d9970d37dd77 150 else //if the system is in manual mode
ajayke 0:d9970d37dd77 151 {
ajayke 0:d9970d37dd77 152 relay_1=P111; // read status of the lamp
ajayke 0:d9970d37dd77 153 bulb.lock();
ajayke 0:d9970d37dd77 154 led2=P112; // read status of the device-2
ajayke 0:d9970d37dd77 155 relay_2=P112; //read status of the fan
ajayke 0:d9970d37dd77 156 bulb.unlock();
ajayke 0:d9970d37dd77 157 led3=P113; // read status of the device-3
ajayke 0:d9970d37dd77 158 led4=P114; // read status of the device-4
ajayke 0:d9970d37dd77 159
ajayke 0:d9970d37dd77 160
ajayke 0:d9970d37dd77 161 }
ajayke 0:d9970d37dd77 162
ajayke 0:d9970d37dd77 163 }
ajayke 0:d9970d37dd77 164 }
ajayke 0:d9970d37dd77 165 }