Vous êtes sur la page 1sur 17

“AÑO DE LA LUCHA CONTRA LA CORRUPCIÓN Y LA IMPUNIDAD”

NOMBRE:

Querebalu Trelles Nicolas


Santos Cunia Juan
Durand Inga Isac

CURSO:

Procesamiento Digital De Señales

TEMA:

Proyecto Laboratorio

PROFESOR:

Ing. Juan Manuel Jacinto Sandoval

FACULTAD:

Ciencias

ESCUELA:

Ingeniería Electrónica y Telecomunicaciones

AÑO_2019
Tabla de Contenido

1. Propósito
2. Alcance
3. Documentos de referencia
4. Definiciones importantes
4.1. Conceptos generales
4.2. Procesos de entrada y salida
5. Diccionario de datos
5.1. Restricciones especiales
6. Instalación y configuración
6.1. Requisitos generales pre-instalación
6.2. Detalles del proceso de instalación
6.3. Detalles de configuración de la aplicación
a. Parámetros de aplicaciones
7. Desarrollo del Programa
8. Equipos y Componentes
9. Resultados
10. Limitaciones y Problemas del Programa
11. Posibles Soluciones
12. Recomendaciones
13. Conclusiones.
14. Referencias Bibliográficas
15. Anexos
1. Propósito
El propósito del presente proyecto es la aplicación de los conceptos de
procesamiento digital de señales para el tratamiento de una señal. Este está
caracterizado por la representación en el dominio del tiempo discreto, en el dominio
frecuencia discreta, u otro dominio discreto de señales por medio de una secuencia
de números o símbolos y el procesado de esas señales.

El software seleccionado es Python que tiene licencia de código abierto y para la


comunicación serial entre la PC, siguiendo la misma toma de decisiones, el software
Arduino.
El proyecto realizado se basa principalmente en el tratamiento de señales a través
de arduino y Python, por medio de conversor analógico digital, que incluye el uso
de la librería Pyqtgraph, Numpy (en python) y el código declarado para que tome
valores en rangos mínimos y máximos que se explicaran más adelante (en arduino).
Como segunda parte se toma la comunicación serial a través de arduino, siendo
este último simplemente un puente entre el procesamiento y el medio a tratar.
Esta investigación nos abre un campo de aplicaciones muy amplio ya que también
se lo puede aplicar en imágenes.

2. Alcance
El alcance del Proyecto en los sistemas de tratamiento de señales usando técnicas
sofisticadas tiene una amplia aplicación en el mundo moderno, se usan en el
electrocardiograma. En la mayoría de los casos estos sistemas son operados
directamente por seres humanos, lo cual implica que los resultados están sujetos a
la subjetividad de la percepción humana, lo cual puede llegar a convertirse en un
inconveniente en temas relacionados con la toma de decisiones (como ocurre en el
caso de decisiones arbitrales), de allí que implementar dispositivos de decisión “más
objetivos” traen grandes beneficios. El planteamiento del trabajo se basa en el
desarrollo de un generador de funciones y técnicas de procesamiento digital de
señales (filtro antialiasing, muestreo, ADC, DAC), logrando así el cumplimiento del
objetivo planteado para la presente investigación.

3. Documentos de referencia

Aprender a programar Python desde cero. Disponible en línea en:

https://www.youtube.com/watch?v=8yF8fo7rNvQ

Aprender a programar Arduino ADC. Disponible en línea en:

https://aprendiendoarduino.wordpress.com/tag/adc/
4. Definiciones importantes
4.1 Conceptos generales
Software Python:
Python es un lenguaje de programación interpretado cuya filosofía hace hincapié
en una sintaxis que favorezca un código legible. Se trata de un lenguaje de
programación multiparadigma, ya que soporta orientación a objetos, programación
imperativa y, en menor medida, programación funcional. Es un software de licencia
libre y de código abierto lo que facilita la adquisición de librerías gratis así mismo
un enorme beneficio en el procesamiento digital de señales y facilita la
comunicación serial entre dispositivos y la PC.
Puerto serial:
Un puerto serie o puerto serial es una interfaz de comunicaciones de datos digitales,
frecuentemente utilizado por computadoras y periféricos, en donde la información
es transmitida bit a bit enviando un solo bit a la vez, en contraste con el puerto
paralelo que envía varios bits simultáneamente.
Software Arduino:
Arduino es una plataforma de hardware de código abierto, basada en una sencilla
placa con entradas y salidas, analógicas y digitales, en un entorno de desarrollo que
está basado en el lenguaje de programación Pressing.
Arduino 1:
Arduino UNO es la versión mejorada de su predecesor Duemilanove. Incluye
función de autoreset, protección de sobrecargas, conector USB para programarlo,
totalmente montado con componentes miniatura SMD (salvo el microcontrolador,
para poder cambiarlo facilmente) y nuevo bootloader OptiBoot a 155kbps.

