How We Built a $2000 Temperature‑Controlled Test Box for Consistent Mobile Performance Testing
To ensure reliable performance‑testing data despite fluctuating ambient temperatures, the team designed and assembled a low‑cost, Arduino‑controlled temperature chamber for mobile devices, detailing the hardware architecture, circuit design, component list, code implementation, and thermal‑insulation optimizations.
Background
Performance testing requires a stable ambient temperature; variations cause inconsistent mobile‑game performance and affect trend analysis.
Design Overview
A low‑cost thermostatic test chamber was built from an acrylic enclosure, a temperature‑controlled box, and a duct that houses a fan, a cooler, and a heater. Three DHT22 sensors positioned at the left‑rear, right‑rear, and top of the box continuously measure the internal temperature. An Arduino UNO R3 reads the sensors, a potentiometer sets the desired setpoint, and the controller drives the heater or cooler via digital outputs. An I2C OLED SSD1306 display shows the current and target temperatures.
Hardware Components
Acrylic sheets for the enclosure and box
Arduino UNO R3
Three DHT22 temperature sensors
10 kΩ potentiometer (knob) for setpoint selection
0.96" I2C OLED SSD1306 display
12 V cooling fan
Miniature cooler (e.g., Peltier or DC compressor)
Resistive heater element
Custom PCB to replace jumper‑wire connections and handle high current loads
Circuit Connections
Each DHT22 sensor connects to a digital input pin on the Arduino. The potentiometer connects to analog pin A0. The fan, cooler, and heater are driven through MOSFET or transistor switches on digital pins 11 (heater) and 12 (cooler). A 12 V supply powers the fan, cooler, and heater; the Arduino provides 5 V for sensors and the OLED.
Software
Temperature sensor reading
#include <DHT.h>
#define DHTPIN1 2
#define DHTTYPE DHT22
DHT dht1(DHTPIN1, DHTTYPE);
void setup() {
Serial.begin(9600);
dht1.begin();
}
void loop() {
float curTemp = dht1.readTemperature();
Serial.print("CurrentTemp:");
Serial.println(curTemp);
}Potentiometer (setpoint)
const int knobPin = A0;
void setup() {
Serial.begin(9600);
}
void loop() {
int raw = analogRead(knobPin);
// Map 0‑1023 to 15‑35 °C range
float target = map(raw, 0, 1023, 15, 35);
Serial.print("Target:");
Serial.println(target);
}OLED display
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
Serial.begin(9600);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
while(1);
}
display.clearDisplay();
}
void loop() {
display.setTextSize(2);
display.setTextColor(WHITE);
display.clearDisplay();
// Example: display temperature values here
display.display();
}Actuator control
const int coolerPin = 12;
const int heaterPin = 11;
void setup() {
pinMode(coolerPin, OUTPUT);
pinMode(heaterPin, OUTPUT);
}
void loop() {
// Assume curTemp and target have been read
// if (curTemp > target + 1) digitalWrite(coolerPin, HIGH); else digitalWrite(coolerPin, LOW);
// if (curTemp < target - 1) digitalWrite(heaterPin, HIGH); else digitalWrite(heaterPin, LOW);
}Thermal Insulation Improvements
The acrylic box alone provided limited insulation. Adding a layer of insulating cotton increased heat retention, but the cotton was fragile and aesthetically poor. Covering the cotton with a carbon‑fiber film improved structural strength and gave the chamber a cleaner appearance.
Cost and Performance
All components cost less than ¥2000. In practice the chamber maintains the set temperature within ±1 °C for several hours, providing a repeatable environment for mobile‑game performance testing.
NetEase LeiHuo Testing Center
LeiHuo Testing Center provides high-quality, efficient QA services, striving to become a leading testing team in China.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
