Arduino IoT: Tutorial para construir Voltmeter

Arduino IoT Arduino (IoT): Simple Tutorial de Infrarojo (IR) Receptor/Transmisor by Santiapps Marcio Valenzuela
Arduino IoT Arduino (IoT): Simple Tutorial de Infrarojo (IR) Receptor/Transmisor

Arduino (IoT): Tutorial para construir un voltmeter

 

Arduino IoT: Tutorial para construir Voltmeter by Santiapps Marcio Valenzuela
Arduino IoT: Tutorial para construir Voltmeter

Diseño

Podemos construir 2 tipos de voltímetros con un Arduino:

  1. Mayor a 5V
  2. Menor o igual a 5V

Debido a que la Arduino solo funciona con 5V máximo, el mejor tipo de voltímetro a construir con ella es el #2.  Ese es en efecto el que construiremos.


Voltímetro >5V

El tipo #1 involucra tomar un voltaje mas grande a 5V y partirlo de manera que solo midamos 5V máximo.  La diferencia se toma en cuenta al medir que % de 5V alcanzamos.  Por ejemplo si queremos medir 12V, partimos los 12V con algo llamado un voltaje divider.  Esto se asegura de partir en voltaje en 7V y 5V.  Lo que tenemos que hacer entonces es medir que porcentaje de 5V alcanzamos.  Si llegamos a 100% de 5V, estamos a 12V.  Si solo alcanzamos 4.5V, entonces estamos a (4.5/5)*12V = 10.8V.

Un voltage divider se construye usando un par de resistores cuyo valor nos da la proporción deseada.

Arduino IoT: Tutorial para construir Voltmeter by Santiapps Marcio Valenzuela
Arduino IoT: Tutorial para construir Voltmeter

Si usamos 12V ocupamos partir el voltaje fisicamente como vimos arriba con el voltage divider y empleamos la formula:

Vout  = Vin * ( R2/(R1+R2) )

Y la conexión sería:

Arduino Tutorial IoT: Crear voltímetro con Arduino UNO by Santiapps.com Marcio Valenzuela
Arduino Tutorial IoT: Crear voltímetro con Arduino UNO
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // según lcd
float vin=0.0;
float temp=0.0;
float r1=100000.0; // Valor R1
float r2=10000.0; // Valor R2
void setup() {
Serial.begin(9600);
lcd.begin(16, 2); 
lcd.print("Santiapps.com"); // Bienvenida
delay(1000);
lcd.clear();
lcd.print("DC VoltiMetro");
}
void loop() {
int analog_val=analogRead(A0); // leer A0 y almacenar
temp = (analog_val * 5.0)/1024.0;
vin = temp
vin = temp/(r2/(r1+r2));
if(vin<0.1){
vin=0.0;
}
lcd.setCursor(0, 1); // cursor en column 0 line 1
lcd.print("Voltage = "); // imprimir voltaje
lcd.println(vin);
delay(300);
}

Voltimetro de <=5V

De otra forma solo ocupamos el código:

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // según lcd
float vin=0.0;
float temp=0.0;
float r1=100000.0; // Valor R1
float r2=10000.0; // Valor R2
void setup() {
Serial.begin(9600);
lcd.begin(16, 2); 
lcd.print("Santiapps.com"); // Bienvenida
delay(1000);
lcd.clear();
lcd.print("DC VoltiMetro");
}
void loop() {
int analog_val=analogRead(A0); // leer A0 y almacenar
temp = (analog_val * 5.0)/1024.0;
vin = temp
//vin = temp/(r2/(r1+r2));
if(vin<0.1){
vin=0.0;
}
lcd.setCursor(0, 1); // cursor en column 0 line 1
lcd.print("Voltage = "); // imprimir voltaje
lcd.println(vin);
delay(300);
}

En nuestro caso el máximo sera de 5V así que no ocupamos el voltage divider. A continuación de hecho usamos una LCD para poder ver el voltaje que recibimos de un par de baterías de 3.7V.  Es decir, estamos alimentando 7.4V, el cual regulamos usando un LM7805 el cual lo reduce exactamente a 5V.  Es por eso que no ocupamos el voltage divider en este caso.

Video

Arduino IoT: Tutorial Medidor de Agua Inteligente

