在本文中,我们将构建几个简单的Arduino温度计电路,也可以用作LED房间温度计电路.
The circuit is designed to display the readings in doted/bar LEDs. This project can be implemented for applications where ambient temperature plays a crucial role or it could be built just as another fun project for your home.
1) Using DTH11 as the Temperature Sensor
The heart and brain of the first temperature meter project is DTH11 sensor and Arduino respectively. We are going to extract only the temperature data from the sensor.
The arduino will infer the data and refresh the displayed temperature every few seconds.
我们将采取12个决议temperature sensor, in other words, we are going to take the temperature range where the ambient temperature usually vary.
If you wish to add more resolution/LEDs, you will need arduino mega to take advantage of whole temperature spectrum of the sensor with modified program.
上面说明的布局可以最佳地寻找您的设置。
The user just needs to enter the minimum temperature range of the room. It can be a rough value, which can be later changed once full hardware setup is completed.
If the temperature range goes below the threshold value that user entered, no LED will glow and if the temperature goes beyond the maximum range (minimum + 11) all LED would glow.
If there are any sensor connectivity issues, all the LED will blink every second simultaneously.
The Design:
The Arduino LED temperature meter circuit wiring is very simple, a series of LED connected to GPIO pins ranging from 2 to 13 with current limiting resistors, and DHT11 sensor is plugged to analog I/O pins, which is programmed to give power supply to sensor as well as read data.
因此,您的LED温度计电路设置已完成并准备上传代码。始终建议在将其永久性之前测试面包板上的电路。
提示:使用不同的颜色LED表示不同的温度范围。您可以将蓝色LED用于较低的温度范围,绿色或黄色用于中温度范围,而红色LED则用于更高的温度。这将使更具吸引力。
作者的原型:
NOTE: The following program is only compatible with DHT11 sensor.
在进行操作之前,请确保下载以下链接:
https://arduino-info.wikispaces.com/file/detail/dht-lib.zip
Program Code:
// -------由R.Girish开发的程序------- //
#include
int a = 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; // set temperature range.
void setup()
{
Serial.begin(9600); // may be removed after testing.
pinmode(a,输出);
pinMode(b,OUTPUT);
pinMode(c,OUTPUT);
Pinmode(D,输出);
pinMode(e,OUTPUT);
pinmode(f,输出);
pinmode(g,输出);
pinMode(h,OUTPUT);
pinmode(i,输出);
pinMode(j,OUTPUT);
pinMode(k,OUTPUT);
pinMode(l,OUTPUT);
pinmode(p,输出);
pinMode(n,OUTPUT);
digitalWrite (p,HIGH);
digitalWrite (n,LOW);
}
void loop()
{
//可以在测试后删除。
Serial.print("Temperature(°C) = ");
Serial.println(DHT.temperature);
Serial.print("Humidity(%) = ");
Serial.println(DHT.humidity);
Serial.print("\n");
//till here
ack = 0;
int chk = DHT.Read11(data);
switch (chk)
{
case DHTLIB_ERROR_CONNECT:
ack = 1;
break;
}
如果(ack = = 0)
{
if(DHT.temperature>=temp)digitalWrite(a,HIGH);
if(DHT.temperature>=temp+1)digitalWrite(b,HIGH);
if(DHT.temperature>=temp+2)digitalWrite(c,HIGH);
if(DHT.temperature>=temp+3)digitalWrite(d,HIGH);
if(DHT.temperature>=temp+4)digitalWrite(e,HIGH);
if(DHT.temperature>=temp+5)digitalWrite(f,HIGH);
if(DHT.temperature>=temp+6)digitalWrite(g,HIGH);
if(DHT.temperature>=temp+7)digitalWrite(h,HIGH);
if(dht.temperature> = temp+8)digitalwrite(i,high);
if(dht.temperature> = temp+9)digitalwrite(j,high);
if(dht.temperature> = temp+10)digitalwrite(k,high);
if(dht.temperature> = temp+11)digitalwrite(l,高);
delay(2000);
goto refresh;
}
if (ack==1)
{
//测试后可能会删除这。
Serial.print("NO DATA");
Serial.print("\n\n");
//直到这里
delay(500);
DigitalWrite(A,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);
refresh:
delay(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开发的程序------- //
NOTE 1:
In the program:
int temp=25; // set temperature range.
Replace “25” with your minimum ambient temperature that you have encountered in past with other thermometers or predict a rough value.
注2:请验证串行显示器和LED设置的温度读数。
2)使用DS18B20的Arduino温度计
In this second design we learn another simple, yet extremely accurate Arduino temperature sensor with Indicator circuit, using an advanced digital LCD display readout module.
实际上,这种配置中没有太多解释,因为所有内容都是基于模块的,并且只需通过提供的男性插座和连接器互相连接或插入。
Hardware required
Four basic materials are required for constructing this accurate Arduino LCD temperature meter circuit, which may be studied as given under:
1) An Arduino UNO Board
2) A兼容的LCD模块
3) An analogue temperature sensor chip, such as a DS18B20 or our very ownLM35 IC.
DS18B20数字温度计规范
DS18B20digital thermometerassures a 9-bit to 12-bit Celsius temperature specifications and carries an alarm feature with non-volatile consumer programmable higher and lower activation elements. The DS18B20 communicates over a single Wire bus that by description demands a single data line (and ground) for connection with a main microprocessor.
它的工作温度范围为-55°C至 +125°C,在-10°C至 +85°C的分类中精确至0.5°C。
Along with this, the DS18B20 is enabled to acquire power straight from the data line (“parasite power”), disposing the necessity of an
rel=“nofollow" outside power supply.
每个DS18B20都带有独特的64位串行代码,允许多个DS18B20在同一1线总线上工作。因此,它仅是用户友好且简单的一个微处理器来管理与DS18B20相关的负载,该负载在广泛的位置上启动。
Programs that can easily take advantage from this attribute involve HVAC ecological configurations, temperature surveillance devices inside establishments, apparatus, or tools, and process supervising and regulation systems.
Pinout Details
4) A 9V, 1 amp AC to DC adapter unit
Now it's just about pushing in the connectors with each other, do a bit of setting through the LCD push buttons, and you get a full fledged, accurate digital LCD temperature meter at your disposal.
您可以使用此设置来测量室温,或使用需要监视的任何热量发射设备适当地夹紧传感器,例如汽车发动机,鸡蛋孵化器室,间歇泉,或者仅仅从功率放大器设备中检查散热器。
How to Hook Up the Arduino Temperature Meter
The following figure shows the connection set up, where the Arduino board is at the bottom, with the LCD monitor plugged in over it, and the temperature sensor hooked up with the LCD board.
But before you implement the above set up, you'll need to program the Arduino board with the following sample code.
Onewire Ourwire(DS18B20);
DallasTemperature sensor(&ourWire);
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
BYTE LEGE_SYMBOL [8] =
{
0b00111,
0b00101,
0b00111,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000
};
void setup()
{
Serial.begin(9600);
delay(1000);
sensor.begin();
lcd.Begin(16,2);
lcd.Createchar(1,Leger_symbol);
lcd.clear();
lcd.setcursor(0,0);
lcd.print("Temp: ");
}
void loop()
{
sensor.requestTemperatures();
serial.print(sensor.getTempcbyIndex(0));
serial.println(“°C”);
lcd.setCursor(7,0);
lcd.print(sensor.getTempCByIndex(0));
lcd.write(1);
lcd.print(“ c”);
delay(1000);
}
Courtesy: dfrobot.com/wiki/index.php?title=LCD_KeyPad_Shield_For_Arduino_SKU:_DFR0009
Hi there would it be possible to get your contact details or pls drop me an email, I have an invention i need to discuss with you –ccjrokafor15@gmail.com
嗨,您可以将其发送到Admin(@)自制circuits.com
but the discussions could become a part of this website if it is interesting.
Hai ,
我是帕德曼班(Padmanaban),我在网上看到了许多有趣的项目,并为问题提供了解决方案。伟大而杰出的。
您能帮我解决我的电路问题吗?
我一个m using atmega 16, AVR Studio, through usbapp programmer , avrdude.exe, this is the code: when i connect to the computer hyperterminal to see serial communication from microcontroller to PC terminal i am getting 95 , 47 instead 65 for A 66 for B on the terminal, BUT for U ie 85 in Decimal;, 0x55in Hex, it is showing correctly on hypertermial as 85 – ie U,
我尝试了8 MHz,4 MHz,16MHz,14.7456 MHz外部晶体,
你能帮我我做错的地方吗?
谢谢 ,
below is my Avr code and circuit diagram,
#include
#include
#include
#include
void send_char (char ch);
void mes2usart1 (char *ptr);
int main (void)
{
//初始化串行端口
sei();
UCSRB = 0x98;
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
while (1)
{
mes2usart1 ("AB");
// udr = 0x55;
_delay_ms(3000);
}
}
void mes2usart1 (char *ptr)
{
while (*ptr)
send_char (*ptr++);
}
ISR (USART_RXC_vect)
{
unsigned char tmp;
tmp = UDR; // get data received through serial port
udr = tmp;//将数据发送回串行端口
mes2usart1 ( tmp);
}
void send_char (char ch)
{
UDR = ch;
while(!(ucsra&0x40));
UCSRA |= 0x40;
}
Mr. GR, will look into the issue and will try to solve it for you soon
嗨,帕德马纳班,
Unfortunately,I have no experience with AVR studio, I can't comment on your issue.
此致。
Hi there,
I am a student doing my B-Tech Mechanical project where I a design a solar tracker system for a parabolic dish, but have not that much knowledge on arduino uno coding, has anyone here ever done project need help please, using 2 stepper motor, one controlled by four LDR, and the other one by a timer.
need help please
Hey, thanks for the article post. Fantastic.