Après avoir utilisé une convertisseur 12 bits et un PC pendant quelques temps, j’ai commencé au cours du mois de juin 2014 la migration vers un ensemble basé sur un Raspberry Pi et un convertisseur ADS1115.
Je ne m’étendrai pas sur l’utilisation ou ce qu’est un Raspi. On trouve ça partout. La distribution utilisée est une classique Raspbian. Le convertisseurs ADC est interrogé via le bus I2C.
Le convertisseur
Le câblage est très sommaire.
Raspberry ADS1115
GND –> GND
+ 5V –> VDD
SCL –> SCL
SDA –> SDA
ADRR -> GND (dans ma config adresse 0x48 sur le bus I2C)
A0 -> pre-amp capteur 1
A1 -> pre-amp capteur 1
A2 -> pre-amp capteur 2
A3 -> pre-amp capteur 2
J’utilise un vieux bout de Pyton récupéré sur ce site où tout le démarrage y est bien expliqué : http://openlabtools.eng.cam.ac.uk/Resources/Datalog/RPi_ADS1115/
#print_adc_readings.py - 12/9/2013. Written by David Purdie as part of the openlabtools initiative
#Uses the adafruit python libraries to sample the ADS1115 at a user defined sampling frequency
from Adafruit_ADS1x15 import ADS1x15
import datetime
import time
import numpy as np
pga = 6144 # Set full-scale range of programable gain amplifier (page 13 of data sheet), change depending on the input voltage range
ADS1115 = 0x01 # Specify that the device being used is the ADS1115, for the ADS1015 used 0x00
adc = ADS1x15(ic=ADS1115) # Create instance of the class ADS1x15 called adc
# Function to print sampled values to the terminal
def logdata():
#print "sps value should be one of: 8, 16, 32, 64, 128, 250, 475, 860, otherwise the value will default to 250"
frequency = 40 # Get sampling frequency from user
sps = 100 # Get ads1115 sps value from the user
time1 = 3599 # Get how long to sample for from the user
period = 1.0 / frequency # Calculate sampling period
datapoints = int(time1*frequency) # Datapoints is the total number of samples to take, which must be an integer
startTime=time.time()
now = datetime.datetime.now() # Time of first sample
name = now.strftime("%Y%m%d-%H")
name = name +".txt"
t1=startTime # T1 is last sample time
t2=t1 # T2 is current time
for x in range (0,datapoints) : # Loop in which data is sampled
while (t2-t1 < period) : # Check if t2-t1 is less then sample period, if it is then update t2
t2=time.time() # and check again
t1+=period # Update last sample time by the sampling period
result = adc.readADCDifferential01( pga, sps)
result23 = adc.readADCDifferential23( pga, sps)
#print "%s %s\n" % ( result, result23) # Print sampled value and time to the terminal
writefile.write("%s %s\n" % ( result, result23))
# Call to logdata function
now = datetime.datetime.now() # Time of first sample
name = now.strftime("%Y%m%d-%H")
name = name +".txt"
writefile = open(name,'w',1024)
logdata()
writefile.close()
Les données issues de la conversion A/N sont stockées dans des fichiers d’une durée d’une heure de 144 000 échantillons (40/s). Les fichiers sont écrits sur un serveur via un montage NFS pour économiser la carte SD.
Il serait plus astucieux d’enregistrer les données dans un autre format que du texte(…) mais dans un premier temps et à titre d’essai ca fonctionne.
Reste à afficher le résultat. On peut utiliser pour cela Gnuplot. C’est un exemple parmi d’autres. Gnuplot permet d’afficher une courbe mais ne permet pas de filtrage ou d’analyse. Pour ce faire j’utilise un logiciel TSOFT http://seismologie.oma.be/TSOFT/tsoft.html publié par the Royal Observatory of Belgium.
Voici une sortie brute obtenue avec Gnuplot
C’est évidement très sommaire, mais on voit qu’il se passe quelque chose 😉
La même à un moment plus calme
Les pics vers 6h, 6h33 et 06h37 sont des trains passant non loin.
To be continued…
Ancienne config
Le convertisseur analogique-numérique est bâti autour d’un MAX 186. Le montage est inspiré de celui utilisé pour le projet Radio-SkyPipe. Les données sont lues depuis un port parallèle d’un PC sous Linux.
Le MAX186 possède 8 entrées analogiques (pin 1 à 8) avec une résolution de 12 bits. La tension sur une entrée peut varier de 0 à 4096 mV. Le schéma est ultra simple comme on le voit ci-dessous.
Le code source du logiciel permettant d’utiliser le convertisseur. Sa compilation sous Linux ne pose aucun problème. Se référer au Readme inclus dans l’archive. Ce logiciel lit les valeurs de une ou plusieurs des entrées du MAX186 et les enregistre dans un fichier texte. Ci-dessous un exemple avec deux entrées.
1363816801 2167 2075 1363816801 2139 2073 …
Le début de la ligne est un timestamp Unix. Sa précision est de 1 seconde seulement. Donc si on demande une vitesse d’échantillonnage à 10 ech/s le timestamp sera le même pour 10 lignes consécutives. Il faudra donc prévoir un petit post traitement de cette valeur si on souhaite obtenir l’heure en dessous de la seconde. Ou plus élégant, modifier le source du programme pour obtenir une valeur en micro-seconde par exemple.
Ping : check out this site
Ping : เช่าตู้เกมส์
Ping : Joker Slot
Ping : เว็บรวมเกมสล็อต
Ping : เช่ารถตู้พร้อมคนขับ
Ping : หัวมาโบ