ADC0832CCN Convertisseur analogique vers numérique
Posted on 21 février 2016
in Composants


Datasheet
Ce composant permet la conversion de données analogiques en numérique 8bits. En effet, la carte Raspberry ne comporte pas d’entrée analogique, il faut donc convertir le signal en numérique.
Ce convertisseur renvoie donc une valeur entre 0-255.
Les pin se à connecter de la façon suivante.
- CS -> GPIO 18
- GND -> GND
- DO -> GPIO 24
- DI -> GPIO 24
- CLK -> GPIO 23
- VCC -> 3.3V
Les bibliothèque suivante permet de lire les données sur ce convertisseur.
ADC0832.zip (189 téléchargements)
#!/usr/bin/env python
#
# Convertisseur ANALOGIQUE / NUMERIQUE
# inspire de SunFounder
#
# hub.bosseur@gmail.com
# http://aubonsurf.free.fr
######################################
import time
import os
import RPi.GPIO as GPIO
#Lecture des donnee de ADC0832
#USAGE :
# Declaration : capteur=ADC0832(pinCLK, pinDO, pinDI, pinCS)
# Lecture donnee Channel 0: capteur.getADC(0)
# Lecture donnee Channel 1: capteur.getADC(1)
##
class ADC0832:
#Declaration des E/S
#initialisation
def __init__(self, pinCLK, pinDO, pinDI, pinCS):
self.ADC_DIO=pinDO
self.ADC_CLK=pinCLK
self.ADC_CS=pinCS
GPIO.setmode(GPIO.BCM)
#GPIO.setup(pinDI, GPIO.OUT)
##GPIO.setup(pinDO, GPIO.IN)
GPIO.setup(pinCLK, GPIO.OUT)
GPIO.setup(pinCS, GPIO.OUT)
def destroy():
GPIO.cleanup()
# using channel = 0 as default for backwards compatibility
def getResult(self, channel=0): # Get ADC result, input channal
GPIO.setup(self.ADC_DIO, GPIO.OUT)
GPIO.output(self.ADC_CS, 0)
GPIO.output(self.ADC_CLK, 0)
GPIO.output(self.ADC_DIO, 1); time.sleep(0.000002)
GPIO.output(self.ADC_CLK, 1); time.sleep(0.000002)
GPIO.output(self.ADC_CLK, 0)
GPIO.output(self.ADC_DIO, 1); time.sleep(0.000002)
GPIO.output(self.ADC_CLK, 1); time.sleep(0.000002)
GPIO.output(self.ADC_CLK, 0)
GPIO.output(self.ADC_DIO, channel); time.sleep(0.000002)
GPIO.output(self.ADC_CLK, 1)
GPIO.output(self.ADC_DIO, 1); time.sleep(0.000002)
GPIO.output(self.ADC_CLK, 0)
GPIO.output(self.ADC_DIO, 1); time.sleep(0.000002)
dat1 = 0
for i in range(0, 8):
GPIO.output(self.ADC_CLK, 1); time.sleep(0.000002)
GPIO.output(self.ADC_CLK, 0); time.sleep(0.000002)
GPIO.setup(self.ADC_DIO, GPIO.IN)
dat1 = dat1 << 1 | GPIO.input(self.ADC_DIO)
dat2 = 0
for i in range(0, 8):
dat2 = dat2 | GPIO.input(self.ADC_DIO) << i
GPIO.output(self.ADC_CLK, 1); time.sleep(0.000002)
GPIO.output(self.ADC_CLK, 0); time.sleep(0.000002)
GPIO.output(self.ADC_CS, 1)
GPIO.setup(self.ADC_DIO, GPIO.OUT)
if dat1 == dat2:
return dat1
else:
return 0
def getResult1(self):
return getResult(1)
La lecture se fait de la façon suivante:
import RPi.GPIO as GPIO;
import os;
import time;
import ADC0832
#facon de numeroter les pin
GPIO.setmode(GPIO.BCM);
GPIO.setwarnings(False)
#Configuration PI-PIN en input
MOISTURE_PIN=25;
LED_PIN=21;
PIN_CLK = 17
PIN_DO = 24
PIN_DI = 23
PIN_CS = 18
if __name__ == '__main__': # Program start from here
moistsure1=ADC0832.ADC0832(PIN_CLK,PIN_DO,PIN_DI,PIN_CS)
print ("Detection en cours")
while True:
time.sleep(2)
res0 = moistsure1.getResult()
#res1 = moistsure1.getResult(1)
print ("humidite de la terre: {}%".format(res0))
Je vous propose de poursuivre sur l’intégration d’un capteur gaz.