Vamos a describir un montaje en Arduino de un medidor de resistencias, en el podremos aprender:
- Divisor de Tensión o Voltaje.
- Uso de las entradas analógicas de arduino.
- Pull-Down para las gestión de un pulsador.
- Uso del Display
- Uso de variables estáticas encapsuladas para evitar errores de programación
Para poder calcular el valor de una resistencia utilizaremos un circuito divisor de tensión como se ve en la figura
En el podemos ver la resistencia R1, que es la que deberemos calcular y en nuestro circuito lo conectaremos a la salida digital D2(Vin que dará 5V) y la entrada analogica A0 (Vout) luego tendremos R2 que es una resistencia que podra variar segun la resistencia que pongamos.
La resistencia de escala sera una resistencia que se conecta en la masa y Vout. para poder seleccionar la resistencia desde nuestro circuito pondremos estas resistencias (2K, 20K, 200K y 1M) en las Entradas/Salidas digitales (D3-D6) como podemos ver en el circuito.
La selección de la resistencia se realiza con el pulsador conectado a D12, poniendo todas las entradas/salidas digitales de las resistencias (D3-D6) como entradas y solo a modo salida la que nos interese tener y esta a LOW que seria su conexión a masa.
Quedando el código de esta selección de la siguiente forma:
// Se puede ver en la función escala(del código
// Primero todas las resistencias como entrada
pinMode(R2K,INPUT);
pinMode(R20K,INPUT);
pinMode(R200K,INPUT);
pinMode(R1M,INPUT);
int laescala= <PIN con la resistencia de escala a usar>
pinMode(laescala,OUTPUT); // activa el pin de escala seleccionada a salida
digitalWrite(laescala,LOW); // Ponemos Bajo que es Masa.
Para gestionar el pulsador del cambio de estado utilizaremos el siguiente texto:
boolean estado = digitalRead(ESCALA); // Recoge el estado del pulsador
if(estado)
{
while (digitalRead(ESCALA)) {;} // Si se ha pulsado esperamos a que se levante, para
// evitar que este cambiando cada vez.
escala(); // Cambia de escala
}
La lectura del pin analógico es muy sencillo, solo tendremos que leerlo, convertir el valor leído a voltaje y con este realizar la formula indicada en el divisor de tensión para así calcular la resistencia R1.
// Mira valor de resistencia
medida = analogRead(BORNA2); // Leemos valor de la entrada A0
// Conversion a voltaje
voltaje = (medida * 5.0) / 1024.0;
//Realizamos la formula del divisor de tensión ((vi/vol)-1)*Esca
laescala= R_escala(); // Nos da la resistencia de escala en Kohmios
valor = ((5.0/voltaje)-1) * laescala;
// Si la escala fuera 2K deberemos convertir el valor a ohmios multiplicando por 1000
impres_res(valor); // Imprime en el display el valor, viendo si debe marcar o no error según la escala.
Otras funciones que interesa conocer son:
- escala(): Realiza un cambio de escala y se apoya en dos funciones
- set_escala(true): Realiza un cambio en la variable estática «escala» que solo puede ser cambiada en esa función (encapsulación) por eso si se llama con false solo envía el valor sin realizar ningún cambio. EN una programación de clases tendríamos la variable estática en la clase y dos funciones, una para cambiar el valor set_variable y otra para obtener el valor get_variable.
- get_escala() llama a set_escala(false) para que le de la escala en la que esta.
Todos los fuentes, junto al esquema y el proyecto fritzing lo podéis encontrar en el repositorio de GITHUB de pinguytaz.
señor javier si funciona ?? por que lo pruebo en forma basica y no me sirve