Instructables
Picture of Wireless indoor & outdoor thermometer
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 analog sensor and receiving module.
 
Remove these adsRemove these ads by Signing Up

Step 1: Parts

Picture of Parts
Uno_Protoboard.jpg
LCD_Nano_Protoboard2.jpg
LCD_Nano_Protoboard.jpg
DSC02454.JPG
DS18B20.jpg
You need:

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

Step 2: Transmitter

Picture of Transmitter
DS18B20-pinout.JPG
DS18S20-hookup.png

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() {

sensors.begin();

vw_setup(2000);

vw_set_tx_pin(3);

}

void loop() {

sensors.requestTemperatures();

float temperature = sensors.getTempCByIndex(0);

dtostrf(temperature, 6, 2, msg);

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

vw_wait_tx();

delay(200);

}

Step 3: Receiver

Picture of 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>

  float temp;
  int tempPin = 0;
 
  int i;

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



void setup(){
 
  Serial.begin(9600);
  lcd.begin(16, 2);
 
  vw_setup(2000);
  vw_rx_start();
  vw_set_rx_pin(11);
}

void loop(){
 
  lcd.setCursor(0, 1);
  lcd.print("Indoor: ");
  lcd.print(temp);
  lcd.setCursor(14, 1);
  lcd.print((char)223);
  lcd.print("C");
 
  temp = analogRead(tempPin);
  temp = temp * 0.48828125;
 
 
  uint8_t buf[VW_MAX_MESSAGE_LEN];
  uint8_t buflen = VW_MAX_MESSAGE_LEN;

  if( vw_get_message(buf, &buflen) )
 
    {
            lcd.setCursor(0, 0);
            lcd.print("Outdoor:");    
           
      for (i = 0; i < buflen; i++)
       
        { 
            lcd.write(buf[i]);           
        }
       
            lcd.setCursor(14, 0);
            lcd.print((char)223);
            lcd.print("C");
     }
    
          }

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.

bsallade1 month ago

Hi,
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

nodoubtman3 months ago

What's the range of these RF devices??

in meters?

thanks!

marC:)

BruceC1 made it!3 months ago

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!!

BTW singhdeolji, if you are trying to convert a float to a string so you can send it as text, try the following.

float t = (your temperature value)

String temp = String((int)t);

IMG_2473.JPGIMG_2474.JPG

yup that worked, but i lost the decimal which considering float is 4 byte, and int is 2byte. There will be lost of data.
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 = "room1" + "floatvalue". and on the reciever side i can simple de-concatenate the string and kw the temp data is coming from room1.
Any simpler way of doing this?

singhdeolji3 months ago

in the transmitter code, could you please explain this line
dtostrf(temperature, 6, 2, msg);
I am trying to convert float to const char * what ever that is , as you can cast uint8_t * to const char *, OR
how do go about turning that float to uint8_t *
thx.

nodoubtman4 months ago

Hi! I only have the Indoor temperature on the display, i connected the sensor and the wireless

have an idea?

thanks!

marC:)

MisloElectronics (author)  nodoubtman4 months ago
Please check if you're copy virtualwire library in arduino library folder ;-)
yes i did.
But i cannot see outdoor temperature only : Outdoor ----

thank you!
marC:)
LiaAzman4 months ago

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?

MisloElectronics (author)  LiaAzman4 months ago
Please explain me in detail about your project.if you want replace this digital sensor DS18B20 with same waterproof model.


RahmanRahman6 months ago

Hi and thanks for your useful project.

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.

Best Regards.

MisloElectronics (author)  RahmanRahman6 months ago

I would definitely use a digital sensor DS18B20 because he is factory calibrated

acheide7 months ago

Thanks for the info, especially the information on inter-Arduino wireless.

sameerg7 months ago

Very nice instructable.

MisloElectronics (author)  sameerg7 months ago

Thanks

sgsax7 months ago

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.

MisloElectronics (author)  sgsax7 months ago

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 :)