Adafruit's Raspberry Pi Lesson 11. DS18B20 Temperature Sensing



Similar documents
Adafruit's Raspberry Pi Lesson 9. Controlling a DC Motor

Arduino Lesson 13. DC Motors. Created by Simon Monk

Playing sounds and using buttons with Raspberry Pi

Arduino Lesson 14. Servo Motors

Arduino Lesson 9. Sensing Light

Adafruit's Raspberry Pi Lesson 5. Using a Console Cable

Arduino Lesson 0. Getting Started

Adafruit's Raspberry Pi Lesson 5. Using a Console Cable

Adafruit's Raspberry Pi Lesson 5. Using a Console Cable. Created by Simon Monk

Arduino Lesson 17. Sending Movement Detector

Arduino Lesson 16. Stepper Motors

Adafruit's Raspberry Pi Lesson 6. Using SSH

Adafruit's Raspberry Pi Lesson 7. Remote Control with VNC

SSH to BeagleBone Black over USB

Adafruit MCP9808 Precision I2C Temperature Sensor Guide

Adafruit's Raspberry Pi Lesson 1. Preparing an SD Card for your Raspberry Pi

Adding a Real Time Clock to Raspberry Pi

Setting up a Raspberry Pi as a WiFi access point

Monitor Your Home With the Raspberry Pi B+

Arduino Lesson 1. Blink

Adafruit NFC/RFID on Raspberry Pi

Adafruit's Raspberry Pi Lesson 3. Network Setup

Character LCDs. Created by Ladyada. Last updated on :45:29 PM EDT

Thermistor. Created by Ladyada. Last updated on :30:46 PM EDT

Arduino Lesson 4. Eight LEDs and a Shift Register

Using an IR Remote with a Raspberry Pi Media Center

Matrix and 7-Segment LED Backpack with the Raspberry Pi

Drive a 16x2 LCD with the Raspberry Pi

Raspberry Pi Setup Tutorial

Raspberry Pi Adding a Real Time Clock (RTC)

How To Connect A Raspberry Pi To The Internet On A Microsoft Moonstone 2 (Microsoft) Microsoft Powerbook 2 (Powerbook 2) (Powerboard 2) And Powerbook 3 (Powerstation 2)

PiFace Control & Display

5inch HDMI LCD User Manual

7/Basic Input and Output

Arduino Lesson 5. The Serial Monitor

CPSC 226 Lab Nine Fall 2015

Adafruit SHT31-D Temperature & Humidity Sensor Breakout

Adafruit BME280 Humidity + Barometric Pressure + Temperature Sensor Breakout

MCP4725 Digital to Analog Converter Hookup Guide

TSL2561 Luminosity Sensor

UniPi technical documentation REV 1.1

Bluefruit LE Python Library

Your Multimeter. The Arduino Uno 10/1/2012. Using Your Arduino, Breadboard and Multimeter. EAS 199A Fall Work in teams of two!

USER MANUAL V5.0 ST100

Capacitive Touch Sensor Project:

Raspberry Pi radio player with touchscreen

For Raspberry Pi - Getting started Connect to the real world in minutes, with the most popular interface board for Raspberry Pi.

Beginner s Guide to the PI MATRIX. by Bruce E. Hall, W8BH 1) INTRODUCTION

Setting up IO Python Library on BeagleBone Black

A REST API for Arduino & the CC3000 WiFi Chip

TEECES DOME LIGHTING SYSTEMS

Microstack Accelerometer Getting started

RGB LED Strips. Created by lady ada. Last updated on :00:18 PM EST

Install bluez on the Raspberry Pi

Bob Rathbone Computer Consultancy

Adafruit NFC/RFID on Raspberry Pi. Created by Kevin Townsend

PHYS 2P32 Project: MIDI for Arduino/ 8 Note Keyboard

Digital Raspberry Pi temperature and humidity (& pressure) logger/webserver

cs281: Introduction to Computer Systems Lab08 Interrupt Handling and Stepper Motor Controller

Animated Lighting Software Overview

UPS PIco. to be used with. Raspberry Pi B+, A+, B, and A. HAT Compliant. Raspberry Pi is a trademark of the Raspberry Pi Foundation

How to connect to a Class II router using a mobile-phone data cable specifically for Solwise & Safecom routers

Eric Mitchell April 2, 2012 Application Note: Control of a 180 Servo Motor with Arduino UNO Development Board

Preparing Raspberry Pi

WebIOPi. Installation Walk-through Macros

PhidgetInterfaceKit 8/8/8

2.2" TFT Display. Created by Ladyada. Last updated on :15:09 PM EDT

