Commit d9318509 authored by Forquet Nicolas's avatar Forquet Nicolas
Browse files

* start to implement the measurement function

Showing with 68 additions and 17 deletions
+68 -17
...@@ -4,7 +4,7 @@ OHMPY_code is a program to control the low-cost and open source resistivity mete ...@@ -4,7 +4,7 @@ OHMPY_code is a program to control the low-cost and open source resistivity mete
OHMPY, it has been developed by Rémi CLEMENT,Vivien DUBOIS, Nicolas FORQUET (IRSTEA) and Yannick FARGIER (IFSTTAR). OHMPY, it has been developed by Rémi CLEMENT,Vivien DUBOIS, Nicolas FORQUET (IRSTEA) and Yannick FARGIER (IFSTTAR).
""" """
print('OHMPI start' ) print('OHMPI start' )
print()'Import library') print('Import library')
#!/usr/bin/python #!/usr/bin/python
import RPi.GPIO as GPIO import RPi.GPIO as GPIO
...@@ -17,6 +17,7 @@ import os ...@@ -17,6 +17,7 @@ import os
import sys import sys
import adafruit_ads1x15.ads1115 as ADS import adafruit_ads1x15.ads1115 as ADS
from adafruit_ads1x15.analog_in import AnalogIn from adafruit_ads1x15.analog_in import AnalogIn
import pandas as pd
""" """
display start time display start time
...@@ -28,10 +29,13 @@ print(current_time.strftime("%Y-%m-%d %H:%M:%S")) ...@@ -28,10 +29,13 @@ print(current_time.strftime("%Y-%m-%d %H:%M:%S"))
parameters parameters
""" """
nb_electrodes = 32 # maximum number of electrodes on the resistivity meter nb_electrodes = 32 # maximum number of electrodes on the resistivity meter
injection_time = 5 # Current injection time in second injection_duration = 5 # Current injection duration in second
nbr_meas= 900 # Number of times the quadripole sequence is repeated nbr_meas= 900 # Number of times the quadripole sequence is repeated
sequence_delay= 30 # Delay in seconds between 2 sequences sequence_delay= 30 # Delay in seconds between 2 sequences
stack= 1 # repetition of the current injection for each quadripole stack= 1 # repetition of the current injection for each quadripole
R_ref = 50 # reference resistance value in ohm
coef_p0 = 2.02 # slope for current conversion for ADS.P0, measurement in ???
coef_p1 = 2.02 # slope for current conversion for ADS.P1, measurement in ???
""" """
functions functions
...@@ -72,8 +76,58 @@ def read_quad(filename, nb_elec): ...@@ -72,8 +76,58 @@ def read_quad(filename, nb_elec):
print("Error: An electrode index is used twice at line " + str(test_same_elec[i]+1)) print("Error: An electrode index is used twice at line " + str(test_same_elec[i]+1))
sys.exit(1) sys.exit(1)
else: else:
return output return output
# perform a measurement
def run_measurement(nb_stack, injection_deltat, Rref, coefp0, coefp1):
i2c = busio.I2C(board.SCL, board.SDA) # I2C protocol setup
ads = ADS.ADS1115(i2c, gain=2/3) # I2C communication setup
# inner variable initialization
sum_I=0
sum_Vmn=0
sum_Ps=0
# GPIO initialization
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(7, GPIO.OUT)
GPIO.setup(8, GPIO.OUT)
# resistance measurement
for n in range(0,3+2*nbr_stack-1) :
print("stack "+ str(n+1))
if (n % 2) == 0:
GPIO.output(7, GPIO.HIGH) # polarité n°1
print('positif')
else:
GPIO.output(7, GPIO.LOW) # polarité n°1 également ?
print('negatif')
GPIO.output(8, GPIO.HIGH) # current injection
time.sleep(injection_deltat) # delay depending on current injection duration
Ia1 = AnalogIn(ads,ADS.P0).voltage * coeffp0 # reading current value on ADS channel A0
Ib1 = AnalogIn(ads,ADS.P1).voltage * coeffp1 # reading current value on ADS channel A1
Vm1 = AnalogIn(ads,ADS.P2).voltage # reading voltage value on ADS channel A2
Vn1 = AnalogIn(ads,ADS.P3).voltage # reading voltage value on ADS channel A3
GPIO.output(8, GPIO.LOW)# stop current injection
I1= (Ia1 - Ib1)/Rref;
sum_I=sum_I+I1;
Vmn1= (Vm1 - Vn1);
if (n % 2) == 0:
sum_Vmn=sum_Vmn-Vmn1;
sum_Ps=sum_Ps+Vmn1;
else:
sum_Vmn=sum_Vmn+Vmn1;
sum_Ps=sum_Ps+Vmn1;
# return averaged values
output = pd.DataFrame({
"Vmn":sum_Vmn/(3+2*nb_stack-1),
"I":sum_I/(3+2*nb_stack-1),
"R":Vmn/I,
"Ps":sum_Ps/(3+2*nb_stack-1)
})
return output
"""
Initialization of GPIO channels
"""
GPIO.setmode(GPIO.BCM) GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False) GPIO.setwarnings(False)
...@@ -86,32 +140,29 @@ for i in pinList: ...@@ -86,32 +140,29 @@ for i in pinList:
GPIO.output(i, GPIO.HIGH) GPIO.output(i, GPIO.HIGH)
""" """
Reading the quadripole file Main loop
""" """
N=read_quad("ABMN.txt",nb_electrodes) # load quadripole file N=read_quad("ABMN.txt",nb_electrodes) # load quadripole file
for g in range(0,nbr_meas): # for time-lapse monitoring for g in range(0,nbr_meas): # for time-lapse monitoring
""" for i in range(0,N.shape[0]): # loop over quadripoles
Selection electrode activées pour chaque quadripole # call the switch_mux function to switch to the right electrodes
"""
for i in range(0,N.shape[0]): # boucle sur les quadripôles, qui tient compte du nombre de quadripole dans le fichier ABMN
# call switch_mux function
switch_mux(N[i,]) switch_mux(N[i,])
time.sleep(injection_time) # run a measurement
run_measurement(stack, injection_duration, R_ref, coef_p0, coef_p1)
# save data and print in a text file
append_data
# reset multiplexer channels
GPIO.output(12, GPIO.HIGH); GPIO.output(16, GPIO.HIGH); GPIO.output(20, GPIO.HIGH); GPIO.output(21, GPIO.HIGH); GPIO.output(26, GPIO.HIGH) GPIO.output(12, GPIO.HIGH); GPIO.output(16, GPIO.HIGH); GPIO.output(20, GPIO.HIGH); GPIO.output(21, GPIO.HIGH); GPIO.output(26, GPIO.HIGH)
GPIO.output(18, GPIO.HIGH); GPIO.output(23, GPIO.HIGH); GPIO.output(24, GPIO.HIGH); GPIO.output(25, GPIO.HIGH); GPIO.output(19, GPIO.HIGH) GPIO.output(18, GPIO.HIGH); GPIO.output(23, GPIO.HIGH); GPIO.output(24, GPIO.HIGH); GPIO.output(25, GPIO.HIGH); GPIO.output(19, GPIO.HIGH)
GPIO.output(6, GPIO.HIGH); GPIO.output(13, GPIO.HIGH); GPIO.output(4, GPIO.HIGH); GPIO.output(17, GPIO.HIGH); GPIO.output(27, GPIO.HIGH) GPIO.output(6, GPIO.HIGH); GPIO.output(13, GPIO.HIGH); GPIO.output(4, GPIO.HIGH); GPIO.output(17, GPIO.HIGH); GPIO.output(27, GPIO.HIGH)
GPIO.output(22, GPIO.HIGH); GPIO.output(10, GPIO.HIGH); GPIO.output(9, GPIO.HIGH); GPIO.output(11, GPIO.HIGH); GPIO.output(5, GPIO.HIGH) GPIO.output(22, GPIO.HIGH); GPIO.output(10, GPIO.HIGH); GPIO.output(9, GPIO.HIGH); GPIO.output(11, GPIO.HIGH); GPIO.output(5, GPIO.HIGH)
time.sleep(sequence_delay); #waiting next measurement (time-lapse)
time.sleep(sequence_delay);#waiting next measurement
'''
Save result in txt file
'''
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment