Car safety monitoring system, monitoring distance, light and temperature.

Dependencies:   Speaker mbed mbed-rtos 4DGL-uLCD-SE hcsr04

Committer:
tadhgjones
Date:
Sun Dec 20 20:20:26 2020 +0000
Revision:
15:d39446966d94
Parent:
14:0bbfa2c1de62
Final revision of EE3023 Design Project

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tadhgjones 8:f3ab61374cd0 1 #include "mbed.h"
tadhgjones 8:f3ab61374cd0 2 #include "hcsr04.h"
fiachra 12:730a95b81992 3 #include "Speaker.h"
fiachra 10:f29ed3675509 4 #include "uLCD_4DGL.h"
tadhgjones 15:d39446966d94 5
tadhgjones 15:d39446966d94 6 //Temperature Inputs
fiachra 13:a3cdbad9daf4 7 AnalogIn ain(p15);
fiachra 13:a3cdbad9daf4 8 AnalogIn ain2(p16);
tadhgjones 15:d39446966d94 9
tadhgjones 15:d39446966d94 10 //Distance Inputs
fiachra 10:f29ed3675509 11 HCSR04 distSens(p25,p6);
fiachra 13:a3cdbad9daf4 12 Speaker mySpeaker(p18);
tadhgjones 15:d39446966d94 13
tadhgjones 15:d39446966d94 14 //Initialisation of LCD and Serial Monitor
tadhgjones 8:f3ab61374cd0 15 Serial pc(USBTX, USBRX);
fiachra 10:f29ed3675509 16 uLCD_4DGL uLCD(p9,p10,p11);
tadhgjones 15:d39446966d94 17
tadhgjones 15:d39446966d94 18 //Autolights Inputs
fiachra 14:0bbfa2c1de62 19 AnalogIn photodiode(p20);
fiachra 14:0bbfa2c1de62 20 PwmOut myled(p21);
tadhgjones 15:d39446966d94 21
tadhgjones 15:d39446966d94 22 //Distance
tadhgjones 8:f3ab61374cd0 23 unsigned int dist;
fiachra 9:d1b00a2a8e25 24 float averageDistance();
fiachra 9:d1b00a2a8e25 25 void beeping();
fiachra 14:0bbfa2c1de62 26 float i;
fiachra 14:0bbfa2c1de62 27 float x = 0;
tadhgjones 15:d39446966d94 28
tadhgjones 15:d39446966d94 29 //Temperature
fiachra 13:a3cdbad9daf4 30 void Temperature();
fiachra 13:a3cdbad9daf4 31 void TempConstraints();
fiachra 13:a3cdbad9daf4 32 float getTemp();
fiachra 13:a3cdbad9daf4 33 float avgTemp();
fiachra 13:a3cdbad9daf4 34 float getTemp2();
fiachra 13:a3cdbad9daf4 35 float avgTemp2();
fiachra 13:a3cdbad9daf4 36 float voltage_in;
fiachra 13:a3cdbad9daf4 37 float degrees_c;
fiachra 13:a3cdbad9daf4 38 float avgT;
fiachra 13:a3cdbad9daf4 39 float Temp;
fiachra 13:a3cdbad9daf4 40 float a;
fiachra 13:a3cdbad9daf4 41 float b;
tadhgjones 15:d39446966d94 42
tadhgjones 15:d39446966d94 43 //Autolights
fiachra 14:0bbfa2c1de62 44 void LED();
tadhgjones 15:d39446966d94 45
tadhgjones 8:f3ab61374cd0 46 int main()
tadhgjones 8:f3ab61374cd0 47 {
tadhgjones 15:d39446966d94 48 //distance
fiachra 12:730a95b81992 49 uLCD.text_width(1);
fiachra 12:730a95b81992 50 uLCD.text_height(1);
fiachra 12:730a95b81992 51 uLCD.locate(10, 12);
fiachra 12:730a95b81992 52 uLCD.color(BLUE);
fiachra 11:68194bd43e0b 53 uLCD.printf(" Reverse Sensor");
fiachra 10:f29ed3675509 54 uLCD.rectangle(65, 117, 126, 127, 0x0000FF);
fiachra 13:a3cdbad9daf4 55
tadhgjones 8:f3ab61374cd0 56 while(1) {
fiachra 13:a3cdbad9daf4 57 i++;
fiachra 13:a3cdbad9daf4 58 //distance
fiachra 10:f29ed3675509 59 distSens.start();
fiachra 9:d1b00a2a8e25 60 averageDistance();
fiachra 9:d1b00a2a8e25 61 beeping();
fiachra 11:68194bd43e0b 62 uLCD.filled_rectangle(66, 118, 125, 127, 0x000000);
fiachra 11:68194bd43e0b 63 pc.printf("cm:%d\n",dist );
fiachra 12:730a95b81992 64 uLCD.locate(10, 15);
fiachra 12:730a95b81992 65 uLCD.color(WHITE);
fiachra 10:f29ed3675509 66 uLCD.printf("cm:%1d\n",dist );
fiachra 14:0bbfa2c1de62 67 //temperature
fiachra 14:0bbfa2c1de62 68 Temperature();
fiachra 14:0bbfa2c1de62 69 //autolights
fiachra 14:0bbfa2c1de62 70 LED();
fiachra 9:d1b00a2a8e25 71 }
fiachra 9:d1b00a2a8e25 72 }
tadhgjones 15:d39446966d94 73 //measure average distance from sensor
fiachra 12:730a95b81992 74 float averageDistance()
fiachra 9:d1b00a2a8e25 75 {
fiachra 10:f29ed3675509 76 int a = distSens.get_dist_cm();
fiachra 10:f29ed3675509 77 int b = distSens.get_dist_cm();
fiachra 10:f29ed3675509 78 int c = distSens.get_dist_cm();
fiachra 10:f29ed3675509 79 int d = distSens.get_dist_cm();
fiachra 10:f29ed3675509 80 int e = distSens.get_dist_cm();
fiachra 10:f29ed3675509 81 int f = distSens.get_dist_cm();
fiachra 10:f29ed3675509 82 int g = distSens.get_dist_cm();
fiachra 10:f29ed3675509 83 int h = distSens.get_dist_cm();
fiachra 10:f29ed3675509 84 int i = distSens.get_dist_cm();
fiachra 10:f29ed3675509 85 int j = distSens.get_dist_cm();
tadhgjones 8:f3ab61374cd0 86
fiachra 9:d1b00a2a8e25 87 dist = (a+b+c+d+e+f+g+h+i+j)/10;
fiachra 9:d1b00a2a8e25 88 return dist;
fiachra 9:d1b00a2a8e25 89 }
tadhgjones 15:d39446966d94 90 //distance parameters and output
fiachra 9:d1b00a2a8e25 91 void beeping()
fiachra 9:d1b00a2a8e25 92 {
fiachra 9:d1b00a2a8e25 93 int distance = averageDistance();
fiachra 12:730a95b81992 94 //sensor defaults to 2k+ when dist<~3cm
fiachra 14:0bbfa2c1de62 95 if (distance > 2000) i=1.5;
fiachra 14:0bbfa2c1de62 96 if (distance < 150) i=0.3;
fiachra 14:0bbfa2c1de62 97 if (distance < 100) i=0.35;
fiachra 14:0bbfa2c1de62 98 if (distance < 90) i=0.4;
fiachra 9:d1b00a2a8e25 99 if (distance < 80) i=0.45;
fiachra 14:0bbfa2c1de62 100 if (distance < 70) i=0.5;
fiachra 14:0bbfa2c1de62 101 if (distance < 60) i=0.55;
fiachra 14:0bbfa2c1de62 102 if (distance < 50) i=0.6;
fiachra 14:0bbfa2c1de62 103 if (distance < 40) i=0.65;
fiachra 14:0bbfa2c1de62 104 if (distance < 30) i=0.7;
fiachra 14:0bbfa2c1de62 105 if (distance < 20) i=0.8;
fiachra 14:0bbfa2c1de62 106 if (distance < 10) i=1;
fiachra 14:0bbfa2c1de62 107 if (distance < 5) i=1.2;
fiachra 14:0bbfa2c1de62 108 mySpeaker.PlayNote(700*i, 0.2, 2*i);
fiachra 13:a3cdbad9daf4 109 }
tadhgjones 15:d39446966d94 110 //measure and output temperature
fiachra 13:a3cdbad9daf4 111 void Temperature(){
tadhgjones 15:d39446966d94 112 uLCD.locate(1,1);
tadhgjones 15:d39446966d94 113 uLCD.printf("Temperature:\n\n");
fiachra 13:a3cdbad9daf4 114 a = avgTemp();
fiachra 13:a3cdbad9daf4 115 b = avgTemp2();
tadhgjones 15:d39446966d94 116 Temp = ((a + b)/2)-15;
tadhgjones 15:d39446966d94 117 uLCD.text_width(2);
tadhgjones 15:d39446966d94 118 uLCD.text_height(2);
tadhgjones 15:d39446966d94 119 uLCD.printf("%3.1f\t", Temp);
fiachra 13:a3cdbad9daf4 120 uLCD.text_width(1);
fiachra 13:a3cdbad9daf4 121 uLCD.text_height(1);
tadhgjones 15:d39446966d94 122 uLCD.printf("o");
tadhgjones 15:d39446966d94 123 uLCD.text_width(2);
tadhgjones 15:d39446966d94 124 uLCD.text_height(2);
tadhgjones 15:d39446966d94 125 uLCD.printf("C");
tadhgjones 15:d39446966d94 126 uLCD.text_width(1);
tadhgjones 15:d39446966d94 127 uLCD.text_height(1);
tadhgjones 15:d39446966d94 128 TempConstraints();
fiachra 13:a3cdbad9daf4 129 }
tadhgjones 15:d39446966d94 130 //signal sensor fault or low temperature
fiachra 13:a3cdbad9daf4 131 void TempConstraints() {
fiachra 13:a3cdbad9daf4 132 if(degrees_c <= 4){
fiachra 14:0bbfa2c1de62 133 uLCD.text_width(1);
fiachra 14:0bbfa2c1de62 134 uLCD.text_height(1);
tadhgjones 15:d39446966d94 135 uLCD.locate(1,5);
tadhgjones 15:d39446966d94 136 pc.printf("ICE WARNING");
fiachra 13:a3cdbad9daf4 137 }
fiachra 13:a3cdbad9daf4 138 if(abs(a-b) > 4){
fiachra 14:0bbfa2c1de62 139 uLCD.text_width(1);
fiachra 14:0bbfa2c1de62 140 uLCD.text_height(1);
tadhgjones 15:d39446966d94 141 uLCD.locate(1,5);
tadhgjones 15:d39446966d94 142 uLCD.printf("TEMPERATURE FAULT");
fiachra 13:a3cdbad9daf4 143 }
fiachra 13:a3cdbad9daf4 144 }
tadhgjones 15:d39446966d94 145 //convert sensor outut to temperature
fiachra 13:a3cdbad9daf4 146 float getTemp(){
fiachra 13:a3cdbad9daf4 147 voltage_in = ain * 3.3;
fiachra 13:a3cdbad9daf4 148 degrees_c = ((voltage_in - 0.5) * 100.0);
fiachra 13:a3cdbad9daf4 149 return degrees_c;
fiachra 13:a3cdbad9daf4 150 }
fiachra 13:a3cdbad9daf4 151 float getTemp2(){
fiachra 13:a3cdbad9daf4 152 voltage_in = ain2 * 3.3;
fiachra 13:a3cdbad9daf4 153 degrees_c = ((voltage_in - 0.5) * 100.0);
fiachra 13:a3cdbad9daf4 154 return degrees_c;
fiachra 13:a3cdbad9daf4 155 }
tadhgjones 15:d39446966d94 156 //Thsi function obtaines the average voltage from the first sensor
fiachra 13:a3cdbad9daf4 157 float avgTemp(){
fiachra 13:a3cdbad9daf4 158 float a = getTemp();
fiachra 13:a3cdbad9daf4 159 float b = getTemp();
fiachra 13:a3cdbad9daf4 160 float c = getTemp();
fiachra 13:a3cdbad9daf4 161 float d = getTemp();
fiachra 13:a3cdbad9daf4 162 float e = getTemp();
fiachra 13:a3cdbad9daf4 163 float f = getTemp();
fiachra 13:a3cdbad9daf4 164 float g = getTemp();
fiachra 13:a3cdbad9daf4 165 float h = getTemp();
fiachra 13:a3cdbad9daf4 166 float i = getTemp();
fiachra 13:a3cdbad9daf4 167 float j = getTemp();
fiachra 13:a3cdbad9daf4 168 float k = getTemp();
fiachra 13:a3cdbad9daf4 169 float l = getTemp();
fiachra 13:a3cdbad9daf4 170 float m = getTemp();
fiachra 13:a3cdbad9daf4 171 float n = getTemp();
fiachra 13:a3cdbad9daf4 172 float o = getTemp();
fiachra 13:a3cdbad9daf4 173 float p = getTemp();
fiachra 13:a3cdbad9daf4 174 float q = getTemp();
fiachra 13:a3cdbad9daf4 175 float r = getTemp();
fiachra 13:a3cdbad9daf4 176 float s = getTemp();
fiachra 13:a3cdbad9daf4 177 float t = getTemp();
fiachra 13:a3cdbad9daf4 178
fiachra 13:a3cdbad9daf4 179 avgT = (a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t)/20;
fiachra 13:a3cdbad9daf4 180 return avgT;
fiachra 13:a3cdbad9daf4 181 }
fiachra 13:a3cdbad9daf4 182 float avgTemp2(){
fiachra 13:a3cdbad9daf4 183 float a = getTemp2();
fiachra 13:a3cdbad9daf4 184 float b = getTemp2();
fiachra 13:a3cdbad9daf4 185 float c = getTemp2();
fiachra 13:a3cdbad9daf4 186 float d = getTemp2();
fiachra 13:a3cdbad9daf4 187 float e = getTemp2();
fiachra 13:a3cdbad9daf4 188 float f = getTemp2();
fiachra 13:a3cdbad9daf4 189 float g = getTemp2();
fiachra 13:a3cdbad9daf4 190 float h = getTemp2();
fiachra 13:a3cdbad9daf4 191 float i = getTemp2();
fiachra 13:a3cdbad9daf4 192 float j = getTemp2();
fiachra 13:a3cdbad9daf4 193 float k = getTemp2();
fiachra 13:a3cdbad9daf4 194 float l = getTemp2();
fiachra 13:a3cdbad9daf4 195 float m = getTemp2();
fiachra 13:a3cdbad9daf4 196 float n = getTemp2();
fiachra 13:a3cdbad9daf4 197 float o = getTemp2();
fiachra 13:a3cdbad9daf4 198 float p = getTemp2();
fiachra 13:a3cdbad9daf4 199 float q = getTemp2();
fiachra 13:a3cdbad9daf4 200 float r = getTemp2();
fiachra 13:a3cdbad9daf4 201 float s = getTemp2();
fiachra 13:a3cdbad9daf4 202 float t = getTemp2();
fiachra 13:a3cdbad9daf4 203
fiachra 13:a3cdbad9daf4 204 avgT = (a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t)/20;
fiachra 13:a3cdbad9daf4 205 return avgT;
fiachra 14:0bbfa2c1de62 206 }
tadhgjones 15:d39446966d94 207 //check LED and turn on and off lights as required
fiachra 14:0bbfa2c1de62 208 void LED(){
fiachra 14:0bbfa2c1de62 209 if (photodiode*100 <= 27){
fiachra 14:0bbfa2c1de62 210 myled = 1;
tadhgjones 15:d39446966d94 211 uLCD.locate(1,7);
tadhgjones 15:d39446966d94 212 uLCD.printf("Autolights:\n\n");
tadhgjones 15:d39446966d94 213 uLCD.text_width(2);
tadhgjones 15:d39446966d94 214 uLCD.text_height(2);
tadhgjones 15:d39446966d94 215 uLCD.printf("ON ");
tadhgjones 15:d39446966d94 216 uLCD.text_width(1);
tadhgjones 15:d39446966d94 217 uLCD.text_height(1);
fiachra 14:0bbfa2c1de62 218 } else {
fiachra 14:0bbfa2c1de62 219 myled = 0;
tadhgjones 15:d39446966d94 220 uLCD.locate(1,7);
tadhgjones 15:d39446966d94 221 uLCD.printf("Autolights:\n\n");
tadhgjones 15:d39446966d94 222 uLCD.text_width(2);
tadhgjones 15:d39446966d94 223 uLCD.text_height(2);
tadhgjones 15:d39446966d94 224 uLCD.printf("OFF");
tadhgjones 15:d39446966d94 225 uLCD.text_width(1);
tadhgjones 15:d39446966d94 226 uLCD.text_height(1);
tadhgjones 15:d39446966d94 227 }
tadhgjones 8:f3ab61374cd0 228 }