Dòng LM35 là cảm biến nhiệt độ mạch tích hợp chính xác, có điện áp đầu ra tỷ lệ tuyến tính với nhiệt độ độ C (độ C). Do đó, LM35 có lợi thế hơn so với cảm biến nhiệt độ tuyến tính được hiệu chuẩn theo ° Kelvin, vì người dùng không cần phải trừ một điện áp không đổi lớn ra khỏi đầu ra của nó để có được tỷ lệ độ bách phân. Hãy tham khảo bên dưới với hocwiki nhé.

Trong dự án Bất Động Sản này, chúng tôi đang đo nhiệt độ bằng cảm ứng nhiệt độ LM35 và hiển thị trên led 7 đoạn. Cảm biến LM35 hoàn toàn có thể đo nhiệt độ từ khoanh vùng phạm vi khá đầy đủ – 55 ° đến + 150 ° C. Để hiển thị nhiệt độ lên đến + 150 ° C, tất cả chúng ta cần hiển thị trên 3 led bảy đoạn. Nhưng trong dự án Bất Động Sản này, để làm cho dự án Bất Động Sản đơn thuần và dễ hiểu, chúng tôi chỉ sử dụng hai Led 7 đoạn .
Phần chính của dự án Bất Động Sản này là sự hiểu biết về quy đổi tương tự như sang kỹ thuật số ( ADC ) trong vi điều khiển và tinh chỉnh AVR và phần khác là cách hiển thị giá trị nhiệt độ đó trên màn hình hiển thị hai bảy đoạn .

Cảm biến nhiệt độ LM35 là gì

Dòng LM35 là cảm biến nhiệt độ mạch tích hợp chính xác, có điện áp đầu ra tỷ lệ tuyến tính với nhiệt độ (độ C). LM35 không yêu cầu bất kỳ hiệu chuẩn hoặc cắt tinh chỉnh bên ngoài nào để cung cấp độ chính xác điển hình là ± 1⁄4 ° C ở nhiệt độ phòng và ± 3⁄4 ° C trong phạm vi nhiệt độ -55 đến + 150 ° C đầy đủ.

Đặc trưng

  • Được hiệu chuẩn trực tiếp bằng ° C (Centigrade)
  • Hệ số thang tuyến tính + 10,0 mV / ° C
  • Có thể đảm bảo độ chính xác 0,5 ° C (ở + 25 ° C)
  • Được đánh giá cho phạm vi từ -55 ° đến + 150 ° C đầy đủ
  • Thích hợp cho các ứng dụng từ xa
  • Chi phí thấp do tinh chỉnh  ở cấp độ wafer
  • Hoạt động từ 4 đến 30 vôn
  • Dòng cực máng ít hơn 60 μA
  • Tỏa nhiệt thấp, 0,08 ° C trong không khí tĩnh
  • Độ phi tuyến tính chỉ ± 1⁄4 ° C điển hình
  • Đầu ra trở kháng thấp, 0,1 W cho tải 1 mA

Sơ đồ chân của LM35

Cách tính giá trị tương tự thành giá trị kỹ thuật số 

Sử dụng tỷ suất sau :

e / V  max   = d / 2  n – 1 

trong đó

  • Điện áp tối đa tối mà tín hiệu tương tự có thể giả định
  • n  số bit có sẵn cho mã hóa kỹ thuật số, Ở đây n = 10
  • d  mã hóa kỹ thuật số hiện tại
  • e  điện áp tương tự từ cảm biến

Thí dụ:

Cách tính giá trị kỹ thuật số nếu tất cả chúng ta có nhiệt độ 30 ° C .
Ở đây
thông số thang đo = 10,0 mV / ° C hoặc 0,01 V / ° C
Nếu tất cả chúng ta có nhiệt độ 30 ° C thì Điện áp = 30 * 0,01
= 0,3 V Vậy e = 0,30 V
Vmax = 5V

d = e * 2  n – 1 / V  max 

d = 0,30 * 1023 / 5
d = 61,38 hoặc gần như gấp đôi
Lưu ý : Mỗi khi tất cả chúng ta đo lường và thống kê giá trị kỹ thuật số, nó sẽ nhân đôi với nhiệt độ .
Vì vậy, trong lập trình, chúng tôi chia nó cho 2 để nhận được giá trị gần đúng của nhiệt độ .

Sơ đồ mạch đo nhiệt độ dùng lm35 hiển thị led 7 thanh

Code mạch đo nhiệt độ dùng lm35 hiển thị led 7 thanh

#include

#include

#include

int count = 0 ;
int d0, d1, seg ;
int delay = 5 ;
int ReadADC ( uint8_t ch )
{
ADMUX = ch ;
/ / Start Single conversion

ADCSRA |= (1<
/ / Wait for conversion to complete

while(!(ADCSRA&(1<

ADCSRA|=(1<
return ( ADC ) ;
}
void initADC ( )
{

ADMUX=(1<

ADCSRA=(1<
}
void segment_code ( int seg )
{
switch ( seg )
{
case 1 :
PORTD = 0 b11111001 ; / / 1
_delay_ms ( delay ) ;
break ;
case 2 :
PORTD = 0 b10100100 ; / / 2
_delay_ms ( delay ) ;
break ;
case 3 :
PORTD = 0 b10110000 ; / / 3
_delay_ms ( delay ) ;
break ;

case 4:

PORTD = 0 b10011001 ; / / 4
_delay_ms ( delay ) ;
break ;
case 5 :
PORTD = 0 b10010010 ; / / 5
_delay_ms ( delay ) ;
break ;
case 6 :
PORTD = 0 b10000010 ; / / 6
_delay_ms ( delay ) ;
break ;
case 7 :
PORTD = 0 b11111000 ; / / 7
_delay_ms ( delay ) ;
break ;
case 8 :
PORTD = 0 b10000000 ; / / 8
_delay_ms ( delay ) ;
break ;
case 9 :
PORTD = 0 b10010000 ; / / 9
_delay_ms ( delay ) ;
break ;
case 0 :
PORTD = 0 b11000000 ; / / 0
_delay_ms ( delay ) ;
break ;
}
}
int main ( )
{
DDRC = 0 b0000000 ;
DDRD = 0 xFF ; / / PORT D as output port
DDRB = 0 xFF ; / / PB0 and PB1 is segment select pins
initADC ( ) ;
int analogVal ;
while ( 1 )
{
analogVal = ReadADC ( 0 ) ;
analogVal = analogVal / 2 ;
count = analogVal ;
/ / variable do containing the 10 th digit of temperature
d0 = count % 10 ;
seg = d0 ;
PORTB = 0 b11111101 ; / / select segment 0
segment_code ( seg ) ; / / match and display
/ / get the 100 th digit of temperature
d1 = count / 10 ;
d1 = d1 % 10 ;
seg = d1 ;
PORTB = 0 b11111110 ; / / select segment 1

segment_code(seg);//match and display

}
return 0 ;

}