La función analogRead() permite hacer lecturas analogicas en Arduino, es decir, obtener el nivel de voltaje en un punto, siempre y cuando este no exceda los 5 voltios. En este post se explicará un poco acerca de cómo lograr esto y cómo interpretar los datos obtenidos.
El microcontrolador Arduino es una herramienta con un gran potencial y una gama de usos increíble. Entre estas se encuentra la capacidad que posee de obtener mediciones analógicas de elementos resistivos.
A continuación realizaremos una pequeña experiencia en la cual se obtendrán mediciones de una fotorresistencia o LDR.
Una fotorresistencia o LDR (light-dependent resistor) es un componente electrónico cuyo valor resistivo disminuye con el aumento de la intensidad de luz que inciden en él. Comúnmente fabricados con un semiconductor de alta resistencia como el sulfuro de cadmio (CdS) recubiertos por una placa impermeable y transparente, pueden llegar a valores de 1 MΩ o más en la oscuridad.
Para esta experiencia utilizamos la configuración siguiente:

Abrimos Arduino IDE y escribiremos el siguiente código:
1 2 3 4 5 6 7 8 9 |
void setup(){ Serial.begin(9600); } void loop(){ int m= analogRead(A0); Serial.println(m); delay(5000); } |
La función analogRead(); toma el voltaje de aplicación y lo divide en 1024 partes que corresponden a los 10 bits que maneja por defecto.
Este código obtendrá una medición cada 5 segundos correspondientes a las fracciones del voltaje de aplicacion que hay en el punto de medición

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
876 892 898 888 869 869 888 898 216 319 525 697 896 894 879 870 869 871 876 882 899 894 890 897 897 898 896 890 881 888 |
Estos valores nos pueden ayudar a obtener el voltaje en el punto de medición mediante un divisor de voltaje
Donde:
- m: medicion obtenida
- Vtotal: votlaje de aplicación (5v en nuestro caso)
Podremos introducir este divisor dentro del codigo haciendo las siguientes modificaciones:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
int n=0; void setup(){ Serial.begin(9600); } void loop() { float m= analogRead(A0); float volt=m*5/1024; if(n==0){ Serial.println(" Medición en A0 Voltaje en A0"); Serial.print(m);Serial.print(" ");Serial.println(volt); n=n+1; } else{ Serial.print(m);Serial.print(" ");Serial.println(volt); } delay(5000); } |
Obtendremos la medida a la par del voltaje en ese punto
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Medición en A0 Voltaje en A0 899.00 4.39 903.00 4.41 888.00 4.34 881.00 4.30 872.00 4.26 775.00 3.78 630.00 3.08 531.00 2.59 372.00 1.82 327.00 1.60 63.00 0.31 886.00 4.33 |
Como se mencionó antes en este articulo la medida mostrada no corresponde al valor resistivo de la fotorresitencia. El valor de la misma puede ser obtenido de la siguiente manera:

Utilizando la equacion de divisor de voltaje para un circuito en serie
Podremos despejar y obtener la siguiente expresión
- R1: resitencia de 1k
- Vt: voltaje de aplicación (5v)
- VTP1: voltaje en el puntod e medición
- R2: fotoresistencia o LDR
Esta equación puede ser integrada al codigo desarrollado a manera de obtener mayores datos con los que trabajar. La integración al codigo se puede hacer de la siguiente manera.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
int n=0; void setup(){ Serial.begin(9600); } void loop() { float m= analogRead(A0); float volt=m*5/1024; float r=1000*volt/(5-volt); if(n==0){ Serial.println("Medicion en A0 Voltaje en A0 Valor LDR"); Serial.print(m);Serial.print(" ");Serial.print(volt); Serial.print(" ");Serial.println(r); n=n+1; } else{ Serial.print(m);Serial.print(" ");Serial.print(volt); Serial.print(" ");Serial.println(r); } delay(5000); } |
Con el código modificado obtendremos la medicion, el voltaje en el punto de medición y el valor de la resistividad del LDR
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Medicion en A0 Voltaje en A0 Valor LDR 1023.00 5.00 1023000.00 1023.00 5.00 1023000.00 1023.00 5.00 1023000.00 1022.00 4.99 511000.00 877.00 4.28 5965.99 897.00 4.38 7062.99 874.00 4.27 5826.67 903.00 4.41 7462.81 873.00 4.26 5781.46 894.00 4.37 6876.92 879.00 4.29 6062.07 894.00 4.37 6876.92 874.00 4.27 5826.67 |
Espero que la información suministrada sea de utilidad para todos.
Saludos.
Medicion en A0 Voltaje en A0 Valor LDR 1023.00 5.00 1023000.00 1023.00 5.00 1023000.00 1023.00 5.00 1023000.00 1022.00 4.99 511000.00 877.00 4.28 5965.99 897.00 4.38 7062.99 874.00 4.27 5826.67 903.00 4.41 7462.81 873.00 4.26 5781.46 894.00 4.37 6876.92 879.00 4.29 6062.07 894.00 4.37 6876.92 874.00 4.27 5826.67 hola cheque tu codigo y funciona muy bien y lo probe y laja perfecto…….yo no soy experto en arduino y quisiera un poco de ayuda….creo que es un poco facil pero no se como hacerlo …y es lo siguiente,digamos que al voltaje de 4.27 ya que este en monitor serial asignar un numero… Read more »
No entiendo lo que quieres saber