| Ваш IP: 34.224.102.60 | Online(19) - гости: 12, боты: 7 | Загрузка сервера: 1.69 ::::::::::::

Датчик температуры на 1N4148 (Arduino)

 

Кремниевый диод в прямом включении — это практически линейный температурный датчик, падение напряжения на кремниевом диоде линейно зависит от температуры, причем температурный коэффициент практически одинаков для любых типов диодов и составляет около −2 мВ/°С (т. е. с ростом температуры напряжение уменьшается).

Диапазон измерения температуры при помощи кремниевого диода может находится в пределах от -30 до 120 ºС.

Схема датчика температуры достаточно проста, на понадобится плата Arduino Nano (UNO), индикатор для вывода информации и кремниевый диод 1N4148.

Микроконтроллер ATmega в Arduino имеет внутренние подтягивающие резисторы (резисторы, подключенные к питанию внутри микросхемы), которыми можно управлять. В скетче активируется этот режим и диод питается от напряжения 5 В через внутренний подтягивающий резистор 20 кОм, одновременно на этом же аналоговом входе измеряем прямое напряжение диода, которое будет немного меняться от температуры.

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

В моем случае я поступил просто, измерив окружающую температуру ртутным лабораторным градусником (погрешность 0,1ºС), я указал ее в скетче (первоначально необходимо загрузить скетч, а потом калибровать), а так же указал цифровое значение напряжения при этой температуре (см.монитор порта).  Дополнительно (что было необязательно) диод был погружен в лед с талой водой и показания температуры были около нуля градусов.

Тестируя несколько диодов 1N4148, я убедился, что значения температуры отличались от калиброванного диода не более чем на 0,5 ºС, но все диоды были с одной партии, поэтому возможно мои калибровочные числа Вам не подойдут.

#include <LiquidCrystal.h>            
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);// RS,E,D4,D5,D6,D7

int n = 30;// кол-во измерений для среднего значения 
int t; // 0,022 мВ на 1 гр.Цельсия или 2 ед.значения А5 на 1 гр.Цельсия)
const float t0 = 26.0; // калибровка
const float t0_analog = 545; /* По показаниям эталонного градусника
задайте свое значение температуры t0, далее посмотрите значение
t0_analog в мониторе порта и укажите его */
float t_sum,t_iz,t_iz_analog,t_analog;

void setup() {
  analogReference(INTERNAL);// опорное 1,1 В 
  lcd.begin(16, 2);// LCD 16X2
  pinMode(A5, INPUT_PULLUP);
  Serial.begin(9600); 
}

void loop() {  
 
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("temp = ");
  lcd.print(t_iz,1);
  lcd.print(" C ");
  Serial.println(t_analog,0);
  t_sum = 0;
  for (int i = 0; i < n; i++) {
    t = analogRead(A5);// 545 при 26 гр
    t_sum = t_sum + t; 
    delay(33);// общее время измерения 999 мс
  }

  t_analog = t_sum / n;// среднее значение
  t_iz_analog = (t_analog-t0_analog) / 2;// отклонение гр.Цельсия от t0
  t_iz = t0 - t_iz_analog;// вычисление температуры
}

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

Кнопками регулировки можно установить необходимую температуру, как только температура датчика превысит температуру регулировки на цифровом выходе 13 появится лог. ноль. Так же в код добавлен гистерезис в 0,2 градуса.

#include <LiquidCrystal.h>            
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);// RS,E,D4,D5,D6,D7

int n = 30;// кол-во измерений для среднего значения 
int t; // 0,022 мВ на 1 гр.Цельсия или 2 ед.значения А5 на 1 гр.Цельсия)
const float t0 = 26.0; // калибровка
const float t0_analog = 545; /* По показаниям эталонного градусника
задайте свое значение температуры t0, далее посмотрите значение
t0_analog в мониторе порта и укажите его */
float t_sum,t_iz,t_iz_analog,t_analog;
int kn,t_reg = 25;
const float g = 0.2;// гистерезис

