edge lab LIVE! starts Tuesday in Munich. Grab a workshop seat and take home the board you build on. Code FRIEND-HACKSTER saves 20%. () Learn more!
Noya AzeemSrinidhi Malladi
Published

Voltcool

Smart, low-cost thermal management that detects rising heat and automatically cools EV batteries to improve safety and efficiency.

IntermediateFull instructions provided24
Voltcool

Things used in this project

Hardware components

Arduino UNO
Arduino UNO
×1
Adafruit Waterproof DS18B20 Digital temperature sensor
Adafruit Waterproof DS18B20 Digital temperature sensor
×1
12V DC Water Pump
Seeed Studio 12V DC Water Pump
×1
Aluminum Water cooling block
×1
0.96" OLED 64x128 Display Module
ElectroPeak 0.96" OLED 64x128 Display Module
×1
Buzzer
Buzzer
×1
LED (generic)
LED (generic)
×1
Mega-B Development Kit
Breadware Inc Mega-B Development Kit
×1
Resistor 220 ohm
Resistor 220 ohm
×1
Resistor 4.75k ohm
Resistor 4.75k ohm
×1
200ml reservoir
×1
radiator
×1
Heat Sink, Thermal Pad
Heat Sink, Thermal Pad
×1
mock battery
×1

Software apps and online services

Arduino IDE
Arduino IDE

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)
Wire Stripper & Cutter, 18-10 AWG / 0.75-4mm² Capacity Wires
Wire Stripper & Cutter, 18-10 AWG / 0.75-4mm² Capacity Wires
Mastech MS8217 Autorange Digital Multimeter
Digilent Mastech MS8217 Autorange Digital Multimeter
Hot glue gun (generic)
Hot glue gun (generic)
Drill / Driver, Cordless
Drill / Driver, Cordless

Story

Read more

Schematics

Schematic

Code

Code Logic

C/C++
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
const int TEMP_PIN = 2;
const int COOLING_PIN = 5; // MOSFET gate (PWM)
const int GREEN_LED = 6;
const int YELLOW_LED = 7;
const int RED_LED = 8;
const int BUZZER = 9;
const float WARNING_C = 35.0; // demo threshold
const float CRITICAL_C = 42.0; // demo threshold
OneWire oneWire(TEMP_PIN);
DallasTemperature sensors(&oneWire);
Adafruit_SSD1306 display(128, 64, &Wire, -1);
void setStatus(bool g, bool y, bool r, bool alarm, int coolingPWM) {
digitalWrite(GREEN_LED, g);
digitalWrite(YELLOW_LED, y);
digitalWrite(RED_LED, r);
digitalWrite(BUZZER, alarm);
analogWrite(COOLING_PIN, coolingPWM);
}
void setup() {
pinMode(COOLING_PIN, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
pinMode(YELLOW_LED, OUTPUT);
pinMode(RED_LED, OUTPUT);
pinMode(BUZZER, OUTPUT);
sensors.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
}
void loop() {
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
const char* state;
if (tempC < WARNING_C) {
state = "NORMAL";
setStatus(HIGH, LOW, LOW, LOW, 0);
} else if (tempC < CRITICAL_C) {
state = "WARNING";
setStatus(LOW, HIGH, LOW, LOW, 160);
} else {
state = "CRITICAL";
setStatus(LOW, LOW, HIGH, HIGH, 255);
}
display.clearDisplay();
display.setTextSize(2);
display.setCursor(0, 0);
display.print(tempC, 1); display.println(" C");
display.setTextSize(1);
display.print("Status: "); display.println(state);
display.display();
Serial.print("Temperature: "); Serial.print(tempC);
Serial.print(" C | "); Serial.println(state);
delay(500); }

Credits

Noya Azeem
1 project • 0 followers
Srinidhi Malladi
1 project • 0 followers

Comments