Using pcduino's WiFi Dongle With the Pi a

RGB for ZX Spectrum 128, +2, +2A, +3

Surveillance System Using Wireless Sensor Networks

DS1307 Real Time Clock Breakout Board Kit

Intro to Intel Galileo - IoT Apps GERARDO CARMONA

Making a DB to RJ45 adapter.

Raspberry Pi Kernel-o-Matic

ABB Drives. User s Manual HTL Encoder Interface FEN-31

LOCKSS on LINUX. Installation Manual and the OpenBSD Transition 02/17/2011

How to read Temperature and Humidity from Am2302 sensor using Thingworx Edge java SKD for Raspberry Pi

In-System Programmer USER MANUAL RN-ISP-UM RN-WIFLYCR-UM

Microcontroller to Sensor Interfacing Techniques

AXE114S BINARY CLOCK. revolution Revolution Education Ltd. Web: Version /09/08 AXE114.PMD.

Mobile Device Power Monitor Battery Connection Quick Start Guide

How To Use An Ams 5812 Pressure Sensor With A Usb Starter Kit

Color Mark Sensor with Red or Green LED E3S-VS

Tiny Arduino Music Visualizer

Yun Shield User Manual VERSION: 1.0. Yun Shield User Manual 1 / 22.

IMMS-CCC. IMMS-CCC Hardwire Central Interface. Installation Instructions

Designing a Schematic and Layout in PCB Artist

Building a Basic Communication Network using XBee DigiMesh. Keywords: XBee, Networking, Zigbee, Digimesh, Mesh, Python, Smart Home

ECEN 1400, Introduction to Analog and Digital Electronics

* DISCLAIMER: Contents. How to Use This Guide: COMMERCIAL INSTALL GUIDE 2

Cornerstone Electronics Technology and Robotics I Week 15 Voltage Comparators Tutorial

WxGoos-1 Climate Monitor Installation Instructions Page 1. Connections. Setting an IP Address

Network Interface Failover using FONA

Intel Do-It-Yourself Challenge Lab 2: Intel Galileo s Linux side Nicolas Vailliet

SYSTEM 4C. C R H Electronics Design

LMU Hardware and Installation Guide

AR1100 Resistive Touch Screen Controller Guide

Introduction to Arduino

Touch Screen for Pictiva OLED display. Application Note. Introduction

Copyright 2012 by Fen Logic Ltd. All rights reserved.

Transcription:

Adafruit's Raspberry Pi Lesson 11. DS18B20 Temperature Sensing Created by Simon Monk Last updated on 2015-04-09 03:47:48 PM EDT

Guide Contents Guide Contents Overview Other Code Libraries Parts Hardware DS18B20 Add OneWire support Software Configure and Test Adding more sensors 2 3 4 5 8 12 12 14 17 17 Page 2 of 17

Overview The Occidentalis Linux distribution for Raspberry Pi (and Raspbian as of Dec 2012) includes support for the DS18B20 1-wire temperature sensor. These sensors come in a small three pin package like a transistor and are accurate digital devices. In this lesson, you will learn how to use a DS18B20 with the Raspberry Pi to take temperature readings. Since the Raspberry Pi has no ADC (Analog to Digital Converter), it cannot directly use an analog temperature sensor like the TMP36, making the DS18B20 a good choice for temperature sensing. Page 3 of 17

Other Code Libraries If you are a python-fancier, there's also a nice DS18B20 library that works with raspberry pi over at https://github.com/timofurrer/ds18b20 (http://adafru.it/dpk) (written by Timo!) Page 4 of 17

Parts To build the project described in this lesson, you will need the following parts. Raspberry Pi Page 5 of 17

DS18B20 Digital temperature sensor + extras, or waterproof or high temperature versions (see products sidebar) You'll also need a 4.7K or 10K ohm resistor, it comes with the sensor when purchased from Adafruit Half-sized breadboard Page 6 of 17

Jumper wire pack Pi Cobbler Page 7 of 17

Hardware The breadboard layout for just the basic DS18B20 is shown below. The DS18B20 "1-wire" sensors can be connected in parallel - unlike nearly any other sensor sold! All sensors should share the same pins, but you only need one 4.7K resistor for all of them The resistor is used as a 'pullup' for the data-line, and is required to keep the data transfer stable and happy Be careful to get the DS18B20 the right way around. The curved edge should be to the left as shown in the figure below. If you put it the wrong way around, it will get hot and then break. Despite both being temperature sensors, the DS18B20+ is totally different than the TMP36. You cannot use a TMP36 for this tutorial! Page 8 of 17

If you are using the waterproof version of the DS18B20 then the device has three leads, red, black and yellow. The bare copper screening lead that does not need to be connected. If you are using the "high temperature" version of the DS18B20 we sell, connect Orange Stripe to 3.3V, White connects to ground and Blue Stripe is data, pin #4. You still need a ~4.7K-10K resistor from data to 3.3V Page 9 of 17

Page 10 of 17

Page 11 of 17

DS18B20 Although the DS18B20 just looks like a regular transistor, there is actually quite a lot going on inside. The chip includes the special 1-wire serial interface as well as control logic and the temperature sensor itself. Its output pin sends digital messages and Raspbian/Occidentalis includes an interface to read those messages. You can experiment with the device from the command line or over SSH (see Lesson 6 (http://adafru.it/awc)), before we run the full program. Add OneWire support Start by adding the following line to /boot/config.txt You can edit that file with nano by running sudo nano /boot/config.txt and then scrolling to the bottom and typing it there dtoverlay=w1-gpio Then reboot with sudo reboot. When the Pi is back up and you're logged in again, type the commands you see below into a terminal window. When you are in the 'devices' directory, the directory starting '28-' may have a different name, so cd to the name of whatever directory is there. sudo modprobe w1-gpio sudo modprobe w1-therm cd /sys/bus/w1/devices ls cd 28-xxxx (change this to match what serial number pops up) cat w1_slave Page 12 of 17

The interface is a little unreliable, but fortunately it tells us if there is a valid temperature to read. It's like a file, so all we have to do is read The response will either have YES or NO at the end of the first line. If it is yes, then the temperature will be at the end of the second line, in 1/000 degrees C. So, in the example above, the temperature is actually read as 20.687 and then 26.125 degrees C. If you have more than one Sensor connected, you'll see multiple 28-xxx files. Each one will have the unique serial number so you may want to plug one in at a time, look at what file is created, and label the sensor! Page 13 of 17

Software The Python program deals with any failed messages and reports the temperature in degrees C and F every second. import os import glob import time os.system('modprobe w1-gpio') os.system('modprobe w1-therm') base_dir = '/sys/bus/w1/devices/' device_folder = glob.glob(base_dir + '28*')[0] device_file = device_folder + '/w1_slave' def read_temp_raw(): f = open(device_file, 'r') lines = f.readlines() f.close() return lines def read_temp(): lines = read_temp_raw() while lines[0].strip()[-3:]!= 'YES': time.sleep(0.2) lines = read_temp_raw() equals_pos = lines[1].find('t=') if equals_pos!= -1: temp_string = lines[1][equals_pos+2:] temp_c = float(temp_string) / 1000.0 temp_f = temp_c * 9.0 / 5.0 + 32.0 return temp_c, temp_f while True: print(read_temp()) time.sleep(1) The program starts by issuing the 'modprobe' commands that are needed to start the interface running. The next three lines, find the file from which the messages can be read. A problem has been reported with occasional hangs when reading the temperature file when using Raspbian. If you find you have the same problem, try replacing the function read_temp_raw with the Page 14 of 17

code below. You will also need to add a line at the top of the file 'import subprocess'. def read_temp_raw(): catdata = subprocess.popen(['cat',device_file], stdout=subprocess.pipe, stderr=subprocess.pipe) out,err = catdata.communicate() out_decode = out.decode('utf-8') lines = out_decode.split('\n') return lines Reading the temperature takes place in two functions, read_temp_raw just fetches the two lines of the message from the interface. The read_temp function wraps this up checking for bad messages and retrying until it gets a message with 'YES' on end of the first line. The function returns two values, the first being the temperature in degrees C and the second in degree F. You could if you wished separate these two as shown in the example below: deg_c, deg_f = read_temp() The main loop of the program simply loops, reading the temperature and printing it, before sleeping for a second. To upload the program onto your Raspberry Pi, you can use SSH to connect to the Pi, start an editor window using the line: nano thermometer.py and then paste the code above, before saving the file with CTRL-x and Y. Page 15 of 17

Page 16 of 17

Configure and Test The program must be run as super user, so type the following command into the terminal to start it: sudo python thermometer.py If all is well, you will see a series of readings like this: Try putting your finger over the sensor to warm it up. Adding more sensors You can add additional DS18B20 sensors in parallel - connect all the sensors' VCC, data and ground pins together. Use a single 4.7K resistor. You will see multiple /sys/bus/w1/devices/28- nnnnn directories, each one having the unique serial number as the directory name. The python example code only works for one sensor right now so you will have to adapt it if you want it to read from different sensors at once Last Updated: 2015-04-09 03:47:49 PM EDT Page 17 of 17