Autor Tema: Touch pad capacitivo usando un ADC  (Leído 23470 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Touch pad capacitivo usando un ADC
« 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 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
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!
« Última modificación: 17 de Julio de 2011, 22:39:43 por gera »

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado vtasco

  • PIC12
  • **
  • Mensajes: 72
Re: Touch pad capacitivo usando un ADC
« Respuesta #1 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


Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Touch pad capacitivo usando un ADC
« Respuesta #2 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!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Touch pad capacitivo usando un ADC
« Respuesta #3 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. }

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Touch pad capacitivo usando un ADC
« Respuesta #4 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:


Voy a seguir leyendo, a ver en donde le estoy errando..
Saludos!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Touch pad capacitivo usando un ADC
« Respuesta #5 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.


Desconectado vtasco

  • PIC12
  • **
  • Mensajes: 72
Re: Touch pad capacitivo usando un ADC
« Respuesta #6 en: 18 de Julio de 2011, 12:41:00 »
Gracias gera, le voy  a echar un vistazo a ese programa.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Touch pad capacitivo usando un ADC
« Respuesta #7 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

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado diguito_69

  • PIC16
  • ***
  • Mensajes: 136
Re: Touch pad capacitivo usando un ADC
« Respuesta #8 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.
"Carezco de un don especial. Sólo soy apacionadamente curioso". Albert Einstein.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Touch pad capacitivo usando un ADC
« Respuesta #9 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

Desconectado vtasco

  • PIC12
  • **
  • Mensajes: 72
Re: Touch pad capacitivo usando un ADC
« Respuesta #10 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!

Desconectado diguito_69

  • PIC16
  • ***
  • Mensajes: 136
Re: Touch pad capacitivo usando un ADC
« Respuesta #11 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.
"Carezco de un don especial. Sólo soy apacionadamente curioso". Albert Einstein.

Desconectado NANO1985

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
    • Desarrollos Tecnologicos - Tucuman - Argentina
Re: Touch pad capacitivo usando un ADC
« Respuesta #12 en: 20 de Julio de 2011, 12:28:59 »
que buen proyecto hermano!, te voy a observar muy de cerca!  ;-)
"La inquebrantable voluntad de vencer"
"hay dos cosas infinitas... El universo y la Estupidez humana" Albert Einstein
 "El sabio actua sin anhelos, permanece sosegado,... así no es afectado por el resultado de sus acciones sean éstas el triunfo o el fracaso"
- UNIVERSIDAD TECNOLOGICA NACIONAL - FACULTAD REGIONAL TUCUMAN -

Desconectado vtasco

  • PIC12
  • **
  • Mensajes: 72
Re: Touch pad capacitivo usando un ADC
« Respuesta #13 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!




Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Touch pad capacitivo usando un ADC
« Respuesta #14 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
"Nada es imposible, no si puedes imaginarlo"