测量给定环境的温度非常重要,因为通过此参数,可以控制各种过程,例如工业过程、与孵化器相关的过程、冷藏小型设备或大型系统的过程,以及中央处理器( 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条评论
快来发表一下你的评论吧 !