\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é. 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} \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}