TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: gera en 17 de Julio de 2011, 22:30:30

Título: Touch pad capacitivo usando un ADC
Publicado por: gera en 17 de Julio de 2011, 22:30:30
Hola amigos!!!! Paso a compartir con ustedes un pequeño trabajo q estoy haciendo. La idea es hacer un capaciflector (http://www-cdr.stanford.edu/touch/previous_projects/capaciflector/capaciflector.html) que permita a un robot detectar objetos cercanos. Pero para eso primero tengo q hacer un sensor capacitivo. Estuve leyendo bastante, y uno de los metodos mas simples que encontre es el que describe microchip en su app note AN1298 (http://ww1.microchip.com/downloads/en/AppNotes/01298A.pdf)
Explico brevemente como funciona (para mas detalles leer la app note):
El sensor es una seccion de conductor cualquiera (como una plancha de cobre) q se conecta directamente a un canal del ADC. El metodo funciona cargando el capacitor de retencion del ADC, y descargando el capacitor de sensado. Cuando cambiamos el canal del ADC al sensor, ambos capacitores constituyen un divisor de tension, y el ADC entrega una lectura proporcional a la capacidad del sensor.

Les dejo el codigo fuente en CCS, y un pequeño video q hice:

Código: C
  1. #include <16F877a.h>
  2. #fuses XT,NOWDT,NOPROTECT,NOLVP,PUT
  3. #DEVICE ADC=10
  4. #use delay(clock=4M)
  5. #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
  6.  
  7.  
  8. void main(){
  9.    unsigned long value=0;
  10.    delay_ms(10);
  11.    setup_adc_ports(AN0);
  12.    setup_adc(ADC_CLOCK_INTERNAL);
  13.    
  14.    while(TRUE){
  15.       set_tris_a(0b11111100); //Drive secondary channel to VDD as digital output.
  16.       output_high(PIN_A1);
  17.       set_adc_channel(1); //Point ADC to the secondary VDD pin (charges CHOLD to VDD)
  18.      
  19.       output_low(PIN_A0); //Ground sensor line.
  20.       set_tris_a(0b11111101); //Turn sensor line as input (TRISx = 1).
  21.       set_adc_channel(0);//Point ADC to sensor channel (voltage divider from sensor to CHOLD).
  22.      
  23.       value=read_adc();//Begin ADC conversion.
  24.       printf("%lu\n",value);
  25.       delay_ms(50);
  26.    }  
  27. }

Espero q les sea útil!! Y como siempre, cualquier critica/sugerencia es bienvenida! Saludos!
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: vtasco en 17 de Julio de 2011, 23:47:24
Hola, se ve que funciona muy bien, excelente!!

Quisiera hacerte una consulta: qué  programa usas en el PC para graficar la data???


avr

Título: Re: Touch pad capacitivo usando un ADC
Publicado por: gera en 18 de Julio de 2011, 00:25:18
Es un pequeño programa que hice en processing, lo unico q hace es graficar una linea del tamaño del dato q llega. Si queres te lo paso.

Quiero probar otros metodos para medir capacidad, como medir el tiempo de descarga del capacitor, o la frecuencia de un oscilador de relajacion. Si alguien tiene algo hecho le agradeceria q lo comparta :)
saludos!
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: Nocturno en 18 de Julio de 2011, 01:49:17
Hace poco implementé el mismo sistema en un proyecto con un pic12F y funciona estupendamente. Yo hago 32 lecturas y saco la media, para evitar falsos positivos, si llega algún dato erróneo.
Código: C
  1. int16 LeeCVD() {
  2.    
  3.    set_adc_channel(1);
  4.    read_adc();
  5.    output_high(PIN_A1);
  6.    output_low(PIN_A0);
  7.    output_float(PIN_A0);
  8.    set_adc_channel(0);
  9.    return(read_adc());
  10. }
  11.  
  12. int16 PromedioCVD() {
  13.    int16 promed,i;
  14.    promed=0;
  15.    for (i=0;i<32;i++) {
  16.       promed+=LeeCVD();
  17.    }
  18.    promed/=32;
  19.    return(promed);
  20. }
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: gera en 18 de Julio de 2011, 02:01:54
Es cierto!! la lectura q yo estoy haciendo es bastante ruidosa. Voy a implementar lo del promedio ;)
En tu codigo no deberias poner en alto el pin_A1 antes de hacer la lectura?? Ademas segun lo que lei, no hace falta hacer la lectura, con solo cambiar el canal ya quedaria cargado el capacitor. Corregime si me equivoco.

