Documentos de Académico
Documentos de Profesional
Documentos de Cultura
net/publication/331454245
conductimetro
CITATIONS READS
0 3,771
7 authors, including:
Some of the authors of this publication are also working on these related projects:
All content following this page was uploaded by Carlos Gerardo Chacon on 01 March 2019.
* mabullar@unal.edu.co
cgchaconr@unal.edu.co
laduenasb@unal.edu.co
srengifop@unal.edu.co Figura 1: Divisor de voltaje.
2
R2
Vout = Vin (4)
R1 + R2
L
σ= (5)
RA
desarollado sobre el cual se implemento el circuito del 1MOhmn, en la posición 1 la resistencia vale 10kOhmn y
puente H con el dipswitch selector de escala del cual se en la posición 2 la resistencia vale 1kOhmn. Estos valores
hablara mas adelante y al lado izquierdo la LCD Auxiliar son introducidos dentro del código para hacer los cálculos
donde se muestra como va el proceso de medida. posteriores.
Para facilitar la construcción del prototipo se uso un
shield genérico para Arduino como se muestra en la Fi-
gura 7
mil ohmnios, si esto no es ası́ repetir el proceso de na medida anterior, en caso tal deberá repetirse el
lavado hasta que el valor obtenido sea el correcto proceso de lavado
desocupar y secar la celda e introducir la sustancia cargar el código completo en el arduino e inmedia-
que se desea medir y observar su valor de resis- tamente después abrir la terminar serial para poder
tencia eléctrica, este valor debe ser estable en el recibir los datos del Arduino
tiempo y no cambiar a pesar de agitar el liquido, esperar a que la medición sea finalizada y guardar
si cambia significativamente probablemente la cel- los datos para su posterior analizáis
da se encuentre contaminada con residuos de algu- A continuación se explicara cada sección del código
El código que se carga en el Arduino básicamente consiste en un ciclo for donde se establece una temperatura
objetivo y se llama la función de calentamiento heat() la cual administra la potencia suministrada al calefactor
mediante un transistor MOSFET, una vez alcanzada dicha temperatura se llama a la función medirconductividad()
la cual obtiene el valor de resistencia eléctrica del liquido en base a tres medidas voltaje en los nodos del divisor de
voltaje para posteriormente enviar los datos via serial al computador.
Se configuran las librerı́as para poder usar los sensores y los periféricos
Definicion de variables
1 f l o a t Rk0=9 0 0 0 0 .0 ; f l o a t Rk1 = 9 9 0 .0 ; f l o a t Rk2=9 0 6 0 .0 ; f l o a t Rk3=9 0 2 .0 ;
2 // medir l a s r e s i s t e n c i a s de r e f e r e n c i a e i n t r o d u c i r l o s v a l o r e s
3 f l o a t Rk=Rk2 ;
4 f l o a t VT=0 ; f l o a t Vx=0 ; f l o a t Rx=0 ;
5 f l o a t v0=0 ; f l o a t v2=0 ; f l o a t v3=0 ;
6 f l o a t k=5 .0 / 1 0 2 3 .0 ; // f a c t o r de c o n v e r s i o n ADC
7 f l o a t umbral = 3 0 .0 0 ; f l o a t e s c a l o n = 2 .5 ; c o n s t f l o a t T l i m i t e=7 0 .0 0 ;
8 f l o a t roomt=0 .0 ; f l o a t temp = 0 ; i n t holdt = 25 ;
9 s t a t i c c h a r o u t s t r [ 5 ] ; S t r i n g d a t a S t r i n g =” ” ;
Se crean las variables globales que se van a usar a lo largo del código.
Funcion de impresión de datos en la LCD
Teniendo en cuenta que la forma correcta de imprimir datos en la LCD es un protocolo copioso se decide crear una
funcion que se encargue de esto
La función que controla el dispositivo calefactor
1 v o i d h e a t ( f l o a t umbral , i n t s e g u r o t ) {
2 s e n s o r s . r e q u e s t T e m p e r a t u r e s ( ) ; temp = s e n s o r s . getTempCByIndex ( 0 ) ;
3 i f ( temp >=0 ) {
4 f l o a t d i f e r e n c i a =(umbral−temp ) ; i n t pwm=0 ;
5 w h i l e ( d i f e r e n c i a >0 ) {
6 l c d p r i n t ( ” H e a t i n g T ” , temp , 2 , ” d e l t a ” , d i f e r e n c i a , 2 , 250 ) ;
7 i f ( d i f e r e n c i a >5 .0 ) { a n a l o g W r i t e ( Heater , 2 2 5 ) ; }
8 e l s e { pwm=i n t ( d i f e r e n c i a ∗ 4 5 ) ;
9 a n a l o g W r i t e ( Heater , pwm+s e g u r o t ) ; }
10 s e n s o r s . r e q u e s t T e m p e r a t u r e s ( ) ; temp = s e n s o r s . getTempCByIndex ( 0 ) ;
11 d i f e r e n c i a =(umbral−temp ) ;
12 }
13 i f ( d i f e r e n c i a <=0 ) { a n a l o g W r i t e ( Heater , s e g u r o t ) ;
14 l c d p r i n t ( ” Hold T ” , temp , 2 , ” d e l t a ” , d i f e r e n c i a , 2 , 1000 ) ; }
15 } e l s e { a n a l o g W r i t e ( Heater , s e g u r o t ) ; }
16 }
6
Esta función se encarga de pedir el dato de temperatura al termómetro digital DS18B20 y verificar que la
información recibida corresponda a una temperatura mayor que cero(usualmente los errores en el protocolo de
comunicación Onewire suelen aparecer como -127.0 grados C ), una vez confirma que la temperatura es valida
obtiene la diferencia entre la temperara objetivo y la temperatura medida en el liquido y escribe el valor del PWM
entre 0-255 en el puerto de salida del calefactor a través del MOSFET de manera proporcional a dicha diferencia,
cuando la diferencia se hace cero escribe como valor PWM la cantidad Holdt que se asegura de mantener la
temperatura compensando la perdidas de calor en el sistema mientras se toman las medidas de resistencia eléctrica.
Manejo del puente H y medición de la resistencia eléctrica
1 void medirconductividad ( ) {
2 d i g i t a l W r i t e ( Led , HIGH) ; d i g i t a l W r i t e ( I 1 , HIGH) ;
3 d i g i t a l W r i t e ( I 2 , LOW) ; d i g i t a l W r i t e (E0 , HIGH) ;
4 Vx=0 ; VT=0 ; // v0 =0; v2 =0; v3 =0;
5 f o r ( i n t i=0 ; i <1 2 8 ; i ++) {
6 delayMicroseconds ( 10 ) ;
7 v3 = analogRead (A3 ) ; v0 = analogRead (A0 ) ; v2 = analogRead (A2 ) ;
8 VT+=v3−v2 ; Vx+=v0−v2 ; }
9 d i g i t a l W r i t e ( I 1 , LOW) ; d i g i t a l W r i t e ( I 2 , HIGH) ;
10 d i g i t a l W r i t e ( Led , LOW) ; d e l a y ( 4 9 ) ; // d e l a y M i c r o s e c o n d s ( 5 0 0 0 ) ;
11 d i g i t a l W r i t e (E0 , LOW) ;
12 VT/=1 2 8 ; Vx/=1 2 8 ; VT∗=k ; Vx∗=k ; Rx=Vx∗Rk/ (VT−Vx) ;
13 }
La medida de conductividad se hace activando el puente H y acumulando 128 mediciones sobre cada uno de los tres
puntos del divisor de tensión para después promediar estas medidas y multiplicarlas por el factor de escala k y ası́
calcular el valor de la resistencia de la celda
Configuracion e inicializacion de los puertos y sensores
conectados al arduino
1 void setup ( ) {
2 Serial . begin ( 9600 ) ;
3 pinMode ( Heater ,OUTPUT) ;
4 pinMode (E0 , OUTPUT) ; pinMode ( Led , OUTPUT) ;
5 pinMode ( I 1 , OUTPUT) ; pinMode ( I 2 , OUTPUT) ;
6 d i g i t a l W r i t e (E0 , LOW) ; a n a l o g W r i t e ( Heater , 0 ) ;
7 l c d . begin ( 16 , 2 ) ; lcd . backlight () ;
8 sensors . begin () ; delay ( 750 ) ;
9 }
1 void loop ( ) {
2 S e r i a l . p r i n t l n ( ” Temperatura , R e s i s t e n c i a ” ) ;
3 m e d i r c o n d u c t i v i d a d ( ) ; // d e l a y ( 5 0 0 0 ) ;
4 S e r i a l . p r i n t ( roomt ) ; S e r i a l . p r i n t ( ” ” ) ; S e r i a l . p r i n t l n (Rx) ;
5 w h i l e ( umbral<=T l i m i t e ) {
6 h e a t ( umbral , h o l d t ) ;
7 medirconductividad () ;
8 // w h i l e ( temp<0) ;
9 S e r i a l . p r i n t ( temp ) ; S e r i a l . p r i n t ( ” ” ) ; S e r i a l . p r i n t l n (Rx) ;
10 umbral+=e s c a l o n ;
11 }
12 S e r i a l . p r i n t l n ( ” Medida f i n a l i z a d a ” ) ;
13 }
El Loop principal consiste en tomar la medida de temperatura y conductividad en temperatura ambiente, calentar el
liquido hasta el primer umbral, medir, enviar datos y cambiar el umbral de temperatura objetivo para repetir el
ciclo hasta alcanzar la temperatura Limite
IV. DIFICULTADES ENCONTRADAS Y Los electrodos de grafito usados, diámetro de 2mm
SUGERENCIAS. aproximadamente, son muy quebradizos ante pe-
queños esfuerzos tangenciales, por lo que se reco-
Al realizar este proyecto encontramos las siguientes mienda usar electrodos de un diámetro mayor.
dificultades:
7
3000
Conductividad [μS/cm]
2500
El rango de temperatura de estudio esta acotado
por la temperatura ambiente y la máxima tempe- 2000
Agua de grifo
Agua destilada
Agua de grifo hervida
Agua inyectable 5g/L de sacarosa
Dextroxa 50g/L
V. ANÁLISIS Y RESULTADOS
3500
3000
2500
VI. CONCLUSIONES
2000
1500
La conductividad eléctrica es muy sensible a cam-
1000
bios pequeños en las concentraciones de solutos; lo
500
cual hace que sea una medida muy confiable de la
0
20 25 30 35 40 45 50 55 60 65 70 pureza del agua, o cualquier liquido.
Temperatura [°C] Los mejores electrodos para realizar las medidas de
0.09g/L Nacl 0.9g/L Nacl 9g/L Nacl conductividad son los que están hechos por mate-
riales no ionizantes y conductores como es el caso
del grafito.
Figura 10: Conductividad eléctrica del agua para va- A mayor concentración de NaCl en el agua la con-
rias concentraciones de sal en función de la temperatura. ductividad eléctrica de esta aumenta drasticamen-
te, en valores del doble o 3/2 del anterior.
En la figura 10 es posible observar el comportamiento Se pudo encontrar una constante de calibración pa-
del agua con N aCl, para diferentes concentraciones, ra el agua que da cuenta de los factores geométricos
clasificando claramente como varia drasticamente la de los electrodos y que permite hallar la conducti-
conductividad en función de la temperatura, o vidad eléctrica de manera fiable, para rangos de
simplemente a una temperatura fija; los cambian como temperatura entre 0 y 100 grados.
el doble del anterior para cambios en gramos de la El software Arduino usado, reduce el coste, permite
concentración por un litro, es decir, la conductividad automatizar el sistema de medida, es compacto y
eléctrica es una medida muy sensible a cualquier portátil.
VIII. ANEXOS
1 #i n c l u d e <L i q u i d C r y s t a l I 2 C . h>
2 #i n c l u d e <Wire . h>
3 #i n c l u d e <OneWire . h>
4 #i n c l u d e <D a l l a s T e m p e r a t u r e . h>
5 #d e f i n e ONE WIRE BUS 2
6 #d e f i n e H e a t e r 3
7 #d e f i n e I 1 4 // c o n e c t a r a l d r i v e 1 d e l L293d
8 #d e f i n e I 2 5 // c o n e c t a r a l d r i v e 2 d e l L293d
9 #d e f i n e Led 6
10 #d e f i n e E0 7
11 OneWire oneWire (ONE WIRE BUS) ;
12 D a l l a s T e m p e r a t u r e s e n s o r s (&oneWire ) ;
13 L i q u i d C r y s t a l I 2 C l c d ( 0 x27 , 2 , 1 , 0 , 4 , 5 , 6 , 7 , 3 , POSITIVE ) ;
14
15 f l o a t Rk0 = 9 0 0 0 0 . 0 ; f l o a t Rk1 = 9 9 0 . 0 ; f l o a t Rk2 = 9 0 6 0 . 0 ; f l o a t Rk3 = 9 0 2 . 0 ; // medir l a s r e s i t e n c i a s
de r e f e r e n c i a e i n t r o d u c i r l o s v a l o r e s a q u i
16 f l o a t Rk=Rk2 ; // v e r i f i c a r l a p o s i c i o n d e l d i p s w i t c h
17 f l o a t VT=0; f l o a t Vx=0; f l o a t Rx=0; f l o a t v0 =0; f l o a t v2 =0; f l o a t v3 =0; // v a r i a b l e s g l o b a l e s
18 f l o a t k = 5 . 0 / 1 0 2 3 . 0 ; \\ f a c t o r de c o n v e r s i o n adc
19 f l o a t umbral = 3 0 . 0 0 ; f l o a t e s c a l o n = 2 . 5 ; c o n s t f l o a t T l i m i t e = 7 0 . 0 0 ;
20 f l o a t roomt = 0 . 0 ; f l o a t temp = 0 ; i n t holdt = 15;
21 s t a t i c c h a r o u t s t r [ 5 ] ; S t r i n g d a t a S t r i n g =” ” ;
22
23 void l c d p r i n t ( String a , f l o a t b , i n t c , String d , f l o a t e , i n t f , i n t t ) {
24 lcd . clear () ;
25 l c d . s e t C u r s o r ( 0 , 0 ) ; // e s c r i b e en l a f i l a 1 columna 1
26 lcd . print (a) ; lcd . print (b , c ) ;
27 l c d . s e t C u r s o r ( 0 , 1 ) ; // pasa a l a f i l a 2
28 lcd . print (d) ; lcd . print (e , f ) ;
29 delay ( t ) ; }
30
31 v o i d h e a t ( f l o a t umbral , i n t s e g u r o t ) {
32 s e n s o r s . r e q u e s t T e m p e r a t u r e s ( ) ; temp = s e n s o r s . getTempCByIndex ( 0 ) ;
33 i f ( temp >=0){
34 f l o a t d i f e r e n c i a =(umbral−temp ) ; i n t pwm=0;
35 w h i l e ( d i f e r e n c i a >0){
36 l c d p r i n t ( ” H e a t i n g T ” , temp , 2 , ” d e l t a ” , diferencia ,2 ,250) ;
37 i f ( d i f e r e n c i a >5.0) { a n a l o g W r i t e ( Heater , 2 2 5 ) ; }
38 e l s e { pwm=i n t ( d i f e r e n c i a ∗ 4 5 ) ;
39 a n a l o g W r i t e ( Heater , pwm+s e g u r o t ) ; }
40 s e n s o r s . r e q u e s t T e m p e r a t u r e s ( ) ; temp = s e n s o r s . getTempCByIndex ( 0 ) ;
41 d i f e r e n c i a =(umbral−temp ) ;
42 }
43 i f ( d i f e r e n c i a <=0){ a n a l o g W r i t e ( Heater , s e g u r o t ) ;
44 l c d p r i n t ( ” Hold T ” , temp , 2 , ” d e l t a ” , diferencia ,2 ,1000) ; }
45 } e l s e { a n a l o g W r i t e ( Heater , s e g u r o t ) ; }
46 }
47
48 void medirconductividad ( ) {
49 d i g i t a l W r i t e ( Led , HIGH) ; d i g i t a l W r i t e ( I1 , HIGH) ; d i g i t a l W r i t e ( I2 , LOW) ; d i g i t a l W r i t e ( E0 ,
HIGH) ;
50 Vx=0; VT=0; // v0 =0; v2 =0; v3 =0;
51 f o r ( i n t i =0; i <128; i ++) {
52 delayMicroseconds (10) ;
53 v3 = analogRead (A3) ; v0 = analogRead (A0) ; v2 = analogRead (A2) ;
54 VT+=v3−v2 ; Vx+=v0−v2 ;
55 }
56 d i g i t a l W r i t e ( I1 , LOW) ; d i g i t a l W r i t e ( I2 , HIGH) ; d i g i t a l W r i t e ( Led , LOW) ; d e l a y ( 4 9 ) ; //
delayMicroseconds (5000) ;
57 d i g i t a l W r i t e ( E0 , LOW) ;
58 VT/=128;Vx/=128; VT∗=k ; Vx∗=k ; Rx=Vx∗Rk/ (VT−Vx) ;
59 }
60 void calibrartemp ( ) {
61 sensors . requestTemperatures () ; roomt = s e n s o r s . getTempCByIndex ( 0 ) ;
10