4.2 Procesos de entrada y salida


En los datos de entrada para iniciar el procesamiento se encuentra el proceso de
tratar la señal convertir la señal analógica a digital (filtrear, muestrear, ADC) en la
tarjeta arduino.
Los procesos de salida son las variables establecidas de la señal analógica, la
comunicación serial por medio de la tarjeta Arduino Uno y python (para la gráfica).

5. Diccionario de datos
a. Restricciones especiales
Código del programa.
El programa desarrollo está basado en ejecutar instrucción por instrucción y no dos
o más instrucciones a la vez.
TRAJETA ARDUINO UNO
Se debe tener en cuenta que la tarjeta Arduino su conversor ADC va conectado a
un multiplexor, para que así, con uno solo de estos podamos tener varías entradas,
como es en el caso de las placas Arduino que normalmente cuenta con 6 de estas.

6. Instalación y configuración

a. Requisitos generales pre-instalación


Para el correcto funcionamiento y diseño de la placa o circuito de control es
necesario tener instalado el software de Python 3.7, las librerías NUMPY
1.8.0, PYQTGRAPH, PYSERIAL y el software de Arduino. El proyecto se
realizó en el sistema operativo Windows 7 x64bits en un ordenador con
procesador de Core I3 ,4 GB de RAM y una tarjeta gráfica AMD Radeon (TM)
HD 8500M/8700M de 2GB.
Python 3.7
La más compatible, ya que como ha estado más tiempo en el mercado existen una
gran de cantidad de librerías que pueden ser usadas con esta versión y así facilitar
el desarrollo de nuestras aplicaciones.

Descargar desde python.org/releases la versión ‘Windows X86-64 MSI Installer’


(versión estable de Python 3.7 para Windows x64bits con la que se realizó el
proyecto). Una vez descargado, hacemos doble-click en el instalador y aceptamos
todas las condiciones del instalador, no hay que preocuparnos por configuraciones
avanzadas, el instalador es sencillo de usar. Una vez finalizada la instalación, ya
deberíamos tener Python corriendo en nuestro sistema.
Una vez instalado, nos vamos a encontrar con tres maneras de usar Python:

Python Shell - la consola de Python, la cual nos permite ejecutar comandos línea
por línea.

IDLE GUI - una aplicación que nos permite escribir scripts más complejos para luego
ejecutarlos de manera sencilla.

Editor de texto - cualquier editor de texto que corra en tu sistema operativo te


permitirá escribir un script. Luego lo guardarás con la extensión .py y lo ejecutarás
desde el Shell.
b. Detalles del proceso de instalación

Instalación de Python en Windows (x64 bits):


El paquete para Windows es un instalador ejecutable. Abrir y seguir las
instrucciones que se indican en la ventana de instalación.
Python es de software libre no se necesitan licencias y se puede instalar fácilmente
como se lo indico anteriormente sin problemas.
Debemos navegar hasta el directorio de instalación de Python. Por defecto, debería
ser C:\Python3.7 Una vez ahí, ejecutamos python.exe

Si nos aparece lo siguiente, accedimos satisfactoriamente al Shell de


Python:

IDLE
Para abrir el IDLE de Python navegamos hasta la carpeta de instalación de Python
y ejecutamos el archivo denominado IDLE (Para Mac/Linux/Windows). Una vez
abierto, vemos que la aplicación nos proporciona el Shell. La funcionalidad más
importante que ofrece es la capacidad de crear y modificar archivos.

Para instalar Numpy y pyqt5, en Python 3.7

Lo siguiente que necesitamos es la librería Numpy, pyqtgraph la cual es necesaria


para poder trabajar con PYQTGRAPH. La versión utilizada para este proyecto es
NumPy 1.8.0. La instalamos como cualquier otro programa, nos preguntara la ruta
donde instalamos Python3.7 le damos en siguiente hasta finalizar la instalación.

