Si aún no eres usuario, puedes crear una cuenta o entrar
(Video) Osciloscopio con Arduino y pantalla gráfica LCD

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:
int val_read = ((analogRead(0)*5) / 1024.0)


É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<239 ; 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!

Comparte esto con tus amigos!

Comentarios:


Serkeros
Enviado el 29/01/2008 (10:23)
Muy aparente, si señor, te ha quedado muy bien. Sin embargo se me ocurren un par de limitaciones que tiene: en primer lugar, como ya comentas, el límite de 5V de la tensión de entrada. La segunda, que no puede tomar muestras muy rápido debido a que depende de la transmisión serie hacia la pantalla (no he visto el código de las funciones que has hecho, pero supongo que tiran los datos al Tx y Rx del Arduino hacia el procesador de la LCD ¿es así?).
Esto se podría solucionar con un buffer de memoria intermedia, pero ya se complica el tema...
A parte de esto, un proyecto cojonudo. Por cierto, ¿por qué no publicas la libreria de funciones OLED_etc. y así vemos más en profundidad como va el tema entre el Arduino y la Pantalla?
Sigue así.
SRKRS

Oscar Gonzalez Oscar Gonzalez es un colaborador!
Enviado el 29/01/2008 (11:17)
Hola Serkeros,
Efectivamente no es el mejor osciloscopio del mundo ni es muy usable por el momento, pero e sun proyecto divertido y relativamente fácil de hacer.
Como tu bien dices, la limitación de velocidad se encuentra en la transmisión Arduino -> LCD ya que la máxima velocidad es de 115200 bps que es la que uso actualmente. He hecho algunas pruebas con un buffer intermedio para umentar la velocidad de toma de datos en la entrada analógica y la verdad esque ha mejorada bastante. Primero tomo dentro de un bucle unas 300 medicionesy luego las dibujo. Obiamente, se crea un pequeño desfase entre cada 300 mediciones ya que se tarda un tiempo en dibujar en la pantalla, pero por lo menos ahora no consigo ver una onda de más de un flanco al pasar una luz por el sensor!

En breve y una vez las tenga bien pulidas, publicaré unas cuentas librerías para Arduino para hacer funcionar unos cuantos modelos de pantallas OLED y LCD.

Saludos y gracias por tu mensaje!

Oscar G.

teo
Enviado el 31/01/2008 (15:33)
Un poco de esfuerzo para vencer las limitaciones de este util instrumento. Que bueno que existen soluciones para aquellos que no tenemos para comprar un instrumento como este.

JUANMANUEL
Enviado el 15/02/2008 (22:26)
QUE MICROCONTROLADOR, YQ UE COMPILADOR UTILIZASTE

yoyo
Enviado el 03/03/2008 (11:49)
Obviamente el problema más grave que tiene este proyecto es la falta de un prescaler para poder recibir señales débiles y fuertes. Solucionado esto sería muy importante escribir el software directamente en ensamblador, ya que el C es bueno para un prototipo rápido pero no para algo donde la velocidad sea crítica.

Por otro lado, la transmisión al display puede ser lenta pero para el caso de señales periódicas no sería tan grave. Mientras internamente el procesador pueda formar una imágen rápidamente en RAM, la transmisión a la pantalla puede ser más lenta.

Mark
Enviado el 08/07/2008 (01:00)
Muy interesante. ¿Hay alguna posibilidad de que usted podría publicar el interfaz de rutinas que usted utiliza para la pantalla a color? Estos podrían encontrar empleo fuera de este proyecto. Sería muy interesados en ver estas.

Mark.
(Er. .. probablemente adivinado No me hablen español, por lo que esta es una traducción automática y voy a leer tu respuesta de la misma manera!)

fjdm
Enviado el 08/03/2009 (22:08)
¡¡Sinceramente espectacular, enhorabuena!!

Se me ocurre, para solventar el límite máximo de voltaje de entrada de 5 Volts, hacer uso de la funcionalidad "Vref" de Arduino, que permite comparar en el ADC con una tensión externa.

Un saludo.

Oscar Gonzalez Oscar Gonzalez es un colaborador!
Enviado el 09/03/2009 (11:19)
VREF no puede pasar de 5V por lo que tampoco sería válido :)
La solución es poner un divisor de tensión o puente "ladder" en la entrada, por lo que calculandolo bien podríamos medir tensiones mayores, eso si a costa de perder un poco de resolución

Saludos!
Oscar G.

Shara Loriane
Enviado el 26/02/2010 (22:45)
Hola! puedes ayudarme a construir un osciloscopio, con un arduino Duemilanove?

Por Favor! Gracias

antonio martos
Enviado el 02/06/2012 (11:12)
hola¡¡¡

Estoy haciendo algo parecido, pero con una pantalla ulcd-144

http://inventosycacharros.blogspot.com.es/2012/06/arduino-osciloscopio-con-pantalla-ulcd.html

Erick Rodríguez Martínez
Enviado el 20/05/2013 (19:51)
Mira nada más, que buen proyecto, fíjate que la límitante de los 5V se podría solucionar con un arreglo de amplificadores operacionales, y la obtención de datos con un buffer intermedio, caray ya tiene 5 años que lo publicaste y ahora me ha llamado tanto la atención, que lo utilizare como inspiración para realizar el mio, Gracias.!!, ya les cuento como me fue.

Saludos y Éxito.! :)


Enviar comentario

Debes disponer de una cuenta de usuario para publicar un comentario.

Si aún no dispones de una cuenta, únete a la comunidad de BricoGeek.com y registrate ahora, te llevará tan solo un minuto y es gratis. También puedes identificate si ya dispones de una cuenta de usuario.
rss

Conecta con BricoGeek.com

Canales sociales

Nos gusta mucho estar en contacto con nuestros lectores y saber más acerca de sus proyecto e inventos.


También puedes sugerir una noticia en el blog
Tienda de Electrónica DIY y Arduino

Lo que se cuece...

Comentarios recientes Más comentado Top noticias
Feed de novedades

Tienda BricoGeek.com

Electrónica para tus proyectos!

Estás preparando un proyecto o quieres iniciarte en la electrónica? Encuentra todo lo que necesitas en la tienda.

Visita la tienda BricoGeek!

La familia de BricoGeek.com

Conoce toda la gente que hace que BricoGeek.com sea posible cada día:

Alejandro Mallo
Colaborador
Puedes hacer click sobre un autor para ver todas sus noticias


Etiquetas más populares:

Descubre todo el contenido de bricogeek.com con las etiquetas más populares:


© BricoGeek.com 2005-2014

Demuestra lo que sabes hacer!