Humidity and temperature monitoring systems are quite common in industries. These environmental factors require constant supervision to maintain the reliability and efficiency of industrial devices. Monitoring systems used in industries are generally connected where the sensor unit and sensor monitoring system connect through a cable. Humidity and temperature monitoring systems can be done wirelessly using 434 RF modules. With wireless connectivity, sensor and monitoring systems can be installed separately and industrial equipment can be supervised remotely. Furthermore, the cost of extensive cable installation is also saved.
RF 434 modules have an operating range of 50-60 meters and can be extended to 300-350 meters using an antenna and increasing transmit power. Therefore, RF modules connected to the antenna can be easily installed anywhere and can realize wireless data communication with an impressive range. (Even a Wi-Fi router has a range limited to 150 feet indoors and 300 feet outdoors).
This project uses a DHT11 humidity and temperature sensor and is built on the Arduino Pro Mini. RF modules interface directly with Arduino boards for wireless implementation. Sensor readings are displayed on a 16X2 LCD screen.
Required components
| Mr. No. | Required components | Amount |
|---|---|---|
| 1. | RF Rx Module (434 MHz) | 1 |
| two | RF Tx Module (434Mhz) | 1 |
| 3 | Arduino for mini | two |
| 4 | DHT11 | 1 |
| 5 | LCD | 1 |
| 6 | Battery – 9V | two |
| 7 | Test board | two |
| 8 | Connecting wires |

Fig. 1: Arduino based wireless temperature and humidity monitor block diagram
Circuit Connections
There are two circuits in the project – a) Temperature and humidity sensor circuit and b) Sensor reading display circuit. In the sensor circuit, the data pin (pin 2) of the DHT11 sensor is connected to the analog pin A2 of the Arduino Pro Mini. The VCC (Pin 1) and Ground (Pin 4) pins are connected to VCC and ground respectively. An RF transmitter interfaces with the Arduino board with its serial input pin (pin 2) connected to pin 12 of the Arduino board. An antenna is connected to pin 4 of the transmitter for range extension.
In the display circuit, an RF receiver is connected to another Arduino Pro Mini with serial output pin (pin 2) of the receiver connected to pin 11 of the Arduino. An antenna is connected to pin 8 of the receiver for range extension. An LCD is connected to the Arduino board to display temperature and humidity readings. The 16X2 LCD display is connected to the Arduino board by connecting its data pins to pins 7 to 4 of the Arduino board. The RS and E pins of the LCD are connected to pins 3 and 2 of the Arduino Pro Mini, respectively. LCD RW pin is grounded.

Fig. 2: Table listing circuit connections between Character LCD and Arduino Uno
The standard code library for interfacing Arduino UNO and Arduino Pro Mini is used in the project to program the LCD with the board.
How the circuit works
The DHT11 Temperature and Humidity Sensor is a digital sensor with a built-in capacitive humidity sensor and thermistor. It transmits a real-time temperature and humidity reading every 2 seconds. The sensor operates on a 3.5 to 5.5 V power supply and can read temperature readings between 0° C and 50° C and relative humidity between 20% and 95%.

Fig. 3: Wireless Humidity and Temperature Monitor Prototype
The sensor cannot be connected directly to a digital pin on the board, as it operates on the 1-wire protocol that must be implemented in the firmware. First, the data pin is configured for input and a start signal is sent to it. The start signal comprises a LOW for 18 milliseconds followed by a HIGH for 20 to 40 microseconds followed by a LOW again for 80 microseconds and a HIGH for 80 microseconds.
After sending the start signal, the pin is configured for digital output and the 40-bit data consisting of temperature and humidity reading is locked. Of the 5-byte data, the first two bytes are the integer and decimal part of the relative humidity reading respectively, the third and fourth bytes are the integer and decimal part of the temperature reading, and the last is the checksum byte . When interfacing the DHT11 with Arduino, a code library is already available and the sensor data can be read by the read11 function of the DHT class.

Fig. 4: Image showing the Arduino used in the wireless humidity and temperature monitor
In the sensor circuit, temperature and relative humidity readings are first obtained by Arduino and their character representation is stored in separate arrays. The character buffer is transmitted serially into the RF using Arduino's VirtualWire library. Check out the Arduino program code on the transmitter side to know how Arduino gets the sensor value and stores them in arrays for RF transmission.
In the display circuit, the character representation of the sensor readings is detected by the RF receiver and passed serially to the receiver-side Arduino board. The program code on the receiver-side Arduino board reads the character buffer and converts it to integer format for display on the LCD. Standard LCD library functions are used to display readings on the LCD. Check out the Arduino code on the receiver side to see how sensor values are read into the buffer and converted into a format suitable for display on the LCD screen.
Programming guide
On the Arduino transmitter side, first, the program code imports the necessary standard libraries. The VirtualWire library is required to connect to the RF module and the DHT library is required to interface the DHT11 sensor. A “DHT” object is instantiated. The ledPin and Sensor1Pin global variables are declared and mapped to pin 13 where the transmission progress indicator LED is connected and pin A2 where the DHT11 temperature and humidity sensor data pin is connected respectively. A variable Sensor1Data is declared to store the sensor reading, and character type arrays Sensor1CharMsg and Sensor1CharMsg1 are declared to store a decimal representation of the relative humidity and temperature reading.
#includeA setup function is called where the LED indicator pin is set to output while the pin connected to the sensor is set to input mode using the pinMode function. The Arduino baud rate is set to 9600 bits per second using the serial.begin function. Initial messages are sent to the buffer using the Serial.Println function. The baud rate for serial output is set to 2000 bits per second using the vw_setup function of the VirtualWire library.
A loop function is called where the DHT11 sensor reading is read using the read11 function in the DHT object and the decimal base character representation of the humidity reading is stored in the Sensor1CharMsg array and the decimal base character representation of the temperature reading is stored in the Sensor1CharMsg1 array.
Sensor readings are serially output as human-readable ASCII text using the Serial.print and Serial.println functions.
The transmission progress indicator LED is turned on by passing a HIGH to pin 13. The character message containing the temperature and humidity reading is sent serially using the vw_send function and vw_wait_tx is used to block transmission until a new message is available for transmission. The LED on pin 13 is turned off by passing a LOW to indicate successful transmission of the message.
This ends the Arduino code on the transmitter side.
On the receiver side Arduino, the program code first imports the required standard libraries. LiquidCrystal.h is imported to interface with the LCD and the VirtualWire library is imported to read the serial input from the RF receiver. Pins 2 to 7 are mapped to the LCD of the liquid crystal object.
Pin 13 where transmission progress indicator LED is connected is assigned to ledpin variable and two variables – “Sensor1Data” and “Sensor2Data” to capture DHT11 reading in integer format and “Sensor1CharMsg1” and “Sensor1CharMsg2” arrays for store the character representation of the reads are declared. There are counter variables “i” and “j” also declared.
A setup function is called where the Arduino baud rate is set to 9600 bits per second using the Serial.begin function. The LCD object is initialized in 16X2 mode. The pin connected to the led and the pin connected to RS and RW are set to output mode using the pinMode function.
A loop function is called within which the “buf” array to read the serial buffer and the “buflen” variable to store the buffer length are declared. Counter variables are initialized to zero.
Character buffering is detected using the vw_get_message function; if present, a counter “i” is initialized. The buffer readings are first stored in the RxAray array using the for loop with the counter initialized and after detecting the null character, the temperature and humidity sensor readings entered into the RxAray are stored separately in the “SensorCharMsg1″ and ”SensorCharMsg2″ arrays.
The variable value along with the relevant strings included is passed to the microcontroller buffer and passed to the LCD for display in a presentable format.
This ends the loop function and the Arduino code on the receiver side.
Project source code
###
#include#include #define dht_dpin A0 //no ; here. Set equal to channel sensor is on dht DHT; // LED's const int ledPin = 13; // Sensors const int Sensor1Pin = A2; int Sensor1Data; char Sensor1CharMsg(4); char Sensor1CharMsg1(4); void setup { // PinModes //LED pinMode(ledPin,OUTPUT); // Sensor(s) pinMode(Sensor1Pin,INPUT); Serial.begin(9600); delay(300);//Let system settle Serial.println("Humidity and temperaturenn"); delay(700); // VirtualWire setup vw_setup(2000); // Bits per sec } void loop { // Read and store Sensor 1 data // Sensor1Data = analogRead(Sensor1Pin); DHT.read11(dht_dpin); // Convert integer data to Char array directly itoa(DHT.humidity,Sensor1CharMsg,10); itoa(DHT.temperature,Sensor1CharMsg1,10); The sensor readings are serially out as human-readable ASCII text using the Serial.print and Serial.println function. // DEBUG Serial.print("Current humidity = "); Serial.print(DHT.humidity); Serial.print("% "); Serial.print("temperature = "); Serial.print(DHT.temperature); Serial.println("C "); delay(800); // END DEBUG digitalWrite(13, true); // Turn on a light to show transmitting vw_send((uint8_t *)Sensor1CharMsg, strlen(Sensor1CharMsg)); vw_wait_tx ; // Wait until the entire message is gone delay(200); vw_send((uint8_t *)Sensor1CharMsg1, strlen(Sensor1CharMsg1)); vw_wait_tx ; // Wait until the entire message is gone digitalWrite(13, false); // Turn off a light after transmission delay(200); } // END void loop... #include #include LiquidCrystal LCD(2, 3, 4, 5, 6, 7); // LED's int ledPin = 13; // Sensors int Sensor1Data; int Sensor2Data; // RF Transmission container char SensorCharMsg1(4); char rxAray(8); char SensorCharMsg2(4); int j,k; void setup { Serial.begin(9600); lcd.begin(16, 2); // sets the digital pin as output pinMode(ledPin, OUTPUT); pinMode(9, OUTPUT); pinMode(8, OUTPUT); //VirtualWire // Initialize the IO and ISR // Required for DR3100 vw_set_ptt_inverted(true); // Bits per sec vw_setup(2000); // Start the receiver PLL running vw_rx_start ; } // END void setup void loop { uint8_t buf(VW_MAX_MESSAGE_LEN); uint8_t buflen = VW_MAX_MESSAGE_LEN; j = 0; k = 0; // Non-blocking if (vw_get_message(buf, &buflen)) { int i; // Message with a good checksum received, dump it. for (i = 0; i < buflen; i++) { // Fill Sensor1CharMsg Char array with corresponding // chars from buffer. rxAray(i) = char(buf(i)); } rxAray(buflen) = ''; while( j < 2) { SensorCharMsg1(j++) = rxAray(j++); } while( j < 4) { SensorCharMsg2(k++) = rxAray(j++); } // DEBUG Serial.print(" hum = "); Serial.println(SensorCharMsg1); Serial.print(" temp = "); Serial.println(SensorCharMsg2); lcd.setCursor(0,0); lcd.print("Humidity = "); lcd.print(SensorCharMsg1); // change the analog out value: lcd.setCursor(0,1 ); lcd.print("Temparature = "); lcd.print(SensorCharMsg2); // END DEBUG } } ###
Circuit diagrams
| Project-23-Circuit Diagram | ![]() |
Project video
