| Ваш IP: 54.173.237.152 | Online(8) - гости: 3, боты: 5 | Загрузка сервера: 2.21 ::::::::::::

Датчик температуры на 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;// вычисление температуры
}

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

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

  • УМЗЧ на микросхеме TDA1552Q

    УМЗЧ на микросхеме TDA1552Q

    Усилитель при высоком качестве звучания очень прост в изготовлении и не нуждается в налаживании. Он имеет универсальный вход с плавной регулировкой чувствительности. Это практически «полный» усилитель, но без входов для микрофона и звукоснимателя. Усилитель мощности реализован на МС фирмы Philips TDA1552Q. Схема его включения позаимствована из [1]. Предварительный усилитель собран …Подробнее...
  • Испытатель транзисторов на микросхемах

    Схема простого испытателя маломощных биполярных транзисторов показана на рисунке. Основа испытателя 2-а генератора, первый на низкую частоту, другой на частоту 5кГц. Инверторы DD1.4 DD2.4 позволяют согласовать выходные сопротивления генераторов с сопротивлениями цепей нагрузок, а так же получить нужные полярности напряжения питания проверяемых транзисторов обеих структур. Соответственно при проверке транзистора будет …Подробнее...
  • Драйвер для люминесцентной лампы 12В

    Драйвер для люминесцентной лампы 12В

    Схема драйвера для питания люминесцентной лампы выполнен на недорогих и широко доступных элементах. Основа драйвера таймер на TLC555 (генератор 50Гц). Силовой транзистор IRF510 нагружен обычным сетевым трансформатором, к первичной обмотке (240В) которого подключена люминесцентная лампа 4Вт. Первичная обмотка может быть от 6 до 10В. Транзистор VT1 должен быть установлен на небольшой трансформатор. …Подробнее...
  • Измеритель емкости конденсаторов до 15000мкФ

    Прибор способен производить измерения емкостей от единиц микрофарады до 15000мкФ, измеритель имеет восемь пределов: 3, 15, 30 ,150, 300, 1500, 3000, 15000 мкФ. Показания контролируются по стрелочному прибору — микроамперметр с 30-ю делениями шкалы. В исходном состоянии Сх и накопительный конденсатор С3 разряжены через замкнутые контакты SB1. При нажатии на …Подробнее...
  • Простой FM приемник на транзисторах

    Простой FM приемник на транзисторах

    На рисунке показана схема простого FM приемника на 4-х транзисторах. Приемник имеет малые габариты и питается от напряжения 1,5В. Звук выводится на головные телефоны. VT1 = BF199, VT2-VT4 = BC547 Катушка L1 состоит из 8 витков медного изолированного провода диаметром 1 мм. Катушка бескаркасная имеет диаметр 6 мм и длину …Подробнее...