Practica No 13 - 6EM4 - ADC
Practica No 13 - 6EM4 - ADC
Practica No 13 - 6EM4 - ADC
INGENIERIA ELECTRICA
Grupo: _____
INTEGRANTES
Calificación: ___________
JLDM Pá gina 1 de 18
CARRERA DE INGENIERIA ELECTRICA.
Prácticas de Laboratorio de Electrónica III. Practica No. 13
OBJETIVOS:
Marco Teórico.
1 Computadora
1 Software Arduino IDE y Thonny.
1 Tarjeta Arduino Uno y ESP32 (KIT Microcontrolador).
DESARRROLLO DE LA PRÁCTICA.
El primer ejercicio que se llevara a cabo es leer una señal analógica conectada a la A3 y el valor
obtenido se verá en la ventana del Monitor Serie.
/*
* Practica 13a_ADC Fecha:
* Grupo: 6EV Equipo:
* Integrantes: JLDM
* Objetivo: Convertidor Analógico Digital con Monitor serie
*/
void setup() {
Serial..begin(9600); // Configura la terminal Monitor Serie
}
void loop() {
val=analogRead(AnalogTerm);
Serial.println(val);
}
JLDM Pá gina 2 de 18
CARRERA DE INGENIERIA ELECTRICA.
Prácticas de Laboratorio de Electrónica III. Practica No. 13
Para llevar a cabo la adquición de datos, para su después conversión de la señal analógica a digital
debemos conocer el tiempo de muestreo, esto lo hacen os de la siguiente forma.
/*
* Practica 13b_ADC Fecha:
* Grupo: 6EV Equipo:
* Integrantes: JLDM
* Objetivo: Conocer el tiempo de muestreo de la Placa Arduino
*/
void setup(){
Serial.begin(9600);
muestreo();
}
void loop(){
}
void muestreo(){
unsigned long time1=0;
unsigned long time=0;
Serial.println("*************************");
Serial.println("ENSAYO TIEMPO DE MUESTRO:");
Serial.println("*************************");
for(byte i =0; i<4; i++){
time1=micros();
int A=analogRead(A0);
time=micros()-time1;
Serial.print(" Muestra: ");
Serial.print(i+1);
Serial.print(" Tiempo: ");
Serial.println(time);
}
Excepto en la primera medida, las demás tiene un tiempo de muestreo de 112 micro segundos, lo
que equivale a una frecuencia de muestreo de 8.928 kHz, podemos tomar por valido ya que estoy
JLDM Pá gina 3 de 18
CARRERA DE INGENIERIA ELECTRICA.
Prácticas de Laboratorio de Electrónica III. Practica No. 13
utilizando una placa Arduino UNO. A demás debemos tener en cuenta una pequeña perdida de
tiempo que tenemos al guardar y calcular las variables time1 y time.
Otro factor a tener en cuenta del ADC es su resolución, para ello hablamos de los bits
de resolución que tiene, los bits no permiten hacer combinaciones, cuantos mas tengamos mayor
numero de combinaciones podremos hacer, cada una de estas combinaciones muestra una medida
del sistema analógico, la cantidad de medidas que tenemos serán 2 elevado al numero de bits de
resolución. Puesto que Arduino UNO, en mi caso, tiene un ADC de 10 bits de resolución tendrá
1024 combinaciones. La placa Arduino DUE por ejemplo cuenta con un ADC de 12 bits (4096
combinaciones).
Pero hay un segundo factor que interviene en la resolución, es el rango de medida, El rango de
Voltae de las placas Arduino por defecto es de 5v o 3.3v. Con esto sabemos que en voltios tenemos
una resolución igual a;
5V
Resolución= =4.88 mV
1024
/*
* Practica 13b_ADC Fecha:
* Grupo: 6EV Equipo:
* Integrantes: JLDM
* Objetivo: Conocer el tiempo de muestreo de la Placa Arduino
JLDM Pá gina 4 de 18
CARRERA DE INGENIERIA ELECTRICA.
Prácticas de Laboratorio de Electrónica III. Practica No. 13
*/
int contador;
void setup(){
contador=1;
Serial.begin(9600);
Serial.println("*****************");
Serial.println("ENSAYO RESOLUCION");
Serial.println("*****************");
}
void loop(){
muestreo();
contador++;
}
void muestreo(){
int A=analogRead(A0);
float B= float(A)*5/1023;
Serial.print(" Muestra: ");
Serial.print(contador);
Serial.print(" Medida Digital: ");
Serial.print(A);
Serial.print(" Medida Analogica: ");
Serial.println(B, 5);
delay(1000);
}
[1.28543−1.28055] V
Resolución Real= =4.88 mV
[263−262]
JLDM Pá gina 5 de 18
CARRERA DE INGENIERIA ELECTRICA.
Prácticas de Laboratorio de Electrónica III. Practica No. 13
En ocasiones, utilizaremos sensores cuyo rango de voltaje no será igual a [0, 5v]. En primer lugar,
tenemos que tener en cuenta, que no debemos introducir en la placa Arduino voltajes mayores de
5v o 3.3v, partiendo de esto podemos cambiar el límite superior del rango de voltaje. De
manera interna o externa:
Una vez montado cargamos el siguiente programa, para verificar que funciona
correctamente:
JLDM Pá gina 6 de 18
CARRERA DE INGENIERIA ELECTRICA.
Prácticas de Laboratorio de Electrónica III. Practica No. 13
/*
* Practica 13d_ADC Fecha:
* Grupo: 6EV Equipo:
* Integrantes: JLDM
* Objetivo: Conocer el tiempo de muestreo de la Placa Arduino
*/
int contador;
void setup(){
analogReference(INTERNAL);
contador=1;
Serial.begin(9600);
Serial.println("******************");
Serial.println("ENSAYO RESOLUCION");
Serial.println("REFERENCIA INTERNA");
Serial.println("******************");
}
void loop(){
muestreo();
contador++;
}
void muestreo(){
int A=analogRead(A0);
float B= float(A)*1.1/1023;
Serial.print(" Muestra: ");
Serial.print(contador);
Serial.print(" Medida Digital: ");
Serial.print(A);
Serial.print(" Medida Analogica: ");
Serial.println(B, 5);
delay(1000);
}
JLDM Pá gina 7 de 18
CARRERA DE INGENIERIA ELECTRICA.
Prácticas de Laboratorio de Electrónica III. Practica No. 13
Como se realizo anteriormente podemos tomar dos muestras, y de ahí calculamos la nueva
resolución:
[0.52581−0.48387]V
Resolución Real= =1.075 mV
[489−450]
Finalmente, queda la manera externa para cambiar el voltaje de referencia, para ello utilizaremos el
pin AREF. El funcionamiento de este pin es sencillo el voltaje que introduzcamos por el, será la
nueva referencia, pero cuidado, dicho voltaje debe estar entre entre 1.1v y 5v.
/*
* Practica 13e_ADC Fecha:
* Grupo: 6EV Equipo:
* Integrantes: JLDM
* Objetivo: Conocer el tiempo de muestreo de la Placa Arduino
*/
int contador;
void setup(){
analogReference(EXTERNAL);
contador=1;
Serial.begin(9600);
Serial.println("******************");
Serial.println("ENSAYO RESOLUCION");
Serial.println("REFERENCIA EXTERNA");
Serial.println("******************");
}
void loop(){
muestreo();
contador++;
}
void muestreo(){
int A=analogRead(A0);
float B= float(A)*2.5/1023;
Serial.print(" Muestra: ");
Serial.print(contador);
Serial.print(" Medida Digital: ");
Serial.print(A);
Serial.print(" Medida Analogica: ");
Serial.println(B, 5);
delay(1000);
}
Especificación sensor DTH11.
Este sensor se caracteriza por tener la señal digital calibrada por lo que asegura una alta calidad y
una fiabilidad a lo largo del tiempo, ya que contiene un micro controlador de 8 bits integrado. Está
constituido por dos sensores resistivos (NTC y humedad). Tiene una excelente calidad y una
respuesta rápida en las medidas. Puede medir la humedad entre el rango 20% – aprox. 95% y la
temperatura entre el rango 0ºC – 50ºC.
JLDM Pá gina 9 de 18
CARRERA DE INGENIERIA ELECTRICA.
Prácticas de Laboratorio de Electrónica III. Practica No. 13
De acuerdo a la figura, se tiene el orden de las terminales de forma siguiente:
Pin 1 = VCC
Pin2 = Data
Pin 3 = GND
Sus principales características son:
JLDM Pá gina 10 de 18
CARRERA DE INGENIERIA ELECTRICA.
Prácticas de Laboratorio de Electrónica III. Practica No. 13
Programa en C++ para obtener temperatura y humedad a Arduino UNO.
Una vez conectado el sensor de temperatura y humedad a Arduino UNO, el siguiente paso será
realizar un programa que obtenga los valores de temperatura y humedad y los muestre por el puerto
serie, de esta forma podremos verificar que el hardware (sensor y Arduino) funcionan
correctamente.
Instalaremos los drivers necesarios, instalaremos el IDE de desarrollo de Arduino y conectaremos
Arduino al PC por el puerto USB.
A continuación escribiremos el siguiente programa:
/*
* Practica 13e_ADC Fecha:
* Grupo: 6EV Equipo:
* Integrantes: JLDM
* Objetivo: Conocer el tiempo de muestreo de la Placa Arduino
*/
void setup()
{
DDRC |= _BV(DHT11_PIN);
PORTC |= _BV(DHT11_PIN);
Serial.begin(9600);
Serial.println("Ready");
}
void loop()
{
byte dht11_dat[5];
byte dht11_in;
byte i; // start condition
// 1. pull-down i/o pin from 18ms
PORTC &= ~_BV(DHT11_PIN);
delay(18);
PORTC |= _BV(DHT11_PIN);
delayMicroseconds(40);
DDRC &= ~_BV(DHT11_PIN);
delayMicroseconds(40);
dht11_in = PINC & _BV(DHT11_PIN);
if(dht11_in)
{
Serial.println("dht11 start condition 1 not met");
return;
}
delayMicroseconds(80);
dht11_in = PINC & _BV(DHT11_PIN);
if(!dht11_in)
{
Serial.println("dht11 start condition 2 not met");
JLDM Pá gina 11 de 18
CARRERA DE INGENIERIA ELECTRICA.
Prácticas de Laboratorio de Electrónica III. Practica No. 13
return;
}
delayMicroseconds(80);
// now ready for data reception
for (i=0; i<5; i++)
dht11_dat[i] = read_dht11_dat();
DDRC |= _BV(DHT11_PIN);
PORTC |= _BV(DHT11_PIN);
byte dht11_check_sum = dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat[3];
// check check_sum
if(dht11_dat[4]!= dht11_check_sum)
{
Serial.println("DHT11 checksum error");
}
Serial.print("Humedad = ");
Serial.print(dht11_dat[0], DEC);
Serial.print(".");
Serial.print(dht11_dat[1], DEC);
Serial.print("% ");
Serial.print("Temperatura = ");
Serial.print(dht11_dat[2], DEC);
Serial.print(".");
Serial.print(dht11_dat[3], DEC);
Serial.println("C ");
delay(2000);
}
JLDM Pá gina 12 de 18
CARRERA DE INGENIERIA ELECTRICA.
Prácticas de Laboratorio de Electrónica III. Practica No. 13
JLDM Pá gina 13 de 18