myRaspberry

Mes aventures en Raspberry et Arduino

ADC0832CCN Convertisseur analogique vers numérique

Posted on 21 février 2016  in Composants

ADC0832CCNCapture d’écran 2016-02-21 à 7.20.19 PM

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.