% !TeX spellcheck = es_MX
%!TeX root=../thesisStructure.tex
% Chapter 2

\chapter{Marco teórico} % Chapter title
\label{ch:MarcoTeorico} 

%introducción
En este capítulo se presenta una recopilación de investigaciones previas e información teórica relacionada con el sistema realizado en este trabajo.
Los temas que se abordan en este marco teórico son:
adquisición de datos y sus partes básicas,
una breve descripción de los sistemas embebidos, así como
Linux embebido,
el sistema operativo \textit{Debian},
la \textit{single-board computer} \textit{Beaglebone Black},
el protocolo \textit{Secure Shell},
el entorno de desarrollo \textit{Cloud9},
y las librerías de C \texttt{termios.h} y \texttt{time.h}.
También se explica que es un 
dispositivo UART y
se muestra la información general de: los sensores de gas utilizados en este sistema y 
de un sistema de asimiento digital basado en el CI \textit{ISOW7842}.

\section{Adquisición de datos}
La adquisición de datos es un proceso en el cuál se obtiene información de uno o varios fenómenos físicos a través del tiempo.
Dichas variables son medidas con sensores, los cuales transforman una magnitud de una variable física en un potencial eléctrico.
Las mediciones pueden ser obtenidas a través de un sistema de adquisición y almacenadas en algún otro dispositivo.
Los sistemas de adquisición de datos más comunes, como el mostrado en la \autoref{fig:partesSysDaq}, se componen de tres partes principales: 
sensores, 
dispositivo \textit{DAQ} (por sus siglas en inglés, Data Acquisition) 
y un equipo de computo\cite{daqNI}.

\begin{figure}[!h]
	\centering
	\includegraphics[width=12cm]{figures/partesSysDaq}
	\caption[Diagrama de las partes de un sistema de adquisición de datos.]{Diagrama de las partes de un sistema de adquisición de datos\cite{daqNI}.}
	\label{fig:partesSysDaq}
\end{figure}

	\subsection{Sensores}
	Los sensores son transductores que transforman una variable física en una señal eléctrica que puede ser voltaje, corriente, resistencia o algún otro atributo electrónico.
	Esta señal comúnmente requiere un acondicionamiento, donde se puede filtrar el ruido, establecer los valores mínimos y máximos de ésta, entre otras cosas.
	Una vez que la señal sea apta, ésta podrá ser leída e interpretada por un dispositivo electrónico de manera segura y adecuada\cite{daqNI}.

	\subsection{Dispositivo \textit{DAQ}}
	La función del dispositivo \textit{DAQ} es hacer de interfaz entre la computadora y los sensores, obteniendo las mediciones de las variables físicas y digitalizándolas para que la computadora pueda interpretarlas.
	Este dispositivo \textit{DAQ} puede componerse de tres partes: 
	el circuito de acondicionamiento de señales, 
	un \textit{ADC} (acrónimo de analogue-to-digital converter), 
	y un bus de comunicación con la computadora, que puede ser \textit{Ethernet}, \textit{Wi-Fi}, \textit{USB}, \textit{PCI} o algún otro\cite{daqNI}\cite{sysdaqElectroIndustriaMag}.
	
	El circuito de acondicionamiento de señales toma la señal eléctrica proveniente del sensor y la modifica para que la señal sea segura y libre de ruido y apta para ser medida por el convertidor \textit{ADC}.
	Por su parte, el convertidor \textit{ADC} toma la señal del sensor acondicionada y crea una representación digital de ésta en un instante en el tiempo.
	Esta operación es repetida periódicamente para obtener una representación digital de una señal analógica cambiante a través del tiempo.
	La función del bus de comunicación es ser la interfaz entre el dispositivo \textit{DAQ} y la computadora para poder enviar instrucciones y recibir las mediciones realizadas\cite{daqNI}.
	
	De esa forma los elementos de un sistema de adquisición de datos interactúan, para así registrar y observar el mundo físico.
	Ésta información permite analizar el comportamiento de los fenómenos, lo que nos ayuda a tomar decisiones informadas.
		
	\subsection{Computadora y software}
	La computadora con el software se encarga de controlar la operación del dispositivo \textit{DAQ} además de procesar, visualizar y almacenar la información de las variables físicas obtenidas.
	El software facilita la interacción entre la computadora y el usuario para poder obtener, registrar y analizar datos.
	Este software hace uso de la \textit{API} (\textit{Application Programming Interface}), la cuál abstrae comandos de bajo nivel y se hace programación a nivel registro\cite{daqNI}.
	
\section{Sistemas Embebidos}
Los sistemas embebidos están presente en el día a día. Ejemplos incluyen
máquinas expendedoras, electrodomésticos, teléfonos/teléfonos inteligentes, líneas de fabricación/montaje, televisores, consolas de juegos, automóviles (e.g., dirección asistida y sensores de marcha atrás), conmutadores de red, enrutadores, puntos de acceso inalámbricos, sistemas de sonido, equipos de control médico, impresoras, edificios controles de acceso, parquímetros,
medidores inteligentes de energía/agua, relojes,
herramientas de construcción, cámaras digitales, monitores, tabletas, lectores electrónicos, cualquier dispositivo robótico, sistemas de acceso/pago con tarjeta inteligente, y más\cite{molloy2019exploring}.

Los sistemas embebidos pueden verse como un tipo de sistema computacional con \textit{software} integrado, que son diseñados para una aplicación específica\cite{molloy2019exploring}.
Estos sistemas pueden tener las siguientes características:
\begin{itemize}
	\item Tienden a estar dedicados a aplicaciones específicas.
	\item Suelen tener recursos, como poder de procesamiento y memoria, limitados.
	\item Generalmente son parte de un sistema más grande que pueden estar vinculados a sensores o actuadores externos.
	\item Suelen tener un rol donde la confiabilidad es crítica, por ejemplo, controles para carros, aviones, y equipo médico.
	\item Suelen trabajar en tiempo real, donde sus salidas están directamente relacionadas con las entradas, por ejemplo, sistemas de control.
	\item En los últimos tiempos, la conectividad se ha convertido en una característica principal de los sistemas embebidos, permitiendo a estos ser componentes base del internet de las cosas.
\end{itemize}
		
\section{Linux embebido}
El termino de ``Linux embebido'' hace
referencia a una distribución de Linux cualquiera utilizada en un sistema embebido, no hay una distribución específica de Linux embebido\cite{molloy2019exploring}.
El concepto sistema embebido puede ser explicado de forma simplificada como un sistema de computo con software integrado que fue diseñado para una aplicación especifica\cite{molloy2019exploring}.