void setup() {
  analogReference(INTERNAL);// опорное 1,1 В 
  lcd.begin(16, 2);// LCD 16X2
  pinMode(A5,INPUT_PULLUP);
  pinMode(5,INPUT_PULLUP);
  pinMode(4,INPUT_PULLUP);
  pinMode(13,OUTPUT);
  Serial.begin(9600); 
}

void loop() {  
 
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("temp = ");
  lcd.print(t_iz,1);
  lcd.print(" C ");
  Serial.println(t_analog,0);
    
  if(digitalRead(5) == 0){t_reg++;}
  if(digitalRead(4) == 0){t_reg--;}
  if(t_reg <= -30){t_reg = -30;}
  if(t_reg >= 120){t_reg = 120;}
  lcd.setCursor(0,1);
  lcd.print("reg = ");
  lcd.print(t_reg);
  lcd.print(" C ");
  
  if(t_reg >= t_iz + g){digitalWrite(13,HIGH);}
  if(t_reg <= t_iz - g){digitalWrite(13,LOW);}
  if(digitalRead(13) == HIGH){lcd.setCursor(14,1);lcd.print("*");}
  else{lcd.setCursor(14,1);lcd.print(" ");}
 
  t_sum = 0;
  for (int i = 0; i < n; i++) {
    t = analogRead(A5);// 545 при 26 гр
    t_sum = t_sum + t; 
    delay(33);// общее время измерения 999 мс
  }

  t_analog = t_sum / n;// среднее значение
  t_iz_analog = (t_analog-t0_analog) / 2;// отклонение гр.Цельсия от t0
  t_iz = t0 - t_iz_analog;// вычисление температуры
}

Добавить комментарий

Случайные статьи

  • Узкополосный приемный тракт на КФ1066ХА2

    КФ1066ХА2 (аналог К174ХА26) — в данной схеме предпочтительно использовать КФ1066ХА2 так как она более приспособлена при работе на ВЧ и потребляет значительно меньший ток и может питаться от 3 до 9 В. В данной статье рассматривается приемный тракт расчитанный на частоту 27,12МГц. Характеристики: Чувствительность при отношении сигн\шум 10дБ не хуже …Подробнее...
  • Цифровой индикатор уровня воды

    Индикатор уровня, показывает цифровое значение уровня воды в резервуаре. В качестве индикатора используется 7-сегментный дисплей который выводит цифровое значение уровня воды от 0 до 9. Цифровой индикатор уровня воды работает от напряжения 5В. Основа индикатора микросхема CD4511 и 7-сегментный декодер CD4511 нагрузкой которого является 7-сегментный дисплей LTS543 и несколько дискретных …Подробнее...
  • FM-тюнер-полуавтомат

    Схема управления тюнером показана на рис.1, она обеспечивает автоматическую настройку на радиостанции в диапазоне FM2. Если в старшем разряде DD2 лог 0, то VD3 закрыт, гетеродинные катушки L1 L2 по высокой частоте включены параллельно, и выбран FM1. При лог 1 VD3 закрыт и L2 отключена. Резисторные матрицы RM1…4 и R6 …Подробнее...
  • Усилитель мощности с «нулевым» током покоя

    Усилитель мощности с «нулевым» током покоя

    Основные технические характеристики: Номинальное входное напряжение 0,5В Номинальная выходная мощность при нагрузке 8Ом 35Вт Номинальный диапазон частот 20…20000Гц Коэф. гармоник на f=1кГц не более 0,1% Входной сигнал поступает на неинвертный вход ОУ DA1, усиливает сигнал примерно в 40 раз и с его выхода сигнал подается на выходной транзистор VT3, а …Подробнее...
  • Стерео усилитель 2*5.8Вт на TA8208H

    Стерео усилитель 2*5.8Вт на TA8208H

    Микросхема TA8208H предназначена для использования в автомобильных усилителях мощности. В микросхеме имеются тепловая защита, защита от перенапряжения, защита от короткого замыкания выходов на шину питания и на корпус. Усилитель на базе TA8208H имеет следующие технические характеристики: Напряжение питания от +9 до +18В Номинальное напряжение питания 13,2В Ток покоя 80…145 мА …Подробнее...