Para instalar PYQTGRAHP 2.4.11 en Python 3.7.4

Se tiene que descargar PYQTGRAHP la versión para Windows. Este es un archivo


comprimido los ejecutamos y comenzara la extracción en la carpeta indicada, por
ejemplo C:\ es la ruta de instalación recomendada.
Una vez terminado este proceso vamos a la carpeta C:\pyqtgrahp\build\python\3.7
aquí encontraremos el archivo pyqtgrahp.pyd, lo copiamos y lo pegamos en
C:\Python3.7\Lib\site-packages.
Si todo está correcto podremos ejecutar el siguiente código Python:

import numpy
import pyqtgrahp

print("Version NumPy: " + numpy.__version__)


print("Version Pyqtgrah: " + pyqtgrahp.__version__)

y nos deberá aparecer las versiones antes menciones para cada una de las librerías.
Lo mismo sucede con la librería Piserial.f. Requisitos del sistema para la
instalación de Python 3.7.4

c. Hardware mínimos recomendado:


Esta sección indica las recomendaciones hardware y software que ayudarán a
obtener a que el script creado en el intérprete IDLE SHELL PYTHON 3.7 se ejecute.
La siguiente lista muestra los requerimientos hardware y software mínimos
necesarios para ejecutar la versión de 64 bits del programa realizado en el intérprete
SHELL PYTHON 3.7.4:

1. Microsoft Windows 95/98 o Windows NT, Xp, Vista , Seven.


2. El sitio de internet donde puede descargar el ambiente de aprendizaje del
lenguaje Python es: http://sourceforge.net/projects/
3. Procesador Intel 486 o superior
4. 16MB de RAM o superior.
5. Pantalla con resolución 800 x 600 o superior
6. 20 MB de espacio de disco fijo libre.
7. Sin embargo Microsoft cuenta con un ejecutable InstallWizard que está
diseñado para computadoras típicas de desarrollo, lo que significa un procesador
Pentium y una resolución de 800 x 600 o superior. Se puede ejecutar lnstallWizard
en una pantalla de 640 x 480, pero es posible que se necesite disponer de ventanas
diferentes para ver toda la información.
d. Hardware y Software recomendados

Los requerimientos software y hardware mínimos no siempre son la opción óptima


para la facilidad de uso, rendimiento y disfrute del producto completo.
Recomendamos el siguiente perfil de sistema para optimizar la ejecución y/o corrida
del programa de nuestro proyecto realizado en el programa-intérprete: IDLE SHELL
PYTHON 3.7 por parte de © Copyright 2010GRUPO T2 Company:

1. PC con procesador Pentium, a velocidad de 200MHz (o superior).


2. 32 MB de RAM.
3. 1GB de espacio de disco fijo.
4. Monitor Súper VGA. Será conveniente un microprocesador rápido que pueda
manejar el tamaño y complejidad de las aplicaciones Windows avanzadas. La
cantidad de memoria maximiza el rendimiento completo del programa como del
entorno Windows (también se puede obtener un aumento de este rendimiento
teniendo gran cantidad de espacio de disco libre).Aparecen dos sistemas operativos
como nuevos estándares para los PC de 32 bits; Windows95/98, o su primo más
robusto, Windows NT. Si no se tiene actualizado Windows 95/98 o Windows NT, se
debería hacer antes de instalar C++ de Microsoft. Las mejoras realizadas a
Windows 95/98 y a Windows NT, proporcionan las prestaciones y el rendimiento
necesario para crear aplicaciones de gran actualidad en Windows. Conforme se
desarrollen estas aplicaciones en un entorno gráfico, se apreciará la resolución de
los monitores Súper VGA.

7.DESARROLLO DEL PROGRAMA


a. Desarrollo de la programación.
Para que nuestro proyecto lleve a cabo el procesamiento digital de señales, en la
tarjeta arduino

Sistema de adquisición de datos. Pre-procesamiento de señales Tras una etapa de


