
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.

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


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

Demostración del osciloscopio DIY
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:
Build an oscilloscope using Raspberry Pi and Arduino