Простейший датчик температуры на 1N4148

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#1 Дим » 27 июня 2019, 21:45

phpBB [media]


Спойлер
Простейший датчик температуры на 1N4148.PNG
Простейший датчик температуры на 1N4148
Простейший датчик температуры на 1N4148.PNG (37.79 КБ) 1404 просмотра


Простейший датчик температуры 2 на 1N4148.PNG
Простейший датчик температуры 2 на 1N4148
Простейший датчик температуры 2 на 1N4148.PNG (20.42 КБ) 1404 просмотра

Собираем вышеприведённую, незамысловатую схему состоящую из Arduino UNO и кремниевого диода 1N4148. И заливаем нижеприведённый скетч.

Код: Выделить всё

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

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

void loop() {  
  Serial
.println(t_analog,0);
  Serial.println(t_iz,1);
  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;// вычисление температуры
}


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

Но не все диоды одинаково полезны :grin: имеют одинаковые параметры, и поэтому необходима калибровка. Измеряем окружающую температуру простым градусником и указать ее в скетче. const float t0 = 27.0; // калибровка. Посмотрев в монитор порта указываем цифровое значение напряжения при данной температуре.

Простейший датчик температуры 3 на 1N4148.PNG
Простейший датчик температуры 3 на 1N4148
Простейший датчик температуры 3 на 1N4148.PNG (2.36 КБ) 1404 просмотра


Вот и всё теперь у нас имеется датчик температуры, диапазон измерения которого может находится в пределах от -30 до 120 ºС.
Далее вы можете приспособить какой нибудь дисплей и выводить на него данные температуры. Чуть попозже сделаю с дисплеем от Nokia 5110 84x48
[center]i love you [s]mxIni[/s] Mysql[/center]


Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#2 Дим » 29 июня 2019, 14:26

phpBB [media]


Как и обещал делаю продолжение - подключил дисплей от Nokia 5110 84x48 и используя библиотеку LCD5110_Basic сделал вывод информации.
Спойлер
Простейший датчик температуры на 1N4148 - 2.PNG
Простейший датчик температуры на 1N4148 - 2
Простейший датчик температуры на 1N4148 - 2.PNG (128.6 КБ) 1372 просмотра

Код: Выделить всё

#include <LCD5110_Basic.h>

LCD5110 myGLCD(7,6,5,3,4);
extern uint8_t MediumNumbers[];
extern uint8_t BigNumbers[];

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

void setup()
{
  
myGLCD.InitLCD(75);//инициализация экрана и контрастность(75) по умолчанию 70
  
analogReference(INTERNAL);// опорное 1,1 В 
  
pinMode(A5INPUT_PULLUP);
  
Serial.begin(9600); 
}


void loop()

  
Serial.println(t_analog,0);
  
Serial.println(t_iz,1);
  
t_sum 0;
  for (
int i 0ni++) 
  {
    
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;// вычисление температуры
  

    
myGLCD.clrScr();
    
myGLCD.setFont(BigNumbers);
    
myGLCD.printNumF(float(t_iz), 1RIGHT0);
    
    
myGLCD.setFont(MediumNumbers);
    
myGLCD.printNumI(t_analogRIGHT26);
  } 
[center]i love you [s]mxIni[/s] Mysql[/center]

Arduino
Сержант
Сержант
Аватара
Arduino
Сержант
Сержант
Сообщения: 64
Зарегистрирован: 19 апреля 2017
С нами: 6 лет 11 месяцев

#3 Arduino » 29 июня 2019, 14:29

Дим писал(а):диапазон измерения которого может находится в пределах от -30 до 120 ºС
Интересно как он будет себя вести в крайних точках измерения. Например при минус 25 или плюс 110.


  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Аппаратная часть»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 1 гость