acondicionamiento adecuado, la señal de la entrada analógica son digitalizadas,
transformadas y almacenadas para su posterior análisis. Es importante mencionar,
que la tasa de muestreo durante la adquisición de datos debe ser al menos dos
veces la frecuencia más alta en la respuesta de la señal. Para que el proceso de
conversión analógico-digital y digital-analógico sea válido se deberá realizar al doble
de la frecuencia máxima, a este proceso se le conoce como el teorema de muestreo
de Nyquist. El Arduino Uno es una placa electrónica basada en el chip ATmega328.
Cuenta con 14 pines digitales de entrada / salida, de los cuales 6 pueden utilizarse
para salidas PWM (Pulse Width Modulation), 6 entradas analógicas, un oscilador de
16 MHz
b. Programación en software arduino
#define mysize 300
unsigned long tStart;
unsigned long tEnd;
byte mydata[mysize];
void setup()
{
Serial.begin(9600); #comunicacion con python
Preescaler

Configure to Prescaler=32
bitWrite(ADCSRA,ADPS2,1);
bitWrite(ADCSRA,ADPS1,0);
bitWrite(ADCSRA,ADPS0,1);

Discretizar la señal:
void loop()
{
tStart=micros();
for (int i=0; i<mysize;i++)
{
mydata[i]=analogReadFast();
}
tEnd=micros();
for (int i=0; i<mysize;i++)
{
Serial.println(mydata[i],DEC);
}
}
int analogReadFast()
{
ADCSRA|=(1<<ADSC);
// ADSC is cleared when the conversion finishes
while (bit_is_set(ADCSRA, ADSC));
return ADCH;
}

c. Programación en el software Python


Para la realizar el tratamiento de señal en tiempo real vamos a utilizar las librerías
de Numpy, Pyqtgraph y Serial.

Fig.7. Logo del Librería Pyqtgraph

El procedimiento a seguir es el siguiente:

1. Creamos el puerto serie.


2. Iniciamos el qtapp
3. Ancho de banda, crear la matriz que contendrá las series de
tiempo relevantes.
4. Gráficos tiempo real.
5. Programa principal (bucle infinito).
6. Fin qtapp

De la librería Pyqtgraph usaremos estas funciones:

Lo mínimo requerido para poder usar el pyQtGraph es incluir el paquete en


nuestro script de python y crear la app.
Primera ventana y gráfica en PyQtGraph

Vamos a crear primero una ventana estándar con un título y vamos a añadir a esta
ventana una gráfica (Plot). De momento vamos a darles solo un título, tanto a la
ventana y a la gráfica.

A continuación se explicara cada parte del código desarrollado en Python.

El proceso principal está contenido en la función update ()


Lee el valor de entrada del puerto serie, actualiza la matriz Wn (que contiene los
valores de entrada) .luego actualiza su curva asociada.
Funciona solo para bajas tasas de datos (menos de 100 muestras / s).
Para velocidades de datos más altas, se debe modificar dentro de la función
update () de la siguiente manera.
Un conjunto de valores (en lugar de uno solo) debe leerse desde el puerto serie.
Entonces, dicho conjunto debe ser anexado a la matriz Wn
# Importar bibliotecas
from numpy import *
from pyqtgraph.Qt import QtGui, QtCore
import pyqtgraph as pg
import serial

# Crear puerto serie objeto


portName = "COM5" # reemplaza este nombre de puerto por el
tuyo!
baudrate = 115200
arduinoPort = serial.Serial(portName,baudrate)

#INICIAR QtApp
app = QtGui.QApplication([]) # DEBES hacer esto una vez (inicializa las
cosas)

win = pg.GraphicsWindow(title="Señal desde el arduino") # crea una ventana


p = win.addPlot(title="Trama en tiempo real") # crea espacio vacío para la trama
en la ventana
curve = p.plot() # crear una "trama" vacía (una curva para trazar)

windowWidth = 500 # ancho de la ventana mostrando la curva


Wn = linspace(0,0,windowWidth) # crear matriz que contendrá las series de
tiempo relevantes
ptr = -windowWidth # establecer la primera posición x

# Gráfico de datos en tiempo real. Cada vez que se llama a esta función, se
actualiza la pantalla de datos.
def update():
global curve, ptr, Wn
Wn[:-1] = Wn[1:] # datos de desplazamiento en la media temporal 1 muestra
izquierda

value = arduinoPort.readline() # línea de lectura (valor único) desde


el puerto serie

Wn[-1] = float(value) # vector que contiene los valores instantáneos


ptr += 1 # actualizar la posición x para mostrar la curva
curve.setData(Wn) # establecer la curva con estos datos
curve.setPos(ptr,0) # establece la posición x en el gráfico a 0
QtGui.QApplication.processEvents() # DEBES procesar la trama ahora
#PROGRAMA PRINCIPAL
# este es un bucle infinito brutal que llama a tu gráfica de datos en tiempo real
while True: update()

