Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

гигрометр с охлаждаемым зеркалом Arduino

Компоненты и расходные материалы

Arduino UNO
× 1
Блок питания 12 В, 10 А
× 1
Вентилятор большой мощности 12 В, 40 мм
× 1
12 В, 40 мм TEC
× 1
радиатор 40 мм
× 1
маленькое зеркало
× 1
Теплопроводящий клей
× 1
Термопаста
× 1
Драйвер двигателя BTS7960
× 1
3 мм светодиод:желтый
× 1
датчик освещенности OPT101
× 1
Модуль IRF520 MOSFET
× 1
Цифровой термометр 1-Wire с программируемым разрешением Maxim Integrated DS18B20
× 1
Обрыв датчика влажности и температуры SparkFun - Si7021
× 1

Необходимые инструменты и машины

Пистолет для горячего клея (общий)

Приложения и онлайн-сервисы

IDE Arduino

Об этом проекте

О

Измерять влажность можно разными способами. Самый популярный метод - использование емкостного датчика влажности. К сожалению, эти датчики быстро теряют точность при непрерывной эксплуатации в очень влажной среде. Гигрометр с охлаждаемым зеркалом не страдает этой проблемой, а также является гораздо более точным, особенно в диапазоне высокой влажности. К сожалению, коммерческий гигрометр с охлаждаемым зеркалом стоит буквально тысячи долларов. Однако основная операция довольно проста, поэтому ее можно сделать самостоятельно. Он не будет иметь такую ​​же точность 0,1 градуса, как коммерческое устройство, но для большинства целей будет достаточно хорош и, безусловно, более точен, чем емкостный датчик.

Этот проект является проверкой концепции и ни в коем случае не готов к производству. Можно сделать много улучшений, но это доказывает, что это работает.

Как это работает

В гигрометре с охлаждаемым зеркалом используется датчик Пельтье (TEC) для охлаждения отражающей поверхности до появления конденсата. Конденсация обнаруживается с помощью источника света и оптического датчика. Регистрируется температура поверхности зеркала в момент появления конденсата. Эта температура эквивалентна точке росы. Затем можно рассчитать относительную влажность, используя точку росы и температуру окружающей среды.

Упрощение

У этого гигрометра с охлаждаемым зеркалом, сделанного своими руками, есть несколько отличий от коммерческого прибора.

В коммерческом гигрометре с охлаждаемым зеркалом не используется обычное зеркало, потому что оно не очень хорошо проводит и распределяет тепло, что снижает точность и эффективность. В этих устройствах в качестве зеркала в основном используется медь с платиновым или родиевым покрытием. Поскольку это нелегко получить и не рентабельно, в этом гигрометре с охлаждаемым зеркалом, сделанном своими руками, используется обычное зеркало. Маленькое квадратное зеркало было бы лучше круглого, но я не смог его найти. В качестве альтернативы еще лучше подойдет полированная плита из нержавеющей стали.

В коммерческом гигрометре с охлаждаемым зеркалом используется платиновый термометр сопротивления (PRT), встроенный под зеркалом, вместо термометра SMD, установленного на поверхности зеркала. PRT требует дополнительной электроники, и установка ее между Пельтье и зеркалом при одновременном обеспечении хорошей теплопроводности проблематична. Недостаток установки термометра на поверхность зеркала заключается в том, что он изменяет свойства распределения тепла, снижая точность. Но термометр для поверхностного монтажа намного проще в изготовлении и достаточно точный.

В коммерческом гигрометре с охлаждаемым зеркалом используется зеркало гораздо меньшего размера - около 5 мм вместо 4 см. поскольку это требует меньше энергии и имеет меньший форм-фактор. Однако маленькое зеркало и соответствующий элемент Пельтье не так легко доступны, как более крупный вариант. Кроме того, маленькому элементу Пельтье требуется очень низкое напряжение, поэтому требуется специальный драйвер. Кроме того, сложнее установить термометр SMD на небольшую зеркальную поверхность, оставив достаточно места для отражения света.

