
\chapter{Présentation du projet}

\section{Objectif}

L'objectif de l'unité est de concevoir une centrale domotique à partir d'un
FPGA, capable de commander un ventilateur et une alarme en fonction de l'état de
différents capteurs et des entrées de l'utilisateur.

\begin{figure}[h]
	\centering
		\includegraphics[width=0.8\textwidth]{resources/project-de2-io}
	\caption{Capteurs/actionneurs autour de la carte Altera DE2}
\end{figure}

\section{Matériel}

Des contraintes matérielles ont été imposées dans le cadre de ce projet, qui se
réalisera autour des composants suivants :

\begin{itemize}
	\item Carte Altera DE2 équipée d'un FPGA Altera Cyclone II avec une horloge à
	50MHz et des interfaces utilisateurs (boutons, afficheurs, \ldots)
	\item Microphone ELECTRET
	\item Capteur de température LM35
	\item Haut-parleur (8 Ohm)
	\item Ventilateur (12V/1W)
\end{itemize}

\section{Méthodologie}

\subsection{Conception \og{}top-down\fg{}}

La conception suivra le schéma \og{}top-down\fg{} : le système sera décomposé
en plusieurs sous-systèmes basiques.

Ainsi, la centrale domotique comprendra deux sous-systèmes : une partie alarme
et une partie ventilation.

\begin{figure}[h]
	\centering
		\includegraphics[width=0.85\textwidth]{resources/project-topdown-subsystems}
	\caption{Découpage du système en sous-systèmes}
\end{figure}

\subsection{Validation \og{}bottom-up\fg{}}

Dans le cadre de la validation \og{}bottom-up\fg{}, chaque sous-système unitaire
sera testé individuellement, avant d'être intégré au système complet qui sera à
nouveau testé globalement.


\chapter{Interface de commande}

L'interface de commande comprend les entrées et les sorties permettant à
l'utilisateur d'intéragir avec la centrale.

Celle-ci comprend un module de commande (utilisant les interrupteurs et les
ports GPIO de la carte DE2) et un module d'affichage (via les DELs, les
afficheurs 7-segments et l'écran à cristaux liquides).

\section{Commande}

Le module de commande prendra en compte les entrées des paramètres
utilisateurs, via les interrupteurs, et des paramètres environnementaux, via les
capteurs de bruit et de température connectés aux ports GPIO.

\begin{figure}[h]
	\centering
		\includegraphics{resources/commande-interrupteurs-legende}
	\caption{Actions des interrupteurs de la carte DE2}

	\centering
		\includegraphics{resources/schema-commande-io}
	\caption{Entrées/sorties du sous-système \og{}commande\fg{}}
\end{figure}

Ce module a été décomposé en deux sous-modules semi-indépendants, l'un destiné à
contrôler l'alarme, et l'autre le ventilateur, ce dernier étant désactivé
lorsque l'alarme est déclenchée.

\begin{figure}[h]
	\centering
		\includegraphics{resources/schema-commande-logic}
	\caption{Schéma bloc du sous-système \og{}commande\fg{}}
\end{figure}

\newpage

