Commit 96731af5 authored by Clement Remi's avatar Clement Remi
Browse files

V1.5

Showing with 259 additions and 51871 deletions
+259 -51871
Ohmpi.py 0 → 100644
"""
created on January 6, 2020
Update December 2021
Ohmpi.py is a program to control a low-cost and open hardward resistivity meter OhmPi that has been developed by Rémi CLEMENT(INRAE),Vivien DUBOIS(INRAE),Hélène GUYARD(IGE), Nicolas FORQUET (INRAE), and Yannick FARGIER (IFSTTAR).
"""
print('\033[1m'+'\033[31m'+' ________________________________')
print('| _ | | | || \/ || ___ \_ _|')
print('| | | | |_| || . . || |_/ / | |' )
print('| | | | _ || |\/| || __/ | |')
print('\ \_/ / | | || | | || | _| |_')
print(' \___/\_| |_/\_| |_/\_| \___/ ')
print('\033[0m')
print('OHMPI start' )
print('Vers: 1.50')
print('Import library')
import RPi.GPIO as GPIO
import time , board, busio, numpy, os, sys, json, glob
from datetime import datetime
import adafruit_ads1x15.ads1115 as ADS
from adafruit_ads1x15.analog_in import AnalogIn
from pandas import DataFrame
# import pandas as pd
import os.path
from gpiozero import CPUTemperature
"""
display start time
"""
current_time = datetime.now()
print(current_time.strftime("%Y-%m-%d %H:%M:%S"))
"""
hardware parameters
"""
R_ref = 50.25# reference resistance value in ohm
coef_p0 = 2.50427 # slope for current conversion for ADS.P0, measurement in V/V
coef_p1 = 2.50378# slope for current conversion for ADS.P1, measurement in V/V
coef_p2 = 2.50447 # slope for current conversion for ADS.P2, measurement in V/V
coef_p3 = 2.50259 # slope for current conversion for ADS.P3, measurement in V/V
offset_p0=-0.004814
offset_p1= 0.005243
offset_p2= 0.004238
offset_p3= 0.006433
export_path = "/home/pi/Desktop/measurement.csv"
base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'
# GPIO initialization
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(7, GPIO.OUT)
GPIO.setup(8, GPIO.OUT)
integer=30 # if noise increase
meas=numpy.zeros((4,integer))
"""
import parameters
"""
with open('ohmpi_param.json') as json_file:
pardict = json.load(json_file)
i2c = busio.I2C(board.SCL, board.SDA) # I2C protocol setup
ads = ADS.ADS1115(i2c, gain=2/3,data_rate=860) # I2C communication setup
"""
functions
"""
# function swtich_mux select the right channels for the multiplexer cascade for electrodes A, B, M and N.
def switch_mux(quadripole):
path2elec = numpy.loadtxt("path2elec.txt", delimiter=" ", dtype=bool)
quadmux = numpy.loadtxt("quadmux.txt", delimiter=" ", dtype=int)
for i in range(0,4):
for j in range(0,5) :
GPIO.output(int(quadmux[i,j]), bool(path2elec[quadripole[i]-1,j]))
# function to find rows with identical values in different columns
def find_identical_in_line(array_object):
output = []
if array_object.ndim == 1:
temp = numpy.zeros(4)
for i in range(len(array_object)):
temp[i] = numpy.count_nonzero(array_object == array_object[i])
if any(temp > 1):
output.append(0)
else:
for i in range(len(array_object[:,1])):
temp = numpy.zeros(len(array_object[1,:]))
for j in range(len(array_object[1,:])):
temp[j] = numpy.count_nonzero(array_object[i,:] == array_object[i,j])
if any(temp > 1):
output.append(i)
return output
# read quadripole file and apply tests
def read_quad(filename, nb_elec):
output = numpy.loadtxt(filename, delimiter=" ",dtype=int) # load quadripole file
# locate lines where the electrode index exceeds the maximum number of electrodes
test_index_elec = numpy.array(numpy.where(output > 32))
# locate lines where an electrode is referred twice
test_same_elec = find_identical_in_line(output)
# if statement with exit cases (rajouter un else if pour le deuxième cas du ticket #2)
if test_index_elec.size != 0:
for i in range(len(test_index_elec[0,:])):
print("Error: An electrode index at line "+ str(test_index_elec[0,i]+1)+" exceeds the maximum number of electrodes")
sys.exit(1)
elif len(test_same_elec) != 0:
for i in range(len(test_same_elec)):
print("Error: An electrode index is used twice at line " + str(test_same_elec[i]+1))
sys.exit(1)
else:
return output
def read_temp():
f = open(device_file, 'r')
lines = f.readlines()
f.close()
while lines[0].strip()[-3:] != 'YES':
time.sleep(0.2)
lines = read_temp_raw()
equals_pos = lines[1].find('t=')
if equals_pos != -1:
temp_string = lines[1][equals_pos+2:]
temp_c = float(temp_string) / 1000.0
return temp_c
# perform a measurement
def run_measurement(nb_stack, injection_deltat, Rref, coefp0, coefp1, coefp2, coefp3, elec_array):
start_time=time.time()
# inner variable initialization
sum_I=0
sum_Vmn=0
sum_Ps=0
# injection courant and measure
for n in range(0,3+2*nb_stack-1) :
# current injection
if (n % 2) == 0:
GPIO.output(7, GPIO.HIGH) # polarity n°1
else:
GPIO.output(7, GPIO.LOW) # polarity n°2
GPIO.output(8, GPIO.HIGH) # current injection
start_delay=time.time()
time.sleep(injection_deltat) # delay depending on current injection duration
# if n==0:
Tx=AnalogIn(ads,ADS.P0).voltage
Tab=AnalogIn(ads,ADS.P1).voltage
for k in range(0,integer):
meas[0,k] = AnalogIn(ads,ADS.P0).voltage # reading current value on ADS channel A0
meas[1,k] = AnalogIn(ads,ADS.P1).voltage
meas[2,k] = AnalogIn(ads,ADS.P2).voltage # reading voltage value on ADS channel A2
meas[3,k] = AnalogIn(ads,ADS.P3).voltage
GPIO.output(8, GPIO.LOW)# stop current injection
end_delay=time.time()
sum_I=sum_I+(((numpy.mean(meas[0,:])*coefp0)+offset_p0)-(((numpy.mean(meas[1,:])*coefp1)+offset_p1)))/Rref
Vmn1= ((numpy.mean(meas[2,:])*(coefp2))+ offset_p2)-((numpy.mean(meas[3,:])*(coefp3))+offset_p3)
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
end_calc=time.time()
time.sleep((end_delay-start_delay)-(end_calc-end_delay))
# return averaged values
cpu= CPUTemperature()
output = DataFrame({
"time":[datetime.now()],
"A":elec_array[0],
"B":elec_array[1],
"M":elec_array[2],
"N":elec_array[3],
"Vmn [mV]":[(sum_Vmn/(3+2*nb_stack-1))*1000],
"I [mA]":[(sum_I/(3+2*nb_stack-1))*1000],
"R [ohm]":[( (sum_Vmn/(3+2*nb_stack-1)/(sum_I/(3+2*nb_stack-1))))],
"Rab [KOhm]":[(Tab*2.47)/(sum_I/(3+2*nb_stack-1))/1000],
"Tx [V]":[Tx*2.47],
"Ps [mV]":[(sum_Ps/(3+2*nb_stack-1))*1000],
"nbStack":[nb_stack],
"CPU temp [°C]":[cpu.temperature],
"Hardware temp [°C]":[read_temp()-8],
"Time [S]":[(-start_time+time.time())]
# "Rcontact[ohm]":[Rc],
# "Rsoil[ohm]":[Rsoil],
# "Rab_theory [Ohm]":[(Rc*2+Rsoil)]
# Dead time equivalent to the duration of the current injection pulse
})
output=output.round(1)
print(output.to_string())
time.sleep(1)
return output
# save data
def append_and_save(path, last_measurement):
if os.path.isfile(path):
# Load data file and append data to it
with open(path, 'a') as f:
last_measurement.to_csv(f, header=False)
else:
# create data file and add headers
with open(path, 'a') as f:
last_measurement.to_csv(f, header=True)
"""
Initialization of GPIO channels
"""
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
"""
Initialization of multiplexer channels
"""
# pinList = [12,16,20,21,26,18,23,24,25,19,6,13,4,17,27,22,10,9,11,5] # List of GPIOs enabled for relay cards (electrodes)
# for i in pinList:
# GPIO.setup(i, GPIO.OUT)
# GPIO.output(i, GPIO.HIGH)
"""
Main loop
"""
N=read_quad("ABMN.txt",pardict.get("nb_electrodes")) # load quadripole file
if N.ndim == 1:
N = N.reshape(1, 4)
for g in range(0,pardict.get("nbr_meas")): # for time-lapse monitoring
for i in range(0,N.shape[0]): # loop over quadripoles
# call the switch_mux function to switch to the right electrodes
# switch_mux(N[i,])
# run a measurement
current_measurement = run_measurement(pardict.get("stack"), pardict.get("injection_duration"), R_ref, coef_p0, coef_p1, coef_p2, coef_p3, N[i,])
# save data and print in a text file
append_and_save(pardict.get("export_path"), current_measurement)
# 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(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(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(pardict.get("sequence_delay")) #waiting next measurement (time-lapse)
File deleted
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Fritzing Bill of Materials</title>
<style type="text/css">
.meta {
font-size: small;
margin: 0.4em 0;
}
table {
border-collapse: collapse;
}
th {
font-weight: bold;
text-align: left;
border-bottom: 1px solid black;
padding: 0.1em 1.5em 0.2em 0.1em;
}
td {
border-bottom: 1px solid #CCC;
padding: 0.5em 1.5em 0.5em 0.1em;
}
.props {
font-size: smaller;
}
</style>
</head>
<body>
<h1>Bill of Materials: card_measure_raspberry_v3.04.fzz</h1>
<p class="meta">C:/Users/remi.clement/Documents/28_ohmpi_all_git/PCB_file_measurement card/card_measure_raspberry_v3.04.fzz</p>
<p class="meta">vendredi, décembre 18 2020, 21:47:29</p>
<h2>Assembly List</h2>
<table>
<thead>
<tr>
<th>Label</th>
<th>Part Type</th>
<th>Properties</th>
</tr>
</thead>
<tbody>
<tr>
<td>C1</td>
<td>Ceramic Capacitor</td>
<td class="props">boîtier 100 mil [THT, multilayer]; capacité 100nF; tension 50V</td>
</tr><tr>
<td>C2</td>
<td>Ceramic Capacitor</td>
<td class="props">boîtier 100 mil [THT, multilayer]; capacité 100nF; tension 50V</td>
</tr><tr>
<td>C3</td>
<td>Ceramic Capacitor</td>
<td class="props">boîtier 100 mil [THT, multilayer]; capacité 100nF; tension 50V</td>
</tr><tr>
<td>C4</td>
<td>Ceramic Capacitor</td>
<td class="props">boîtier 100 mil [THT, multilayer]; capacité 100nF; tension 50V</td>
</tr><tr>
<td>Composant1</td>
<td>Adafruit ADS1115 16Bit I2C ADC</td>
<td class="props">variante variant 2; numéro du composant Adafruit #1115</td>
</tr><tr>
<td>Fuse1</td>
<td>Fuse </td>
<td class="props">variante variant 1; datasheet https://www.mouser.fr/datasheet/2/240/Littelfuse_Fuse_251_253_Datasheet_pdf-522535.pdf; manufacturer little fuse</td>
</tr><tr>
<td>J6</td>
<td>Screw terminal - 14 pins</td>
<td class="props">Taille du trou 1.0mm,0.508mm; espacement des broches 0.137in (3.5mm); boîtier THT; broches 14</td>
</tr><tr>
<td>LM358-1</td>
<td>LM358</td>
<td class="props">boîtier dip08; chip lm358</td>
</tr><tr>
<td>LM358-2</td>
<td>LM358</td>
<td class="props">boîtier dip08; chip lm358</td>
</tr><tr>
<td>LM358-3</td>
<td>LM358</td>
<td class="props">boîtier dip08; chip lm358</td>
</tr><tr>
<td>LM358-4</td>
<td>LM358</td>
<td class="props">boîtier dip08; chip lm358</td>
</tr><tr>
<td>R1</td>
<td>1kΩ Resistor</td>
<td class="props">espacement des broches 400 mil; tolérance ±0.1%; bands 4; boîtier THT; résistance 1kΩ</td>
</tr><tr>
<td>R2</td>
<td>1.5kΩ Resistor</td>
<td class="props">espacement des broches 400 mil; tolérance ±0.1%; bands 4; boîtier THT; résistance 1.5kΩ</td>
</tr><tr>
<td>R3</td>
<td>1kΩ Resistor</td>
<td class="props">espacement des broches 400 mil; tolérance ±0.1%; bands 4; boîtier THT; résistance 1kΩ</td>
</tr><tr>
<td>R4</td>
<td>1.5kΩ Resistor</td>
<td class="props">espacement des broches 400 mil; tolérance ±0.1%; bands 4; boîtier THT; résistance 1.5kΩ</td>
</tr><tr>
<td>R5</td>
<td>50Ω Resistor</td>
<td class="props">espacement des broches 400 mil; tolérance ±0.1%; bands 4; boîtier THT; résistance 50Ω</td>
</tr><tr>
<td>R6</td>
<td>1.5kΩ Resistor</td>
<td class="props">espacement des broches 400 mil; tolérance ±0.1%; bands 4; boîtier THT; résistance 1.5kΩ</td>
</tr><tr>
<td>R7</td>
<td>1kΩ Resistor</td>
<td class="props">espacement des broches 400 mil; tolérance ±0.1%; bands 4; boîtier THT; résistance 1kΩ</td>
</tr><tr>
<td>R8</td>
<td>1.5kΩ Resistor</td>
<td class="props">espacement des broches 400 mil; tolérance ±0.1%; bands 4; boîtier THT; résistance 1.5kΩ</td>
</tr><tr>
<td>R9</td>
<td>1kΩ Resistor</td>
<td class="props">espacement des broches 400 mil; tolérance ±0.1%; bands 4; boîtier THT; résistance 1kΩ</td>
</tr><tr>
<td>R10</td>
<td>10MΩ Resistor</td>
<td class="props">espacement des broches 400 mil; tolérance ±5%; bands 4; boîtier THT; résistance 10MΩ</td>
</tr><tr>
<td>R11</td>
<td>10MΩ Resistor</td>
<td class="props">espacement des broches 400 mil; tolérance ±5%; bands 4; boîtier THT; résistance 10MΩ</td>
</tr><tr>
<td>R12</td>
<td>10MΩ Resistor</td>
<td class="props">espacement des broches 400 mil; tolérance ±5%; bands 4; boîtier THT; résistance 10MΩ</td>
</tr><tr>
<td>R13</td>
<td>10MΩ Resistor</td>
<td class="props">espacement des broches 400 mil; tolérance ±5%; bands 4; boîtier THT; résistance 10MΩ</td>
</tr><tr>
<td>TRN3-1215</td>
<td>TRN3-1211</td>
<td class="props">variante 1211</td>
</tr><tr>
<td>TRN3-1215</td>
<td>TRN3-1211</td>
<td class="props">variante 1211</td>
</tr>
</tbody>
</table>
<h2>Shopping List</h2>
<table>
<thead>
<tr>
<th>Amount</th>
<th>Part Type</th>
<th>Properties</th>
</tr>
</thead>
<tbody>
<tr>
<td>4</td>
<td>Ceramic Capacitor</td>
<td class="props">boîtier 100 mil [THT, multilayer]; capacité 100nF; tension 50V</td>
</tr><tr>
<td>1</td>
<td>Adafruit ADS1115 16Bit I2C ADC</td>
<td class="props">variante variant 2; numéro du composant Adafruit #1115</td>
</tr><tr>
<td>1</td>
<td>Fuse </td>
<td class="props">variante variant 1; datasheet https://www.mouser.fr/datasheet/2/240/Littelfuse_Fuse_251_253_Datasheet_pdf-522535.pdf; manufacturer little fuse</td>
</tr><tr>
<td>1</td>
<td>Screw terminal - 14 pins</td>
<td class="props">Taille du trou 1.0mm,0.508mm; espacement des broches 0.137in (3.5mm); boîtier THT; broches 14</td>
</tr><tr>
<td>4</td>
<td>LM358</td>
<td class="props">boîtier dip08; chip lm358</td>
</tr><tr>
<td>4</td>
<td>1kΩ Resistor</td>
<td class="props">espacement des broches 400 mil; tolérance ±0.1%; bands 4; boîtier THT; résistance 1kΩ</td>
</tr><tr>
<td>4</td>
<td>1.5kΩ Resistor</td>
<td class="props">espacement des broches 400 mil; tolérance ±0.1%; bands 4; boîtier THT; résistance 1.5kΩ</td>
</tr><tr>
<td>1</td>
<td>50Ω Resistor</td>
<td class="props">espacement des broches 400 mil; tolérance ±0.1%; bands 4; boîtier THT; résistance 50Ω</td>
</tr><tr>
<td>4</td>
<td>10MΩ Resistor</td>
<td class="props">espacement des broches 400 mil; tolérance ±5%; bands 4; boîtier THT; résistance 10MΩ</td>
</tr><tr>
<td>2</td>
<td>TRN3-1211</td>
<td class="props">variante 1211</td>
</tr>
</tbody>
</table>
<p class="meta"><br/>Exported with Fritzing 0.9.4- http://fritzing.org</p>
</body>
</html>
G04 MADE WITH FRITZING*
G04 WWW.FRITZING.ORG*
G04 DOUBLE SIDED*
G04 HOLES PLATED*
G04 CONTOUR ON CENTER OF CONTOUR VECTOR*
%ASAXBY*%
%FSLAX23Y23*%
%MOIN*%
%OFA0B0*%
%SFA1.0B1.0*%
%ADD10R,3.047950X3.323970*%
%ADD11C,0.008000*%
%ADD10C,0.008*%
%LNCONTOUR*%
G90*
G70*
G54D10*
G54D11*
X4Y3320D02*
X3044Y3320D01*
X3044Y4D01*
X4Y4D01*
X4Y3320D01*
D02*
G04 End of contour*
M02*
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
; NON-PLATED HOLES START AT T1
; THROUGH (PLATED) HOLES START AT T100
M48
INCH
T1C0.125984
T100C0.030000
T101C0.032000
T102C0.035000
T103C0.040000
T104C0.045969
T105C0.031496
T106C0.039370
%
T1
X028451Y032048
X028451Y002048
X001451Y002048
X001451Y032048
T100
X016128Y020780
X009435Y007001
X015734Y026292
X015126Y020780
X007951Y013408
X009435Y005999
X008953Y013408
X014733Y026292
T101
X006451Y010048
X016175Y024930
X013325Y017615
X006451Y012048
X016175Y021930
X009451Y004048
X013325Y018615
X006451Y009048
X006451Y002048
X016325Y017615
X009451Y012048
X016175Y023930
X009451Y003048
X009451Y002048
X016325Y018615
X016175Y022930
X013325Y016615
X006451Y011048
X006451Y003048
X009451Y005048
X009451Y011048
X016325Y019615
X016325Y016615
X013175Y021930
X006451Y004048
X013175Y022930
X006451Y005048
X013175Y023930
X009451Y010048
X013175Y024930
X013325Y019615
X009451Y009048
T102
X018687Y023008
X013372Y007457
X001955Y009229
X022821Y020646
X022821Y016646
X021371Y020048
X021371Y016048
X011451Y017048
X021049Y012119
X003530Y010150
X018687Y019008
X003530Y009229
X003530Y014150
X011451Y008048
X001955Y005229
X011451Y022048
X011451Y007048
X003530Y005229
X017049Y012119
X011451Y013048
X011451Y018048
X013372Y003457
X018451Y014048
X011451Y003048
X018451Y018048
X011451Y012048
T103
X025356Y026303
X025356Y012524
X025356Y015280
X025356Y011146
X025356Y022169
X025356Y020791
X025356Y019414
X025356Y016658
X025356Y024925
X025356Y027681
X025356Y029059
X025356Y023547
X025356Y018036
X025356Y013902
T104
X020262Y007788
X019475Y002470
X017585Y007788
X016797Y002470
X016797Y007788
X017585Y002470
X018687Y007788
X019475Y007788
X018687Y002470
X020262Y002470
T105
X021215Y014678
X023215Y014678
T106
X008451Y022930
X008451Y025930
X008451Y016930
X008451Y019930
X008451Y018930
X008451Y024930
X008451Y017930
X008451Y020930
X008451Y021930
X008451Y023930
T00
M30
This diff is collapsed.
This diff is collapsed.
*Pick And Place List
*Company=
*Author=
*eMail=
*
*Project=card_measure_raspberry_v3.04
*Date=21:47:16
*CreatedBy=Fritzing 0.9.4.2019-12-01.CD-498-0-a1ffcea
*
*
*Coordinates in mm, always center of component
*Origin 0/0=Lower left corner of PCB
*Rotation in degree (0-360, math. pos.)
*
*No;Value;Package;X;Y;Rotation;Side;Name
1;;dip08;37.6566;-46.0127;90;Bottom;LM358-1
2;;THT;64.9137;-51.1885;0;Bottom;J6
3;1k;THT;29.0867;-50.9226;90;Bottom;R3
4;;;31.6324;-76.3844;0;Bottom;TXT3
5;;;72.2988;-45.686;0;Bottom;TXT2
6;50;THT;54.2835;-45.8426;-90;Bottom;R5
7;;;3.68675;-5.20256;0;Bottom;Hole4
8;100nF;100 mil [THT, multilayer];23.9666;-16.5079;-90;Bottom;C3
9;1.5k;THT;29.0867;-38.2226;90;Bottom;R4
10;10M;THT;48.3867;-30.7827;0;Bottom;R11
11;;;3.68675;-81.4026;0;Bottom;Hole3
12;;;72.2988;-31.6258;0;Bottom;TXT2
13;100nF;100 mil [THT, multilayer];21.4667;-34.0573;0;Bottom;C4
14;100nF;100 mil [THT, multilayer];39.692;-52.7827;0;Bottom;C2
15;;;72.2668;-81.4026;0;Bottom;Hole2
16;1k;THT;8.96676;-30.8626;90;Bottom;R7
17;1k;THT;47.4667;-53.3627;90;Bottom;R1
18;;;72.2986;-49.4567;0;Bottom;TXT2
19;;;72.2988;-42.2225;0;Bottom;TXT2
20;;;72.2987;-28.0842;0;Bottom;TXT2
21;;;56.4267;-37.2826;0;Bottom;Fuse1
22;;;14.7992;-54.4326;-90;Bottom;Composant1
23;1.5k;THT;8.96676;-18.3627;90;Bottom;R6
24;;dip08;37.2768;-59.5126;90;Bottom;LM358-2
25;;;72.2668;-5.20256;0;Bottom;Hole1
26;;;47.0689;-6.2461;0;Bottom;TRN3-1215
27;1k;THT;29.0867;-25.5226;90;Bottom;R9
28;;;60.2127;-12.9351;0;Bottom;TXT3
29;;;72.2987;-63.1096;0;Bottom;TXT2
30;;;51.2658;-40.8438;0;Bottom;TXT6
31;;;72.2986;-56.1372;0;Bottom;TXT2
32;;;72.2987;-66.3947;0;Bottom;TXT2
33;;;11.0396;-53.884;0;Bottom;TXT4
34;;;72.2987;-35.6898;0;Bottom;TXT2
35;;;72.2986;-52.4952;0;Bottom;TXT2
36;100nF;100 mil [THT, multilayer];38.6921;-66.7827;0;Bottom;C1
37;;;72.2986;-39.0222;0;Bottom;TXT2
38;10M;THT;4.96655;-18.3627;90;Bottom;R12
39;;dip08;20.1967;-9.01264;90;Bottom;LM358-3
40;;;72.2987;-59.6624;0;Bottom;TXT2
41;1.5k;THT;29.0867;-12.8226;90;Bottom;R8
42;1.5k;THT;46.8667;-40.7626;90;Bottom;R2
43;;;72.2987;-70.299;0;Bottom;TXT2
44;10M;THT;33.9666;-13.8626;90;Bottom;R13
45;;;51.9042;-52.5271;0;Bottom;TXT5
46;;;72.2985;-73.8911;0;Bottom;TXT2
47;10M;THT;57.9668;-47.3626;90;Bottom;R10
48;;dip08;20.1967;-26.7926;90;Bottom;LM358-4
49;;;47.0692;-19.7527;0;Bottom;TRN3-1215
G04 MADE WITH FRITZING*
G04 WWW.FRITZING.ORG*
G04 DOUBLE SIDED*
G04 HOLES PLATED*
G04 CONTOUR ON CENTER OF CONTOUR VECTOR*
%ASAXBY*%
%FSLAX23Y23*%
%MOIN*%
%OFA0B0*%
%SFA1.0B1.0*%
%ADD10R,3.047950X3.323970X3.031950X3.307970*%
%ADD11C,0.008000*%
%LNSILK0*%
G90*
G70*
G54D11*
X4Y3320D02*
X3044Y3320D01*
X3044Y4D01*
X4Y4D01*
X4Y3320D01*
D02*
G04 End of Silk0*
M02*
\ No newline at end of file
This diff is collapsed.
File added
...@@ -23,7 +23,7 @@ for i in range(0,100) : ...@@ -23,7 +23,7 @@ for i in range(0,100) :
GPIO.output(8, GPIO.HIGH) # current injection GPIO.output(8, GPIO.HIGH) # current injection
time.sleep(4) time.sleep(4)
for i in range(0,integer) : for i in range(0,integer) :
meas[0,i] = AnalogIn(ads,ADS.P0).voltage meas[0,i] = AnalogIn(ads,ADS.P3).voltage
GPIO.output(8, GPIO.LOW) GPIO.output(8, GPIO.LOW)
std=statistics.stdev(meas[0,:]) std=statistics.stdev(meas[0,:])
......
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