De paso les comento que acabo de probar el metodo del oscilador de relajacion y funciona bastante bien. Luego trate de hacer el capaciflector a ver si aumentaba la distancia de sensado, pero no tuve suerte :(
El circuito q use es este:
(http://www-cdr.stanford.edu/touch/previous_projects/capaciflector/rel_osc.gif)

Voy a seguir leyendo, a ver en donde le estoy errando..
Saludos!!
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: Nocturno en 18 de Julio de 2011, 02:26:32
Pues estuve haciendo cambios en el proceso de carga del ADC porque pillaba mucho ruido y de esta manera es de la que conseguí un mejor funcionamiento. Fíjate que hay un read_adc() también al principio.

Título: Re: Touch pad capacitivo usando un ADC
Publicado por: vtasco en 18 de Julio de 2011, 12:41:00
Gracias gera, le voy  a echar un vistazo a ese programa.
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: gera en 18 de Julio de 2011, 19:49:29
Pues estuve haciendo cambios en el proceso de carga del ADC porque pillaba mucho ruido y de esta manera es de la que conseguí un mejor funcionamiento. Fíjate que hay un read_adc() también al principio.
Entonces voy a probar yo tambien a ver q resultados obtengo. Muchas gracias por el dato Manolo!! :)

Gracias gera, le voy  a echar un vistazo a ese programa.
Ojo, processing no es un programa para graficar, es un lenguaje de programacion (y su ide). Lo que yo hice fue escribir un programa en processing para leer los datos y graficarlos. Si te interesa graficar datos enviados por el puerto serie, echale un vistazo a este hilo http://www.todopic.com.ar/foros/index.php?topic=35482
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: diguito_69 en 20 de Julio de 2011, 03:49:34
Hola, hace un par de semanas empece a portar el código de la app note AN1298 a sdcc y hace unos días empece a hacer mi propia librería, tengo pensado postearla cuando la termine, explicando su uso, pero les adjunto lo que voy haciendo por si le sirve a alguien.

Se pueden utilizar hasta 16 sensores que es el máximo numero de canales adc que encontré en la serie 18F.
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: Nocturno en 20 de Julio de 2011, 07:27:56
Ahora que estáis con el tema, os lanzo una pregunta a los que lo habéis probado. Yo no puedo probarlo ahora mismo porque el prototipo lo tiene ya mi cliente.

Si ponéis sobre el touchpad algunos materiales como metacrilato, papel, madera o cartón, ¿sigue funcionando bien?, ¿con qué material y qué espesor va bien y con cuál no?

Gracias
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: vtasco en 20 de Julio de 2011, 11:35:47
...
Ojo, processing no es un programa para graficar, es un lenguaje de programacion (y su ide). Lo que yo hice fue escribir un programa en processing para leer los datos y graficarlos. Si te interesa graficar datos enviados por el puerto serie, echale un vistazo a este hilo http://www.todopic.com.ar/foros/index.php?topic=35482

gracias gera, el nuevo terminal que hizo LABmouse está muy bueno, pero quiero aprender a graficar señales dentro de alguna aplicación propia, algo he buscado (me acuerdo de una herramienta que se llama zedgraph) , pero por tiempo no he podido probar nada aún.


gracias!
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: diguito_69 en 20 de Julio de 2011, 12:24:15
Ahora que estáis con el tema, os lanzo una pregunta a los que lo habéis probado. Yo no puedo probarlo ahora mismo porque el prototipo lo tiene ya mi cliente.

Si ponéis sobre el touchpad algunos materiales como metacrilato, papel, madera o cartón, ¿sigue funcionando bien?, ¿con qué material y qué espesor va bien y con cuál no?

Gracias

Yo probé sobre plástico y vidrio de unos 3 o 4 mm, aparentemente funciona bien, tendría que hacer mas pruebas pero hoy ando sin tiempo.
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: NANO1985 en 20 de Julio de 2011, 12:28:59
que buen proyecto hermano!, te voy a observar muy de cerca!  ;-)
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: vtasco en 20 de Julio de 2011, 12:56:43
He mirado algunos ejemplos de la página de proccessing y son ¡muy buenos!

hay uno de fluidos que está de pelos!



Título: Re: Touch pad capacitivo usando un ADC
Publicado por: rivale en 20 de Julio de 2011, 15:39:06
Ahora que estáis con el tema, os lanzo una pregunta a los que lo habéis probado. Yo no puedo probarlo ahora mismo porque el prototipo lo tiene ya mi cliente.

Si ponéis sobre el touchpad algunos materiales como metacrilato, papel, madera o cartón, ¿sigue funcionando bien?, ¿con qué material y qué espesor va bien y con cuál no?

Gracias