\subsection{Commande de l'alarme}

\begin{figure}[p]
	\centering
		\includegraphics{resources/schema-alarm-io}
	\caption{Entrées/sorties du sous-sous-système \og{}alarme\fg{}}

	\centering
		\includegraphics{resources/schema-alarm-logic}
	\caption{Schéma du sous-sous-système \og{}alarme\fg{}}
	\label{fig:alarm-logic}
\end{figure}
L'alarme doit être activée (state) dans les cas suivants :

\begin{itemize}
	\item Condition nécéssaire : l'utilisateur a activé l'alarme (enable)
	\item Condition nécéssaire : un bruit est détecté (activate)
	\item Condition suffisante : l'alarme est déjà activée (alarm)
\end{itemize}

L'ensemble des situations possibles sont représentables par la table de vérité
~\ref{tab:tab-alarm}.

\begin{table}[p]
	\centering
		\begin{tabular}{ c | c | c || c }
			enable & activate & alarm & STATE\\
			\hline
			0 & 0 & 0 & 0\\
			0 & 0 & 1 & 1\\
			0 & 1 & 0 & 0\\
			0 & 1 & 1 & 1\\
			1 & 0 & 0 & 0\\
			1 & 0 & 1 & 1\\
			1 & 1 & 0 & 1\\
			1 & 1 & 1 & 1\\
		\end{tabular}
	\caption{Table de vérité de l'activation de l'alarme}
	\label{tab:tab-alarm}
\end{table}

De cette table, nous obtenons l'équation booléenne évidente :

\begin{equation}
	STATE = (enable \cdot activate) + alarm
\end{equation}

Le circuit correspondant est ainsi celui de la figure ~\ref{fig:alarm-logic}.


%\newpage

\subsection{Commande du ventilateur}

\begin{figure}[p]
	\centering
		\includegraphics{resources/schema-fan-io}
	\caption{Entrées/sorties du sous-sous-système \og{}ventilation\fg{}}

	\centering
		\includegraphics{resources/schema-fan-logic}
	\caption{Schéma du sous-sous-système \og{}ventilation\fg{}}
	\label{fig:fan-logic}
\end{figure}

La sortie $FAN\_AUTO$ indique l'activation du mode automatique lorsque
celui-ci est sélectionné et que la vitesse définie manuellement par
l'utilisateur est la vitesse 0. Cette dernière condition donnée sur $no\_manual$
est vérifiée à l'aide d'un comparateur.

\begin{equation}
	FAN\_AUTO = fan\_auto\_user \cdot no\_manual
\end{equation}

Un premier multiplexeur permet de choisir la valeur $fan\_auto\_value$ définie à
la vitesse 3 si le capteur de température est activé ($hot$).

Un second multiplexeur permet la sélection entre la vitesse manuellement définie
par l'utilisateur ($fan\_speed$) ou la vitesse automatique déterminée par l'état
du capteur ($fan\_auto\_value$) en fonction de l'activation du mode automatique
$FAN\_AUTO$.

Un troisième multiplexeur permet de désactiver le ventilateur,
quelque soit la vitesse définie manuellement ou automatiquement par l'état du capteur,
selon l'entrée $enable$.

Le schéma synthétique est celui du ~\ref{fig:fan-logic}



\newpage

\section{Affichage}

L'état de la centrale domotique est visible par l'utilisateur au travers de
multiples DELs ainsi que des afficheurs 7-segments.

L'écran à cristaux liquide affiche quant à lui un message trivial en 32
caractères.

\subsection{Afficheurs 7-segments}

\begin{figure}[h]
	\centering
		\includegraphics{resources/schema-display-io}
	\caption{Entrées/sorties du sous-sous-système \og{}display\fg{}}
\end{figure}

Les huit afficheurs 7-segments, à l'exception de HEX5, sont utilisés. Celui-ci
est donc éteint à l'aide d'une constante $7 \times 1$, puisqu'actif à
l'état bas.

\subsubsection{Témoins d'activation}

Les afficheurs HEX7 et HEX6 devant respectivement afficher les lettres
\og{}A\fg{} et \og{}F\fg{} quand le mode alarme et la ventilation
automatique sont activés, deux constantes ayant pour valeurs hexadécimales A et
F ont été créées.
Ces constantes sont ensuite traduites par le module
seven\_segment\_decoder pour être affichables.
Un multiplexeur pour chaque afficheur permet ensuite d'afficher la constante
associée ou bien de désactiver l'afficheur.
Le schéma associé est le ~\ref{fig:mode-indicator-logic}.

\begin{figure}[p]
	\centering
		\includegraphics{resources/schema-display-af}
	\caption{Schéma d'affichage des témoins d'activation}
	\label{fig:mode-indicator-logic}
\end{figure}


\subsubsection{Vitesse du ventilateur}

Le module seven\_segment\_decoder ayant une entrée sur 4 bits, et la vitesse du
ventilateur définie sur l'entrée $SPEED[1..0]$ étant codée sur 2 bits, une
constante binaire 00 a été concaténée en LSB. Le résultat de la conversion de la
valeur est ensuite directement affichée sur HEX4.
Le schéma associé est le ~\ref{fig:speed-indicator-logic}.

\begin{figure}[h]
	\centering
		\includegraphics{resources/schema-display-speed}
	\caption{Schéma d'affichage de la vitesse du ventilateur}
	\label{fig:speed-indicator-logic}
\end{figure}


\subsubsection{Chenillard}

\textit{\og{}Science isn't about WHY. It's about WHY NOT!\fg{}} - Cave Johnson

Afin de ne pas laisser les afficheurs 0 à 3 inutilisés, et de rappeler des
mauvais souvenirs aux possesseurs de Freebox v5, un chenillard a été ajouté
dans un module \og{}useless\fg{}.

Celui-ci a été créé en utilisant un registre à décalage de 12 bits (nombre de
segments en bordure), \og{}ralentit\fg{} à l'aide d'un module clock\_divider.
Les segments du milieu ont été désactivés.
Le schéma associé est le ~\ref{fig:speed-useless-logic}.

\begin{figure}[h]
	\centering
		\includegraphics{resources/schema-display-useless}
	\caption{Schéma du chenillard}
	\label{fig:speed-useless-logic}
\end{figure}


\subsection{LCD}

Les modules VHDL lcd\_message et message ont été modifiés pour afficher une
vérité établie. Pour ce faire, les lettres composants la phrase ont été
transcrite en code ASCII hexadecimal et introduits dans le code du composant
message.


\chapter{Sous-système \og{}alarme\fg{}}

\begin{figure}[h]
	\centering
		\includegraphics[width=0.9\textwidth]{resources/alarm-subsubsystems}
	\caption{Découpage du sous-système \og{}alarme\fg{} en sous-sous-systèmes}
\end{figure}

\section{Detection du niveau sonore}

\subsection{Câblage du microphone}

\subsection{Amplification}

\subsection{Detection de niveau sonore}


\section{Génération du son}

\subsection{Horloge du CODEC}

\begin{figure}[h]
	\centering
		\includegraphics{resources/schema-codecclock-io}
	\caption{Entrées/sorties du module \og{}codec\_clock\fg{}}
\end{figure}

\begin{figure}[h]
	\centering
		\includegraphics{resources/schema-codecclock-logic}
	\caption{Schéma du module \og{}codec\_clock\fg{}}
\end{figure}

\begin{figure}[h]
	\centering
		\includegraphics{resources/capture-xtimclk}
	\caption{ \og{}codec\_clock\fg{}}
\end{figure}

\subsection{Génération du son}


\section{Sortie vers le haut-parleur}



\chapter{Sous-système \og{}ventilation\fg{}}

\begin{figure}[h]
	\centering
		\includegraphics[width=0.9\textwidth]{resources/fan-subsubsystems}
	\caption{Découpage du sous-système \og{}ventilation\fg{} en
	sous-sous-systèmes}
\end{figure}


\section{Détection de la température}

\subsection{Câblage du détecteur}

\subsection{Detection de niveau de température}


\section{PWM (Pulse Width Modulation)}


\section{Commande du ventilateur}



