Tabla de contenido:
Video: Táctil capacitivo con microcontrolador PIC16F886: 3 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:43
En este tutorial repasaremos cómo puede usar un microcontrolador PIC16F886 para detectar diferencias en la capacitancia, esto luego se puede usar para saber si se está presionando un panel táctil. Es bueno estar familiarizado con los microcontroladores pic antes de realizar este proyecto.
Paso 1: Conecte su circuito
Primero, comencemos por cablear el circuito de acuerdo con el esquema anterior. Para hacer el panel táctil, puede doblar papel de aluminio en un cuadrado y pegarlo con cinta adhesiva. Puede experimentar con diferentes valores para la resistencia de 100k, encontré que 100k funcionó bien para mí.
El pin RC4 se usa para comenzar a cargar / descargar la capacitancia que se va a medir. C12IN0 está conectado al lado - de un comparador interno y el pin C1IN está conectado al lado + del mismo comparador. El microcontrolador considera que la capacitancia está completamente cargada cuando el voltaje C12IN0 supera el voltaje C1IN. El divisor de voltaje resistivo asegura que C1IN esté cerca de 5 voltios.
Dado que el panel táctil depende de que haya una capacitancia significativa entre usted y la tierra del circuito, existe la posibilidad de que una batería no funcione.
Paso 2: el archivo de encabezado
¿Terminaste con todas las conexiones? Bien, procederemos con el archivo de encabezado. Usaremos el compilador XC8 y, como sugiere el título, ahora deberá crear un nuevo archivo de encabezado en su proyecto y copiar y pegar el siguiente código. También puede copiarlo y pegarlo sobre su código principal sin ningún archivo de encabezado.
#define CALIBRATION_SAMPLE 20 # define TOUCH_SAMPLE 10 #define DISCHARGE_TIME 5
int count;
int CalibrationValue, maxCalibrationValue, minCalibrationValue;
int getChargeTime () {
int timerCount = 0; int overflowCount = 0; // capacitancia de descarga a medir RC4 = 0; _delay_ms (DISCHARGE_TIME); // dar suficiente retardo para descargar completamente (casi completamente) el "condensador" // borrar el indicador de desbordamiento del temporizador T0IF = 0; // esperar a que el temporizador se desborde, empezar a contar desde 0 while (! T0IF); T0IF = 0; // iniciar la carga de la capacitancia a medir RC4 = 1; // esperar a que la capacitancia se cargue hasta el voltaje de referencia mientras (C1OUT) {timerCount = TMR0; if (T0IF) {overflowCount ++; T0IF = 0; }} cuenta = (256 * overflowCount) + timerCount; // restablecer timerCount timerCount = 0; overflowCount = 0; recuento de devoluciones; }
int isTouching (int tolerancia) {
// promedio de múltiples muestras doble promedio = 0; para (int i = 0; i CalibrationValue + tolerancia) average ++; } promedio / = TOUCH_SAMPLE; // el promedio será un número entre 0 y 1 si (promedio> 0.2) return 1; return 0; }
void calibrate () {
int promedio = 0; int samples [CALIBRATION_SAMPLE]; // obtener el valor promedio para (int i = 0; i <CALIBRATION_SAMPLE; i ++) {samples = getChargeTime (); promedio + = muestras ; } promedio / = CALIBRATION_SAMPLE; CalibrationValue = promedio; // obtener los valores máximo / mínimo maxCalibrationValue = samples [0]; minCalibrationValue = samples [0]; for (int i = 0; i maxCalibrationValue) maxCalibrationValue = muestras ; if (samples <minCalibrationValue) minCalibrationValue = samples ; }}
void setupCapacitiveTouch () {
// configurando el pin de carga / descarga como salida, en este caso es RC4 TRISCbits. TRISC4 = 0; // configurando timer0 T0CS = 0; PSA = 1; // configurando el comparador C1CH0 = 0; C1CH1 = 0; C1R = 0; C1ON = 1; C1POL = 0; // borrar los valores de conteo count = 0; // borrar los valores de calibración calibraciónValue = 0; maxCalibrationValue = 0; minCalibrationValue = 0; // ejecutar la calibración al iniciar calibrate (); }
Paso 3: escribir el código principal
Comenzando con el código principal, deberá incluir el archivo de encabezado creado en el paso anterior. El siguiente código es un ejemplo de cómo puede utilizar la función isTouching como interruptor. En mi caso, le di al encabezado el nombre capacitiveTouch.h.
#incluir
#include "capacitiveTouch.h"
// esta variable dice si el botón está o no ya presionado
int lastState = 0;
vacío principal(){
// establecer RC5 como salida TRISCbits. TRISC5 = 0; // necesita llamar a esta función al inicio del programa setupCapacitiveTouch (); _delay_ms (1000); // calibre después de su configuración exacta calibrate (); while (1) {// comprobando si se presiona el botón if (isTouching (15) && lastState == 0) {if (RC5) RC5 = 0; si no RC5 = 1; lastState = 1; } // comprobando si se suelta el botón else if (lastState == 1 &&! isTouching (15)) lastState = 0; _delay_ms (20); }}
calibrar:
Cuando se llame a esta función, se actualizarán las variables CalibrationValue, maxCalibrationValue y minCalibrationValue. CalibrationValue es utilizado por la función isTouching. Tenga en cuenta que el panel táctil debe dejarse solo durante la calibración.
setupCapacitiveTouch:
Necesita ser llamado al comienzo de su programa. Configura los bits necesarios utilizados por las otras funciones. También ejecuta una calibración. Sin embargo, obtuve mejores resultados al esperar un segundo y ejecutar la calibración nuevamente por separado.
isTouching:
Esta función devuelve 1 si detecta un aumento en la capacitancia en el C12IN0 y devuelve 0 si la capacitancia está cerca de la que estaba durante la calibración. En pocas palabras, si alguien toca el pad, la función isTouching devolverá 1. La función también quiere un parámetro como entrada, esta es la tolerancia para que se dispare. Cuanto mayor sea el valor de tolerancia, menos sensible se vuelve. En mi configuración, encontré que 15 funcionó bien, pero debido a que esto depende de la frecuencia del ocsilador y de cuánta capacitancia se agrega cuando lo presiona, debe experimentar con este valor hasta que encuentre algo que funcione para usted.
getChargeTime:
Cuando desee saber cuánto tiempo tomaría cargar la capacitancia al voltaje CVREF, esta función lo probará y devolverá un número entero. Para obtener el tiempo en segundos, use esta fórmula: (4 * getChargeTime) / oscillatorFrequency = chargeTimeInSeconds Esta fórmula también se puede usar para obtener la entrada de tolerancia de la función isTouching en segundos.
Recomendado:
Ventilador de mano Arduino con interruptor táctil capacitivo .: 6 pasos
Ventilador de mano Arduino con interruptor táctil capacitivo: En este tutorial, aprenderemos cómo ENCENDER y APAGAR el ventilador de batería del dispositivo mediante el sensor táctil capacitivo, el módulo de relé y Visuino
Cómo hacer un piano capacitivo táctil barato: 5 pasos
Cómo hacer un piano capacitivo táctil barato: Soy un gran fanático de la tecnología y la música, y decidí hacer esto después de que me inspiré en mi vida anterior como estudiante de piano. De todos modos … En esta lección, te mostraré cómo hacer un piano táctil capacitivo barato usando un Arduino, un altavoz y papel. Yo w
Comience con el kit táctil capacitivo: 4 pasos
Comience con el kit táctil capacitivo: para mi próximo proyecto voy a usar un panel táctil capacitivo, y antes de lanzarlo, decidí hacer un pequeño tutorial sobre el kit que recibí para DFRobot
Árbol de la vida (Servo motor de conducción del sensor táctil capacitivo Arduino): 6 pasos (con imágenes)
Árbol de la vida (Servomotor de conducción del sensor táctil capacitivo Arduino): Para este proyecto, hicimos un árbol de arroz que constaba de un sensor táctil capacitivo y un servomotor. Al tocar el tapete, el servomotor se activará y se lanzará el arroz (o lo que quieras poner en él). Aquí hay un video corto
Táctil capacitivo con Evive (controlador basado en Arduino): 6 pasos (con imágenes)
Táctil capacitivo con Evive (controlador basado en Arduino): ¿Sabe cómo funciona la pantalla táctil de su teléfono inteligente? El teléfono inteligente tiene una serie de sensores táctiles debajo de la pantalla de vidrio. Hoy en día, se basa en la tecnología de detección táctil de capacitancia e incluso un toque suave se detecta fácilmente. Se detecta el tacto capacitivo