Ir a contenido
¡Construye tu osciloscopio DIY con Raspberry Pi! - 330ohms

¡Construye tu osciloscopio DIY con Raspberry Pi! - 330ohms

En la imagen se observa un generador de funciones, el Arduino Nano que adquiere los datos, la Raspberry Pi 3B+ y la señal medida en la pantalla. Vía: MagPi 71.

A veces se requiere de una forma de visualizar las señales que tiene nuestro circuito, como las de audio o TTL, de modo que podamos asegurarnos que nuestro proyecto funciona adecuadamente. Para visualizar estas señales se utiliza un osciloscopio, pero esta herramienta es por lo general costosa o de difícil acceso. Una alternativa para solucionar este problema es el utilizar una tarjeta de adquisición de datos con una computadora, que para ejemplos prácticos puede tratarse de la entrada de microfono de una tarjeta de audio.

Pero si queremos formalizar un poco más nuestro análisis (y evitar quemar nuestra tarjeta de audio) podemos utilizar un Arduino Nano y una Raspberry Pi, de modo que tengamos un osciloscopio digital con pocos recursos. Revisemos entonces el proyecto desarrollado por Mike Cook para la revista MagPi #71 y construyamos un osciloscopio.

El material que necesitamos es:

  • Arduino Uno, Nano, MEGA o cualquier otro Arduino basado en AVR
  • 3 Potenciómetros de 10kOhms
  • 4 resistores de 10 kOhms
  • 1 resistor de 1 kOhm
  • 1 capacitor de 1uF
  • 2 capacitores de 47uF
  • Socket BNC
  • Caja para proyectos
  • Varios tornillos, tuercas y espaciadores
  • Placa para prototipos

Construcción del Osciloscopio DIY

Necesitamos construir el siguiente circuito de acoplamiento, de modo que podamos ingresar la señal a nuestro Arduino. El conector BNC puede reemplazarse por un conector banana en su defecto, pero servirá utilizar uno para utilizar puntas atenuadas.

Conexiones para controlar el cursor del tiempo, el cursor de voltaje y el voltaje de disparo. Vía: MagPi.

Para cablear los potenciómetros en la caja de proyectos podemos guiarnos con la siguiente imágen.

La tarjeta Nano se se conecta al conector BNC y los 3 potenciómetros de control. Las piezas se colocan en una caja de proyectos para hacer el dispositivo más robusto. Vía: MagPi.

Para seguir leyendo…

Código para Arduino

Para adquirir los datos y controlar los cursores del programa necesitamos subir este código a nuestro Arduino.

// Arduino - Pi - Scope By Mike Cook int buffer [512]; // 1K input buffer int sample, lastSample; int pot1, triggerVoltage; int triggerTimeout = 1000; // time until auto trigger unsigned long triggerStart; char triggerType = '2';  void setup(){   Serial.begin(115200);   pinMode(13,OUTPUT);   // set up fast sampling mode   ADCSRA = (ADCSRA & 0xf8) | 0x04; // set 16 times division }  void loop(){    if( triggerType != '2') trigger(); // get a trigger    digitalWrite(13,HIGH);// timing marker   for(int i=0; i<512 ; i++){     buffer[i] = analogRead(0);   }   digitalWrite(13,LOW); // timing marker   pot1 = analogRead(2); // switch channel to cursor pot   for(int i=0; i<512 ; i++){     Serial.write(buffer[i]>>8);     Serial.write(buffer[i] & 0xff);   }   // send back pot values for cursors   pot1 = analogRead(2);   analogRead(3); // next cursor pot   Serial.write(pot1>>8);   Serial.write(pot1 & 0xff);   pot1 = analogRead(3);   triggerVoltage = analogRead(4);   Serial.write(pot1>>8);   Serial.write(pot1 & 0xff);   triggerVoltage = analogRead(4);   pot1 = analogRead(0); // prepair for next sample run    Serial.write(triggerVoltage>>8);   Serial.write(triggerVoltage & 0xff);          while(Serial.available() == 0) { } // wait for next request   triggerType = Serial.read(); // see what trigger to use   while (Serial.available() != 0) { // remove any other bytes in buffer      Serial.read();   } }  void trigger(){   // trigger at rising zero crossing   triggerStart = millis();   sample = analogRead(0);   do {   lastSample = sample;   sample = analogRead(0);   }   while(!(lastSample < triggerVoltage && sample > triggerVoltage) && (millis() - triggerStart < triggerTimeout)); }

Programa para la Raspberry Pi

Ahora solo queda abrir el programa en Python para la Raspberry Pi. Para esto podemos abrir el repositorio del proyecto y abrir el programa Scope.py. Debemos descargar las carpetas como se muestra en el repositorio, de modo que el PyLogo.png quede en una carpeta images y en la raíz quede el Scope.py. Abrimos el código en el editor de Geany y lo compilamos. Si no lo hacemos de este modo, el compilador dará un error porque no puede encontrar el logo. Se debe observar una pantalla como la que se muestra a continuación, con la señal que tratamos de medir

Pantalla de la señal tomada del programa. Se puede observar que tiene varios botones para seleccionar la división de tiempo y tensión. También tiene opciones para congelar la pantalla y guardar una captura. Vía: MagPi.

Demostración del osciloscopio DIY

Aquí una demostración de cómo funciona el programa,

Conclusiones

Este osciloscopio permite visualizar señales de hasta 5.8kHz debido a la velocidad de muestreo, y la amplitud de entrada no debe sobrepasar los 5Vpp para evitar saturar las entradas analógicas. Para observar señales de menor o mayor frecuencia o acopladas a DC, se requiere modificar el código del Arduino y por ende la circuitería. A pesar de esto, este proyecto servirá de una herramienta muy útil al analizar el funcionamiento de un circuito, por lo que es indispensable en nuestro laboratorio.

Referencias:

Repositorio Pi-Arduino-Scope

Build an oscilloscope using Raspberry Pi and Arduino

Artículo anterior Tutorial #8 de Raspberry Pi Pico: sensor ultrasónico - 330ohms