Raspberry Pi - Heating System

This tutorial instructs you how to use Raspberry Pi, heating element and DS18B20 temperature sensor to regulate the room temperature.

Additionally, the code can be adapted for other temperature sensors such as DHT11 or DHT22, LM35 in place of the DS18B20 sensor.

Hardware Preparation

1×Raspberry Pi 4 Model B
1×DS18B20 Temperature Sensor (WITH Adapter)
1×DS18B20 Temperature Sensor (WITHOUT Adapter)
1×4.7 kΩ resistor
1×Relay
1×Heating Element
1×12V Power Adapter
1×DC Power Jack
1×Jumper Wires
1×(Optional) Screw Terminal Adapter for Raspberry Pi

Or you can buy the following sensor kit:

1×DIYables Sensor Kit 30 types, 69 units
Disclosure: Some of the links provided in this section are Amazon affiliate links. We may receive a commission for any purchases made through these links at no additional cost to you. We appreciate your support.

Buy Note: Many DS18B20 sensors available in the market are unreliable. We strongly recommend buying the sensor from the DIYables brand using the link provided above. We tested it, and it worked reliably.

Overview of Heating Element and DS18B20 Temperature Sensor

The heating element used in this tutorial requires a 12v power supply. When power is supplied to the heating element, it will generate heat. To be able to control the heating element with a Raspberry Pi, a relay needs to be inserted between them.

If you are unfamiliar with temperature sensors and heating elements (pinouts, how they work, how to program them, etc.), the following tutorials can help:

Wiring Diagram

The wiring diagram between Raspberry Pi and heating system

This image is created using Fritzing. Click to enlarge image

How System Works

  • Raspberry Pi obtains the temperature from the temperature sensor.
  • If the temperature drops below a certain lower limit, Raspberry Pi activates the heating elements.
  • When the temperature exceeds a certain upper limit, Raspberry Pi deactivates the heating element.

The loop is repeated endlessly.

Raspberry Pi Code for Cooling System with DS18B20 sensor

In the code above, when the temperature drops below 15°C, the Raspberry Pi will activate the heating element. It will remain active until the temperature rises above 20°C.

Detailed Instructions

  • Make sure you have Raspbian or any other Raspberry Pi compatible operating system installed on your Pi.
  • Make sure your Raspberry Pi is connected to the same local network as your PC.
  • Make sure your Raspberry Pi is connected to the internet if you need to install some libraries.
  • If this is the first time you use Raspberry Pi, See how to set up the Raspberry Pi
  • Connect your PC to the Raspberry Pi via SSH using the built-in SSH client on Linux and macOS or PuTTY on Windows. See to how connect your PC to Raspberry Pi via SSH.
  • Make sure you have the RPi.GPIO library installed. If not, install it using the following command:
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Prior to utilizing the DS18B20 temperature sensor with a Raspberry Pi, we need to enable 1-Wire interface on Raspberry Pi. See How to enable 1-Wire interface on Raspberry Pi
  • Install the library for DS18B20 temperature sensor by running the following command:
pip install w1thermsensor
  • Create a Python script file heating.py and add the following code:
# This Raspberry Pi code was developed by newbiely.com # This Raspberry Pi code is made available for public use without any restriction # For comprehensive instructions and wiring diagrams, please visit: # https://newbiely.com/tutorials/raspberry-pi/raspberry-pi-heating-system from w1thermsensor import W1ThermSensor import RPi.GPIO as GPIO import time # Constants THRESHOLD_OFF = 20 # Upper threshold of temperature, change to your desired value THRESHOLD_ON = 15 # Lower threshold of temperature, change to your desired value RELAY_PIN = 21 # GPIO pin connected to the relay module, change to your desired GPIO pin # Setup GPIO.setmode(GPIO.BCM) GPIO.setup(RELAY_PIN, GPIO.OUT) def find_ds18b20_sensor(): for sensor in W1ThermSensor.get_available_sensors(): if sensor.type == W1ThermSensor.THERM_SENSOR_DS18B20: return sensor return None def read_temperature(sensor): try: temperature_celsius = sensor.get_temperature() return temperature_celsius except Exception as e: print(f"Error reading temperature: {e}") return None # Find DS18B20 sensor ds18b20_sensor = find_ds18b20_sensor() if ds18b20_sensor is not None: print(f"DS18B20 Sensor found: {ds18b20_sensor.id}") try: while True: temperature = read_temperature(ds18b20_sensor) if temperature is not None: if temperature > THRESHOLD_OFF: print("The heating element is turned off") GPIO.output(RELAY_PIN, GPIO.LOW) # turn off elif temperature < THRESHOLD_ON: print("The heating element is turned on") GPIO.output(RELAY_PIN, GPIO.HIGH) # turn on time.sleep(0.5) except KeyboardInterrupt: pass finally: GPIO.cleanup() else: print("DS18B20 Sensor not found.")
  • Save the file and run the Python script by executing the following command in the terminal:
python3 heating.py

The script runs in an infinite loop continuously until you press Ctrl + C in the terminal.

  • Change the temperature of the area surrounding the sensor.
  • Check out the temperature of the heating element and the room.

Advanced Knowledge

The above technique for controlling is the on-off controller, which is also referred to as a signaller or "bang-bang" controller. This method is quite easy to put into practice.

An alternative approach known as the PID controller exists. This method of temperature control is more stable, however it is complicated and not widely used. Consequently, the PID controller is not a popular choice for temperature regulation.