Hola Nocturno, yo estoy realizando un teclado capacitivo usando el mtouch de microchip (en cuanto lo ponga bonito subo un video :mrgreen:). lo hice funcionar con un vidrio de medio centimetro y un acrilico de 3mm, uno encima del otro, y funciona muy bien, solo que hay que calibrarlo. desconozco cual sea el limite de espesor, ya que lo probe asi porque eran lo requerimientos que me pidieron.




gracias gera, el nuevo terminal que hizo LABmouse está muy bueno, pero quiero aprender a graficar señales dentro de alguna aplicación propia, algo he buscado (me acuerdo de una herramienta que se llama zedgraph) , pero por tiempo no he podido probar nada aún.
gracias!
.


creo que lo mas personalizado es usar visual studio(como el de labmouse).

depende de tus conocimientos te programacion, algo mas sensillo es usar matlab o labview para hacer una graficacion de datos desde el puerto serie
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: gera en 20 de Julio de 2011, 20:11:44
Ahora que estáis con el tema, os lanzo una pregunta a los que lo habéis probado. Yo no puedo probarlo ahora mismo porque el prototipo lo tiene ya mi cliente.

Si ponéis sobre el touchpad algunos materiales como metacrilato, papel, madera o cartón, ¿sigue funcionando bien?, ¿con qué material y qué espesor va bien y con cuál no?

Gracias

Yo hice pruebas con papel y vidrio, pero no hubo mucha diferencia. Eso si, fueron pruebas a las apuradas. Ahora voy a armar algo como corresponde y les cuento q tal me fue.
En este momento estoy armando el capaciflector con capas de papel aluminio y tergopol (poliestireno expandido), es algo asi como una bigmac jaja. Cuando termine subo fotos.
saludos!!
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: samshiel_pic en 21 de Julio de 2011, 03:23:48
Hola chicos! Tengo una duda como cuanto puede estar de lejos el touchpad del lo que es el microcontrolador? Lo digo porque se me ocurre una idea para hacer un teclado super slim. El touchpad se podría hacer con unas láminas de papel de cobre(super finas) y moldear los botones con el.  La idea es poder poner en nuestras cajas o gabinetes una pegatina con la serigrafia de los botones (flechas, explicaciones, dibujos,...) Y por detrás los touch pad pegados entre el gabinete y la pegatina del mismo. Quedando todo a un mismo relieve.   
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: Nocturno en 21 de Julio de 2011, 06:49:11
Creo que no hay problema en poner el micro cerca pero, ¿no es mejor si pegas la PCB a la pared interna de la caja, y la pegatina por fuera. El touchpad debería ser sensible a través de la pared de la caja, y así evitas que se estropee.
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: samshiel_pic en 21 de Julio de 2011, 13:08:00
También. :D
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: gera en 21 de Julio de 2011, 15:50:38
Bueno, ya arme mi primer capaciflector e hice las primeras pruebas. Primero que nada quiero consultarles si les parece que abra otro hilo para tratar el tema del capaciflector e ir contando mi experiencia (y la de los que se sumen conmigo) y dejamos este hilo para tecnicas de sensado de capacidades o algo por el estilo. Les parece?

Mientras les voy comentando como me fue con la construccion del aparato. Los materiales que utilice son muy faciles de conseguir y baratos: una bandeja de telgopor (http://www.papeleralaslomas.com.ar/descartables/154descartableg.jpg), papel aluminio, cola vinilica, y un par de amplificadores operacionales (yo probe con el TL084CN y el LM324N).
(http://img641.imageshack.us/img641/2509/1002804uz.th.jpg) (http://imageshack.us/photo/my-images/641/1002804uz.jpg/)

Corte tres rectangulos de papel aluminio: uno de 13cm de largo y 6cm de alto que corresponde a la capa GND, otro de 8mm menos (tanto de largo como de alto) q el anterior para la capa shield, y por ultimo otro de 8mm menos que el anterior para la capa de sensado.
(http://img641.imageshack.us/img641/6118/1002809c.th.jpg) (http://imageshack.us/photo/my-images/641/1002809c.jpg/)

Luego intente soldar un cable a cada plancha de aluminio, pero se me hizo muy dificil, el estaño no se adheria al aluminio. Quizas en el proximo modelo simplemente pinche el papel con el cable.
Despues pegue todas las capas con cola vinilica como si fuera un sandwich, colocando las placas de la siguiente manera:
Telgopor - GND - Telgopor - Shield - Telgopor - Sensor - Telgopor
(http://img832.imageshack.us/img832/2050/1002814q.th.jpg) (http://imageshack.us/photo/my-images/832/1002814q.jpg/)

Y listo!! A probarlo! Arme el oscilador de relajación, conecte todo y me puse a hacer pruebas. En principio funciona, al acercar mi mano se ve una variacion en el periodo de oscilación (por lo tanto en la capacidad). Pero esta variacion comienza a notarse cuando acerco mi mano a unos 5cm del sensor y no me convence para nada. Se supone que el hecho de "reflejar" las lineas de campo aumentan mucho mas esta distancia.


Voy a ver si encuentro mas informacion y seguire haciendo pruebas. Saludos!!
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: MLO__ en 21 de Julio de 2011, 16:53:16
Muy interesante ...  :-/

Saludos
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: rivale en 21 de Julio de 2011, 22:57:31
tiene muy buena distancia de sensado, una pregunta, crees que se pueda usar para diferenciar distintos materiales?, en teoria diferentes materiales(con diferente rigidez dielectrica) te darian una variacion diferente en la frecuencia ubicados a la misma distancia.
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: gera en 21 de Julio de 2011, 23:31:35
Muy interesante ...  :-/

Saludos

Gracias!! :)

tiene muy buena distancia de sensado, una pregunta, crees que se pueda usar para diferenciar distintos materiales?, en teoria diferentes materiales(con diferente rigidez dielectrica) te darian una variacion diferente en la frecuencia ubicados a la misma distancia.
Claro que se puede, en las pruebas utilice distintos objetos de distintos materiales, como madera, carton, metal y carne (mi mano jeje), y todos provocan variaciones diferentes. El problema es que hay muchos factores que afectan a la medicion, como la temperatura, la humedad del ambiente, etc...

De paso les cuento que hice un pequeño programa para medir el periodo de oscilacion con un pic y graficarlo en la pc. He aqui el resultado:
Como ven, el sensor solo es sensible en una de sus caras. Y la variacion es exponencial con respecto a la distancia.
Ahora solo me queda ir probando distintos materiales y configuraciones para el sensor, a ver que resultados obtengo. Supuestamente a mayor superficie deberia aumentar la distancia de sensado, y ademas lei que se puede dar forma parabolica al sensor para "enfocarlo". Los voy a mantener al tanto de mis avances :wink:

saludos!!
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: rivale en 21 de Julio de 2011, 23:51:05
 :-) muy buena la respuesta del sensor, de hecho por lo que veo en el video cuando lo volteas estas sensando el teclado de tu lap y aunque esta  a la menor distancia posible su respuesta es menor que cuando acercas tu mano completamente. la variacion de respuesta es muy buena entre el material del teclado y la carne :D

seguire de cerca tus avances

Saludos


P.D. te hice una pregunta en el post del robot equilibrista :rolleyes:, espero me puedas ayudar
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: flacoclau en 22 de Julio de 2011, 01:36:28
Muy bueno Gera!! Me uno al hilo!! saludos!!
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: Nocturno en 22 de Julio de 2011, 01:45:10
Una chulada ese condensador, Gera. Felicidades.

Si quieres abrir un hilo nuevo, puedo moverte los mensajes de este hilo a partir del capaciflector.
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: gera en 22 de Julio de 2011, 09:59:28
Muchas gracias!! Siempre es una gran motivacion recibir sus halagos :D

:-) muy buena la respuesta del sensor, de hecho por lo que veo en el video cuando lo volteas estas sensando el teclado de tu lap y aunque esta  a la menor distancia posible su respuesta es menor que cuando acercas tu mano completamente. la variacion de respuesta es muy buena entre el material del teclado y la carne :D

seguire de cerca tus avances

Saludos
Exacto, cuando lo di vuelta sensaba la notebook, pero la medicion era menor no solo por el material, sino porq la parte del teclado es "menos densa" que mi mano, hay mucho espacio vacio (mejor dicho lleno de aire) bajo las teclas. Pero sí, la medición depende exclusivamente del material que se use y su densidad (ademas de todos los factores climaticos q te dije mas arriba).

Una chulada ese condensador, Gera. Felicidades.

Si quieres abrir un hilo nuevo, puedo moverte los mensajes de este hilo a partir del capaciflector.

Muchas gracias!! :) Creo q va a ser mejor abrir un nuevo hilo, asi podemos tratar especificamente el tema del capaciflector. Ahi puedo explicar bien de q se trata y voy compartiendo mis experimentos.
Lo voy abriendo con una introduccion sobre qué es un capaciflector.
Saludos!!
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: gera en 22 de Julio de 2011, 11:12:06
Ya abrí el nuevo hilo, es este: http://www.todopic.com.ar/foros/index.php?topic=35542.0
Saludos!!
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: rivale en 22 de Julio de 2011, 11:18:34
gracias por el aviso, me mudo para alla  :D
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: diguito_69 en 26 de Julio de 2011, 21:08:30
Hola, en el primer vídeo del touchpad capacitivo, que valores obtenés del adc mas o menos, yo obtengo unos 648 sin tocar el sensor, si cambio el sensor, cambia ese valor pero es siempre estable, no varia mas de 2 o 3.