Текущая версия не имеет кожуха блокировки света. Тем не менее, его можно легко распечатать на 3D-принтере, и его настоятельно рекомендуется использовать, чтобы заблокировать помехи от внешних источников света. Его также можно использовать для удержания источника света и светового датчика на месте. Если вы все же делаете корпус с 3D-печатью, убедитесь, что он хорошо вентилируется. Вы можете использовать вентилятор Пельтье для вентиляции, но убедитесь, что воздух втягивается внутрь корпуса, а не вдувает в него. Внутренняя часть также должна быть легко доступной для очистки зеркала.

Текущая реализация не может измерять точку замерзания, поскольку для этого требуется различать частицы льда и капли воды, а для измерения рассеянного света требуется второй оптический датчик.

Как построить

Возьмите Пельтье, очистите обе поверхности и нанесите теплопроводящий клей на горячую сторону. Убедитесь, что он распределен равномерно. Если у вас нет теплопроводящего клея, можно использовать термопасту с несколькими каплями суперклея по краям. Это работает одинаково хорошо. Очистите поверхность радиатора, прижмите радиатор и элемент Пельтье вместе и дайте клею высохнуть.

После того, как радиатор прикреплен к Пельтье и клей высохнет, прикрепите зеркало таким же образом, предварительно очистив нижнюю поверхность. Важно, чтобы термопаста распределялась равномерно и не было воздушных зазоров, иначе распределение тепла по зеркалу будет неравномерным.

Когда весь клей высохнет, прикрепите веер. Убедитесь, что вы используете достаточно мощный вентилятор, чтобы охладить радиатор, так как он сильно нагревается. Способ крепления вентилятора к радиатору зависит от типа используемого радиатора. Я просто склеил их вместе с помощью пистолета для горячего клея.

Включите вентилятор, затем включите Пельтье, чтобы проверить, есть ли на зеркале хотя бы две области, где одновременно появляется конденсат. Не включайте Пельтье слишком долго, так как это обязательно создаст однородный профиль конденсации. Вы хотите увидеть, как это выглядит, когда конденсат становится видимым. Если результат вас не устраивает, попробуйте еще раз с новым элементом Пельтье, зеркалом и радиатором, поскольку маловероятно, что вы сможете удалить детали и восстановить гладкую поверхность.

Я распределил термопасту неравномерно, что привело к неравномерному профилю конденсации, как вы можете видеть на фотографии выше.

Важно сделать снимок или отметить область, где одновременно появляется конденсат, потому что это область, где вы должны установить датчик температуры поверхности зеркала и измерить количество света, отраженного от зеркала.

В этом проекте я использую Si7021 для измерения температуры зеркала, потому что он дает низкий уровень шума. К сожалению, адрес I2C жестко запрограммирован, поэтому вы можете использовать только один из этих датчиков. Для измерения температуры окружающей среды я использую датчик температуры DS18B20, но у него не очень высокая точность. Единственная причина, по которой я использую эти датчики, - это то, что они у меня были в наличии.

Чтобы установить Si7021 (или любой датчик температуры на печатной плате) на зеркало, сначала нанесите большую каплю неэлектропроводной термопасты на датчик температуры. Печатную плату также следует покрыть термопастой, чтобы предотвратить образование конденсата на электронике. Затем нанесите по 4 больших капли горячего клея на каждый угол печатной платы. Вы должны двигаться быстро. Прижмите датчик к зеркалу в том месте, где равномерно образовался конденсат. Убедитесь, что датчик расположен горизонтально и плотно прижмите датчик к зеркалу. Горячий клей быстро затвердеет, когда коснется зеркала. Если вам нужно переставить датчик, вы можете легко соскоблить его кусочком ножа для резки коробок, удалить клей и попробовать снова. Если на печатной плате образовался конденсат, изолируйте ее горячим клеем или аэрозольным пластиком.

Вентилятор управляется модулем MOSFET IRF520.

Используемый датчик освещенности - OPT101, который является чувствительным, имеет низкий выходной шум и прост в использовании.

В качестве источника света можно использовать либо маломощный лазерный диод, либо обычный светодиод. Я пробовал оба, и они оба работают нормально. Преимущество лазера в том, что он лучше реагирует, но его сложнее выровнять. Светодиод имеет более плоский отклик, потому что вокруг рассеивается больше света, но его легче настроить. Если вы используете светодиод, убедитесь, что он излучает сфокусированный луч.

