Контроллер вентилятора шкафа AV
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Об этом проекте
Мой AV-ресивер сильно нагрелся, поэтому я хотел добавить вентилятор в шкаф до наступления летней жары. Сначала я попытался найти источник постоянного тока 5-12 В на внешней стороне приемника, который включается только тогда, когда приемник включен, но смог найти только несколько мест внутри приемника. Я также хотел, чтобы вентиляторы поработали некоторое время после выключения приемника, и определение размеров конденсаторов для этого становилось непростым делом.
Комнатная температура 75F, температура шкафа 109F
Я посмотрел на вентиляторы с регулируемой температурой на Amazon, и все они оказались дороже, чем я думал, что они должны быть. Все они стоили более 30 долларов и были в основном просто вентилятором, датчиком температуры и реле ... Я заглянул в корзину с запчастями, и все это уже было.
Сначала я написал небольшой скетч для китайского Arduino Nano за 2 доллара. Добавлен датчик температуры DHT11 и реле 5 В постоянного тока, и все заработало отлично.
Быстрый прототипЗатем мне нужно было найти несколько старых вентиляторов для ПК, которые будут вращаться и подавать воздух всего на 5 В, так как я хотел, чтобы все это работало от старого зарядного устройства USB для телефона. Я нашел два 80-миллиметровых и один 120-миллиметровый вентиляторы, которые все еще перемещали достаточно CFM при 5 В и оставались ниже 200 мА, поэтому я отключил соединение Molex и подключил их как USB.
На макетной плате все работало, поэтому я добавил несколько светодиодов состояния и пьезозуммер для сигнализации о перегреве. Все это прекрасно вписывалось в небольшую коробку для проекта, которая у меня была.
Плотная посадка требует большого количества горячего клея, чтобы избежать шорт Красивый и компактный, гармонирует с остальной AV-аппаратурой Светодиоды состояния:вверху слева =питание (зеленый); внизу слева =температура в норме (зеленый); средний =вентиляторы включены (оранжевый); справа =перегрев (красный)Контроллер выполняет POST при запуске, чтобы показать, что все вентиляторы, светодиоды и пьезоэлектрическая сигнализация работают.
Самотестирование при включении
Эскиз Arduino:
Контроллер измеряет среднюю температуру за 30 секундный интервал. Если температура превышает 95 ° F, вентилятор включается на 5 минут перед повторной проверкой. Если температура превышает 120F, тогда звучит сигнал тревоги, пока вентиляторы продолжают работать. Будильник звучит каждые 30 секунд, пока температура не опустится ниже 120 ° F.
Последовательный выходНа практике вентиляторы включаются примерно через 2 минуты после включения приемника и работают все время, пока он включен. После выключения медиацентра вентиляторы работают не менее 5 минут, прежде чем температура опустится ниже 95F. Пока не сработала сигнализация перегрева.
Если бы я закончил этот проект, я бы подумал о замене Arduino Nano на ATtiny85 и реле на MOSFET. Это будет гораздо меньший форм-фактор, а также позволит мне использовать ШИМ для управления скоростью вращения вентилятора.
Код
- FanTempController
FanTempController C / C ++
Скетч Arduino, который использует показания средней температуры с датчика DHT11 для включения вентилятора через реле.// Контроллер температуры для шкафа A / V // Вентилятор управляется реле на 10 А, подключенным к 12 В (компьютер) или 5 В (USB) Fan // Пьезоэлектрическая сигнализация при альтернативном перегревеint FANTEMP =95; // Высокая температура, при которой вентилятор включается (90 * F) int ALARMTEMP =120; // Температура перегрева (120 * F) int FANLED =2; // Вывод вентилятора "на" LEDint TEMPOK =3; // светодиод, когда температура ниже FANTEMPint ALARMLED =4; // Индикатор тревоги int ALARMPIN =7; // Звуковой сигнал при перегреве // DHTPIN =8; (определено ниже) int FANPIN =9; // Реле для переключателя вентилятора # include "DHT.h" // Написано ladyada, общественное достояние # define DHTPIN 8 // DHT Sensor // Раскомментируйте любой тип, который вы используете! #Define DHTTYPE DHT11 // DHT 11 // # define DHTTYPE DHT22 // DHT 22 (AM2302) // # define DHTTYPE DHT21 // DHT 21 (AM2301) // Инициализируйте датчик DHT для нормального 16 МГц ArduinoDHT dht (DHTPIN, DHTTYPE); // ПРИМЕЧАНИЕ:для работы с более быстрым чипом, как Arduino Due или Teensy, // вам может потребоваться увеличить порог для количества циклов, который считается 1 или 0. // Вы можете сделать это, передав 3-й параметр для этого порога. Чтобы найти правильное значение, нужно // немного возиться, но в целом, чем быстрее процессор, тем // значение выше. По умолчанию для AVR 16 МГц установлено значение 6. Для // Arduino Due, который работает на 84 МГц, работает значение 30. // Пример инициализации датчика DHT для Arduino Due:// DHT dht (DHTPIN, DHTTYPE, 30); // Показания, используемые для averageconst int numReadings =10; // Устанавливаем переменные равными нулю avetemp =0; float temp =0; float checkdelay =0; void setup () {Serial.begin (9600); Serial.println («Монитор температуры запущен»); dht.begin (); pinMode (FANPIN, ВЫХОД); pinMode (ALARMPIN, ВЫХОД); pinMode (АВАРИЙНЫЙ, ВЫХОД); pinMode (ВЕНТИЛЯТОР, ВЫХОД); pinMode (ТЕМПОК, ВЫХОД); digitalWrite (FANPIN, HIGH); digitalWrite (ВЕНТИЛЯТОР, ВЫСОКИЙ); digitalWrite (АВАРИЙНЫЙ, ВЫСОКИЙ); digitalWrite (ТЕМПОК, ВЫСОКИЙ); for (int x =0; x <5; x ++) {// Тестовый сигнал тревоги (ALARMPIN, 220 * x, 75); задержка (100); } Serial.print («Тест вентилятора запущен (5 секунд)»); для (int x =0; x <5; x ++) {Serial.print ("."); задержка (1000); } Serial.println («Готово»); digitalWrite (FANPIN, LOW); digitalWrite (FANLED, LOW); digitalWrite (АВАРИЙНЫЙ, НИЗКИЙ); digitalWrite (ТЕМПОК, НИЗКИЙ); noTone (ALARMPIN); } void loop () {// Подождите несколько секунд между измерениями. задержка (2000); темп =0; Serial.print ("Температура в реальном времени:\ t"); для (int x =0; xALARMTEMP) {digitalWrite (ALARMLED, HIGH); Serial.print («Температура закончилась»); Серийный.печать (ALARMTEMP); Serial.println (", Тревога включена"); for (int x =0; x <3; x ++) {// Звуковой сигнал в течение 5 секунд (ALARMPIN, 660, 1000); // Вентилятор уже должен быть запущен из последнего цикла, в противном случае он запустится сразу после звукового сигнала delay (500); тон (АЛАРМПИН, 440, 1000); задержка (500); } noTone (ALARMPIN); checkdelay =30000; // переключаем обычную 5-минутную задержку на 30 секунд перед повторным прохождением цикла} else {digitalWrite (ALARMLED, LOW); Serial.print («Температура ниже»); Серийный.печать (ALARMTEMP); Serial.println (", будильник выключен"); checkdelay =300000; // Если температура не превышает 120 * F, вентилятор работает в течение 5 минут перед повторной проверкой температуры} // Включаем вентилятор, если шкаф теплый if (avetemp> FANTEMP) {digitalWrite (FANPIN, HIGH); digitalWrite (ВЕНТИЛЯТОР, ВЫСОКИЙ); digitalWrite (ТЕМПОК, НИЗКИЙ); Serial.print («Температура закончилась»); Серийный принт (FANTEMP); Serial.print (", Вентилятор включен (для"); Serial.print (checkdelay / 1000/60); Serial.println ("минуты)"); задержка (checkdelay); // включаем минимум на 5 минут (если не срабатывает будильник, то через 30 секунд цикл повторяется)} else {digitalWrite (FANPIN, LOW); digitalWrite (FANLED, LOW); digitalWrite (ТЕМПОК, ВЫСОКИЙ); Serial.print («Температура ниже»); Серийный принт (FANTEMP); Serial.println ("Вентилятор выключен"); // Когда вентилятор выключен, температура считывается каждые 30 секунд} Serial.println (); Serial.println (); }
Схема
Производственный процесс
- Контроллер мощности ШИМ
- Файловый шкаф
- Вентилятор с регулируемой температурой
- Устранение проблем с вибрацией вентилятора
- Веб-контроллер DMX
- Устройство автоматизации задач видеоигры
- Игровой контроллер Arduino
- Unopad - MIDI-контроллер Arduino с Ableton
- Контроллер вакуумного люминесцентного дисплея
- Домашний контроллер Arduino, активированный Alexa