Dos preguntas mas, tocas directamente el cobre o esta aislado?,  estas tocando GND al mismo tiempo que el sensor?.

(http://diguito69.zobyhost.com/touch.png)

En esta imagen, los toques 1 y 2, son directamente sobre el cobre, 3, 4 y 5 sobre el cobre y tocando GND, 6 y 7 aislado y 8, 9 y 10 aislado y tocando GND. En los toques 1, 2, 6 y 7 hay mucho ruido que todavía no puedo eliminar. Los pude eliminar casi al 100% pero a costa de varios ciclos de CPU y memoria. Aunque para un solo sensor no es mucho, tengo pensado utilizar los 13 canales adc que trae el 18F4455.

Supongo que mi problema debe ser de hardware.


Título: Re: Touch pad capacitivo usando un ADC
Publicado por: gera en 26 de Julio de 2011, 22:43:00
No se exactamente que valor me devolvia el ADC, pero hay una gran diferencia en el valor cuando toco o no el sensor. Probe tocando el cobre directamente y poniendo un dielectrico en el medio, ambas formas son muy efectivas.
El hardware no es muy complicado, simplemente conectas un pedazo de cobre (o cualquier conductor) al ADC. La magia de este metodo es la secuencia de configuracion del ADC. Mas arriba vas a encontrar ejemplos en C, proba con esos.
saludos!!
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: diguito_69 en 27 de Julio de 2011, 05:43:26
Ese es el método que estoy usando pero todavía no logro hacer que funcione correctamente. Ya encontré en parte el problema, al parecer estaba usando mal la función que espera la conversión del ADC en sdcc, si bien mejoro bastante la lectura, todavía tiene bastante ruido y poca diferencia entre tocarlo y no tocarlo.  Por eso pienso que puede ser problema de ruidos de fuente o algo asi.
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: gera en 27 de Julio de 2011, 11:32:32
El ruido lo disminuis tomando varias muestras y promediandolas. Fijate bien en la nota de aplicacion que puse en el primer post, salen bien explicados los pasos para configurar el ADC.
saludos!
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: diguito_69 en 30 de Julio de 2011, 03:51:51
Gracias por responder. Ya lo solucione, tenia problemas con la configuración del ADC. Ya tengo casi lista una librería para sdcc, ahora me falta ver el tema de los sliders, alguna idea?. Saludos.
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: gera en 30 de Julio de 2011, 15:46:42
Para un slider podes darle forma triangular al cobre, entonces cuando pongas el dedo en un extremo el área de contacto va a ser menor, por lo tanto la capacidad también. Inclusive podes poner dos triangulos de modo que la medida de uno sea el complemento del otro (como en la imagen que adjunto) y asi evitar que la medicion este afectada por factores externos, ya que vas a medir el nivel de capacidad de un triangulo en relacion al otro. Espero haber sido claro, no se si me explique bien.
Saludos!!
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: jhozate en 08 de Diciembre de 2011, 20:02:43
hola, quiero ver como va lo del slider, para lo cual adoptaré solo un triangulo de la geometría del mensaje anterior, la duda es si segun la lectura del ADC da igual donde agujere la placa, extremo derecho o extremo izquierdo. Para no tirarme la zona de deslizamiento podría sacar pista desde la hipotenusa hasta la zona blanca y de ahi directo al adc?
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: diguito_69 en 09 de Diciembre de 2011, 01:12:43
Hola, yo abandone el tema de los touch y el slider, voy a ver si algún día retomo este tema. No se si la posición del agujero afecte la lectura, las imágenes que e visto lo tienen en la parte mas gruesa del slider, en tu imagen es la derecha. Si no queres agujerear sobre la zona del slider, podrías sacar una pista desde la parte mas gruesa. Saludos.
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: gera en 09 de Diciembre de 2011, 12:51:33
Te dejo una appnote que te va a ayudar con esa duda ;-) tiene un apartado para sliders.

http://www.freescale.com/files/sensors/doc/app_note/AN3863.pdf
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: Nocturno en 09 de Diciembre de 2011, 14:11:52
Muy interesante esa nota, muchas gracias Gera.
Título: Re: Touch pad capacitivo usando un ADC
Publicado por: jhozate en 09 de Diciembre de 2011, 14:39:55
gracias gera  ;-)