Выходная мощность светодиода и лазера, вероятно, слишком высока, и использование ШИМ для уменьшения выходной мощности не вариант, потому что это вызовет помехи в датчике освещенности. Вместо этого просто подключите резистор последовательно к светодиоду или лазеру, чтобы уменьшить выходную мощность.

Чтобы установить светодиод или лазер и датчик освещенности OPT101, я использовал медный провод, скрученный в фиксирующий провод, чтобы придать ему большую жесткость. Оба конца скрепили горячим клеем. Это хорошо для подтверждения концепции, но также слишком хрупко, чтобы использовать его вне лаборатории (или подвала). Однако легко совместить датчик и источник света. Лучшим способом будет 3D-печать держателя для этих устройств, в том числе потому, что корпус с 3D-печатью необходим для предотвращения любых помех от внешнего света.

Для управления Пельтье используется драйвер двигателя BTS7960. Самый эффективный способ управлять Пельтье - это изменить ток, а не использовать ШИМ. Однако контроллеры Пельтье не так легко доступны, как драйверы двигателя BTS7960, и для этого доказательства концепции потребляемая мощность не является решающим фактором.

После сборки загрузите код в Arduino и отрегулируйте диапазон чувствительности OPT101 с помощью потенциометра. Более высокое сопротивление означает более высокое выходное напряжение при том же количестве света. См. Техническое описание OPT101, Рисунок 3 - Чувствительность к напряжению в зависимости от энергетической освещенности. Для отладки можно подуть на зеркало, чтобы образовался конденсат, или поместить объект перед датчиком. Если у вас есть кондиционер, попробуйте его включить (или выключить) и подождите. Вы сможете увидеть изменение влажности.

На приведенном ниже графике вы можете видеть температуру (синий), оптические показания (красный) и измеренную точку росы (зеленый). Вы можете увидеть повышение точки росы, когда я только что выключил кондиционер.

Безопасность

Хотя прилагаемый код не поддерживает это, оборудование может нагревать зеркало в дополнение к его охлаждению. Это делается путем простого изменения полярности на Пельтье. Подогрев зеркал можно использовать для быстрого избавления от конденсата и улучшения времени отклика. Кроме того, мгновенно испаряющийся конденсат избавляется от мелких загрязнений. Однако это также представляет потенциальную угрозу безопасности, поскольку поверхность зеркала не имеет теплоотвода. Если код застрял, нагревая Пельтье, в лучшем случае он расплавит горячий клей, удерживающий термометр на месте, а в худшем - вызовет пожар из-за плавления проводов, вызывающих короткое замыкание.

Точность

Поскольку измеренная температура точки росы является абсолютным значением, калибровка не так важна, как для емкостного или резистивного гигрометра. Однако будет, по крайней мере, некоторая разница в температуре между областью датчика температуры поверхности зеркала и светочувствительной областью. Если вам необходимо проверить точность показаний, вы можете откалибровать устройство с помощью откалиброванного коммерческого гигрометра с охлаждаемым зеркалом.

Что касается загрязнения зеркал, то это проблема лишь отчасти. Показания отраженного света не являются абсолютными, а относятся к началу цикла охлаждения. Когда начинается цикл охлаждения, на зеркале нет конденсата. Количество отраженного света измеряется и используется в качестве ориентира для обнаружения конденсации. Если зеркало загрязнено и отражается меньше света, это не должно влиять на обнаружение конденсации. Однако некоторые загрязнители либо понижают, либо повышают температуру, при которой происходит конденсация, поэтому для большей точности время от времени очищайте поверхность зеркала.

Датчики температуры зеркала и окружающей среды не обязательно должны иметь высокую точность калибровки, но разрешение должно быть высоким. Например, если фактическая температура составляет 24,0 градуса, но она измеряет 24,5 градуса, это нормально, если и зеркало, и термометр окружающей среды также измеряют 24,5 (может быть нормализовано), а число колеблется только с одним десятичным знаком. У многих термометров джиттер составляет 0,2 или 0,3 градуса. Было бы лучше использовать датчик температуры TSYS01 как для измерения температуры поверхности зеркала, так и для измерения температуры окружающей среды, поскольку эти датчики обеспечивают ту же точность, что и платиновый термометр сопротивления - 0,1 градуса.

Важно, чтобы датчик температуры хорошо соприкасался с поверхностью зеркала. Использование непроводящей термопасты обязательно.

Не охлаждайте зеркало быстрее, чем время срабатывания термометра, иначе измеренная точка росы будет неточной.

Датчик температуры должен быть размещен на том месте зеркала, где одновременно появляется конденсат светочувствительной области.

Установка датчика температуры на поверхность зеркала изменяет распределение тепла, снижая точность. Может возникнуть соблазн использовать в качестве альтернативы инфракрасный термометр, но, к сожалению, зеркало отражает некоторое количество теплового излучения, поэтому на измерения будет влиять окружающая среда.

Технически показание влажности также зависит от атмосферного давления, но в окружающей среде эффект очень мал. Любое изменение давления, вызванное хлопаньем дверей и дующим внешним ветром, вызывающим перепад давления в здании, вероятно, вызовет больше проблем, чем оно того стоит.

Горячий воздух от радиатора Пельтье не должен попадать на зеркало.

Медленное падение температуры даст более точные показания, но также снизит время отклика. Тем не менее, время отклика можно улучшить, если колеблется температура, близкая к точке росы.

Код

  • Гигрометр с охлаждаемым зеркалом
Гигрометр с охлаждаемым зеркалом C / C ++
Код Arduino
 #include  #include  // Обнаружение сбоя Watchdog // Это собственные библиотеки. # Include "Si7021.h" // датчик влажности с нагревателем # include  // Датчик температуры DS18B20 # include  // Датчик температуры DS18B20 // Библиотека таймера:https://github.com/brunocalou/Timer#include "timer.h" #include "timerManager.h" // Определение аппаратных выводов на плате Arduino. # Define CoolingPWM 6 # define heatingPWM 5 # define CoolingEnable 13 # define heatingEnable 12 #define tecFan 7 #define opticalSensor 0 // Аналог в # define oneWireBus A3 // датчик температуры DS18B20 // Состояние TEC. #Define COOLING 0 # define HEATING 1 # define OFF 2 // TimersTimer timerMainLoop; Timer timerTecCooling; Timer timerSampleNoise; // Датчик температуры (влажность не используется). Si7021 si7021; // Датчик температуры DS18B20OneWire oneWire (oneWireBus); Датчики температуры Далласа (&oneWire); float влажность =0; float ambientTemp =0; float opticalDewpoint =0; // Установите их на начальное более высокое значение, чтобы получить правильный диапазон последовательного плоттера. Float mirrorTemp =30; поплавок оптический =30; float dewPoint =15; // начальное значение должно быть ниже зеркального temp.float relativeHumidity =30; int tecState =OFF; bool Cooling =false; int intervalTecCooling =200; // Как часто таймер TEC обновляется в мс. Float opticThreshold =0.5f; //0.5 // Количество градусов Цельсия, на которое оптическое считывание должно быть ниже эталонного, чтобы отметить обнаружение конденсации. Это должно быть большее число, чем сигнал noise.int pwmIncrement =1; int startPwm =100; int maxPwm =255; int intervalMainLoop =200; int tecPwm =0; int noiseSampleIndex =0; int noiseSampleAmount =10; float noiseSampleHighest =0; float noiseSampleLowest =10000; bool noiseSampling =false; float calculateHumidity (float TD, float T) {// Точка росы не может быть выше, чем температура. если (TD> T) {TD =T; } // Приближение Августа-Роша-Магнуса. float rh =100 * (exp ((17,625 * TD) / (243,04 + TD)) / exp ((17,625 * T) / (243,04 + T))); return rh;} // Установите ТЕС на нагрев, охлаждение или выключение .void SetTEC (int state, int amount) {tecState =state; // Обратите внимание, что и для нагрева, и для охлаждения штифт нагрева И охлаждения должен быть установлен в высокое положение. Спросите у разработчика печатных плат, почему. // Драйвер, используемый для управления платой драйвера двигателя TEC:BTS7960. Обратите внимание, что ШИМ для управления ТЕС неэффективен, и лучше использовать источник переменного тока. переключатель (состояние) {case COOLING:digitalWrite (heatingEnable, HIGH); analogWrite (heatingPWM, 0); digitalWrite (CoolingEnable, HIGH); analogWrite (охлаждение, ШИМ, количество); ломать; НАГРЕВ корпуса:digitalWrite (CoolingEnable, HIGH); analogWrite (охлаждение ШИМ, 0); digitalWrite (heatingEnable, HIGH); analogWrite (heatingPWM, amount); ломать; case OFF:digitalWrite (CoolingEnable, LOW); analogWrite (охлаждение ШИМ, 0); digitalWrite (heatingEnable, LOW); analogWrite (heatingPWM, 0); ломать; по умолчанию:digitalWrite (CoolingEnable, LOW); analogWrite (охлаждение ШИМ, 0); digitalWrite (heatingEnable, LOW); analogWrite (heatingPWM, 0); }} void setup () {// Обнаружение сбоя сторожевого таймера. Это сделано для безопасности, потому что вы не хотите, чтобы ТЕС зависал в режиме обогрева. wdt_enable (WDTO_2S); // WDTO_500MS // WDTO_1S Serial.begin (9600); // 9600 // 57600 pinMode (CoolingPWM, OUTPUT); pinMode (heatingPWM, OUTPUT); pinMode (CoolingEnable, ВЫХОД); pinMode (heatingEnable, OUTPUT); pinMode (tecFan, ВЫХОД); pinMode (оптический датчик, ВХОД); // Настраиваем таймеры timerMainLoop.setInterval (intervalMainLoop); timerMainLoop.setCallback (mainLoop); timerMainLoop.start (); timerTecCooling.setInterval (intervalTecCooling); timerTecCooling.setCallback (tecCoolingCallback); timerSampleNoise.setInterval (intervalTecCooling); timerSampleNoise.setCallback (sampleNoiseCallback); // Настройка датчика температуры si7021. uint64_t serialNumber =0ULL; si7021.begin (); serialNumber =si7021.getSerialNumber (); // DS18B20 одножильный датчик температуры sensor.begin (); // Отключаем ведение журнала отладки датчика температуры, чтобы график работал правильно. / * Serial.print ("Серийный номер Si7021:"); Serial.print ((uint32_t) (серийный номер>> 32), HEX); Serial.println ((uint32_t) (серийный номер), HEX); // Версия прошивки Serial.print ("Версия прошивки Si7021:"); Serial.println (si7021.getFirmwareVersion (), HEX); * / startNoiseSampling (); } // Получаем показания оптического датчика. Float getOptical () {int opt ​​=analogRead (opticalSensor); float optFactored =(float) opt / 30.0f; return optFactored;} // Обратный вызов таймера .void tecCoolingCallback () {digitalWrite (tecFan, HIGH); // Медленно увеличивайте мощность ТЕС. tecPwm + =pwmIncrement; // Закрепить if (tecPwm> maxPwm) {tecPwm =maxPwm; } // Устанавливаем количество охлаждения TEC SetTEC (COOLING, tecPwm); // Обнаружена конденсация? if (оптический <=(noiseSampleLowest - opticalThreshold)) {// Регистрируем точку росы; dewPoint =mirrorTemp; оптическая точка росы =оптическая; stopTec (); }} void startNoiseSampling () {noiseSampling =true; noiseSampleHighest =0; noiseSampleLowest =10000; timerSampleNoise.start ();} void sampleNoiseReset () {timerSampleNoise.stop (); noiseSampleIndex =0; noiseSampling =false;} void sampleNoiseCallback () {если (noiseSampleIndex> noiseSampleAmount) {sampleNoiseReset (); startTecCooling (); } еще {если (оптический> noiseSampleHighest) {noiseSampleHighest =оптический; } если (оптический  =noiseSampleLowest)) {startNoiseSampling (); }} void loop () {// Обнаружение сбоя сторожевого таймера wdt_reset (); // Обновить все таймеры. TimerManager ::instance (). Update ();} 

Схема


Производственный процесс

  1. Зеркало
  2. Arduino Spybot
  3. FlickMote
  4. Самодельный телевизор B-Gone
  5. Зеркало бесконечности калейдоскопа
  6. Основные часы
  7. Найди меня
  8. Arduino Power
  9. Tech-TicTacToe
  10. Четвероногий Arduino