Using 5 sensors(luminance, motion, tempurature, humanity, air_quality) to control

Dependencies:   Air_Quality DHT mbed-src

Committer:
ysy00700
Date:
Tue Aug 11 14:43:36 2015 +0000
Revision:
1:f9339d95123d
Parent:
0:d0e594c3fb6c
All of Sensor control

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ysy00700 0:d0e594c3fb6c 1 #include "mbed.h"
ysy00700 0:d0e594c3fb6c 2 #include "DHT.h"
ysy00700 1:f9339d95123d 3 #include"Air_Quality.h"
ysy00700 0:d0e594c3fb6c 4
ysy00700 1:f9339d95123d 5 AirQuality airqualitysensor;
ysy00700 1:f9339d95123d 6 int current_quality = -1;
ysy00700 1:f9339d95123d 7 PinName analogPin = A0;
ysy00700 1:f9339d95123d 8
ysy00700 1:f9339d95123d 9 DHT sensor(D3, DHT11);
ysy00700 0:d0e594c3fb6c 10 InterruptIn motion(D2);
ysy00700 0:d0e594c3fb6c 11 AnalogIn luminance(A1);
ysy00700 0:d0e594c3fb6c 12
ysy00700 0:d0e594c3fb6c 13 DigitalOut led_R(LED_RED);
ysy00700 0:d0e594c3fb6c 14 DigitalOut led_G(LED_GREEN);
ysy00700 0:d0e594c3fb6c 15 DigitalOut led_B(LED_BLUE);
ysy00700 0:d0e594c3fb6c 16
ysy00700 0:d0e594c3fb6c 17 int motion_detected = 0;
ysy00700 0:d0e594c3fb6c 18
ysy00700 1:f9339d95123d 19 // Interrupt Handler
ysy00700 1:f9339d95123d 20 void AirQualityInterrupt()
ysy00700 1:f9339d95123d 21 {
ysy00700 1:f9339d95123d 22 AnalogIn sensor(analogPin);
ysy00700 1:f9339d95123d 23 airqualitysensor.last_vol = airqualitysensor.first_vol;
ysy00700 1:f9339d95123d 24 airqualitysensor.first_vol = sensor.read()*1000;
ysy00700 1:f9339d95123d 25 airqualitysensor.timer_index = 1;
ysy00700 1:f9339d95123d 26 }
ysy00700 1:f9339d95123d 27
ysy00700 0:d0e594c3fb6c 28 void irq_handler(void)
ysy00700 0:d0e594c3fb6c 29 {
ysy00700 0:d0e594c3fb6c 30 motion_detected = 1;
ysy00700 0:d0e594c3fb6c 31 }
ysy00700 0:d0e594c3fb6c 32
ysy00700 0:d0e594c3fb6c 33 int main()
ysy00700 0:d0e594c3fb6c 34 {
ysy00700 0:d0e594c3fb6c 35 int error = 0;
ysy00700 0:d0e594c3fb6c 36 float hum = 0.0f;
ysy00700 0:d0e594c3fb6c 37 float cel = 0.0f;
ysy00700 0:d0e594c3fb6c 38
ysy00700 1:f9339d95123d 39 airqualitysensor.init(analogPin, AirQualityInterrupt);
ysy00700 1:f9339d95123d 40
ysy00700 0:d0e594c3fb6c 41 int cnt = 0;
ysy00700 0:d0e594c3fb6c 42 motion.rise(&irq_handler);
ysy00700 0:d0e594c3fb6c 43
ysy00700 0:d0e594c3fb6c 44 while(1)
ysy00700 0:d0e594c3fb6c 45 {
ysy00700 1:f9339d95123d 46 wait(0.1);
ysy00700 0:d0e594c3fb6c 47 error = sensor.readData();
ysy00700 0:d0e594c3fb6c 48
ysy00700 0:d0e594c3fb6c 49 if (0 == error) {
ysy00700 0:d0e594c3fb6c 50 hum = sensor.ReadHumidity();
ysy00700 0:d0e594c3fb6c 51 cel = sensor.ReadTemperature(CELCIUS);
ysy00700 1:f9339d95123d 52 printf(" 1. Humidity : %4.2f\r\n\n", hum);
ysy00700 1:f9339d95123d 53 printf(" 2. Temperature in Celcius : %2.2f\r\n\n", cel);
ysy00700 0:d0e594c3fb6c 54
ysy00700 0:d0e594c3fb6c 55 {
ysy00700 0:d0e594c3fb6c 56 if (hum > 70) { // if celcius is higher than 28, LED_RED on.
ysy00700 0:d0e594c3fb6c 57 led_R = 0; // LED_RED on
ysy00700 0:d0e594c3fb6c 58 led_B = 1; // LED_BLUE off
ysy00700 0:d0e594c3fb6c 59 }
ysy00700 0:d0e594c3fb6c 60 else{
ysy00700 0:d0e594c3fb6c 61 led_R = 1; // LED_RED off
ysy00700 0:d0e594c3fb6c 62 led_B = 0; // LED_BLUE on
ysy00700 0:d0e594c3fb6c 63 }
ysy00700 0:d0e594c3fb6c 64 }
ysy00700 0:d0e594c3fb6c 65 {
ysy00700 0:d0e594c3fb6c 66 if(cel > 28) { // if celcius is higher than 28, LED_RED on.
ysy00700 0:d0e594c3fb6c 67 led_R = 0; // LED_RED on
ysy00700 0:d0e594c3fb6c 68 led_B = 1; // LED_BLUE off
ysy00700 0:d0e594c3fb6c 69 }
ysy00700 0:d0e594c3fb6c 70 else {
ysy00700 0:d0e594c3fb6c 71 led_R = 1; // LED_RED off
ysy00700 0:d0e594c3fb6c 72 led_B = 0; // LED_BLUE on
ysy00700 0:d0e594c3fb6c 73 }
ysy00700 0:d0e594c3fb6c 74 }
ysy00700 0:d0e594c3fb6c 75 }
ysy00700 0:d0e594c3fb6c 76 else {
ysy00700 0:d0e594c3fb6c 77 printf("Error : %d\n", error);
ysy00700 0:d0e594c3fb6c 78 }
ysy00700 0:d0e594c3fb6c 79
ysy00700 0:d0e594c3fb6c 80 if(motion_detected) {
ysy00700 0:d0e594c3fb6c 81 cnt++;
ysy00700 0:d0e594c3fb6c 82 motion_detected = 0;
ysy00700 1:f9339d95123d 83 /*led_R = 1;
ysy00700 0:d0e594c3fb6c 84 led_G = 1;
ysy00700 1:f9339d95123d 85 led_B = 1;*/
ysy00700 0:d0e594c3fb6c 86
ysy00700 1:f9339d95123d 87 printf("3. Something move%d\r\n\n", cnt);
ysy00700 1:f9339d95123d 88 wait(0.1);
ysy00700 0:d0e594c3fb6c 89 }
ysy00700 0:d0e594c3fb6c 90
ysy00700 0:d0e594c3fb6c 91 if(luminance.read()){
ysy00700 0:d0e594c3fb6c 92
ysy00700 0:d0e594c3fb6c 93 if(0.1<=luminance.read()&&luminance.read()<=0.3){
ysy00700 1:f9339d95123d 94 led_R=0; led_G=0; led_B=1;} // yellow LED on
ysy00700 0:d0e594c3fb6c 95
ysy00700 0:d0e594c3fb6c 96 else{
ysy00700 1:f9339d95123d 97 led_R=1; led_G=1; led_B=1;} // led off
ysy00700 0:d0e594c3fb6c 98
ysy00700 1:f9339d95123d 99 printf("4. Luminance: %f\r\n\n", luminance.read());
ysy00700 1:f9339d95123d 100 wait(0.1);
ysy00700 0:d0e594c3fb6c 101 }
ysy00700 0:d0e594c3fb6c 102 else {
ysy00700 1:f9339d95123d 103 led_R=0; led_G=0; led_B=0; // white LED on
ysy00700 1:f9339d95123d 104 printf("4. Luminance: %f\r\n\n", luminance.read());
ysy00700 1:f9339d95123d 105 wait(0.1);
ysy00700 0:d0e594c3fb6c 106 }
ysy00700 1:f9339d95123d 107 //air quality sensor
ysy00700 1:f9339d95123d 108 current_quality=airqualitysensor.slope();
ysy00700 1:f9339d95123d 109 if (current_quality >= 0) { // if a valid data returned.
ysy00700 1:f9339d95123d 110 if (current_quality == 0){
ysy00700 1:f9339d95123d 111 printf("5. High pollution! Force signal active\n\r\n");
ysy00700 1:f9339d95123d 112 // led1 = 0;
ysy00700 1:f9339d95123d 113 // led2 = 1;
ysy00700 1:f9339d95123d 114 }
ysy00700 1:f9339d95123d 115 else if (current_quality == 1){
ysy00700 1:f9339d95123d 116 printf("5. High pollution!\n\r\n");
ysy00700 1:f9339d95123d 117 // led1 = 0;
ysy00700 1:f9339d95123d 118 // led2 = 1;
ysy00700 1:f9339d95123d 119 }
ysy00700 1:f9339d95123d 120 else if (current_quality == 2){
ysy00700 1:f9339d95123d 121 printf("5. Low pollution!\n\n\r");
ysy00700 1:f9339d95123d 122 // led1 = 0;
ysy00700 1:f9339d95123d 123 // led2 = 1;
ysy00700 1:f9339d95123d 124 }
ysy00700 1:f9339d95123d 125 else if (current_quality == 3){
ysy00700 1:f9339d95123d 126 printf("5. Fresh air\n\r\n");
ysy00700 1:f9339d95123d 127 // led1 = 1;
ysy00700 1:f9339d95123d 128 // led2 = 0;
ysy00700 1:f9339d95123d 129 }
ysy00700 1:f9339d95123d 130 }
ysy00700 1:f9339d95123d 131
ysy00700 0:d0e594c3fb6c 132 }
ysy00700 0:d0e594c3fb6c 133 }
ysy00700 0:d0e594c3fb6c 134 /*
ysy00700 0:d0e594c3fb6c 135 AnalogIn luminance(A0);
ysy00700 0:d0e594c3fb6c 136 InterruptIn motion(D2);
ysy00700 0:d0e594c3fb6c 137
ysy00700 0:d0e594c3fb6c 138 DigitalOut RED(LED1, 1);
ysy00700 0:d0e594c3fb6c 139 DigitalOut GREEN(LED2, 1);
ysy00700 0:d0e594c3fb6c 140 DigitalOut BLUE(LED3, 1);
ysy00700 0:d0e594c3fb6c 141
ysy00700 0:d0e594c3fb6c 142 int motion_detected = 0;
ysy00700 0:d0e594c3fb6c 143
ysy00700 0:d0e594c3fb6c 144 void irq_handler(void)
ysy00700 0:d0e594c3fb6c 145 {
ysy00700 0:d0e594c3fb6c 146 motion_detected = 1;
ysy00700 0:d0e594c3fb6c 147 }
ysy00700 0:d0e594c3fb6c 148
ysy00700 0:d0e594c3fb6c 149 int main()
ysy00700 0:d0e594c3fb6c 150 {
ysy00700 0:d0e594c3fb6c 151 int cnt = 0;
ysy00700 0:d0e594c3fb6c 152 motion.rise(&irq_handler);
ysy00700 0:d0e594c3fb6c 153
ysy00700 0:d0e594c3fb6c 154 while (true) {
ysy00700 0:d0e594c3fb6c 155
ysy00700 0:d0e594c3fb6c 156 //grove motion sensor
ysy00700 0:d0e594c3fb6c 157 if(motion_detected) {
ysy00700 0:d0e594c3fb6c 158 cnt++;
ysy00700 0:d0e594c3fb6c 159 motion_detected = 0;
ysy00700 0:d0e594c3fb6c 160 RED = 0;
ysy00700 0:d0e594c3fb6c 161 GREEN = 1;
ysy00700 0:d0e594c3fb6c 162 BLUE = 1;
ysy00700 0:d0e594c3fb6c 163 wait(1);
ysy00700 0:d0e594c3fb6c 164 printf("Something move%d\r\n", cnt);
ysy00700 0:d0e594c3fb6c 165 }
ysy00700 0:d0e594c3fb6c 166
ysy00700 0:d0e594c3fb6c 167 //luminance sensor
ysy00700 0:d0e594c3fb6c 168 if(luminance.read()){
ysy00700 0:d0e594c3fb6c 169
ysy00700 0:d0e594c3fb6c 170 if(0.1<=luminance.read()&&luminance.read()<=0.3){
ysy00700 0:d0e594c3fb6c 171 RED=0; GREEN=0; BLUE=1;} // yellow LED on
ysy00700 0:d0e594c3fb6c 172
ysy00700 0:d0e594c3fb6c 173 else{
ysy00700 0:d0e594c3fb6c 174 RED=1; GREEN=1; BLUE=1;} // led off
ysy00700 0:d0e594c3fb6c 175
ysy00700 0:d0e594c3fb6c 176 printf("Luminance: %f\r\n", luminance.read());
ysy00700 0:d0e594c3fb6c 177 wait(0.5f);
ysy00700 0:d0e594c3fb6c 178 }
ysy00700 0:d0e594c3fb6c 179 else {
ysy00700 0:d0e594c3fb6c 180 RED=0; GREEN=0; BLUE=0; // white LED on
ysy00700 0:d0e594c3fb6c 181 printf("Luminance: %f\r\n", luminance.read());
ysy00700 0:d0e594c3fb6c 182 wait(0.5f);
ysy00700 0:d0e594c3fb6c 183 }
ysy00700 0:d0e594c3fb6c 184
ysy00700 0:d0e594c3fb6c 185 }
ysy00700 1:f9339d95123d 186 }*/
ysy00700 1:f9339d95123d 187 /*
ysy00700 1:f9339d95123d 188 InterruptIn motion(D2);
ysy00700 1:f9339d95123d 189
ysy00700 1:f9339d95123d 190 DigitalOut RED(LED1, 1);
ysy00700 1:f9339d95123d 191 DigitalOut GREEN(LED2, 1);
ysy00700 1:f9339d95123d 192 DigitalOut BLUE(LED3, 1);
ysy00700 1:f9339d95123d 193
ysy00700 1:f9339d95123d 194 int motion_detected = 0;
ysy00700 1:f9339d95123d 195
ysy00700 1:f9339d95123d 196 void irq_handler(void)
ysy00700 1:f9339d95123d 197 {
ysy00700 1:f9339d95123d 198 motion_detected = 1;
ysy00700 1:f9339d95123d 199 }
ysy00700 1:f9339d95123d 200
ysy00700 1:f9339d95123d 201 int main()
ysy00700 1:f9339d95123d 202 {
ysy00700 1:f9339d95123d 203 int cnt = 0;
ysy00700 1:f9339d95123d 204 motion.rise(&irq_handler);
ysy00700 1:f9339d95123d 205
ysy00700 1:f9339d95123d 206 while (true) {
ysy00700 1:f9339d95123d 207
ysy00700 1:f9339d95123d 208 //grove motion sensor
ysy00700 1:f9339d95123d 209 if(motion_detected) {
ysy00700 1:f9339d95123d 210 cnt++;
ysy00700 1:f9339d95123d 211 motion_detected = 0;
ysy00700 1:f9339d95123d 212 RED = 0;
ysy00700 1:f9339d95123d 213 GREEN = 1;
ysy00700 1:f9339d95123d 214 BLUE = 1;
ysy00700 1:f9339d95123d 215 wait(1);
ysy00700 1:f9339d95123d 216 printf("Something move%d\r\n", cnt);
ysy00700 1:f9339d95123d 217 }
ysy00700 1:f9339d95123d 218
ysy00700 1:f9339d95123d 219 }
ysy00700 0:d0e594c3fb6c 220 }*/