viernes, 18 de agosto de 2017

ADS1115 -ADC 16 Bits

ADS1115 ADC 16 BITS

¿Qué es el ADS1115?


Este circuito integrado es un dispositivo electrónico que se encarga de convertir una señal analógica a digital (ADC) capaz de captar hasta 16 bits en su ADC y este es configurable.
Se comunica a través de un protocolo de comunicación llamado i2c, este protocolo es compatible con Arduino y microcontroladores (PIC), recordemos que normalmente estos cuentan con ADC de hasta 10 bits, por lo que si queremos mejorar la precisión de la lectura de una variable es recomendable utilizar este dispositivo. También es posible conectar cuatro canales a este circuito integrado y se puede leer por medio del protocolo direccionando cada entrada sin problemas.
Este cuenta con tres modos de medición Single Ended, Diferencial y Comparador.
En el modo Single Ended disponemos de cuatro canales de 16 bits. En el modo diferencial usamos dos ADC para cada medición, por lo que el número de canales se reduce a 2, pero tendremos la ventaja de poder medir tensiones negativas y mayor inmunidad al ruido. El modo comparador es una especie de alerta la cual se activará en el canal AIN0, cuando el valor registrado supere el umbral seleccionado.

Tabla 1.- Índices máximos absolutos.

Tabla 2.-Modelos de productos.

Figura 3.-Diagrama a bloques ADS1115.

Como podemos observar las características de este ADC son superiores a los ADC que se encuentran en los microcontroladores PIC y de Arduino, las mediciones en este caso serán más precisas y podríamos compararlas con las de Arduino para verificar la diferencia, La velocidad de este ADC es de 860 muestras por segundo como se especifica en la tabla, este incluye internamente un amplificador de ganancia programable. Además, que el consumo del mismo es de 150 uA en modo continuo.

Figura 4.-Amplificador de Ganancia Programable

Esquema de conexión



Figura 5.-Conexión de ADS1115 con ARDUINO.
Para realizar los distintos modos del ADS se usará una librería desarrollada por Adafruit:

*Independientemente del PGA elegido la máxima tensión que podemos medir será siempre la tensión de alimentación. Es decir, aunque el PGA sea 6.144V, no podremos medir tensiones superiores a 5V.

Esta librería cuenta con el modo Single End


#include <Wire.h>
#include <Adafruit_ADS1015.h>

Adafruit_ADS1115 ads;  /* Use this for the 16-bit version */
//Adafruit_ADS1015 ads;     /* Use thi for the 12-bit version */

void setup(void)
{
  Serial.begin(9600);
  Serial.println("Hello!");
 
  Serial.println("Getting single-ended readings from AIN0..3");
  Serial.println("ADC Range: +/- 6.144V (1 bit = 3mV/ADS1015, 0.1875mV/ADS1115)");
 
  // The ADC input range (or gain) can be changed via the following
  // functions, but be careful never to exceed VDD +0.3V max, or to
  // exceed the upper and lower limits if you adjust the input range!
  // Setting these values incorrectly may destroy your ADC!
  //                                                                ADS1015  ADS1115
  //                                                                -------  -------
  // ads.setGain(GAIN_TWOTHIRDS);  // 2/3x gain +/- 6.144V  1 bit = 3mV      0.1875mV (default)
  //ads.setGain(GAIN_ONE);        // 1x gain   +/- 4.096V  1 bit = 2mV      0.125mV
  // ads.setGain(GAIN_TWO);        // 2x gain   +/- 2.048V  1 bit = 1mV      0.0625mV
  // ads.setGain(GAIN_FOUR);       // 4x gain   +/- 1.024V  1 bit = 0.5mV    0.03125mV
  // ads.setGain(GAIN_EIGHT);      // 8x gain   +/- 0.512V  1 bit = 0.25mV   0.015625mV
  // ads.setGain(GAIN_SIXTEEN);    // 16x gain  +/- 0.256V  1 bit = 0.125mV  0.0078125mV
 
  ads.begin();
}

