summaryrefslogtreecommitdiff
path: root/report/project.tex
blob: e7673b47e080abb9df9ec1b0bcf4840b59415cef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336

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