Approved Reseller
Approved Reseller
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:
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…
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)); }
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
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: