Quạt 5V tự bật khi nóng, vặn núm chỉnh nhiệt độ (Arduino Nano + DHT22)
Quạt mini 5V tự chạy khi nhiệt độ vượt mức bạn đặt bằng núm vặn (20–40°C) và tự tắt khi đã mát, có trễ 1°C nên quạt không bật tắt liên tục. Nóng nhiều thì quạt chạy mạnh hơn. Dùng làm mát tủ mạng, hộp điện tử, chuồng gà con, hộp ủ.
✅ Đã kiểm thử
Xem chi tiết 12 phép đo
Quạt chạy hết công suất (D5 mức cao, núm vặn tối đa)
- Q1: dẫn 242.7mA, Vce=0.15V (bão hòa tốt).
- LED1: dòng 8.2mA (cho phép 20.0mA).
- Chân D5 cấp 8.3mA (an toàn ≤ 20.0mA).
- Chân D6 cấp 8.2mA (an toàn ≤ 20.0mA).
- Tổng dòng đỉnh từ USB 292.2mA (đủ với cục sạc 5V 1A).
- Dòng chạy qua quạt: 242.7mA ✓
- Dòng chân D5 phải cấp: 8.3mA ✓
- Dòng LED báo quạt chạy: 8.2mA ✓
- Áp núm vặn vào A0: 0.00V ✓
Quạt tắt (D5 mức thấp, núm vặn ở giữa)
- Tổng dòng đỉnh từ USB 33.0mA (đủ với cục sạc 5V 1A).
- Quạt tắt hẳn: 0.0mA ✓
- Áp núm vặn ở giữa (≈30°C): 2.50V ✓
Nguyên lý hoạt động
DHT22 đo nhiệt độ mỗi 2,5 giây. Núm vặn 10kΩ chia áp 0–5V vào A0, Arduino quy ra nhiệt độ đặt 20–40°C. Khi nhiệt độ ≥ mức đặt, chân D5 xuất xung PWM mở transistor S8050: dòng chân chỉ ~8mA nhưng transistor cho quạt ăn ~0,25A. Quạt chỉ tắt khi nhiệt độ xuống dưới mức đặt 1°C và đã chạy ít nhất 30 giây (chống bật tắt liên tục). Nóng hơn mức đặt 3°C thì quạt chạy 100%, gần mức đặt chạy 60%. Đi-ốt 1N4007 dập điện áp ngược của động cơ để bảo vệ transistor. Cảm biến hỏng thì quạt chạy luôn (an toàn) và LED nháy.
Sơ đồ đấu dây
Mỗi màu là một dây. Chấm tròn là điểm hàn. Chạm vào tên dây trong bảng để làm nổi bật.
| # | Dây | Nối các điểm |
|---|---|---|
| 1 | đỏ 5V | U1 5V ⟷ U2 VCC ⟷ M1 + ⟷ D1 K (vạch trắng) ⟷ VR1 1 |
| 2 | đen GND | U1 GND ⟷ U2 GND ⟷ Q1 E (phát) ⟷ LED1 K · chân ngắn (−) ⟷ VR1 3 |
| 3 | vàng DHT_DATA | U2 DATA ⟷ U1 D2 |
| 4 | xanh lá FAN_DRV | U1 D5 ⟷ R1 1 |
| 5 | xanh dương FAN_BASE | R1 2 ⟷ Q1 B (gốc) |
| 6 | tím FAN_NEG | M1 - ⟷ D1 A (anode) ⟷ Q1 C (góp) |
| 7 | xanh ngọc LED_DRV | U1 D6 ⟷ R2 1 |
| 8 | nâu LED_A | R2 2 ⟷ LED1 A · chân dài (+) |
| 9 | hồng KNOB | VR1 W · chân giữa ⟷ U1 A0 |
Danh sách linh kiện
| Ký hiệu | Linh kiện | Giá tham khảo | |
|---|---|---|---|
| U1 | Arduino Nano V3 (ATmega328P, chip nạp CH340) kèm cáp USB | 85.000đ | Tìm mua |
| U2 | Module cảm biến DHT22 (AM2302) loại 3 chân có mạch đế | 65.000đ | Tìm mua |
| M1 | Quạt/động cơ DC mini 5V (dòng ≤ 300mA), vd quạt tản nhiệt 5V 4–6cm | 15.000đ | Tìm mua |
| Q1 | Transistor S8050 (TO-92) | 500đ | Tìm mua |
| R1 | Điện trở 470Ω 1/4W (vàng-tím-nâu) | 200đ | Tìm mua |
| D1 | Đi-ốt 1N4007 | 300đ | Tìm mua |
| LED1 | LED xanh lá 5mm (green) | 300đ | Tìm mua |
| R2 | Điện trở 330Ω 1/4W (cam-cam-nâu) | 200đ | Tìm mua |
| VR1 | Biến trở núm vặn 10kΩ (loại B10K 3 chân) | 3.000đ | Tìm mua |
| Tổng (chưa gồm board hàn, dây, thiếc) | 169.500đ |
Các bước làm
Code nạp cho mạch
Cài thư viện: DHT sensor library, Adafruit Unified Sensor (Arduino IDE → Library Manager). Chọn board Arduino Nano.
/*
Mạch Gọn — Quạt 5V tự bật theo nhiệt độ (Arduino Nano + DHT22)
Thư viện: DHT sensor library, Adafruit Unified Sensor
Chân : D2 <- DHT22 ; D5 (PWM) -> 470Ω -> S8050 -> quạt ; D6 -> 330Ω -> LED xanh
A0 <- chân giữa biến trở 10k (chỉnh mức nhiệt 20–40°C)
*/
#include <Arduino.h>
#include <DHT.h>
const uint8_t PIN_DHT = 2, PIN_FAN = 5, PIN_LED = 6, PIN_KNOB = A0;
const float SET_MIN = 20.0, SET_MAX = 40.0;
const float HYST = 1.0; // tắt khi thấp hơn mức đặt 1°C
const float FULL_ABOVE = 3.0; // nóng hơn mức đặt 3°C -> chạy 100%
const uint8_t SPEED_LOW = 153, SPEED_FULL = 255; // 60% và 100%
const uint32_t MIN_RUN_MS = 30000; // chạy ít nhất 30 giây mỗi lần
const uint32_t KICK_MS = 500; // đẩy 100% lúc khởi động quạt
const uint32_t READ_MS = 2500;
DHT dht(PIN_DHT, DHT22);
float tempC = NAN, setC = 30;
bool fanOn = false, sensorOk = false;
uint8_t failCount = 0;
uint32_t fanStart = 0, lastRead = 0, lastPrint = 0;
float readKnob() {
long sum = 0;
for (int i = 0; i < 8; i++) sum += analogRead(PIN_KNOB);
float v = sum / 8.0 / 1023.0;
float s = SET_MIN + v * (SET_MAX - SET_MIN);
return round(s * 2) / 2.0; // bước 0,5°C
}
void applyFan(uint8_t speed) {
uint32_t now = millis();
if (speed && !fanOn) { fanOn = true; fanStart = now; }
if (!speed) fanOn = false;
if (fanOn && now - fanStart < KICK_MS) speed = SPEED_FULL;
analogWrite(PIN_FAN, speed);
}
void setup() {
pinMode(PIN_FAN, OUTPUT); analogWrite(PIN_FAN, 0);
pinMode(PIN_LED, OUTPUT);
Serial.begin(115200);
dht.begin();
Serial.println(F("Mach Gon - Quat tu dong theo nhiet do"));
}
void loop() {
uint32_t now = millis();
setC = readKnob();
if (now - lastRead >= READ_MS) {
lastRead = now;
float t = dht.readTemperature();
if (isnan(t)) { if (failCount < 255) failCount++; }
else { failCount = 0; tempC = t; }
sensorOk = failCount < 3;
}
uint8_t speed = 0;
if (!sensorOk) {
speed = SPEED_FULL; // an toàn: lỗi cảm biến thì quạt chạy
} else if (!isnan(tempC)) {
bool want = fanOn ? (tempC > setC - HYST || now - fanStart < MIN_RUN_MS) : (tempC >= setC);
if (want) speed = tempC >= setC + FULL_ABOVE ? SPEED_FULL : SPEED_LOW;
}
applyFan(speed);
digitalWrite(PIN_LED, sensorOk ? fanOn : ((now / 250) % 2));
if (now - lastPrint > 2000) {
lastPrint = now;
Serial.print(F("Nhiet do: ")); Serial.print(sensorOk ? String(tempC, 1) : String(F("LOI")));
Serial.print(F(" C | Muc dat: ")); Serial.print(setC, 1);
Serial.print(F(" C | Quat: ")); Serial.println(fanOn ? (speed == SPEED_FULL ? F("100%") : F("60%")) : F("tat"));
}
}
Đo kiểm bằng đồng hồ vạn năng
| Giữa chân giữa biến trở và GND khi vặn từ đầu đến cuối | thay đổi 0 → 5V |
| Giữa 2 dây quạt khi quạt chạy 100% | 4,5 – 5,0V |
| Giữa chân C và E của S8050 khi quạt chạy 100% | dưới 0,3V |
| Vặn núm về 20°C (hết bên trái) ở phòng 28°C | Quạt chạy, LED xanh sáng |
Sửa lỗi thường gặp
Quạt kêu rè nhưng không quay ở mức 60%
Quạt nhỏ cần lực khởi động; code đã đẩy 100% trong 0,5 giây đầu. Nếu vẫn không quay, sửa SPEED_LOW trong code lên 200.
Quạt chạy luôn và LED nháy
Đang báo lỗi cảm biến: kiểm tra dây OUT vào D2 và chân +/−.
Transistor nóng
Quạt ăn quá 400mA; thay quạt nhỏ hơn hoặc dùng MOSFET IRLZ44N cho quạt lớn.
Không nạp được code
Cài driver CH340, chọn "ATmega328P (Old Bootloader)", thử cáp USB khác.
⚠️ An toàn
- Mạch chạy 5V từ USB, an toàn.
- Không dùng mạch này để bật quạt điện 220V; muốn điều khiển quạt 220V hãy nhờ thợ điện hoặc dùng ổ cắm thông minh có chứng nhận.