在本文中,我们将构建两个简单的Arduino温度表电路,也可以用作LED房间温度计电路。
该电路设计用于显示划分/棒LED中的读数。可以为环境温度发挥至关重要作用的应用程序实施此项目,或者它可以像其他乐趣项目一样建造。
1)使用DTH11作为温度传感器
第一温度计项目的心脏和大脑分别是DTH11传感器和Arduino。我们将仅从传感器中提取温度数据。
Arduino将每隔几秒钟推断数据并刷新显示的温度。
我们将采取12项决议温度感应器换句话说,我们将采用环境温度通常变化的温度范围。
如果您希望添加更多分辨率/ LED,您将需要Arduino Mega利用改进程序的传感器的全温度谱。
以上说明的布局可能被采用为最佳寻找您的设置。
用户只需进入房间的最小温度范围。它可以是一个粗糙的值,后来可以改变一旦完整的硬件设置完成。
如果温度范围低于用户输入的阈值,则没有LED将发光,并且如果温度超过最大范围(最小+ 11),所有LED都会发光。
如果有任何传感器连接问题,所有LED将同时闪烁每秒。
该设计:
Arduino LED温度计电路接线非常简单,一系列连接到GPIO引脚的GPIO引脚,带有电流限制电阻的GPIO引脚,DHT11传感器插入模拟I / O引脚,其被编程为为传感器提供电源以及读取数据。
因此,您的LED温度计电路设置完成,并准备上传代码。总是建议在使电路永久固定之前在面包板上测试电路。
提示:使用不同颜色的LED来显示不同的温度范围。您可以使用蓝色led用于较低的温度范围,绿色或黄色led用于中等温度范围,红色led用于较高的温度范围。这样会更有吸引力。
作者的原型:
注意:以下程序仅与DHT11传感器兼容。
在继续之前,请确保从以下连结下载库文件:
https://arduino-info.wikispaces.com/file/detail/DHT-lib.zip
计划代码:
//-------由R.Girish开发的程序------//
#include
int = 2;
int b = 3;
int c = 4;
int d = 5;
int e = 6;
int f = 7;
int g = 8;
int h = 9;
INT I = 10;
int j = 11;
int k = 12;
int l = 13;
int p = a0;
int data = a1;
int n = a2;
int ack;
dht dht;
int temp = 25;//设置温度范围。
无效的设置()
{
Serial.Begin(9600);//可以在测试后删除。
pinMode(输出);
PinMode(B,输出);
PINMODE(C,输出);
pinMode (d、输出);
Pinmode(E,输出);
pinMode (f,输出);
pinMode (g,输出);
PinMode(H,输出);
pinMode(我、输出);
PinMode(J,输出);
Pinmode(k,输出);
PinMode(L,输出);
pinMode (p输出);
PinMode(n,输出);
DigitalWrite(P,高);
DigitalWrite(n,低);
}
void循环()
{
//可以在测试后删除。
Serial.print(“温度(°C)=”);
serial.println(dht.temperature);
Serial.print(“湿度(%)=”);
serial.println(dht.humity);
serial.print(“\ n”);
//直到这里
ack = 0;
int chk = DHT.read11(data);
开关(CHK)
{
案例dhtlib_error_connect:
ack = 1;
休息;
}
if(ack == 0)
{
if(dht.temperature> = temp)数号(a,高);
if(dht.temperature> = temp + 1)DigiteWrite(B,高);
if(dht.temperature> = temp + 2)DigiteWrite(C,高);
if(dht.temperature> = temp + 3)DigiteWrite(D,高);
if(dht.temperature> = temp + 4)DigiteWrite(E,高);
if(dht.temperature> = temp + 5)DigiteWrite(F,高);
if(dht.temperature> = temp + 6)DigiteWrite(g,高);
if(dht.temperature> = temp + 7)DigiteWrite(H,High);
如果(DHT.temperature > = temp + 8) digitalWrite(我、高);
如果(DHT.temperature > = temp + 9) digitalWrite (j、高);
如果(DHT.temperature > = temp + 10) digitalWrite (k,高);
如果(DHT.temperature > = temp + 11) digitalWrite (l,高);
延迟(2000);
转到刷新;
}
if(ack == 1)
{
//测试后,可以删除。
serial.print(“无数据”);
serial.print(“\ n \ n”);
/ /到这里
延迟(500);
digitalWrite (1);
DigitalWrite(B,1);
digitalWrite (c, 1);
digitalWrite (d, 1);
DigitalWrite(E,1);
DigitalWrite(F,1);
DigitalWrite(g,1);
DigitalWrite(H,1);
DigitalWrite(I,1);
digitalWrite (j, 1);
DigitalWrite(k,1);
DigitalWrite(L,1);
刷新:
延迟(500);
DigitalWrite(A,0);
digitalWrite (b, 0);
digitalWrite (c, 0);
digitalWrite (d, 0);
DigitalWrite(E,0);
DigitalWrite(F,0);
DigitalWrite(G,0);
DigitalWrite(H,0);
DigitalWrite(I,0);
DigitalWrite(J,0);
DigitalWrite(k,0);
DigitalWrite(L,0);
}
}
//-------由R.Girish开发的程序------//
注1:
在程序中:
int temp = 25;//设置温度范围。
更换“25”与您在过去的最小环境温度与其他温度计遇到或预测粗糙度。
注2:请验证从串行监视器和LED设置的温度读数。
2)采用DS18B20的Arduino温度计
在第二种设计中,我们使用先进的数字LCD显示读数模块学习具有指示器电路的另一个简单但极其精确的Arduino温度传感器。
实际上在这种配置中没有太多的解释,因为一切都是基于模块的,只需要通过提供的公母插座和连接器相互连接或插入。
需要硬件
构建该精确的Arduino LCD温度计电路需要四种基本材料,这可以如下所示:
1)Arduino Uno Board
2)A兼容的液晶模块
3)模拟温度传感器芯片,例如DS18B20或我们自己LM35 IC.。
DS18B20数字温度计规格
DS18B20的数字温度计确保9位为12位摄氏温度规格,并带有非易失性消费者可编程更高和较低的激活元件的报警功能。DS18B20通过单线通信,通过描述要求与主微处理器连接的单个数据线(和接地)。
它包括-55°C到+125°C的工作温度范围,在-10°C到+85°C的分类上精确到±0.5°C。
除此之外,DS18B20是否能够直接从数据线(“寄生电源”)进行电力,处理必要性
rel.= "nofollow“外部电源。
每一个DS18B20都有一个独特的64位串行代码,允许多个DS18B20在同一个1线总线上工作。因此,它是用户友好且简单的,只需一个微处理器就可以管理与DS18B20s在广泛位置上启动的相关负载。
可以轻松利用此属性可以轻松利用的程序涉及HVAC生态配置,内部的温度监控设备,设备或工具以及过程监控和调节系统。
引脚详细信息
4)9V,1AMP AC至DC适配器单元
现在它只是关于互相推进连接器,通过LCD按钮进行一点设置,您可以随时获得完整的精确的数字LCD温度计。
你可以用这个装置测量室温,或者将传感器与任何需要监测的发热设备(如汽车发动机、孵卵室、间歇泉)适当地夹紧,或者只是检查功率放大器设备的散热。
如何挂钩arduino温度计
下图显示了连接设置的连接,其中Arduino板位于底部,LCD显示器插入其上,温度传感器与LCD板连接。
但在实现上面设置之前,您需要使用以下示例代码编程Arduino Board。
OneWire ourWire (DS18B20);
达瓦尔特米温度传感器(&uRWire);
液晶LCD(7,6,5,4,3,2);
字节degree_symbol [8] =
{
0b00111,
0b00101,
0b00111,
0b00000,
0b00000,
0b00000,
0b00000,
0B00000
};
无效的设置()
{
Serial.Begin(9600);
延迟(1000);
传感器.Begin();
液晶显示器。开始(16日2);
液晶显示器。degree_symbol createChar(1日);
lcd.clear ();
lcd.setCursor (0,0);
lcd.print(“Temp:”);
}
void循环()
{
sensor.requesttemperatures();
并同时sensor.getTempCByIndex (0));
以“°C”);
lcd.setcursor(7,0);
lcd.print(sensor.gettempcbyIndex(0));
lcd.write (1);
lcd.print(“C”);
延迟(1000);
}
礼貌:dfrobot.com/wiki/index.php?title=lcd_keypad_shield_for_arduino_sku:_dfr0009.
嗨,可以获得您的联系方式或请将我送给我一封电子邮件,我有一份我需要与您讨论的发明 -ccjrokafor15@gmail.com
你好,你可以把它发到admin (@) homemade-circuits.com
但如果有趣,讨论可能成为本网站的一部分。
海,
我是padmanaban,我在网上看到了很多有趣的项目,并给出了解决问题的方法。伟大和杰出的。
你能帮我解决一下我的电路问题吗,这里我附上了图表,问题是串口通信,
我正在使用Atmega 16,AVR Studio,通过Usbapp Programmer,Avrdude.exe,这是代码:当我连接到计算机超级邮件时,将微控制器的串行通信看为PC终端,我得到95,47而不是65,而是66B在终端上,但对于十进制的U IE 85;,0x55IN HEX,它在超级材料上正确显示为85 - 即U,
我尝试了8 Mhz, 4 Mhz, 16Mhz, 14.7456 Mhz外部晶体,
你能帮帮我吗,我做错了,
谢谢,
以下是我的AVR码和电路图,
#包括
#包括
#包括
#包括
void send_char(char ch);
void mes2usart1(char * ptr);
int main(无效)
{
//初始化串口
SEI();
UCSRB = 0 x98;
UCSRC = 0x06;
ubrrl = 103;// 9600 16MHz.
UBRRH = 0;
// ubrrl = 95;// 9600 14.7456 // 9600 BAU // UBRRL = 51;// 9600 8MHz // ubrrl = 103;// 4800 8MHz.
// ubrrl = 51;// 9600 4MHz // ubrrl = 103;// 4800 4MHz.
而(1)
{
mes2usart1(“ab”);
/ / UDR = 0 x55;
_delay_ms (3000);
}
}
void mes2usart1(char * ptr)
{
而(* PTR)
send_char(* ptr ++);
}
ISR(USART_RXC_VECT)
{
unsigned char tmp;
tmp = udr;//通过串行端口获取收到的数据
UDR = tmp;//返回数据到串口
MES2USART1(TMP);
}
void send_char(char ch)
{
udr = ch;
而(!(UCSRA & 0 x40));
UCSRA | = 0x40;
}
GR先生将研究这个问题,并尽快为您解决问题
嗨padmanaban,
不幸的是,我没有AVR工作室的经验,我无法评论你的问题。
致以最亲切的问候。
你好呀,
我是一名学生在做我的B-Tech Mechanical Project,我设计了一个用于抛物线菜的太阳能追踪系统,但在Arduino Uno编码上没有那么多知识,在这里有任何人完成的项目需要帮助,使用2步进电机,一个由四个LDR控制的,另一个由计时器。
需要帮助
嘿,谢谢你的文章帖子。极好的。