Página principal


OSCILOSCOPIO
Arduino



Hace tiempo hice un osciloscopio con arduino en el entorno  de programación Gambas. El entorno gambas es una especie de VB que solo funciona en Linux. El que solo funcione en Linux tiene el inconveniente de eliminar bastantes usuarios que solo usan Windows.
Mi idea era era volver hacer el osciloscopio mejorándolo y que además funcionase  en Windows.
Había dos opciones hacerlo con las librerías SDL o con las librerías wxWidgets. Está claro que hubiese quedado mucho mejor el aspecto con las librerías wxWidgets, pero me decidí por las SDL por un motivo un tanto personal que no viene al caso. Igual en un futuro lo realice en wxWidgets , pero eso es otro proyecto.
Lo que me satisface más, es el poder compilar para las dos plataformas, Linux o Windows, con solo cambiar la directiva YesWindows 0 por #define YesWindows 1 en el fichero define.h.

En lado del arduino la entrada la toma del pin A0 con valores de 0 a 5V.
El arduino lee continuamente el puerto serie esperando ordenes.
En el caso de recibir la cadena "VOL="  , el devuelve una cabecera de 10 bytes "VOL     " + los retornos de carro , 10 valores (0-255) digitalizados de la entrada A0, y 10 bytes con la cadena "FIN     " + los retornos de carro. Un total de 30 bytes.
En caso de recibir "GETUP=" , el devuelve una cabecera de 10 bytes "DAT     " + los retornos de carro , 800 valores (0-255) digitalizados de la entrada A0, y 10 bytes con la cadena "FIN     " + los retornos de carro. Un total de 830 bytes.
En caso de recibir "DIV16" cambia el divisor del convertidor A/D del arduino a 62500 muestras por segundo.

En el lado del PC nos encontramos un entorno en el que podemos representar y controlar los datos que nos envía  el arduino.
Podemos estar en el modo Vol  ( Voltímetro ) , captura continuamente datos digitalizados del pin A0 representándolos en una gráfica continua. Se puede cambiar la velocidad de captura de datos.
El modo de osciloscopio muestra continuamente datos mandados por el arduino, 800 datos digitalizados a una velocidad que podemos modificar a nuestro gusto.

Al iniciar el programa se busca la conexión  del arduino con el programa del osciloscopio en todos los puertos serie que existan en el PC.
Este es el motivo por el cual tarda unos 6 segundos en arrancar

Para calcular la frecuencia de la onda debemos dividir las muestras por segundo entre las muestras de cada onda.
En la imagen siguiente la onda mide alrededor de 200 muestras.
Si estamos en el modo de 125000 muestras por segundo, la frecuencia será 125000/200=625Hz
Este cálculo no es totalmente exacto, pero la mayoría de las veces funciona bien.
En un principio lo incluí en el código, pero después de muchos ensayos lo descarté por no ser totalmente exacto.


Señal de 625Hz


Montaje del circuito.

En las siguientes imágenes se puede comparar entre las de un osciloscopio normal y mi montaje.



Señal de 5000Hz



Señal de 625 Hz

Para medir señales continuas o de niveles positivos se conecta la señal directamente a A0.
Pero si queremos medir corrientes alternas, debemos realizar un adaptador para elevar la señal a mitad de la máxima señal de entrada, 2.5V.
Como no quiero complicar el montaje, utilizo un par de resistencias y un condensador.

Adaptador de AC.

Para los que no disponen de un osciloscopio, este montaje puede ser interesante además de barato.
VIDEO
PROGRAMAS
Librerías necesarias SDL


Nota:
He tenido serios problemas con los diferentes arduinos. Cuando funcionaba bien el programa en una placa arduino clásica, luego al probar el programa en un arduino nano, dejaba de funcionar.  A velocidades de 115200bps no todo se comporta como debería.
He tenido que colocar retardos para que sea lo mas compatible posible.
La compilación en arduino se hizo en la versión 1.0.5 .
También he visto que la velocidad del programa es más rápida en la versión Linux.


Saludos
Juan Galaz



Bibliografía:
ardu_os.html
http://real2electronics.blogspot.com/2011/09/arduino-adc-muestreo-alta-velocidad.html