| Ваш IP: 18.232.147.215 | Online(44) - гости: 2, боты: 42 | Загрузка сервера: 2.18 ::::::::::::

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

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

Войти с помощью: 

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

  • УСИЛИТЕЛЬ НЧ НА ЧЕТЫРЕХ ТРАНЗИСТОРАХ

    На рис. а) изображена схема усилителя НЧ на четырех транзисторах. Оконечные транзисторы V5 и V6 в нем — германиевые средней мощности, что позволяет получить при сопротивлении нагрузки 8 Ом и напряжении питания 9 В номинальную мощность до 0,7 Вт. При повышении напряжения питания до 12 В выходная мощность достигает 1,5 …Подробнее...
  • Часы на КР145ИК1901 с индикаторами на светодиодах

    Схема часов на светодиодных индикаторах показана на рисунке. Управления производится на кнопках Т(время) К(коррекция) Ч(часы) М(минуты). Тактовая частота задается кв. резонатором Q1. Сигналы с сегментных выходов КР145ИК1901 — A-G поступают на входы транзисторов VT1-VT7, в коллекторной цепи которых включены светодиодные матрицы состоящей из индикаторов Н1-Н4, а вывод питания 14 используется …Подробнее...
  • ACS712 — датчик тока (Arduino)

    ACS712 — датчик тока (Arduino)

    Датчик ACS712 позволяет измерить постоянный и переменный ток, с достаточно большой точностью (погрешность измерения не более 1,5%), так же падение напряжение на датчике тока очень незначительное, так как сопротивление токопроводящей цепи не более 1,2 мОм. Датчик тока ACS712 выпускается на номиналы в ±5, ±10 и ±30 А, с чувствительностью 185 …Подробнее...
  • Автоматический выключатель освещения (12В)

    Автоматический выключатель освещения включает или выключает исполнительный элемент (реле) в зависимости от освещения. На рисунке показаны две схемы для положительной и отрицательной полярности напряжения питания. Уровень освещенности при котором срабатывает уст-во регулируется потенциометром Р1. Печатная плата одинаково подходит для разно полярных схем. Источник — http://electroschematics.comПодробнее...
  • EEPROM — работа с энергонезависимой памятью (Arduino)

    EEPROM — работа с энергонезависимой памятью (Arduino)

    Arduino UNO и NANO содержат 1024 байт EEPROM – энергонезависимой памяти, в которой можно хранить данные, которые будут доступны после отключения питания. В Arduino IDE по умолчанию уже имеется библиотека EEPROM которая позволяет проводить операции с энергонезависимой памятью. Память EEPROM обладает гарантированным жизненным циклом 100 000 операций записи/стирания. Время затраченное на одну операцию …Подробнее...