Uno de los instrumentos más importante en nuestro laboratorio posiblemente pueda ser el osciloscópio. Quitando una fuente de alimentación regulabre y un bien polímetro, un osciloscopio nos puede ayudar muchisimo a la hora de trabajar con señales digitales pero por desgracia, el precio de un osciloscopio medio suele ser bastante elevado para el aficionado.
La solución? pues muy fácil: Construirse uno casero! y qué mejor sitio que BricoGeek.com para descubrir cómo podemos hacernos un pequeño y sencillo osciloscopio para nuestro laboratorio al mismo tiempo que aprendemos a medir señales analógica con una placa Arduino, y todo esto con un presupuesto reazonablemente pequeño.
Os dejo a continuación una pequeña guía de cómo hacer un oscilosopio usando una pantalla gráfica LCD a color, una placa Arduino y una photoresistencia LDR para probar el montaje.
Video y explicaciones a continuación...
Video:
Introducción:
Antes de comenzar, éste pequeño osciloscopio no pretende para nada competir con los reales, pero puede ayudarnos a comprender y sobre todo visualizar todo tipo de señales analógicas de una forma muy sencilla y en apenas 1 hora de trabajo. Luego es cuestión de cada uno de montarselo dentro de una bonita caja y tenerlo listo para funcionar o enseñar a los amiguetes!
Que necesitamos?
Basicamente necesitamos dos cosas: una pantalla gráfica LCD a color de 240x320, la cual puedes conseguir pinchando aqui. Y una placa Arduino que será la encargada de controlar la pantalla y de realizar la medición.
Para las pruebas, he usado una photoresistencia (o LDR) para variar el voltaje de una entrada analógica y visualizar algo en pantalla.
Midiendo señales analógicas
Arduino, que no es más que un AVR ATMega168, dispone de 6 entradas analógica con una resolución de 10bits. Esto quiere decir que la tensión medida en estas patillas, nos devolverá un valor comprendido entre 0 y 1024. La placa, como cualquier circuito con microcontroladores, funciona obiamente con una tensión de alimentación de 5 Voltios con lo que el valor 0 será 0 Voltios y un valor de 1024 serán 5 Voltios. Nuestros pequeño osciloscopio no podrá medir tensiones superiores a 5V aunque es más que suficiente precisamente para medir señales digitales de hasta 5V. Atención: Si se mide una tensión superior, el microcontroladro pasará automaticamente a ser chatarra... asi que cuidado.
Para medir una señal analógica simplemente usamos la función analogRead() que nos devolverá un valor, como hemos dicho, entre 0 y 1024. Y cómo savemos entonces el resultado? Pues muy simple, vamos a convertir lo leido a un valor en voltios de esta manera:
Éste calculo nos devolverá en la variable val_read, un valor entre 0 y 5 voltios que será la tensión sobre la entrada analógica 0. Teniendo en cuenta que nuestro Arduino tiene una resolución de 10bits, el paso más pequeño, o lo que es lo mismo, la resolución mínima será de 5 / 1024 = 0.0048 voltios por paso. Si analogRead nos devuelve por ejemplo un valor de 537 podemos saver que la tensión resultante es de 537 * 0.0048 = 2.57 Voltios (aproximadamente).
Visualizando los datos:
Ahora que savemos cómo medir el voltaje, debemos mostrarlo por pantalla. La pantalla LCD que he usado es idónea para dicha tarea ya que dispone de su própio controlador y no necesitamos de gran cosa para hacerla funcionar en un instante.
Simplemente he dibujado un lienzo o recuadro donde se mostrará la gráfica resultante de la medición adecuando el resultado a las corrdenadas en pixels del área a pintar.
Basicamente se trata de hacer un "barrido" de izquierda a derecha con un pequeño bucle FOR y luego variar la coordenada Y en función del resultado de la medición. En un primer moment lo he hecho pintando pixels individuales y el resultado fue instantáneo. Sin embargo, al usar este método, cuando entre una medición y otra hay mucha diferencia de voltaje, se aprecia un espacio vacío entre cada punto y no resulta muy bonito (cuantas más variaciones en menor tiempo, más se aprecia éste efecto). Por lo que he decicido pintar lineas entre cada punto de medición. El resultado es perfecto ya que siempre tendremos una linea continua en la pantalla, genial!
Últimas anotaciones
Como veis, es un proyecto muy sencillo que apenas me ha llevado un par de horas en tenerlo funcionando. Lo interesante de la cuestión es que como ya he comentado, la placa Arduino dispone de hasta 5 entradas analógicas con lo que podemos aplicar al mismo sistema en todas y asi tener un mini osciloscopio de 5 canales simultaneamente. Por supuesto, la velocidad de medición disminuye, pero no deja de ser interesante. A continuación os dejo el trozo de código del buble principal que se encarga de hacer la medición y de mostrarla en pantalla:
for (x=2 ; x {
OLED_DrawLine(x, 41, x, 280, 0);
// Input 1 (Green)
val_read = ((analogRead(0)*5) / 1024.0) * 48;
//OLED_PutPixel(x, 280-val_read, GetRGB(0, 254, 0));
OLED_DrawLine(x-2, 280-prev_read1, x, 280-val_read, GetRGB(0, 254, 0));
prev_read1 = val_read;
/*
// Input 2 (Red)
val_read = ((analogRead(1)*5) / 1024.0) * 48;
//OLED_PutPixel(x, 280-val_read, GetRGB(0, 254, 0));
OLED_DrawLine(x-1, 280-prev_read2, x, 280-val_read, GetRGB(253, 0, 0));
prev_read2 = val_read;
*/
}
Espero vuestros comentarios!