void loop(void)
{
  int16_t adc0, adc1, adc2, adc3;

  adc0 = ads.readADC_SingleEnded(0);
  adc1 = ads.readADC_SingleEnded(1);
  adc2 = ads.readADC_SingleEnded(2);
  adc3 = ads.readADC_SingleEnded(3);
  Serial.print("AIN0: "); Serial.println(adc0);
  Serial.print("AIN1: "); Serial.println(adc1);
  Serial.print("AIN2: "); Serial.println(adc2);
  Serial.print("AIN3: "); Serial.println(adc3);
  Serial.println(" ");
 
  delay(1000);
}
Figura 6.-Monitor serial mostrando las salidas ADC1…3

Este código despliega cada uno de los ADC con los que cuenta el dispositivo imprimiendo por el puerto serial el valor del ADC, si queremos obtener su salida en voltaje, solo tenemos que multiplicar el valor leído por el sensor por la resolución. La resolución se calcula con la siguiente ecuación:

Introduciendo un voltaje de 3.3 volts aproximadamente obtenemos 17442 bits, multiplicarlos por la resolución obtenemos el voltaje.



Figura 7.-Valor en voltaje de los ADC.

Observamos en el código que podemos seleccionar la Ganancia, por si tenemos voltajes en específico y lograr una medición más confiable. Por ejemplo, si sabemos que nuestro voltaje estará entre 0V hasta 1V podemos seleccionar una ganancia más baja y que el ADC sea más preciso dentro de ese rango.


Este es el código del Modo Diferencial:


#include <Wire.h>
#include <Adafruit_ADS1015.h>

Adafruit_ADS1115 ads;  /* Use this for the 16-bit version */
//Adafruit_ADS1015 ads;     /* Use thi for the 12-bit version */

void setup(void)
{
  Serial.begin(9600);
  Serial.println("Hello!");
 
  Serial.println("Getting differential reading from AIN0 (P) and AIN1 (N)");
  Serial.println("ADC Range: +/- 6.144V (1 bit = 3mV/ADS1015, 0.1875mV/ADS1115)");
 
  // The ADC input range (or gain) can be changed via the following
  // functions, but be careful never to exceed VDD +0.3V max, or to
  // exceed the upper and lower limits if you adjust the input range!
  // Setting these values incorrectly may destroy your ADC!
  //                                                                ADS1015  ADS1115
  //                                                                -------  -------
  // ads.setGain(GAIN_TWOTHIRDS);  // 2/3x gain +/- 6.144V  1 bit = 3mV      0.1875mV (default)
  // ads.setGain(GAIN_ONE);        // 1x gain   +/- 4.096V  1 bit = 2mV      0.125mV
  // ads.setGain(GAIN_TWO);        // 2x gain   +/- 2.048V  1 bit = 1mV      0.0625mV
  // ads.setGain(GAIN_FOUR);       // 4x gain   +/- 1.024V  1 bit = 0.5mV    0.03125mV
  // ads.setGain(GAIN_EIGHT);      // 8x gain   +/- 0.512V  1 bit = 0.25mV   0.015625mV
  // ads.setGain(GAIN_SIXTEEN);    // 16x gain  +/- 0.256V  1 bit = 0.125mV  0.0078125mV
 
  ads.begin();
}

void loop(void)
{
  int16_t results;
 
  /* Be sure to update this value based on the IC and the gain settings! */
  //float   multiplier = 3.0F;    /* ADS1015 @ +/- 6.144V gain (12-bit results) */
  float multiplier = 0.1875F; /* ADS1115  @ +/- 6.144V gain (16-bit results) */

  results = ads.readADC_Differential_0_1(); 
   
  Serial.print("Differential: "); Serial.print(results); Serial.print("("); Serial.print(results * multiplier); Serial.println("mV)");

  delay(1000);
}

