About Me

My photo
Starting my journey into the world of Microcontrollers, electronics and programming, a bit late in life (but your never to old to learn).

Sunday 1 May 2016

Raspberry Pi CamJam EduKit 2 - Sensors - Part 3 Worksheet 3: Challenge Temperature, Lights, Sound

WORKSHEET 3 CHALLENGE:

To add Lights and Sound at different temperatures

The three temperatures I decided where
  • Red LED - 22'c and above
  • Buzzer - 25'c and above
  • Blue LED - 18'c and Below

I'm pleased as this is the first challenge I've succeeded at, so I must be learning something. (Got to lean how to video better). About 50% of the code I added to the Worksheet 3 code, to get the result.

The Code:

 #CamJam EduKit 2 - Sensors
#Worksheet 3 - Challenge - TemperatureLightsSound

#Import Libraries
import os
import RPi.GPIO as GPIO
import glob
import time

#Initialize the GPIO Pins
os.system('modprobe w1-gpio') #Turns on the GPIO module
os.system('modprobe w1-therm') #Turns on the Temperature module
GPIO.setmode(GPIO.BCM) #Set GPIO Mode
GPIO.setwarnings(False) #Turns of GPIO Warnings?

#Set Variables to store Pin Numbers
LEDRed = 18
LEDBlue = 24
BUZ = 22

#Set GPIO as Output
GPIO.setup(LEDRed, GPIO.OUT)
GPIO.setup(LEDBlue, GPIO.OUT)
GPIO.setup(BUZ, GPIO.OUT)

#Finds the correct device file that holds the temperature data
base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'

#A function that reads the sensors data
def read_temp_raw():
    f = open(device_file, 'r') #Opens the temperature device file
    lines = f.readlines() #Returns the text
    f.close()
    return lines

#Convert the value of the sensor into a temperature
def read_temp():
    lines = read_temp_raw() #Read the temperature 'device file'

    #While the first line does not contain 'YES', wait for 0.2s
    #and then read the device file again.
    while lines[0].strip()[-3:] != 'YES':
        time.sleep(0.2)
        lines = read_temp_raw()

    #Look for the position of the '=' in the second line of the
    #device file.
    equals_pos = lines[1].find('t=')

    #If the '=' is found, convert the rest of the line after the
    #'=' into degrees Celsius, then degrees Fahrenheit
    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

#Checks if the LEDs or Buzzer should be ON/HIGH or OFF/LOW
while True:
    temp_c, temp_f = read_temp() # Retuns a TUPLE of 2 Values
  
    #Set GPIO Pins LOW/OFF
    GPIO.output(LEDRed, GPIO.LOW)
    GPIO.output(LEDBlue, GPIO.LOW)
    GPIO.output(BUZ, GPIO.LOW)
  
    #Turns RED LED on if above 22'c
    if temp_c > 22.0:
        GPIO.output(LEDRed, GPIO.HIGH)
    #Turns BLUE LED on if below 18'c
    if temp_c < 18.0:
        GPIO.output(LEDBlue, GPIO.HIGH)
    #Turns BUZZER on if above 25'c
    if temp_c > 25.0:
        GPIO.output(BUZ, GPIO.HIGH)

    #Prints Temperature to screen in Celcius and Fahrenheit
    print(read_temp())
  
    #Waits 1 second then returns to read temperature
    time.sleep(1)


No comments:

Post a Comment