%Ventajas de eLinux
El uso de Linux tiene varias ventajas tanto económicas como técnicas, por lo cuál existe una gran adopción de Linux en sistemas embebidos. Algunas de las razones del crecimiento de Linux embebido han sido su alto rendimiento y estabilidad, su enorme variedad de aplicaciones y protocolos de redes soportados, su escalabilidad, el no tener costo alguno por derechos de autor, el rápido soporte de nuevas arquitecturas de hardware, además de que cada vez más distribuidores de hardware y software son compatibles con Linux\cite{hallinan2011embedded}.
	
	\subsection{Sistema operativo Debian}
	Debian es un sistema operativo libre creado por una asociación de programadores voluntarios con el único objetivo de crear \textit{software} libre.
	Actualmente utiliza el kernel de Linux, creada en un principio por Linus Torvalds y desarrollada por miles de programadores alrededor del mundo. El kernel Linux se encarga de realizar todas las tareas básicas del sistema, permitiendo la ejecución de otros programas, como el explorador de archivos, la terminal y el procesador de textos, por citar algunos ejemplos\cite{DebianWebPage}.
	
	Mientras el kernel Linux conforma el núcleo que interactua directamente con el \textit{hardware}, GNU proporciona las herramientas básicas de este sistema operativo, como las ya mencionadas anteriormente. De la combinación de estos dos \textit{softwares} nace el termino GNU/Linux, que prácticamente es a lo que las personas se refieren al decir "distribución de Linux"\cite{DebianWebPage}\cite{GNUWebPage}.
	
	Debian incluye más de 59 mil paquetes (software precompilado y empaquetado), el gestor de paquetes APT (\textit{Advanced Packaging Tool}), y otras utilidades que hacen posible gestionar fácilmente miles de paquetes en miles de dispositivos (ordenadores o sistemas embebidos)\cite{DebianWebPage}.
	
	Así pues, Debian se encarga del correcto funcionamiento de un sistema, gestionando y organizando las tareas, utilizando el núcleo y las demás herramientas básicas para que un usuario pueda ejecutar aplicaciones más complejas en un dispositivo\cite{DebianWebPage}.	
	
	\subsection{Beaglebone Black}
	%introducción
	La Beaglebone Black, mostrada en la \autoref{fig:BBBc2}, es una tarjeta que forma parte de la familia \textit{Beagle boards}.
	Las \textit{Beagle boards} son plaformas de desarrollo \textit{open-source} que utilizan sistemas operativos basados en Linux. Son compactas, de bajo costo, y pueden ser utilizadas para construir aplicaciones complejas donde interaccionen el \textit{software} de alto nivel con los circuitos electrónicos de bajo nivel.
	Estas tarjetas son plataformas ideales para hacer prototipos de proyectos y diseño de productos que toman ventaja de la libertad y el poder de Linux, combinado con el acceso directo a pines y buses de entrada/salida, permitiendo la comunicación con componentes electrónicos, módulos y dispositivos\cite{molloy2019exploring}.
	
	\begin{figure}[!h]
		\centering
		\includegraphics[width=12cm]{figures/beaglebone-black.jpg}
		\caption{Beaglebone Black Rev. C.}
		\label{fig:BBBc2}
	\end{figure}
	
	%información técnica
	%micro/procesamiento
	La tarjeta \textit{Beaglebone Black} utiliza el microprocesador ARM (Máquina RISC Avanzada, por sus siglas en inglés) Sitara AM335x Cortex-A8 de \textit{Texas Instruments} con una velocidad de 1 GHz.
	También integra dos PRU (unidad de tiempo real programable, por sus siglas en inglés) de 32 bits, lo que le permite realizar tareas en tiempo real utilizando dos microcontroladores independientes, y utiliza el motor gráfico PowerVR SGX530, capaz de renderizar hasta 20 millones de polígonos en un segundo\cite{molloy2019exploring}.
	Cabe mencionar que el consumo de este procesador cuando está inactivo es de aproximadamente 1 watt, mientras que con cargas pesadas puede llegar a los 2.3 watts.
	
	En cuanto a capacidades de memoria, esta plataforma cuenta con 512 MB de RAM DDR3 para poder realizar las tareas del sistema operativo y el usuario, tiene una eMMC (tarjeta multimedia embebida, por sus siglas en inglés) de 4 GB, para almacenar y ejecutar el sistema operativo, y finalmente una ranura para tarjetas micro SD, con la cuál se puede expandir la memoria de almacenamiento o correr una imagen alterna del sistema operativo desde ésta.

	La tarjeta \textit{Beaglebone Black} viene con una imagen del sistema Debian instalada en la eMMC de fábrica, pero el sistema operativo se puede actualizar o cambiar a otro sistema Linux, como Ubuntu, Android o Angstrom.
	
	%perifericos
	En cuestión de periféricos, esta tarjeta con una variedad variedad, comenzando con sus 65 puertos de entrada/salida de propósito general, con los cuales puede generar y leer señales digitales, ocho salidas con modulación de ancho de pulso (PWM), siete entradas analógicas, para poder leer señales analógicas a través del convertidor analógico-digital y 4 temporizadores para hacer tareas en tiempos específicos.
	Para la comunicación serial cuenta con: 2 puertos I$^{2}$C, 4 UART, 2 CAN y 2 SPI.
	
	%puertos
	En cuanto a puertos, la tarjeta \textit{Beaglebone Black} dispone de un puerto USB, para conectarle algún dispositivo o periférico externo, un puerto micro USB de alimentación y datos, para conectarlo a una computadora, un puerto micro HDMI, para conectarle un monitor externo, un puerto Ethernet, para conectarse a una red y una entrada de 5V, para alimentarlo con una fuente externa.
	
	Además de estas características, esta plataforma también puede hacer uso de varias herramientas de utilidad las cuales se mencionan a continuación.
	
	\subsection{Protocolo Secure Shell}
	Secure Shell (SSH) es un protocolo de comunicación encriptada y segura entre dos dispositivos\cite{molloy2019exploring}.
	Este método permite iniciar sesión remotamente de una computadora a otra de forma segura.
	Todas las autenticaciones de usuario, comandos, salidas, y transferencias de archivos son encriptadas para proteger de ataques en la red\cite{SSHWebPage}.
	
	%The protocol works in the client-server model, which means that the connection is established by the SSH client connecting to the SSH server. The SSH client drives the connection setup process and uses public key cryptography to verify the identity of the SSH server. After the setup phase the SSH protocol uses strong symmetric encryption and hashing algorithms to ensure the privacy and integrity of the data that is exchanged between the client and server.			
	El protocolo usa el modelo cliente-servidor, por lo cual la conexión es establecida por el cliente SSH conectándose al servidor SSH.
	El cliente dirige el proceso de la configuración de la conexión y utiliza criptografía de clave pública para verificar la identidad del servidor SSH. 
	Después de la configuración, el protocolo SSH usa un cifrado simétrico fuerte y algoritmos de hashing para asegurar la privacidad e integridad de la información intercambiada entre el cliente y el servidor\cite{SSHWebPage}.
	
	La forma de utilizar SSH para ingresar con un usuario específico a otra computadora remotamente desde una terminal Linux es con el comando ``\texttt{ssh usuario@servidor}'' , a continuación se deberá ingresar la contraseña del mismo usuario.
	
	El protocolo SSH también cuenta con un programa para intercambiar archivos entre cliente y servidor, de forma remota y segura, llamado \texttt{scp} (\textit{secure copy}).
	La forma básica de utilizarlo para copiar un archivo al servidor es:
	``\texttt{scp archivo.ext usuario@servidor:ruta/al/archivo}''.
	Para copiar un archivo desde el servidor se utiliza de la forma:
	``\texttt{scp usuario@servidor:/ruta/al/archivo.ext ruta/local}''\cite{SSHWebPage}.
	
	\subsection{Entorno de desarrollo \textit{Cloud9}}
	%Cloud9 is an online software integrated development environment (IDE)	
	%integrate the development of Node.js code with the execution environment
	%web-based coding platform that supports many different programming languages
	%write, run, and debug
	\textit{Cloud9}, mostrado en la \autoref{fig:Cloud9}, es un entorno de desarrollo integrado (\textit{Integrated Development Environment}) basado en la nube que soporta varios lenguajes de programación. Este IDE integra el desarrollo de código con un entorno de ejecución, permitiendo escribir, correr y depurar código local o remotamente\cite{molloy2019exploring}.

	\begin{figure}[h]
		\centering
		\includegraphics[height=7.5cm]{figures/cloud9}
		\caption[Entorno de desarrollo integrado \textit{Cloud9}]{Entorno de desarrollo integrado \textit{Cloud9}\cite{Cloud9dummies}.}
		\label{fig:Cloud9}
	\end{figure}
	
	
	%within your web browser without installing any operating-system-specific tools or applications
	%low enough overhead to run directly on a Beagle board
	%it comes preinstalled
	%save files directly on your board’s Linux file system
	
	Este IDE viene preinstalado y habilitado en las imagenes de sistema operativo disponibles en la página web \url{https://beagleboard.org/}, tiene una carga de procesamiento suficientemente baja para poder correr desde una \textit{Beagle board} y puede ser accedido remotamente desde una computadora a través de un navegador web, por lo que no es necesario instalar alguna aplicación adicional. Esto a su vez elimina el uso restrictivo dentro de algún sistema operativo específico. 
	Para poder utilizar este IDE de forma remota es necesario introducir la IP de la \textit{Beaglebone} en la barra de dirección del navegador web.
	Opcionalmente, también se puede conectar a la \textit{Beaglebone} con un cable \textit{Ethernet} e introducir el \textit{hostname} de ésta\cite{Cloud9dummies}.	

	
	Cabe aclarar que aunque la interfaz gráfica se muestra a través de en un ordenador local, el IDE se ejecuta desde la \textit{Beagle board} a través de un servidor web local, alojando en ésta los proyectos con sus respectivos archivos.
	
	En definitiva, \textit{Cloud9} es una herramienta de gran utilidad para llevar a cabo el desarrollo de nuestros proyectos de programación utilizando plataformas de Linux emebido como lo son las \textit{Beagle boards}

	
%	Cloud9 es un entorno de desarrollo integrado (IDE, por sus siglas en inglés) adquirido por Amazon como parte de sus servicios web (AWS, por sus siglas en inglés).
%	Este está basado en la nube y se pueden realizar acciones como escribir, ejecutar y depurar código.
%	
%	%desde navegador (sin ide instalado)
%	Ya que el IDE Cloud9 está basado en la nube, se puede ejecutar desde una instancia de \textit{Amazon Elastic Compute Cloud} (EC2) o desde un servidor Linux compatible con SSH, esto hace posible escribir, ejecutar y depurar aplicaciones desde un navegador web sin tener un IDE local instalado.
%	Esto también hace posible trabajar en proyectos desde la oficina, casa o cualquier sitio con conexión a Internet.
%	
%	%el editor
%	El editor de código y depurador integrado de Cloud9 incluye algunas características útiles como la sugerencia y el completado de código, y la depuración por capas.
%	Además, el IDE Cloud9 también incluye herramientas esenciales para los lenguajes de programación más conocidos, como Node.js, JavaScript, Python, PHP, Ruby, Go y C/C++, entre otros, lo que hace posible la realización de proyectos sin instalar archivos o complementos y sin configurar la máquina de desarrollo.
%	
%	%terminal
%	EL IDE Cloud9 incluye una terminal, la cuál se muestra en la \autoref{fig:c9term}, con privilegios de súper usuario sobre el servidor, o instancia de \textit{Amazon} EC2, de tal forma que es posible ejecutar comandos dentro del IDE, así como acceder a los servicios de AWS desde la terminal cuando se administra una instancia.
%
%	\begin{figure}[!h]
%		\centering
%		\includegraphics[width=12cm]{figures/cloud9-terminal}
%		\caption{Terminal del IDE Cloud9\cite{Cloud9WP}.}
%		\label{fig:c9term}
%	\end{figure}
%	%\clearpage
%	
%	%colaboración en equipo
%	Gracias a que Cloud9 es un servicio basado en la nube es posible compartir el entorno de desarrollo entre los integrantes de un equipo, lo que permite programar, dar seguimiento a las ediciones de cada miembro del equipo, así como chatear instantáneamente dentro del IDE, con lo cuál se facilita la colaboración mediante código.
%	En la \autoref{fig:c9col} se muestra una visualización de la colaboración en equipo del IDE Cloud9.
%	
%	\begin{figure}[!h]
%		\centering
%		\includegraphics[width=12cm]{figures/cloud9-colaboration}
%		\caption{Visualización de la colaboración en equipo en el IDE Cloud9\cite{Cloud9WP}.}
%		\label{fig:c9col}
%	\end{figure}
%	
%	%servicios
%	Como Cloud9 está basado en la nube, se puede mantener fácilmente varios entornos de desarrollo para aislar los recursos de su proyecto.
%	Asimismo, Cloud9 proporciona una experiencia fluida de desarrollo de aplicaciones sin servidor, lo que permite definir recursos con facilidad, así como depurar y cambiar entre ejecuciones locales y remotas de aplicaciones sin servidor\cite{Cloud9WP}.
	
\section{Librerías útiles del lenguaje C}

	Dentro del entrono de desarrollo en lenguaje C hay dos librerías que son de gran utilidad para poder realizar tanto comunicación serial (\texttt{termios.h}), como para tener una noción del tiempo, hora y fecha (\texttt{time.h}), ambas se explican a mayor profundidad en seguida en su sección correspondiente. 
	
	\subsection{Librería \texttt{termios.h}}
	La librería \texttt{termios.h} es una interfaz general de la terminal para controlar puertos de comunicación asíncrona para el lenguaje de programación C.
	Esta librería poseé una estructura con los parámetros de la comunicación, los cuales pueden ser modificados, así como funciones de transmisión y recepción de datos y control de la comunicación.
	
	%estructura termios
	La estructura \texttt{struct termios}, definida dentro de la librería \texttt{termios.h}, contiene los parámetros de al menos el manejo de los datos de entrada y salida, los modos de control de la comunicación, los modos de funcionamiento local y los caractéres especiales que pueden ser utilizados como comandos de control de la comunicación\cite{kerrisk2017linux}.
				
	%parámetros
	Los parámetros de la comunicación dentro de la estructura \texttt{struct termios}, que son manejados como un arreglo de banderas conformando una mascara de bits, pueden ser obtenidos y establecidos por medio de las funciones \texttt{tcgetattr()} y \texttt{tcsetattr()} respectivamente, dichas funciones están incluidas en la librería \texttt{termios.h}\cite{kerrisk2017linux}.
	%funciones
	%transmisión / recepción
	De esta forma, una vez habiendo configurado el puerto de comunicación estableciendo los parámetros, para transmitir y recibir datos es cuestión de escribir y leer el puerto a través de su archivo asociado en el sistema de archivos de Linux.
	
 	%de entrada pueden ser establecidos para configurar paradas, paridades, supresión del octavo bit, sustitución de "linea nueva" por "retorno de carro" o viceversa, omisión del retorno de carro, flujo de control en la salida, reinicio de salida parada, alerta de cola de entrada llena y entrada con codificación UTF-8.
	
	\subsection{Librería \texttt{time.h}}
	
	%INTRO
	La librería \texttt{time.h}, un archivo de cabecera de la biblioteca estándar del lenguaje de programación C, proporciona funciones para manipular y obtener información sobre fechas y horas.
	Incluye macros, que son constantes simbólicas definidas por el preprocesador, y una variedad de funciones y variables que permiten realizar mediciones de intervalos de tiempo, así como gestionar información de la hora, fecha e incluso horario de verano de la hora local, de otras regiones o diferentes épocas.
	
	%VARs
	La librería define varios tipos de variables para almacenar diferentes medidas de tiempo.
	El tipo \texttt{time\_t} representa el tiempo en segundos desde la época de Unix.
	Para una mayor precisión, se utiliza la estructura \texttt{timespec}, que incluye los miembros \texttt{tv\_sec} (segundos) y \texttt{tv\_nsec} (nanosegundos).
	La estructura \texttt{tm} se utiliza para representar un tiempo de calendario, con miembros como \texttt{tm\_year}, \texttt{tm\_mon}, \texttt{tm\_mday}, \texttt{tm\_hour}, \texttt{tm\_min}, \texttt{tm\_sec}, entre otros, que almacenan los componentes de una fecha de forma desglosada\cite{jones2010wg14}.

	%FUNCs
	\texttt{time.h} incluye diversas funciones para manipular fechas y horas:
	
	\subsubsection{Obtener el tiempo:}
	\begin{itemize} 
		\item\texttt{clock()}: Determina el tiempo de utilización del procesador, expresado en ciclos de reloj. Devuelve un valor de tipo \texttt{clock\_t}.
		\item\texttt{time()}: Determina el tiempo codificado de calendario actual, expresado en segundos desde la época de Unix.
	\end{itemize}
	
	\subsubsection{Convertir el tiempo:}
	\begin{itemize} 
		\item\texttt{asctime()}: Convierte una estructura tm en una cadena de caractéres que representa la fecha y hora.
		\item\texttt{ctime()}: Convierte un tiempo codificado (\texttt{time\_t}) en una cadena de caractéres.
		\item\texttt{gmtime()}: Convierte un tiempo codificado a una estructura tm expresado en UTC.
		\item\texttt{localtime()}: Convierte un tiempo codificado a una estructura tm expresado en la hora local.
		\item\texttt{strftime()}: Formatea una fecha y hora en una cadena de caractéres según una cadena de formato especificada.
	\end{itemize} 
		
	\subsubsection{Calcular diferencias de tiempo:}
	\begin{itemize} 
		\item\texttt{difftime()}: Calcula la diferencia entre dos tiempos codificados.
	\end{itemize} 

	
	\subsubsection{Otras funciones:}
	\begin{itemize} 
		\item\texttt{mktime()}: Convierte una estructura tm en un tiempo codificado.
		\item\texttt{timespec\_get()}: Obtiene la hora actual con precisión de nanosegundos.
	\end{itemize} 
	
	En resumen, la librería time.h proporciona un conjunto completo de herramientas para trabajar con fechas y horas en C, permitiendo a los desarrolladores obtener, manipular, formatear y convertir información temporal de diversas maneras.
		
\section{Transmisor-Receptor Asíncrono Universal}
	%descripción general / intro
	El UART (Universal Asynchronous Receiver-Transmitter, por sus siglas en inglés) es un protocolo de comunicación serial creado para transmitir y recibir datos entre dos dispositivos.
	Esta comunicación es de forma bidireccional, de modo que se utilizan dos hilos (Tx y Rx).
	En la \autoref{fig:uartConnection} se muestra un ejemplo de la conexión entre dos dispositivos.
	La comunicación también es asíncrona que, a diferencia de la comunicación sincrónica, no requiere transmitir una señal de reloj ya que cada dispositivo cuenta con su propio reloj.
	Por lo general los relojes utilizados en este dispositivo tienen una frecuencia múltiplo de la velocidad transmisión, para así poder tomar muestras en el medio de los bits que se reciben.
	%https://support.usr.com/support/s-cour/s-cour-docs/10589.htm
	
	\begin{figure}[!h]
		\centering
		\includegraphics[width=12cm]{figures/uartConnection}
		\caption{Conexión de dos dispositivos UART.}
		\label{fig:uartConnection}
	\end{figure}
	
	El dispositivo UART convierte el dato a transmitir en una serie de bits, haciendo uso de un registro de desplazamiento, el cuál es implementado con varios flip-flops conectados en cascada.
	De la misma forma, el receptor va desplazando los bits recibidos para reconstruir el dato original.
	
	%transmisión
	%bit inicio
	Para realiza una transmisión de un dato, el protocolo de comunicación establece que ésta debe comenzar con un bit de inicio, el cual es captado por el receptor, indicándole a este el inicio de una transmisión.
	De esta forma el receptor almacenará los siguientes bits recibidos.
	%transmisión
	Los bits del dato a transmitir suceden al bit de inicio uno por uno, y una vez transmitidos éstos,
	%bit de paro
	la comunicación termina con el bit de paro para en seguida pasar de nuevo al estado de reposo.
	En la \autoref{fig:uartT} se muestra de una manera gráfica como se lleva a cabo una transmisión de un dato a un dispositivo UART.
	
	\begin{figure}[!h]
		\centering
		\includegraphics[width=12cm]{figures/transmisionUART}
		\caption{Proceso de transmisión a un dispositivo UART.}
		\label{fig:uartT}
	\end{figure}
	
	Todos los bits transmitidos en esta comunicación tienen una duración determinada por la velocidad de transmisión.
	Los bits de inicio y paro de cada transmisión son generados por el dispositivo transmisor 
	y removidos por el receptor.
	La transmisión puede ser comenzada en cualquier momento, siempre y cuando no se esté realizando ya una.

	%configuraciones
	La comunicación entre dos dispositivos UART puede ser configurada con una gran cantidad de opciones, pudiéndose ajustar a las necesidades que se requieran para la comunicación.
	Se debe de tener el cuidado de que la configuración entre ambos dispositivos sea compatible para evitar errores en la comunicación.
			
	La velocidad de transmisión es uno de estos parámetros configurables de la comunicación.
	Por lo regular estas velocidades pueden ajustarse comenzando desde 300 baudios (bits por segundo)
	con algunos valores intermedios hasta llegar a 115,200 baudios.
	Generalmente se utiliza una velocidad de 9,600 baudios.
	También es posible configurar parámetros de detección de errores en la transmisión, como el bit de paridad, el cuál indica si el la cantidad de ``1''s del dato es par.
	Otro de los parámetros que pueden ser ajustados es la longitud de los datos, siendo ocho el número máximo de bits, si se desea utilizar dos bits de paro, entre otras cosas.
	
\section{Sensores de concentración de gas}
Los sensores de concentración de gases son sensores electroquímicos, donde un gas específico reacciona con un electrólito.
Esta reacción electroquímica a su vez produce una corriente eléctrica, que al ser dependiente de la concentración de gas puede ser medida con un dispositivo electrónico para estimar la concentración de dicho gas\cite{worsfold2019encyclopedia}.
También existen sensores de gases de flujo UV, que al no utilizar algún químico que reaccione al gas pueden tener una vida útil mayor y evitan el uso de sustancias peligrosas.
	
	\subsection{Controladores de sensores}
	Los controladores de sensores son dispositivos eléctricos que se encargan del suministro de energía necesaria al sensor de gas, de la medición e interpretación corriente eléctrica causada por la reacción química del sensor, en algunas ocasiones del acondicionamiento de la señal, y de enviar estas mediciones a algún otro dispositivo. Estos controladores son enormemente utilizados en los módulos de sensores ya que además de simplificar en la interfaz con los sensores, pueden reducir el ruido al enviar las mediciones.

	\subsection{Sensor de oxígeno \textit{LuminOx Optical Oxygen LOX-02}} %all from datasheet
	%https://www.sstsensing.com/product/luminox-optical-oxygen-sensors-2/
	El sensor \textit{LuminOx Optical Oxygen}, mostrado en la \autoref{fig:LuminOX_sensor} es un sensor óptico de oxígeno de bajo costo, bajo consumo y de larga vida útil, desarrollado y fabricado por la compañía \textit{SST}.
	%funciones
	Además de medir oxígeno, este sensor es también capaz de realizar mediciones de la temperatura y la presión barométrica del gas, siendo estos parámetros útiles para tener un mayor conocimiento del gas, o la atmósfera donde se encuentra éste.		
	%espeficifaciones - rangos
	Este sensor puede captar una concentración de oxígeno de hasta 25\%, y  300 mbar de presión parcial del oxígeno, con un error menor al 2\%.
	Puede funcionar en un ambiente con un rango de temperaturas dentro de -30 a 60 grados Celsius, humedad relativa de hasta el 99\%, siempre y cuando no haya condensación, y desde 500 mBar hasta 1200 mBar de presión.
	
	\begin{figure}[!h]
		\centering
		\subfigure{\includegraphics[height=4cm]{figures/LuminOXsensor}}~~~~~~
		\subfigure{\includegraphics[height=4cm]{figures/luminOXpines2}}
		\caption[Sensor \textit{LuminOx Optical Oxygen} y su esquema de pines visto desde su parte inferior.]{Sensor \textit{LuminOx Optical Oxygen}\cite{luminOxDS} y su esquema de pines visto desde su parte inferior.}
		\label{fig:LuminOX_sensor}
	\end{figure}
	
	%parámetros de comunicación	/ controlador
	Este sensor tiene un controlador con una interfaz que le permite conectarse a un microcontrolador a través de un UART con los parámetros preestablecidos de 9600 baudios de velocidad, datos con tamaño de 8 bits, un bit de paro y sin hacer uso del bit de paridad.
	El Controlador debe ser alimentado con 5 volts (teniendo $\pm$ 0.5 volts de tolerancia) y el consumo de corriente puede tener picos de 20 mili amperios.
	La salida de la señal de comunicación UART es TTL con un nivel alto de 3.3 volts.
	Estas conexiones y la posición de los pines son mostradas en la \autoref{fig:LuminOX_sensor}.
	
%	\begin{figure}[!h]
%		\centering
%		%\includegraphics[width=12cm]{figures/luminOXpines}
%		\includegraphics[height=4cm]{figures/luminOXpines}
%		\caption{Esquema de los pines del sensor \textit{LuminOx Optical Oxygen} visto desde su parte inferior.}
%		\label{fig:LuminOX_pines}
%	\end{figure}
	
	%comandos?
	El controlador de este sensor se maneja por medio de comandos, con los cuales se puede elegir un modo de funcionamiento con el comando ``\texttt{M}'' seguido de un espacio y el argumento ``\texttt{1}'', ``\texttt{2}'', o ``\texttt{0}''.
	%configuraciones (modos)
	Los modos de funcionamiento son elegibles por medio de los comandos mencionados anteriormente, y estos se pueden establecer dependiendo de la aplicación que se le dé a este sensor, o se puede cambiar a otro en base a las circunstancias.
	Estos modos se describen a continuación:
	\begin{itemize} 
		\item \textit{Stream}: El sensor envía todas las mediciones y el estado de este aproximadamente una vez cada segundo. Es activado por defecto al encender el sensor y se selecciona con el comando ``\texttt{M 0}''.
		\item \textit{Poll}: El sensor continua tomando mediciones, pero sólo las envía al ser solicitadas. Este modo se selecciona con el comando ``\texttt{M 1}''.
		\item \textit{Off}: El sensor deja de tomar mediciones y logra reducir el consumo de corriente hasta 6 mili amperios. Este modo se selecciona con el comando ``\texttt{M 1}''.
	\end{itemize}
	
	Para solicitar mediciones en el modo \textit{Poll} (\texttt{M 1}), se utiliza el comando ``\texttt{\%}'' para el porcentaje de oxígeno, y ``\texttt{O}'' para obtener la presión parcial de oxígeno (ppO$_{2}$) en milibars.
	Las demás mediciones se solicitan con los comandos ``\texttt{T}'', para obtener la temperatura (en grados Celsius), ``\texttt{P}'', para la presión barométrica (en mBar), y para obtener todas las mediciones se utiliza el comando ``\texttt{A}''.
	A su vez, también hay comandos para ver el estado (comando ``\texttt{e}'') y la información (``\texttt{\#}'') del sensor.
	Los comandos enviados a este sensor deben tener la terminación ``\texttt{\textbackslash r\textbackslash n}'' (retorno de carro y salto de linea) para ser identificados debidamente.

	\subsection{Sensor de monóxido de carbono CO-AF}
	%http://www.alphasense.com/index.php/products/carbon-monoxide-safety/
	El sensor \textit{CO-AF}, mostrado en la \autoref{fig:CO-AFsensor}, es un sensor electroquímico que utiliza tecnología de pila de combustible (fuel cell) y de electrodos, probada con estabilidad a largo plazo y operación confiable diseñado por la compañía \textit{Alphasense}.
	%especificaciones - rangos de operación
	El sensor usa el tamaño estándar de 20 milímetros de diámetro y su fabricante garantiza una correcta estimación de las mediciones hasta las 5,000 ppm de monóxido de carbono, operando también en los rangos de desde -30 hasta los 50 grados Celsius de temperatura, de 80 a 120 kilopascales de presión y una humedad relativa del 15\% al 90\%.
	
	\begin{figure}[!h]
		\centering
		%\includegraphics[width=12cm]{figures/CO-AFsensor}
		\includegraphics[height=4cm]{figures/CO-AFsensor}
		\caption[Sensor de monóxido de carbono CO-AF de \textit{Alphasense}]{Sensor de monóxido de carbono CO-AF de \textit{Alphasense}\cite{coafds}.}
		\label{fig:CO-AFsensor}
	\end{figure}
	
	%rendimiento
	Este sensor utiliza una salida de corriente proporcional a la cantidad de monóxido de carbono.
	La sensibilidad de éste está en un rango de 55 a 90 nanoamperios por cada 400 ppm del gas, también tiene un tiempo de respuesta menor a 25 segundos midiendo un escalón de cero a esta misma cantidad de $CO$.
	La sensibilidad de este sensor tiene una dependencia a la temperatura, esta puede ser compensada con un controlador para evitar así la susceptibilidad a la temperatura de las mediciones. La forma en la que esta sensibilidad es afectada por la temperatura se muestra con mayor detalle en la \autoref{fig:co-af-temp-dep}.
	
	\begin{figure}[!h]% 
		\centering
		%\subfigure[Esquemático]{
		%	\label{fig:fig-a}
		%	\includegraphics[width=5in]{figures/isowsch}}
		%\\%New line for figure
		\subfigure[Variación en la sensibilidad causada por cambios de la temperatura. Se muestran media y los intervalos de +- $ \pm $95\% de confianza.]{
			\label{fig:fig-a}
			\includegraphics[height=4cm]{figures/co-aftemp}}
		~ %Space between figure
		\subfigure[Variación de la salida cero causada por cambios en la temperatura expresado en ppm, referenciado a cero en \SI{20}{\degreeCelsius}]{
			\label{fig:fig-b}
			\includegraphics[height=4cm]{figures/co-aftemp0}}
		\caption[Gráficas de la dependencia a temperatura de la sensibilidad de un lote típico de sensores CO-AF]{Gráficas de la dependencia a temperatura de la sensibilidad de un lote típico de sensores CO-AF\cite{coafds}.}
		\label{fig:co-af-temp-dep}
	\end{figure}
	
	%vida
	En cuanto a su vida operativa, el fabricante \textit{Alphasense} asegura que la señal de salida del sensor se reducirá un máximo de 20\% con respecto a la respuesta original en un periodo mayor de 24 meses, y puede almacenarse hasta por seis meses en un recipiente sellado dentro de un rango de temperaturas de 3 a 20 grados Celsius.
		
	\subsection{Tarjeta controladora EC200}
	%overwiew Controlador de sensor electroquímico
	La tarjeta EC200, mostrado en la \autoref{fig:ec200}, es un controlador de alto rendimiento y bajo consumo compatible con una amplia variedad de sensores de gas eletroquímicos montables de 20 milímetros \textit{(20mm electro-chemical plug-in gas sensor cells)}.
	Esta tarjeta controladora proporciona la interfaz necesaria con el sensor de gas, convierte la salida de corriente del sensor en voltaje, el cual es medido con un convertidor analógico-digital de alta resolución.
	A este voltaje digital, se le corrige y compensa la presión y temperatura con un microcontrolador para producir una concentración precisa de gas medida en partes por millón\cite{ec200man}.
	
	\begin{figure}[!h]
		\centering
		%\includegraphics[width=12cm]{figures/ec200}
		\includegraphics[height=4cm]{figures/ec200}
		\caption[Tarjeta controladora de sensores electroquímicos EC200]{Tarjeta controladora de sensores electroquímicos EC200 \cite{ec200man}.}
		\label{fig:ec200}
	\end{figure}

	%mediciones
	La tarjeta controladora también integra sensores de temperatura/humedad y de presión barométrica, con los cuáles obtiene mediciones de estas magnitudes y las utiliza para corregir y compensar la estimación de concentración de gas.
	Ésta además realiza mediciones del el voltaje obtenido de la corriente generada por sensor, el cuál es filtrado con un filtro pasa-bajas para remover perturbaciones transitorias.
	Tanto las mediciones del voltaje como de la concentración de gases compensada son obtenidas con y sin filtrado, esta última también es posible generarla sin filtrado ni compensación.
	Todas estas mediciones son guardadas en la memoria del controlador y pueden ser transmitidas a través de su interfaz UART.
	
	%rangos / parámetros
	La tarjeta EC200 puede operar correctamente en los rango de \SI{-30} hasta \SI{60}{\degreeCelsius} de temperatura,
	%presión
	desde 50 hasta 115 kilopascales de presión, %(500Kpa máx)
	%humedad
	y hasta 99\% de humedad relativa sin haber condensación.
	%alimentación
	Este puede ser alimentado con un voltaje de entre 3.2 y 5 volts, consumiendo una corriente que puede llegar hasta los 10 miliamperios de pico.
	En la \autoref{fig:ec200p} se indican los pines de alimentación del sensor, así como las terminales de la interfaz UART.
	
	\begin{figure}[!h]
		\centering
		%\includegraphics[width=12cm]{figures/ec200_pins}
		\includegraphics[height=4cm]{figures/ec200_pins}
		\caption{Esquema de pines de la tarjeta controladora EC200.}
		\label{fig:ec200p}
	\end{figure}
			
	%interfaz
	La interfaz UART del controlador EC200 opera a una velocidad de 9600 baudios, enviando datos con tamaño de ocho bits sin implementar bit de paridad, esta interfaz utiliza tanto
	%txrx 
	terminales $Tx$ y $Rx$, con un nivel lógico CMOS de 3.3V (la terminal Rx soporta hasta 5V),
	%rs485
	así como RS485 diferencial. 
	%el cuál su forma de comunicación es \textit{Half Duplex},
	%mientras que las terminales Tx y Rx es \textit{Full Duplex}.
	%TTL protocol
	Cada línea de datos recibida y transmitida por el controlador termina con un salto de linea y retorno de carro (``\texttt{\textbackslash r\textbackslash n'')}.
	%otras salidas
	El controlador, además de tener una interfaz de comunicación serial, puede utiliza salidas de
	PWM y  analógica, las cuales tienen que ser configuradas para poder utilizarse.
	
	%modos
	Los modos de operación del controlador son: \textit{polled} y \textit{streaming}.
	En el modo \textit{polled}, el sensor sólo transmite datos cuando responde a un comando.
	En el modo \textit{streaming}, el sensor transmite mediciones en intervalos de un segundo, este intervalo puede ser modificado.
	Estos dos modos de operación pueden ser configurados con el comando ``\texttt{K}''.
	
	%comandos
	Los comandos son enviados al controlador por medio de la interfaz UART.
	Estos pueden ser utilizados para 
	extraer las mediciones obtenidas por éste,
	obtener información a cerca del sensor o de él mismo,
	o realizar configuraciones y ajustar sus parámetros de operación.
	En caso de haber un error en la recepción de algún comando, el controlador responde con la letra 'E' seguido del código de error.
		
	%mediciones
	\subsubsection{Los comandos para obtener mediciones son los siguientes:}
	\begin{itemize}
		\item B - presión barométrica (compensada con la temperatura) milibars.
		\item b - presión barométrica (\textit{ADC}).
		\item H - humedad relativa.
		\item J - voltaje entrada analógica.
		\item j - voltaje bruto.
		\item Q - leer mediciones.
		\item T - temperatura.
		\item t - temperatura bruta de barómetro.
		\item V - voltaje con filtrado.
		\item v - voltaje sin filtrado.
		\item z - concentración de gas sin filtrado.
		\item Z - concentración de gas con filtrado.
	\end{itemize}
	%conf
	
	\subsubsection{Los comandos para realizar configuraciones son los siguientes:}
	\begin{itemize}
		\item C - configura la hora y fecha.
		\item K - configura modo de comunicación.
		\item M - campos de salida (seleccionar mediciones).
		\item P - set valor de un parámetro.
		\item r - borrar memoria de registro.
		\item U - calibración de cero.
		\item u - calibración manual de cero.
	\end{itemize}
	
	%info
	\subsubsection{Los comandos para obtener información son los siguientes:}
	\begin{itemize}
		\item c - leer hora y fecha.
		\item G - tipo de sensor.
		\item p - leer parámetro.
		\item R - leer memoria de registro.
		\item w - reiniciar parámetros a valores de fábrica.
		\item X - calibrar a una concentración específica.
		\item Y - reportar identificador del dispositivo.
		\item . - obtener multiplicador de la medición.
	\end{itemize}
		
	\subsection{Sensor de bióxido de carbono \textit{SprintIR‐W}}
	%intro
	El sensor \textit{SprintIR} de la compañía \textit{Gas Sensing Solutions}, mostrado en la \autoref{fig:sprintIR},  mide concentraciones de $CO_2$ utilizando tecnología óptica LED NDIR (infrarrojo no dispersivo, por sus siglas en inglés), lo que lo hace un sensor confiable y duradero.
	Este sensor está diseñado para desempeñarse en tareas de monitoreo y análisis de $CO_2$ en tiempo real. 	%applications
	A menudo es utilizado en áreas como el cuidado de la salud, empaquetado de alimentos, ciencia del deporte y sistemas contra incendios\cite{sprintIRDSgss}.
	
	\begin{figure}[!h]
		\centering
		\includegraphics[height=4cm]{figures/sprintIRsensor}
		\caption[Sensor de bióxido de carbono SprintIR®‐W]{Sensor de bióxido de carbono SprintIR®‐W \cite{sprintIRDSco2m}.}
		\label{fig:sprintIR}
	\end{figure}	
	
	%mediciones
	%%velocidad			
	Este sensor es capaz de realizar 20 lecturas por segundo, teniendo una alta frecuencia de muestreo y una gran velocidad de respuesta (las mediciones validas son obtenidas 1.2 segundos después de haber encendido el sensor).
	%%rango
	El rango de medición de este sensor puede llega hasta el 100\% de concentración de $CO_2$ en algunas variantes.
	También existen otras opciones con los rangos de medición: 0 a 5\%, 0 a 20\%, 0 a 60\%.
	%%presición
	Las mediciones se realizan con una precisión típica de 70 ppm para el rango de 0 a $\pm$60\%, y $\pm$300 ppm para 0 a 100\%\cite{sprintIRDSgss}.
	
	%high flow throughput capability	/ adaptador
	El sensor \textit{SprintIR} puede permitir un gran paso de flujo, pudiendo utilizarse con un adaptador de flujo, como se muestra en la \autoref{fig:spIR_fa}, o simplemente utilizar el sensor con la cubierta de membrana como se muestra en la \autoref{fig:spIR_mc}.
	El adaptador de flujo puede ser personalizado eligiendo distintas opciones ofrecidas por el fabricante.
	
	\begin{figure}[!h]% 
		\centering
		\subfigure[Sensor SprintIR con adaptador de flujo.]{
			\centering
			\label{fig:spIR_fa}
			\includegraphics[height=4cm]{figures/sprintIR_fa}}
		~~~~~ %Space between figure
		\subfigure[Sensor SprintIR sin adaptador de flujo.]{
			\centering
			\label{fig:spIR_mc}
			\includegraphics[height=4cm]{figures/sprintIR_mc}}
		\caption[Sensor SprintIR con y sin adaptador de flujo]{Sensor SprintIR con y sin adaptador de flujo\cite{sprintIRDSgss}.}
		\label{fig:spIR_f_adapter}
	\end{figure}
	
	
	%controlador
	Este sensor incorpora un sistema, el cuál permite el control y transmisión de datos por medio de UART, así como puesta en cero automática y un acondicionamiento de las mediciones.
	El diagrama de bloques de este sistema y sus componentes puede visualizarse en la \autoref{fig:sprintIR_bd}.
	
	\begin{figure}[!h]
		\centering
		\includegraphics[width=12cm]{figures/sprintIR_bd}
		\caption[Diagrama a bloques del sensor SprintIR®‐W]{Diagrama a bloques del sensor SprintIR®‐W \cite{sprintIRDSgss}.}
		\label{fig:sprintIR_bd}
	\end{figure}

	Los sensores de temperatura y humedad mostrados en la \autoref{fig:sprintIR_bd}, así como la salida de señal analógica, son opcionales, por lo que no todas las variantes del sensor \textit{SprintIR} los integran.
	
	%con los cuales genera la señal del LED emisor y obtiene la señal generada por el fotodiodo,
	%además de filtrar dicha señal para reducir el ruido y mejorar la precisión de las mediciones.
	
	El acondicionamiento de las mediciones 
	se realiza con un procesador de señales digitales (DSP, por sus siglas en inglés, \textit{Digital Signal Processor}).
	Su comportamiento puede ser modificado dependiendo de la velocidad de respuesta necesaria, o la cantidad de ruido que se requiera filtrar.
	
	%control
	El control de este sensor se realiza por medio de comandos que son recibidos por éste utilizando el puerto UART.
		%comandos
	%El sensor \textit{SprintIR} puede ser operado utilizando comandos para controlarlo,
	Los comandos utilizan la codificación ASCII y deben terminar con un retorno de carro y un salto de linea(``\texttt{\textbackslash r\textbackslash n}'').
	%En caso de utilizar un comando que lleve argumento, éstos deben estar separado por un espacio.
	El sensor responderá con un signo de interrogación (?) si el comando recibido no es válido o éste no se ha recibido con algún error. 
	
	%modos de operación
	El sensor \textit{SprintIR} tiene tres modos de operación que pueden ser seleccionados por medio del comando ``\texttt{K \#\textbackslash r\textbackslash n}'' (donde \texttt{\#} es el número de modo seleccionado).
	Los modos de operación del sensor de explican a continuación.
	\begin{itemize}
		\item \textit{SLEEP}:
		En este modo el sensor está en espera de comandos. 
		El sensor no realiza ninguna medición, por lo tanto al recibir un comando este puede responder rápidamente.
		Este modo se establece con el comando ``\texttt{K 0\textbackslash r\textbackslash n}''.
		
		\item \textit{STREAM}:
		En este modo las mediciones son reportadas dos veces por segundo.
		Los comandos son procesados cuando se reciben, pero si se encuentra realizando una medición puede haber un retraso de 10 ms en la respuesta.
		El sensor inicia por defecto en este modo al ser encendido y puede establecerse con el comando ``\texttt{K 1\textbackslash r\textbackslash n}''.
		
		\item \textit{POLLING}:
		En este modo el sensor reporta mediciones sólo cuando son solicitadas, pero las continua realizando en segundo plano.
		Este modo se puede establecer con el comando ``\texttt{K 2\textbackslash r\textbackslash n}''.
	\end{itemize}
	
	La interfaz UART de este sensor opera a una velocidad de 9600 baudios, enviando datos de 8 bits con un bit de paro y sin utilizar bit de paridad, ni control de flujo por \textit{hardware}.
%	Los parámetros de operación de la comunicación UART de este sensor son los siguientes:
%	\begin{list}{\textbullet}{\addtolength{\topsep}{0mm}}
%		\item Velocidad de 9600 baudios.
%		\item Datos de 8 bits.
%		\item Sin bit de paridad.
%		\item Un bit de paro.
%		\item Sin control de flujo por \textit{hardware}.
%	\end{list}
	
	%alimentación
	El sensor se alimenta con 3.3V, soportando hasta 5.5V y pudiendo consumir hasta 40 mA (de pico) durante el encendido.
	El consumo de corriente puede llegar a los 35 mA cuando se están tomando muestras.
	Si el sensor es configurado en modo \textit{SLEEP}, el consumo de corriente puede disminuir hasta los 0.01 mA.
	Las terminales del puerto UART, así como la alimentación del sensor, se muestran en la \autoref{fig:sprintIRp}. Las terminales Tx y Rx operan con un nivel lógico de 3.3 volts.	
	\begin{figure}[!h]
		\centering
		\includegraphics[height=4cm]{figures/sprintIR_uart_pinout}
		\caption[Salidas de la interfaz UART del sensor de $CO_2$ \textit{SprintIR}]{Salidas de la interfaz UART del sensor de $CO_2$ \textit{SprintIR}\cite{sprintIRDSco2m}.}
		\label{fig:sprintIRp}
	\end{figure}
	
	Este sensor puede operar en los rangos de temperatura de 0 a \SI{50}{\degreeCelsius}, de 0 a 95\% de humedad y desde 500 mbar hasta 2 bar de presión. 
	El fabricante no recomienda utilizar el sensor fuera de los rangos de operación, ya que al someterlo a estrés puede sufrir daños irreversibles.
			

\section{Aislador digital ISOW7842}
	%intro
	El circuito integrado ISOW7842 es un aislador digital que forma parte de la familia ISOW784x del fabricante \textit{Texas Instruments}.
	%canales
	Cuenta con cuatro canales (dos en cada dirección), como se muestra en la \autoref{fig:isow7842}, y
	%dc-dc
	un convertidor DC-DC, mostrado en el esquema simplificado de la \autoref{fig:iswoxss}.
	Este convertidor proveé alimentación aislada, la cuál se puede utilizar para energizar un circuito eliminando la necesidad de una fuente de alimentación separada, lo cuál es útil para diseños con espacio reducido.
	%aplications
	Este CI puede ser utilizado en las áreas: automatización industrial, control de motores, redes eléctricas, equipos médicos, y pruebas y mediciones.
			
	\begin{figure}[!h]% 
		\centering
		\subfigure[Canales del CI ISOW7842]{
			\label{fig:isow7842}
			\includegraphics[height=4cm]{figures/ISOW7842}
		}~ %Space between figure
		\subfigure[Esquema simplificado de los CI ISOW784x.]{
			\label{fig:iswoxss}
			\includegraphics[height=4cm]{figures/isow_simpsch}
		}
		\caption[Esquemas del CI ISWO7842]{Esquemas del CI ISWO7842\cite{isow784xDS}.}
		\label{fig:isowsch}
	\end{figure}


	%features
	Las características principales de este CI se enlistan a continuación:
	\begin{itemize}
		%speed
		\item  Velocidades de transmisión de hasta 100 Mb por segundo.
		%isolation barrer
		\item Robusta barrera de aislamiento con una vida estimada mayor a 100 años con un voltaje de operación de $1kV_{RMS}$, pudiendo aislar hasta $5000kV_{RMS}$ y una capacidad de sobre tensión de $10 kV_PK$.
		%dc-dc
		\item Convertidor CD-CD de alta eficiencia integrado con transformador de aislamiento en chip.
		%supply
		\item Amplio rango de voltaje de alimentación, desde 3V hasta 5.5V.
		%output power
		\item Potencia de salida máxima de 0.65 W, con una corriente disponible de 130 mA a 5 V y 75 mA a 3.3 V.
		%protecciones Cuenta con 
		\item Protección a sobrecarga y corto circuito, apagado por calentamiento, y arranque suave para evitar entradas excesivas de corriente.
		\item Rango de temperatura de operación extendido, de \SI{-40}{\degreeCelsius} a \SI{+125}{\degreeCelsius}.
		\item Compatibilidad electromagnética robusta con alta inmunidad y bajas emisiones.
	\end{itemize}

\section{Conclusión}
Este capítulo ha establecido el marco teórico necesario para el desarrollo de un sistema embebido basado en Linux para la medición de concentraciones de gases en reacciones sólido-gas.
Se han revisado conceptos clave de sistemas de adquisición de datos, sistemas embebidos, Linux embebido, comunicación UART, sensores de gases y circuitos de protección, justificando su relevancia para el sistema propuesto.
Este marco teórico proporciona la base para las decisiones de diseño y la implementación práctica que se detallarán a continuación.
Si bien la integración de estos elementos presenta desafíos específicos, el conocimiento adquirido sienta las bases para un desarrollo exitoso.
El siguiente capítulo abordará el diseño e implementación del sistema, presentando la arquitectura, los componentes seleccionados, las pruebas de verificación se presentan en el \autoref{ch:PruebasyResultados}.