El código del Modo comparador es el siguiente:


#include <Wire.h>
#include <Adafruit_ADS1015.h>

Adafruit_ADS1115 ads;

void setup(void)
{
  Serial.begin(9600);
  
  ads.begin();
  
  // Activar comparador para 2.5V en canal 0
  // (Donde 13333 = 2500 / 0.1875F)
  ads.startComparator_SingleEnded(0, 13333);
}

void loop(void)
{
  int16_t adc0;

  // Actualizar comparadores
  adc0 = ads.getLastConversionResults();
  Serial.print("AIN0: "); Serial.println(adc0);
  
  delay(100);
}

lunes, 7 de agosto de 2017

Introducción Machine Learning

¿Que es Machine Learning?
Es una disciplina de que esta basada en Data Analytics Modelling y en I.E. entrenando un algoritmo con datos iniciales y usando un modelo resultante para realizar predicciones o clasificar nuevos datos.

¿Que es Data Analytics?

En realidad les permite a las organizaciones mejorar su desempeño al identificar patrones o construir modelos alrededor de ellos. Los datos utilizados pueden prevenir de múltiples fuentes como un sensor, una base de datos, archivos, historial crediticio, estadísticas, entre otros. 
La cantidad de datos puede ser abrumador, muchas observaciones o muchas variables que pueden dificultar a que alguien encuentre una solución a este problema, es por eso que se utiliza este tipo de análisis que nos ayudan a encontrar y optimizar según nuesto objetivo.

Filosofía de Machine Learning
  • Normalmente es importante la demostración de teoremas que nos ayuden a encontrar una solución es importante para Machine Learning.
  • Es una estadística computacional aplicada.
  • Son modelos de construcción computacionales típicos, que aprenden con el tiempo basado en la experiencia del sistema.
  • Pero no es solo la construcción de un modelo, interviene también las matemáticas , la ciencia, la ingeniera, la computación todos estos forman ese modelo especifico. Que por necesidad tienen que aprender a través del tiempo.
  • La mejor definición es un análisis de datos y la clasificación de estos utilizando una estructura computacional.

Tipos de Machine Learning
  1. Aprendizaje supervisado: Este tipo de aprendizaje es capaz de realizar una aproximación de funciones, ademas es capaz de generalizar y predecir con nuevos datos introducidos en el sistema generando una salida basada en su experiencia o en los datos introducidos.
  2. Aprendizaje no supervisado: Este tipo de aprendizaje es capaz de etiquetar descripciones, tomar un conjunto de datos  averiguar como es posible clasificarlos. Entonces seria capaz de clasificar en una imagen pixeles entre un hombre y una mesa, o definir varias etiquetas en un conjunto de datos, que tienen características especificas.
  3. Aprendizaje por refuerzo: Este tipo de aprendizaje es un poco mas difícil,  ya que este modelo nadie le dice que hacer o como actuar, tiene que trabajar por su cuenta, es como jugar un juego sin conocer las reglas o por lo menos como se gana o pierde. Normalmente se mide que tan buena fue la salida y se va aprendiendo a través del tiempo teniendo una retroalimentación de datos.




domingo, 6 de agosto de 2017

Fuente de Voltaje de Corriente Directa

Fuente de Voltaje de Corriente Directa

La mayoría de los equipos electrónicos Televisores, computadoras, reproductores de DVD, teatro en casa, teléfonos celulares, laptops, estéreos, y demás usan voltaje corriente directa para su funcionamiento es común tener dispositivos con diferentes niveles de voltaje y corrientes 12 volts,18 volts y 24 volts entre otros.
Esta fuente de alimentación convierta el voltaje alterno en voltaje directo, normalmente a través de un transformador, después un puente de diodos, un filtro que realiza rizado del voltaje y por último un regulador de voltaje que se adecua a la salida seleccionada.

Figura 1.- Etapa de una fuente de alimentación DC.

El primer paso para la construcción de una nueva fuente de alimentación escoger los materiales adecuados para la misma, el transformador deberá de cumplir las características eléctricas para soportar las necesidades para la cual será construida. Si nuestro sistema requiere 1 Ampere, debemos de verificar que al menos el transformador tenga una salida de 1.5 Amperes, normalmente sus características eléctricas las podemos encontrar marcadas en el mismo.

Figura 2.- Transformador y su descripción.



Un rectificador de onda completa es un circuito empleado para convertir una señal de corriente alterna de entrada (VCA) en corriente de salida (VCD) pulsante. A diferencia del rectificador de media onda, en este caso, la parte negativa de la señal se convierte en positiva o bien la parte positiva de la señal se convertirá en negativa, según se necesite una señal positiva o negativa de corriente continua.
En este paso, se analizará las características eléctricas del puente de diodos este será encargado de realizar la rectificación de onda completa. También se tomará en cuenta lo que se requiera por el circuito y si podrá soportar su salida en corriente.



Figura 3.- Observamos los máximos niveles de voltajes y corrientes del puente de diodos.



Figura 4.- Se observa físicamente el puente de diodos.

Un condensador eléctrico (también conocido como capacitor, proveniente del nombre equivalente en inglés) es un dispositivo pasivo, utilizado en electricidad y electrónica, capaz de almacenar energía sustentando un campo eléctrico.​ Está formado por un par de superficies conductoras, generalmente en forma de láminas o placas, en situación de influencia total (esto es, que todas las líneas de campo eléctrico que parten de una van a parar a la otra) separadas por un material dieléctrico o por el vacío.​ Las placas, sometidas a una diferencia de potencial, adquieren una determinada carga eléctrica, positiva en una de ellas y negativa en la otra, siendo nula la variación de carga total.
Para el sistema de filtrado se tiene que verificar el voltaje que se encuentra en la salida del puente de diodos (CD) para elegir el filtro adecuado en su voltaje. Además de seleccionar un valor adecuado de la capacidad de almacenamiento del capacitor.

Figura 5.- Se observa un Capacitor físicamente.

Los reguladores electrónicos de tensión se encuentran en dispositivos como las fuentes de alimentación de los computadores, donde estabilizan las tensiones de Corriente Continua usadas por el procesador y otros elementos. En los alternadores de los automóviles y en las plantas generadoras, los reguladores de tensión controlan la salida de la planta. En un sistema de distribución de energía eléctrica, los reguladores de tensión pueden instalarse en una subestación o junto con las líneas de distribución de forma que todos los consumidores reciban una tensión constante independientemente de qué tanta potencia exista en la línea.
Este es el último paso para la construcción de una fuente de voltaje, existen diferentes tipos de reguladores marcas y modelos, los cuales se dividen en los voltajes de salida pueden ser positivos o negativos, los más comunes son los reguladores LM7805, LM7809, LM7812, LM317, LM337 entre otros. Cada uno con diferente salida normalmente para hacer una fuente variable se utiliza el regulador LM317 el cual se encarga de variar el voltaje dependiendo su salida y el común con una resistencia variable.

Figura 6.-Tabla de reguladores respecto a su salida.

Todos los elementos en conjunto que observamos anteriormente edifican una fuente de voltaje corriente continua variable, verificaremos el esquema general a continuación:

Figura 7.- Esquema general de una fuente variable.

Para calcular los valores de voltaje del LM317 es necesario calcular las resistencias R1 y R2 para obtener el Vout del circuito regulador.
En este caso entre más resistencia en R2 mayor será el voltaje en la salida del regulador, es por eso que la resistencia R2 debe ser una resistencia variable o potenciómetro.

