\chapter{Configurar os módulos Xbee's}\label{appendix:conf_xbee}
\thispagestyle{myheadings}
% -------------------------------------------------------------
% COnfigurar os Xbee's
% -------------------------------------------------------------
 \section{Funcionamento dos módulos XBee}\label{sec:appendix_xbee_func}


Os módulos XBee são equipamentos que transmitem em RF(rádio frequência) e comunicam entre si; podendo comunicar apenas com
um equimento e só com esse, ou em rede, existindo vários tipos de configurações para a rede.
As redes podem ter configurações distintas:
\begin{itemize}


\item \textbf{MESH}(rede)- A \textit{mesh network} é uma área local de trabalho que implementa um ou dois arranjos de comunicações, \textit{full mesh topology} ou partial
\textit{mesh topology}.Na \textit{full mesh topology}, cada elemento (\textit{workstation} ou outro dispositivo) está conetado diretamente a cada elemento da rede (ou seja
estão todos conetados uns aos outros). Na \textit{partial mesh topology}, alguns dispositivos estão conetados a todos os outros, mas outros estão apenas
conetados aos elementos com os quais trocam mais quantidade de informação. A \textit{mesh network} é confiável e oferece redundância. Se por ventura
algum dos elementos da rede deixar de funcionar, todos os outros continuam a comunicar entre si, diretamente ou através de outro ou outros
intermediários da rede. As \textit{Mesh networks} funcionam na perfeição quando os elementos se encontram dispersos e fora do alcance de uma linha comum.
\begin{figure}[h!]
\centering
\includegraphics[width=6cm]{Imagens/xbee_mesh}\label{fig:mesh_conf}
\caption{Montagem \textit{Mesh} de uma rede \textit{Zigbee}}
\end{figure}


\item \textbf{STAR}(Broadcast) - apenas um elemento da rede comunica(coordinator )
com todos os outros elementos, e estes apenas enviam informação para o \textit{coordinator}. 
\begin{figure}[h!]
\centering
\includegraphics[width=6cm]{Imagens/xbee_star}\label{fig:star_conf}
\caption{Montagem \textit{Star} de uma rede \textit{Zigbee}}
\end{figure}


\item \textbf{Cluster tree}(\textit{tree}) - um elemento principal da rede \textit{coordinator}, comunica apenas com outro elemento, responsável por receber informação dos outros elementos e enviar a informação para o elemento principal.
 
\begin{figure}[h!]
\centering
\includegraphics[width=6cm]{Imagens/xbee_cluster}\label{fig:cluster_conf}
\caption{Montagem \textit{Cluster} de uma rede \textit{Zigbee}}
\end{figure}

\item \textbf{Combinação de 3 tipos de montagem} - Combinação dos 3 tipos de configuração descritos anteriormente, todos os elementos comunicando entre si de forma diferente e integrados numa só rede de trabalho.

\begin{figure}[h!]
\centering
\includegraphics[width=6cm]{Imagens/xbee_all_conf}\label{fig:all_conf}
\caption{Conjugação de todos os tipos de montagem de uma rede \textit{Zigbee}}
\end{figure}

\end{itemize}

Em seguida uma breve explicação do que cada elemento representa na rede que integra.

\begin{description}
\item[\textit{Coordinator}]  \hfill \\
Dispositivo responsável por toda a gestão da rede, elementos com quem vai comunicar e como estes comunicam ele, normalmente é o elemento que transfere informação para o exterior.
\item[\textit{Router}]  \hfill \\
é responsável por retransmitir a informação vinda do \textit{coordinator} ou do \textit{end device}. O router permite aumentar a distância entre
entre \textit{coordinator} e \textit{end device}, permitindo assim a implementação de redes com dispositivos mais distanciados.
\item[\textit{End device}]  \hfill \\
é responsável por ler a informação de sensores ou outros dispositivos e permite também ligar/desligar actuadores.

\end{description}

\subsection{Configuração dos módulos \textit{Xbee's}}\label{anexo:xbee_conf}

Nesta secção serão descritos os passos necessários para a correta configuração dos módulos \textit{Xbee}, para aplicação no projeto desenvolvido no âmbito desta dissertação.
\newline
Em primeiro lugar o material necessário para a configuração dos dispositivos é o seguinte:
\begin{itemize}
\item dois módulos \textit{Xbee's} - elementos a configurar para comunicarem um com o outro.
\item adaptador para comunicação com os módulos \ref{fig:adaptador_xbee}
\item[]
\begin{center}
\includegraphics[width=6cm]{Imagens/adaptador_xbee}\label{fig:adaptador_xbee}

\end{center}
                
\item Software de configuração para os módulos \textit{Xbee}, \textit{X-CTU} Digi\citep{xbee_site}.
 


\end{itemize}

Já com todo o material disponível e com o software devidamente instalado, introduzir no computador o \ref{fig:adaptador_xbee}, em seguida abrir o software \textit{X-CTU}. Aparecendo a seguinte janela \ref{anexo:xctu1}.
\begin{figure}[h!]
\centering
\includegraphics[width=6cm]{Imagens/xctu_inicio}
\caption{Janela de início do programa \textit{X-CTU}}\label{anexo:xctu1}
\end{figure}

Selecionar a porta onde se encontra conetado o sistema, neste exemplo como só existia um elemento conetado a uma porta capaz de suportar a comunicação com um módulo \textit{Xbee}, é a única porta disponível para ser selecionada. Não esquecer também os parâmetros de comunicação, pois tradicionalmente os \textit{Xbee's}, são configurados com uma \textit{baud rate} de 9600bits/s, mas se esse parâmetro for alterado também o terá de ser nas configurações de comunicação.
\newline
Depois de todos os parâmetros configurados para iniciar a comunicação, pressionar o botão \textit{Test/Query}. Se todos os parâmetros estiverem bem definidos deverá aparecer a janela. Em caso de erro voltar a pressionar o botão \textit{Retry}, caso não apareçam os parametros relativos ao módulo que lá se encontra pode ter algum erro nos parâmetros de comunicação. Assim depois do modem ser encontrado anotar o valor apresentado no campo \textit{Serial number}\ref{anexo:xctu_modem}, pois vai ser necessário.
\begin{figure}[h!]
\centering
\includegraphics[width=6cm]{Imagens/xctu_modemquery1}
\caption{Janela em que é apresentado o módulo encontrado no \textit{X-CTU}}\label{anexo:xctu_modem}
\end{figure}

Retirar o módulo e inserir o outro com o qual se vai fazer a montagem, e fazer novamente o procedimento descrito anteriormente, até obter o \textit{Serial number} e anotá-lo.
\newline
Mudar para o separador \textit{Modem Configuration}, selecionar o campo \textit{Always Update Firmware}, em seguida pressionar o botão \textit{Download new version}, que fará com que seja feito o Download da ultima versão desponivél de \textit{Firmware}. Depois do \textit{firmaware} atualizado pressionar o botão\textit{Read}, sendo apresentados todos os campos de configuração como ilustrado na figura 
\begin{figure}[h!]
\centering
\includegraphics[width=6cm]{Imagens/xctu_endconf2}
\caption{Janela de configuração dos módulos no \textit{X-CTU}}\label{anexo:xctu_conf}
\end{figure}

Alterar os campos consoante a configuração desejada, neste caso como se trata de uma comunicação ponto a ponto, o \textit{serial number} retirado do primeiro módulo deverá ser a primeira parte introduzida no campo \textbf{DH} 13A200 (isto para este caso em concreto) e a restante parte do código no campo \textbf{DL}\ref{anexo:xctu_conf1}.


\begin{figure}[h!]
\centering
\includegraphics[width=6cm]{Imagens/xctu_endconf}
\caption{Janela com os campos de configuração dos módulos no \textit{X-CTU}}\label{anexo:xctu_conf1}
\end{figure}
 
Poceder da mesma forma para o outro módulo \textit{Xbee}, configurando-o corretamente, depois do segundo módulo configurado, abrir o separador \textit{Terminal}, e verificar se o módulo se encontra conetado com o comando \textbf{+++}, ao qual deverá ter a resposta \textbf{OK}\ref{anexo:xctu_terminal}, se de alguma forma conseguir ter os dois dispositivos conetados ao mesmo tempo, ao computador se tiver dois programas \textit{X-CTU} abertos no separador \textit{Terminal} poderá verificar a sua correta configuração, pois se enviar dados de um dos módulos estes serão apresentados no \textit{Terminal} do outro. Se necessitar de fazer um teste de alcance com o \textit{software}, pode faze-lo recorrendo ao separador \textit{Range Test}

\begin{figure}[h!]
\centering
\includegraphics[width=6cm]{Imagens/xctu_terminal}
\caption{Janela do terminal do módulos \textit{Xbee} no \textit{X-CTU}}\label{anexo:xctu_terminal}
\end{figure}

Em seguida será feita uma breve explicação dos campos que contemplam o separador \textit{Modem Configuracion}, para ao alterar cada campo perceber o seu significado, assim só serão explicados os mais relevantes para este caso em concreto.
\begin{itemize}
\item \textbf{CH} – O padrão ZigBee oferece a possibilidade de operar em vários canais.
Para que dois ou mais módulos possam comunicar entre si estes devem
operar no mesmo canal.
\item  \textbf{ID}– Este parâmetro define o PAN(Personal Area Network) ID. Para que
dois ou mais módulos comuniquem entre si na mesma rede sem interferir
com redes vizinhas, este devem ter o mesmo PAN ID e que é diferente das
outras redes.
\item \textbf{DL/DH} – Para que um módulo envie mensagens exclusivamente para
outro módulo é necessário definir o endereço de destino da mensagem. O
Destination Address High (DH) e o Destination Address Low(DL) podem
ser configurados de modo a que um módulo envie mensagens para um
único endereço. Caso se pretenda que um módulo envie mensagens para
todos os módulos que partilham o mesmo PAN ID deve-se definir DH=0
e DL=0xFFFF.
\item \textbf{MY} – Para que outros módulos possam enviar mensagens exclusivamente
para um módulo é necessário que este tenha um endereço. O parâmetro
MY permite definir o endereço do módulo. Caso se pretenda que o módulo
receba mensagens de todos os módulos que partilham o mesmo PAN ID
deve definir-se MY=0xFFFF.
\item \textbf{NI} – O parâmetro NI permite atribuir um nome ao módulo para que seja
facilmente identificado na rede. O tamanho máximo está limitado a 20
caracteres.
\item \textbf{ND} – Este parâmetro permite identificar todos o módulos que estão ligados em rede. Definições de comunicação RS232
\item \textbf{BD} – Este parâmetro permite definir o Baud Rate da comunicação.
\item \textbf{NB} – Este parâmetro permite definir o tipo de paridade ou desactivar.
\item \textbf{D6} – Activar ou desactivar o controlo de fluxo RTS (Request To Send).
\item \textbf{D7} – Activar ou desactivar o controlo de fluxo CTS (Clear To Send).
\end{itemize}























% % -------------------------------------------------------------
% % pdd instalation and openhaptics instalation
% % -------------------------------------------------------------
% \section{PHANToM Device Drivers and OpenHaptics}\label{sec:appendix_software_pdd}
% Installation of the PHANToM device software is hereby described for future reference.\\
% 
% \paragraph{Note:} As Ubuntu is a Debian-based Linux distribution, software installation files come frequently in the form of \textit{.deb} packages. Other Linux distributions have similar packages, but the instructions for installation and setup may differ. Beware of this fact beforehand, for this text is meant for Debian-like systems.
% 
% Also, system component dependencies, as the \textit{libc} libraries, the \textit{gcc} and \textit{g++} compilers or the \textit{raw1394 (FireWire)} module libraries, will not be explicitly requested to be updated on automatic configuration scripts. However, keep in mind that distribution-dependent repositories not always provide the latest version for system components, even non kernel-dependent software. Core components update may be recommended to advanced users to improve execution speeds and memory management.
% 
% \subsection{SensAble Software Pre-requisites}\label{subsec:appendix_software_prerequisites}
% \begin{itemize}
% \item \textbf{SensAble Developer Support Center (DSC) access credentials}:
% 
% Place a request for credential generation at the SensAble Developer Support Center website (\url{dsc.sensable.com}). As the software components are proprietary (libraries and drivers), these credentials will be needed to download all the software and documentation, as well to give access to the online discussion forum.
% 
% \item \textbf{Necessary libraries}:
% 
% According to the respective Linux distribution, install all the dependencies and requisites mentioned on the file ''HW\_userguide\_Linux.pdf''. As stated there, all the dependencies must be satisfied before attempting to install the PHANToM drivers.
% 
% \item \textbf{Mesa3D libraries}:
% 
% In the previous \textit{.pdf} file, the MesaLib7.4.2 library appears as a pre-requisite. However, this version was flagged on Ubuntu 10.04 for its numerous bugs, so the installed version was 7.5.2. This version is recommended, along with the MesaGLUT associated package, and is available at \url{www.mesa3d.org}.
% 
% For a better system integration, the library should be compiled as follows (\textit{sudo} is optional if the working subdirectory is within the \textit{/home} directory):
% 
% \begin{enumerate}
% \item Extract the downloaded file and run the package configuration in a console:\\
% \hspace*{5mm} \textit{sudo ./configure -\,-enable-motif}\\
% (The configuration report detects both critical and optional dependencies. If any critical library fails, the Linux distribution's repositories should have a version available. The \textit{motif} package linking may not be required for every system.)
% \item Compile the libraries with the command:\\
% \hspace*{5mm} \textit{sudo make}
% \item Install with the command:\\
% \hspace*{5mm} \textit{sudo make install}
% \item Check if the location of installed libraries is in directory \textit{/usr/lib}:\\
% \hspace*{5mm} \textit{sudo locate libGlw}\\
% \hspace*{5mm} \textit{sudo locate libGLUT}
% \end{enumerate}
% \end{itemize}
% 
% \subsection{SensAble Software Installation}\label{subsec:appendix_software_installation}
% The installation of the OpenHaptics v3.0 suite must only be executed after the correct installation of the PHANToM drivers. To install both, navigate to the directory of the \textit{.deb} files (or extract the compressed version) downloaded and run consecutively in a console (''*'' represents the version downloaded):\\
% 
% \hspace*{5mm} \textit{sudo dpkg -i phantomdevicedrivers\_*.*-*\_i386.deb}\\
% 
% \hspace*{5mm} \textit{sudo dpkg -i openhaptics\_*.*-*\_i386.deb}\\
% 
% Alternatively, a \textit{GUI} application for the \textit{.deb} package manager \textit{dpkg} can also be used. But installing the \textit{.deb} file through the GUI may not work. If running amd64-based systems or other 64bit system, \textit{dpkg} requires a different argument list, as exemplified:\\
% 
% \hspace*{5mm} \textit{dpkg -i –force-architecture /path/to/file.deb}\\
% 
% After the installation is complete, device communication must be tested. These libraries are equipped with two small applications, installed by default with the drivers. The \textit{PHANToMConfiguration} is an application for managing the connected hardware, defining the default device and allowing for dual-device setup configurations. The \textit{PHANToMTest} is a small application designed to test the device's capabilities. This library, drivers, and applications were not designed for systems running in any other than the English language. For that reason, normal execution of these programs, via command line calls, is not possible. The only way these applications can run is by calling their configuration routines, which are no other than scripts that change the environment language just for the program's execution.
% 
% The configuration application is called by running:\\
% 
% \hspace*{5mm} \textit{sudo /usr/sbin/runPHANToMConfiguration}\\
% 
% Select the correct PHANToM device and press ''OK''. Next, to test the device:\\
% 
% \hspace*{5mm} \textit{sudo /usr/sbin/runPHANToMTest}\\
% 
% The PHANToM drivers do not have access to the FireWire communication port object, so it falls to the user the responsibility to probe it and change the access rules. To workaround these issues, a small \textit{shell} file was created with the lines:
% 
% \begin{verbatim}
% #!/bin/bash
% modprobe raw1394
% chmod 777 /dev/raw1394
% \end{verbatim}
% 
% This script is to be run before any call for device applications. Alternatively, these commands can be added to the \textit{shell}'s startup script or to the system's startup routines.
% 
% The OpenHaptics toolkit deploys compilable examples to demonstrate both the device and the libraries capabilities. If correctly installed, the compilable source code should be installed on the directory \textit{/usr/share/3DTouch/examples}. All the provided documentation is also installed in the hard-drive on the directory \textit{/usr/share/3DTouch/doc}.
% 
% \paragraph{Note:} Some examples require the creation of an environment variable \textit{3DTOUCH\_BASE} that is supposed to point at a directory. However, the Ubuntu Linux \textit{bash} does not allow to initiate an environment variable started by a number. The most common workaround for this case is to use the \textit{tcsh shell}, an old \textit{C-shell} still supported on Linux, and run the following commands:\\
% 
% \hspace*{5mm} \textit{sudo tcsh}
% 
% \hspace*{5mm} \textit{sudo setenv 3DTOUCH\_BASE /usr/share/3DTouch}\\
% 
% The examples can be run inside the \textit{tcsh} terminal, or outside back in the \textit{bash shell}, exiting with the command ''\textit{exit}''.
% 
% % -------------------------------------------------------------
% % other libraries
% % -------------------------------------------------------------
% \section{Adicional Software}\label{sec:appendix_other}
% 
% \subsection[Robot Operating System]{Robot Operating System (ROS)}\label{subsec:appendix_other_ROS}
% In this work, the \textit{ROS} version installed was \textit{Fuerte}. The installable Linux version is system dependent, but the detailed instructions can be found on \url{http://www.ros.org}. Here it can also be found tutorials, code examples, discussion forums, etc\ldots
% 
% \subsection[Eigen Library]{\textit{Eigen} Library}\label{subsec:appendix_other_eigen}
% The \textit{Eigen} library is a C++ template library for linear algebra, with matrices, vectors, numerical solvers, and  other related algorithms, and is provided together with \textit{ROS}. Should it be needed for another purpose, the compilable source code can be found on \url{http://eigen.tuxfamily.org}.
% 
% \subsection[Armadillo Library]{\textit{Armadillo} Library}\label{subsec:appendix_other_armadillo}
% Armadillo is an open-source \textit{C++} linear algebra library with a syntax that is deliberately similar to Matlab. It supports integer, floating point and complex numbers, and has a built trigonometric and statistics functions. Various matrix decompositions are provided through optional integration with \textit{LAPACK}, or one of its high performance drop-in replacements (such as the multi-threaded \textit{MKL} or \textit{ACML} libraries). Primarily developed at NICTA (Australia), it has contributions from around the world.
% 
% To install the library, instructions are as follows (\textit{sudo} is optional if the working subdirectory is within the \textit{/home} directory):
% 
% \begin{enumerate}
% \item Install \textit{ROS} as detailed above.
% This will install a series of dependencies that will be needed to compile this library.
% \item Install CMake:\\[2mm]
% \hspace*{5mm} \textit{sudo apt-get install cmake}
% \item Install BLAS, LAPACK and ATLAS libraries:\\[2mm]
% \hspace*{5mm} \textit{sudo apt-get install libblas-dev}\\[2mm]
% \hspace*{5mm} \textit{sudo apt-get install liblapack-dev}\\[2mm]
% \hspace*{5mm} \textit{sudo apt-get install libatlas-base-dev libatlas-headers}
% \item Download and unpack the source code from \url{http://arma.sourceforge.net}.
% \item Open a command line and change into the directory that was created by unpacking the downloaded archive:\\[2mm]
% \hspace*{5mm} \textit{sudo cmake .}\\[2mm]
% (CMake should detect all necessary dependencies and warn if any fails.)
% \item Compile the library with the command:\\[2mm]
% \hspace*{5mm} \textit{sudo make}
% \item Install with the command:\\[2mm]
% \hspace*{5mm} \textit{sudo make install}
% \end{enumerate}

% \clearpage
% ~\\[5mm]
% \thispagestyle{empty}