| Ваш IP: 34.204.43.11 | Online(29) - гости: 14, боты: 15 | Загрузка сервера: 0.6 ::::::::::::

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

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

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

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

  • Регулируемый стабилизатор напряжения с защитой по току (Arduino)

    Регулируемый стабилизатор напряжения с защитой по току (Arduino)

    За основу регуляруемого стабилизатора свята схема со траницы https://rcl-radio.ru/?p=57426 , схема достаточно простая и содержит минимальный набор элементов. Выходное напряжение регулируемого стабилизатора можно регулировать от 0 до 25 В при максимальном токе 3 А. Используя Arduino можно заметно расширить функционал стабилизатора, сделать индикацию и защиту по току и КЗ, добавив …Подробнее...
  • Флюсы для пайки

    Флюсы для пайки припоями типа ПОС Флюсы для пайки чёрных металлов Сильно-кислые флюсы («активные флюсы») Хлорид цинка Флюсы средней и малой активности Хлорид аммония (нашатырь) Флюсы для электротехники Основные требования к таким флюсам — низкий ток утечки и низкая коррозионная активность. Простейшие флюсы такого типа создают на основе канифоли, например растворы …Подробнее...
  • УНЧ на TDA1558Q

    УНЧ на TDA1558Q

    Напряжение питания 6…18В Максимальный ток нагрузки 4А Выходная мощность при Uп=14,4В и Rн=4Ом: КНИ=0,5% — 5Вт КНИ=10% — 6Вт Ток покоя 80мАПодробнее...
  • break (Arduino)

    break (Arduino)

    break используется для принудительного выхода из циклов do, for или while, не дожидаясь завершения цикла по условию. Он также используется для выхода из оператора switch. Пример использования: void setup(){ pinMode(A1,INPUT); } int i; void loop(){ for(i=0;i<100;i++){ if(analogRead(A1)>500){ break; } } } Запускаем цикл for, пока переменная i меньше 100 цикл …Подробнее...
  • Любительская паяльная станция

    Схема станции показана на рис. 1. На ОУ DA3 собран усилитель напряжения термопары ВК1. Плюсовой вывод термопары ВК1 должен быть обязательно подключен к общей точке резисторов R4 R11. На ОУ DA4 выполнен компаратор напряжения. На его не инвертирующий вход поступает напряжение, задаваемое делителем R5R7R8R9, на инвертирующий вход — напряжение с …Подробнее...