Hoy vamos a rescatar uno de nuestros primeros proyectos para darle un enfoque distinto, en este caso usaremos el proyecto «Encender y apagar un LED con python y un sensor LDR» para realizar un análisis de los datos que arroja la fotoresistencia para posteriormente mostrarlos en una gráfica usando la librería Matplotlib de Python.
Requisitos necesarios para el proyecto
Este proyecto necesita de un amplio número de requisitos, tanto es así que los vamos a dividir en tres partes.
Requisitos para nuestro intérprete de Python
Como podrás comprobar este proyecto no podemos hacerlo solo con Python puro o «vanilla Python» sino que necesitamos instalar una serie de dependencias extra:
Librerías usadas
Las librerías usadas en este proyecto son las siguientes:
- Matplotlib
- Pyserial
- Time
Las dos primeras librerías deben de ser instaladas ya que no se encuentran incluidas cuando instalamos Python en nuestra máquina, puedes hacerlo ejecutando estos comandos en el terminal (dentro del mismo directorio que nuestro archivo main.py
pip install Matplotlib
pip install Pyserial
Para la librería time no será necesario instalar nada ya que nos viene preconfigurada cuando instalamos Python en nuestro PC
Si tienes problemas instalando estos paquetes, puedes instalarlos automáticamente ejecutando un solo comando, si te fijas en los archivos adjuntos de este proyecto que te dejaré al final de esta entrada, he dejado un archivo llamado ‘requirements.txt’ con el nombre de las librerías que usamos en el proyecto.
Por tanto si ejecutamos este código:
pip install -r requirements.txt
Podremos automáticamente instalar todos los paquetes necesarios.
Instalando cuadernos de Jupyter
El segundo de los requisitos que necesitamos tener es instalar la extensión en nuestro Visual Studio Code de Jupyter, esta extensión nos permite ejecutar pequeños trozos de código, ver su salida y poder generar imágenes o gráficos, algo que nuestro terminal por defecto no puede hacer.
Si tu IDE favorito no es Visual Studio Code o no quieres instalar Jupyter, en este enlace te dejaré un acceso a un cuaderno de Jupyter de google collab, de tal manera de que sin instalar absolutamente nada tendremos el funcionamiento del código.
Requisitos a nivel electrónico.
Como en casi todas las entradas de este blog siempre usaremos algo de electrónica, en este caso usaremos una fotoresistencia o LDR y los valores que esta arroja para poder generar nuestra gráfica, por tanto los materiales necesarios son los siguientes.
- Un microcontrolador, en mi caso el Arduino UNO
- Una resistencia de 1kΩ
- Una Fotoresistencia
El esquema electrónico será el siguiente:
Como puedes imaginar este esquema ya lo vimos anteriormente, en este caso no necesitaremos usar ni el diodo LED ni la resistencia de 220Ω
Requisitos para generar los valores de la resistencia
Es necesario generar un programa en C/C++ para nuestro Arduino, que debe de enviar los datos a nuestro script en Python para ser tratados posteriormente, en este blog ya hemos dedicado varias entradas a comunicar Python con Arduino, aun así te dejo el código aquí.
/*
Script en python para controlar un LED mediante una resistencia LDR.
Este programa nos permite controlar el estado de un LED mediante la lectura
e interpretación de los valores recibidos por una LDR, esto es un ejemplo
básico donde el pricipal objetivo es el de poder enviar y recibir datos
del arduino a través del puerto serie
Autor: Alexdevrep
Fecha: 10/03/2024
Más contenido interesante en:
-Github: https://github.com/alexdevrep
-Instagram: https://www.instagram.com/alexdevrep/
-WordPress: https://eltallerdealexdevrep.com
-Youtube: https://www.youtube.com/channel/UCNlqgVY-CaQ2Lgc5xJChaKA
*/
// Definimos el pin de entrada e inicialñizamos su valor
int sensorLDR = A0;
int sensorValue = 0;
void setup()
{
// Inicializamos la comunicación serial
Serial.begin(9600);
// Declaramos el pin 2 como salida
pinMode(2, OUTPUT);
}
void loop()
{
// Leemos los datos del sensor y los guardamos en una variable
sensorValue = analogRead(sensorLDR);
// Imprimimos esos datos en el monitor serie y son enviados al script de python
Serial.println(sensorValue);
delay(1000);
}
Una vez hemos configurado todo es hora del análisis de los datos de la fotoresistencia con Matplotlib.
Análisis de datos de una Fotoresistencia con Matplolib
Como te comenté hace una líneas usaremos un cuaderno de Jupyter para poder generar la gráfica, es por ello que copiaremos y ejecutaremos el código allí.
El código utilizado es el siguiente:
"""
Lectura de un Fotosensor con Python
En este proyecto, utilizaremos una fotoresistencia (LDR) para medir la intensidad de luz en el entorno.
Los datos obtenidos de la LDR serán recolectados y almacenados en una lista.
Posteriormente, visualizaremos estos datos mediante gráficos usando la librería matplotlib en Python.
Esto nos permitirá analizar cómo cambia la intensidad de la luz a lo largo del tiempo.
Autor: Alexevrep
Fecha: 16/08/2024
Más contenido interesante en:
-Github: https://github.com/alexdevrep
-Instagram: https://www.instagram.com/alexdevrep/
-WordPress: https://eltallerdealexdevrep.com
-Youtube: https://www.youtube.com/channel/UCNlqgVY-CaQ2Lgc5xJChaKA
"""
#importamos las dependencias
import matplotlib.pyplot as plt
import serial
import time
# Iniciamos la conexión serial con el Arduino
arduino = serial.Serial("COM5", 9600,timeout=1)
# Esperamos para que el Arduino se inicialice
time.sleep(2)
#Creamos una lista para almacenar todos los valores
lista_valores=[]
#Recibimos los 30 primeros valores medidos por arduino y lo incluimos en una lista
for i in range (1,31):
if arduino.in_waiting >0:
sensor_value = arduino.readline().decode('utf-8').strip()
sensor_value=int(sensor_value)
lista_valores.append(sensor_value)
time.sleep(0.5)
print(lista_valores)
print("Valores recopilados cerrando la conexión con arduino")
#Cerramos la comunicación serial con Arduino
arduino.close()
plt.plot(lista_valores)
Una vez ejecuto esto, los valores que recojo son los siguientes:
lista_valores=[
1015, 1015, 1015, 1015, 1016, 1016, 973, 973, 1005, 1005, 938, 938, 1013,
1013, 956, 956, 958, 958, 1013, 1013, 999, 999, 971, 971, 1008, 1008, 1013,
1013, 978]
La gráfica que se nos genera es la siguiente:
Aquí tenemos la gráfica que recoge los datos emitidos por la fotoresistencia, en ella podemos ver cuando aumenta o disminuye su valor, en función de la cantidad de luz recibida durante un período de tiempo.
Análisis de datos de una Fotoresistencia en Google Colab
Google Colab es una herramienta de Google que nos permite crear nuestros propios cuadernos de Jupyter sin necesidad de instalar nada, ni dependencias, extensiones, nada, en este enlace te comparto mi cuaderno con el que hemos realizado este interesante proyecto de análisis de datos, tan solo deberemos de comentar/descomentar algunas líneas de código puesto que ya incluyo la lista con todos los valores, registrados.
Hasta aquí la entrada de hoy ¿Qué te ha parecido? ¿Has visto con que facilidad podemos extraer datos de un circuito electrónico? Aunque es un ejemplo muy simple, puede ser fundamental en algunos procesos embebidos o de Machine Learning para hacerlo más eficientes. Como siempre tienes todos los archivos disponibles en mi cuenta de GitHub.