Arduino Honduras Santiapps Marcio Valenzuela

Tutorial Medidor de Agua Inteligente Parte I

 

En este tutorial exploraremos mas sensores, pero aplicados.  En nuestro proyecto usamos un flujo metro construido a partir de un sensor Hall Effect para medir el flujo de agua por un conducto.

Se mira asi:

Arduino IoT: Tutorial Medidor de Flujo by Santiapps Marcio Valenzuela
Arduino IoT: Tutorial Medidor de Flujo de Agua by Santiapps

El codigo:

byte statusLed = 13;
byte sensorInterrupt = 0; // 0 = digital pin 2
byte sensorPin = 2;
// El sensor hall-effect emite ~ 4.5 pulses/sec/litre/min 
float calibrationFactor = 4.5;
volatile byte pulseCount;
float flowRate;
unsigned int flowMilliLitres;
unsigned long totalMilliLitres;
unsigned long oldTime;
void setup(){

Serial.begin(38400);
// Usarmos una LED como salida
pinMode(statusLed, OUTPUT);
digitalWrite(statusLed, HIGH);
pinMode(sensorPin, INPUT);
digitalWrite(sensorPin, HIGH);
pulseCount = 0;
flowRate = 0.0;
flowMilliLitres = 0;
totalMilliLitres = 0;
oldTime = 0;

// Configuramos para que dispare con FALLING state (HIGH a LOW)
attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
}
void loop(){
if((millis() - oldTime) > 1000) { // Only process counters once per second
// Dishabilitamos el interrupt al calcular flujo y enviar
detachInterrupt(sensorInterrupt);
// Calculamos ms transcurridos desde la ultima ejecucion para escalar el resultado. Aplicamos el factor calibrationFactor para escalar el resultado en base al # de pulsos/sec de medición (litres/minute en este caso) proveniente del sensor
flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor;
// Usar el tiempo de esta ejecucion porque deshabilitamos el interrupt por ende los millis() no funcionaran pero aun asi se retornara el valor justo antes que se deshabilito
oldTime = millis();
// Dividir el flujo en litres/minute por 60 para determinar cuantos L han pasado por el sensor en el intervalo de 1 sec y luego multiplicamos por 1000 para convertir a mL.
flowMilliLitres = (flowRate / 60) * 1000;
// Sumamos los mL pasados en este segundo al total cumulativo
totalMilliLitres += flowMilliLitres;
unsigned int frac;
// Imprimir el flujo para este intervalo de 1 segundo en litres / minute
Serial.print("Flujo: ");
Serial.print(int(flowRate)); // Imprimir el entero
Serial.print("."); // Imprimir el decimal
// Determinar la fraction. El 10 multiplicador nos da 1 decimal.
frac = (flowRate - int(flowRate)) * 10;
Serial.print(frac, DEC) ; // Imprimir la parte fraccional
Serial.print("L/min");
// Imprimir L fluidos en este segundo
Serial.print(" Liquido Fluido reciente: "); // Separador
Serial.print(flowMilliLitres);
Serial.print("mL/Sec");
// Imprimir cumulativo de L fluidos desde el inicio
Serial.print(" Cantidad total fluido: "); // Separador
Serial.print(totalMilliLitres);
Serial.println("mL");
// Resetear el pulse counter para iniciar de nuevo
pulseCount = 0;
// Habilitar el interrupt nuevamente
attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
}
}
void pulseCounter(){
// Incrementar pulse counter
pulseCount++;
}

Y la connexion es sencilla:

Arduino IoT: Tutorial Medidor de Flujo de Agua by Santiapps Marcio Valenzuela
Arduino IoT: Tutorial Medidor de Flujo de Agua

Lo conectamos a una salida de agua como una bañera:

Arduino IoT: Tutorial Medidor de Flujo de Agua by Santiapps Marcio Valenzuela
Arduino IoT: Tutorial Medidor de Flujo de Agua

Los resultados:

Arduino IoT: Tutorial Medidor de Flujo de Agua by Santiapps Marcio Valenzuela
Arduino IoT: Tutorial Medidor de Flujo de Agua

Esto fue durante ~ 10 segundos.  Vamos a incorporar esto a nuestro proyecto de casa inteligente.