Componentes:
Regulador de voltaje LM317T
Diodos: 1 puente de diodos de 2 amperios o más.
Resistencia: 220Ω / ohmios,
Potenciómetro: 5KΩ / kilohmios
Capacitores: 1 de 4,700uF, 25 Voltios, electrolítico. 1 de 100uF de 16 Voltios, electrolítico. 2 de 0.1uF
Transformador 120/240VCA a 12.6 VCA de 1.5 amperes en el secundario.
Fusible de 1.5 amperios para poner del lado del secundario.

lunes, 31 de julio de 2017

ACS712 Sensor de Corriente

Características electrónicas del sensor de corriente ACS712

En la actualidad la electrónica ha alcanzado infinidad de campos, como lo es la medicina, bioquímica, domótica, etc. Existen sensores capaces de realizar actividades o trabajos que no nos imaginábamos en años atrás.
Primero revisaremos ¿Que es un sensor?  Un sensor es un dispositivo capaz de detectar magnitudes físicas o químicas tales como temperatura, intensidad lumínica, distancia, aceleración, inclinación, desplazamiento, presión, fuerza, torsión, humedad, movimiento, pH, etc.
En este articulo revisaremos el sensor de corriente ACS712 este sensor es construido por la compañía Allegro MicroSystems, LCC y cuenta con tres modelos capaces de interpretar rangos diferentes de corriente directa y alterna, este sensor comúnmente esta encapsulado en SOIC con ocho pines. Funciona a través de efecto de Hall a través de campos magnéticos de los conductores. Este sensor es muy económico y preciso es usado en la industria y en sistemas de comunicación en aplicaciones como control de motores, detección de cargas, conmutación de fuentes de poder y sobre corrientes entre otras.

Numero de parte
Rango
Sensibilidad
ACS712-05B-T
±5 A
185 mV/A
ACS712-20A-T
±20 A
100 mV/A
ACS712-30A-T
±30 A
66 mV/A

La sensibilidad puede variar según la temperatura ambiente, pero los valores de la tabla son los promedios a 25°C. Se puede observar en la tabla del datasheet los valores mínimos y máximos de sensibilidad, aunque estos varían muy poco es importante tenerlo en cuenta. La salida de este sensor es lineal a la corriente sensada en los bornes, y es importante mencionar que el cero se encuentra con un offset de VOE=(Vcc/2) Volts, por lo que encontraremos el cero en ese valor. Ejemplo: Si tenemos un Vcc=5 Volts, nuestro VOE=5/2=2.5 Volts, según la formula.

Conversión analógica Digital (ADC)



¿Qué es un ADC?

Teniendo en cuenta todas las características electrónicas que obtuvimos de su hoja de datos, ya somos capaces de trabajar con esté sensor para realizar actividades o practicas correspondientes. Antes de seguir con nuestra practica revisaremos lo que es un ADC (Conversión Analógica Digital). En el medio ambiente lo que es captado por un sensor es una señal analógica cambiante en el tiempo, pero nosotros lo que buscamos es poder tener esa señal digitalmente para poder realizar operaciones o para la interpretación del mismo. Para realizarlo utilizaremos el ADC, normalmente los microcontroladores cuentan con uno o más canales que nos ayudaran para adquirir la señal digital.
Principalmente un ADC cuenta con una resolución especifica entre más bits tenga, será más exacta la lectura del canal.
# de bits
(2n-1)
10
1,023
12
4,095
14
16,384

El tamaño de escalón será igual a el voltaje del ADC/entre el número de bits-1.
El microcontrolador Arduino y Microchip cuentan con una resolución de diez bits del ADC, por lo tanto, tenemos un Vref+=5, Vref-=0 y 2n=1023, el resultado sustituyendo los valores es igual a 4.88 mV.

Una vez obtenido el valor podemos verificar si la resolución es apta para utilizarse en la lectura del sensor; podemos observar que se encuentra dentro del rango y posible detectar un cambio de corriente (185 mV/Ampere) hasta (66mV/Ampere) dependiendo del modelo del ACS.