Introduction: The E-Cooling Cap (Intel IoT)

What does this solution do?

The e-Cooling Cap is a wearable cap that cools down your head on hot sunny days. Also, it helps the connected users to monitor your head temperature. It maintains your head at a certain optimum temperature implementing a simple feedback mechanism.

What is the principle used for cooling?

The principle used is evaporative cooling, a method implemented in evaporative water coolers. Remaining features, like optimum cooling based on feedback and connection with internet, are achieved with the help of Intel Edison device.

What is unique about this project?

It is cost effective and user friendly.

What does our project require?

Software and hardware components used:

Arduino IDE1.5.3, Intel XDK IDE, 1xINTEL Edison breakout board, 1 x P.C. cooling fan, 1 x 9V Battery, 1 x D.C. 9V relay

Sensors:

Temperature sensor for measuring the temperature.

Cloud Connectivity:

The cap updates the temperature of your head to the cloud which can be monitored by connected users. Also, a location feature can be added which informs the connected users of the current location of the user in case of a mishap.

One of the diagrams shown above illustrates the implementation of the processes occuring in the cooling cap.

Step 1: Software Part

Code was developed for implementing the project on Intel Edison breakout board on Arduino platform and for configuration of Cloud connectivity on the Edison board on PuTTy. I am only providing the code developed for the Arduino platform, the latter is generally available (Also, steps are vaguely given below as Prework). Here it is:

/*
Copyright (c) 2015, Intel Corporation

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * 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.

* Neither the name of Intel Corporation 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 OWNER 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. */

//Prework:

//You need iotkit-agent installed and running.

//Device should be activated. (by running: iotkit-admin activate ACTIVATION_CODE)

//Following components should be registered (by running: iotkit-admin register NAME TYPE):

//temperature of type temperature.v1.0

//You can also use IoTkitRegisterExample to activate and register new components

#include // include IoTkit.h to use the Intel IoT Kit

#include // must be included to use IoTkit

#include

// create an object of the IoTkit

class IoTkit iotkit;

float temp;

const int pinTemp = A0; const int B = 3975;

/* "therm_file" - SoC temperature sensor: On Galileo Gen2 - use thermal_zone0 On Edison - use thermal_zone1 (ambient temp) thermal_zone3 (core0) thermal_zone4 (core1) */

char* therm_file = "/sys/devices/virtual/thermal/thermal_zone3/temp";

void setup()

{

Serial.begin(115200);

// call begin on the IoTkit object before calling any other methods

iotkit.begin();

pinMode(7,OUTPUT);

pinMode(2,OUTPUT); }

void loop() {

Serial.println("Reading temperature");

int val = analogRead(pinTemp);

// Determine the current resistance of the thermistor based on the sensor value.

float resistance = (float)(1023-val)*10000/val;

// Calculate the temperature based on the resistance value.

temp = 1/(log(resistance/10000)/B+1/298.15)-273.15;

Serial.print("Temperature is ");

Serial.print(temp);

Serial.println(" degrees celcius.");

if(temp>22)

{

digitalWrite(7,HIGH);

digitalWrite(2,HIGH);

}

else

{

digitalWrite(7,LOW);

digitalWrite(2,LOW);

}

// call send to generate one observation.

// parm1 - the name of the measurement. It must have been previously registered.

// parm2 - the value to send as the measurement observation

// you can also generate your own JSON and send multiple keys and values

// in this format:

//

// {

// “n”: “temperature”,

// “v”: “27.2"

// }

//

// you need to escape the quotations to pass it directly to iotkit.send:

// iotkit.send("{\"n\": \"temperature\",\"v\":\"27.2\"}");

//

// you can also send a full JSON string with your own variables:

//

// aJsonObject* root = aJson.createObject();

// if (root != NULL) {

// aJson.addItemToObject(root, "n", aJson.createItem(metric));

// aJson.addItemToObject(root, "v", aJson.createItem(value));

// iotkit.send(aJson.print(root));

// this sends your full json

// aJson.deleteItem(root);

// }

//

iotkit.send("temp", temp);

delay(2000);

}

// Generic Edison/Galileo function to read hardware temp sensor

int getTemp()

{

bool successful = true;

// SoC DTS_1

int socTemp;

char rawTemp[6];

FILE *fp_temp;

fp_temp = fopen(therm_file, "r");

if(fp_temp != NULL)

{

fgets(rawTemp, 6, fp_temp);

fclose(fp_temp);

}

else

{

Serial.println("Cannot open file for reading.");

Serial.println(therm_file);

Serial.println("Try another sensors readings in this directory");

successful = false;

}

if(successful)

{

socTemp = atoi(rawTemp)/1000;

return socTemp;

}

return 0;

}

Step 2: Hardware Part

The Intel Edison board acts as the controller which decides based on the values of the temperature sensor to switch the cooling fan on or off. The cooling fan draws air from the top of the cap, cooling it, while it passes through the cooling layers, which actually consist of water soaked foam, with holes in the layers for air passage. The relay cuts of the current supply to the cap when the temperature of the temperature sensor goes below a certain value.