测量给定环境的温度非常重要,因为通过此参数,可以控制各种过程,例如工业过程、与孵化器相关的过程、冷藏小型设备或大型系统的过程,以及中央处理器( CPU)的计算机,以及其他应用程序。
除了这些应用之外,适当配置的温度传感器还可用于激活其他设备,当环境温度高于或低于预定值时,例如,当环境温度高于设定值时,空调的动作会更加强烈值,导致更多热量从环境中排出,直到达到设定温度。
因此,在使用 LM35 温度传感器的 Didactic 温度计的情况下开发了类似的应用程序,如图 1 所示。
图 1 - 使用 LM35 传感器的教学温度计案例。
随着这个教学温度计案例的开发,您将学习如何像以前的项目一样使用 Arduino 组装基本电路,以及如何对其进行编程。
实施的教学温度计结构简单,具有 LCD 显示屏(液晶显示屏)、LM35 温度传感器、3 个绿色 LED、3 个黄色 LED、3 个红色 LED 和一个蜂鸣器。
LM35温度传感器检测环境温度,并将数值传给Arduino,Arduino负责处理信号,然后根据程序中配置的温度范围激活蜂鸣器中相应的LED。
在本文中,您将学习如何编程和使用 LM35 温度传感器,因为这是一个具有重要精度裕度的模拟温度传感器。
因此,通过本文,您将了解到:
现在,我们将开始完整介绍使用 LM35 温度传感器开发的教学温度计。
该项目包括展示温度计的教学模型,该模型使用带有 UNO Arduino 开发板的 LM35 温度传感器。
该项目主要由温度传感器组成,负责检测环境温度,并通过其外壳将该温度转换为模拟信号。
LED 和蜂鸣器将用作信标,最后,我们有 LCD 显示屏,将显示过程温度值,如图 2 所示。
图 2 - 建议用于教学温度计操作的电路。
LM35 温度传感器由一个形状接近于带有三个引脚的半圆柱体的外壳组成。
根据其数据表,该传感器的分辨率为 10mV / ºC,即每 1 摄氏度,它的输出提供 10 mV。等式 1 说明了转换。
公式 1 - LM35 传感器上的温度转换。资料来源:德州仪器。
这样,Arduino 就可以捕捉到信号,从而可以将 0 到 1023(模拟值)范围内的信号转换为 0V 到 5V 的信号(电压信号)。
之后,在这些值之间进行线性插值,可以找到与传感器捕获的温度对应的电压值。
最后,将该值除以分辨率,从而找到传感器记录的温度值。图 4 显示了 LM35 温度传感器。
教学温度计的所有通信都将通过液晶显示屏完成,液晶显示屏将向用户发送信息。
LM35 传感器将通过其包裹将其所在位置的温度转换为模拟值。不久之后,该值将通过其中心引脚发送到 Arduino UNO 的模拟引脚。
然后,通过开发的程序,将模拟值转换为 0 到 5 伏之间的电压值。根据获得的温度值,蜂鸣器信号会在短时间内激活,然后立即点亮多个 LED,以直观地指示温度范围。最后,传感器记录的温度值显示在 LCD 显示屏上。
要设置实验,首先,确保您的 Arduino 已通过从 USB 电缆上断开来关闭。现在,将组件连接起来,如下图 6 所示。
图 3 - 建议电路的接线图。
Led 的电路由 9 个 LED 组成,3 个绿色、3 个黄色和 3 个红色,以及它们各自的 220 Ω 电阻。每个 LED 代表 5 摄氏度的变化,从第一个绿色 LED 开始,到最后一个红色 LED 结束。
大多数 LED 都连接到数字引脚,以便引脚的强度最大,但是,每个 LED 数量使用 3 个模拟引脚,对于这些,使用表示 LED 的高逻辑电平的值 1023。数字引脚。
由于 LED 以 5 伏与阳极连接,因此所有 LED 都以连接引脚上的低逻辑电平激活。
LCD 显示电路将成为标准使用 4 位连接(D4、D5、D6 和 D7),以及负责对比度的 10 kΩ 电位器,以及连接到阳极引脚的 220 电阻。
Arduino Uno 将负责对整个电路的信号进行处理,并为原型板总线提供电源和参考,从而为开发项目的电路供电。
从上面介绍的方案中,我们将了解所开发的编程逻辑的操作。
教学温度计的所有编程逻辑都是根据以下程序的评论开发的:
#include //importando a biblioteca das funçoes do LCD
//pinos de interface da biblioteca
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int lm35 = A0;//pino do sensor lm35 conectado ao pino analogico A0 inicializado com o valor 0.
float valor_lm35 = 0;//valor que será lido pelo pino analogico do sensor lm35 inicializado com o valor 0.
float temperatura = 0;//varaivel utilizada para receber e armazenar o valor de tempersrura convertido do valor analogico.
//INICIO - intervalos de temperatura em graus celsius
int temp0=0;
int temp1=5;
int temp2=10;
int temp3=15;
int temp4=20;
int temp5=25;
int temp6=30;
int temp7=35;
int temp8=40;
int temp9=45;
//FIM - intervalos de temperatura em graus celsius
// INICIO - verificadores do buzzer
int aux01;
int aux12;
int aux23;
int aux34;
int aux45;
int aux56;
int aux67;
int aux78;
int aux89;
/*
* Os veriicadores aux forma utilizados para verificar se o buzzer ja foi acionada a cada rodada da função loop. Assim que o
* intervalo de temepratura é selecionado, ´pe verificado se o aculumador aux possui um valor igual a zero. Caso seja igual a zero,
* o buzzer é acionado e o contador é incrementado, e ocm isso, ele se rona diferente de zero, e na oroxima rodada da função
* loop o buzzer nao será acionado. E Caso o intervalo de temperatira mude, o contador será zerado no proxima intervbalo que entrar,
* e o sistema será adotado pelo proximo contador.
*/
//FIM - verificadores do buzzer
//INICIO - leds indicativos
int Led_verde1 = A4;//0
int Led_verde2 = A5;//1
int Led_verde3 = 6;//6
int Led_laranja1 = 7;//7
int Led_laranja2 = 8;//8
int Led_laranja3 = 9;//9
int Led_vermelho1 = 10;//10
int Led_vermelho2 = 13;//13
int Led_vermelho3 = A3;//porta analogica A1
//FIM - leds indicativos
//INICIO - pino do buzzer
int pino_buzzer = A2;// pino correspondente ao buzzer
//FIM - pino do buzzer
void setup() {
//inicio - definindo os pinos do leds como saida
pinMode(Led_verde1,OUTPUT);
pinMode(Led_verde2,OUTPUT);
pinMode(Led_verde3,OUTPUT);
pinMode(Led_laranja1,OUTPUT);
pinMode(Led_laranja2,OUTPUT);
pinMode(Led_laranja3,OUTPUT);
pinMode(Led_vermelho1,OUTPUT);
pinMode(Led_vermelho2,OUTPUT);
pinMode(Led_vermelho3,OUTPUT);
//fim - definindo os pinos do leds como saida
pinMode(pino_buzzer,OUTPUT);//definindo o pino do buzzer como saida
pinMode(lm35,INPUT);
// Numero de linhas e colunas do LCD utilizado
lcd.begin(16, 2);
// Funcao responsavel por retornar a mensagem no LCD
lcd.setCursor(2,0);//setando o cursor do LCD na coluna 2 linha 0
lcd.print("SILICIOS LAB");//mensagem enviada para o LCD
lcd.setCursor(0,1);//setando o cursor do LCD na coluna 2 linha 1
lcd.print("TERMOM. DIDATICO");//mensagem enviada para o LCD
delay(4000);//aguarda 4 segundos para iniciar
lcd.clear();//apaga os caracteres no LCD
}
void loop() {
lcd.setCursor(0,0);//desloca o cursor para a posição especifica do texto da contagem
lcd.clear();//limpa a contagem anterior
valor_lm35=analogRead(lm35);//ler o valor analogico enviado pelo pino analogico utilizado
temperatura=(((5*valor_lm35)/1023)/0.01);
/*
*
*******INICIO - CACULO DE CONVERSAO DO LM34**********
temperatura_t=temperatura_v/10mV = temperatura_v/0.01;
5v (valor de tensao maxima no pino) -----> 1023 (valor analogico do pino)
xv (valor de tensao maxima no pino) -----> y (valor analogico do pino)
x = [(5*y)/1023]V
resolução do lm34 = 10mV//ºC = 0.01V/ºC
temperatura = x / resolução = [(5*y)/1023]V / [0.01]V/ºC = {(5*y)/1023] / [0.01]}ºC
********FIM - CACULO DE CONVERSAO DO LM34*************
*
*/
//INICIO - CONDIÇOES DOS LEDS
if(temp0&&temperatura
aux12=0;//zerando os contadores dos outros intervalos
aux23=0;
aux34=0;
aux45=0;
aux56=0;
aux67=0;
aux78=0;
aux89=0;
//
if(aux01==0)//verificando se o buzzer ja foi acionado nessa rodada da função loop
{
analogWrite(pino_buzzer,1023);//ativa o pino analogico do buzzer para que ele sinalize a mudança de temperatura
delay(30);//deixa o buzzer ativado por 1 segundo
analogWrite(pino_buzzer,0);//desativa o pino do buzzer
}
else{
}
aux01++;//incrementado o acumulador para que o buzzer nao seja acionado mais de uma vez durante o mesmo intervalo de temperatura.
analogWrite(Led_verde1, 0);//Leds indicativos
analogWrite(Led_verde2,1023);
digitalWrite(Led_verde3,HIGH);
digitalWrite(Led_laranja1,HIGH);
digitalWrite(Led_laranja2, HIGH);
digitalWrite(Led_laranja3, HIGH);
digitalWrite(Led_vermelho1,HIGH);
digitalWrite(Led_vermelho2,HIGH);
analogWrite(Led_vermelho3,1023);
lcd.clear();//apaga os caracteres no LCD
lcd.setCursor(0, 0);// inicia o curso do LCD na coluna 0, linha 0
lcd.print("Temperatura:");//mensagem enviada para o LCD
lcd.setCursor(0, 1);// inicia o curso do LCD na coluna 0, linha 0
// lcd.print(aux);//mostra o valor da variavel "moedas" no LCD
lcd.setCursor(6,1);
lcd.print("graus C.");//mensagem enviada para o LCD
delay(100);
lcd.clear();
}
else
if(temp1&&temperatura
{
aux01=0;
aux23=0;
aux34=0;
aux45=0;
aux56=0;
aux67=0;
aux78=0;
aux89=0;
if(aux12==0)
{
analogWrite(pino_buzzer,1023);//ativa o pino analogico do buzzer para que ele sinalize a mudança de temperatura
delay(30);//deixa o buzzer ativado por 1 segundo
analogWrite(pino_buzzer,0);//desativa o pino do buzzer
}
else{}
aux12++;
analogWrite(Led_verde1, 0);
analogWrite(Led_verde2, 0);
digitalWrite(Led_verde3,HIGH);
digitalWrite(Led_laranja1,HIGH);
digitalWrite(Led_laranja2, HIGH);
digitalWrite(Led_laranja3, HIGH);
digitalWrite(Led_vermelho1,HIGH);
digitalWrite(Led_vermelho2,HIGH);
analogWrite(Led_vermelho3,1023);
lcd.clear();
lcd.setCursor(0, 0);// inicia o curso do LCD na coluna 0, linha 0
lcd.print("Temperatura:");//mensagem enviada para o LCD
lcd.setCursor(0, 1);// inicia o curso do LCD na coluna 0, linha 0
lcd.setCursor(6,1);
lcd.print("graus C.");//mensagem enviada para o LCD
delay(100);
lcd.clear();
}
else
if(temp2&&temperatura
{
aux01=0;
aux12=0;
aux34=0;
aux45=0;
aux56=0;
aux67=0;
aux78=0;
aux89=0;
if(aux23==0)
{
analogWrite(pino_buzzer,1023);//ativa o pino analogico do buzzer para que ele sinalize a mudança de temperatura
delay(30);//deixa o buzzer ativado por 1 segundo
analogWrite(pino_buzzer,0);//desativa o pino do buzzer
}
else
{}
aux23++;
analogWrite(Led_verde1, 0);
analogWrite(Led_verde2, 0);
digitalWrite(Led_verde3,LOW);
digitalWrite(Led_laranja1,HIGH);
digitalWrite(Led_laranja2, HIGH);
digitalWrite(Led_laranja3, HIGH);
digitalWrite(Led_vermelho1,HIGH);
digitalWrite(Led_vermelho2,HIGH);
analogWrite(Led_vermelho3,1023);
lcd.clear();
lcd.setCursor(0, 0);// inicia o curso do LCD na coluna 0, linha 0
lcd.print("Temperatura:");//mensagem enviada para o LCD
lcd.setCursor(0, 1);// inicia o curso do LCD na coluna 0, linha 0
lcd.setCursor(6,1);
lcd.print("graus C.");//mensagem enviada para o LCD
delay(100);
lcd.clear();
}
else
if(temp3&&temperatura
{
aux01=0;
aux12=0;
aux23=0;
aux45=0;
aux56=0;
aux67=0;
aux78=0;
aux89=0;
if(aux34==0)
{
analogWrite(pino_buzzer,1023);//ativa o pino analogico do buzzer para que ele sinalize a mudança de temperatura
delay(30);//deixa o buzzer ativado por 1 segundo
analogWrite(pino_buzzer,0);//desativa o pino do buzzer
}
else{}
aux34++;
analogWrite(Led_verde1, 0);
analogWrite(Led_verde2, 0);
digitalWrite(Led_verde3,LOW);
digitalWrite(Led_laranja1,LOW);
digitalWrite(Led_laranja2, HIGH);
digitalWrite(Led_laranja3, HIGH);
digitalWrite(Led_vermelho1,HIGH);
digitalWrite(Led_vermelho2,HIGH);
analogWrite(Led_vermelho3,1023);
lcd.clear();
lcd.setCursor(0, 0);// inicia o curso do LCD na coluna 0, linha 0
lcd.print("Temperatura:");//mensagem enviada para o LCD
lcd.setCursor(0, 1);// inicia o curso do LCD na coluna 0, linha 0
lcd.setCursor(6,1);
lcd.print("graus C.");//mensagem enviada para o LCD
delay(100);
lcd.clear();
}
else
if(temp4&&temperatura
{
aux01=0;
aux12=0;
aux23=0;
aux34=0;
aux56=0;
aux67=0;
aux78=0;
aux89=0;
if(aux45==0)
{
analogWrite(pino_buzzer,1023);//ativa o pino analogico do buzzer para que ele sinalize a mudança de temperatura
delay(30);//deixa o buzzer ativado por 1 segundo
analogWrite(pino_buzzer,0);//desativa o pino do buzzer
}
else{}
aux45++;
analogWrite(Led_verde1, 0);
analogWrite(Led_verde2, 0);
digitalWrite(Led_verde3,LOW);
digitalWrite(Led_laranja1,LOW);
digitalWrite(Led_laranja2, LOW);
digitalWrite(Led_laranja3, HIGH);
digitalWrite(Led_vermelho1,HIGH);
digitalWrite(Led_vermelho2,HIGH);
analogWrite(Led_vermelho3,1023);
lcd.clear();
lcd.setCursor(0, 0);// inicia o curso do LCD na coluna 0, linha 0
lcd.print("Temperatura:");//mensagem enviada para o LCD
lcd.setCursor(0, 1);// inicia o curso do LCD na coluna 0, linha 0
lcd.setCursor(6,1);
lcd.print("graus C.");//mensagem enviada para o LCD
delay(100);
lcd.clear();
}
else
if(temp5&&temperatura
{
aux01=0;
aux12=0;
aux23=0;
aux34=0;
aux45=0;
aux67=0;
aux78=0;
aux89=0;
if(aux56==0)
{
analogWrite(pino_buzzer,1023);//ativa o pino analogico do buzzer para que ele sinalize a mudança de temperatura
delay(30);//deixa o buzzer ativado por 1 segundo
analogWrite(pino_buzzer,0);//desativa o pino do buzzer
}
else
{
}
aux56++;
analogWrite(Led_verde1, 0);
analogWrite(Led_verde2, 0);
digitalWrite(Led_verde3,LOW);
digitalWrite(Led_laranja1,LOW);
digitalWrite(Led_laranja2, LOW);
digitalWrite(Led_laranja3, LOW);
digitalWrite(Led_vermelho1,HIGH);
digitalWrite(Led_vermelho2,HIGH);
analogWrite(Led_vermelho3,1023);
float aux=temperatura;//variavel utilizada para armazenar a leitura autal do sensor
lcd.clear();
lcd.setCursor(0, 0);// inicia o curso do LCD na coluna 0, linha 0
lcd.print("Temperatura:");//mensagem enviada para o LCD
lcd.setCursor(0, 1);// inicia o curso do LCD na coluna 0, linha 0
lcd.print(temperatura);//mostra o valor da variavel "moedas" no LCD
lcd.setCursor(6,1);
lcd.print("graus C.");//mensagem enviada para o LCD
delay(100);
lcd.clear();
}
else
if(temp6&&temperatura
{
aux01=0;
aux12=0;
aux23=0;
aux34=0;
aux45=0;
aux56=0;
aux78=0;
aux89=0;
if(aux67==0){
analogWrite(pino_buzzer,1023);//ativa o pino analogico do buzzer para que ele sinalize a mudança de temperatura
delay(30);//deixa o buzzer ativado por 1 segundo
analogWrite(pino_buzzer,0);//desativa o pino do buzzer
}
else{}
aux67++;
analogWrite(Led_verde1, 0);
analogWrite(Led_verde2, 0);
digitalWrite(Led_verde3,LOW);
digitalWrite(Led_laranja1,LOW);
digitalWrite(Led_laranja2, LOW);
digitalWrite(Led_laranja3, LOW);
digitalWrite(Led_vermelho1,LOW);
digitalWrite(Led_vermelho2,HIGH);
analogWrite(Led_vermelho3,1023);
lcd.clear();
lcd.setCursor(0, 0);// inicia o curso do LCD na coluna 0, linha 0
lcd.print("Temperatura:");//mensagem enviada para o LCD
lcd.setCursor(0, 1);// inicia o curso do LCD na coluna 0, linha 0
lcd.print(temperatura);//mostra o valor da variavel "moedas" no LCD
lcd.setCursor(6,1);
lcd.print("graus C.");//mensagem enviada para o LCD
delay(100);
lcd.clear();
}
else
if(temp7&&temperatura
{
aux01=0;
aux12=0;
aux23=0;
aux34=0;
aux45=0;
aux56=0;
aux67=0;
aux89=0;
if(aux78==0){
analogWrite(pino_buzzer,1023);//ativa o pino analogico do buzzer para que ele sinalize a mudança de temperatura
delay(30);//deixa o buzzer ativado por 1 segundo
analogWrite(pino_buzzer,0);//desativa o pino do buzzer
}
else{}
aux78++;
analogWrite(Led_verde1, 0);
analogWrite(Led_verde2, 0);
digitalWrite(Led_verde3,LOW);
digitalWrite(Led_laranja1,LOW);
digitalWrite(Led_laranja2, LOW);
digitalWrite(Led_laranja3, LOW);
digitalWrite(Led_vermelho1,LOW);
digitalWrite(Led_vermelho2,LOW);
analogWrite(Led_vermelho3,1023);
lcd.clear();
lcd.setCursor(0, 0);// inicia o curso do LCD na coluna 0, linha 0
lcd.print("Temperatura:");//mensagem enviada para o LCD
lcd.setCursor(0, 1);// inicia o curso do LCD na coluna 0, linha 0
lcd.print(temperatura);//mostra o valor da variavel "moedas" no LCD
lcd.setCursor(6,1);
lcd.print("graus C.");//mensagem enviada para o LCD
delay(100);
lcd.clear();
}
else if(temp8&&temperatura
aux01=0;
aux12=0;
aux23=0;
aux34=0;
aux45=0;
aux56=0;
aux67=0;
aux78=0;
if(aux89==0){
analogWrite(pino_buzzer,1023);//ativa o pino analogico do buzzer para que ele sinalize a mudança de temperatura
delay(30);//deixa o buzzer ativado por 1 segundo
analogWrite(pino_buzzer,0);//desativa o pino do buzzer
}
else{}
aux89++;
analogWrite(Led_verde1, 0);
analogWrite(Led_verde2, 0);
digitalWrite(Led_verde3,LOW);
digitalWrite(Led_laranja1,LOW);
digitalWrite(Led_laranja2, LOW);
digitalWrite(Led_laranja3, LOW);
digitalWrite(Led_vermelho1,LOW);
digitalWrite(Led_vermelho2,LOW);
analogWrite(Led_vermelho3,0);
lcd.clear();
lcd.setCursor(0, 0);// inicia o curso do LCD na coluna 0, linha 0
lcd.print("Temperatura:");//mensagem enviada para o LCD
lcd.setCursor(0, 1);// inicia o curso do LCD na coluna 0, linha 0
lcd.print(temperatura);//mostra o valor da variavel "moedas" no LCD
lcd.setCursor(6,1);
lcd.print("graus C.");//mensagem enviada para o LCD
delay(100);
lcd.clear();
}
else {
// inicia o curso do LCD na coluna 0, linha 1
lcd.setCursor(0, 0);// inicia o curso do LCD na coluna 0, linha 0
// print the number of seconds since reset:
lcd.print("Temp. fora de ");//mensagem enviada para o LCD
lcd.setCursor(0, 1);
lcd.print("escala");//mensagem enviada para o LCD
lcd.clear();//apaga os caracteres no LCD
delay(100);
}
//FIM - CONDIÇOES DOS LEDS
}
对于这个项目,开发了一个专有案例,它将接收 LM35 温度传感器、LCD 显示器、蜂鸣器信号、LED,只剩下 Arduino UNO 的电阻器和引脚,以便它可以用于教学方式,如图 7 所示。
图 4 - 使用 Arduino 的温度计的机械结构。
接下来,我们将介绍控制项目的印刷电路板的结构。
从使用 Arduino 设计温度计,开发了JLCPCB 印刷电路板。印刷电路板如下图所示。
该板有一个 Arduino、5 个 JST 连接器和一个 pin bar。
三个连接器用于连接结构按钮。此外,我们还有 JST 连接器用于连接 LCD 显示器和 LM35 温度传感器。
最后,我们有一个 pin bar 允许我们连接温度计的 LED 灯塔。
印刷电路板电路是根据下面的电子图开发的,您可以在文末下载文件。
下载文件后,您可以在JLCPCB 工厂网站上免费购买 10 个单元。
通过这个电子原理图,您可以设置您的项目并使用 Arduino 开展多项创意活动。
因此,从这个项目的开发中,可以知道LM35温度传感器,蜂鸣器标志的结构。
此外,我们可以通过开发的程序分析与Arduino Uno的通信。
由于温度传感器具有取决于其外壳的转换系数,因此与进行测量的区域的温度相比,测得的温度值显示出大约 3 度的误差。
但是,用于比较的值是该地区的温度,而不是位置的值。
我们感谢JLCPCB PCB 工厂对本项目开发的支持。
此外,我们要感谢Robô Lúdico Brazillian School开发该项目。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !