Содержание
- Обзор
- Технические характеристики
- Подключение к плате Arduino
- Пример использования
- FAQ. Часто задаваемые вопросы
Обзор элемента Пельтье
Элемент Пельтье представляет собой термоэлектрический преобразователь, выполненный в виде пластины с двумя выводами питания. Если к этим выводам приложить постоянное напряжение, то одна из сторон элемента начнёт охлаждаться, в то время как температура противоположной стороны будет расти. Таким образом мы получим пластину с горячей и холодной стороной по оба конца элемента. Также следует отметить одну закономерность. Если принудительно отводить тепло с горячей стороны (например с помощью радиатора), то температура холодной стороны будет снижаться еще больше, вплоть до обледенения.
На рынке можно встретить много разновидностей элементов Пельтье - от бытовых до промышленных. Некоторые из них используются в узконаправленных проектах, а некоторые имеют широкий спектр применения.
В современных любительских проектах большую популярность получил элемент TEC1-12706, внешний вид которого показан на рисунке №1.
Рисунок №1 - внешний вид элемента Пельтье TEC1-12706
Как видно из рисунка, питающие провода имеют различный цвет, что говорит о наличии полярности питания, смена которой приведет к размену местами горячей и холодной сторон. Такое явление обусловлено внутренним строением элемента, состоящего из множества групп термических пар, которые размещены между пластинами. В качестве примера на рисунке №2 показано две полупроводниковых пары. В реальном элементе их насчитывается большое количество.
Рисунок №2 - внутреннее строение элемента Пельтье
В случае прохождения электрического тока через такую термическую пару, запускается процесс выделения тепловой энергии на переходе p-n и одновременное поглощение тепла на n-p переходе. Вследствие этого, часть контакта, сопряженного с n-p переходом будет охлаждаться, а пластина со стороны перехода p-n начнёт изменять температуру в сторону её увеличения. На рисунке №3 показана обобщенная модель элемента в целом.
Рисунок №3 - структура элемента Пельтье
Следует заметить, что элемент Пельтье способен на обратное преобразование. В случае подведения тепла к одной из его сторон, он начинает генерировать электрическую энергию. Это дает возможность использовать данное устройство в качестве теплового датчика, что в некоторых ситуациях может быть полезно.
Что касается маркировки, то она имеет определенную стандартизацию. Например для нашего элемента TEC1-12706 расшифровка будет следующей:- Первые два символа ТЕ всегда неизменны и несут информацию о том, что это изделие является термоэлементом;
- Следующий символ отвечает за размер. Здесь могут присутствовать два варианта: С - стандартный размер; S - малый размер.
- Крайняя цифра первой надписи (в нашем случае ТЕС1) указывает количество слоев внутри элемента;
- Три следующие цифры после дефиса говорят о количестве термопар. Для рассматриваемого в данной статье модуля это число равно 127.
- И наконец, последние две цифры показывают значение потребляемого тока. Для нашего модуля - это 6А.
Технические характеристики TEC1-12706
Рассматривая элемент Пельтье TEC1-12706, можно выделить следующий ряд характеристик:
- Величина рабочего напряжения: 12 В;
- Максимальное напряжение питания: 15.4 В;
- Ток потребления: 6 А;
- Потребляемая мощность: 77 Вт;
- Максимально возможная мощность охлаждения: 53.3 Вт;
- Максимально возможная разница температур между противоположными сторонами: 60 оС;
- Рабочая температура: -30 оС … +70 оС;
- Количество термопар: 127;
- Внутреннее сопротивление: 1,98 Ом;
- Физические размеры: 40 x 40 x 3.82 мм;
- Вес: 22 г;
- Цвет: белый;
Подключение к плате Arduino
Так как элемент Пельтье - это довольно “прожорливый” модуль, то его прямое подключение к выводам Arduino строго запрещено. Логично предположить, что в данном случае необходимо иметь промежуточный силовой коммутатор, способный управляться логическим уровнем микроконтроллера и выдерживать ток до 6А. Первое что приходит на ум - это коммутировать Пельтье при помощи релейного модуля. Однако перед сборкой схемы следует уяснить несколько важных правил, которые помогут продлить жизнь термоэлектрического преобразователя:
- Пульсация питающего напряжения свыше 5% снижает эффективность работы элемента Пельтье в среднем на 30-40%;
- Крайне не рекомендуется для питания элемента Пельтье использовать релейные регуляторы, выполняющие частые циклы включения и выключения. Такая динамика приведет к ускоренной деградации полупроводниковых пар и через 1-2 месяца модуль выйдет из строя. Средний цикл старт-стопов бытовых элементов равен около 5000 переключений.
- Некоторые умельцы регулируют температуру элементов Пельтье при помощи широтно-импульсной модуляции (ШИМ). Такой подход аналогично релейным регуляторам способствует ускоренной деградации внутренних составляющих модуля.
На основании вышеизложенных фактов логичнее всего коммутировать питание элемента Пельтье при помощи полевого транзистора, способного открываться от логического уровня, например IRL540N. Он способен пропускать ток до 36А при 4.5В на затворе, что для модуля TEC1-12706 хватит с лихвой. На рисунке №4 показана соответствующая схема.
Рисунок №4 - подключение TEC1-12706 к Arduino Nano
Ниже приведен простой код, демонстрирующий включение и отключение элемента Пельтье с интервалом в 5 минут.
#define PIN_TEC1 6 // Пин, к которому подключен транзистор управления Пельтье uint32_t timeOut = 0; // Переменная для отсчёта интервалов времени void setup() { pinMode(PIN_TEC1, OUTPUT); // Настройка на выход пина управления элементом Пельтье digitalWrite(PIN_TEC1, HIGH); // Пельтье изначально включен timeOut = millis() + 300000; // Задаём таймаут 5 мин (300 сек или 300000 мс) } void loop() { if(millis() >= timeOut) { // Если 5 минут истекло // Инвертируем логический уровень на управляющем выходе digitalWrite(PIN_TEC1, !digitalRead(PIN_TEC1)); timeOut = millis() + 300000; // Обновляем таймаут } }
Пример использования
Найти достойное применение элементу Пельтье не составит особого труда. Данные модули широко используются в таких устройствах, как автомобильные холодильники, портативные кондиционеры, водяные кулеры, осушители воздуха, системы охлаждения процессоров и т. п. В рамках данной статьи, для более тесного знакомства с термопреобразователем TEC1-12706 мы создадим проект универсального охлаждающего устройства с возможностью установки пороговых температур. Структурная схема будущего проекта показана на рисунке №5.
Рисунок №5 - структурная схема охлаждающего устройства
В роли главного элемента системы выступит плата Arduino Nano, которая будет следить за показаниями датчиков и управлять всеми процессами. В проекте планируется использовать два цифровых датчика температуры DS18B20. Первый будет измерять температуру объекта, который необходимо охлаждать и в зависимости от настроек давать команду на включение или отключение элемента Пельтье. Второй термодатчик нужен для мониторинга степени нагрева радиатора, охлаждающего горячую сторону ТЕС1-12706. В зависимости от его показаний Arduino Nano скорректирует скорость вентилятора для отвода лишнего тепла.
Блок управления состоит из 3-х тактовых кнопок при помощи которых пользователь сможет настраивать пороговые значения температуры срабатывания и отключения элемента Пельтье. Кнопка “ОК” предназначена для выбора регулируемого параметра, а кнопки “+” и “-” для его изменения.
Все значения будут отображены на популярном среди ардуинщиков дисплее от Nokia 5110 с контроллером PCD8544. Полная схема проекта изображена на рисунке №6.
Рисунок №6 - схема универсального охладителя
Теперь подумаем, какую информацию необходимо отображать на экране. Было бы неплохо разделить дисплей на две части (верхнюю и нижнюю). В верхней части можно выводить данные с температурных датчиков холодной и горячей стороны элемента Пельтье, а также скорость вращения куллера. В нижней части удобно расположить два пункта меню, с помощью которых можно настроить температуру включения и отключения термоэлемента. Переключение между настраиваемыми параметрами будет осуществляться кнопкой “ОК”. Чтобы понять какой параметр выбран в данный момент, его планируется выводить в инверсном цвете. Нажатие кнопок “+” или “-” приведёт к изменению выбранного значения в ту или иную сторону. Ниже показан прототип будущего экрана, в котором выбран второй параметр (температура отключения Пельтье):
Th=xx.xx oC Tc=xx.xx oC FAN=x% |
T_ON:xx.xx oC T_OFF:xx.xx oC |
Итак, требования к проекту определены - можно начинать программировать. Но прежде необходимо установить некоторые библиотеки, а именно:
Библиотека OneWire.h для работы с цифровыми датчиками температуры;
Библиотека Adafruit_GFX.h для вывода графики на дисплей;
Библиотека Adafruit_PCD8544.h для работы с контроллером дисплея.
Остальные библиотеки, используемые в проекте входят в стандартный набор среды разработки Arduino IDE.
Ниже приведён полный код со всеми необходимыми комментариями:
#define PIN_FAN 9 // Пин куллера #define PIN_TEC 10 // Пин элемента Пельтье #define PIN_DS_HOT 6 // Пин датчика температуры горячей стороны #define PIN_DS_COLD 7 // Пин датчика температуры холодной стороны #define PIN_BUT_PLUS A0 // Пин кнопки "плюс" #define PIN_BUT_MINUS A1 // Пин кнопки "минус" #define PIN_BUT_OK A2 // Пин кнопки "ОК" // Для работы с датчиками температуры DS18B20 #include <OneWire.h> OneWire dsHot(PIN_DS_HOT); OneWire dsCold(PIN_DS_COLD); // Переменные для датчика температуры горячей стороны byte addrHot[8]; byte dataHot[12]; float tHot; bool flagHot = false; // Переменные для датчика температуры холодной стороны byte addrCold[8]; byte dataCold[12]; float tCold; bool flagCold = false; bool flagButton = false; // Библиотеки для работы с дисплеем NOKIA 5110 #include <SPI.h> #include <Adafruit_GFX.h> #include <Adafruit_PCD8544.h> // SCLK, DIN, D/C, CS, RST Adafruit_PCD8544 display = Adafruit_PCD8544(13, 11, 5, 4, 3); uint8_t menuCursor = 1; // Переменная-курсор для навигации по меню uint8_t fanSpeed = 0; // Скорость вентилятора 0-100% float tOn = 40.0; // Температура включения элемента Пельтье float tOff = 35.0; // Температура выключения элемента Пельтье void setup() { // Настройка пинов Arduino Nano pinMode(PIN_FAN, OUTPUT); digitalWrite(PIN_FAN, LOW); pinMode(PIN_TEC, OUTPUT); digitalWrite(PIN_TEC, LOW); pinMode(PIN_BUT_PLUS, INPUT_PULLUP); pinMode(PIN_BUT_MINUS, INPUT_PULLUP); pinMode(PIN_BUT_OK, INPUT_PULLUP); // Инициализация дисплея display.begin(); display.setContrast(45); display.clearDisplay(); display.setTextSize(1); // Мелкий шрифт display.setTextColor(BLACK); display.setCursor(0, 0); display.println("Th="); display.setCursor(0, 8); display.println("Tc="); display.setCursor(0, 16); display.println("FAN="); display.drawLine(0, 25, 84, 25, BLACK); display.setCursor(0, 30); display.print("T_ON:"); display.print(tOn); display.setCursor(0, 40); display.print("T_OFF:"); display.print(tOff); display.display(); } void loop() { while(1) { // Обработка кнопки ОК if(!digitalRead(PIN_BUT_OK)) { flagButton = true; menuCursor++; if(menuCursor > 1) menuCursor = 0; delay(250); } // Обработка кнопки + if(!digitalRead(PIN_BUT_PLUS)) { flagButton = true; if(menuCursor == 0) { tOn += 1.0; } else if(menuCursor == 1) { if(tOff + 4.0 < tOn) tOff += 1.0; } delay(250); } // Обработка кнопки - if(!digitalRead(PIN_BUT_MINUS)) { flagButton = true; if(menuCursor == 0) { if(tOn - 4.0 > tOff) tOn -= 1.0; } else if(menuCursor == 1) { tOff -= 1.0; } delay(250); } // Чтение температуры с датчиков getHotTemperature(); getColdTemperature(); // Обновление экрана синхронно с чтением температуры if((flagHot && flagCold) || flagButton) { display.clearDisplay(); display.display(); display.setTextColor(BLACK); display.setCursor(0, 0); display.print("Th="); display.print(tHot); display.print("oC"); display.setCursor(0, 8); display.print("Tc="); display.print(tCold); display.print("oC"); display.setCursor(0, 16); display.print("FAN="); display.print(fanSpeed); display.print("%"); display.drawLine(0, 25, 84, 25, BLACK); if(menuCursor == 0) { display.setTextColor(WHITE); display.fillRoundRect(0, 29, 84, 9, 0, BLACK); } else display.setTextColor(BLACK); display.setCursor(0, 30); display.print("T_ON:"); display.print(tOn); if(menuCursor == 1) { display.setTextColor(WHITE); display.fillRoundRect(0, 39, 84, 9, 0, BLACK); } else display.setTextColor(BLACK); display.setCursor(0, 40); display.print("T_OFF:"); display.print(tOff); flagHot = false; flagCold = false; flagButton = false; display.display(); } // Включение и отключение элемента Пельтье if(tCold >= tOn) digitalWrite(PIN_TEC, HIGH); if(tCold <= tOff) digitalWrite(PIN_TEC, LOW); // Автоматическая регулировка скорости вентилятора: if(tHot < 35.0) { digitalWrite(PIN_FAN, LOW); fanSpeed = 0; } else if(tHot > 60.0) { digitalWrite(PIN_FAN, HIGH); fanSpeed = 100; } else { uint8_t fs = map(tHot, 35.0, 60.0, 0, 255); analogWrite(PIN_FAN, fs); fanSpeed = map(tHot, 35.0, 60.0, 0, 100); } } } // Функция чтения датчика температуры горячей стороны void getHotTemperature() { static uint8_t ghtState = 0; static uint32_t ghtTimer = 0; if(ghtState == 0 && !flagHot) { if(!dsHot.search(addrHot)) { dsHot.reset_search(); ghtTimer = millis(); ghtState = 1; } else ghtState = 2; } else if(ghtState == 1) { if(millis() > ghtTimer + 250) ghtState = 0; } else if(ghtState == 2) { dsHot.reset(); dsHot.select(addrHot); dsHot.write(0x44); ghtTimer = millis(); ghtState = 3; } else if(ghtState == 3) { if(millis() > ghtTimer + 1000) ghtState = 4; } else if(ghtState == 4) { dsHot.reset(); dsHot.select(addrHot); dsHot.write(0xBE); for(uint8_t i = 0; i < 9; i++) dataHot[i] = dsHot.read(); int16_t raw = (dataHot[1] << 8) | dataHot[0]; byte cfg = (dataHot[4] & 0x60); if (cfg == 0x00) raw = raw & ~7; else if (cfg == 0x20) raw = raw & ~3; else if (cfg == 0x40) raw = raw & ~1; tHot = (float)raw / 16.0; flagHot = true; ghtState = 0; } } // Функция чтения датчика температуры холодной стороны void getColdTemperature() { static uint8_t gctState = 0; static uint32_t gctTimer = 0; if(gctState == 0 && !flagCold) { if(!dsCold.search(addrCold)) { dsCold.reset_search(); gctTimer = millis(); gctState = 1; } else gctState = 2; } else if(gctState == 1) { if(millis() > gctTimer + 250) gctState = 0; } else if(gctState == 2) { dsCold.reset(); dsCold.select(addrCold); dsCold.write(0x44); gctTimer = millis(); gctState = 3; } else if(gctState == 3) { if(millis() > gctTimer + 1000) gctState = 4; } else if(gctState == 4) { dsCold.reset(); dsCold.select(addrCold); dsCold.write(0xBE); for(uint8_t i = 0; i < 9; i++) dataCold[i] = dsCold.read(); int16_t raw = (dataCold[1] << 8) | dataCold[0]; byte cfg = (dataCold[4] & 0x60); if (cfg == 0x00) raw = raw & ~7; else if (cfg == 0x20) raw = raw & ~3; else if (cfg == 0x40) raw = raw & ~1; tCold = (float)raw / 16.0; flagCold = true; gctState = 0; } }
На рисунке №7 показано несколько фото, демонстрирующие работу универсального охладителя.
Рисунок №7 - пример работы охладителя
Внешний вид макета в целом показан на рисунке №8
Рисунок №8 - действующий макет универсального охладителя
FAQ. Часто задаваемые вопросы
Ответ: Последовательное подключение элементов Пельтье вполне допустимо. При этом в случае использования однотипных модулей общее напряжение питания будет делиться на их количество. Например при последовательном соединении двух элементов ТЕС1-12706 с общим питанием 12В, на каждый из элементов будет приходиться по 6В.
Вопрос: Могут ли элементы Пельтье вырабатывать электроэнергию?
Ответ: Пельтье могут работать в режиме генератора постоянного напряжения, которое будет тем выше, чем больше разность температур на противоположных сторонах элемента. Данное явление известно как эффект Зебека.
Вопрос: Насколько сильно элемент Пельное боится перегрева?
Ответ: Следует помнить, что проводники элемента внутри спаяны припоем с температурой плавления от 80 до 200 оС. Поэтому во избежании выхода модуля из строя крайне рекомендуется следить за его перегревом.
Вопрос: В каких случаях Пельтье эффективен?
Ответ: Элемент Пельтье проявляет максимум своей эффективности в проектах, где необходимо охлаждать какой-либо не крупный объект. Например процессор, транзисторную сборку, силовые микросхемы и т.п. Городить на данных модулях комнатные кондиционеры не имеет смысла в силу наличия более эффективных методов.
Вопрос: Можно ли с помощью элемента Пельтье зарядить мобильный телефон?
Ответ: При обеспечении достаточной разности температур и использовании повышающего DC-DC преобразователя вполне возможно подзарядить свой мобильник даже от одного элемента ТЕС1-12706.