Automatic Cooling system using K64F board featuring: Set desired temperature from phone app using Bluetooth DC motor based fan at three speeds to choose from: slow, medium and fast (to be selected on app) Ambient temperature measured constantly using DHT11 sensor Amibent temperature displayed on LCD LEDs to show status of the system: On or Off

Dependencies:   DHT TextLCD mbed

Committer:
urvishpatel12
Date:
Mon Mar 19 05:23:48 2018 +0000
Revision:
0:ea560af47ab9
Child:
1:eb4b08eb62d6
LCD_added

Who changed what in which revision?

UserRevisionLine numberNew contents of line
urvishpatel12 0:ea560af47ab9 1 #include "mbed.h"
urvishpatel12 0:ea560af47ab9 2 #include "DHT.h"
urvishpatel12 0:ea560af47ab9 3 #include "TextLCD.h"
urvishpatel12 0:ea560af47ab9 4
urvishpatel12 0:ea560af47ab9 5 #define BUFFER_SIZE 3
urvishpatel12 0:ea560af47ab9 6 #define ON "on"
urvishpatel12 0:ea560af47ab9 7 #define OFF "of"
urvishpatel12 0:ea560af47ab9 8 #define LOW "lo"
urvishpatel12 0:ea560af47ab9 9 #define MEDIUM "me"
urvishpatel12 0:ea560af47ab9 10 #define HIGH "hi"
urvishpatel12 0:ea560af47ab9 11
urvishpatel12 0:ea560af47ab9 12 TextLCD lcd(PTC2,PTA2,PTB23,PTA1,PTB9,PTC17);
urvishpatel12 0:ea560af47ab9 13 UARTSerial bluetooth(PTC15, PTC14, 38400);
urvishpatel12 0:ea560af47ab9 14 Serial pc(USBTX, USBRX);
urvishpatel12 0:ea560af47ab9 15 DHT temperature(D0, DHT11);
urvishpatel12 0:ea560af47ab9 16 PwmOut motor(PTC3); // PWM pin
urvishpatel12 0:ea560af47ab9 17 DigitalOut ON_led(D15);
urvishpatel12 0:ea560af47ab9 18 DigitalOut OFF_led(D14);
urvishpatel12 0:ea560af47ab9 19
urvishpatel12 0:ea560af47ab9 20 int dutycycle = 15;
urvishpatel12 0:ea560af47ab9 21 int desired_temp = 76;
urvishpatel12 0:ea560af47ab9 22
urvishpatel12 0:ea560af47ab9 23 int main(){
urvishpatel12 0:ea560af47ab9 24
urvishpatel12 0:ea560af47ab9 25 //switch ON green LED and off red LED
urvishpatel12 0:ea560af47ab9 26 OFF_led = 1;
urvishpatel12 0:ea560af47ab9 27 ON_led = 0;
urvishpatel12 0:ea560af47ab9 28
urvishpatel12 0:ea560af47ab9 29 //character array to receive BT commands
urvishpatel12 0:ea560af47ab9 30 char command[BUFFER_SIZE];
urvishpatel12 0:ea560af47ab9 31
urvishpatel12 0:ea560af47ab9 32 //initialize temperature variable
urvishpatel12 0:ea560af47ab9 33 float temp = 0.0f;
urvishpatel12 0:ea560af47ab9 34
urvishpatel12 0:ea560af47ab9 35 //temperature sensor error indicator
urvishpatel12 0:ea560af47ab9 36 int sensor_input_error = 0 ;
urvishpatel12 0:ea560af47ab9 37
urvishpatel12 0:ea560af47ab9 38 //system status flag: ON or OFF
urvishpatel12 0:ea560af47ab9 39 int on_flag = 0;
urvishpatel12 0:ea560af47ab9 40
urvishpatel12 0:ea560af47ab9 41 //set the PWM period for the motor
urvishpatel12 0:ea560af47ab9 42 motor.period(0.01);
urvishpatel12 0:ea560af47ab9 43
urvishpatel12 0:ea560af47ab9 44 //make bt reading non blocking
urvishpatel12 0:ea560af47ab9 45 bluetooth.set_blocking(false);
urvishpatel12 0:ea560af47ab9 46
urvishpatel12 0:ea560af47ab9 47 while(true){
urvishpatel12 0:ea560af47ab9 48
urvishpatel12 0:ea560af47ab9 49 //Read the temperature sensor data
urvishpatel12 0:ea560af47ab9 50 sensor_input_error = temperature.readData();
urvishpatel12 0:ea560af47ab9 51
urvishpatel12 0:ea560af47ab9 52 //if no error, read temperature in Farenheit
urvishpatel12 0:ea560af47ab9 53 if(sensor_input_error == 0){
urvishpatel12 0:ea560af47ab9 54 temp = temperature.ReadTemperature(FARENHEIT);
urvishpatel12 0:ea560af47ab9 55 }
urvishpatel12 0:ea560af47ab9 56
urvishpatel12 0:ea560af47ab9 57 //print the serial the currently measured temperature
urvishpatel12 0:ea560af47ab9 58 pc.printf("temperature is %2d F\n",int(temp));
urvishpatel12 0:ea560af47ab9 59
urvishpatel12 0:ea560af47ab9 60 //print the temperature on the LCD
urvishpatel12 0:ea560af47ab9 61 lcd.cls();
urvishpatel12 0:ea560af47ab9 62 lcd.printf("Temperature is:");
urvishpatel12 0:ea560af47ab9 63 lcd.locate(6,1);
urvishpatel12 0:ea560af47ab9 64 lcd.printf("%2.0f F", temp);
urvishpatel12 0:ea560af47ab9 65
urvishpatel12 0:ea560af47ab9 66 //compare the ambian temperature to the desired temperature
urvishpatel12 0:ea560af47ab9 67 //when flag is on
urvishpatel12 0:ea560af47ab9 68 if(on_flag == 1 ){
urvishpatel12 0:ea560af47ab9 69 ON_led = 1;
urvishpatel12 0:ea560af47ab9 70 OFF_led = 0;
urvishpatel12 0:ea560af47ab9 71 if(temp > desired_temp){
urvishpatel12 0:ea560af47ab9 72 motor = (float)dutycycle/100.0;
urvishpatel12 0:ea560af47ab9 73 }else{
urvishpatel12 0:ea560af47ab9 74 motor = 0;
urvishpatel12 0:ea560af47ab9 75 }
urvishpatel12 0:ea560af47ab9 76 //when flag is off
urvishpatel12 0:ea560af47ab9 77 }else{
urvishpatel12 0:ea560af47ab9 78 motor = 0;
urvishpatel12 0:ea560af47ab9 79 ON_led = 0;
urvishpatel12 0:ea560af47ab9 80 OFF_led = 1;
urvishpatel12 0:ea560af47ab9 81 }
urvishpatel12 0:ea560af47ab9 82 wait(1);
urvishpatel12 0:ea560af47ab9 83
urvishpatel12 0:ea560af47ab9 84 //Poll command from bluetooth
urvishpatel12 0:ea560af47ab9 85 bluetooth.read(command, BUFFER_SIZE);
urvishpatel12 0:ea560af47ab9 86
urvishpatel12 0:ea560af47ab9 87 //compare incoming data with NULL
urvishpatel12 0:ea560af47ab9 88 //then parse each one as a specific command
urvishpatel12 0:ea560af47ab9 89 if(strncmp(command,"\0",3) != 0){
urvishpatel12 0:ea560af47ab9 90 if(strncmp(command,ON,3) == 0){
urvishpatel12 0:ea560af47ab9 91 on_flag = 1;
urvishpatel12 0:ea560af47ab9 92 }else if(strncmp(command,OFF,3) == 0){
urvishpatel12 0:ea560af47ab9 93 on_flag = 0;
urvishpatel12 0:ea560af47ab9 94 }else if(strncmp(command,LOW,3) == 0){
urvishpatel12 0:ea560af47ab9 95 dutycycle = 12;
urvishpatel12 0:ea560af47ab9 96 }else if(strncmp(command,MEDIUM,3) == 0){
urvishpatel12 0:ea560af47ab9 97 dutycycle = 15;
urvishpatel12 0:ea560af47ab9 98 }else if(strncmp(command,HIGH,3) == 0){
urvishpatel12 0:ea560af47ab9 99 dutycycle = 20;
urvishpatel12 0:ea560af47ab9 100 }else {
urvishpatel12 0:ea560af47ab9 101 sscanf(command, "%d", &desired_temp);
urvishpatel12 0:ea560af47ab9 102 }
urvishpatel12 0:ea560af47ab9 103 }//end of command null compare
urvishpatel12 0:ea560af47ab9 104 //print the command received
urvishpatel12 0:ea560af47ab9 105 //wait(1);
urvishpatel12 0:ea560af47ab9 106 //pc.printf("Command was : %2s \n",command);
urvishpatel12 0:ea560af47ab9 107 //pc.printf("Duty Cycle is : %d \n",dutycycle);
urvishpatel12 0:ea560af47ab9 108 //pc.printf("Motor flag is : %d \n", on_flag);
urvishpatel12 0:ea560af47ab9 109 //pc.printf("Desired Temp is : %d \n", desired_temp);
urvishpatel12 0:ea560af47ab9 110 //reset the command back to NULL
urvishpatel12 0:ea560af47ab9 111 strcpy(command, "\0");
urvishpatel12 0:ea560af47ab9 112 }
urvishpatel12 0:ea560af47ab9 113 }