Arduino IoT: Tutorial sobre LM7805 como fuente de poder

Arduino IoT Arduino (IoT): Simple Tutorial de Infrarojo (IR) Receptor/Transmisor by Santiapps Marcio Valenzuela
Arduino IoT Arduino (IoT): Simple Tutorial de Infrarojo (IR) Receptor/Transmisor

Arduino (IoT): Tutorial LM7805 como fuente de poder

 

Muchas veces terminamos un prototipo y queremos llevarlo a la practica.  Es decir, queremos hacerlo funcionar en el ambiente para el cual fue diseñado.  El ejemplo típico en robótica es un carro, que luego de subir el codigo desde la compu al carro y probarlo mientras sigue conectado a la compu, queremos llevarlo a la calle.  En el caso de este robot para remover semillas, queremos conectarlo a su fuente de poder (baterías recargables) y llevarlo a la practica.

El problema es que necesitamos 5V para nuestros MCUs (a veces 3.3V) y tenemos combinaciones de baterías AA que nos dan 3V, 4.5V, 6V etc.  En este caso tenemos un par de baterías de alta capacidad de 3.7V cada una, ósea que tenemos 7.4V lo cual no podemos alimentar a nuestro MCU.

Entra el regulador de voltage, LM7805.  Este es uno de los componentes mas comunes en la electronica de hoy en dia.  A pesar que conectamos muchos electrónicos a la pared, de donde obtenemos 120VAC, nuestros electrónicos:

  • Celulares
  • Videojuegos portatiles
  • Tablets
  • Camaras digitales

Todos utilizan 5VDC.  Hay muchos otros componentes que reducen 120VAC a 5VDC y veremos eso en un tutorial mas adelante, pero por lo general siempre queremos tener 5VDC estables, y eso se obtiene a través de un regulador como este.

El diferencial de voltaje entre 7.4V y 5V se pierde como calor y a veces es necesario usar una fuente de disipación termica que en este caso no usamos, a pesar que los LM7805 traen una pequeña incorporada en su parte posterior que se ve de color gris-metal con un agujero en medio.  Por lo general para disipar voltajes mas altos se ocupa conectar el LM7805 a una placa mas grande.

Aquí vemos como los 7.4V son traspasados a 5V por el LM7805 y luego alimentados al mcu nano y al servo.  La LCD muestra el voltaje de la fuente de poder y lo vemos registrado como 4.99-5VDC.

Video

Es muy util poner uno de estos reguladores en un modulo aparte porque su uso sera muy frecuente.  El diagrama es así:

Arduino IoT: Tutorial LM7805 en Voltmeter by Santiapps Marcio Valenzuela
Arduino IoT: Tutorial LM7805 en Voltmeter

Y el producto final se mira asi:

Este fue

Arduino IoT: Tutorial Uso de LM7805 Regulador de Voltaje by Santiapps Marcio Valenzuela
Arduino IoT: Tutorial Uso de LM7805 Regulador de Voltaje

Aqui vemos la entrada a la derecha:

blanco: positivo & negro: negativo

Luego se pasa por el capacitor de 100uF, luego el LM7805 y finalmente el capacitor de 10uF.  Finalmente tenemos a la izquierda:

rojo: positivo & naranja: negativo

Aquí vemos un pack de baterias de 3.7V cada una en serie, para un total de 7.4V según muestra el medidor:

Arduino IoT: Tutorial Uso de LM7805 Regulador de Voltaje by Santiapps Marcio Valenzuela
Arduino IoT: Tutorial Uso de LM7805 Regulador de Voltaje

Aqui vemos la medición directa del paquete de batería.  El regulador esta fuera de linea.

Arduino IoT: Tutorial Uso de LM7805 Regulador de Voltaje by Santiapps Marcio Valenzuela
Arduino IoT: Tutorial Uso de LM7805 Regulador de Voltaje

Finalmente vemos el regulador en acción, entre el pack de baterías y el medidor.  Aquí se ve el voltaje final regulado, el que podemos usar con seguridad en nuestros proyectos.

Los LM7805 se piden encontrar en muchos dispositivos electrónicos viejos que puede desarmar.

In: Entran 7.4V

GND: Tierra

Out: Salen 5.0V regulados