在本文中,我们将构建两个简单的Arduino温度表电路,也可以用作LED房间温度计电路.
该电路被设计成以点状/条状led显示读数。这个项目可以用于环境温度发挥关键作用的应用程序,也可以作为另一个有趣的项目为您的家庭。
1)使用DTH11作为温度传感器
第一个测温仪项目的心脑分别是DTH11传感器和Arduino。我们将只从传感器中提取温度数据。
arduino会对数据进行推断,并每隔几秒刷新显示的温度。
我们将有12个决议温度传感器换句话说,我们要取环境温度通常变化的温度范围。
如果您希望添加更多的分辨率/ led,您将需要arduino mega利用传感器的整个温度光谱的修改程序。
上面的插图布局可能会被采用为你最好的设置。
用户只需输入房间的最低温度范围。它可以是一个粗略的值,在完成完整的硬件设置后可以更改。
如果温度范围低于用户输入的阈值,没有LED会发光,如果温度超过最大范围(最小+ 11),所有LED都会发光。
如果有任何传感器连接问题,所有的LED将同时闪烁每秒钟。
设计:
Arduino LED温度表电路接线非常简单,将一系列LED连接到2 - 13带限流电阻的GPIO引脚上,将DHT11传感器插到模拟I/O引脚上,编程给传感器供电并读取数据。
这样,LED温度计电路设置就完成了,可以上传代码了。总是建议在面包板上测试电路使其永久。
提示:使用不同颜色的LED显示不同的温度范围。您可以使用蓝色led用于较低温度范围,绿色或黄色led用于中温度范围,红色led用于较高温度范围。这样会更有吸引力。
作者的原型:
注意:以下程序仅与DHT11传感器兼容。
在继续之前,请确保从以下链接下载库文件:
https://arduino-info.wikispaces.com/file/detail/DHT-lib.zip
程序代码:
//-------由R.Girish开发的程序------//
# include < dht.h >
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数据= A1;
int n = A2;
int应答;
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,低);
}
无效循环()
{
//可以在测试后删除。
并同时“温度(°C) = ");
以DHT.temperature);
并同时“湿度(%)= ");
以DHT.humidity);
并同时(“\ n”);
/ /到这里
ack = 0;
int chk = DHT.read11(data);
开关(分)
{
案例DHTLIB_ERROR_CONNECT:
ack = 1;
打破;
}
如果(ack = = 0)
{
如果(DHT.temperature > = temp) digitalWrite(一、高);
如果(DHT.temperature > = temp + 1) digitalWrite (b、高);
如果(DHT.temperature > = temp + 2) digitalWrite (c、高);
如果(DHT.temperature > = temp + 3) digitalWrite (d、高);
如果(DHT.temperature > = temp + 4) digitalWrite (e、高);
如果(DHT.temperature > = temp + 5) digitalWrite (f,高);
如果(DHT.temperature > = temp + 6) digitalWrite (g,高);
如果(DHT.temperature > = temp + 7) digitalWrite (h,高);
如果(DHT.temperature > = temp + 8) digitalWrite(我、高);
如果(DHT.temperature > = temp + 9) digitalWrite (j、高);
如果(DHT.temperature > = temp + 10) digitalWrite (k,高);
如果(DHT.temperature > = temp + 11) digitalWrite (l,高);
延迟(2000);
goto刷新;
}
如果(ack = = 1)
{
//测试后可以删除。
系列。打印(没有数据);
并同时(“\ 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(我,1);
digitalWrite (j, 1);
digitalWrite (k, 1);
digitalWrite (l, 1);
刷新:
延迟(500);
digitalWrite (0);
digitalWrite (b, 0);
digitalWrite (c, 0);
digitalWrite (d, 0);
digitalWrite (e, 0);
digitalWrite (f (0);
digitalWrite (g, 0);
digitalWrite (h, 0);
digitalWrite (0);
digitalWrite (j, 0);
digitalWrite (k, 0);
digitalWrite (l, 0);
}
}
//-------由R.Girish开发的程序------//
注1:
在程序中:
int temp = 25;//设置温度范围。
将“25”替换为您在过去使用其他温度计时遇到的最低环境温度或预测的粗略值。
注2:请检查串行监视器和LED设置的温度读数。
2)使用DS18B20实现Arduino测温仪
在第二个设计中,我们学习了另一个简单,但非常精确的Arduino温度传感器与指示电路,使用先进的数字LCD显示读出模块。
实际上,这种配置没有太多可解释的地方,因为所有东西都是基于模块的,只需要通过提供的公母插座和连接器相互连接或插入。
硬件要求
构建这个精确的Arduino LCD温度表电路需要四种基本材料,具体研究如下:
1) Arduino UNO板
2)一个兼容的液晶模块
3)模拟温度传感器芯片,如DS18B20或我们自己的LM35集成电路.
DS18B20数字温度计
DS18B20的数字温度计确保9位至12位摄氏度温度规格,并带有非易失性消费者可编程高、低激活元件的报警功能。DS18B20通过单总线进行通信,根据描述,该总线需要与主微处理器连接的单数据线(和地线)。
它包括工作温度范围-55°C到+125°C,精确到±0.5°C超过-10°C到+85°C的分类。
与此同时,DS18B20可以直接从数据线获取能量(“寄生能量”),从而消除了必需的
rel= "nofollow“外部电源。
每个DS18B20都有一个独特的64位串行代码,允许多个DS18B20在同一总线上工作。因此,它是用户友好和简单的,只需一个微处理器来管理与ds18b20在广泛位置上发布的负载。
可以轻松利用这一属性的程序包括HVAC生态配置、设施、设备或工具内的温度监控设备以及过程监控和调节系统。
引出线的细节
4)一个9V, 1安培交流到直流适配器单元
现在只需将连接器彼此推入,通过LCD按钮做一点设置,你就可以得到一个完整的、精确的数字LCD温度计。
你可以用这个装置来测量室温,或者把传感器夹在任何需要监控的发热设备上,比如汽车发动机、孵卵箱、间歇泉,或者简单地检查功率放大器设备的散热情况。
如何连接Arduino温度表
下图显示了连接的设置,Arduino板在底部,LCD显示器插在上面,温度传感器与LCD板连接。
但是在实现上述设置之前,需要使用下面的示例代码对Arduino板进行编程。
OneWire ourWire (DS18B20);
DallasTemperature传感器(&ourWire);
液晶液晶(7,6,5,4,3,2);
字节degree_symbol [8] =
{
0 b00111,
0 b00101,
0 b00111,
0 b00000,
0 b00000,
0 b00000,
0 b00000,
0 b00000
};
无效的设置()
{
Serial.begin (9600);
延迟(1000);
sensor.begin ();
液晶显示器。开始(16日2);
液晶显示器。degree_symbol createChar(1日);
lcd.clear ();
lcd.setCursor (0,0);
液晶显示器。打印(“临时:”);
}
无效循环()
{
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 ? = LCD_KeyPad_Shield_For_Arduino_SKU: _DFR0009
你好,有可能得到你的联系方式或请给我一个电子邮件,我有一个发明,我需要与你讨论-ccjrokafor15@gmail.com
你好,你可以把它发送到admin (@) homeade-circuits.com
但如果这些讨论有趣的话,也可以成为这个网站的一部分。
海,
我是padmanaban,我在网上看到了很多有趣的项目,也给出了问题的解决方案。伟大和杰出的。
你能帮我解决一下我的电路问题吗,这里我附上了图表,问题是串行通信,
我使用atmega16, AVR Studio,通过usbapp程序员,avrdude.exe,这是代码:当我连接到电脑终端程序从单片机串行通信到电脑终端我得到95年,47 65而不是66 B终端,但在十进制;U即85,0 x55in十六进制,它正确地显示在hypertermial 85 -即U,
我尝试了8兆赫,4兆赫,16兆赫,14.7456兆赫外部晶体,
你能告诉我哪里做错了吗,
谢谢,
下面是我的Avr代码和电路图,
# include
# include
# include
# include
Void send_char (char ch);
Void mes2usart1 (char *ptr);
int主要(空白)
{
//初始化串口
sei ();
UCSRB = 0 x98;
UCSRC = 0 x06;
UBRRL = 103;/ / 9600 16兆赫
UBRRH = 0;
/ / UBRRL = 95;//9600 14.7456 //9600 bau // ubrrl = 51;// 9600 8mhz //UBRRL = 103;/ / 4800 8 mhz
/ / UBRRL = 51;// 9600 4mhz //UBRRL = 103;/ / 4800 4 mhz
而(1)
{
mes2usart1(“AB”);
/ / UDR = 0 x55;
_delay_ms (3000);
}
}
Void mes2usart1 (char *ptr)
{
而(* ptr)
send_char (* ptr + +);
}
ISR (USART_RXC_vect)
{
无符号字符tmp;
tmp = UDR;//获取通过串口接收的数据
UDR = tmp;//返回数据到串口
mes2usart1 (tmp);
}
Void send_char (char ch)
{
UDR = ch;
而(!(UCSRA & 0 x40));
UCSRA | = 0 x40;
}
GR先生会调查这个问题,并尽快为您解决
嗨padmanaban,
不幸的是,我没有AVR工作室的经验,我不能评论你的问题。
致以最亲切的问候。
你好,
我是一个学生做B-Tech机械项目,我设计一个抛物面太阳能追踪系统,但没有那么多知识arduino uno编码,有人曾经做过的项目需要帮助,请使用2步进电机,一个由四个异地恋,和另一个计时器。
需要帮助请
嘿,谢谢你的文章。太棒了。