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