I would like to introduce you to one of my interesting projects. It is a wireless thermometer that measures the indoor and outdoor temperature. The device consists of two parts. One is a transmitter that contains one digital temperature sensor and a transmitter module. A second receiver consisting of an LCD screen, the digital sensor and receiving module.

Step 1: Parts

You need:

1. Two arduinos any version
2. Two DS18B20 digital temperature sensor
4. LCD 16x2
5: RF 433MHz or 315 MHz module

Step 2: Transmitter

Transmitter is very simple. Connect the wires as shown in pictures.

Here is transmitter code:

#include <VirtualWire.h>
#include <OneWire.h>

#include <DallasTemperature.h>

#define ONE_WIRE_BUS 7

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

char msg[6];

void setup() {





void loop() {


float temperature = sensors.getTempCByIndex(0);

dtostrf(temperature, 6, 2, msg);

vw_send((uint8_t *)msg, strlen(msg));




Step 3: Receiver

Receiver is a little more complicated than the transmitter. Connect the wires as shown in pictures.

Here is the code for receiver:


#include <LiquidCrystal.h>

#include <VirtualWire.h>

#include <OneWire.h>

#include <DallasTemperature.h>

int i;

LiquidCrystal lcd(12, 10, 5, 4, 3, 2);

#define ONE_WIRE_BUS 7

OneWire ourWire(ONE_WIRE_BUS);
DallasTemperature sensors(&ourWire);

void setup(){

lcd.begin(16, 2);






void loop(){


lcd.setCursor(0, 1);


lcd.setCursor(14, 1);


lcd.setCursor(9, 1);



uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;

if( vw_get_message(buf, &buflen) )

lcd.setCursor(0, 0);


for (i = 0; i < buflen; i++)



lcd.setCursor(14, 0);





Step 4: Library

For this project you need three types of libraries. Two for digital sensor and the other for RF module. In the link below have all the files needed for this project.

<p>Please help me, how to replace in your script Liquid Crystal library to OLedI2C library?</p><p>-------------------------------------------------------<br><br>#include &lt;OneWire.h&gt;</p><p>#include &lt;DallasTemperature.h&gt;</p><p>#include &quot;Wire.h&quot;<br>#include &quot;OLedI2C.h&quot;<br><br>#define ONE_WIRE_BUS 7<br>OLedI2C LCD;<br>char line[5];<br>float val = 0;<br>// Setup a oneWire instance to communicate with any OneWire devices<br>OneWire oneWire(ONE_WIRE_BUS);<br>// Pass our oneWire reference to Dallas Temperature.<br>DallasTemperature sensors(&amp;oneWire);<br><br>void setup()<br><br>{<br>Serial.begin(9600);<br>// Start up the library<br>sensors.begin();<br>Wire.begin();<br>LCD.init();<br><br>}<br><br><br>void loop()<br>{<br>sensors.requestTemperatures();<br>float val = sensors.getTempCByIndex(0) ;<br>LCD.sendString(&quot;Home:&quot;,2,0);// now includes the cursor position data (col, row)<br>dtostrf(val,4,1,line);//Convert the float value to string<br>LCD.sendString(line,9,0);//Send the string to the display<br>delay(0);<br>LCD.sendString(&quot;C&quot;,14,0);<br>} </p><p>---------------------------------------------------------<br>Or how to add in this script the data of RF-module ?</p>
<p>alarm 80 C led Pin 4</p>
<p>works fine </p><p>start with little trouble to connect the right wire's </p>
<p>Great Instructable. I made this in a few hours using these instructions and everything worked great. This was my first real RF project. I substituted DHT11 sensors so I could get humidity (and I already had them). Thanks!!</p><p>BTW <strong><em>singhdeolji</em></strong>, if you are trying to convert a float to a string so you can send it as text, try the following. </p><p>float t = (your temperature value)</p><p>String temp = String((int)t);</p>
<p>Hi <a href="https://www.instructables.com/member/BruceC1" rel="nofollow">BruceC1</a> good project its interested me , my i have the code please ?</p>
<p>yup that worked, but i lost the decimal which considering float is 4 byte, and int is 2byte. There will be lost of data.<br>I am using multiple ds18b20's wireless so i want to know which one the data is coming from. So i was thinking, if i can convert the float to string then i can concatenation a key like string s = &quot;room1&quot; + &quot;floatvalue&quot;. and on the reciever side i can simple de-concatenate the string and kw the temp data is coming from room1.<br>Any simpler way of doing this?</p>
<p>if you use dht 11 or dht 22 i have code for you :)</p>
I'd be interested in this code
<p>This are the pics of my circuit, I follow your steps, but it is not clear how you wired the LCD to the circuit. </p><p>Also, there is a confuse in the transmitter circuit, because you used two temp sensor (LM335az) on both TX and RX circuit. Can you please check my connection and tell me if I am right or not . </p><p>Show me how I connect the temp sensor and the LCD please !</p>
<p>what is the parts on the receiver circuit that connected by the yellow wire ?</p><p>Also, How you said that you use two aurdino. </p><p>I see one on the transmitter and the nano ordain on the receiver ? </p><p>I am right or not</p><p>PLEASE HELP ME THROUGH IT </p>
<p>part of which is connected to the yellow wire is 10K ohm potentiometer for contrast LCD.if one arduino on the receiver and if the one on the transmitter then it is a total of two</p>
<p>Good job I need your help please on this project </p>
<p>this is transmitter code error</p><p>This report would have more information with<br> &quot;Show verbose output during compilation&quot;<br> enabled in File &gt; Preferences.<br>Arduino: 1.0.6 (Windows 7), Board: &quot;Arduino Nano w/ ATmega328&quot;<br>In file included from transmitter_temp.ino:3:<br>C:\Users\Dunk\Documents\Arduino\libraries\VirtualWire/VirtualWire.h:54: error: variable or field 'vw_set_tx_pin' declared void<br>C:\Users\Dunk\Documents\Arduino\libraries\VirtualWire/VirtualWire.h:54: error: 'uint8_t' was not declared in this scope<br>C:\Users\Dunk\Documents\Arduino\libraries\VirtualWire/VirtualWire.h:58: error: variable or field 'vw_set_rx_pin' declared void<br>C:\Users\Dunk\Documents\Arduino\libraries\VirtualWire/VirtualWire.h:58: error: 'uint8_t' was not declared in this scope<br>C:\Users\Dunk\Documents\Arduino\libraries\VirtualWire/VirtualWire.h:62: error: variable or field 'vw_set_ptt_pin' declared void<br>C:\Users\Dunk\Documents\Arduino\libraries\VirtualWire/VirtualWire.h:62: error: 'uint8_t' was not declared in this scope<br>C:\Users\Dunk\Documents\Arduino\libraries\VirtualWire/VirtualWire.h:66: error: variable or field 'vw_set_ptt_inverted' declared void<br>C:\Users\Dunk\Documents\Arduino\libraries\VirtualWire/VirtualWire.h:66: error: 'uint8_t' was not declared in this scope<br>C:\Users\Dunk\Documents\Arduino\libraries\VirtualWire/VirtualWire.h:71: error: variable or field 'vw_setup' declared void<br>C:\Users\Dunk\Documents\Arduino\libraries\VirtualWire/VirtualWire.h:71: error: 'uint16_t' was not declared in this scope<br>C:\Users\Dunk\Documents\Arduino\libraries\VirtualWire/VirtualWire.h:90: error: 'uint8_t' does not name a type<br>C:\Users\Dunk\Documents\Arduino\libraries\VirtualWire/VirtualWire.h:96: error: 'uint8_t' does not name a type<br>C:\Users\Dunk\Documents\Arduino\libraries\VirtualWire/VirtualWire.h:99: error: 'uint8_t' does not name a type<br>C:\Users\Dunk\Documents\Arduino\libraries\VirtualWire/VirtualWire.h:104: error: 'uint8_t' does not name a type<br>transmitter_temp.ino: In function 'void setup()':<br>transmitter_temp:24: error: 'vw_setup' was not declared in this scope<br>transmitter_temp:26: error: 'vw_set_tx_pin' was not declared in this scope<br>transmitter_temp.ino: In function 'void loop()':<br>transmitter_temp:38: error: 'vw_send' was not declared in this scope</p>
<p>code not work,witch ide do i use,this is errors.</p><p>receiver code</p><p>This report would have more information with<br> &quot;Show verbose output during compilation&quot;<br> enabled in File &gt; Preferences.<br>Arduino: 1.0.6 (Windows 7), Board: &quot;Arduino Nano w/ ATmega328&quot;<br>receiver_temp:3: error: 'Here' does not name a type<br>receiver_temp:14: error: 'LiquidCrystal' does not name a type<br>receiver_temp.ino: In function 'void setup()':<br>receiver_temp:21: error: 'lcd' was not declared in this scope<br>receiver_temp.ino: In function 'void loop()':<br>receiver_temp:30: error: 'lcd' was not declared in this scope</p>
<p>hi ive coppy librarys etc and ime getting errors,what version of ide do i use ive tryed them all.thanks</p>
<p>add DS1302 RTC and LCD 20x4 + serial adapter</p>
<p>Hi, could you please post the code to use the DS18B20 for the receiver indoor temp instead of the lm35.</p><p>Many thanks </p>
<p>Not to worry, I have figured it out :)</p>
<p>can you post this code here please? </p>
<p>ante nije fora trebao si sam malo promozgati u tome i je stvar mogao sam ja odma ovako napraviti.to je bilo namjerno hehe :)</p>
<p>//Credit to - www.facebook.com/njizi.dvizi</p><p>//added DS18b20</p><p>#include &lt;LiquidCrystal.h&gt;</p><p>#include &lt;VirtualWire.h&gt;</p><p>#include &lt;OneWire.h&gt;</p><p>#include &lt;DallasTemperature.h&gt;</p><p>#define ONE_WIRE_BUS 7</p><p>OneWire oneWire(ONE_WIRE_BUS);</p><p>DallasTemperature sensors(&amp;oneWire);</p><p> int i;</p><p> LiquidCrystal lcd(12, 10, 5, 4, 3, 2);</p><p>void setup(){</p><p> sensors.begin();</p><p> Serial.begin(9600);</p><p> lcd.begin(16, 2);</p><p> vw_setup(2000);</p><p> vw_rx_start();</p><p> vw_set_rx_pin(11);</p><p>}</p><p>void loop(){</p><p> lcd.setCursor(0, 1);</p><p> lcd.print(&quot;Indoor: &quot;);</p><p> sensors.requestTemperatures();</p><p> lcd.print(sensors.getTempCByIndex(0));</p><p> lcd.setCursor(14, 1);</p><p> lcd.print((char)223);</p><p> lcd.print(&quot;C&quot;);</p><p> uint8_t buf[VW_MAX_MESSAGE_LEN];</p><p> uint8_t buflen = VW_MAX_MESSAGE_LEN;</p><p> if( vw_get_message(buf, &amp;buflen) )</p><p> {</p><p> lcd.setCursor(0, 0);</p><p> lcd.print(&quot;Outdoor:&quot;); </p><p> for (i = 0; i &lt; buflen; i++)</p><p> { </p><p> lcd.write(buf[i]); </p><p> }</p><p> lcd.setCursor(14, 0);</p><p> lcd.print((char)223);</p><p> lcd.print(&quot;C&quot;);</p><p> }</p><p> }</p>
<p>hehe :)</p>
<p>I'm not sure if its 100% correct but seems to be working</p>
<p>thank you very much</p>
<p>What's the range of these RF devices??</p><p>in meters?</p><p>thanks!</p><p>marC:)</p>
It's around 90 meters
<p>Hi, <br>I was wondering if it would be possible to use an adrino to receive the data from my Accurite pro weather center and convert that to video and tables so that it shows up on my pc. I would have to use a ethernet connection of course but it seems like it is do-able. The Accurite operates wireless on 433 Mhz</p>
<p>in the transmitter code, could you please explain this line <br>dtostrf(temperature, 6, 2, msg);<br>I am trying to convert float to const char * what ever that is , as you can cast uint8_t * to const char *, OR<br>how do go about turning that float to uint8_t * <br>thx.<br></p>
<p>Hi! I only have the Indoor temperature on the display, i connected the sensor and the wireless</p><p>have an idea?</p><p>thanks!</p><p>marC:)</p>
Please check if you're copy virtualwire library in arduino library folder ;-)
yes i did. <br>But i cannot see outdoor temperature only : Outdoor ----<br><br>thank you!<br>marC:)
<p>hi.. this is great project..by the way, currently doing my final year project on wireless digital body thermometer with long continuous. do you have any idea about it?</p>
Please explain me in detail about your project.if you want replace this digital sensor DS18B20 with same waterproof model.<br><br><br>
<p>Hi and thanks for your useful project.</p><p>I have a temperature control project that needs to have an accuracy of 0.05 degrees and I need a sensor for it, Please guide me.</p><p>Best Regards.</p>
<p>I would definitely use a digital sensor DS18B20 because he is factory calibrated</p>
<p>Thanks for the info, especially the information on inter-Arduino wireless.</p>
<p>Very nice instructable.</p>
<p>Very cool little project. Looks like a perfect one for me to play with the new bunch of Arduinos I just got. Just curious why you picked a digital temp sensor for one module and analog for the other. It looks like you still had digital pins available. Was that just what you had or was there another design consideration I missed? Thanks.</p>
<p>I have compiled a device and chose the parts that I had available. I also have a another version of code that I made where I use a digital sensor DS18B20 on the transmitter and the receiver :)</p>

About This Instructable




Bio: My hobby is electronics since childhood. I'm interested in Arduino, programming, drawing PCB in Eagle and solder the connections.....
More by MisloElectronics:Attiny85 5110LCD DS18B20 Thermometer Rotary Encoder LED Strip Brightness Controller Wireless PIR Sensor Alarm 
Add instructable to: