myRaspberry

Mes aventures en Raspberry et Arduino

KY-028 : Digital Temperature Sensor Module

Posted on 9 octobre 2016  in Arduino, Composants

Digital Temperature Sensor Module

Le Raspberry Pi a en contraste avec le Arduino pas d’ entrées analogiques et il n’y a pas ADC (Analog Digital Converter) intégré dans la puce de la Raspberry Pi.

Il est donc plus simple de l’utiliser avec Arduino ou avec raspberry mais en lui interfacant un convertisseur ADC0832 par exemple.

Pour cet exemple j’utilise la bibliothèque Adafruit ADC0832.[Téléchargement introuvable]

#!/usr/bin/env python
import RPi.GPIO as GPIO
import time

ADC_CS  = 11 
ADC_CLK = 12
ADC_DIO = 13

def setup(cs=11,clk=12,dio=13):
    global ADC_CS,ADC_CLK,ADC_DIO
    ADC_CS = cs
    ADC_CLK = clk
    ADC_DIO = dio
    GPIO.setwarnings(False)
    GPIO.setmode(GPIO.BOARD)            # Number GPIOs by its physical location
    GPIO.setup(ADC_CS, GPIO.OUT)        # Set pins' mode is output
    GPIO.setup(ADC_CLK, GPIO.OUT)        # Set pins' mode is output

def destroy():
    GPIO.cleanup()

def getResult(channel):                                # Get ADC result, input channal
    GPIO.setup(ADC_DIO, GPIO.OUT)
    GPIO.output(ADC_CS, 0)

    GPIO.output(ADC_CLK, 0)
    GPIO.output(ADC_DIO, 1);  time.sleep(0.000002)
    GPIO.output(ADC_CLK, 1);  time.sleep(0.000002)
    GPIO.output(ADC_CLK, 0)

    GPIO.output(ADC_DIO, 1);  time.sleep(0.000002)
    GPIO.output(ADC_CLK, 1);  time.sleep(0.000002)
    GPIO.output(ADC_CLK, 0)

    GPIO.output(ADC_DIO, channel);  time.sleep(0.000002)

    GPIO.output(ADC_CLK, 1)
    GPIO.output(ADC_DIO, 1);  time.sleep(0.000002)
    GPIO.output(ADC_CLK, 0)
    GPIO.output(ADC_DIO, 1);  time.sleep(0.000002)

    dat1 = 0
    for i in range(0, 8):
        GPIO.output(ADC_CLK, 1);  time.sleep(0.000002)
        GPIO.output(ADC_CLK, 0);  time.sleep(0.000002)
        GPIO.setup(ADC_DIO, GPIO.IN)
        dat1 = dat1 << 1 | GPIO.input(ADC_DIO)

    dat2 = 0
    for i in range(0, 8):
        dat2 = dat2 | GPIO.input(ADC_DIO) << i
        GPIO.output(ADC_CLK, 1);  time.sleep(0.000002)
        GPIO.output(ADC_CLK, 0);  time.sleep(0.000002)

    GPIO.output(ADC_CS, 1)
    GPIO.setup(ADC_DIO, GPIO.OUT)

    if dat1 == dat2:
        return dat1
    else:
        return 0

Le programme de lecture devient simple:

##############################################
# Hub.bosseur@gmail.com - 
#
# Programme qui lit le capteur analogique

# http://aubonsurf.free.fr
##############################################
#!/usr/bin/python

import RPi.GPIO as GPIO
import ADC0832  #bibliotheque Adafruit ADC0832
import time


GPIO.setmode(GPIO.BOARD) 
GPIO.setwarnings(False)


def init():
        ADC0832.setup()


if __name__ == '__main__':
	init()
	try:
		while True:
			res0 = ADC0832.getResult(0)
			res1 = ADC0832.getResult(1)
			print 'res0 = %d, res1 = %d' % (res0,res1)
			time.sleep(0.2)
	
	except KeyboardInterrupt:
		print ("end")
        ADC0832.destroy()

2 thoughts on “KY-028 : Digital Temperature Sensor Module”

Comments are closed.