#FIN QtApp
pg.QtGui.QApplication.exec_() # DEBES poner esto al final

8. Equipos y Componentes
Para la programación:
 Software Python
 Software Arduino
 Tarjeta Arduino Uno
 Generador de funciones

9 RESULTADOS

Los objetivos del presente Proyecto de investigación se han cumplido a cabalidad.


Todas las pruebas realizadas nos han permitido establecer las bondades del
procesamiento de señales. Sin embargo al no existir un ambiente controlado los
factores que interfieren en el procesamiento resultaron ser un ligero problema en el
tratamiento señales.

10. LIMITACIONES Y PROBLEMAS DEL PROGRAMA

La primera limitación se presenta en el entorno de programación Python la


programación se la realizó en el Sistema operativo versión 3.7 porque presentaba
facilidades para la comunicación serial así como la compatibilidad con las diferentes
librerías que se utilizó como Pyqtgrapg,Pyqt5. Las versiones más recientes
presentaban dificultades al momento de ejecutar el programa y realizar la
comunicación serial con el entorno arduino. Además debe escribirse el programa en
forma ordenada y sistemática porque al momento de ejecutarlo una columna
desalineada lo presentará como parte de otro bloque asumiendo otro tipo de
estructura de ejecución o error.
11. POSIBLES SOLUCIONES

1. En cuanto al software de programación se debe tener un amplio


conocimiento del funcionamiento de Python, la lógica de programación, la
sintáxis y todo lo concerniente al entorno de programación que se está
ejecutando.

12. CONCLUSIONES

 Se logró cumplir a cabalidad los objetivos planteados para el presente


Proyecto. De todas las posibles técnicas de DSP que existen se investigó y
aplicó sobre el tratamiento de señal en tiempo real llevándolo a cabo a través
del software de arduino y Python.
 Aprendimos los diferentes métodos de convertir la señal analógica a digital.
 Se pudo tener una ida mucho más clara del funcionamiento de dichas
librerías pyqtgraph que grafican en tiempo real.
13. RECOMENDACIONES
 La lógica de programación, como la metodología, la sintáxis y la correcta
utilización del software Python nos proporcionará resultados muy precisos y
claros en cuanto a la temática planteada y por ende a la consecución de los
objetivos propuestos.
 Determinar el correcto método de procesamiento de señales, en este caso
ADC, para poder aplicar los conceptos en la programación en arduino.

14. REFERENCIAS BLIBLIOGRÁFICAS

[1] https://es.wikipedia.org/wiki/Python.
[2] http://www.pyqtgraph.org/
[3] http://www.laboratoriogluon.com/pyqtgraph-graficas-tiempo-real-con-
python/
[4] https://www.uv.es/soriae/tema_1_pds.pdf
https://booleanbite.com/web/adquisicion-de-datos-con-arduino-i-tiempo-de-
muestreo-y-resolucion/
15.ANEXO:
Programación en arduino
#define mysize 300

unsigned long tStart;


unsigned long tEnd;
byte mydata[mysize];

void setup()
{
Serial.begin(115200);

//Prescaler
//ADPS2 - ADPS1 - ADPS0 - Division Factor
//0 -0 -0 ->2
//0 -0 -1 ->2
//0 -1 -0 ->4
//0 -1 -1 ->8
//1 -0 -0 ->16
//1 -0 -1 ->32
//1 -1 -0 ->64
//1 -1 -1 ->128
//Configure to Prescaler=32
bitWrite(ADCSRA,ADPS2,1);
bitWrite(ADCSRA,ADPS1,0);
bitWrite(ADCSRA,ADPS0,1);

//Entrada A3

ADMUX=(1<<ADLAR)|(0<<REFS1)|(1<<REFS0)|(0<<MUX3)|(0<<MUX2)|(1<<MU
X1)|(1<<MUX0);
}

void loop()
{

tStart=micros();
for (int i=0; i<mysize;i++)
{
mydata[i]=analogReadFast();
}
tEnd=micros();

for (int i=0; i<mysize;i++)


{
Serial.println(mydata[i],DEC);
}

int analogReadFast()
{
ADCSRA|=(1<<ADSC);
// ADSC is cleared when the conversion finishes
while (bit_is_set(ADCSRA, ADSC));
return ADCH;
}

Programación Python

Vous aimerez peut-être aussi