<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>https://wiki-ima.plil.fr/mediawiki//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ldamiens</id>
		<title>Wiki d'activités IMA - Contributions de l’utilisateur [fr]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki-ima.plil.fr/mediawiki//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ldamiens"/>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php/Sp%C3%A9cial:Contributions/Ldamiens"/>
		<updated>2026-04-24T10:28:11Z</updated>
		<subtitle>Contributions de l’utilisateur</subtitle>
		<generator>MediaWiki 1.29.2</generator>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=46954</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=46954"/>
				<updated>2018-01-26T10:14:41Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Réalisation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
Un serveur DNS sert à obtenir l'adresse IP correspondant à un nom de domaine (URL dans le cas d'un site Web). L'adresse IP est indispensable à notre navigateur car sans elle, il est incapable de contacter le serveur web responsable du site visité. &lt;br /&gt;
&lt;br /&gt;
Le DNSSEC permet de sécuriser les données envoyées par le DNS. Il a été invité afin de protéger le DNS d'attaques. Le DNSSEC appose une &amp;quot;signature&amp;quot; aux données afin de les certifier auprès de l'utilisateur. &lt;br /&gt;
&lt;br /&gt;
=== Objectif ===&lt;br /&gt;
L'objectif de cette tâche secondaire est de réaliser des test approfondis sur le DNSSEC de la plateforme. Dans un premier temps, il s'agit de l'installer en salle serveur. Dans un second temps, il s'agit d'étudier le bon fonctionnement du DNSSEC (les clefs changent-elles correctement chaque semaine ?)&lt;br /&gt;
&lt;br /&gt;
=== Réalisation ===&lt;br /&gt;
Dans un premier temps, nous avons installé  le serveur. Il a alors fallu trouver les rails adéquats pour le réaliser. Sur notre serveur, nous avons regardé les configurations réseau :&lt;br /&gt;
&lt;br /&gt;
 ifconfig eth0&lt;br /&gt;
 vlan6 : 172.26.64.14&lt;br /&gt;
 mask : 255.255.240.0&lt;br /&gt;
 gateway : 172.26.79.254&lt;br /&gt;
&lt;br /&gt;
L’idée pour reconnecter notre serveur au réseau était de mettre le réseau insecure sur le vlan6 et internet sur le vlan47. Pour cela nous avons réalisé les commandes suivantes :&lt;br /&gt;
&lt;br /&gt;
 configure terminal&lt;br /&gt;
 vlan6&lt;br /&gt;
 name insecure&lt;br /&gt;
&lt;br /&gt;
Nous faisons la même chose pour le name internet&lt;br /&gt;
&lt;br /&gt;
En faisant un show vlan sur notre serveur, nous voyons bien les noms apparaitre : &lt;br /&gt;
&lt;br /&gt;
 mount -o loop&lt;br /&gt;
 xl create –c /etc/xen/ima5-dns.cfg&lt;br /&gt;
 vi /etc/host&lt;br /&gt;
&lt;br /&gt;
Et nous mettons ima5-dns partout. Ainsi, pour se connecter à la machine virtuelle par ssh, nous le faisons en passant par weppes en faisant :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ssh -6 addresseIPV6 –l root&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, le DNSSEC doit faire un changer de clefs toutes les semaines, nous devons vérifier si cela est bien le cas. Dans le dossier /etc/bind/zone, nous pouvons y voir figurer quatre zones. La zone plil.info est la seule supposée fonctionner. Les clefs se situe dans le dossier /root/dns/rollzsk. Nous pouvons faire changer les clefs. Lorsque nous avons lancé le serveur, il a également fallu relancer le script chargé de faire changer les clefs chaque semaine. Le script se coupant, nous l’avons lancé en tâche de fond et avons attendu la semaine suivante pour voir si un changement avait été fait. Nous avons également réalisé une sauvegarde des clefs actuelles dans un dossier afin de pouvoir réaliser la comparaison. &lt;br /&gt;
Les semaines suivantes, nous n’avons pas vu de changement au niveau des clefs, il s’agissait toujours des mêmes.&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Création ==&lt;br /&gt;
Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. &lt;br /&gt;
La création des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la VM créée, il est possible de la démarrer de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl create /etc/xen/IMA5-Papaye/cfg &amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite, nous lançons la console de cette manière :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl console IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, pour sortir de cette dernière, nous faisons : &amp;lt;pre&amp;gt; ctrl + alt gr + ] &amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, pour éteindre la machine virtuelle : &amp;lt;pre&amp;gt; xl shutdown IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Et pour détruire la VM : &amp;lt;pre&amp;gt; xl destroy IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande ''lvcreate''.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que pour le répertoire ''home'', la manipulation est un peu plus simple que pour le répertoire ''var''. Tout d'abord, nous faisons appel à ''lvcreate'' de la manière suivante, depuis cordouan :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-var&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Il est possible de visualiser notre home grâce à la commande ''lsblk'' qui affiche tous les périphériques bloc.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque ''home'', ''xvda3'' et le disque ''var'', ''xvda4''.&lt;br /&gt;
&lt;br /&gt;
Puis, nous transformons nos disque en partitions ext4 :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mkfs -t ext4 /dev/xvda4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HOME ===&lt;br /&gt;
Pour la partition ''home'', il suffit de modifier le fichier /etc/fstab de la VM et d'y ajouter la ligne suivante pour que la partition soit montée au démarrage :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda3 /home ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
Le &amp;quot;0&amp;quot; indique que nous sauvegardons jamais et le &amp;quot;2&amp;quot; est propre à la sécurité de la partition.&lt;br /&gt;
Ainsi, un simple &amp;lt;pre&amp;gt; mount -a &amp;lt;/pre&amp;gt; suffit à monter à la partition. (Il est possible de la vérifier grâce à la commande ''df'')&lt;br /&gt;
&lt;br /&gt;
=== VAR ===&lt;br /&gt;
Pour la partition ''var'', c'est un peu plus compliqué car il faut monter la partition dans un /mnt temporaire avant de la déplacer. Nous effectuons donc les instructions suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/xvda4 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, nous modifions le fichier /etc/fstab de la même manière que pour la partition ''home'' :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda4 /var ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
Dans un premier temps, nous devons changer l'adresse IP de notre machine virtuelle ainsi que son masque dans /etc/config. Notre adresse IP est 193.48.57.178. Et notre masque est 255.255.255.240. Puis, nous avons modifié le fichier /etc/xen/IMA5-Papaye. En effet, nous remplaçons l'id par IMA5sc (pour la première séance, nous utilisions ''insecure''). De plus, nous rajoutons la route par défaut, le gateway : 193.49.57.177 dans le fichier /etc/config.&lt;br /&gt;
&lt;br /&gt;
Il est nécessaire d'installer ssh sur notre machine virtuelle :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install ssh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De plus, il est important de modifier le fichier /etc/ssh/sshd_config en changeant la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin Prohibited &amp;lt;/pre&amp;gt;&lt;br /&gt;
par&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin yes &amp;lt;/pre&amp;gt;&lt;br /&gt;
Grâce à cela, nous pourrons nous connecter en root sur la machine en ssh.&lt;br /&gt;
&lt;br /&gt;
Nous redémarrons le service :&lt;br /&gt;
&amp;lt;pre&amp;gt; service ssh restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur DNS ==&lt;br /&gt;
Dans un premier temps, nous avons acheté notre nom de domaine sur Gandi en prenant soin que ce dernier autorise l'installation d'un DNSSEC. Nous avons donc pris le domaine papaye.space.&lt;br /&gt;
&lt;br /&gt;
Puis, nous avons installé bind9 et apache2 : &amp;lt;pre&amp;gt;apt-get install bind9 apache2 &amp;lt;/pre&amp;gt;. Nous avons d'ailleurs ajouté au fichier /etc/default/bind9 la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; OPTIONS=&amp;quot;-4 -u bind&amp;quot; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous créons le dossier pour la page web qui sera vide pour le moment :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkdir /var/www/www.papaye.space &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous créons la table de DNS ou le fichier de zone : dns.papaye.space, en voici le contenu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
;&lt;br /&gt;
; BIND data file for local loopback interface&lt;br /&gt;
;&lt;br /&gt;
$TTL    604800&lt;br /&gt;
@       IN      SOA     dns.papaye.space. root.papaye.space (&lt;br /&gt;
                              2         ; Serial&lt;br /&gt;
                         604800         ; Refresh&lt;br /&gt;
                          86400         ; Retry&lt;br /&gt;
                        2419200         ; Expire&lt;br /&gt;
                         604800 )       ; Negative Cache TTL&lt;br /&gt;
;&lt;br /&gt;
        IN      NS      dns.papaye.space.&lt;br /&gt;
ns      IN      A       193.48.57.178&lt;br /&gt;
www     IN      A       193.48.57.178 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous configurons le fichier named.conf.local :&lt;br /&gt;
&amp;lt;pre&amp;gt; zone &amp;quot;papaye.space&amp;quot; {&lt;br /&gt;
        type master;&lt;br /&gt;
        file &amp;quot;/etc/bind/dns.papaye.space&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi que le fichier named.conf.options (217.70.177.40/32 étant l'adresse IP de Gandi, notre DNS esclave :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
options {&lt;br /&gt;
        directory &amp;quot;var/cache/bind&amp;quot;&lt;br /&gt;
        dnssec-validation auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        allow-transfer {&amp;quot;allowed_to_transfer&amp;quot;;}&lt;br /&gt;
        listen-on-v6 {any;}&lt;br /&gt;
}&lt;br /&gt;
acl &amp;quot;allowed_to_transfer&amp;quot; {&lt;br /&gt;
        217.70.177.40/32;&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous redémarrons notre service bind9 :&lt;br /&gt;
&amp;lt;pre&amp;gt; service bind9 restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les configurations depuis notre machine virtuelle sont terminées mais nous avons dû également effectuer un réglage depuis Gandi afin de renseigner nos DNS.&lt;br /&gt;
Pour les &amp;quot;glues records&amp;quot;, &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
'Nom du serveur' : dns.papaye.space&lt;br /&gt;
'IP' : 193.48.57.178 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour les DNS,&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
'DNS1' : dns.papaye.space&lt;br /&gt;
'DNS2' : ns6.gandi.net &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
L'objectif de cette partie est d'obtenir un certificat pour notre site web. Le certificat SSL généré par Gandi s'obtient de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; openssl req -nodes -newkey rsa:2048 -sha1 -keyout papaye.space.key -out papaye.space.csr &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin de valider notre certificat par Gandi, nous avons dû ajouter une ligne de code à notre fiche de zone (dns.papaye.space), qui était donné par le site.&lt;br /&gt;
&lt;br /&gt;
Une fois le certificat validé par Gandi, un petit cadenas noir est visualisable à côté de notre nom de domaine. De plus, nous pouvons recopier les fichiers de certification générés par Gandi dans le dossier SSL. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp certificat.crt /etc/ssl/certs/papaye.space.crt&lt;br /&gt;
cp serveur.key /etc/ssl/private/papaye.space.key&lt;br /&gt;
cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous faisons un hashage de notre structure afin que notre certificat soit prend en compte :&lt;br /&gt;
&amp;lt;pre&amp;gt; c_rehash /etc/ssl/certs &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis, nous créons le fichier 000-papaye.space-ssl.conf dans /etc/apache2/sites-available/ pour associer apache2 à notre nom de serveur :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#NameVirtualHost *:443&lt;br /&gt;
        &amp;lt;VirtualHost 193.48.57.178:443&amp;gt;&lt;br /&gt;
                ServerName www.papaye.space&lt;br /&gt;
                ServerAlias papaye.space&lt;br /&gt;
                DocumentRoot /var/www/www.papaye.space/&lt;br /&gt;
                CustomLog /var/log/apache2/secure_acces.log combined&lt;br /&gt;
&lt;br /&gt;
                SSLEngine on&lt;br /&gt;
                SSLCertificateFile /etc/ssl/certs/papaye.space.crt&lt;br /&gt;
                SSLCertificateKeyFile /etc/ssl/private/papaye.space.key&lt;br /&gt;
                SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
                SSLVerifyClient None&lt;br /&gt;
        &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
        &amp;lt;Directory /var/www/www.papaye.space&amp;gt;&lt;br /&gt;
                Require all granted&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
ServerName &amp;quot;papaye.space&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous modifions le fichier ports.conf du serveur Apache afin qu'il écoute le port 443 (SSL):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Listen 80 443&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
        Listen 443&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous activons le module SSL d'Apache et activons notre site avec notre certificat :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
a2enmod ssl &lt;br /&gt;
a2ensite 000-papaye.space-ssl.conf&lt;br /&gt;
service apache2 reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
Dans un premier temps, nous devons activer le DNSSEC en ajoutant l'option dans le fichier /etc/bind/named.conf.options :&lt;br /&gt;
&amp;lt;pre&amp;gt; dnssec-enable yes; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous créons le répertoire dans lequel nous allons créer nos clef :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir papaye.space.dnssec&lt;br /&gt;
cd papaye.space.dnssec&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous générons nos clefs KSK et ZSK de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE papaye.space&lt;br /&gt;
dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE papaye.space&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous devons inclure ces clefs dans notre fichier de zone (dns.papaye.space) (la 14842 étant la ksk et l'autre la zsk):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$include /etc/bind/papaye.space.dnssec/Kpapaye.space.+005+14842.key&lt;br /&gt;
$include /etc/bind/papaye.space.dnssec/Kpapaye.space.+005+62520.key&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous signons la zone :&lt;br /&gt;
&amp;lt;pre&amp;gt; dnssec-signzone -o papaye.space-k Kpapaye.space.+005+14842 ../dns.papaye.space Kpapaye.space.+005+62520 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour finir, nous saisissons dans Gandi la clé publique de la KSK et de la ZSK en allant dans l'onglet &amp;quot;générer DNSSEC&amp;quot;. Nous vérifions la sécurisation grâce à la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt; dig DNSKEY papaye.space @localhost &amp;lt;/pre&amp;gt;&lt;br /&gt;
Nous remarquons bien la présence de DNSKEY qui nous certifie la sécurisation de notre DNS.&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
&lt;br /&gt;
Depuis cordouan, nous créons 3 disque disques virtuels avec ''lvcreate'' :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/papaye-raid1&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/papaye-raid2&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/papaye-raid3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous rajoutons ces disques à la configuration de notre machine virtuelle. Toujours depuis cordouan, dans /etc/xen/Papaye.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/papaye-raid1,xvdd1, w',&lt;br /&gt;
'phy:/dev/virtual/papaye-raid2,xvdd2, w',&lt;br /&gt;
'phy:/dev/virtual/papaye-raid3,xvdd3, w',&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depuis notre machine virtuelle cette fois, nous installons mdadm :&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install mdadm &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous créons le disque RAID5 md0 :&lt;br /&gt;
&amp;lt;pre&amp;gt; mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvdd2 /dev/xvdd3 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous installons le système de fichier ext4 dessus :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkfs -t ext4 /dev/md0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons le tout et montons le disque :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --detail --scan &amp;gt;&amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous effectuons un petit test afin de noter la reconstruction de notre disque. &lt;br /&gt;
Nous supprimons une des partitions et observons qu'il est bien manquant dans la configuration :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --set-faulty /dev/md0 /dev/xvdd2&lt;br /&gt;
mdadm --remove /dev/md0 /dev/xvdd2&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdd1[0] xvdd3[2]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous montons le disque à nouveau et pouvons noter la reconstruction du disque :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Papaye:/mnt# ls&lt;br /&gt;
lost+found  test.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous remettons la partition :&lt;br /&gt;
mdadm --add /dev/md0 /dev/xvdd2&lt;br /&gt;
&lt;br /&gt;
Et on observe la reconstruction grâce à cat /proc/mdstat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Cryptage des données ===&lt;br /&gt;
Dans cette partie, nous allons voir comment crypter des données sur un disque virtuel.&lt;br /&gt;
De la même manière que pour la partie précédente, nous créons un disque virtuel via la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/papaye-cryptage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nous rajoutons ce disque à la configuration de notre machine virtuelle. Depuis cordouan, dans /etc/xen/Papaye.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/papaye-cryptage,xvdd4, w',&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous configurons le disque en type Luks :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksFormat /dev/xvdd4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
La phrase secrète est : pasglop, glopglop ou michel.&lt;br /&gt;
&lt;br /&gt;
Nous pouvons vérifier les informations via cette commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksDump /dev/xvdd4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous obtenons les informations suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LUKS header information for /dev/xvdd4&lt;br /&gt;
&lt;br /&gt;
Version:       	1&lt;br /&gt;
Cipher name:   	aes&lt;br /&gt;
Cipher mode:   	xts-plain64&lt;br /&gt;
Hash spec:     	sha256&lt;br /&gt;
Payload offset:	4096&lt;br /&gt;
MK bits:       	256&lt;br /&gt;
MK digest:     	25 40 d5 6d b9 ff c0 d3 d8 cd fb e8 80 41 eb a8 f3 13 58 30&lt;br /&gt;
MK salt:       	a1 9e 1a 6d 40 59 46 86 14 9e 2a de 66 86 6b e0&lt;br /&gt;
39 79 44 db ac 5f 01 a2 cb 9f b8 46 40 4c 3c 53&lt;br /&gt;
MK iterations: 	242250&lt;br /&gt;
UUID:          	2e9af817-8eb1-4478-a095-048645e8983d&lt;br /&gt;
&lt;br /&gt;
Key Slot 0: ENABLED&lt;br /&gt;
Iterations:         	1924810&lt;br /&gt;
Salt:               	f6 28 22 be 14 d9 78 3e 83 d2 f7 cb af bf 1f 52&lt;br /&gt;
88 8f bf bf 83 e2 28 65 1d f1 d3 fe 16 6c b8 e0&lt;br /&gt;
Key material offset:	8&lt;br /&gt;
AF stripes:            	4000&lt;br /&gt;
Key Slot 1: DISABLED&lt;br /&gt;
Key Slot 2: DISABLED&lt;br /&gt;
Key Slot 3: DISABLED&lt;br /&gt;
Key Slot 4: DISABLED&lt;br /&gt;
Key Slot 5: DISABLED&lt;br /&gt;
Key Slot 6: DISABLED&lt;br /&gt;
Key Slot 7: DISABLED&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous ouvrons notre partition cryptée avec :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksOpen /dev/xvdd4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, nous saisissons la phrase secrète.&lt;br /&gt;
&lt;br /&gt;
Nous ajoutons des fichiers :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs.ext3 /dev/mapper/kadoc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous créons un dossier contenant un fichier contenant une simple phrase. Pour écrire dedans il faut monter notre partition.&lt;br /&gt;
Montage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount -t ext3 /dev/mapper/kadoc /mnt/ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Démontage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
umount /mnt/ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous encryptons à nouveau la partition avec la commande suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksClose kadoc &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous vérifions avec GParted que notre partition n'est plus accessible sans mot de passe :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gparted /dev/xvdd4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La commande nous renvoie :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@IMA5-Papaye:/# gparted /dev/xvdd4&lt;br /&gt;
Created symlink /run/systemd/system/-.mount -&amp;gt; /dev/null.&lt;br /&gt;
Created symlink /run/systemd/system/home.mount -&amp;gt; /dev/null.&lt;br /&gt;
Created symlink /run/systemd/system/tmp.mount -&amp;gt; /dev/null.&lt;br /&gt;
Created symlink /run/systemd/system/var.mount -&amp;gt; /dev/null.&lt;br /&gt;
[ 1051.732565] systemd[1]: apt-daily.timer: Adding 2h 21min 20.971598s random time.&lt;br /&gt;
[ 1051.733189] systemd[1]: apt-daily-upgrade.timer: Adding 46min 37.363850s random time.&lt;br /&gt;
&lt;br /&gt;
(gpartedbin:3635): Gtk-WARNING **: cannot open display:&lt;br /&gt;
Removed /run/systemd/system/-.mount.&lt;br /&gt;
Removed /run/systemd/system/home.mount.&lt;br /&gt;
Removed /run/systemd/system/tmp.mount.&lt;br /&gt;
Removed /run/systemd/system/var.mount.&lt;br /&gt;
[ 1051.853426] systemd[1]: apt-daily.timer: Adding 6h 49min 20.775084s random time.&lt;br /&gt;
[ 1051.854034] systemd[1]: apt-daily-upgrade.timer: Adding 47min 6.121251s random time.&lt;br /&gt;
root@IMA&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration des bornes Wifi ==&lt;br /&gt;
=== Création du serveur FreeRadius ===&lt;br /&gt;
Dans un premier temps, il est nécessaire d'implémenter un serveur d'identification FreeRADIUS sur notre machine virtuelle.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut installer FreeRADIUS :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install freeradius&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons un utilisateur dans le fichier /etc/freeradius/users pour s'authentifier sur le réseau WiFi : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nom_de_l_utilisateur Cleartext-password := &amp;quot;mot_de_passe&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous ajoutons aussi les clients (correspondants aux deux points d'accès Wifi et à notre futur VLAN) dans le fichier /etc/freeradius/clients.conf. Pour le moment, nous avons réalisé des tests avec un seul client :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client E304 {&lt;br /&gt;
        ipaddr = 10.10.0.10&lt;br /&gt;
        secret = mot_de_passe&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour redémarrer FreeRADIUS, nous effectuons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
service freeradius restart&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Craquage de clé WEP ===&lt;br /&gt;
Pour ce faire, nous avons besoin de deux postes. Sur le premier, il est nécessaire de générer un traffic sur le réseau afin de capturer les paquets ARP sur l'autre ordinateur. Nous le faisons à l'aide de la commande nping de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nping --arp-type ARP -c 11000  --flags rst --ttl 2 10.2.0.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous mettons le mode moniteur sur la clé wifi. Il nous faut pour cela le nom de notre clé wifi (wlx40a5ef0125e9), obtenu grâce à la commande iwconfig :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
airmon-ng start wlx40a5ef0125e9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons besoin de connaitre le BSSID, channel (CH) et ESSID. Pour cela, nous réalisons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
airodump-ng wlx40a5ef0125e9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant, sur le deuxième poste, nous capturons les trames circulant sur le réseau :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
airodump-ng --bssid C4:14:3C:40:78:65 -c 3 -w crack_wep wlx40a5ef0125e9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour accélérer le craquage, nous allons générer d'avantage de traffique sur le réseau :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
aireplay-ng -3 -b C4:14:3C:40:78:65 -h 00:0F:B5:92:22:68 wlx40a5ef0125e9 (00:0F:B5:92:22:68 étant l'adresse MAC de l'ordinateur secondaire)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le résultat :&lt;br /&gt;
[[Fichier:Resultat craquage dorian.jpg|800 px|thumb|center|Résultat du craquage]]&lt;br /&gt;
&lt;br /&gt;
Il suffit maintenant de craquer la data capturée dans le fichier.cap :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
aircrack-ng crack_wep-02.cap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=46953</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=46953"/>
				<updated>2018-01-26T10:13:15Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
Un serveur DNS sert à obtenir l'adresse IP correspondant à un nom de domaine (URL dans le cas d'un site Web). L'adresse IP est indispensable à notre navigateur car sans elle, il est incapable de contacter le serveur web responsable du site visité. &lt;br /&gt;
&lt;br /&gt;
Le DNSSEC permet de sécuriser les données envoyées par le DNS. Il a été invité afin de protéger le DNS d'attaques. Le DNSSEC appose une &amp;quot;signature&amp;quot; aux données afin de les certifier auprès de l'utilisateur. &lt;br /&gt;
&lt;br /&gt;
=== Objectif ===&lt;br /&gt;
L'objectif de cette tâche secondaire est de réaliser des test approfondis sur le DNSSEC de la plateforme. Dans un premier temps, il s'agit de l'installer en salle serveur. Dans un second temps, il s'agit d'étudier le bon fonctionnement du DNSSEC (les clefs changent-elles correctement chaque semaine ?)&lt;br /&gt;
&lt;br /&gt;
=== Réalisation ===&lt;br /&gt;
Dans un premier temps, nous avons installé  le serveur. Il a alors fallu trouver les rails adéquats pour le réaliser. Sur notre serveur, nous avons regardé les configurations réseau :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ifconfig eth0&lt;br /&gt;
Vlan6 : 172.26.64.14&lt;br /&gt;
Mask : 255.255.240.0&lt;br /&gt;
Gateway : 172.26.79.254&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L’idée pour reconnecter notre serveur au réseau était de mettre le réseau insecure sur le vlan6 et internet sur le vlan47. Pour cela nous avons réalisé les commandes suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Configure terminal&lt;br /&gt;
Vlan6&lt;br /&gt;
Name insecure&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous faisons la même chose pour le name internet&lt;br /&gt;
&lt;br /&gt;
En faisant un show vlan sur notre serveur, nous voyons bien les noms apparaitre : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mount-o loop&lt;br /&gt;
Xl create –c /etc/xen/ima5-dns.cfg&lt;br /&gt;
Vi /etc/host&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et nous mettons ima5-dns partout. Ainsi, pour se connecter à la machine virtuelle par ssh, nous le faisons en passant par weppes en faisant :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ssh -6 addresseIPV6 –l root&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, le DNSSEC doit faire un changer de clefs toutes les semaines, nous devons vérifier si cela est bien le cas. Dans le dossier /etc/bind/zone, nous pouvons y voir figurer quatre zones. La zone plil.info est la seule supposée fonctionner. Les clefs se situe dans le dossier /root/dns/rollzsk. Nous pouvons faire changer les clefs. Lorsque nous avons lancé le serveur, il a également fallu relancer le script chargé de faire changer les clefs chaque semaine. Le script se coupant, nous l’avons lancé en tâche de fond et avons attendu la semaine suivante pour voir si un changement avait été fait. Nous avons également réalisé une sauvegarde des clefs actuelles dans un dossier afin de pouvoir réaliser la comparaison. &lt;br /&gt;
Les semaines suivantes, nous n’avons pas vu de changement au niveau des clefs, il s’agissait toujours des mêmes.&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Création ==&lt;br /&gt;
Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. &lt;br /&gt;
La création des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la VM créée, il est possible de la démarrer de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl create /etc/xen/IMA5-Papaye/cfg &amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite, nous lançons la console de cette manière :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl console IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, pour sortir de cette dernière, nous faisons : &amp;lt;pre&amp;gt; ctrl + alt gr + ] &amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, pour éteindre la machine virtuelle : &amp;lt;pre&amp;gt; xl shutdown IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Et pour détruire la VM : &amp;lt;pre&amp;gt; xl destroy IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande ''lvcreate''.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que pour le répertoire ''home'', la manipulation est un peu plus simple que pour le répertoire ''var''. Tout d'abord, nous faisons appel à ''lvcreate'' de la manière suivante, depuis cordouan :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-var&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Il est possible de visualiser notre home grâce à la commande ''lsblk'' qui affiche tous les périphériques bloc.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque ''home'', ''xvda3'' et le disque ''var'', ''xvda4''.&lt;br /&gt;
&lt;br /&gt;
Puis, nous transformons nos disque en partitions ext4 :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mkfs -t ext4 /dev/xvda4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HOME ===&lt;br /&gt;
Pour la partition ''home'', il suffit de modifier le fichier /etc/fstab de la VM et d'y ajouter la ligne suivante pour que la partition soit montée au démarrage :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda3 /home ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
Le &amp;quot;0&amp;quot; indique que nous sauvegardons jamais et le &amp;quot;2&amp;quot; est propre à la sécurité de la partition.&lt;br /&gt;
Ainsi, un simple &amp;lt;pre&amp;gt; mount -a &amp;lt;/pre&amp;gt; suffit à monter à la partition. (Il est possible de la vérifier grâce à la commande ''df'')&lt;br /&gt;
&lt;br /&gt;
=== VAR ===&lt;br /&gt;
Pour la partition ''var'', c'est un peu plus compliqué car il faut monter la partition dans un /mnt temporaire avant de la déplacer. Nous effectuons donc les instructions suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/xvda4 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, nous modifions le fichier /etc/fstab de la même manière que pour la partition ''home'' :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda4 /var ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
Dans un premier temps, nous devons changer l'adresse IP de notre machine virtuelle ainsi que son masque dans /etc/config. Notre adresse IP est 193.48.57.178. Et notre masque est 255.255.255.240. Puis, nous avons modifié le fichier /etc/xen/IMA5-Papaye. En effet, nous remplaçons l'id par IMA5sc (pour la première séance, nous utilisions ''insecure''). De plus, nous rajoutons la route par défaut, le gateway : 193.49.57.177 dans le fichier /etc/config.&lt;br /&gt;
&lt;br /&gt;
Il est nécessaire d'installer ssh sur notre machine virtuelle :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install ssh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De plus, il est important de modifier le fichier /etc/ssh/sshd_config en changeant la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin Prohibited &amp;lt;/pre&amp;gt;&lt;br /&gt;
par&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin yes &amp;lt;/pre&amp;gt;&lt;br /&gt;
Grâce à cela, nous pourrons nous connecter en root sur la machine en ssh.&lt;br /&gt;
&lt;br /&gt;
Nous redémarrons le service :&lt;br /&gt;
&amp;lt;pre&amp;gt; service ssh restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur DNS ==&lt;br /&gt;
Dans un premier temps, nous avons acheté notre nom de domaine sur Gandi en prenant soin que ce dernier autorise l'installation d'un DNSSEC. Nous avons donc pris le domaine papaye.space.&lt;br /&gt;
&lt;br /&gt;
Puis, nous avons installé bind9 et apache2 : &amp;lt;pre&amp;gt;apt-get install bind9 apache2 &amp;lt;/pre&amp;gt;. Nous avons d'ailleurs ajouté au fichier /etc/default/bind9 la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; OPTIONS=&amp;quot;-4 -u bind&amp;quot; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous créons le dossier pour la page web qui sera vide pour le moment :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkdir /var/www/www.papaye.space &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous créons la table de DNS ou le fichier de zone : dns.papaye.space, en voici le contenu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
;&lt;br /&gt;
; BIND data file for local loopback interface&lt;br /&gt;
;&lt;br /&gt;
$TTL    604800&lt;br /&gt;
@       IN      SOA     dns.papaye.space. root.papaye.space (&lt;br /&gt;
                              2         ; Serial&lt;br /&gt;
                         604800         ; Refresh&lt;br /&gt;
                          86400         ; Retry&lt;br /&gt;
                        2419200         ; Expire&lt;br /&gt;
                         604800 )       ; Negative Cache TTL&lt;br /&gt;
;&lt;br /&gt;
        IN      NS      dns.papaye.space.&lt;br /&gt;
ns      IN      A       193.48.57.178&lt;br /&gt;
www     IN      A       193.48.57.178 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous configurons le fichier named.conf.local :&lt;br /&gt;
&amp;lt;pre&amp;gt; zone &amp;quot;papaye.space&amp;quot; {&lt;br /&gt;
        type master;&lt;br /&gt;
        file &amp;quot;/etc/bind/dns.papaye.space&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi que le fichier named.conf.options (217.70.177.40/32 étant l'adresse IP de Gandi, notre DNS esclave :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
options {&lt;br /&gt;
        directory &amp;quot;var/cache/bind&amp;quot;&lt;br /&gt;
        dnssec-validation auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        allow-transfer {&amp;quot;allowed_to_transfer&amp;quot;;}&lt;br /&gt;
        listen-on-v6 {any;}&lt;br /&gt;
}&lt;br /&gt;
acl &amp;quot;allowed_to_transfer&amp;quot; {&lt;br /&gt;
        217.70.177.40/32;&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous redémarrons notre service bind9 :&lt;br /&gt;
&amp;lt;pre&amp;gt; service bind9 restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les configurations depuis notre machine virtuelle sont terminées mais nous avons dû également effectuer un réglage depuis Gandi afin de renseigner nos DNS.&lt;br /&gt;
Pour les &amp;quot;glues records&amp;quot;, &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
'Nom du serveur' : dns.papaye.space&lt;br /&gt;
'IP' : 193.48.57.178 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour les DNS,&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
'DNS1' : dns.papaye.space&lt;br /&gt;
'DNS2' : ns6.gandi.net &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
L'objectif de cette partie est d'obtenir un certificat pour notre site web. Le certificat SSL généré par Gandi s'obtient de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; openssl req -nodes -newkey rsa:2048 -sha1 -keyout papaye.space.key -out papaye.space.csr &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin de valider notre certificat par Gandi, nous avons dû ajouter une ligne de code à notre fiche de zone (dns.papaye.space), qui était donné par le site.&lt;br /&gt;
&lt;br /&gt;
Une fois le certificat validé par Gandi, un petit cadenas noir est visualisable à côté de notre nom de domaine. De plus, nous pouvons recopier les fichiers de certification générés par Gandi dans le dossier SSL. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp certificat.crt /etc/ssl/certs/papaye.space.crt&lt;br /&gt;
cp serveur.key /etc/ssl/private/papaye.space.key&lt;br /&gt;
cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous faisons un hashage de notre structure afin que notre certificat soit prend en compte :&lt;br /&gt;
&amp;lt;pre&amp;gt; c_rehash /etc/ssl/certs &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis, nous créons le fichier 000-papaye.space-ssl.conf dans /etc/apache2/sites-available/ pour associer apache2 à notre nom de serveur :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#NameVirtualHost *:443&lt;br /&gt;
        &amp;lt;VirtualHost 193.48.57.178:443&amp;gt;&lt;br /&gt;
                ServerName www.papaye.space&lt;br /&gt;
                ServerAlias papaye.space&lt;br /&gt;
                DocumentRoot /var/www/www.papaye.space/&lt;br /&gt;
                CustomLog /var/log/apache2/secure_acces.log combined&lt;br /&gt;
&lt;br /&gt;
                SSLEngine on&lt;br /&gt;
                SSLCertificateFile /etc/ssl/certs/papaye.space.crt&lt;br /&gt;
                SSLCertificateKeyFile /etc/ssl/private/papaye.space.key&lt;br /&gt;
                SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
                SSLVerifyClient None&lt;br /&gt;
        &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
        &amp;lt;Directory /var/www/www.papaye.space&amp;gt;&lt;br /&gt;
                Require all granted&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
ServerName &amp;quot;papaye.space&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous modifions le fichier ports.conf du serveur Apache afin qu'il écoute le port 443 (SSL):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Listen 80 443&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
        Listen 443&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous activons le module SSL d'Apache et activons notre site avec notre certificat :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
a2enmod ssl &lt;br /&gt;
a2ensite 000-papaye.space-ssl.conf&lt;br /&gt;
service apache2 reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
Dans un premier temps, nous devons activer le DNSSEC en ajoutant l'option dans le fichier /etc/bind/named.conf.options :&lt;br /&gt;
&amp;lt;pre&amp;gt; dnssec-enable yes; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous créons le répertoire dans lequel nous allons créer nos clef :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir papaye.space.dnssec&lt;br /&gt;
cd papaye.space.dnssec&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous générons nos clefs KSK et ZSK de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE papaye.space&lt;br /&gt;
dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE papaye.space&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous devons inclure ces clefs dans notre fichier de zone (dns.papaye.space) (la 14842 étant la ksk et l'autre la zsk):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$include /etc/bind/papaye.space.dnssec/Kpapaye.space.+005+14842.key&lt;br /&gt;
$include /etc/bind/papaye.space.dnssec/Kpapaye.space.+005+62520.key&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous signons la zone :&lt;br /&gt;
&amp;lt;pre&amp;gt; dnssec-signzone -o papaye.space-k Kpapaye.space.+005+14842 ../dns.papaye.space Kpapaye.space.+005+62520 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour finir, nous saisissons dans Gandi la clé publique de la KSK et de la ZSK en allant dans l'onglet &amp;quot;générer DNSSEC&amp;quot;. Nous vérifions la sécurisation grâce à la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt; dig DNSKEY papaye.space @localhost &amp;lt;/pre&amp;gt;&lt;br /&gt;
Nous remarquons bien la présence de DNSKEY qui nous certifie la sécurisation de notre DNS.&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
&lt;br /&gt;
Depuis cordouan, nous créons 3 disque disques virtuels avec ''lvcreate'' :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/papaye-raid1&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/papaye-raid2&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/papaye-raid3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous rajoutons ces disques à la configuration de notre machine virtuelle. Toujours depuis cordouan, dans /etc/xen/Papaye.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/papaye-raid1,xvdd1, w',&lt;br /&gt;
'phy:/dev/virtual/papaye-raid2,xvdd2, w',&lt;br /&gt;
'phy:/dev/virtual/papaye-raid3,xvdd3, w',&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depuis notre machine virtuelle cette fois, nous installons mdadm :&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install mdadm &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous créons le disque RAID5 md0 :&lt;br /&gt;
&amp;lt;pre&amp;gt; mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvdd2 /dev/xvdd3 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous installons le système de fichier ext4 dessus :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkfs -t ext4 /dev/md0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons le tout et montons le disque :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --detail --scan &amp;gt;&amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous effectuons un petit test afin de noter la reconstruction de notre disque. &lt;br /&gt;
Nous supprimons une des partitions et observons qu'il est bien manquant dans la configuration :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --set-faulty /dev/md0 /dev/xvdd2&lt;br /&gt;
mdadm --remove /dev/md0 /dev/xvdd2&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdd1[0] xvdd3[2]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous montons le disque à nouveau et pouvons noter la reconstruction du disque :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Papaye:/mnt# ls&lt;br /&gt;
lost+found  test.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous remettons la partition :&lt;br /&gt;
mdadm --add /dev/md0 /dev/xvdd2&lt;br /&gt;
&lt;br /&gt;
Et on observe la reconstruction grâce à cat /proc/mdstat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Cryptage des données ===&lt;br /&gt;
Dans cette partie, nous allons voir comment crypter des données sur un disque virtuel.&lt;br /&gt;
De la même manière que pour la partie précédente, nous créons un disque virtuel via la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/papaye-cryptage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nous rajoutons ce disque à la configuration de notre machine virtuelle. Depuis cordouan, dans /etc/xen/Papaye.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/papaye-cryptage,xvdd4, w',&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous configurons le disque en type Luks :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksFormat /dev/xvdd4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
La phrase secrète est : pasglop, glopglop ou michel.&lt;br /&gt;
&lt;br /&gt;
Nous pouvons vérifier les informations via cette commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksDump /dev/xvdd4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous obtenons les informations suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LUKS header information for /dev/xvdd4&lt;br /&gt;
&lt;br /&gt;
Version:       	1&lt;br /&gt;
Cipher name:   	aes&lt;br /&gt;
Cipher mode:   	xts-plain64&lt;br /&gt;
Hash spec:     	sha256&lt;br /&gt;
Payload offset:	4096&lt;br /&gt;
MK bits:       	256&lt;br /&gt;
MK digest:     	25 40 d5 6d b9 ff c0 d3 d8 cd fb e8 80 41 eb a8 f3 13 58 30&lt;br /&gt;
MK salt:       	a1 9e 1a 6d 40 59 46 86 14 9e 2a de 66 86 6b e0&lt;br /&gt;
39 79 44 db ac 5f 01 a2 cb 9f b8 46 40 4c 3c 53&lt;br /&gt;
MK iterations: 	242250&lt;br /&gt;
UUID:          	2e9af817-8eb1-4478-a095-048645e8983d&lt;br /&gt;
&lt;br /&gt;
Key Slot 0: ENABLED&lt;br /&gt;
Iterations:         	1924810&lt;br /&gt;
Salt:               	f6 28 22 be 14 d9 78 3e 83 d2 f7 cb af bf 1f 52&lt;br /&gt;
88 8f bf bf 83 e2 28 65 1d f1 d3 fe 16 6c b8 e0&lt;br /&gt;
Key material offset:	8&lt;br /&gt;
AF stripes:            	4000&lt;br /&gt;
Key Slot 1: DISABLED&lt;br /&gt;
Key Slot 2: DISABLED&lt;br /&gt;
Key Slot 3: DISABLED&lt;br /&gt;
Key Slot 4: DISABLED&lt;br /&gt;
Key Slot 5: DISABLED&lt;br /&gt;
Key Slot 6: DISABLED&lt;br /&gt;
Key Slot 7: DISABLED&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous ouvrons notre partition cryptée avec :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksOpen /dev/xvdd4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, nous saisissons la phrase secrète.&lt;br /&gt;
&lt;br /&gt;
Nous ajoutons des fichiers :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs.ext3 /dev/mapper/kadoc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous créons un dossier contenant un fichier contenant une simple phrase. Pour écrire dedans il faut monter notre partition.&lt;br /&gt;
Montage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount -t ext3 /dev/mapper/kadoc /mnt/ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Démontage :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
umount /mnt/ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous encryptons à nouveau la partition avec la commande suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cryptsetup luksClose kadoc &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous vérifions avec GParted que notre partition n'est plus accessible sans mot de passe :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gparted /dev/xvdd4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La commande nous renvoie :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@IMA5-Papaye:/# gparted /dev/xvdd4&lt;br /&gt;
Created symlink /run/systemd/system/-.mount -&amp;gt; /dev/null.&lt;br /&gt;
Created symlink /run/systemd/system/home.mount -&amp;gt; /dev/null.&lt;br /&gt;
Created symlink /run/systemd/system/tmp.mount -&amp;gt; /dev/null.&lt;br /&gt;
Created symlink /run/systemd/system/var.mount -&amp;gt; /dev/null.&lt;br /&gt;
[ 1051.732565] systemd[1]: apt-daily.timer: Adding 2h 21min 20.971598s random time.&lt;br /&gt;
[ 1051.733189] systemd[1]: apt-daily-upgrade.timer: Adding 46min 37.363850s random time.&lt;br /&gt;
&lt;br /&gt;
(gpartedbin:3635): Gtk-WARNING **: cannot open display:&lt;br /&gt;
Removed /run/systemd/system/-.mount.&lt;br /&gt;
Removed /run/systemd/system/home.mount.&lt;br /&gt;
Removed /run/systemd/system/tmp.mount.&lt;br /&gt;
Removed /run/systemd/system/var.mount.&lt;br /&gt;
[ 1051.853426] systemd[1]: apt-daily.timer: Adding 6h 49min 20.775084s random time.&lt;br /&gt;
[ 1051.854034] systemd[1]: apt-daily-upgrade.timer: Adding 47min 6.121251s random time.&lt;br /&gt;
root@IMA&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration des bornes Wifi ==&lt;br /&gt;
=== Création du serveur FreeRadius ===&lt;br /&gt;
Dans un premier temps, il est nécessaire d'implémenter un serveur d'identification FreeRADIUS sur notre machine virtuelle.&lt;br /&gt;
&lt;br /&gt;
Pour cela, il faut installer FreeRADIUS :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install freeradius&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons un utilisateur dans le fichier /etc/freeradius/users pour s'authentifier sur le réseau WiFi : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nom_de_l_utilisateur Cleartext-password := &amp;quot;mot_de_passe&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous ajoutons aussi les clients (correspondants aux deux points d'accès Wifi et à notre futur VLAN) dans le fichier /etc/freeradius/clients.conf. Pour le moment, nous avons réalisé des tests avec un seul client :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client E304 {&lt;br /&gt;
        ipaddr = 10.10.0.10&lt;br /&gt;
        secret = mot_de_passe&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour redémarrer FreeRADIUS, nous effectuons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
service freeradius restart&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Craquage de clé WEP ===&lt;br /&gt;
Pour ce faire, nous avons besoin de deux postes. Sur le premier, il est nécessaire de générer un traffic sur le réseau afin de capturer les paquets ARP sur l'autre ordinateur. Nous le faisons à l'aide de la commande nping de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nping --arp-type ARP -c 11000  --flags rst --ttl 2 10.2.0.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous mettons le mode moniteur sur la clé wifi. Il nous faut pour cela le nom de notre clé wifi (wlx40a5ef0125e9), obtenu grâce à la commande iwconfig :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
airmon-ng start wlx40a5ef0125e9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons besoin de connaitre le BSSID, channel (CH) et ESSID. Pour cela, nous réalisons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
airodump-ng wlx40a5ef0125e9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant, sur le deuxième poste, nous capturons les trames circulant sur le réseau :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
airodump-ng --bssid C4:14:3C:40:78:65 -c 3 -w crack_wep wlx40a5ef0125e9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour accélérer le craquage, nous allons générer d'avantage de traffique sur le réseau :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
aireplay-ng -3 -b C4:14:3C:40:78:65 -h 00:0F:B5:92:22:68 wlx40a5ef0125e9 (00:0F:B5:92:22:68 étant l'adresse MAC de l'ordinateur secondaire)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le résultat :&lt;br /&gt;
[[Fichier:Resultat craquage dorian.jpg|800 px|thumb|center|Résultat du craquage]]&lt;br /&gt;
&lt;br /&gt;
Il suffit maintenant de craquer la data capturée dans le fichier.cap :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
aircrack-ng crack_wep-02.cap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45958</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45958"/>
				<updated>2017-10-26T20:56:36Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Présentation de la tâche */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
Un serveur DNS sert à obtenir l'adresse IP correspondant à un nom de domaine (URL dans le cas d'un site Web). L'adresse IP est indispensable à notre navigateur car sans elle, il est incapable de contacter le serveur web responsable du site visité. &lt;br /&gt;
&lt;br /&gt;
Le DNSSEC permet de sécuriser les données envoyées par le DNS. Il a été invité afin de protéger le DNS d'attaques. Le DNSSEC appose une &amp;quot;signature&amp;quot; aux données afin de les certifier auprès de l'utilisateur. &lt;br /&gt;
&lt;br /&gt;
=== Objectif ===&lt;br /&gt;
L'objectif de cette tâche secondaire est de réaliser des test approfondis sur le DNSSEC de la plateforme. Dans un premier temps, il s'agit de l'installer en salle serveur. Dans un second temps, il s'agit d'étudier le bon fonctionnement du DNSSEC (les clefs changent-elles correctement chaque semaine ?)&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Création ==&lt;br /&gt;
Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. &lt;br /&gt;
La création des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la VM créée, il est possible de la démarrer de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl create /etc/xen/IMA5-Papaye/cfg &amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite, nous lançons la console de cette manière :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl console IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, pour sortir de cette dernière, nous faisons : &amp;lt;pre&amp;gt; ctrl + alt gr + ] &amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, pour éteindre la machine virtuelle : &amp;lt;pre&amp;gt; xl shutdown IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Et pour détruire la VM : &amp;lt;pre&amp;gt; xl destroy IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande ''lvcreate''.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que pour le répertoire ''home'', la manipulation est un peu plus simple que pour le répertoire ''var''. Tout d'abord, nous faisons appel à ''lvcreate'' de la manière suivante, depuis cordouan :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-var&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Il est possible de visualiser notre home grâce à la commande ''lsblk'' qui affiche tous les périphériques bloc.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque ''home'', ''xvda3'' et le disque ''var'', ''xvda4''.&lt;br /&gt;
&lt;br /&gt;
Puis, nous transformons nos disque en partitions ext4 :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mkfs -t ext4 /dev/xvda4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HOME ===&lt;br /&gt;
Pour la partition ''home'', il suffit de modifier le fichier /etc/fstab de la VM et d'y ajouter la ligne suivante pour que la partition soit montée au démarrage :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda3 /home ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
Le &amp;quot;0&amp;quot; indique que nous sauvegardons jamais et le &amp;quot;2&amp;quot; est propre à la sécurité de la partition.&lt;br /&gt;
Ainsi, un simple &amp;lt;pre&amp;gt; mount -a &amp;lt;/pre&amp;gt; suffit à monter à la partition. (Il est possible de la vérifier grâce à la commande ''df'')&lt;br /&gt;
&lt;br /&gt;
=== VAR ===&lt;br /&gt;
Pour la partition ''var'', c'est un peu plus compliqué car il faut monter la partition dans un /mnt temporaire avant de la déplacer. Nous effectuons donc les instructions suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/xvda4 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, nous modifions le fichier /etc/fstab de la même manière que pour la partition ''home'' :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda4 /var ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
Dans un premier temps, nous devons changer l'adresse IP de notre machine virtuelle ainsi que son masque dans /etc/config. Notre adresse IP est 193.48.57.178. Et notre masque est 255.255.255.240. Puis, nous avons modifié le fichier /etc/xen/IMA5-Papaye. En effet, nous remplaçons l'id par IMA5sc (pour la première séance, nous utilisions ''insecure''). De plus, nous rajoutons la route par défaut, le gateway : 193.49.57.177 dans le fichier /etc/config.&lt;br /&gt;
&lt;br /&gt;
Il est nécessaire d'installer ssh sur notre machine virtuelle :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install ssh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De plus, il est important de modifier le fichier /etc/ssh/sshd_config en changeant la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin Prohibited &amp;lt;/pre&amp;gt;&lt;br /&gt;
par&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin yes &amp;lt;/pre&amp;gt;&lt;br /&gt;
Grâce à cela, nous pourrons nous connecter en root sur la machine en ssh.&lt;br /&gt;
&lt;br /&gt;
Nous redémarrons le service :&lt;br /&gt;
&amp;lt;pre&amp;gt; service ssh restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur DNS ==&lt;br /&gt;
Dans un premier temps, nous avons acheté notre nom de domaine sur Gandi en prenant soin que ce dernier autorise l'installation d'un DNSSEC. Nous avons donc pris le domaine papaye.space.&lt;br /&gt;
&lt;br /&gt;
Puis, nous avons installé bind9 et apache2 : &amp;lt;pre&amp;gt;apt-get install bind9 apache2 &amp;lt;/pre&amp;gt;. Nous avons d'ailleurs ajouté au fichier /etc/default/bind9 la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; OPTIONS=&amp;quot;-4 -u bind&amp;quot; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous créons le dossier pour la page web qui sera vide pour le moment :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkdir /var/www/www.papaye.space &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous créons la table de DNS ou le fichier de zone : dns.papaye.space, en voici le contenu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
;&lt;br /&gt;
; BIND data file for local loopback interface&lt;br /&gt;
;&lt;br /&gt;
$TTL    604800&lt;br /&gt;
@       IN      SOA     dns.papaye.space. root.papaye.space (&lt;br /&gt;
                              2         ; Serial&lt;br /&gt;
                         604800         ; Refresh&lt;br /&gt;
                          86400         ; Retry&lt;br /&gt;
                        2419200         ; Expire&lt;br /&gt;
                         604800 )       ; Negative Cache TTL&lt;br /&gt;
;&lt;br /&gt;
        IN      NS      dns.papaye.space.&lt;br /&gt;
ns      IN      A       193.48.57.178&lt;br /&gt;
www     IN      A       193.48.57.178 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous configurons le fichier named.conf.local :&lt;br /&gt;
&amp;lt;pre&amp;gt; zone &amp;quot;papaye.space&amp;quot; {&lt;br /&gt;
        type master;&lt;br /&gt;
        file &amp;quot;/etc/bind/dns.papaye.space&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi que le fichier named.conf.options (217.70.177.40/32 étant l'adresse IP de Gandi, notre DNS esclave :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
options {&lt;br /&gt;
        directory &amp;quot;var/cache/bind&amp;quot;&lt;br /&gt;
        dnssec-validation auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        allow-transfer {&amp;quot;allowed_to_transfer&amp;quot;;}&lt;br /&gt;
        listen-on-v6 {any;}&lt;br /&gt;
}&lt;br /&gt;
acl &amp;quot;allowed_to_transfer&amp;quot; {&lt;br /&gt;
        217.70.177.40/32;&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous redémarrons notre service bind9 :&lt;br /&gt;
&amp;lt;pre&amp;gt; service bind9 restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les configurations depuis notre machine virtuelle sont terminées mais nous avons dû également effectuer un réglage depuis Gandi afin de renseigner nos DNS.&lt;br /&gt;
Pour les &amp;quot;glues records&amp;quot;, &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
'Nom du serveur' : dns.papaye.space&lt;br /&gt;
'IP' : 193.48.57.178 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour les DNS,&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
'DNS1' : dns.papaye.space&lt;br /&gt;
'DNS2' : ns6.gandi.net &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
L'objectif de cette partie est d'obtenir un certificat pour notre site web. Le certificat SSL généré par Gandi s'obtient de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; openssl req -nodes -newkey rsa:2048 -sha1 -keyout papaye.space.key -out papaye.space.csr &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin de valider notre certificat par Gandi, nous avons dû ajouter une ligne de code à notre fiche de zone (dns.papaye.space), qui était donné par le site.&lt;br /&gt;
&lt;br /&gt;
Une fois le certificat validé par Gandi, un petit cadenas noir est visualisable à côté de notre nom de domaine. De plus, nous pouvons recopier les fichiers de certification générés par Gandi dans le dossier SSL. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp certificat.crt /etc/ssl/certs/papaye.space.crt&lt;br /&gt;
cp serveur.key /etc/ssl/private/papaye.space.key&lt;br /&gt;
cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous faisons un hashage de notre structure afin que notre certificat soit prend en compte :&lt;br /&gt;
&amp;lt;pre&amp;gt; c_rehash /etc/ssl/certs &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis, nous créons le fichier 000-papaye.space-ssl.conf dans /etc/apache2/sites-available/ pour associer apache2 à notre nom de serveur :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#NameVirtualHost *:443&lt;br /&gt;
        &amp;lt;VirtualHost 193.48.57.178:443&amp;gt;&lt;br /&gt;
                ServerName www.papaye.space&lt;br /&gt;
                ServerAlias papaye.space&lt;br /&gt;
                DocumentRoot /var/www/www.papaye.space/&lt;br /&gt;
                CustomLog /var/log/apache2/secure_acces.log combined&lt;br /&gt;
&lt;br /&gt;
                SSLEngine on&lt;br /&gt;
                SSLCertificateFile /etc/ssl/certs/papaye.space.crt&lt;br /&gt;
                SSLCertificateKeyFile /etc/ssl/private/papaye.space.key&lt;br /&gt;
                SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
                SSLVerifyClient None&lt;br /&gt;
        &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
        &amp;lt;Directory /var/www/www.papaye.space&amp;gt;&lt;br /&gt;
                Require all granted&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
ServerName &amp;quot;papaye.space&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous modifions le fichier ports.conf du serveur Apache afin qu'il écoute le port 443 (SSL):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Listen 80 443&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
        Listen 443&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous activons le module SSL d'Apache et activons notre site avec notre certificat :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
a2enmod ssl &lt;br /&gt;
a2ensite 000-piscinemorte.net-ssl.conf&lt;br /&gt;
service apache2 reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
Dans un premier temps, nous devons activer le DNSSEC en ajoutant l'option dans le fichier /etc/bind/named.conf.options :&lt;br /&gt;
&amp;lt;pre&amp;gt; dnssec-enable yes; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous créons le répertoire dans lequel nous allons créer nos clef :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir papaye.space.dnssec&lt;br /&gt;
cd papaye.space.dnssec&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous générons nos clefs KSK et ZSK de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE papaye.space&lt;br /&gt;
dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE papaye.space&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous devons inclure ces clefs dans notre fichier de zone (dns.papaye.space) (la 14842 étant la ksk et l'autre la zsk):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$include /etc/bind/papaye.space.dnssec/Kpapaye.space.+005+14842.key&lt;br /&gt;
$include /etc/bind/papaye.space.dnssec/Kpapaye.space.+005+62520.key&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous signons la zone :&lt;br /&gt;
&amp;lt;pre&amp;gt; dnssec-signzone -o papaye.space-k Kpapaye.space.+005+14842 ../dns.papaye.space Kpapaye.space.+005+62520 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour finir, nous saisissons dans Gandi la clé publique de la KSK et de la ZSK en allant dans l'onglet &amp;quot;générer DNSSEC&amp;quot;. Nous vérifions la sécurisation grâce à la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt; dig DNSKEY papaye.space @localhost &amp;lt;/pre&amp;gt;&lt;br /&gt;
Nous remarquons bien la présence de DNSKEY qui nous certifie la sécurisation de notre DNS.&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
&lt;br /&gt;
Depuis cordouan, nous créons 3 disque disques virtuels avec ''lvcreate'' :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/papaye-raid1&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/papaye-raid2&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/papaye-raid3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous rajoutons ces disques à la configuration de notre machine virtuelle. Toujours depuis cordouan, dans /etc/xen/Papaye.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/papaye-raid1,xvdd1, w',&lt;br /&gt;
'phy:/dev/virtual/papaye-raid2,xvdd2, w',&lt;br /&gt;
'phy:/dev/virtual/papaye-raid3,xvdd3, w',&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depuis notre machine virtuelle cette fois, nous installons mdadm :&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install mdadm &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous créons le disque RAID5 md0 :&lt;br /&gt;
&amp;lt;pre&amp;gt; mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvdd2 /dev/xvdd3 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous installons le système de fichier ext4 dessus :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkfs -t ext4 /dev/md0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons le tout et montons le disque :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --detail --scan &amp;gt;&amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous effectuons un petit test afin de noter la reconstruction de notre disque. &lt;br /&gt;
Nous supprimons une des partitions et observons qu'il est bien manquant dans la configuration :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --set-faulty /dev/md0 /dev/xvdd2&lt;br /&gt;
mdadm --remove /dev/md0 /dev/xvdd2&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdd1[0] xvdd3[2]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous montons le disque à nouveau et pouvons noter la reconstruction du disque :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Deadpool:/mnt# ls&lt;br /&gt;
lost+found  test.txt&lt;br /&gt;
&lt;br /&gt;
Nous remettons la partition :&lt;br /&gt;
mdadm --add /dev/md0 /dev/xvdd2&lt;br /&gt;
&lt;br /&gt;
Et on observe la reconstruction grâce à cat /proc/mdstat.&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45954</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45954"/>
				<updated>2017-10-26T20:45:24Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Sécurisation via RAID5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Création ==&lt;br /&gt;
Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. &lt;br /&gt;
La création des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la VM créée, il est possible de la démarrer de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl create /etc/xen/IMA5-Papaye/cfg &amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite, nous lançons la console de cette manière :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl console IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, pour sortir de cette dernière, nous faisons : &amp;lt;pre&amp;gt; ctrl + alt gr + ] &amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, pour éteindre la machine virtuelle : &amp;lt;pre&amp;gt; xl shutdown IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Et pour détruire la VM : &amp;lt;pre&amp;gt; xl destroy IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande ''lvcreate''.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que pour le répertoire ''home'', la manipulation est un peu plus simple que pour le répertoire ''var''. Tout d'abord, nous faisons appel à ''lvcreate'' de la manière suivante, depuis cordouan :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-var&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Il est possible de visualiser notre home grâce à la commande ''lsblk'' qui affiche tous les périphériques bloc.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque ''home'', ''xvda3'' et le disque ''var'', ''xvda4''.&lt;br /&gt;
&lt;br /&gt;
Puis, nous transformons nos disque en partitions ext4 :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mkfs -t ext4 /dev/xvda4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HOME ===&lt;br /&gt;
Pour la partition ''home'', il suffit de modifier le fichier /etc/fstab de la VM et d'y ajouter la ligne suivante pour que la partition soit montée au démarrage :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda3 /home ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
Le &amp;quot;0&amp;quot; indique que nous sauvegardons jamais et le &amp;quot;2&amp;quot; est propre à la sécurité de la partition.&lt;br /&gt;
Ainsi, un simple &amp;lt;pre&amp;gt; mount -a &amp;lt;/pre&amp;gt; suffit à monter à la partition. (Il est possible de la vérifier grâce à la commande ''df'')&lt;br /&gt;
&lt;br /&gt;
=== VAR ===&lt;br /&gt;
Pour la partition ''var'', c'est un peu plus compliqué car il faut monter la partition dans un /mnt temporaire avant de la déplacer. Nous effectuons donc les instructions suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/xvda4 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, nous modifions le fichier /etc/fstab de la même manière que pour la partition ''home'' :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda4 /var ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
Dans un premier temps, nous devons changer l'adresse IP de notre machine virtuelle ainsi que son masque dans /etc/config. Notre adresse IP est 193.48.57.178. Et notre masque est 255.255.255.240. Puis, nous avons modifié le fichier /etc/xen/IMA5-Papaye. En effet, nous remplaçons l'id par IMA5sc (pour la première séance, nous utilisions ''insecure''). De plus, nous rajoutons la route par défaut, le gateway : 193.49.57.177 dans le fichier /etc/config.&lt;br /&gt;
&lt;br /&gt;
Il est nécessaire d'installer ssh sur notre machine virtuelle :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install ssh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De plus, il est important de modifier le fichier /etc/ssh/sshd_config en changeant la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin Prohibited &amp;lt;/pre&amp;gt;&lt;br /&gt;
par&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin yes &amp;lt;/pre&amp;gt;&lt;br /&gt;
Grâce à cela, nous pourrons nous connecter en root sur la machine en ssh.&lt;br /&gt;
&lt;br /&gt;
Nous redémarrons le service :&lt;br /&gt;
&amp;lt;pre&amp;gt; service ssh restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur DNS ==&lt;br /&gt;
Dans un premier temps, nous avons acheté notre nom de domaine sur Gandi en prenant soin que ce dernier autorise l'installation d'un DNSSEC. Nous avons donc pris le domaine papaye.space.&lt;br /&gt;
&lt;br /&gt;
Puis, nous avons installé bind9 et apache2 : &amp;lt;pre&amp;gt;apt-get install bind9 apache2 &amp;lt;/pre&amp;gt;. Nous avons d'ailleurs ajouté au fichier /etc/default/bind9 la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; OPTIONS=&amp;quot;-4 -u bind&amp;quot; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous créons le dossier pour la page web qui sera vide pour le moment :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkdir /var/www/www.papaye.space &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous créons la table de DNS ou le fichier de zone : dns.papaye.space, en voici le contenu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
;&lt;br /&gt;
; BIND data file for local loopback interface&lt;br /&gt;
;&lt;br /&gt;
$TTL    604800&lt;br /&gt;
@       IN      SOA     dns.papaye.space. root.papaye.space (&lt;br /&gt;
                              2         ; Serial&lt;br /&gt;
                         604800         ; Refresh&lt;br /&gt;
                          86400         ; Retry&lt;br /&gt;
                        2419200         ; Expire&lt;br /&gt;
                         604800 )       ; Negative Cache TTL&lt;br /&gt;
;&lt;br /&gt;
        IN      NS      dns.papaye.space.&lt;br /&gt;
ns      IN      A       193.48.57.178&lt;br /&gt;
www     IN      A       193.48.57.178 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous configurons le fichier named.conf.local :&lt;br /&gt;
&amp;lt;pre&amp;gt; zone &amp;quot;papaye.space&amp;quot; {&lt;br /&gt;
        type master;&lt;br /&gt;
        file &amp;quot;/etc/bind/dns.papaye.space&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi que le fichier named.conf.options (217.70.177.40/32 étant l'adresse IP de Gandi, notre DNS esclave :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
options {&lt;br /&gt;
        directory &amp;quot;var/cache/bind&amp;quot;&lt;br /&gt;
        dnssec-validation auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        allow-transfer {&amp;quot;allowed_to_transfer&amp;quot;;}&lt;br /&gt;
        listen-on-v6 {any;}&lt;br /&gt;
}&lt;br /&gt;
acl &amp;quot;allowed_to_transfer&amp;quot; {&lt;br /&gt;
        217.70.177.40/32;&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous redémarrons notre service bind9 :&lt;br /&gt;
&amp;lt;pre&amp;gt; service bind9 restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les configurations depuis notre machine virtuelle sont terminées mais nous avons dû également effectuer un réglage depuis Gandi afin de renseigner nos DNS.&lt;br /&gt;
Pour les &amp;quot;glues records&amp;quot;, &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
'Nom du serveur' : dns.papaye.space&lt;br /&gt;
'IP' : 193.48.57.178 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour les DNS,&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
'DNS1' : dns.papaye.space&lt;br /&gt;
'DNS2' : ns6.gandi.net &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
L'objectif de cette partie est d'obtenir un certificat pour notre site web. Le certificat SSL généré par Gandi s'obtient de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; openssl req -nodes -newkey rsa:2048 -sha1 -keyout papaye.space.key -out papaye.space.csr &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin de valider notre certificat par Gandi, nous avons dû ajouter une ligne de code à notre fiche de zone (dns.papaye.space), qui était donné par le site.&lt;br /&gt;
&lt;br /&gt;
Une fois le certificat validé par Gandi, un petit cadenas noir est visualisable à côté de notre nom de domaine. De plus, nous pouvons recopier les fichiers de certification générés par Gandi dans le dossier SSL. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp certificat.crt /etc/ssl/certs/papaye.space.crt&lt;br /&gt;
cp serveur.key /etc/ssl/private/papaye.space.key&lt;br /&gt;
cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous faisons un hashage de notre structure afin que notre certificat soit prend en compte :&lt;br /&gt;
&amp;lt;pre&amp;gt; c_rehash /etc/ssl/certs &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis, nous créons le fichier 000-papaye.space-ssl.conf dans /etc/apache2/sites-available/ pour associer apache2 à notre nom de serveur :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#NameVirtualHost *:443&lt;br /&gt;
        &amp;lt;VirtualHost 193.48.57.178:443&amp;gt;&lt;br /&gt;
                ServerName www.papaye.space&lt;br /&gt;
                ServerAlias papaye.space&lt;br /&gt;
                DocumentRoot /var/www/www.papaye.space/&lt;br /&gt;
                CustomLog /var/log/apache2/secure_acces.log combined&lt;br /&gt;
&lt;br /&gt;
                SSLEngine on&lt;br /&gt;
                SSLCertificateFile /etc/ssl/certs/papaye.space.crt&lt;br /&gt;
                SSLCertificateKeyFile /etc/ssl/private/papaye.space.key&lt;br /&gt;
                SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
                SSLVerifyClient None&lt;br /&gt;
        &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
        &amp;lt;Directory /var/www/www.papaye.space&amp;gt;&lt;br /&gt;
                Require all granted&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
ServerName &amp;quot;papaye.space&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous modifions le fichier ports.conf du serveur Apache afin qu'il écoute le port 443 (SSL):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Listen 80 443&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
        Listen 443&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous activons le module SSL d'Apache et activons notre site avec notre certificat :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
a2enmod ssl &lt;br /&gt;
a2ensite 000-piscinemorte.net-ssl.conf&lt;br /&gt;
service apache2 reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
Dans un premier temps, nous devons activer le DNSSEC en ajoutant l'option dans le fichier /etc/bind/named.conf.options :&lt;br /&gt;
&amp;lt;pre&amp;gt; dnssec-enable yes; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous créons le répertoire dans lequel nous allons créer nos clef :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir papaye.space.dnssec&lt;br /&gt;
cd papaye.space.dnssec&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous générons nos clefs KSK et ZSK de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE papaye.space&lt;br /&gt;
dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE papaye.space&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous devons inclure ces clefs dans notre fichier de zone (dns.papaye.space) (la 14842 étant la ksk et l'autre la zsk):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$include /etc/bind/papaye.space.dnssec/Kpapaye.space.+005+14842.key&lt;br /&gt;
$include /etc/bind/papaye.space.dnssec/Kpapaye.space.+005+62520.key&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous signons la zone :&lt;br /&gt;
&amp;lt;pre&amp;gt; dnssec-signzone -o papaye.space-k Kpapaye.space.+005+14842 ../dns.papaye.space Kpapaye.space.+005+62520 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour finir, nous saisissons dans Gandi la clé publique de la KSK et de la ZSK en allant dans l'onglet &amp;quot;générer DNSSEC&amp;quot;. Nous vérifions la sécurisation grâce à la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt; dig DNSKEY papaye.space @localhost &amp;lt;/pre&amp;gt;&lt;br /&gt;
Nous remarquons bien la présence de DNSKEY qui nous certifie la sécurisation de notre DNS.&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
&lt;br /&gt;
Depuis cordouan, nous créons 3 disque disques virtuels avec ''lvcreate'' :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/papaye-raid1&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/papaye-raid2&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/papaye-raid3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous rajoutons ces disques à la configuration de notre machine virtuelle. Toujours depuis cordouan, dans /etc/xen/Papaye.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/papaye-raid1,xvdd1, w',&lt;br /&gt;
'phy:/dev/virtual/papaye-raid2,xvdd2, w',&lt;br /&gt;
'phy:/dev/virtual/papaye-raid3,xvdd3, w',&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depuis notre machine virtuelle cette fois, nous installons mdadm :&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install mdadm &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous créons le disque RAID5 md0 :&lt;br /&gt;
&amp;lt;pre&amp;gt; mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvdd2 /dev/xvdd3 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous installons le système de fichier ext4 dessus :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkfs -t ext4 /dev/md0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons le tout et montons le disque :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --detail --scan &amp;gt;&amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous effectuons un petit test afin de noter la reconstruction de notre disque. &lt;br /&gt;
Nous supprimons une des partitions et observons qu'il est bien manquant dans la configuration :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --set-faulty /dev/md0 /dev/xvdd2&lt;br /&gt;
mdadm --remove /dev/md0 /dev/xvdd2&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdd1[0] xvdd3[2]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous montons le disque à nouveau et pouvons noter la reconstruction du disque :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Deadpool:/mnt# ls&lt;br /&gt;
lost+found  test.txt&lt;br /&gt;
&lt;br /&gt;
Nous remettons la partition :&lt;br /&gt;
mdadm --add /dev/md0 /dev/xvdd2&lt;br /&gt;
&lt;br /&gt;
Et on observe la reconstruction grâce à cat /proc/mdstat.&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45953</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45953"/>
				<updated>2017-10-26T20:45:07Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Sécurisation via RAID5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Création ==&lt;br /&gt;
Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. &lt;br /&gt;
La création des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la VM créée, il est possible de la démarrer de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl create /etc/xen/IMA5-Papaye/cfg &amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite, nous lançons la console de cette manière :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl console IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, pour sortir de cette dernière, nous faisons : &amp;lt;pre&amp;gt; ctrl + alt gr + ] &amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, pour éteindre la machine virtuelle : &amp;lt;pre&amp;gt; xl shutdown IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Et pour détruire la VM : &amp;lt;pre&amp;gt; xl destroy IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande ''lvcreate''.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que pour le répertoire ''home'', la manipulation est un peu plus simple que pour le répertoire ''var''. Tout d'abord, nous faisons appel à ''lvcreate'' de la manière suivante, depuis cordouan :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-var&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Il est possible de visualiser notre home grâce à la commande ''lsblk'' qui affiche tous les périphériques bloc.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque ''home'', ''xvda3'' et le disque ''var'', ''xvda4''.&lt;br /&gt;
&lt;br /&gt;
Puis, nous transformons nos disque en partitions ext4 :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mkfs -t ext4 /dev/xvda4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HOME ===&lt;br /&gt;
Pour la partition ''home'', il suffit de modifier le fichier /etc/fstab de la VM et d'y ajouter la ligne suivante pour que la partition soit montée au démarrage :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda3 /home ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
Le &amp;quot;0&amp;quot; indique que nous sauvegardons jamais et le &amp;quot;2&amp;quot; est propre à la sécurité de la partition.&lt;br /&gt;
Ainsi, un simple &amp;lt;pre&amp;gt; mount -a &amp;lt;/pre&amp;gt; suffit à monter à la partition. (Il est possible de la vérifier grâce à la commande ''df'')&lt;br /&gt;
&lt;br /&gt;
=== VAR ===&lt;br /&gt;
Pour la partition ''var'', c'est un peu plus compliqué car il faut monter la partition dans un /mnt temporaire avant de la déplacer. Nous effectuons donc les instructions suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/xvda4 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, nous modifions le fichier /etc/fstab de la même manière que pour la partition ''home'' :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda4 /var ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
Dans un premier temps, nous devons changer l'adresse IP de notre machine virtuelle ainsi que son masque dans /etc/config. Notre adresse IP est 193.48.57.178. Et notre masque est 255.255.255.240. Puis, nous avons modifié le fichier /etc/xen/IMA5-Papaye. En effet, nous remplaçons l'id par IMA5sc (pour la première séance, nous utilisions ''insecure''). De plus, nous rajoutons la route par défaut, le gateway : 193.49.57.177 dans le fichier /etc/config.&lt;br /&gt;
&lt;br /&gt;
Il est nécessaire d'installer ssh sur notre machine virtuelle :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install ssh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De plus, il est important de modifier le fichier /etc/ssh/sshd_config en changeant la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin Prohibited &amp;lt;/pre&amp;gt;&lt;br /&gt;
par&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin yes &amp;lt;/pre&amp;gt;&lt;br /&gt;
Grâce à cela, nous pourrons nous connecter en root sur la machine en ssh.&lt;br /&gt;
&lt;br /&gt;
Nous redémarrons le service :&lt;br /&gt;
&amp;lt;pre&amp;gt; service ssh restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur DNS ==&lt;br /&gt;
Dans un premier temps, nous avons acheté notre nom de domaine sur Gandi en prenant soin que ce dernier autorise l'installation d'un DNSSEC. Nous avons donc pris le domaine papaye.space.&lt;br /&gt;
&lt;br /&gt;
Puis, nous avons installé bind9 et apache2 : &amp;lt;pre&amp;gt;apt-get install bind9 apache2 &amp;lt;/pre&amp;gt;. Nous avons d'ailleurs ajouté au fichier /etc/default/bind9 la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; OPTIONS=&amp;quot;-4 -u bind&amp;quot; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous créons le dossier pour la page web qui sera vide pour le moment :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkdir /var/www/www.papaye.space &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous créons la table de DNS ou le fichier de zone : dns.papaye.space, en voici le contenu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
;&lt;br /&gt;
; BIND data file for local loopback interface&lt;br /&gt;
;&lt;br /&gt;
$TTL    604800&lt;br /&gt;
@       IN      SOA     dns.papaye.space. root.papaye.space (&lt;br /&gt;
                              2         ; Serial&lt;br /&gt;
                         604800         ; Refresh&lt;br /&gt;
                          86400         ; Retry&lt;br /&gt;
                        2419200         ; Expire&lt;br /&gt;
                         604800 )       ; Negative Cache TTL&lt;br /&gt;
;&lt;br /&gt;
        IN      NS      dns.papaye.space.&lt;br /&gt;
ns      IN      A       193.48.57.178&lt;br /&gt;
www     IN      A       193.48.57.178 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous configurons le fichier named.conf.local :&lt;br /&gt;
&amp;lt;pre&amp;gt; zone &amp;quot;papaye.space&amp;quot; {&lt;br /&gt;
        type master;&lt;br /&gt;
        file &amp;quot;/etc/bind/dns.papaye.space&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi que le fichier named.conf.options (217.70.177.40/32 étant l'adresse IP de Gandi, notre DNS esclave :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
options {&lt;br /&gt;
        directory &amp;quot;var/cache/bind&amp;quot;&lt;br /&gt;
        dnssec-validation auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        allow-transfer {&amp;quot;allowed_to_transfer&amp;quot;;}&lt;br /&gt;
        listen-on-v6 {any;}&lt;br /&gt;
}&lt;br /&gt;
acl &amp;quot;allowed_to_transfer&amp;quot; {&lt;br /&gt;
        217.70.177.40/32;&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous redémarrons notre service bind9 :&lt;br /&gt;
&amp;lt;pre&amp;gt; service bind9 restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les configurations depuis notre machine virtuelle sont terminées mais nous avons dû également effectuer un réglage depuis Gandi afin de renseigner nos DNS.&lt;br /&gt;
Pour les &amp;quot;glues records&amp;quot;, &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
'Nom du serveur' : dns.papaye.space&lt;br /&gt;
'IP' : 193.48.57.178 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour les DNS,&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
'DNS1' : dns.papaye.space&lt;br /&gt;
'DNS2' : ns6.gandi.net &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
L'objectif de cette partie est d'obtenir un certificat pour notre site web. Le certificat SSL généré par Gandi s'obtient de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; openssl req -nodes -newkey rsa:2048 -sha1 -keyout papaye.space.key -out papaye.space.csr &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin de valider notre certificat par Gandi, nous avons dû ajouter une ligne de code à notre fiche de zone (dns.papaye.space), qui était donné par le site.&lt;br /&gt;
&lt;br /&gt;
Une fois le certificat validé par Gandi, un petit cadenas noir est visualisable à côté de notre nom de domaine. De plus, nous pouvons recopier les fichiers de certification générés par Gandi dans le dossier SSL. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp certificat.crt /etc/ssl/certs/papaye.space.crt&lt;br /&gt;
cp serveur.key /etc/ssl/private/papaye.space.key&lt;br /&gt;
cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous faisons un hashage de notre structure afin que notre certificat soit prend en compte :&lt;br /&gt;
&amp;lt;pre&amp;gt; c_rehash /etc/ssl/certs &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis, nous créons le fichier 000-papaye.space-ssl.conf dans /etc/apache2/sites-available/ pour associer apache2 à notre nom de serveur :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#NameVirtualHost *:443&lt;br /&gt;
        &amp;lt;VirtualHost 193.48.57.178:443&amp;gt;&lt;br /&gt;
                ServerName www.papaye.space&lt;br /&gt;
                ServerAlias papaye.space&lt;br /&gt;
                DocumentRoot /var/www/www.papaye.space/&lt;br /&gt;
                CustomLog /var/log/apache2/secure_acces.log combined&lt;br /&gt;
&lt;br /&gt;
                SSLEngine on&lt;br /&gt;
                SSLCertificateFile /etc/ssl/certs/papaye.space.crt&lt;br /&gt;
                SSLCertificateKeyFile /etc/ssl/private/papaye.space.key&lt;br /&gt;
                SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
                SSLVerifyClient None&lt;br /&gt;
        &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
        &amp;lt;Directory /var/www/www.papaye.space&amp;gt;&lt;br /&gt;
                Require all granted&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
ServerName &amp;quot;papaye.space&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous modifions le fichier ports.conf du serveur Apache afin qu'il écoute le port 443 (SSL):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Listen 80 443&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
        Listen 443&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous activons le module SSL d'Apache et activons notre site avec notre certificat :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
a2enmod ssl &lt;br /&gt;
a2ensite 000-piscinemorte.net-ssl.conf&lt;br /&gt;
service apache2 reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
Dans un premier temps, nous devons activer le DNSSEC en ajoutant l'option dans le fichier /etc/bind/named.conf.options :&lt;br /&gt;
&amp;lt;pre&amp;gt; dnssec-enable yes; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous créons le répertoire dans lequel nous allons créer nos clef :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir papaye.space.dnssec&lt;br /&gt;
cd papaye.space.dnssec&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous générons nos clefs KSK et ZSK de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE papaye.space&lt;br /&gt;
dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE papaye.space&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous devons inclure ces clefs dans notre fichier de zone (dns.papaye.space) (la 14842 étant la ksk et l'autre la zsk):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$include /etc/bind/papaye.space.dnssec/Kpapaye.space.+005+14842.key&lt;br /&gt;
$include /etc/bind/papaye.space.dnssec/Kpapaye.space.+005+62520.key&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous signons la zone :&lt;br /&gt;
&amp;lt;pre&amp;gt; dnssec-signzone -o papaye.space-k Kpapaye.space.+005+14842 ../dns.papaye.space Kpapaye.space.+005+62520 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour finir, nous saisissons dans Gandi la clé publique de la KSK et de la ZSK en allant dans l'onglet &amp;quot;générer DNSSEC&amp;quot;. Nous vérifions la sécurisation grâce à la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt; dig DNSKEY papaye.space @localhost &amp;lt;/pre&amp;gt;&lt;br /&gt;
Nous remarquons bien la présence de DNSKEY qui nous certifie la sécurisation de notre DNS.&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
&lt;br /&gt;
Depuis cordouan, nous créons 3 disque disques virtuels avec ''lvcreate'' :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/papaye-raid1&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/papaye-raid2&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/papaye-raid3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous rajoutons ces disques à la configuration de notre machine virtuelle. Toujours depuis cordouan, dans /etc/xen/Papaye.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/papaye-raid1,xvdd1, w',&lt;br /&gt;
'phy:/dev/virtual/papaye-raid2,xvdd2, w',&lt;br /&gt;
'phy:/dev/virtual/papaye-raid3,xvdd3, w',&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depuis notre machine virtuelle cette fois, nous installons mdadm :&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install mdadm &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous créons le disque RAID5 md0 :&lt;br /&gt;
&amp;lt;pre&amp;gt; mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvdd2 /dev/xvdd3 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous installons le système de fichier ext4 dessus :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkfs -t ext4 /dev/md0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons le tout et montons le disque :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --detail --scan &amp;gt;&amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous effectuons un petit test afin de noter la reconstruction de notre disque. &lt;br /&gt;
Nous supprimons une des partitions et observons qu'il est bien manquant dans la configuration :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --set-faulty /dev/md0 /dev/xvdd2&lt;br /&gt;
mdadm --remove /dev/md0 /dev/xvdd2&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdd1[0] xvdd3[2]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous montons le disque à nouveau et pouvons noter la reconstruction du disque :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Deadpool:/mnt# ls&lt;br /&gt;
lost+found  test.txt&lt;br /&gt;
&lt;br /&gt;
Nous remettons la partition :&lt;br /&gt;
mdadm --add /dev/md0 /dev/xvdd2&lt;br /&gt;
&lt;br /&gt;
Et on observe la reconstruction grâce à cat /proc/mdstat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Cryptage ===&lt;br /&gt;
//Coming soon&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45952</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45952"/>
				<updated>2017-10-26T20:44:20Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Sécurisation via RAID5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Création ==&lt;br /&gt;
Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. &lt;br /&gt;
La création des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la VM créée, il est possible de la démarrer de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl create /etc/xen/IMA5-Papaye/cfg &amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite, nous lançons la console de cette manière :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl console IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, pour sortir de cette dernière, nous faisons : &amp;lt;pre&amp;gt; ctrl + alt gr + ] &amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, pour éteindre la machine virtuelle : &amp;lt;pre&amp;gt; xl shutdown IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Et pour détruire la VM : &amp;lt;pre&amp;gt; xl destroy IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande ''lvcreate''.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que pour le répertoire ''home'', la manipulation est un peu plus simple que pour le répertoire ''var''. Tout d'abord, nous faisons appel à ''lvcreate'' de la manière suivante, depuis cordouan :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-var&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Il est possible de visualiser notre home grâce à la commande ''lsblk'' qui affiche tous les périphériques bloc.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque ''home'', ''xvda3'' et le disque ''var'', ''xvda4''.&lt;br /&gt;
&lt;br /&gt;
Puis, nous transformons nos disque en partitions ext4 :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mkfs -t ext4 /dev/xvda4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HOME ===&lt;br /&gt;
Pour la partition ''home'', il suffit de modifier le fichier /etc/fstab de la VM et d'y ajouter la ligne suivante pour que la partition soit montée au démarrage :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda3 /home ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
Le &amp;quot;0&amp;quot; indique que nous sauvegardons jamais et le &amp;quot;2&amp;quot; est propre à la sécurité de la partition.&lt;br /&gt;
Ainsi, un simple &amp;lt;pre&amp;gt; mount -a &amp;lt;/pre&amp;gt; suffit à monter à la partition. (Il est possible de la vérifier grâce à la commande ''df'')&lt;br /&gt;
&lt;br /&gt;
=== VAR ===&lt;br /&gt;
Pour la partition ''var'', c'est un peu plus compliqué car il faut monter la partition dans un /mnt temporaire avant de la déplacer. Nous effectuons donc les instructions suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/xvda4 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, nous modifions le fichier /etc/fstab de la même manière que pour la partition ''home'' :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda4 /var ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
Dans un premier temps, nous devons changer l'adresse IP de notre machine virtuelle ainsi que son masque dans /etc/config. Notre adresse IP est 193.48.57.178. Et notre masque est 255.255.255.240. Puis, nous avons modifié le fichier /etc/xen/IMA5-Papaye. En effet, nous remplaçons l'id par IMA5sc (pour la première séance, nous utilisions ''insecure''). De plus, nous rajoutons la route par défaut, le gateway : 193.49.57.177 dans le fichier /etc/config.&lt;br /&gt;
&lt;br /&gt;
Il est nécessaire d'installer ssh sur notre machine virtuelle :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install ssh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De plus, il est important de modifier le fichier /etc/ssh/sshd_config en changeant la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin Prohibited &amp;lt;/pre&amp;gt;&lt;br /&gt;
par&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin yes &amp;lt;/pre&amp;gt;&lt;br /&gt;
Grâce à cela, nous pourrons nous connecter en root sur la machine en ssh.&lt;br /&gt;
&lt;br /&gt;
Nous redémarrons le service :&lt;br /&gt;
&amp;lt;pre&amp;gt; service ssh restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur DNS ==&lt;br /&gt;
Dans un premier temps, nous avons acheté notre nom de domaine sur Gandi en prenant soin que ce dernier autorise l'installation d'un DNSSEC. Nous avons donc pris le domaine papaye.space.&lt;br /&gt;
&lt;br /&gt;
Puis, nous avons installé bind9 et apache2 : &amp;lt;pre&amp;gt;apt-get install bind9 apache2 &amp;lt;/pre&amp;gt;. Nous avons d'ailleurs ajouté au fichier /etc/default/bind9 la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; OPTIONS=&amp;quot;-4 -u bind&amp;quot; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous créons le dossier pour la page web qui sera vide pour le moment :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkdir /var/www/www.papaye.space &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous créons la table de DNS ou le fichier de zone : dns.papaye.space, en voici le contenu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
;&lt;br /&gt;
; BIND data file for local loopback interface&lt;br /&gt;
;&lt;br /&gt;
$TTL    604800&lt;br /&gt;
@       IN      SOA     dns.papaye.space. root.papaye.space (&lt;br /&gt;
                              2         ; Serial&lt;br /&gt;
                         604800         ; Refresh&lt;br /&gt;
                          86400         ; Retry&lt;br /&gt;
                        2419200         ; Expire&lt;br /&gt;
                         604800 )       ; Negative Cache TTL&lt;br /&gt;
;&lt;br /&gt;
        IN      NS      dns.papaye.space.&lt;br /&gt;
ns      IN      A       193.48.57.178&lt;br /&gt;
www     IN      A       193.48.57.178 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous configurons le fichier named.conf.local :&lt;br /&gt;
&amp;lt;pre&amp;gt; zone &amp;quot;papaye.space&amp;quot; {&lt;br /&gt;
        type master;&lt;br /&gt;
        file &amp;quot;/etc/bind/dns.papaye.space&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi que le fichier named.conf.options (217.70.177.40/32 étant l'adresse IP de Gandi, notre DNS esclave :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
options {&lt;br /&gt;
        directory &amp;quot;var/cache/bind&amp;quot;&lt;br /&gt;
        dnssec-validation auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        allow-transfer {&amp;quot;allowed_to_transfer&amp;quot;;}&lt;br /&gt;
        listen-on-v6 {any;}&lt;br /&gt;
}&lt;br /&gt;
acl &amp;quot;allowed_to_transfer&amp;quot; {&lt;br /&gt;
        217.70.177.40/32;&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous redémarrons notre service bind9 :&lt;br /&gt;
&amp;lt;pre&amp;gt; service bind9 restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les configurations depuis notre machine virtuelle sont terminées mais nous avons dû également effectuer un réglage depuis Gandi afin de renseigner nos DNS.&lt;br /&gt;
Pour les &amp;quot;glues records&amp;quot;, &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
'Nom du serveur' : dns.papaye.space&lt;br /&gt;
'IP' : 193.48.57.178 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour les DNS,&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
'DNS1' : dns.papaye.space&lt;br /&gt;
'DNS2' : ns6.gandi.net &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
L'objectif de cette partie est d'obtenir un certificat pour notre site web. Le certificat SSL généré par Gandi s'obtient de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; openssl req -nodes -newkey rsa:2048 -sha1 -keyout papaye.space.key -out papaye.space.csr &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin de valider notre certificat par Gandi, nous avons dû ajouter une ligne de code à notre fiche de zone (dns.papaye.space), qui était donné par le site.&lt;br /&gt;
&lt;br /&gt;
Une fois le certificat validé par Gandi, un petit cadenas noir est visualisable à côté de notre nom de domaine. De plus, nous pouvons recopier les fichiers de certification générés par Gandi dans le dossier SSL. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp certificat.crt /etc/ssl/certs/papaye.space.crt&lt;br /&gt;
cp serveur.key /etc/ssl/private/papaye.space.key&lt;br /&gt;
cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous faisons un hashage de notre structure afin que notre certificat soit prend en compte :&lt;br /&gt;
&amp;lt;pre&amp;gt; c_rehash /etc/ssl/certs &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis, nous créons le fichier 000-papaye.space-ssl.conf dans /etc/apache2/sites-available/ pour associer apache2 à notre nom de serveur :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#NameVirtualHost *:443&lt;br /&gt;
        &amp;lt;VirtualHost 193.48.57.178:443&amp;gt;&lt;br /&gt;
                ServerName www.papaye.space&lt;br /&gt;
                ServerAlias papaye.space&lt;br /&gt;
                DocumentRoot /var/www/www.papaye.space/&lt;br /&gt;
                CustomLog /var/log/apache2/secure_acces.log combined&lt;br /&gt;
&lt;br /&gt;
                SSLEngine on&lt;br /&gt;
                SSLCertificateFile /etc/ssl/certs/papaye.space.crt&lt;br /&gt;
                SSLCertificateKeyFile /etc/ssl/private/papaye.space.key&lt;br /&gt;
                SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
                SSLVerifyClient None&lt;br /&gt;
        &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
        &amp;lt;Directory /var/www/www.papaye.space&amp;gt;&lt;br /&gt;
                Require all granted&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
ServerName &amp;quot;papaye.space&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous modifions le fichier ports.conf du serveur Apache afin qu'il écoute le port 443 (SSL):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Listen 80 443&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
        Listen 443&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous activons le module SSL d'Apache et activons notre site avec notre certificat :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
a2enmod ssl &lt;br /&gt;
a2ensite 000-piscinemorte.net-ssl.conf&lt;br /&gt;
service apache2 reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
Dans un premier temps, nous devons activer le DNSSEC en ajoutant l'option dans le fichier /etc/bind/named.conf.options :&lt;br /&gt;
&amp;lt;pre&amp;gt; dnssec-enable yes; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous créons le répertoire dans lequel nous allons créer nos clef :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir papaye.space.dnssec&lt;br /&gt;
cd papaye.space.dnssec&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous générons nos clefs KSK et ZSK de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE papaye.space&lt;br /&gt;
dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE papaye.space&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous devons inclure ces clefs dans notre fichier de zone (dns.papaye.space) (la 14842 étant la ksk et l'autre la zsk):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$include /etc/bind/papaye.space.dnssec/Kpapaye.space.+005+14842.key&lt;br /&gt;
$include /etc/bind/papaye.space.dnssec/Kpapaye.space.+005+62520.key&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous signons la zone :&lt;br /&gt;
&amp;lt;pre&amp;gt; dnssec-signzone -o papaye.space-k Kpapaye.space.+005+14842 ../dns.papaye.space Kpapaye.space.+005+62520 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour finir, nous saisissons dans Gandi la clé publique de la KSK et de la ZSK en allant dans l'onglet &amp;quot;générer DNSSEC&amp;quot;. Nous vérifions la sécurisation grâce à la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt; dig DNSKEY papaye.space @localhost &amp;lt;/pre&amp;gt;&lt;br /&gt;
Nous remarquons bien la présence de DNSKEY qui nous certifie la sécurisation de notre DNS.&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
&lt;br /&gt;
Depuis cordouan, nous créons 3 disque disques virtuels avec ''lvcreate'' :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/papaye-raid1&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/papaye-raid2&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/papaye-raid3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous rajoutons ces disques à la configuration de notre machine virtuelle. Toujours depuis cordouan, dans /etc/xen/Papaye.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/papaye-raid1,xvdd1, w',&lt;br /&gt;
'phy:/dev/virtual/papaye-raid2,xvdd2, w',&lt;br /&gt;
'phy:/dev/virtual/papaye-raid3,xvdd3, w',&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depuis notre machine virtuelle cette fois, nous installons mdadm :&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install mdadm &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous créons le disque RAID5 md0 :&lt;br /&gt;
&amp;lt;pre&amp;gt; mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvdd2 /dev/xvdd3 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous installons le système de fichier ext4 dessus :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkfs -t ext4 /dev/md0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons le tout et montons le disque :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --detail --scan &amp;gt;&amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous effectuons un petit test afin de noter la reconstruction de notre disque. &lt;br /&gt;
Nous supprimons une des partitions et observons qu'il est bien manquant dans la configuration :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --set-faulty /dev/md0 /dev/xvdd2&lt;br /&gt;
mdadm --remove /dev/md0 /dev/xvdd2&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdd1[0] xvdd3[2]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous montons le disque à nouveau et pouvons noter la reconstruction du disque :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Deadpool:/mnt# ls&lt;br /&gt;
lost+found  test.txt&lt;br /&gt;
&lt;br /&gt;
Nous remettons la partition :&lt;br /&gt;
mdadm --add /dev/md0 /dev/xvdd2&lt;br /&gt;
&lt;br /&gt;
Et on observe la reconstruction grâce à cat /proc/mdstat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Cryptage ===&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45951</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45951"/>
				<updated>2017-10-26T20:40:45Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Sécurisation et cryptage des données */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Création ==&lt;br /&gt;
Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. &lt;br /&gt;
La création des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la VM créée, il est possible de la démarrer de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl create /etc/xen/IMA5-Papaye/cfg &amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite, nous lançons la console de cette manière :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl console IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, pour sortir de cette dernière, nous faisons : &amp;lt;pre&amp;gt; ctrl + alt gr + ] &amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, pour éteindre la machine virtuelle : &amp;lt;pre&amp;gt; xl shutdown IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Et pour détruire la VM : &amp;lt;pre&amp;gt; xl destroy IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande ''lvcreate''.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que pour le répertoire ''home'', la manipulation est un peu plus simple que pour le répertoire ''var''. Tout d'abord, nous faisons appel à ''lvcreate'' de la manière suivante, depuis cordouan :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-var&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Il est possible de visualiser notre home grâce à la commande ''lsblk'' qui affiche tous les périphériques bloc.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque ''home'', ''xvda3'' et le disque ''var'', ''xvda4''.&lt;br /&gt;
&lt;br /&gt;
Puis, nous transformons nos disque en partitions ext4 :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mkfs -t ext4 /dev/xvda4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HOME ===&lt;br /&gt;
Pour la partition ''home'', il suffit de modifier le fichier /etc/fstab de la VM et d'y ajouter la ligne suivante pour que la partition soit montée au démarrage :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda3 /home ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
Le &amp;quot;0&amp;quot; indique que nous sauvegardons jamais et le &amp;quot;2&amp;quot; est propre à la sécurité de la partition.&lt;br /&gt;
Ainsi, un simple &amp;lt;pre&amp;gt; mount -a &amp;lt;/pre&amp;gt; suffit à monter à la partition. (Il est possible de la vérifier grâce à la commande ''df'')&lt;br /&gt;
&lt;br /&gt;
=== VAR ===&lt;br /&gt;
Pour la partition ''var'', c'est un peu plus compliqué car il faut monter la partition dans un /mnt temporaire avant de la déplacer. Nous effectuons donc les instructions suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/xvda4 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, nous modifions le fichier /etc/fstab de la même manière que pour la partition ''home'' :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda4 /var ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
Dans un premier temps, nous devons changer l'adresse IP de notre machine virtuelle ainsi que son masque dans /etc/config. Notre adresse IP est 193.48.57.178. Et notre masque est 255.255.255.240. Puis, nous avons modifié le fichier /etc/xen/IMA5-Papaye. En effet, nous remplaçons l'id par IMA5sc (pour la première séance, nous utilisions ''insecure''). De plus, nous rajoutons la route par défaut, le gateway : 193.49.57.177 dans le fichier /etc/config.&lt;br /&gt;
&lt;br /&gt;
Il est nécessaire d'installer ssh sur notre machine virtuelle :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install ssh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De plus, il est important de modifier le fichier /etc/ssh/sshd_config en changeant la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin Prohibited &amp;lt;/pre&amp;gt;&lt;br /&gt;
par&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin yes &amp;lt;/pre&amp;gt;&lt;br /&gt;
Grâce à cela, nous pourrons nous connecter en root sur la machine en ssh.&lt;br /&gt;
&lt;br /&gt;
Nous redémarrons le service :&lt;br /&gt;
&amp;lt;pre&amp;gt; service ssh restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur DNS ==&lt;br /&gt;
Dans un premier temps, nous avons acheté notre nom de domaine sur Gandi en prenant soin que ce dernier autorise l'installation d'un DNSSEC. Nous avons donc pris le domaine papaye.space.&lt;br /&gt;
&lt;br /&gt;
Puis, nous avons installé bind9 et apache2 : &amp;lt;pre&amp;gt;apt-get install bind9 apache2 &amp;lt;/pre&amp;gt;. Nous avons d'ailleurs ajouté au fichier /etc/default/bind9 la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; OPTIONS=&amp;quot;-4 -u bind&amp;quot; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous créons le dossier pour la page web qui sera vide pour le moment :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkdir /var/www/www.papaye.space &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous créons la table de DNS ou le fichier de zone : dns.papaye.space, en voici le contenu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
;&lt;br /&gt;
; BIND data file for local loopback interface&lt;br /&gt;
;&lt;br /&gt;
$TTL    604800&lt;br /&gt;
@       IN      SOA     dns.papaye.space. root.papaye.space (&lt;br /&gt;
                              2         ; Serial&lt;br /&gt;
                         604800         ; Refresh&lt;br /&gt;
                          86400         ; Retry&lt;br /&gt;
                        2419200         ; Expire&lt;br /&gt;
                         604800 )       ; Negative Cache TTL&lt;br /&gt;
;&lt;br /&gt;
        IN      NS      dns.papaye.space.&lt;br /&gt;
ns      IN      A       193.48.57.178&lt;br /&gt;
www     IN      A       193.48.57.178 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous configurons le fichier named.conf.local :&lt;br /&gt;
&amp;lt;pre&amp;gt; zone &amp;quot;papaye.space&amp;quot; {&lt;br /&gt;
        type master;&lt;br /&gt;
        file &amp;quot;/etc/bind/dns.papaye.space&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi que le fichier named.conf.options (217.70.177.40/32 étant l'adresse IP de Gandi, notre DNS esclave :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
options {&lt;br /&gt;
        directory &amp;quot;var/cache/bind&amp;quot;&lt;br /&gt;
        dnssec-validation auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        allow-transfer {&amp;quot;allowed_to_transfer&amp;quot;;}&lt;br /&gt;
        listen-on-v6 {any;}&lt;br /&gt;
}&lt;br /&gt;
acl &amp;quot;allowed_to_transfer&amp;quot; {&lt;br /&gt;
        217.70.177.40/32;&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous redémarrons notre service bind9 :&lt;br /&gt;
&amp;lt;pre&amp;gt; service bind9 restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les configurations depuis notre machine virtuelle sont terminées mais nous avons dû également effectuer un réglage depuis Gandi afin de renseigner nos DNS.&lt;br /&gt;
Pour les &amp;quot;glues records&amp;quot;, &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
'Nom du serveur' : dns.papaye.space&lt;br /&gt;
'IP' : 193.48.57.178 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour les DNS,&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
'DNS1' : dns.papaye.space&lt;br /&gt;
'DNS2' : ns6.gandi.net &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
L'objectif de cette partie est d'obtenir un certificat pour notre site web. Le certificat SSL généré par Gandi s'obtient de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; openssl req -nodes -newkey rsa:2048 -sha1 -keyout papaye.space.key -out papaye.space.csr &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin de valider notre certificat par Gandi, nous avons dû ajouter une ligne de code à notre fiche de zone (dns.papaye.space), qui était donné par le site.&lt;br /&gt;
&lt;br /&gt;
Une fois le certificat validé par Gandi, un petit cadenas noir est visualisable à côté de notre nom de domaine. De plus, nous pouvons recopier les fichiers de certification générés par Gandi dans le dossier SSL. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp certificat.crt /etc/ssl/certs/papaye.space.crt&lt;br /&gt;
cp serveur.key /etc/ssl/private/papaye.space.key&lt;br /&gt;
cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous faisons un hashage de notre structure afin que notre certificat soit prend en compte :&lt;br /&gt;
&amp;lt;pre&amp;gt; c_rehash /etc/ssl/certs &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis, nous créons le fichier 000-papaye.space-ssl.conf dans /etc/apache2/sites-available/ pour associer apache2 à notre nom de serveur :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#NameVirtualHost *:443&lt;br /&gt;
        &amp;lt;VirtualHost 193.48.57.178:443&amp;gt;&lt;br /&gt;
                ServerName www.papaye.space&lt;br /&gt;
                ServerAlias papaye.space&lt;br /&gt;
                DocumentRoot /var/www/www.papaye.space/&lt;br /&gt;
                CustomLog /var/log/apache2/secure_acces.log combined&lt;br /&gt;
&lt;br /&gt;
                SSLEngine on&lt;br /&gt;
                SSLCertificateFile /etc/ssl/certs/papaye.space.crt&lt;br /&gt;
                SSLCertificateKeyFile /etc/ssl/private/papaye.space.key&lt;br /&gt;
                SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
                SSLVerifyClient None&lt;br /&gt;
        &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
        &amp;lt;Directory /var/www/www.papaye.space&amp;gt;&lt;br /&gt;
                Require all granted&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
ServerName &amp;quot;papaye.space&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous modifions le fichier ports.conf du serveur Apache afin qu'il écoute le port 443 (SSL):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Listen 80 443&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
        Listen 443&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous activons le module SSL d'Apache et activons notre site avec notre certificat :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
a2enmod ssl &lt;br /&gt;
a2ensite 000-piscinemorte.net-ssl.conf&lt;br /&gt;
service apache2 reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
Dans un premier temps, nous devons activer le DNSSEC en ajoutant l'option dans le fichier /etc/bind/named.conf.options :&lt;br /&gt;
&amp;lt;pre&amp;gt; dnssec-enable yes; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous créons le répertoire dans lequel nous allons créer nos clef :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir papaye.space.dnssec&lt;br /&gt;
cd papaye.space.dnssec&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous générons nos clefs KSK et ZSK de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE papaye.space&lt;br /&gt;
dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE papaye.space&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous devons inclure ces clefs dans notre fichier de zone (dns.papaye.space) (la 14842 étant la ksk et l'autre la zsk):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$include /etc/bind/papaye.space.dnssec/Kpapaye.space.+005+14842.key&lt;br /&gt;
$include /etc/bind/papaye.space.dnssec/Kpapaye.space.+005+62520.key&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous signons la zone :&lt;br /&gt;
&amp;lt;pre&amp;gt; dnssec-signzone -o papaye.space-k Kpapaye.space.+005+14842 ../dns.papaye.space Kpapaye.space.+005+62520 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour finir, nous saisissons dans Gandi la clé publique de la KSK et de la ZSK en allant dans l'onglet &amp;quot;générer DNSSEC&amp;quot;. Nous vérifions la sécurisation grâce à la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt; dig DNSKEY papaye.space @localhost &amp;lt;/pre&amp;gt;&lt;br /&gt;
Nous remarquons bien la présence de DNSKEY qui nous certifie la sécurisation de notre DNS.&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
&lt;br /&gt;
Depuis cordouan, nous créons 3 disque disques virtuels avec ''lvcreate'' :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/papaye-raid1&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/papaye-raid2&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/papaye-raid3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous rajoutons ces disques à la configuration de notre machine virtuelle. Toujours depuis cordouan, dans /etc/xen/Papaye.cfg, nous ajoutons :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/papaye-raid1,xvdd1, w',&lt;br /&gt;
'phy:/dev/virtual/papaye-raid2,xvdd2, w',&lt;br /&gt;
'phy:/dev/virtual/papaye-raid3,xvdd3, w',&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depuis notre machine virtuelle cette fois, nous installons mdadm :&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get install mdadm &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous créons le disque RAID5 md0 :&lt;br /&gt;
&amp;lt;pre&amp;gt; mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvdd2 /dev/xvdd3 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous installons le système de fichier ext4 dessus :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkfs -t ext4 /dev/md0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons le tout et montons le disque :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --detail --scan &amp;gt;&amp;gt; /etc/mdadm/mdadm.conf&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin nous effectuons un petit test afin de noter la reconstruction de notre disque. &lt;br /&gt;
Nous supprimons une des partitions et observons qu'il est bien manquant dans la configuration :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
mdadm --set-faulty /dev/md0 /dev/xvdd2&lt;br /&gt;
mdadm --remove /dev/md0 /dev/xvdd2&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdd1[0] xvdd3[2]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous montons le disque à nouveau et pouvons noter la reconstruction du disque :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Deadpool:/mnt# ls&lt;br /&gt;
lost+found  test.txt&lt;br /&gt;
&lt;br /&gt;
Nous remettons la partition :&lt;br /&gt;
mdadm --add /dev/md0 /dev/xvdd2&lt;br /&gt;
&lt;br /&gt;
Et on observe la reconstruction grâce à cat /proc/mdstat.&lt;br /&gt;
&lt;br /&gt;
=== Cryptage ===&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45950</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45950"/>
				<updated>2017-10-26T20:31:18Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Sécurisation du DNS via un DNSSEC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Création ==&lt;br /&gt;
Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. &lt;br /&gt;
La création des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la VM créée, il est possible de la démarrer de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl create /etc/xen/IMA5-Papaye/cfg &amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite, nous lançons la console de cette manière :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl console IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, pour sortir de cette dernière, nous faisons : &amp;lt;pre&amp;gt; ctrl + alt gr + ] &amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, pour éteindre la machine virtuelle : &amp;lt;pre&amp;gt; xl shutdown IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Et pour détruire la VM : &amp;lt;pre&amp;gt; xl destroy IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande ''lvcreate''.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que pour le répertoire ''home'', la manipulation est un peu plus simple que pour le répertoire ''var''. Tout d'abord, nous faisons appel à ''lvcreate'' de la manière suivante, depuis cordouan :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-var&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Il est possible de visualiser notre home grâce à la commande ''lsblk'' qui affiche tous les périphériques bloc.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque ''home'', ''xvda3'' et le disque ''var'', ''xvda4''.&lt;br /&gt;
&lt;br /&gt;
Puis, nous transformons nos disque en partitions ext4 :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mkfs -t ext4 /dev/xvda4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HOME ===&lt;br /&gt;
Pour la partition ''home'', il suffit de modifier le fichier /etc/fstab de la VM et d'y ajouter la ligne suivante pour que la partition soit montée au démarrage :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda3 /home ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
Le &amp;quot;0&amp;quot; indique que nous sauvegardons jamais et le &amp;quot;2&amp;quot; est propre à la sécurité de la partition.&lt;br /&gt;
Ainsi, un simple &amp;lt;pre&amp;gt; mount -a &amp;lt;/pre&amp;gt; suffit à monter à la partition. (Il est possible de la vérifier grâce à la commande ''df'')&lt;br /&gt;
&lt;br /&gt;
=== VAR ===&lt;br /&gt;
Pour la partition ''var'', c'est un peu plus compliqué car il faut monter la partition dans un /mnt temporaire avant de la déplacer. Nous effectuons donc les instructions suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/xvda4 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, nous modifions le fichier /etc/fstab de la même manière que pour la partition ''home'' :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda4 /var ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
Dans un premier temps, nous devons changer l'adresse IP de notre machine virtuelle ainsi que son masque dans /etc/config. Notre adresse IP est 193.48.57.178. Et notre masque est 255.255.255.240. Puis, nous avons modifié le fichier /etc/xen/IMA5-Papaye. En effet, nous remplaçons l'id par IMA5sc (pour la première séance, nous utilisions ''insecure''). De plus, nous rajoutons la route par défaut, le gateway : 193.49.57.177 dans le fichier /etc/config.&lt;br /&gt;
&lt;br /&gt;
Il est nécessaire d'installer ssh sur notre machine virtuelle :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install ssh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De plus, il est important de modifier le fichier /etc/ssh/sshd_config en changeant la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin Prohibited &amp;lt;/pre&amp;gt;&lt;br /&gt;
par&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin yes &amp;lt;/pre&amp;gt;&lt;br /&gt;
Grâce à cela, nous pourrons nous connecter en root sur la machine en ssh.&lt;br /&gt;
&lt;br /&gt;
Nous redémarrons le service :&lt;br /&gt;
&amp;lt;pre&amp;gt; service ssh restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur DNS ==&lt;br /&gt;
Dans un premier temps, nous avons acheté notre nom de domaine sur Gandi en prenant soin que ce dernier autorise l'installation d'un DNSSEC. Nous avons donc pris le domaine papaye.space.&lt;br /&gt;
&lt;br /&gt;
Puis, nous avons installé bind9 et apache2 : &amp;lt;pre&amp;gt;apt-get install bind9 apache2 &amp;lt;/pre&amp;gt;. Nous avons d'ailleurs ajouté au fichier /etc/default/bind9 la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; OPTIONS=&amp;quot;-4 -u bind&amp;quot; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous créons le dossier pour la page web qui sera vide pour le moment :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkdir /var/www/www.papaye.space &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous créons la table de DNS ou le fichier de zone : dns.papaye.space, en voici le contenu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
;&lt;br /&gt;
; BIND data file for local loopback interface&lt;br /&gt;
;&lt;br /&gt;
$TTL    604800&lt;br /&gt;
@       IN      SOA     dns.papaye.space. root.papaye.space (&lt;br /&gt;
                              2         ; Serial&lt;br /&gt;
                         604800         ; Refresh&lt;br /&gt;
                          86400         ; Retry&lt;br /&gt;
                        2419200         ; Expire&lt;br /&gt;
                         604800 )       ; Negative Cache TTL&lt;br /&gt;
;&lt;br /&gt;
        IN      NS      dns.papaye.space.&lt;br /&gt;
ns      IN      A       193.48.57.178&lt;br /&gt;
www     IN      A       193.48.57.178 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous configurons le fichier named.conf.local :&lt;br /&gt;
&amp;lt;pre&amp;gt; zone &amp;quot;papaye.space&amp;quot; {&lt;br /&gt;
        type master;&lt;br /&gt;
        file &amp;quot;/etc/bind/dns.papaye.space&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi que le fichier named.conf.options (217.70.177.40/32 étant l'adresse IP de Gandi, notre DNS esclave :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
options {&lt;br /&gt;
        directory &amp;quot;var/cache/bind&amp;quot;&lt;br /&gt;
        dnssec-validation auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        allow-transfer {&amp;quot;allowed_to_transfer&amp;quot;;}&lt;br /&gt;
        listen-on-v6 {any;}&lt;br /&gt;
}&lt;br /&gt;
acl &amp;quot;allowed_to_transfer&amp;quot; {&lt;br /&gt;
        217.70.177.40/32;&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous redémarrons notre service bind9 :&lt;br /&gt;
&amp;lt;pre&amp;gt; service bind9 restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les configurations depuis notre machine virtuelle sont terminées mais nous avons dû également effectuer un réglage depuis Gandi afin de renseigner nos DNS.&lt;br /&gt;
Pour les &amp;quot;glues records&amp;quot;, &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
'Nom du serveur' : dns.papaye.space&lt;br /&gt;
'IP' : 193.48.57.178 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour les DNS,&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
'DNS1' : dns.papaye.space&lt;br /&gt;
'DNS2' : ns6.gandi.net &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
L'objectif de cette partie est d'obtenir un certificat pour notre site web. Le certificat SSL généré par Gandi s'obtient de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; openssl req -nodes -newkey rsa:2048 -sha1 -keyout papaye.space.key -out papaye.space.csr &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin de valider notre certificat par Gandi, nous avons dû ajouter une ligne de code à notre fiche de zone (dns.papaye.space), qui était donné par le site.&lt;br /&gt;
&lt;br /&gt;
Une fois le certificat validé par Gandi, un petit cadenas noir est visualisable à côté de notre nom de domaine. De plus, nous pouvons recopier les fichiers de certification générés par Gandi dans le dossier SSL. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp certificat.crt /etc/ssl/certs/papaye.space.crt&lt;br /&gt;
cp serveur.key /etc/ssl/private/papaye.space.key&lt;br /&gt;
cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous faisons un hashage de notre structure afin que notre certificat soit prend en compte :&lt;br /&gt;
&amp;lt;pre&amp;gt; c_rehash /etc/ssl/certs &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis, nous créons le fichier 000-papaye.space-ssl.conf dans /etc/apache2/sites-available/ pour associer apache2 à notre nom de serveur :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#NameVirtualHost *:443&lt;br /&gt;
        &amp;lt;VirtualHost 193.48.57.178:443&amp;gt;&lt;br /&gt;
                ServerName www.papaye.space&lt;br /&gt;
                ServerAlias papaye.space&lt;br /&gt;
                DocumentRoot /var/www/www.papaye.space/&lt;br /&gt;
                CustomLog /var/log/apache2/secure_acces.log combined&lt;br /&gt;
&lt;br /&gt;
                SSLEngine on&lt;br /&gt;
                SSLCertificateFile /etc/ssl/certs/papaye.space.crt&lt;br /&gt;
                SSLCertificateKeyFile /etc/ssl/private/papaye.space.key&lt;br /&gt;
                SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
                SSLVerifyClient None&lt;br /&gt;
        &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
        &amp;lt;Directory /var/www/www.papaye.space&amp;gt;&lt;br /&gt;
                Require all granted&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
ServerName &amp;quot;papaye.space&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous modifions le fichier ports.conf du serveur Apache afin qu'il écoute le port 443 (SSL):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Listen 80 443&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
        Listen 443&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous activons le module SSL d'Apache et activons notre site avec notre certificat :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
a2enmod ssl &lt;br /&gt;
a2ensite 000-piscinemorte.net-ssl.conf&lt;br /&gt;
service apache2 reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
Dans un premier temps, nous devons activer le DNSSEC en ajoutant l'option dans le fichier /etc/bind/named.conf.options :&lt;br /&gt;
&amp;lt;pre&amp;gt; dnssec-enable yes; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous créons le répertoire dans lequel nous allons créer nos clef :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir papaye.space.dnssec&lt;br /&gt;
cd papaye.space.dnssec&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous générons nos clefs KSK et ZSK de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE papaye.space&lt;br /&gt;
dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE papaye.space&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous devons inclure ces clefs dans notre fichier de zone (dns.papaye.space) (la 14842 étant la ksk et l'autre la zsk):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$include /etc/bind/papaye.space.dnssec/Kpapaye.space.+005+14842.key&lt;br /&gt;
$include /etc/bind/papaye.space.dnssec/Kpapaye.space.+005+62520.key&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous signons la zone :&lt;br /&gt;
&amp;lt;pre&amp;gt; dnssec-signzone -o papaye.space-k Kpapaye.space.+005+14842 ../dns.papaye.space Kpapaye.space.+005+62520 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour finir, nous saisissons dans Gandi la clé publique de la KSK et de la ZSK en allant dans l'onglet &amp;quot;générer DNSSEC&amp;quot;. Nous vérifions la sécurisation grâce à la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt; dig DNSKEY papaye.space @localhost &amp;lt;/pre&amp;gt;&lt;br /&gt;
Nous remarquons bien la présence de DNSKEY qui nous certifie la sécurisation de notre DNS.&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
=== Cryptage ===&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45949</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45949"/>
				<updated>2017-10-26T20:28:41Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Sécurisation du DNS via un DNSSEC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Création ==&lt;br /&gt;
Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. &lt;br /&gt;
La création des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la VM créée, il est possible de la démarrer de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl create /etc/xen/IMA5-Papaye/cfg &amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite, nous lançons la console de cette manière :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl console IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, pour sortir de cette dernière, nous faisons : &amp;lt;pre&amp;gt; ctrl + alt gr + ] &amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, pour éteindre la machine virtuelle : &amp;lt;pre&amp;gt; xl shutdown IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Et pour détruire la VM : &amp;lt;pre&amp;gt; xl destroy IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande ''lvcreate''.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que pour le répertoire ''home'', la manipulation est un peu plus simple que pour le répertoire ''var''. Tout d'abord, nous faisons appel à ''lvcreate'' de la manière suivante, depuis cordouan :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-var&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Il est possible de visualiser notre home grâce à la commande ''lsblk'' qui affiche tous les périphériques bloc.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque ''home'', ''xvda3'' et le disque ''var'', ''xvda4''.&lt;br /&gt;
&lt;br /&gt;
Puis, nous transformons nos disque en partitions ext4 :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mkfs -t ext4 /dev/xvda4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HOME ===&lt;br /&gt;
Pour la partition ''home'', il suffit de modifier le fichier /etc/fstab de la VM et d'y ajouter la ligne suivante pour que la partition soit montée au démarrage :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda3 /home ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
Le &amp;quot;0&amp;quot; indique que nous sauvegardons jamais et le &amp;quot;2&amp;quot; est propre à la sécurité de la partition.&lt;br /&gt;
Ainsi, un simple &amp;lt;pre&amp;gt; mount -a &amp;lt;/pre&amp;gt; suffit à monter à la partition. (Il est possible de la vérifier grâce à la commande ''df'')&lt;br /&gt;
&lt;br /&gt;
=== VAR ===&lt;br /&gt;
Pour la partition ''var'', c'est un peu plus compliqué car il faut monter la partition dans un /mnt temporaire avant de la déplacer. Nous effectuons donc les instructions suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/xvda4 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, nous modifions le fichier /etc/fstab de la même manière que pour la partition ''home'' :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda4 /var ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
Dans un premier temps, nous devons changer l'adresse IP de notre machine virtuelle ainsi que son masque dans /etc/config. Notre adresse IP est 193.48.57.178. Et notre masque est 255.255.255.240. Puis, nous avons modifié le fichier /etc/xen/IMA5-Papaye. En effet, nous remplaçons l'id par IMA5sc (pour la première séance, nous utilisions ''insecure''). De plus, nous rajoutons la route par défaut, le gateway : 193.49.57.177 dans le fichier /etc/config.&lt;br /&gt;
&lt;br /&gt;
Il est nécessaire d'installer ssh sur notre machine virtuelle :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install ssh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De plus, il est important de modifier le fichier /etc/ssh/sshd_config en changeant la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin Prohibited &amp;lt;/pre&amp;gt;&lt;br /&gt;
par&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin yes &amp;lt;/pre&amp;gt;&lt;br /&gt;
Grâce à cela, nous pourrons nous connecter en root sur la machine en ssh.&lt;br /&gt;
&lt;br /&gt;
Nous redémarrons le service :&lt;br /&gt;
&amp;lt;pre&amp;gt; service ssh restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur DNS ==&lt;br /&gt;
Dans un premier temps, nous avons acheté notre nom de domaine sur Gandi en prenant soin que ce dernier autorise l'installation d'un DNSSEC. Nous avons donc pris le domaine papaye.space.&lt;br /&gt;
&lt;br /&gt;
Puis, nous avons installé bind9 et apache2 : &amp;lt;pre&amp;gt;apt-get install bind9 apache2 &amp;lt;/pre&amp;gt;. Nous avons d'ailleurs ajouté au fichier /etc/default/bind9 la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; OPTIONS=&amp;quot;-4 -u bind&amp;quot; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous créons le dossier pour la page web qui sera vide pour le moment :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkdir /var/www/www.papaye.space &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous créons la table de DNS ou le fichier de zone : dns.papaye.space, en voici le contenu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
;&lt;br /&gt;
; BIND data file for local loopback interface&lt;br /&gt;
;&lt;br /&gt;
$TTL    604800&lt;br /&gt;
@       IN      SOA     dns.papaye.space. root.papaye.space (&lt;br /&gt;
                              2         ; Serial&lt;br /&gt;
                         604800         ; Refresh&lt;br /&gt;
                          86400         ; Retry&lt;br /&gt;
                        2419200         ; Expire&lt;br /&gt;
                         604800 )       ; Negative Cache TTL&lt;br /&gt;
;&lt;br /&gt;
        IN      NS      dns.papaye.space.&lt;br /&gt;
ns      IN      A       193.48.57.178&lt;br /&gt;
www     IN      A       193.48.57.178 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous configurons le fichier named.conf.local :&lt;br /&gt;
&amp;lt;pre&amp;gt; zone &amp;quot;papaye.space&amp;quot; {&lt;br /&gt;
        type master;&lt;br /&gt;
        file &amp;quot;/etc/bind/dns.papaye.space&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi que le fichier named.conf.options (217.70.177.40/32 étant l'adresse IP de Gandi, notre DNS esclave :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
options {&lt;br /&gt;
        directory &amp;quot;var/cache/bind&amp;quot;&lt;br /&gt;
        dnssec-validation auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        allow-transfer {&amp;quot;allowed_to_transfer&amp;quot;;}&lt;br /&gt;
        listen-on-v6 {any;}&lt;br /&gt;
}&lt;br /&gt;
acl &amp;quot;allowed_to_transfer&amp;quot; {&lt;br /&gt;
        217.70.177.40/32;&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous redémarrons notre service bind9 :&lt;br /&gt;
&amp;lt;pre&amp;gt; service bind9 restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les configurations depuis notre machine virtuelle sont terminées mais nous avons dû également effectuer un réglage depuis Gandi afin de renseigner nos DNS.&lt;br /&gt;
Pour les &amp;quot;glues records&amp;quot;, &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
'Nom du serveur' : dns.papaye.space&lt;br /&gt;
'IP' : 193.48.57.178 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour les DNS,&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
'DNS1' : dns.papaye.space&lt;br /&gt;
'DNS2' : ns6.gandi.net &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
L'objectif de cette partie est d'obtenir un certificat pour notre site web. Le certificat SSL généré par Gandi s'obtient de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; openssl req -nodes -newkey rsa:2048 -sha1 -keyout papaye.space.key -out papaye.space.csr &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin de valider notre certificat par Gandi, nous avons dû ajouter une ligne de code à notre fiche de zone (dns.papaye.space), qui était donné par le site.&lt;br /&gt;
&lt;br /&gt;
Une fois le certificat validé par Gandi, un petit cadenas noir est visualisable à côté de notre nom de domaine. De plus, nous pouvons recopier les fichiers de certification générés par Gandi dans le dossier SSL. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp certificat.crt /etc/ssl/certs/papaye.space.crt&lt;br /&gt;
cp serveur.key /etc/ssl/private/papaye.space.key&lt;br /&gt;
cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous faisons un hashage de notre structure afin que notre certificat soit prend en compte :&lt;br /&gt;
&amp;lt;pre&amp;gt; c_rehash /etc/ssl/certs &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis, nous créons le fichier 000-papaye.space-ssl.conf dans /etc/apache2/sites-available/ pour associer apache2 à notre nom de serveur :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#NameVirtualHost *:443&lt;br /&gt;
        &amp;lt;VirtualHost 193.48.57.178:443&amp;gt;&lt;br /&gt;
                ServerName www.papaye.space&lt;br /&gt;
                ServerAlias papaye.space&lt;br /&gt;
                DocumentRoot /var/www/www.papaye.space/&lt;br /&gt;
                CustomLog /var/log/apache2/secure_acces.log combined&lt;br /&gt;
&lt;br /&gt;
                SSLEngine on&lt;br /&gt;
                SSLCertificateFile /etc/ssl/certs/papaye.space.crt&lt;br /&gt;
                SSLCertificateKeyFile /etc/ssl/private/papaye.space.key&lt;br /&gt;
                SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
                SSLVerifyClient None&lt;br /&gt;
        &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
        &amp;lt;Directory /var/www/www.papaye.space&amp;gt;&lt;br /&gt;
                Require all granted&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
ServerName &amp;quot;papaye.space&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous modifions le fichier ports.conf du serveur Apache afin qu'il écoute le port 443 (SSL):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Listen 80 443&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
        Listen 443&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous activons le module SSL d'Apache et activons notre site avec notre certificat :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
a2enmod ssl &lt;br /&gt;
a2ensite 000-piscinemorte.net-ssl.conf&lt;br /&gt;
service apache2 reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
Dans un premier temps, nous devons activer le DNSSEC en ajoutant l'option dans le fichier /etc/bind/named.conf.options :&lt;br /&gt;
&amp;lt;pre&amp;gt; dnssec-enable yes; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous créons le répertoire dans lequel nous allons créer nos clef :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir papaye.space.dnssec&lt;br /&gt;
cd papaye.space.dnssec&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous générons nos clefs KSK et ZSK de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE papaye.space&lt;br /&gt;
dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE papaye.space&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous devons inclure ces clefs dans notre fichier de zone (dns.papaye.space) (la 14842 étant la ksk et l'autre la zsk):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$include /etc/bind/papaye.space.dnssec/Kpapaye.space.+005+14842.key&lt;br /&gt;
$include /etc/bind/papaye.space.dnssec/Kpapaye.space.+005+62520.key&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous signons la zone :&lt;br /&gt;
&amp;lt;pre&amp;gt; dnssec-signzone -o papaye.space-k Kpapaye.space.+005+14842 ../dns.papaye.space Kpapaye.space.+005+62520 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
=== Cryptage ===&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45946</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45946"/>
				<updated>2017-10-26T20:22:36Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : ap&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Création ==&lt;br /&gt;
Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. &lt;br /&gt;
La création des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la VM créée, il est possible de la démarrer de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl create /etc/xen/IMA5-Papaye/cfg &amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite, nous lançons la console de cette manière :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl console IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, pour sortir de cette dernière, nous faisons : &amp;lt;pre&amp;gt; ctrl + alt gr + ] &amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, pour éteindre la machine virtuelle : &amp;lt;pre&amp;gt; xl shutdown IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Et pour détruire la VM : &amp;lt;pre&amp;gt; xl destroy IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande ''lvcreate''.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que pour le répertoire ''home'', la manipulation est un peu plus simple que pour le répertoire ''var''. Tout d'abord, nous faisons appel à ''lvcreate'' de la manière suivante, depuis cordouan :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-var&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Il est possible de visualiser notre home grâce à la commande ''lsblk'' qui affiche tous les périphériques bloc.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque ''home'', ''xvda3'' et le disque ''var'', ''xvda4''.&lt;br /&gt;
&lt;br /&gt;
Puis, nous transformons nos disque en partitions ext4 :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mkfs -t ext4 /dev/xvda4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HOME ===&lt;br /&gt;
Pour la partition ''home'', il suffit de modifier le fichier /etc/fstab de la VM et d'y ajouter la ligne suivante pour que la partition soit montée au démarrage :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda3 /home ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
Le &amp;quot;0&amp;quot; indique que nous sauvegardons jamais et le &amp;quot;2&amp;quot; est propre à la sécurité de la partition.&lt;br /&gt;
Ainsi, un simple &amp;lt;pre&amp;gt; mount -a &amp;lt;/pre&amp;gt; suffit à monter à la partition. (Il est possible de la vérifier grâce à la commande ''df'')&lt;br /&gt;
&lt;br /&gt;
=== VAR ===&lt;br /&gt;
Pour la partition ''var'', c'est un peu plus compliqué car il faut monter la partition dans un /mnt temporaire avant de la déplacer. Nous effectuons donc les instructions suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/xvda4 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, nous modifions le fichier /etc/fstab de la même manière que pour la partition ''home'' :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda4 /var ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
Dans un premier temps, nous devons changer l'adresse IP de notre machine virtuelle ainsi que son masque dans /etc/config. Notre adresse IP est 193.48.57.178. Et notre masque est 255.255.255.240. Puis, nous avons modifié le fichier /etc/xen/IMA5-Papaye. En effet, nous remplaçons l'id par IMA5sc (pour la première séance, nous utilisions ''insecure''). De plus, nous rajoutons la route par défaut, le gateway : 193.49.57.177 dans le fichier /etc/config.&lt;br /&gt;
&lt;br /&gt;
Il est nécessaire d'installer ssh sur notre machine virtuelle :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install ssh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De plus, il est important de modifier le fichier /etc/ssh/sshd_config en changeant la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin Prohibited &amp;lt;/pre&amp;gt;&lt;br /&gt;
par&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin yes &amp;lt;/pre&amp;gt;&lt;br /&gt;
Grâce à cela, nous pourrons nous connecter en root sur la machine en ssh.&lt;br /&gt;
&lt;br /&gt;
Nous redémarrons le service :&lt;br /&gt;
&amp;lt;pre&amp;gt; service ssh restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur DNS ==&lt;br /&gt;
Dans un premier temps, nous avons acheté notre nom de domaine sur Gandi en prenant soin que ce dernier autorise l'installation d'un DNSSEC. Nous avons donc pris le domaine papaye.space.&lt;br /&gt;
&lt;br /&gt;
Puis, nous avons installé bind9 et apache2 : &amp;lt;pre&amp;gt;apt-get install bind9 apache2 &amp;lt;/pre&amp;gt;. Nous avons d'ailleurs ajouté au fichier /etc/default/bind9 la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; OPTIONS=&amp;quot;-4 -u bind&amp;quot; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous créons le dossier pour la page web qui sera vide pour le moment :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkdir /var/www/www.papaye.space &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous créons la table de DNS ou le fichier de zone : dns.papaye.space, en voici le contenu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
;&lt;br /&gt;
; BIND data file for local loopback interface&lt;br /&gt;
;&lt;br /&gt;
$TTL    604800&lt;br /&gt;
@       IN      SOA     dns.papaye.space. root.papaye.space (&lt;br /&gt;
                              2         ; Serial&lt;br /&gt;
                         604800         ; Refresh&lt;br /&gt;
                          86400         ; Retry&lt;br /&gt;
                        2419200         ; Expire&lt;br /&gt;
                         604800 )       ; Negative Cache TTL&lt;br /&gt;
;&lt;br /&gt;
        IN      NS      dns.papaye.space.&lt;br /&gt;
ns      IN      A       193.48.57.178&lt;br /&gt;
www     IN      A       193.48.57.178 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous configurons le fichier named.conf.local :&lt;br /&gt;
&amp;lt;pre&amp;gt; zone &amp;quot;papaye.space&amp;quot; {&lt;br /&gt;
        type master;&lt;br /&gt;
        file &amp;quot;/etc/bind/dns.papaye.space&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi que le fichier named.conf.options (217.70.177.40/32 étant l'adresse IP de Gandi, notre DNS esclave :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
options {&lt;br /&gt;
        directory &amp;quot;var/cache/bind&amp;quot;&lt;br /&gt;
        dnssec-validation auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        allow-transfer {&amp;quot;allowed_to_transfer&amp;quot;;}&lt;br /&gt;
        listen-on-v6 {any;}&lt;br /&gt;
}&lt;br /&gt;
acl &amp;quot;allowed_to_transfer&amp;quot; {&lt;br /&gt;
        217.70.177.40/32;&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous redémarrons notre service bind9 :&lt;br /&gt;
&amp;lt;pre&amp;gt; service bind9 restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les configurations depuis notre machine virtuelle sont terminées mais nous avons dû également effectuer un réglage depuis Gandi afin de renseigner nos DNS.&lt;br /&gt;
Pour les &amp;quot;glues records&amp;quot;, &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
'Nom du serveur' : dns.papaye.space&lt;br /&gt;
'IP' : 193.48.57.178 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour les DNS,&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
'DNS1' : dns.papaye.space&lt;br /&gt;
'DNS2' : ns6.gandi.net &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
L'objectif de cette partie est d'obtenir un certificat pour notre site web. Le certificat SSL généré par Gandi s'obtient de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; openssl req -nodes -newkey rsa:2048 -sha1 -keyout papaye.space.key -out papaye.space.csr &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin de valider notre certificat par Gandi, nous avons dû ajouter une ligne de code à notre fiche de zone (dns.papaye.space), qui était donné par le site.&lt;br /&gt;
&lt;br /&gt;
Une fois le certificat validé par Gandi, un petit cadenas noir est visualisable à côté de notre nom de domaine. De plus, nous pouvons recopier les fichiers de certification générés par Gandi dans le dossier SSL. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp certificat.crt /etc/ssl/certs/papaye.space.crt&lt;br /&gt;
cp serveur.key /etc/ssl/private/papaye.space.key&lt;br /&gt;
cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous faisons un hashage de notre structure afin que notre certificat soit prend en compte :&lt;br /&gt;
&amp;lt;pre&amp;gt; c_rehash /etc/ssl/certs &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis, nous créons le fichier 000-papaye.space-ssl.conf dans /etc/apache2/sites-available/ pour associer apache2 à notre nom de serveur :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#NameVirtualHost *:443&lt;br /&gt;
        &amp;lt;VirtualHost 193.48.57.178:443&amp;gt;&lt;br /&gt;
                ServerName www.papaye.space&lt;br /&gt;
                ServerAlias papaye.space&lt;br /&gt;
                DocumentRoot /var/www/www.papaye.space/&lt;br /&gt;
                CustomLog /var/log/apache2/secure_acces.log combined&lt;br /&gt;
&lt;br /&gt;
                SSLEngine on&lt;br /&gt;
                SSLCertificateFile /etc/ssl/certs/papaye.space.crt&lt;br /&gt;
                SSLCertificateKeyFile /etc/ssl/private/papaye.space.key&lt;br /&gt;
                SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem&lt;br /&gt;
                SSLVerifyClient None&lt;br /&gt;
        &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
        &amp;lt;Directory /var/www/www.papaye.space&amp;gt;&lt;br /&gt;
                Require all granted&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
ServerName &amp;quot;papaye.space&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous modifions le fichier ports.conf du serveur Apache afin qu'il écoute le port 443 (SSL):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Listen 80 443&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IfModule ssl_module&amp;gt;&lt;br /&gt;
        Listen 443&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous activons le module SSL d'Apache et activons notre site avec notre certificat :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
a2enmod ssl &lt;br /&gt;
a2ensite 000-piscinemorte.net-ssl.conf&lt;br /&gt;
service apache2 reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
=== Cryptage ===&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45945</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45945"/>
				<updated>2017-10-26T20:08:53Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Serveur DNS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Création ==&lt;br /&gt;
Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. &lt;br /&gt;
La création des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la VM créée, il est possible de la démarrer de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl create /etc/xen/IMA5-Papaye/cfg &amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite, nous lançons la console de cette manière :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl console IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, pour sortir de cette dernière, nous faisons : &amp;lt;pre&amp;gt; ctrl + alt gr + ] &amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, pour éteindre la machine virtuelle : &amp;lt;pre&amp;gt; xl shutdown IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Et pour détruire la VM : &amp;lt;pre&amp;gt; xl destroy IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande ''lvcreate''.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que pour le répertoire ''home'', la manipulation est un peu plus simple que pour le répertoire ''var''. Tout d'abord, nous faisons appel à ''lvcreate'' de la manière suivante, depuis cordouan :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-var&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Il est possible de visualiser notre home grâce à la commande ''lsblk'' qui affiche tous les périphériques bloc.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque ''home'', ''xvda3'' et le disque ''var'', ''xvda4''.&lt;br /&gt;
&lt;br /&gt;
Puis, nous transformons nos disque en partitions ext4 :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mkfs -t ext4 /dev/xvda4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HOME ===&lt;br /&gt;
Pour la partition ''home'', il suffit de modifier le fichier /etc/fstab de la VM et d'y ajouter la ligne suivante pour que la partition soit montée au démarrage :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda3 /home ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
Le &amp;quot;0&amp;quot; indique que nous sauvegardons jamais et le &amp;quot;2&amp;quot; est propre à la sécurité de la partition.&lt;br /&gt;
Ainsi, un simple &amp;lt;pre&amp;gt; mount -a &amp;lt;/pre&amp;gt; suffit à monter à la partition. (Il est possible de la vérifier grâce à la commande ''df'')&lt;br /&gt;
&lt;br /&gt;
=== VAR ===&lt;br /&gt;
Pour la partition ''var'', c'est un peu plus compliqué car il faut monter la partition dans un /mnt temporaire avant de la déplacer. Nous effectuons donc les instructions suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/xvda4 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, nous modifions le fichier /etc/fstab de la même manière que pour la partition ''home'' :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda4 /var ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
Dans un premier temps, nous devons changer l'adresse IP de notre machine virtuelle ainsi que son masque dans /etc/config. Notre adresse IP est 193.48.57.178. Et notre masque est 255.255.255.240. Puis, nous avons modifié le fichier /etc/xen/IMA5-Papaye. En effet, nous remplaçons l'id par IMA5sc (pour la première séance, nous utilisions ''insecure''). De plus, nous rajoutons la route par défaut, le gateway : 193.49.57.177 dans le fichier /etc/config.&lt;br /&gt;
&lt;br /&gt;
Il est nécessaire d'installer ssh sur notre machine virtuelle :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install ssh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De plus, il est important de modifier le fichier /etc/ssh/sshd_config en changeant la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin Prohibited &amp;lt;/pre&amp;gt;&lt;br /&gt;
par&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin yes &amp;lt;/pre&amp;gt;&lt;br /&gt;
Grâce à cela, nous pourrons nous connecter en root sur la machine en ssh.&lt;br /&gt;
&lt;br /&gt;
Nous redémarrons le service :&lt;br /&gt;
&amp;lt;pre&amp;gt; service ssh restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur DNS ==&lt;br /&gt;
Dans un premier temps, nous avons acheté notre nom de domaine sur Gandi en prenant soin que ce dernier autorise l'installation d'un DNSSEC. Nous avons donc pris le domaine papaye.space.&lt;br /&gt;
&lt;br /&gt;
Puis, nous avons installé bind9 et apache2 : &amp;lt;pre&amp;gt;apt-get install bind9 apache2 &amp;lt;/pre&amp;gt;. Nous avons d'ailleurs ajouté au fichier /etc/default/bind9 la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; OPTIONS=&amp;quot;-4 -u bind&amp;quot; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous créons le dossier pour la page web qui sera vide pour le moment :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkdir /var/www/www.papaye.space &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous créons la table de DNS ou le fichier de zone : dns.papaye.space, en voici le contenu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
;&lt;br /&gt;
; BIND data file for local loopback interface&lt;br /&gt;
;&lt;br /&gt;
$TTL    604800&lt;br /&gt;
@       IN      SOA     dns.papaye.space. root.papaye.space (&lt;br /&gt;
                              2         ; Serial&lt;br /&gt;
                         604800         ; Refresh&lt;br /&gt;
                          86400         ; Retry&lt;br /&gt;
                        2419200         ; Expire&lt;br /&gt;
                         604800 )       ; Negative Cache TTL&lt;br /&gt;
;&lt;br /&gt;
        IN      NS      dns.papaye.space.&lt;br /&gt;
ns      IN      A       193.48.57.178&lt;br /&gt;
www     IN      A       193.48.57.178 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous configurons le fichier named.conf.local :&lt;br /&gt;
&amp;lt;pre&amp;gt; zone &amp;quot;papaye.space&amp;quot; {&lt;br /&gt;
        type master;&lt;br /&gt;
        file &amp;quot;/etc/bind/dns.papaye.space&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi que le fichier named.conf.options (217.70.177.40/32 étant l'adresse IP de Gandi, notre DNS esclave :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
options {&lt;br /&gt;
        directory &amp;quot;var/cache/bind&amp;quot;&lt;br /&gt;
        dnssec-validation auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        allow-transfer {&amp;quot;allowed_to_transfer&amp;quot;;}&lt;br /&gt;
        listen-on-v6 {any;}&lt;br /&gt;
}&lt;br /&gt;
acl &amp;quot;allowed_to_transfer&amp;quot; {&lt;br /&gt;
        217.70.177.40/32;&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous redémarrons notre service bind9 :&lt;br /&gt;
&amp;lt;pre&amp;gt; service bind9 restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les configurations depuis notre machine virtuelle sont terminées mais nous avons dû également effectuer un réglage depuis Gandi afin de renseigner nos DNS.&lt;br /&gt;
Pour les &amp;quot;glues records&amp;quot;, &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
'Nom du serveur' : dns.papaye.space&lt;br /&gt;
'IP' : 193.48.57.178 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour les DNS,&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
'DNS1' : dns.papaye.space&lt;br /&gt;
'DNS2' : ns6.gandi.net &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
=== Cryptage ===&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45944</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45944"/>
				<updated>2017-10-26T20:08:15Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Serveur DNS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Création ==&lt;br /&gt;
Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. &lt;br /&gt;
La création des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la VM créée, il est possible de la démarrer de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl create /etc/xen/IMA5-Papaye/cfg &amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite, nous lançons la console de cette manière :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl console IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, pour sortir de cette dernière, nous faisons : &amp;lt;pre&amp;gt; ctrl + alt gr + ] &amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, pour éteindre la machine virtuelle : &amp;lt;pre&amp;gt; xl shutdown IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Et pour détruire la VM : &amp;lt;pre&amp;gt; xl destroy IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande ''lvcreate''.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que pour le répertoire ''home'', la manipulation est un peu plus simple que pour le répertoire ''var''. Tout d'abord, nous faisons appel à ''lvcreate'' de la manière suivante, depuis cordouan :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-var&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Il est possible de visualiser notre home grâce à la commande ''lsblk'' qui affiche tous les périphériques bloc.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque ''home'', ''xvda3'' et le disque ''var'', ''xvda4''.&lt;br /&gt;
&lt;br /&gt;
Puis, nous transformons nos disque en partitions ext4 :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mkfs -t ext4 /dev/xvda4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HOME ===&lt;br /&gt;
Pour la partition ''home'', il suffit de modifier le fichier /etc/fstab de la VM et d'y ajouter la ligne suivante pour que la partition soit montée au démarrage :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda3 /home ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
Le &amp;quot;0&amp;quot; indique que nous sauvegardons jamais et le &amp;quot;2&amp;quot; est propre à la sécurité de la partition.&lt;br /&gt;
Ainsi, un simple &amp;lt;pre&amp;gt; mount -a &amp;lt;/pre&amp;gt; suffit à monter à la partition. (Il est possible de la vérifier grâce à la commande ''df'')&lt;br /&gt;
&lt;br /&gt;
=== VAR ===&lt;br /&gt;
Pour la partition ''var'', c'est un peu plus compliqué car il faut monter la partition dans un /mnt temporaire avant de la déplacer. Nous effectuons donc les instructions suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/xvda4 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, nous modifions le fichier /etc/fstab de la même manière que pour la partition ''home'' :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda4 /var ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
Dans un premier temps, nous devons changer l'adresse IP de notre machine virtuelle ainsi que son masque dans /etc/config. Notre adresse IP est 193.48.57.178. Et notre masque est 255.255.255.240. Puis, nous avons modifié le fichier /etc/xen/IMA5-Papaye. En effet, nous remplaçons l'id par IMA5sc (pour la première séance, nous utilisions ''insecure''). De plus, nous rajoutons la route par défaut, le gateway : 193.49.57.177 dans le fichier /etc/config.&lt;br /&gt;
&lt;br /&gt;
Il est nécessaire d'installer ssh sur notre machine virtuelle :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install ssh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De plus, il est important de modifier le fichier /etc/ssh/sshd_config en changeant la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin Prohibited &amp;lt;/pre&amp;gt;&lt;br /&gt;
par&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin yes &amp;lt;/pre&amp;gt;&lt;br /&gt;
Grâce à cela, nous pourrons nous connecter en root sur la machine en ssh.&lt;br /&gt;
&lt;br /&gt;
Nous redémarrons le service :&lt;br /&gt;
&amp;lt;pre&amp;gt; service ssh restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur DNS ==&lt;br /&gt;
Dans un premier temps, nous avons acheté notre nom de domaine sur Gandi en prenant soin que ce dernier autorise l'installation d'un DNSSEC. Nous avons donc pris le domaine papaye.space.&lt;br /&gt;
&lt;br /&gt;
Puis, nous avons installé bind9 et apache2 : &amp;lt;pre&amp;gt;apt-get install bind9 apache2 &amp;lt;/pre&amp;gt;. Nous avons d'ailleurs ajouté au fichier /etc/default/bind9 la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; OPTIONS=&amp;quot;-4 -u bind&amp;quot; &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous créons le dossier pour la page web qui sera vide pour le moment :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkdir /var/www/www.papaye.space &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous créons la table de DNS ou le fichier de zone : dns.papaye.space, en voici le contenu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
;&lt;br /&gt;
; BIND data file for local loopback interface&lt;br /&gt;
;&lt;br /&gt;
$TTL    604800&lt;br /&gt;
@       IN      SOA     dns.papaye.space. root.papaye.space (&lt;br /&gt;
                              2         ; Serial&lt;br /&gt;
                         604800         ; Refresh&lt;br /&gt;
                          86400         ; Retry&lt;br /&gt;
                        2419200         ; Expire&lt;br /&gt;
                         604800 )       ; Negative Cache TTL&lt;br /&gt;
;&lt;br /&gt;
        IN      NS      dns.papaye.space.&lt;br /&gt;
ns      IN      A       193.48.57.178&lt;br /&gt;
www     IN      A       193.48.57.178 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous configurons le fichier named.conf.local :&lt;br /&gt;
&amp;lt;pre&amp;gt; zone &amp;quot;papaye.space&amp;quot; {&lt;br /&gt;
        type master;&lt;br /&gt;
        file &amp;quot;/etc/bind/dns.papaye.space&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi que le fichier named.conf.options (217.70.177.40/32 étant l'adresse IP de Gandi, notre DNS esclave :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
options {&lt;br /&gt;
        directory &amp;quot;var/cache/bind&amp;quot;&lt;br /&gt;
        dnssec-validation auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        allow-transfer {&amp;quot;allowed_to_transfer&amp;quot;;}&lt;br /&gt;
        listen-on-v6 {any;}&lt;br /&gt;
}&lt;br /&gt;
acl &amp;quot;allowed_to_transfer&amp;quot; {&lt;br /&gt;
        217.70.177.40/32;&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous redémarrons notre service bind9 :&lt;br /&gt;
&amp;lt;pre&amp;gt; service bind9 restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les configurations depuis notre machine virtuelle sont terminées mais nous avons dû également effectuer un réglage depuis Gandi afin de renseigner nos DNS.&lt;br /&gt;
Pour les &amp;quot;glues records&amp;quot;, &lt;br /&gt;
&amp;lt;pre&amp;gt; 'Nom du serveur' : dns.papaye.space&lt;br /&gt;
'IP' : 193.48.57.178 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour les DNS,&lt;br /&gt;
&amp;lt;pre&amp;gt; 'DNS1' : dns.papaye.space&lt;br /&gt;
'DNS2' : ns6.gandi.net &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
=== Cryptage ===&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45943</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45943"/>
				<updated>2017-10-26T20:06:22Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Serveur DNS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Création ==&lt;br /&gt;
Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. &lt;br /&gt;
La création des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la VM créée, il est possible de la démarrer de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl create /etc/xen/IMA5-Papaye/cfg &amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite, nous lançons la console de cette manière :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl console IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, pour sortir de cette dernière, nous faisons : &amp;lt;pre&amp;gt; ctrl + alt gr + ] &amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, pour éteindre la machine virtuelle : &amp;lt;pre&amp;gt; xl shutdown IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Et pour détruire la VM : &amp;lt;pre&amp;gt; xl destroy IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande ''lvcreate''.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que pour le répertoire ''home'', la manipulation est un peu plus simple que pour le répertoire ''var''. Tout d'abord, nous faisons appel à ''lvcreate'' de la manière suivante, depuis cordouan :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-var&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Il est possible de visualiser notre home grâce à la commande ''lsblk'' qui affiche tous les périphériques bloc.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque ''home'', ''xvda3'' et le disque ''var'', ''xvda4''.&lt;br /&gt;
&lt;br /&gt;
Puis, nous transformons nos disque en partitions ext4 :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mkfs -t ext4 /dev/xvda4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HOME ===&lt;br /&gt;
Pour la partition ''home'', il suffit de modifier le fichier /etc/fstab de la VM et d'y ajouter la ligne suivante pour que la partition soit montée au démarrage :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda3 /home ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
Le &amp;quot;0&amp;quot; indique que nous sauvegardons jamais et le &amp;quot;2&amp;quot; est propre à la sécurité de la partition.&lt;br /&gt;
Ainsi, un simple &amp;lt;pre&amp;gt; mount -a &amp;lt;/pre&amp;gt; suffit à monter à la partition. (Il est possible de la vérifier grâce à la commande ''df'')&lt;br /&gt;
&lt;br /&gt;
=== VAR ===&lt;br /&gt;
Pour la partition ''var'', c'est un peu plus compliqué car il faut monter la partition dans un /mnt temporaire avant de la déplacer. Nous effectuons donc les instructions suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/xvda4 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, nous modifions le fichier /etc/fstab de la même manière que pour la partition ''home'' :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda4 /var ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
Dans un premier temps, nous devons changer l'adresse IP de notre machine virtuelle ainsi que son masque dans /etc/config. Notre adresse IP est 193.48.57.178. Et notre masque est 255.255.255.240. Puis, nous avons modifié le fichier /etc/xen/IMA5-Papaye. En effet, nous remplaçons l'id par IMA5sc (pour la première séance, nous utilisions ''insecure''). De plus, nous rajoutons la route par défaut, le gateway : 193.49.57.177 dans le fichier /etc/config.&lt;br /&gt;
&lt;br /&gt;
Il est nécessaire d'installer ssh sur notre machine virtuelle :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install ssh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De plus, il est important de modifier le fichier /etc/ssh/sshd_config en changeant la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin Prohibited &amp;lt;/pre&amp;gt;&lt;br /&gt;
par&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin yes &amp;lt;/pre&amp;gt;&lt;br /&gt;
Grâce à cela, nous pourrons nous connecter en root sur la machine en ssh.&lt;br /&gt;
&lt;br /&gt;
Nous redémarrons le service :&lt;br /&gt;
&amp;lt;pre&amp;gt; service ssh restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur DNS ==&lt;br /&gt;
Dans un premier temps, nous avons acheté notre nom de domaine sur Gandi en prenant soin que ce dernier autorise l'installation d'un DNSSEC. Nous avons donc pris le domaine papaye.space.&lt;br /&gt;
&lt;br /&gt;
Puis, nous avons installé bind9 et apache2 : &amp;lt;pre&amp;gt;apt-get install bind9 apache2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous créons le dossier pour la page web qui sera vide pour le moment :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkdir /var/www/www.papaye.space &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous créons la table de DNS ou le fichier de zone : dns.papaye.space, en voici le contenu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
;&lt;br /&gt;
; BIND data file for local loopback interface&lt;br /&gt;
;&lt;br /&gt;
$TTL    604800&lt;br /&gt;
@       IN      SOA     dns.papaye.space. root.papaye.space (&lt;br /&gt;
                              2         ; Serial&lt;br /&gt;
                         604800         ; Refresh&lt;br /&gt;
                          86400         ; Retry&lt;br /&gt;
                        2419200         ; Expire&lt;br /&gt;
                         604800 )       ; Negative Cache TTL&lt;br /&gt;
;&lt;br /&gt;
        IN      NS      dns.papaye.space.&lt;br /&gt;
ns      IN      A       193.48.57.178&lt;br /&gt;
www     IN      A       193.48.57.178 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous configurons le fichier named.conf.local :&lt;br /&gt;
&amp;lt;pre&amp;gt; zone &amp;quot;papaye.space&amp;quot; {&lt;br /&gt;
        type master;&lt;br /&gt;
        file &amp;quot;/etc/bind/dns.papaye.space&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi que le fichier named.conf.options (217.70.177.40/32 étant l'adresse IP de Gandi, notre DNS esclave :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
options {&lt;br /&gt;
        directory &amp;quot;var/cache/bind&amp;quot;&lt;br /&gt;
        dnssec-validation auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        allow-transfer {&amp;quot;allowed_to_transfer&amp;quot;;}&lt;br /&gt;
        listen-on-v6 {any;}&lt;br /&gt;
}&lt;br /&gt;
acl &amp;quot;allowed_to_transfer&amp;quot; {&lt;br /&gt;
        217.70.177.40/32;&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous redémarrons notre service bind9 :&lt;br /&gt;
&amp;lt;pre&amp;gt; service bind9 restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les configurations depuis notre machine virtuelle sont terminées mais nous avons dû également effectuer un réglage depuis Gandi afin de renseigner nos DNS.&lt;br /&gt;
Pour les &amp;quot;glues records&amp;quot;, &lt;br /&gt;
&amp;lt;pre&amp;gt; 'Nom du serveur' : dns.papaye.space&lt;br /&gt;
'IP' : 193.48.57.178 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour les DNS,&lt;br /&gt;
&amp;lt;pre&amp;gt; 'DNS1' : dns.papaye.space&lt;br /&gt;
'DNS2' : ns6.gandi.net &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
=== Cryptage ===&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45942</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45942"/>
				<updated>2017-10-26T20:05:19Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Serveur DNS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Création ==&lt;br /&gt;
Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. &lt;br /&gt;
La création des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la VM créée, il est possible de la démarrer de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl create /etc/xen/IMA5-Papaye/cfg &amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite, nous lançons la console de cette manière :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl console IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, pour sortir de cette dernière, nous faisons : &amp;lt;pre&amp;gt; ctrl + alt gr + ] &amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, pour éteindre la machine virtuelle : &amp;lt;pre&amp;gt; xl shutdown IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Et pour détruire la VM : &amp;lt;pre&amp;gt; xl destroy IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande ''lvcreate''.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que pour le répertoire ''home'', la manipulation est un peu plus simple que pour le répertoire ''var''. Tout d'abord, nous faisons appel à ''lvcreate'' de la manière suivante, depuis cordouan :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-var&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Il est possible de visualiser notre home grâce à la commande ''lsblk'' qui affiche tous les périphériques bloc.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque ''home'', ''xvda3'' et le disque ''var'', ''xvda4''.&lt;br /&gt;
&lt;br /&gt;
Puis, nous transformons nos disque en partitions ext4 :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mkfs -t ext4 /dev/xvda4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HOME ===&lt;br /&gt;
Pour la partition ''home'', il suffit de modifier le fichier /etc/fstab de la VM et d'y ajouter la ligne suivante pour que la partition soit montée au démarrage :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda3 /home ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
Le &amp;quot;0&amp;quot; indique que nous sauvegardons jamais et le &amp;quot;2&amp;quot; est propre à la sécurité de la partition.&lt;br /&gt;
Ainsi, un simple &amp;lt;pre&amp;gt; mount -a &amp;lt;/pre&amp;gt; suffit à monter à la partition. (Il est possible de la vérifier grâce à la commande ''df'')&lt;br /&gt;
&lt;br /&gt;
=== VAR ===&lt;br /&gt;
Pour la partition ''var'', c'est un peu plus compliqué car il faut monter la partition dans un /mnt temporaire avant de la déplacer. Nous effectuons donc les instructions suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/xvda4 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, nous modifions le fichier /etc/fstab de la même manière que pour la partition ''home'' :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda4 /var ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
Dans un premier temps, nous devons changer l'adresse IP de notre machine virtuelle ainsi que son masque dans /etc/config. Notre adresse IP est 193.48.57.178. Et notre masque est 255.255.255.240. Puis, nous avons modifié le fichier /etc/xen/IMA5-Papaye. En effet, nous remplaçons l'id par IMA5sc (pour la première séance, nous utilisions ''insecure''). De plus, nous rajoutons la route par défaut, le gateway : 193.49.57.177 dans le fichier /etc/config.&lt;br /&gt;
&lt;br /&gt;
Il est nécessaire d'installer ssh sur notre machine virtuelle :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install ssh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De plus, il est important de modifier le fichier /etc/ssh/sshd_config en changeant la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin Prohibited &amp;lt;/pre&amp;gt;&lt;br /&gt;
par&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin yes &amp;lt;/pre&amp;gt;&lt;br /&gt;
Grâce à cela, nous pourrons nous connecter en root sur la machine en ssh.&lt;br /&gt;
&lt;br /&gt;
Nous redémarrons le service :&lt;br /&gt;
&amp;lt;pre&amp;gt; service ssh restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur DNS ==&lt;br /&gt;
Dans un premier temps, nous avons acheté notre nom de domaine sur Gandi en prenant soin que ce dernier autorise l'installation d'un DNSSEC. Nous avons donc pris le domaine papaye.space.&lt;br /&gt;
&lt;br /&gt;
Puis, nous avons installé bind9 et apache2 : &amp;lt;pre&amp;gt;apt-get install bind9 apache2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous créons le dossier pour la page web qui sera vide pour le moment :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkdir /var/www/www.papaye.space &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous créons la table de DNS ou le fichier de zone : dns.papaye.space, en voici le contenu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
;&lt;br /&gt;
; BIND data file for local loopback interface&lt;br /&gt;
;&lt;br /&gt;
$TTL    604800&lt;br /&gt;
@       IN      SOA     dns.papaye.space. root.papaye.space (&lt;br /&gt;
                              2         ; Serial&lt;br /&gt;
                         604800         ; Refresh&lt;br /&gt;
                          86400         ; Retry&lt;br /&gt;
                        2419200         ; Expire&lt;br /&gt;
                         604800 )       ; Negative Cache TTL&lt;br /&gt;
;&lt;br /&gt;
        IN      NS      dns.papaye.space.&lt;br /&gt;
ns      IN      A       193.48.57.178&lt;br /&gt;
www     IN      A       193.48.57.178 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous configurons le fichier named.conf.local :&lt;br /&gt;
&amp;lt;pre&amp;gt; zone &amp;quot;papaye.space&amp;quot; {&lt;br /&gt;
        type master;&lt;br /&gt;
        file &amp;quot;/etc/bind/dns.papaye.space&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi que le fichier named.conf.options (217.70.177.40/32 étant l'adresse IP de Gandi, notre DNS esclave :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
options {&lt;br /&gt;
        directory &amp;quot;var/cache/bind&amp;quot;&lt;br /&gt;
        dnssec-validation auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        allow-transfer {&amp;quot;allowed_to_transfer&amp;quot;;}&lt;br /&gt;
        listen-on-v6 {any;}&lt;br /&gt;
}&lt;br /&gt;
acl &amp;quot;allowed_to_transfer&amp;quot; {&lt;br /&gt;
        217.70.177.40/32;&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous redémarrons notre service bind9 :&lt;br /&gt;
&amp;lt;pre&amp;gt; service bind9 restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les configurations depuis notre machine virtuelle sont terminées mais nous avons dû également effectuer un réglage depuis Gandi afin de renseigner nos DNS.&lt;br /&gt;
Pour les &amp;quot;glues records&amp;quot;, &lt;br /&gt;
&amp;lt;pre&amp;gt; 'Nom du serveur' : dns.papaye.space&lt;br /&gt;
'IP' : 193.48.57.178 &amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour les DNS,&lt;br /&gt;
&amp;lt;pre&amp;gt; 'DNS1' : dns.papaye.space&lt;br /&gt;
'DNS2' : ns6.gandi.net &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
=== Cryptage ===&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45940</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45940"/>
				<updated>2017-10-26T19:58:04Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Serveur SSH */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Création ==&lt;br /&gt;
Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. &lt;br /&gt;
La création des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la VM créée, il est possible de la démarrer de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl create /etc/xen/IMA5-Papaye/cfg &amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite, nous lançons la console de cette manière :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl console IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, pour sortir de cette dernière, nous faisons : &amp;lt;pre&amp;gt; ctrl + alt gr + ] &amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, pour éteindre la machine virtuelle : &amp;lt;pre&amp;gt; xl shutdown IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Et pour détruire la VM : &amp;lt;pre&amp;gt; xl destroy IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande ''lvcreate''.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que pour le répertoire ''home'', la manipulation est un peu plus simple que pour le répertoire ''var''. Tout d'abord, nous faisons appel à ''lvcreate'' de la manière suivante, depuis cordouan :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-var&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Il est possible de visualiser notre home grâce à la commande ''lsblk'' qui affiche tous les périphériques bloc.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque ''home'', ''xvda3'' et le disque ''var'', ''xvda4''.&lt;br /&gt;
&lt;br /&gt;
Puis, nous transformons nos disque en partitions ext4 :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mkfs -t ext4 /dev/xvda4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HOME ===&lt;br /&gt;
Pour la partition ''home'', il suffit de modifier le fichier /etc/fstab de la VM et d'y ajouter la ligne suivante pour que la partition soit montée au démarrage :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda3 /home ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
Le &amp;quot;0&amp;quot; indique que nous sauvegardons jamais et le &amp;quot;2&amp;quot; est propre à la sécurité de la partition.&lt;br /&gt;
Ainsi, un simple &amp;lt;pre&amp;gt; mount -a &amp;lt;/pre&amp;gt; suffit à monter à la partition. (Il est possible de la vérifier grâce à la commande ''df'')&lt;br /&gt;
&lt;br /&gt;
=== VAR ===&lt;br /&gt;
Pour la partition ''var'', c'est un peu plus compliqué car il faut monter la partition dans un /mnt temporaire avant de la déplacer. Nous effectuons donc les instructions suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/xvda4 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, nous modifions le fichier /etc/fstab de la même manière que pour la partition ''home'' :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda4 /var ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
Dans un premier temps, nous devons changer l'adresse IP de notre machine virtuelle ainsi que son masque dans /etc/config. Notre adresse IP est 193.48.57.178. Et notre masque est 255.255.255.240. Puis, nous avons modifié le fichier /etc/xen/IMA5-Papaye. En effet, nous remplaçons l'id par IMA5sc (pour la première séance, nous utilisions ''insecure''). De plus, nous rajoutons la route par défaut, le gateway : 193.49.57.177 dans le fichier /etc/config.&lt;br /&gt;
&lt;br /&gt;
Il est nécessaire d'installer ssh sur notre machine virtuelle :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install ssh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De plus, il est important de modifier le fichier /etc/ssh/sshd_config en changeant la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin Prohibited &amp;lt;/pre&amp;gt;&lt;br /&gt;
par&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin yes &amp;lt;/pre&amp;gt;&lt;br /&gt;
Grâce à cela, nous pourrons nous connecter en root sur la machine en ssh.&lt;br /&gt;
&lt;br /&gt;
Nous redémarrons le service :&lt;br /&gt;
&amp;lt;pre&amp;gt; service ssh restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur DNS ==&lt;br /&gt;
Dans un premier temps, nous avons acheté notre nom de domaine sur Gandi en prenant soin que ce dernier autorise l'installation d'un DNSSEC. Nous avons donc pris le domaine papaye.space.&lt;br /&gt;
&lt;br /&gt;
Puis, nous avons installé bind9 et apache2 : &amp;lt;pre&amp;gt;apt-get install bind9 apache2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous créons le dossier pour la page web qui sera vide pour le moment :&lt;br /&gt;
&amp;lt;pre&amp;gt; mkdir /var/www/www.papaye.space &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans un second temps, nous créons la table de DNS ou le fichier de zone : dns.papaye.space, en voici le contenu :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
;&lt;br /&gt;
; BIND data file for local loopback interface&lt;br /&gt;
;&lt;br /&gt;
$TTL    604800&lt;br /&gt;
@       IN      SOA     dns.papaye.space. root.papaye.space (&lt;br /&gt;
                              2         ; Serial&lt;br /&gt;
                         604800         ; Refresh&lt;br /&gt;
                          86400         ; Retry&lt;br /&gt;
                        2419200         ; Expire&lt;br /&gt;
                         604800 )       ; Negative Cache TTL&lt;br /&gt;
;&lt;br /&gt;
        IN      NS      dns.papaye.space.&lt;br /&gt;
ns      IN      A       193.48.57.178&lt;br /&gt;
www     IN      A       193.48.57.178 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous configurons le fichier named.conf.local :&lt;br /&gt;
&amp;lt;pre&amp;gt; zone &amp;quot;papaye.space&amp;quot; {&lt;br /&gt;
        type master;&lt;br /&gt;
        file &amp;quot;/etc/bind/dns.papaye.space&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi que le fichier named.conf.options (217.70.177.40/32 étant l'adresse IP de Gandi, notre DNS esclave :&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
options {&lt;br /&gt;
        directory &amp;quot;var/cache/bind&amp;quot;&lt;br /&gt;
        dnssec-validation auto;&lt;br /&gt;
        auth-nxdomain no;&lt;br /&gt;
        allow-transfer {&amp;quot;allowed_to_transfer&amp;quot;;}&lt;br /&gt;
        listen-on-v6 {any;}&lt;br /&gt;
}&lt;br /&gt;
acl &amp;quot;allowed_to_transfer&amp;quot; {&lt;br /&gt;
        217.70.177.40/32;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
=== Cryptage ===&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45931</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45931"/>
				<updated>2017-10-26T19:40:17Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Serveur SSH */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Création ==&lt;br /&gt;
Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. &lt;br /&gt;
La création des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la VM créée, il est possible de la démarrer de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl create /etc/xen/IMA5-Papaye/cfg &amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite, nous lançons la console de cette manière :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl console IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, pour sortir de cette dernière, nous faisons : &amp;lt;pre&amp;gt; ctrl + alt gr + ] &amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, pour éteindre la machine virtuelle : &amp;lt;pre&amp;gt; xl shutdown IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Et pour détruire la VM : &amp;lt;pre&amp;gt; xl destroy IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande ''lvcreate''.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que pour le répertoire ''home'', la manipulation est un peu plus simple que pour le répertoire ''var''. Tout d'abord, nous faisons appel à ''lvcreate'' de la manière suivante, depuis cordouan :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-var&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Il est possible de visualiser notre home grâce à la commande ''lsblk'' qui affiche tous les périphériques bloc.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque ''home'', ''xvda3'' et le disque ''var'', ''xvda4''.&lt;br /&gt;
&lt;br /&gt;
Puis, nous transformons nos disque en partitions ext4 :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mkfs -t ext4 /dev/xvda4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HOME ===&lt;br /&gt;
Pour la partition ''home'', il suffit de modifier le fichier /etc/fstab de la VM et d'y ajouter la ligne suivante pour que la partition soit montée au démarrage :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda3 /home ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
Le &amp;quot;0&amp;quot; indique que nous sauvegardons jamais et le &amp;quot;2&amp;quot; est propre à la sécurité de la partition.&lt;br /&gt;
Ainsi, un simple &amp;lt;pre&amp;gt; mount -a &amp;lt;/pre&amp;gt; suffit à monter à la partition. (Il est possible de la vérifier grâce à la commande ''df'')&lt;br /&gt;
&lt;br /&gt;
=== VAR ===&lt;br /&gt;
Pour la partition ''var'', c'est un peu plus compliqué car il faut monter la partition dans un /mnt temporaire avant de la déplacer. Nous effectuons donc les instructions suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/xvda4 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, nous modifions le fichier /etc/fstab de la même manière que pour la partition ''home'' :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda4 /var ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
Dans un premier temps, nous devons changer l'adresse IP de notre machine virtuelle ainsi que son masque. Notre adresse IP est 193.48.57.178. Et notre masque est 255.255.255.240.&lt;br /&gt;
&lt;br /&gt;
Il est nécessaire d'installer ssh sur notre machine virtuelle :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install ssh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De plus, il est important de modifier le fichier /etc/ssh/sshd_config en changeant la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin Prohibited &amp;lt;/pre&amp;gt;&lt;br /&gt;
par&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin yes &amp;lt;/pre&amp;gt;&lt;br /&gt;
Grâce à cela, nous pourrons nous connecter en root sur la machine en ssh.&lt;br /&gt;
&lt;br /&gt;
Nous redémarrons le service :&lt;br /&gt;
&amp;lt;pre&amp;gt; service ssh restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 == Serveur DNS ==&lt;br /&gt;
Dans un premier temps, nous avons acheté notre nom de domaine sur Gandi en prenant soin que ce dernier autorise l'installation d'un DNSSEC. Nous avons donc pris le domaine papaye.space.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons installé bind9 et apache2 : &amp;lt;pre&amp;gt;apt-get install bind9 apache2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
=== Cryptage ===&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45930</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45930"/>
				<updated>2017-10-26T19:38:11Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Serveur DNS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Création ==&lt;br /&gt;
Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. &lt;br /&gt;
La création des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la VM créée, il est possible de la démarrer de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl create /etc/xen/IMA5-Papaye/cfg &amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite, nous lançons la console de cette manière :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl console IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, pour sortir de cette dernière, nous faisons : &amp;lt;pre&amp;gt; ctrl + alt gr + ] &amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, pour éteindre la machine virtuelle : &amp;lt;pre&amp;gt; xl shutdown IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Et pour détruire la VM : &amp;lt;pre&amp;gt; xl destroy IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande ''lvcreate''.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que pour le répertoire ''home'', la manipulation est un peu plus simple que pour le répertoire ''var''. Tout d'abord, nous faisons appel à ''lvcreate'' de la manière suivante, depuis cordouan :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-var&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Il est possible de visualiser notre home grâce à la commande ''lsblk'' qui affiche tous les périphériques bloc.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque ''home'', ''xvda3'' et le disque ''var'', ''xvda4''.&lt;br /&gt;
&lt;br /&gt;
Puis, nous transformons nos disque en partitions ext4 :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mkfs -t ext4 /dev/xvda4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HOME ===&lt;br /&gt;
Pour la partition ''home'', il suffit de modifier le fichier /etc/fstab de la VM et d'y ajouter la ligne suivante pour que la partition soit montée au démarrage :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda3 /home ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
Le &amp;quot;0&amp;quot; indique que nous sauvegardons jamais et le &amp;quot;2&amp;quot; est propre à la sécurité de la partition.&lt;br /&gt;
Ainsi, un simple &amp;lt;pre&amp;gt; mount -a &amp;lt;/pre&amp;gt; suffit à monter à la partition. (Il est possible de la vérifier grâce à la commande ''df'')&lt;br /&gt;
&lt;br /&gt;
=== VAR ===&lt;br /&gt;
Pour la partition ''var'', c'est un peu plus compliqué car il faut monter la partition dans un /mnt temporaire avant de la déplacer. Nous effectuons donc les instructions suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/xvda4 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, nous modifions le fichier /etc/fstab de la même manière que pour la partition ''home'' :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda4 /var ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
Il est nécessaire d'installer ssh sur notre machine virtuelle :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install ssh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De plus, il est important de modifier le fichier /etc/ssh/sshd_config en changeant la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin Prohibited &amp;lt;/pre&amp;gt;&lt;br /&gt;
par&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin yes &amp;lt;/pre&amp;gt;&lt;br /&gt;
Grâce à cela, nous pourrons nous connecter en root sur la machine en ssh.&lt;br /&gt;
&lt;br /&gt;
Nous redémarrons le service :&lt;br /&gt;
&amp;lt;pre&amp;gt; service ssh restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 == Serveur DNS ==&lt;br /&gt;
Dans un premier temps, nous avons acheté notre nom de domaine sur Gandi en prenant soin que ce dernier autorise l'installation d'un DNSSEC. Nous avons donc pris le domaine papaye.space.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons installé bind9 et apache2 : &amp;lt;pre&amp;gt;apt-get install bind9 apache2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
=== Cryptage ===&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45929</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45929"/>
				<updated>2017-10-26T19:34:24Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Serveur SSH */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Création ==&lt;br /&gt;
Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. &lt;br /&gt;
La création des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la VM créée, il est possible de la démarrer de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl create /etc/xen/IMA5-Papaye/cfg &amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite, nous lançons la console de cette manière :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl console IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, pour sortir de cette dernière, nous faisons : &amp;lt;pre&amp;gt; ctrl + alt gr + ] &amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, pour éteindre la machine virtuelle : &amp;lt;pre&amp;gt; xl shutdown IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Et pour détruire la VM : &amp;lt;pre&amp;gt; xl destroy IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande ''lvcreate''.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que pour le répertoire ''home'', la manipulation est un peu plus simple que pour le répertoire ''var''. Tout d'abord, nous faisons appel à ''lvcreate'' de la manière suivante, depuis cordouan :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-var&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Il est possible de visualiser notre home grâce à la commande ''lsblk'' qui affiche tous les périphériques bloc.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque ''home'', ''xvda3'' et le disque ''var'', ''xvda4''.&lt;br /&gt;
&lt;br /&gt;
Puis, nous transformons nos disque en partitions ext4 :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mkfs -t ext4 /dev/xvda4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HOME ===&lt;br /&gt;
Pour la partition ''home'', il suffit de modifier le fichier /etc/fstab de la VM et d'y ajouter la ligne suivante pour que la partition soit montée au démarrage :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda3 /home ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
Le &amp;quot;0&amp;quot; indique que nous sauvegardons jamais et le &amp;quot;2&amp;quot; est propre à la sécurité de la partition.&lt;br /&gt;
Ainsi, un simple &amp;lt;pre&amp;gt; mount -a &amp;lt;/pre&amp;gt; suffit à monter à la partition. (Il est possible de la vérifier grâce à la commande ''df'')&lt;br /&gt;
&lt;br /&gt;
=== VAR ===&lt;br /&gt;
Pour la partition ''var'', c'est un peu plus compliqué car il faut monter la partition dans un /mnt temporaire avant de la déplacer. Nous effectuons donc les instructions suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/xvda4 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, nous modifions le fichier /etc/fstab de la même manière que pour la partition ''home'' :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda4 /var ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
Il est nécessaire d'installer ssh sur notre machine virtuelle :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install ssh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De plus, il est important de modifier le fichier /etc/ssh/sshd_config en changeant la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin Prohibited &amp;lt;/pre&amp;gt;&lt;br /&gt;
par&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin yes &amp;lt;/pre&amp;gt;&lt;br /&gt;
Grâce à cela, nous pourrons nous connecter en root sur la machine en ssh.&lt;br /&gt;
&lt;br /&gt;
Nous redémarrons le service :&lt;br /&gt;
&amp;lt;pre&amp;gt; service ssh restart &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur DNS ==&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
=== Cryptage ===&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45926</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45926"/>
				<updated>2017-10-26T19:31:42Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Création */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Création ==&lt;br /&gt;
Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. &lt;br /&gt;
La création des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la VM créée, il est possible de la démarrer de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl create /etc/xen/IMA5-Papaye/cfg &amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite, nous lançons la console de cette manière :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl console IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, pour sortir de cette dernière, nous faisons : &amp;lt;pre&amp;gt; ctrl + alt gr + ] &amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, pour éteindre la machine virtuelle : &amp;lt;pre&amp;gt; xl shutdown IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Et pour détruire la VM : &amp;lt;pre&amp;gt; xl destroy IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande ''lvcreate''.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que pour le répertoire ''home'', la manipulation est un peu plus simple que pour le répertoire ''var''. Tout d'abord, nous faisons appel à ''lvcreate'' de la manière suivante, depuis cordouan :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-var&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Il est possible de visualiser notre home grâce à la commande ''lsblk'' qui affiche tous les périphériques bloc.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque ''home'', ''xvda3'' et le disque ''var'', ''xvda4''.&lt;br /&gt;
&lt;br /&gt;
Puis, nous transformons nos disque en partitions ext4 :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mkfs -t ext4 /dev/xvda4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HOME ===&lt;br /&gt;
Pour la partition ''home'', il suffit de modifier le fichier /etc/fstab de la VM et d'y ajouter la ligne suivante pour que la partition soit montée au démarrage :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda3 /home ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
Le &amp;quot;0&amp;quot; indique que nous sauvegardons jamais et le &amp;quot;2&amp;quot; est propre à la sécurité de la partition.&lt;br /&gt;
Ainsi, un simple &amp;lt;pre&amp;gt; mount -a &amp;lt;/pre&amp;gt; suffit à monter à la partition. (Il est possible de la vérifier grâce à la commande ''df'')&lt;br /&gt;
&lt;br /&gt;
=== VAR ===&lt;br /&gt;
Pour la partition ''var'', c'est un peu plus compliqué car il faut monter la partition dans un /mnt temporaire avant de la déplacer. Nous effectuons donc les instructions suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/xvda4 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, nous modifions le fichier /etc/fstab de la même manière que pour la partition ''home'' :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda4 /var ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
Il est nécessaire d'installer ssh sur notre machine virtuelle :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install ssh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur DNS ==&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
=== Cryptage ===&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45924</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45924"/>
				<updated>2017-10-26T19:31:26Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Serveur SSH */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Création ==&lt;br /&gt;
Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. &lt;br /&gt;
La création des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est important de modifier le fichier /etc/ssh/sshd_config en changeant la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin Prohibited &amp;lt;/pre&amp;gt;&lt;br /&gt;
par&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin yes &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la VM créée, il est possible de la démarrer de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl create /etc/xen/IMA5-Papaye/cfg &amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite, nous lançons la console de cette manière :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl console IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, pour sortir de cette dernière, nous faisons : &amp;lt;pre&amp;gt; ctrl + alt gr + ] &amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, pour éteindre la machine virtuelle : &amp;lt;pre&amp;gt; xl shutdown IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Et pour détruire la VM : &amp;lt;pre&amp;gt; xl destroy IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande ''lvcreate''.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que pour le répertoire ''home'', la manipulation est un peu plus simple que pour le répertoire ''var''. Tout d'abord, nous faisons appel à ''lvcreate'' de la manière suivante, depuis cordouan :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-var&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Il est possible de visualiser notre home grâce à la commande ''lsblk'' qui affiche tous les périphériques bloc.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque ''home'', ''xvda3'' et le disque ''var'', ''xvda4''.&lt;br /&gt;
&lt;br /&gt;
Puis, nous transformons nos disque en partitions ext4 :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mkfs -t ext4 /dev/xvda4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HOME ===&lt;br /&gt;
Pour la partition ''home'', il suffit de modifier le fichier /etc/fstab de la VM et d'y ajouter la ligne suivante pour que la partition soit montée au démarrage :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda3 /home ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
Le &amp;quot;0&amp;quot; indique que nous sauvegardons jamais et le &amp;quot;2&amp;quot; est propre à la sécurité de la partition.&lt;br /&gt;
Ainsi, un simple &amp;lt;pre&amp;gt; mount -a &amp;lt;/pre&amp;gt; suffit à monter à la partition. (Il est possible de la vérifier grâce à la commande ''df'')&lt;br /&gt;
&lt;br /&gt;
=== VAR ===&lt;br /&gt;
Pour la partition ''var'', c'est un peu plus compliqué car il faut monter la partition dans un /mnt temporaire avant de la déplacer. Nous effectuons donc les instructions suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/xvda4 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, nous modifions le fichier /etc/fstab de la même manière que pour la partition ''home'' :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda4 /var ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
Il est nécessaire d'installer ssh sur notre machine virtuelle :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install ssh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur DNS ==&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
=== Cryptage ===&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45920</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45920"/>
				<updated>2017-10-26T19:30:19Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* HOME */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Création ==&lt;br /&gt;
Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. &lt;br /&gt;
La création des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est important de modifier le fichier /etc/ssh/sshd_config en changeant la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin Prohibited &amp;lt;/pre&amp;gt;&lt;br /&gt;
par&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin yes &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la VM créée, il est possible de la démarrer de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl create /etc/xen/IMA5-Papaye/cfg &amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite, nous lançons la console de cette manière :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl console IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, pour sortir de cette dernière, nous faisons : &amp;lt;pre&amp;gt; ctrl + alt gr + ] &amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, pour éteindre la machine virtuelle : &amp;lt;pre&amp;gt; xl shutdown IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Et pour détruire la VM : &amp;lt;pre&amp;gt; xl destroy IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande ''lvcreate''.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que pour le répertoire ''home'', la manipulation est un peu plus simple que pour le répertoire ''var''. Tout d'abord, nous faisons appel à ''lvcreate'' de la manière suivante, depuis cordouan :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-var&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Il est possible de visualiser notre home grâce à la commande ''lsblk'' qui affiche tous les périphériques bloc.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque ''home'', ''xvda3'' et le disque ''var'', ''xvda4''.&lt;br /&gt;
&lt;br /&gt;
Puis, nous transformons nos disque en partitions ext4 :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mkfs -t ext4 /dev/xvda4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HOME ===&lt;br /&gt;
Pour la partition ''home'', il suffit de modifier le fichier /etc/fstab de la VM et d'y ajouter la ligne suivante pour que la partition soit montée au démarrage :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda3 /home ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
Le &amp;quot;0&amp;quot; indique que nous sauvegardons jamais et le &amp;quot;2&amp;quot; est propre à la sécurité de la partition.&lt;br /&gt;
Ainsi, un simple &amp;lt;pre&amp;gt; mount -a &amp;lt;/pre&amp;gt; suffit à monter à la partition. (Il est possible de la vérifier grâce à la commande ''df'')&lt;br /&gt;
&lt;br /&gt;
=== VAR ===&lt;br /&gt;
Pour la partition ''var'', c'est un peu plus compliqué car il faut monter la partition dans un /mnt temporaire avant de la déplacer. Nous effectuons donc les instructions suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/xvda4 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, nous modifions le fichier /etc/fstab de la même manière que pour la partition ''home'' :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda4 /var ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
== Serveur DNS ==&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
=== Cryptage ===&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45905</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45905"/>
				<updated>2017-10-26T18:58:29Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* HOME */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Création ==&lt;br /&gt;
Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. &lt;br /&gt;
La création des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est important de modifier le fichier /etc/ssh/sshd_config en changeant la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin Prohibited &amp;lt;/pre&amp;gt;&lt;br /&gt;
par&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin yes &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la VM créée, il est possible de la démarrer de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl create /etc/xen/IMA5-Papaye/cfg &amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite, nous lançons la console de cette manière :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl console IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, pour sortir de cette dernière, nous faisons : &amp;lt;pre&amp;gt; ctrl + alt gr + ] &amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, pour éteindre la machine virtuelle : &amp;lt;pre&amp;gt; xl shutdown IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Et pour détruire la VM : &amp;lt;pre&amp;gt; xl destroy IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande ''lvcreate''.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que pour le répertoire ''home'', la manipulation est un peu plus simple que pour le répertoire ''var''. Tout d'abord, nous faisons appel à ''lvcreate'' de la manière suivante, depuis cordouan :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-var&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Il est possible de visualiser notre home grâce à la commande ''lsblk'' qui affiche tous les périphériques bloc.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque ''home'', ''xvda3'' et le disque ''var'', ''xvda4''.&lt;br /&gt;
&lt;br /&gt;
Puis, nous transformons nos disque en partitions ext4 :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mkfs -t ext4 /dev/xvda4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HOME ===&lt;br /&gt;
Pour la partition ''home'', il suffit de modifier le fichier /etc/fstab de la VM et d'y ajouter la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda3 /home ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
Le &amp;quot;0&amp;quot; indique que nous sauvegardons jamais et le &amp;quot;2&amp;quot; est propre à la sécurité de la partition.&lt;br /&gt;
Ainsi, un simple &amp;lt;pre&amp;gt; mount -a &amp;lt;/pre&amp;gt; suffit à monter à la partition. (Il est possible de la vérifier grâce à la commande ''df'')&lt;br /&gt;
&lt;br /&gt;
=== VAR ===&lt;br /&gt;
Pour la partition ''var'', c'est un peu plus compliqué car il faut monter la partition dans un /mnt temporaire avant de la déplacer. Nous effectuons donc les instructions suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/xvda4 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, nous modifions le fichier /etc/fstab de la même manière que pour la partition ''home'' :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda4 /var ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
== Serveur DNS ==&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
=== Cryptage ===&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45904</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45904"/>
				<updated>2017-10-26T18:58:11Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* HOME */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Création ==&lt;br /&gt;
Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. &lt;br /&gt;
La création des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est important de modifier le fichier /etc/ssh/sshd_config en changeant la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin Prohibited &amp;lt;/pre&amp;gt;&lt;br /&gt;
par&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin yes &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la VM créée, il est possible de la démarrer de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl create /etc/xen/IMA5-Papaye/cfg &amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite, nous lançons la console de cette manière :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl console IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, pour sortir de cette dernière, nous faisons : &amp;lt;pre&amp;gt; ctrl + alt gr + ] &amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, pour éteindre la machine virtuelle : &amp;lt;pre&amp;gt; xl shutdown IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Et pour détruire la VM : &amp;lt;pre&amp;gt; xl destroy IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande ''lvcreate''.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que pour le répertoire ''home'', la manipulation est un peu plus simple que pour le répertoire ''var''. Tout d'abord, nous faisons appel à ''lvcreate'' de la manière suivante, depuis cordouan :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-var&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Il est possible de visualiser notre home grâce à la commande ''lsblk'' qui affiche tous les périphériques bloc.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque ''home'', ''xvda3'' et le disque ''var'', ''xvda4''.&lt;br /&gt;
&lt;br /&gt;
Puis, nous transformons nos disque en partitions ext4 :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mkfs -t ext4 /dev/xvda4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HOME ===&lt;br /&gt;
Pour la partition ''home'', il suffit de modifier le fichier /etc/fstab de la VM et d'y ajouter la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda3 /home ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
Le &amp;quot;0&amp;quot; indique que nous sauvegardons jamais et le &amp;quot;2&amp;quot; est propre à la sécurité de la partition.&lt;br /&gt;
Ainsi, un simple &amp;lt;pre&amp;gt; mount -a &amp;lt;/pre&amp;gt; suffit à monter à la partition. (Il est possible de la vérifier grâce à la commande &amp;lt;pre&amp;gt;df&amp;lt;/pre&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== VAR ===&lt;br /&gt;
Pour la partition ''var'', c'est un peu plus compliqué car il faut monter la partition dans un /mnt temporaire avant de la déplacer. Nous effectuons donc les instructions suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/xvda4 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, nous modifions le fichier /etc/fstab de la même manière que pour la partition ''home'' :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda4 /var ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
== Serveur DNS ==&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
=== Cryptage ===&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45903</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45903"/>
				<updated>2017-10-26T18:54:47Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Création ==&lt;br /&gt;
Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. &lt;br /&gt;
La création des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est important de modifier le fichier /etc/ssh/sshd_config en changeant la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin Prohibited &amp;lt;/pre&amp;gt;&lt;br /&gt;
par&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin yes &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la VM créée, il est possible de la démarrer de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl create /etc/xen/IMA5-Papaye/cfg &amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite, nous lançons la console de cette manière :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl console IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, pour sortir de cette dernière, nous faisons : &amp;lt;pre&amp;gt; ctrl + alt gr + ] &amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, pour éteindre la machine virtuelle : &amp;lt;pre&amp;gt; xl shutdown IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Et pour détruire la VM : &amp;lt;pre&amp;gt; xl destroy IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande ''lvcreate''.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que pour le répertoire ''home'', la manipulation est un peu plus simple que pour le répertoire ''var''. Tout d'abord, nous faisons appel à ''lvcreate'' de la manière suivante, depuis cordouan :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-var&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Il est possible de visualiser notre home grâce à la commande ''lsblk'' qui affiche tous les périphériques bloc.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque ''home'', ''xvda3'' et le disque ''var'', ''xvda4''.&lt;br /&gt;
&lt;br /&gt;
Puis, nous transformons nos disque en partitions ext4 :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mkfs -t ext4 /dev/xvda4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HOME ===&lt;br /&gt;
Pour la partition ''home'', il suffit de modifier le fichier /etc/fstab de la VM et d'y ajouter la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda3 /home ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
Le &amp;quot;0&amp;quot; indique que nous sauvegardons jamais et le &amp;quot;2&amp;quot; est propre à la sécurité de la partition.&lt;br /&gt;
Ainsi, un simple &amp;lt;pre&amp;gt; mount -a &amp;lt;/pre&amp;gt; suffit à monter à la partition. (Il est possible de la vérifier grâce à la commande &amp;lt;pre&amp;gt;df&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== VAR ===&lt;br /&gt;
Pour la partition ''var'', c'est un peu plus compliqué car il faut monter la partition dans un /mnt temporaire avant de la déplacer. Nous effectuons donc les instructions suivantes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/xvda4 /mnt&lt;br /&gt;
mv /var/* /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, nous modifions le fichier /etc/fstab de la même manière que pour la partition ''home'' :&lt;br /&gt;
&amp;lt;pre&amp;gt; /dev/xvda4 /var ext4 defaults 0 2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
== Serveur DNS ==&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
=== Cryptage ===&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45900</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45900"/>
				<updated>2017-10-26T18:46:14Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Création ==&lt;br /&gt;
Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. &lt;br /&gt;
La création des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est important de modifier le fichier /etc/ssh/sshd_config en changeant la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin Prohibited &amp;lt;/pre&amp;gt;&lt;br /&gt;
par&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin yes &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la VM créée, il est possible de la démarrer de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl create /etc/xen/IMA5-Papaye/cfg &amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite, nous lançons la console de cette manière :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl console IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, pour sortir de cette dernière, nous faisons : &amp;lt;pre&amp;gt; ctrl + alt gr + ] &amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, pour éteindre la machine virtuelle : &amp;lt;pre&amp;gt; xl shutdown IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Et pour détruire la VM : &amp;lt;pre&amp;gt; xl destroy IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande ''lvcreate''.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que pour le répertoire ''home'', la manipulation est un peu plus simple que pour le répertoire ''var''. Tout d'abord, nous faisons appel à ''lvcreate'' de la manière suivante, depuis cordouan :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-var&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Il est possible de visualiser notre home grâce à la commande ''lsblk'' qui affiche tous les périphériques bloc.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque ''home'', ''xvda3'' et le disque ''var'', ''xvda4''.&lt;br /&gt;
&lt;br /&gt;
Puis, nous transformons nos disque en partitions ext4 :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvda3&lt;br /&gt;
mkfs -t ext4 /dev/xvda4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
== Serveur DNS ==&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
=== Cryptage ===&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45899</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45899"/>
				<updated>2017-10-26T18:44:56Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Création */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Création ==&lt;br /&gt;
Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. &lt;br /&gt;
La création des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est important de modifier le fichier /etc/ssh/sshd_config en changeant la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin Prohibited &amp;lt;/pre&amp;gt;&lt;br /&gt;
par&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin yes &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la VM créée, il est possible de la démarrer de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl create /etc/xen/IMA5-Papaye/cfg &amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite, nous lançons la console de cette manière :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl console IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, pour sortir de cette dernière, nous faisons : &amp;lt;pre&amp;gt; ctrl + alt gr + ] &amp;lt;/pre&amp;gt;&lt;br /&gt;
Enfin, pour éteindre la machine virtuelle : &amp;lt;pre&amp;gt; xl shutdown IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Et pour détruire la VM : &amp;lt;pre&amp;gt; xl destroy IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande ''lvcreate''.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que pour le répertoire ''home'', la manipulation est un peu plus simple que pour le répertoire ''var''. Tout d'abord, nous faisons appel à ''lvcreate'' de la manière suivante, depuis cordouan :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-var&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Il est possible de visualiser notre home grâce à la commande ''lsblk'' qui affiche tous les périphériques bloc.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque ''home'', ''xvda3'' et le disque ''var'', ''xvda4''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
== Serveur DNS ==&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
=== Cryptage ===&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45898</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45898"/>
				<updated>2017-10-26T18:44:26Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Création */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Création ==&lt;br /&gt;
Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. &lt;br /&gt;
La création des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est important de modifier le fichier /etc/ssh/sshd_config en changeant la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin Prohibited &amp;lt;/pre&amp;gt;&lt;br /&gt;
par&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin yes &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la VM créée, il est possible de la démarrer de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl create /etc/xen/IMA5-Papaye/cfg &amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite, nous lançons la console de cette manière :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl console IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Puis, pour sortir de cette dernière, nous faisons : ctrl + alt gr + ]&lt;br /&gt;
Enfin, pour éteindre la machine virtuelle : xl shutdown IMA5-Papaye&lt;br /&gt;
Et pour détruire la VM : xl destroy IMA5-Papaye.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande ''lvcreate''.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que pour le répertoire ''home'', la manipulation est un peu plus simple que pour le répertoire ''var''. Tout d'abord, nous faisons appel à ''lvcreate'' de la manière suivante, depuis cordouan :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-var&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Il est possible de visualiser notre home grâce à la commande ''lsblk'' qui affiche tous les périphériques bloc.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque ''home'', ''xvda3'' et le disque ''var'', ''xvda4''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
== Serveur DNS ==&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
=== Cryptage ===&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45897</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45897"/>
				<updated>2017-10-26T18:41:17Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Création */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Création ==&lt;br /&gt;
Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. &lt;br /&gt;
La création des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est important de modifier le fichier /etc/ssh/sshd_config en changeant la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin Prohibited &amp;lt;/pre&amp;gt;&lt;br /&gt;
par&lt;br /&gt;
&amp;lt;pre&amp;gt; PermitRootLogin yes &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois la VM créée, il est possible de la démarrer de la manière suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl create /etc/xen/IMA5-Papaye/cfg &amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite, nous démarrons la console :&lt;br /&gt;
&amp;lt;pre&amp;gt; xl console IMA5-Papaye &amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour sortir de cette console : ctrl + alt gr + ]&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande ''lvcreate''.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que pour le répertoire ''home'', la manipulation est un peu plus simple que pour le répertoire ''var''. Tout d'abord, nous faisons appel à ''lvcreate'' de la manière suivante, depuis cordouan :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-var&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Il est possible de visualiser notre home grâce à la commande ''lsblk'' qui affiche tous les périphériques bloc.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque ''home'', ''xvda3'' et le disque ''var'', ''xvda4''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
== Serveur DNS ==&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
=== Cryptage ===&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45896</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45896"/>
				<updated>2017-10-26T18:38:17Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Installation de la machine virtuelle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Création ==&lt;br /&gt;
Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. &lt;br /&gt;
La création des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est important de modifier le fichier /etc/ssh/sshd_config en changeant la ligne suivante :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PermitRootLogin Prohibited &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
par&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PermitRootLogin yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande ''lvcreate''.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que pour le répertoire ''home'', la manipulation est un peu plus simple que pour le répertoire ''var''. Tout d'abord, nous faisons appel à ''lvcreate'' de la manière suivante, depuis cordouan :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-var&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Il est possible de visualiser notre home grâce à la commande ''lsblk'' qui affiche tous les périphériques bloc.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque ''home'', ''xvda3'' et le disque ''var'', ''xvda4''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L10G -IMA5-Papaye-home&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
== Serveur DNS ==&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
=== Cryptage ===&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45889</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45889"/>
				<updated>2017-10-26T18:20:47Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Installation de la machine virtuelle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
La gestion des machines virtuelles (VMs) s'effectue grâce à la commande &amp;quot;xen&amp;quot;. Ainsi, la création de notre VM passe ar la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau ''insecure'' qui n'est pas notre réseau définitif.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=193.48.57.171 --dir=/usr/local/xen --dist=jessie&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
== Serveur DNS ==&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
=== Cryptage ===&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45888</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45888"/>
				<updated>2017-10-26T18:12:47Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Tâches communes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;br /&gt;
&lt;br /&gt;
== Installation de la machine virtuelle ==&lt;br /&gt;
&lt;br /&gt;
== Serveur SSH ==&lt;br /&gt;
== Serveur DNS ==&lt;br /&gt;
== Sécurisation du site web via un certificat ==&lt;br /&gt;
== Sécurisation du DNS via un DNSSEC ==&lt;br /&gt;
&lt;br /&gt;
== Sécurisation et cryptage des données ==&lt;br /&gt;
=== Sécurisation via RAID5 ===&lt;br /&gt;
=== Cryptage ===&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45887</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45887"/>
				<updated>2017-10-26T18:09:59Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Tâche commune */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâches communes =&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45886</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45886"/>
				<updated>2017-10-26T18:09:33Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Tâche spécifique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
== Présentation de la tâche ==&lt;br /&gt;
&lt;br /&gt;
=== Définition d'un DNSSEC ===&lt;br /&gt;
&lt;br /&gt;
== Installation du matériel ==&lt;br /&gt;
&lt;br /&gt;
= Tâche commune =&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45885</id>
		<title>Cahier 2017 groupe n°6</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2017_groupe_n%C2%B06&amp;diff=45885"/>
				<updated>2017-10-26T18:08:15Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : Page créée avec « = Tâche spécifique =  = Tâche commune = »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tâche spécifique =&lt;br /&gt;
&lt;br /&gt;
= Tâche commune =&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2017/2018&amp;diff=45884</id>
		<title>TP sysres IMA5sc 2017/2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2017/2018&amp;diff=45884"/>
				<updated>2017-10-26T18:07:30Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Répartition des binômes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Répartition des binômes ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Cahier&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Elèves&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Tâche particulière&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Cahier 2017 groupe n°1]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Marius TRIMBUR Loïc TOMBAZZI &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Configuration Routeurs &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Cahier 2017 groupe n°2]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Antoine ARNAUDET Vivian SENAFFE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Configuration commutateur &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Cahier 2017 groupe n°3]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Bacem HAGUI Alexandre HUET&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Configuration point d'accès&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Cahier 2017 groupe n°4]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Alexis MACHEREZ, Edmur LOPES&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Systèmes sous linux pour réinstallation rapide&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Cahier 2017 groupe n°5]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Nicky UNG, Hugo DELATTE&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Gestion de conteneurs en réseau&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Cahier 2017 groupe n°6]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Lutécia DAMIENS et Alexis DORIAN &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Tests approfondis sur le DNSSEC &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Cahier 2017 groupe n°7]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[Cahier 2017 groupe n°8]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P37&amp;diff=42513</id>
		<title>IMA4 2016/2017 P37</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P37&amp;diff=42513"/>
				<updated>2017-05-18T16:16:32Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Fichiers Rendus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Cahier des charges''' ==&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
L’objectif de ce projet est de fabriquer une gamelle pour animaux connectée. Pour ce faire, trois grands axes sont à dégager : une partie informatique, électronique et mécanique. &lt;br /&gt;
&lt;br /&gt;
==== Partie mécanique ====&lt;br /&gt;
'''Structure du système'''&lt;br /&gt;
*Le réservoir. Deux systèmes peuvent être réalisés : &lt;br /&gt;
**Un système de trappes pour le distributeur : deux trappes l’une en dessous de l’autre. &lt;br /&gt;
**Un système de vis sans fin qui permettrait d’alimenter la gamelle.&lt;br /&gt;
&lt;br /&gt;
*La gamelle. Deux méthodes sont possibles :&lt;br /&gt;
**Mesure du poids en prenant une balance déjà existante et en récupérant et en traitant les sorties.&lt;br /&gt;
**Passer par un système d’estimation de volumes. Dans la gamelle, il y aurait des capteurs permettant de connaître la quantité en volume présente dans la gamelle.&lt;br /&gt;
&lt;br /&gt;
Globalement, ces systèmes sont susceptibles de changer suivant l'état de l'art qui sera réalisé par la suite.&lt;br /&gt;
&lt;br /&gt;
==== Partie électronique ====&lt;br /&gt;
*Alimentation. Deux systèmes sont envisagés pour l’alimentation : Un système nomade avec une batterie  pour permettre d’avoir une gamelle déplaçable ou un système fixe alimenté par le secteur ou en usb.&lt;br /&gt;
**Batterie : Nous avons besoin d’une batterie qui peut garder l’énergie suffisamment longtemps pour éviter de devoir recharger la gamelle trop souvent. Une durée de vie d’une semaine est envisagée au minimum.&lt;br /&gt;
**Secteur&lt;br /&gt;
&lt;br /&gt;
*Interface Homme/machine&lt;br /&gt;
**Capteurs&lt;br /&gt;
***Des LEDs couplées à un phototransistor pourraient permettre de connaître la présence ou l’absence de croquettes dans la gamelle.&lt;br /&gt;
***Ultrason pour connaître la présence ou non de l'animal devant la gamelle&lt;br /&gt;
***Autres.&lt;br /&gt;
**Indicateurs : Des indicateurs peuvent être implantés sur le système physique : des LEDS indicatrices de l’état de batterie (si l'alimentation nomade est privilégiée) ou de l’état du réservoir (plein ou vide) sont envisagés.&lt;br /&gt;
&lt;br /&gt;
==== Partie informatique ====&lt;br /&gt;
*Unité de contrôle&lt;br /&gt;
**Utilisation d’un arduino avec un module wifi dans le but de réaliser une communication externe via une application mobile Androïd par exemple. &lt;br /&gt;
**Utilisation d’un raspberry avec création d’un serveur Apache pour permettre de communiquer avec l’utilisateur.&lt;br /&gt;
**Utilisation d'un module communiquant autre que les deux cités précédemment.&lt;br /&gt;
*En bonus :&lt;br /&gt;
**Création d’un système de contrôle à distance en mettant en place une caméra afin que l’utilisateur puisse avoir des images à distance, ou simplement une caméra série afin d'obtenir des images de contrôle. Ce système n’aura pas besoin d’être temps réel. Il pourra être implémenté grâce au serveur apache de la raspberry, si l’utilisation de celle-ci est retenue.&lt;br /&gt;
**Des actionneurs pour permettre à l’utilisateur interagir avec son chat à distance (Buzzer, laser, son, …).&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel et logiciel===&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous avons réalisé l'état de l'art des gamelles connectées déjà réalisées et commercialisées. Voici le lien PDF permettant d’accéder à ce fichier.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Etat_de_l_art.pdf]]&lt;br /&gt;
&lt;br /&gt;
Finalement, nos choix techniques sont les suivants : &lt;br /&gt;
*Matériel&lt;br /&gt;
**Mécanique&lt;br /&gt;
***Un système d’hélice contrôlée par un moteur permettant de déverser des croquettes en quantités connues. (Un schéma du système sera réalisé rapidement).&lt;br /&gt;
**Électronique&lt;br /&gt;
***Un adaptateur capable de générer une tension de 5V à partir du réseau.&lt;br /&gt;
***Des LEDs infrarouges couplées à des photodiodes afin de contrôler l'état de la gamelle et du réservoir.&lt;br /&gt;
***Un servomoteur 360° afin de faire tourner le système d'hélice et permettant ainsi de déverser une dose de croquettes dans la gamelle.&lt;br /&gt;
***Des LEDs permettant de visualiser l'état du système (alimentation du circuit, réservoir vide,...) et les résistances qui vont de pair.&lt;br /&gt;
***Un capteur Ultrason afin de pouvoir vérifier la présence ou non d'un animal devant la gamelle.&lt;br /&gt;
**Informatique&lt;br /&gt;
***Un arduino Méga car l'arduino Uno sera limité lorsque nous communiquerons entre le module wifi et l'application mobile.&lt;br /&gt;
***Un module Wifi ESP8266.&lt;br /&gt;
***Une carte shield SD afin de stocker toutes les variables de l'utilisateur et de son chat.&lt;br /&gt;
***Un module horloge temps réel (RTC) afin de pouvoir programmer en fonction de l'heure qu'il est si le choix de l'utilisateur porte sur le réapprovisionnement de la gamelle de cette manière là.&lt;br /&gt;
&lt;br /&gt;
En solution de secours : &lt;br /&gt;
*Un rapsberry&lt;br /&gt;
*Une balance à modifier manuellement&lt;br /&gt;
&lt;br /&gt;
*Logiciel&lt;br /&gt;
**Solidworks afin de pouvoir concevoir les différentes parties du système mécanique.&lt;br /&gt;
**Les logiciels de programmation (Sublime, vim, emacs, gcc...)&lt;br /&gt;
&lt;br /&gt;
*Autres&lt;br /&gt;
**Utilisation des machines mises à disposition des étudiants au Fablab : découpeuse laser et imprimante 3D pour la conception de prototypes.&lt;br /&gt;
&lt;br /&gt;
==Tableau==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Composant !! Quantité requise !! Disponible (M. Redon) ? !! À commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |Émetteur et récepteur infrarouge/photodiode&lt;br /&gt;
 |Entre 6 et 7 au minimum&lt;br /&gt;
 |Une partie&lt;br /&gt;
 |Oui&lt;br /&gt;
 |1 LED infrarouge et 1 photodiode ont été empruntés&lt;br /&gt;
 |-&lt;br /&gt;
 |Adaptateur PS512S&lt;br /&gt;
 |1&lt;br /&gt;
 |Non&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Lien Gotronic : [http://www.gotronic.fr/art-adaptateur-ps512s-19913.htm]&lt;br /&gt;
 |-&lt;br /&gt;
 |Shield carte SD&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Nous avons eu une carte shield Ethernet - SD ainsi que la carte SD.&lt;br /&gt;
 |-&lt;br /&gt;
 |Module horloge temps réel (RTC)&lt;br /&gt;
 |1&lt;br /&gt;
 |Non&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Lien Gotronic : [http://www.gotronic.fr/art-module-horloge-temps-reel-ada3296-25536.htm]&lt;br /&gt;
 |-&lt;br /&gt;
 |Capteur Ultrason&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Emprunté&lt;br /&gt;
 |-&lt;br /&gt;
 |LEDs&lt;br /&gt;
 |minimum 3&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Plusieurs empruntées&lt;br /&gt;
 |-&lt;br /&gt;
 |Résistances&lt;br /&gt;
 |Une vingtaine&lt;br /&gt;
 |Oui (C205)&lt;br /&gt;
 |Non&lt;br /&gt;
 |Plusieurs empruntées&lt;br /&gt;
 |-&lt;br /&gt;
 |Arduino méga&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Un arduino méga et un arduino uno (pour les tests) ont été empruntés&lt;br /&gt;
 |-&lt;br /&gt;
 |ESP8266&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |La version 012 a été empruntée&lt;br /&gt;
 |-&lt;br /&gt;
 |Servomoteur 360&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Emprunté&lt;br /&gt;
 |-&lt;br /&gt;
 |Solution de secours : Rapsberry&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Pas encore emprunté, solution de secours&lt;br /&gt;
 |-&lt;br /&gt;
 |Solution de secours : Balance&lt;br /&gt;
 |1&lt;br /&gt;
 |Non&lt;br /&gt;
 |Non&lt;br /&gt;
 |Pas encore emprunté, solution de secours&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
*Étude et réalisation d'un système à base de LEDs infrarouges et de photodiodes afin de pouvoir estimer si la gamelle est vide ou pleine. De même pour le réservoir.&lt;br /&gt;
**Circuit d'émission : LED Infrarouge&lt;br /&gt;
**Circuit de réception : Photodiode&lt;br /&gt;
**Étude des emplacements stratégiques dans la gamelle et le réservoir&lt;br /&gt;
*Réalisation d'un prototype de gamelle&lt;br /&gt;
**Conception 3D de l'hélice sur laquelle le servomoteur va venir se greffer&lt;br /&gt;
**Conception 3D de la gamelle complète&lt;br /&gt;
**Découpage/impression de prototypes&lt;br /&gt;
*Étude de l'ESP8266&lt;br /&gt;
*Tests d'écriture et de lecture sur la carte SD depuis l'arduino&lt;br /&gt;
*Étude du module d'horloge temps réel (RTC)&lt;br /&gt;
*Contrôle des différents capteurs en incluant le servomoteur&lt;br /&gt;
*Création de l'application mobile&lt;br /&gt;
*Mise en relation des différentes parties informatiques du système&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 et + !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 3H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Réalisation de l'état de l'art&lt;br /&gt;
| &lt;br /&gt;
|6H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|-&lt;br /&gt;
|Échange quant aux technologies et au système mécanique à choisir&lt;br /&gt;
| &lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste et de la répartition des tâches&lt;br /&gt;
| &lt;br /&gt;
|2H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2H00&lt;br /&gt;
|-&lt;br /&gt;
| Recherches quant aux échelles de dosage (Quelles quantités de nourriture consomment les chats en fonction de leur poids ?)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste de matériel et établissement des besoins (meilleur rapport besoin/prix étudié)&lt;br /&gt;
| &lt;br /&gt;
|5H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5H00&lt;br /&gt;
|-&lt;br /&gt;
| Modèle 3D de l'hélice&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Modèle 3D du réservoir&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|-&lt;br /&gt;
| Étude des LEDs Infrarouge et des photodiodes&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Tests sur le module wifi ESP8266&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|8H00&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|16H00&lt;br /&gt;
|-&lt;br /&gt;
| Tests de lecture et écriture sur la carte SD&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|6H00&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|16H00&lt;br /&gt;
|-&lt;br /&gt;
| Étude du servomoteur et réalisation d'un programme le contrôlant en C&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Prototype de l'hélice et du réservoir&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|-&lt;br /&gt;
| Achat de planches pour la réalisation des prototypes de la gamelle en bois&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Étude du capteur Infrarouge et réalisation d'un programme le contrôlant en C&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main d'androïd studio et réalisation d'une ébauche d'application mobile pour notre gamelle connectée&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|10H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|13H00&lt;br /&gt;
|-&lt;br /&gt;
| Création du réseau établi entre le système et l'application android (problème avec le point d'accès)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|8H00&lt;br /&gt;
|8H00&lt;br /&gt;
|4H00&lt;br /&gt;
|24H00&lt;br /&gt;
|-&lt;br /&gt;
| Assemblage et finition de la partie mécanique&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|8H00&lt;br /&gt;
|6H00&lt;br /&gt;
|18H00&lt;br /&gt;
|-&lt;br /&gt;
| Tests sur le module temps réel&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Création de la base de donnée de l'application android et du singleton&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|10H00&lt;br /&gt;
|10H00&lt;br /&gt;
|-&lt;br /&gt;
| Liaison ESP8266 et Arduino (Software Serial) + High shifter&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8H00&lt;br /&gt;
|8H00&lt;br /&gt;
|-&lt;br /&gt;
| Application mobile : la page des configurations&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|10H00&lt;br /&gt;
|10H00&lt;br /&gt;
|-&lt;br /&gt;
| Application mobile : la page des études statistiques&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8H00&lt;br /&gt;
|8H00&lt;br /&gt;
|-&lt;br /&gt;
| Étude du capteur ultrason et réalisation d'un programme le contrôlant en C&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| TOTAL&lt;br /&gt;
|3H00&lt;br /&gt;
|17H00&lt;br /&gt;
|10H00&lt;br /&gt;
|8H00&lt;br /&gt;
|14H00&lt;br /&gt;
|14H00&lt;br /&gt;
|13H00&lt;br /&gt;
|21H00&lt;br /&gt;
|12H00&lt;br /&gt;
|16H00&lt;br /&gt;
|49H00&lt;br /&gt;
|177H&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Préambule===&lt;br /&gt;
L’internet des objets (IoT) représente l’extension d’internet à des choses et à des lieux du monde physique (wikipédia). Les objets connectés en l’occurrence sont aujourd’hui un enjeu important. De plus en plus d’objets initialement banals se voient être connectés afin d’en améliorer l’utilisation. Lors de ce projet, nous nous intéressons aux animaux domestiques. Lorsque nous nous absentons, nous n’avons aucun contrôle sur ce qui se passe à la maison. Ainsi, nous ne pouvons pas savoir si notre animal mange ou se porte bien. De plus, nous n’avons aucun retour sur ce que notre chien ou chat notamment a consommé. Est-ce qu’il se nourrit bien ? À quelle fréquence ? Dès lors, il est impensable de s’absenter sur le long terme ou un week-end sans faire intervenir un tiers pour nourrir notre cher animal. Nous pouvons également penser à des animaux qui seraient dangereusement en surpoids. Nous voudrions surveiller leur alimentation mais cela demande une surveillance constante qui n’est pas forcément envisageable. L’objectif de ce projet est de répondre à ces questions et besoins. Et si nous connections une gamelle à une application ?&lt;br /&gt;
&lt;br /&gt;
[[Image:Gamelle-inox-couleur-antiderapante-6-tailles.jpg|center|200px]].&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
L’objectif de la première semaine a été tout d’abord de lister les différentes tâches à réaliser tout au long du projet. Cette liste sera bien sûr modifiable en fonctions des difficultés ou contraintes rencontrées au cours du projet. Cette liste a été rajoutée à la suite du cahier des charges.&lt;br /&gt;
Ensuite, un état de l’art a été réalisé. Nous avons ainsi pu clairement définir le schéma de principe de notre gamelle et le mécanisme de réapprovisionnement choisi. Voici de nouveau le lien vers notre état de l'art : [[Fichier:Etat_de_l_art.pdf]]&lt;br /&gt;
&lt;br /&gt;
Faisons un point rapide sur ces choix. Un système d’ « hélice » est privilégié afin de réapprovisionner la gamelle. Il s’agit en fait d’un cylindre plat qui sera placé en sortie du réservoir. Le réservoir sera moins large en sortie vers la gamelle qu’à son sommet, en entrée des croquettes. Cela permettra aux croquettes de s’introduire facilement dans notre système d’ « hélice ». Ce cylindre serait  troué de part et d’autre afin de pouvoir contenir une certaine dose de croquettes. Ainsi, nous pouvons réapprovisionner la gamelle en fonction de ce dosage.&lt;br /&gt;
Enfin, nous nous sommes attardés sur l’organisation et la répartition de ces tâches afin de pouvoir détailler une liste de matériel. Cette dernière a été ajoutée au wiki à la suite de la liste des tâches.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Lors de cette deuxième semaine, plusieurs tâches ont été réalisées. Tout d’abord, un début de modélisation du système a été effectué sous ''Solidworks''. Pour ce faire, nous avons dû décider de combien de grammes de croquettes à la fois nous pouvons réapprovisionner la gamelle. Ainsi, nous avons effectué des recherches quant à la consommation de nourriture journalière d’un chat. Étant donné qu’un chien consomme davantage de croquettes qu’un chat, nous nous basons sur la consommation de ce dernier, quitte à donner plusieurs doses si l’animal est un chien. Voici un tableau sur lequel nous allons nous baser :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|+ '''Tableau de référence'''&lt;br /&gt;
|-&lt;br /&gt;
! scope=col | Poids du chat adulte&lt;br /&gt;
! scope=col | 1-3 kg&lt;br /&gt;
! scope=col | 4 kg&lt;br /&gt;
! scope=col | 5 kg&lt;br /&gt;
! scope=col | 6 kg&lt;br /&gt;
|-&lt;br /&gt;
|'''Quantités journalières (en grammes)'''&lt;br /&gt;
|15-50g&lt;br /&gt;
|50-65g&lt;br /&gt;
|65-70g&lt;br /&gt;
|70-90g&lt;br /&gt;
|-&lt;br /&gt;
|'''Quantités journalières (avec un bol doseur de 300 mL)'''&lt;br /&gt;
|x 0.1 - 0.3&lt;br /&gt;
|x 0.3 - 0.4&lt;br /&gt;
|x 0.4&lt;br /&gt;
|x 0.4 - 0.6&lt;br /&gt;
|}&lt;br /&gt;
Ce tableau marche pour les croquettes Ultra premium direct en particulier.&lt;br /&gt;
&lt;br /&gt;
Grâce à ce tableau, nous pensons que réapprovisionner la gamelle par dose de 15g est approprié. Or,[[Image:Formule1.png|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Maintenant, il est nécessaire de calculer le rayon de l’hélice permettant au système de doser 15g à la fois.&lt;br /&gt;
&lt;br /&gt;
Nous voulons pouvoir doser 15g : [[Image:Formule2.png|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Posons n = 4 car nous souhaitons avec 2 doseurs, un de chaque côté de l’hélice : [[Image:Formule3.png|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Prenons à présent h = 4 cm ; h étant la largeur de l’ouverture conduisant à la gamelle. Nous avons alors : &lt;br /&gt;
&lt;br /&gt;
[[Image:Formule4.png|center|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Voici une image de l'hélice modélisée en conséquent : &lt;br /&gt;
&lt;br /&gt;
[[Image:Hélice_image.jpg|vignette|center|500px|Modélisation de l'hélice en 3D.]].&lt;br /&gt;
&lt;br /&gt;
*D’un autre côté, des tests ont été réalisés en ce qui concerne le dispositif LED infrarouge-phototransistor.&lt;br /&gt;
&lt;br /&gt;
'''Présentation de l'expérimentation :'''&lt;br /&gt;
&lt;br /&gt;
Nous utilisons une LED IR SFH 4554 pour l’émission et une pour la réception. Pour des raisons de simplicité de fonctionnement, l'allumage des LEDs ne sera pas piloté. Elles seront continuellement allumées (aucune information n'est à transmettre).&lt;br /&gt;
&lt;br /&gt;
À la réception, nous utilisons une photodiode en ''pull-down''  avec une résistance pour contrôler l'intensité dans cette dernière. Nous relions ce montage à un arduino pour vérifier jusqu'à quelle portée nous détectons le signal de la LED émettrice. Grâce à cela, nous serons à même de définir les emplacements des émetteurs/récepteurs dans la gamelle et dans le réservoir ainsi que  la taille de ces derniers. Voici le schéma de principe :&lt;br /&gt;
&lt;br /&gt;
[[Image:Schema_diode_phototransistor.png|vignette|center|500px|Schéma de principe.]].&lt;br /&gt;
&lt;br /&gt;
'''Test rapide de la portée :'''&lt;br /&gt;
&lt;br /&gt;
Calcul des résistances :&lt;br /&gt;
&lt;br /&gt;
Réception : une résistance de 4.7 kΩ est placée.&lt;br /&gt;
&lt;br /&gt;
Émission : nous alimentons la LED en 5 V. Elle possède un courant &amp;lt;math&amp;gt;U_d = 1.2 V&amp;lt;/math&amp;gt; pour 20 mA et supporte 100 mA continue. À 100 mA, &amp;lt;math&amp;gt;U_d = 1.4 V&amp;lt;/math&amp;gt;. Pour être certains d'avoir la meilleure portée possible, nous nous rapprochons des 100 mA. Ainsi, pour le dimensionnement de R nous obtenons :&lt;br /&gt;
&lt;br /&gt;
[[Image:Formule5.png|center|upright=50]]&lt;br /&gt;
1. A.N. : &amp;lt;math&amp;gt;V_{CC} = 5V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;U_d = 1.4V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;I_f = 0.1A&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
R = 36Ω. Soit, en normalisant, '''R = 47Ω'''.&lt;br /&gt;
&lt;br /&gt;
Avec ces données, nous obtenons une portée maximale de 30 cm.&lt;br /&gt;
&lt;br /&gt;
2. Nous faisons un autre test avec une intensité plus basse :&lt;br /&gt;
A.N. : &amp;lt;math&amp;gt;V_{CC} = 5V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;U_d = 1.2V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;I_f = 001A&amp;lt;/math&amp;gt;&lt;br /&gt;
R = 380Ω. Soit, en normalisant, '''R = 330Ω'''.&lt;br /&gt;
Avec ces données, nous obtenons une portée maximale de 22 cm.&lt;br /&gt;
&lt;br /&gt;
L'intérêt de connaître cette portée est que nous allons pouvoir adapter la taille du réservoir et de la gamelle afin de rendre notre dispositif réalisable. À titre de rappel, nous utilisons ce système afin de savoir si la gamelle est vide (Ce système fonctionnant en tout ou rien) et également afin de connaître le niveau approximatif des croquettes dans le réservoir. &lt;br /&gt;
&lt;br /&gt;
*Enfin, pour travailler, nous avons à notre disposition deux arduino : un arduino ''uno'' et un arduino ''méga''. L’utilisation du module wifi ESP8266 nous impose de travailler avec un arduino ''méga''. Cependant, les tests tels que pour le système LED infrarouge-phototransistor peuvent être réalisés indépendamment sur l’arduino ''uno''. Ainsi, nous pouvons travailler à deux en parallèle sur des arduino différents. Cependant, il a fallu réadapter le makefile permettant de flasher l’arduino à un arduino ''méga'' car celui que nous possédions ne fonctionnait que pour un arduino ''uno''. (Un « -D » étant nécessaire dans la ligne de commande pour flasher l’arduino dans le cas d’un ''méga'', qui ne l’était pas pour l’arduino ''uno''.)&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Lors de cette troisième semaine, nous réalisé des tests sur les deux arduinos. &lt;br /&gt;
&lt;br /&gt;
==== Le servomoteur et sa PWM ====&lt;br /&gt;
Tout d’abord, le premier test porte sur le servomoteur prévu pour faire tourner le système d’hélice et réapprovisionner la gamelle.&lt;br /&gt;
&lt;br /&gt;
Le servomoteur que nous utilisons est un servomoteur à courant continue. Il a l’avantage de pouvoir être contrôlé en vitesse et de pouvoir tourner à plus de 180°. &lt;br /&gt;
&lt;br /&gt;
Pour alimenter un servomoteur, il faut brancher ses trois connectiques sur l’alimentation 5V de l’arduino, sur la masse et sur une broche PWM. &lt;br /&gt;
&lt;br /&gt;
En effet, la consigne envoyée à un servomoteur est de type PWM (Pulse Width Modulation). Ce signal permet de faire varier la durée en état « haut » du signal grâce à la consigne que nous lui donnons. Voici un schéma montrant quelques exemples de modifications de la durée d’un état « haut » :&lt;br /&gt;
[[Image:PWM explications.png|center|300px]].&lt;br /&gt;
&lt;br /&gt;
La difficulté a été de programmer ce servomoteur en passant par le langage C. En effet, avec arduino IDE, il est plus aisé de le faire puisqu’il existe une bibliothèque servo.h permettant de programmer des servomoteurs facilement. En C, il a fallu se pencher sur le fonctionnement et le contrôle d’une PWM grâce aux différents registres de l’arduino. &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, il faut configurer les registres TCCR1A et TCCR1B afin d’activer la PWM en mode non-inversé et à fréquence élevée.  &lt;br /&gt;
&lt;br /&gt;
Enfin, il faut activer la PIN5 du port B en sortie (Pin PWM).&lt;br /&gt;
&lt;br /&gt;
Rentrons un peu plus dans le détail quant à la configuration des deux registres TCCR1A et TCCR1B.&lt;br /&gt;
TCCR0A = 1000 0001 = 0x81 et TCCR0B = 0000 0101  = 0x05&lt;br /&gt;
[[Image:TCCR0A.png|center|650px]].&lt;br /&gt;
[[Image:TCCR0B.png|center|650px]].&lt;br /&gt;
&lt;br /&gt;
TCCR0A : &lt;br /&gt;
   COM0A1 = 1 COM0A0 = 0 =&amp;gt; non-inverting mode&lt;br /&gt;
&lt;br /&gt;
   COM0B1 = 0 COM0B0 = 0 =&amp;gt; mode standard&lt;br /&gt;
&lt;br /&gt;
   WGM01 = 0 WGM00 = 1 =&amp;gt; PWM mode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TCCR0B : &lt;br /&gt;
   FOC0A = 0 FOC0B = 0 =&amp;gt; car PWM mode&lt;br /&gt;
&lt;br /&gt;
   WGM02 = 0 =&amp;gt; PWM mode&lt;br /&gt;
&lt;br /&gt;
   SC02 = 1 CS01 = 0 CS00 = 1 =&amp;gt; clk (entrée/sortie) /1024&lt;br /&gt;
&lt;br /&gt;
Pour connaître ces résultats, les tableaux descriptifs sont disponibles dans la datasheet de l'arduino méga, accessible dans les références à la fin du wiki.&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps, en modifiant directement le registre OCR0A, nous envoyons une commande au servomoteur. La durée en état « haut » est ainsi proportionnelle à la consigne saisie dans OCR0A.&lt;br /&gt;
&lt;br /&gt;
Le servomoteur tourne bien différemment en fonction de la valeur saisie dans OCR0A. Maintenant, il reste à comprendre comment contrôler de manière précise le servomoteur et sa position en fonction de la consigne.&lt;br /&gt;
&lt;br /&gt;
==== Le capteur ultrason ====&lt;br /&gt;
&lt;br /&gt;
=====  Présentation =====&lt;br /&gt;
Nous pensons utiliser le module HC-SR04 couplé à un arduino pour détecter la présence de l’animal devant la gamelle. Cela servira à ne pas prendre en considération le contenu de la gamelle pour savoir si elle est vide ou non lorsque l’animal se nourrit. Ou encore, cela aidera afin de pouvoir réaliser un suivi à savoir : à quel moment le chat a-t-il été manger ?&lt;br /&gt;
&lt;br /&gt;
En lisant la documentation technique du HC -SR04, nous en tirons ceci :&lt;br /&gt;
&lt;br /&gt;
[[Image:US data.png|center|550px]].&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement du système est simple et il suffit d'envoyer un message de 10µs minimum avec une écart de 60 ms minimum pour recevoir une réponse du capteur.&lt;br /&gt;
&lt;br /&gt;
Le capteur renvoi un signal qui a un temps proportionnel à sa distance par rapport à l’obstacle.&lt;br /&gt;
&lt;br /&gt;
=====  Expérimentation =====&lt;br /&gt;
Nous rajoutons des LEDs afin d’avoir une indication lorsqu’un signal est envoyé. La valeur reçue est visualisée à l’aide de l’outil minicom, la valeur étant envoyée sur le port série. Nous remarquons que le système fonctionne même si des imperfections de mesure subsistent (dues notamment au programme). La précision du système suffit néanmoins à  détecter le chat devant la gamelle.&lt;br /&gt;
&lt;br /&gt;
=====  Problème lié à l'étude =====&lt;br /&gt;
Le module utilise une fréquence de 40khz.&lt;br /&gt;
Suite à des vérifications, les chats et les chiens entendent des sons pouvant aller jusqu'à 60khz. &lt;br /&gt;
Une recherche a été effectuée sur les barrières repoussant les chiens et les chats. Malgré le peu de documentation technique que nous avons trouvé, nous remarquons  que les fréquences utilisées sont de l'ordre de 25 khz. Ces fréquences sont bien loin des 40khz de notre système. Cependant, une petite expérimentation a été réalisée sur un chat de 6 ans à l’aide d’une application smartphone générant des ultrasons. Il s’avère que le chat est dérangé par ces fréquences, le chat s'en va au bout de 10 minutes d’expérience.&lt;br /&gt;
&lt;br /&gt;
=====  Conclusion =====&lt;br /&gt;
Même si le module HC-SR04 est très simple d’utilisation, nous ne pouvons continuer à nous en servir pour notre projet de gamelle connectée.&lt;br /&gt;
&lt;br /&gt;
=====  Autre alternative =====&lt;br /&gt;
* Tapis de jauge de contrainte → couvre une surface trop petite&lt;br /&gt;
* Détecteur de présence infrarouge → convient pour des objets de taille supérieure à 15 cm  &lt;br /&gt;
&lt;br /&gt;
Notre choix se porte donc sur le capteur infrarouge, que nous programmerons dans une séance ultérieure.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
La semaine a été en grande partie consacrée à la réalisation d’un prototype pour le système d’hélice et le réservoir. Tout d’abord, nous avons dû faire plusieurs aller-retour au magasin afin d’acheter des planches pour la réalisation des différents prototypes. La première planche qui a été acheté était une medium, matériel qui n’est plus accepté dans la découpeuse laser puisqu’elle encrasse le filtre et la lentille de l’appareil. Nous avons donc du aller acheter les bonnes planches. De plus, il a fallu réserver des créneaux au fabricarium et apprendre à se servir de la découpeuse laser. Le prototype final n’est pas encore assemblé puisque nous réfléchissons à un système de « pied à coulisse » afin de pouvoir choisir le dosage unitaire que peut servir l’hélice.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5 et semaine 6===&lt;br /&gt;
'''Création d’un programme contrôlant la lecture et l’écriture sur la carte SD'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Pour rendre notre projet innovant par rapport aux autres gamelles connectées proposées sur le marché, nous avons décidé de faire un suivi lié à l'alimentation du chat. Par exemple, nous souhaitons savoir à quels moments de la journée l’animal va manger, pendant combien de temps, en quelles quantités etc…&lt;br /&gt;
Pour cela, nous devons stocker ces différentes données. Pour ce faire, nous utiliserons le shield SD/ethernet  suivant :&lt;br /&gt;
&lt;br /&gt;
[[Image:Shield sd ethernet.jpg|vignette|center|300px|Shield SD/ethernet.]]&lt;br /&gt;
&lt;br /&gt;
*Code arduino shield Sd/ethernet&lt;br /&gt;
&lt;br /&gt;
Pour commencer, l’expérimentation du shield  a été effectuée à l’aide d’arduino IDE afin de réaliser un prototype rapide et tester si le shield est efficace et permet de répondre à nos besoins.&lt;br /&gt;
&lt;br /&gt;
Nous nous basons sur l'exemple proposé par arduino IDE suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SD.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File myFile;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  // Open serial communications and wait for port to open:&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  while (!Serial) {&lt;br /&gt;
    ; // wait for serial port to connect. Needed for native USB port only&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Initializing SD card...&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if (!SD.begin(4)) {&lt;br /&gt;
    Serial.println(&amp;quot;initialization failed!&amp;quot;);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;initialization done.&amp;quot;);&lt;br /&gt;
  myFile = SD.open(&amp;quot;test.txt&amp;quot;, FILE_WRITE);&lt;br /&gt;
&lt;br /&gt;
  if (myFile) {&lt;br /&gt;
    Serial.print(&amp;quot;Writing to test.txt...&amp;quot;);&lt;br /&gt;
    myFile.println(&amp;quot;testing 1, 2, 3.&amp;quot;);&lt;br /&gt;
    myFile.close();&lt;br /&gt;
    Serial.println(&amp;quot;done.&amp;quot;);&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.println(&amp;quot;error opening test.txt&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  myFile = SD.open(&amp;quot;test.txt&amp;quot;);&lt;br /&gt;
  if (myFile) {&lt;br /&gt;
    Serial.println(&amp;quot;test.txt:&amp;quot;);&lt;br /&gt;
    while (myFile.available()) {&lt;br /&gt;
      Serial.write(myFile.read());&lt;br /&gt;
    }&lt;br /&gt;
    myFile.close();&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.println(&amp;quot;error opening test.txt&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous remarquons que nous écrivons facilement sur la carte SD grâce à la bibliothèque disponible. En ajoutant quelques boutons et en modifiant légèrement le code, nous arrivons à sauvegarder la durée de maintien du bouton ainsi que la fréquence d’actionnement.&lt;br /&gt;
&lt;br /&gt;
*Code C Shield  SD/ethernet&lt;br /&gt;
&lt;br /&gt;
Une fois le prototype fait et fonctionnel, nous décidons d’écrire le code en C. Pour cela, nous utilisons en particulier deux bibliothèques fournies par Monsieur REDON : Sd2Card et spi.&lt;br /&gt;
Après de multiples tentatives, nous arrivons toujours à l'erreur suivante : “SD_CARD_ERROR_CMD0”. Cette dernière est liée à un timeout qui persiste malgré la modification de paramètres dépendants.&lt;br /&gt;
&lt;br /&gt;
*Changement de matériel&lt;br /&gt;
&lt;br /&gt;
Monsieur REDON nous a fourni un nouveau shield uniquement SD cette fois-ci pour tester si le problème est matériel. En voici la photographie :&lt;br /&gt;
&lt;br /&gt;
[[Image:Shield sd simple.jpg|vignette|center|300px|Shield SD.]]&lt;br /&gt;
&lt;br /&gt;
*Code C Shield SD&lt;br /&gt;
&lt;br /&gt;
En recompilant le code sur le nouveau shield, nous remarquons qu'il n'y a pu d'erreur liée à l'initialisation de la carte SD.&lt;br /&gt;
Suite à des expérimentations liées à la prise en main du code exemple donné, nous arrivons maintenant à écrire une information dans un bloc est à relire cette information plus tard.&lt;br /&gt;
&lt;br /&gt;
Voici un extrait lu depuis l’utilitaire minicom lors de la lecture de la carte SD :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;status de la carte sd = 1                                                 &lt;br /&gt;
status=0                                                                  &lt;br /&gt;
erreur=0                                                                  &lt;br /&gt;
type=3                                                                    &lt;br /&gt;
taille=7744512                                                            &lt;br /&gt;
Lecture                                                                   &lt;br /&gt;
statut=0                                                                  &lt;br /&gt;
bloc[0]=1 bloc[1]=0 bloc[2]=aa bloc[3]=bb bloc[4]=cc bloc[5]=0&lt;br /&gt;
statut=0   &lt;br /&gt;
bloc[0]=dd bloc[1]=ee bloc[2]=ff bloc[3]=0 bloc[4]=0 bloc[5]=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le shield fonctionne comme désiré et nous pourrons ainsi enregistrer des informations afin de les traiter plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Configuration du module WiFi ESP8266'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
L’ESP8266 est un circuit intégré à un microcontrôleur qui fait office de module WiFi. Il possède un total de 9 GPIO (3.3V) ce qui lui permet d’être utilisé indépendamment, sans même se connecter à un autre microcontrôleur. La datasheet de ce composant est disponible dans la rubrique « Datasheet » en bas de page. Pour notre projet, l’utilisation seule de ce module ne suffisait pas. C’est pourquoi, nous le connectons à un arduino afin de pouvoir profiter des différentes entrées/sorties de ce microcontrôleur. Voici une photographie du composant en question :&lt;br /&gt;
&lt;br /&gt;
[[Image:Esp8266.jpg|vignette|center|300px|Shield SD.]]&lt;br /&gt;
&lt;br /&gt;
L'adresse IP de notre ESP8266 s'obtient en connectant notre composant à un réseau local. Ainsi, nous savons que cette adresse est la suivante : 192.168.43.53 .&lt;br /&gt;
&lt;br /&gt;
*Programmation du module WiFi en C&lt;br /&gt;
&lt;br /&gt;
De nombreux problèmes ont été rencontrés pour configurer l’ESP8266 en C. Le programme devant être directement chargé sur ce dernier, de nombreuses erreurs en ont résulté. Après de nombreuses heures passées à essayer de régler ces problèmes, nous avons discuté de cela avec l’un de nos encadrant, M. REDON, qui nous a autorisé à programmer le module WiFi directement sur arduino IDE, puisqu’une bibliothèque existante rend la tâche moins ardue. De ce fait, l’avantage de l’ESP8266 est que nous chargeons un programme directement sur ce dernier. Ainsi, nous pouvons programmer le reste de notre projet en C, en compilant et téléversant le fichier sur l’arduino sans perturber le fonctionnement du module WiFi.&lt;br /&gt;
&lt;br /&gt;
*Programmation du module WiFi sur arduino IDE&lt;br /&gt;
&lt;br /&gt;
Tout d’abord, lors de l’installation d’arduino IDE, il faut veiller à ce que la version soit suffisamment récente pour pouvoir y télécharger des « boards ». En effet, il faut, grâce à un lien disponible sur le site d’arduino, ajouter l’ESP8266 en tant que board dans le logiciel afin que le composant puisse être reconnu afin de téléverser un programme. &lt;br /&gt;
Ensuite, l’ESP doit être connectée en USB sur à l’ordinateur afin qu’elle soit visible sur son port propre (USB0 en l’occurrence). Ainsi, lors du téléversement du fichier, il faut sélectionner ce port dans la liste de ceux disponible. (Beaucoup de soucis ont été rencontrés à ce propos, l’ESP n’étant pas toujours visible comme étant disponible sur arduino IDE). &lt;br /&gt;
Enfin, un test basique a été réalisé qui consiste à faire clignoter une LED connectée à un GPIO de l’ESP et à se connecter à un réseau WiFi. L’avantage de programmer en arduino IDE est que, par un simple « #include &amp;lt;ESP8266WiFi.h&amp;gt; », nous ajoutons la bibliothèque propre à notre module WiFi. La fonction WiFi.begin permet alors de se connecter facilement à un réseau local en passant en paramètres le nom du réseau sans fil (SSID) ainsi que son mot de passe. &lt;br /&gt;
&lt;br /&gt;
Voici une visualisation des informations envoyées sur l'interface série :&lt;br /&gt;
&lt;br /&gt;
[[Image:Capture esp.png|vignette|center|500px|Visualisation sur l'interface série.]]&lt;br /&gt;
&lt;br /&gt;
*Réseau&lt;br /&gt;
&lt;br /&gt;
La question de la connexion réseau entre le module WiFi et l’application mobile, que nous allons bientôt réaliser, se pose. Nous avons travaillé également sur cette partie lors de la semaine 6. Cependant, nous expliciterons cette partie un peu plus tard afin d’aborder en même temps la partie réseau du côté de l’application mobile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
'''Capteur Infrarouge IRS05A'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Dans la partie liée au suivi de l'alimentation, nous avons besoin d'un détecteur de présence afin de savoir si le chat est en train de se nourrir ou pas. Pour cela, nous avions testé le module HC-SR04, expérimentation qui n'avait pas aboutie due au fait que le chat entende les ultrasons. Nous avons choisi en remplacement le module irs05a. En voici une photographie :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:IRS05A.jpg|center|200px]]&lt;br /&gt;
&lt;br /&gt;
*Programme C&lt;br /&gt;
&lt;br /&gt;
En étudiant la datasheet du composant, nous trouvons ceci : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour l'expérimentation, nous avons juste besoin de commander l'entrée enable et de placer une LED à la sortie output afin de visualiser si le module détecte ou non un objet. Suite à cette expérimentation, nous avons pu définir la zone de détection du module. Voici un schéma explicatif :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:IRS05A extrait datasheet.png|center|400px]]&lt;br /&gt;
&lt;br /&gt;
Grâce à ce schéma, nous avons pu faire un choix matériel quant à celui de l’emplacement de nos deux capteurs de présence. Ils seront disposés comme suit :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema ir disposition.jpg|center|200px]]&lt;br /&gt;
&lt;br /&gt;
'''Application mobile'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
L’objectif de cette semaine a été en partie de se familiariser avec l’environnement de développement intégré (IDE) d’Android Studio. Sous Android, il est commun de passer par cette plateforme afin de programmer différentes applications mobiles. Cela se code en java. &lt;br /&gt;
&lt;br /&gt;
*Application pour la gamelle connectée&lt;br /&gt;
&lt;br /&gt;
Tout d’abord, le domaine des applications mobiles est très complexe. De plus, la documentation technique de java est également très fournie. Cela a rendu la tâche de réaliser une application android basique très longue. Finalement, nous voulons créer une application mobile permettant de visualiser les statistiques de son animal,  de contrôler la gamelle manuellement ou de programmer des modes pour l’alimenter. Pour le moment, le squelette général a été créé, permettant d’afficher de nouvelles fenêtres à chaque choix de « mode ».  Voici des screenshots de l’application actuelle :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:App premiere page.png|200px]] [[Fichier:Onglet1.png|200px]] [[Fichier:Onglet2.png|200px]] [[Fichier:Onglet3 en cours.png|200px]] &lt;br /&gt;
&lt;br /&gt;
*Réseau &lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons voulu aller plus loin dans la fenêtre consacrée au réapprovisionnement manuel. En effet, nous souhaitons réaliser un test simple qui consiste à allumer une LED connectée à un GPIO de l’ESP8266 par simple appui d’un bouton depuis l’application mobile. Le problème qui s’est alors posé a été celui de créer un lien serveur/client entre le module WiFi et l’application mobile. L’idée serait alors de créer un serveur TCP sur arduino IDE qui se chargerait sur l’ESP8266 et de créer, à l’aide de sockets en java, un client sur l’application mobile. Le serveur TCP a été réalisé sur l’arduino mais n’a pas encore pu être testé. La réalisation du client sur l’application mobile est l’objet de la semaine 8, les tests seront alors réalisés et explicités à ce moment là.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8 et 9===&lt;br /&gt;
'''Application mobile, partie réseau'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Le serveur TCP réalisé sous arduino IDE directement sur le module WiFi a été testé à l’aide de la commande nc. En effet, nous avons utilisé un terminal téléchargé sur le téléphone afin de connecter le module WiFi et le téléphone sur le même réseau. En envoyant les requêtes directement via la commande nc, nous sommes capables d’allumer et d’éteindre la LED connectée au GPIO de l’ESP8266. Maintenant, il faut réaliser la même chose mais côté application mobile.&lt;br /&gt;
&lt;br /&gt;
La partie concernant la création du socket et l’envoi de données à l’esp8266 nous a pris beaucoup de temps. En effet, le problème ne venait pas de notre code mais simplement du fait que la version android du téléphone utilisé comme point d’accès internet empêchait l’application de connecter la socket à l’adresse IP du module WiFi. Après avoir configuré un routeur et connecté le module WiFi et le téléphone dessus, nous étions capable d’envoyer des requêtes au module WiFi afin qu’il allume une LED notamment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Principe&lt;br /&gt;
&lt;br /&gt;
Il est préférable de réaliser la partie réseau d’une application mobile via un thread afin de rendre l’application la plus fluide possible. Par exemple, l’appui du bouton ON permet de modifier une chaine de caractère et lance le thread d’envoi. Dans ce thread, l’application connecte la socket au module WiFI à l’aide de son adresse IP et du port de communication spécifié dans le programme du serveur TCP sur arduino IDE. Ensuite, la socket se charge d’envoyer la chaine de caractère à l’esp8266. Cela se fait par l’utilisation de l’objet ''DataOutputStream'' et de sa méthode ''writeBytes'' qui permet l’envoi simple d’une chaine de caractère. &lt;br /&gt;
&lt;br /&gt;
Pour la réception des données, il s’agit du même principe mais nous utilisons l’objet DataInputStream.&lt;br /&gt;
&lt;br /&gt;
Voici un aperçu de ce qui est visualisable sur l'interface série de l'arduino IDE, les requêtes sont bien envoyées :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Serveur ok.png|center|100px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 10 et +===&lt;br /&gt;
'''La base de données sur l'application android'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons déjà les données directement sur la gamelle grâce à la carte SD. Cependant, il nous a semblé nécessaire de garder en mémoire les statistiques de notre animal de compagnie directement sur l’application. Après avoir lu le livre « L’art du développement Android » de Grant Allen, prêté notre enseignant, deux possibilités nous sont apparues. La première était de manipuler des fichiers qui seraient générés par l’application afin de garder en mémoire ce que nous souhaitons. La seconde était de créer une base de données locale grâce à la base de données installée sur Android, ''SQLite''. &lt;br /&gt;
&lt;br /&gt;
*Présentation rapide de SQLite&lt;br /&gt;
&lt;br /&gt;
''SQLite'' utilise un dialecte de SQL afin de réaliser des requêtes de manipulations de données. Les « SELECT », « INSERT », « REMOVE », peuvent ainsi être utilisées.  ''SQLite'' est particulièrement approprié pour l’utilisation android car son utilisation ne repose pas sur un modèle client-serveur (comme ''mysql'' ou ''PostgreSQL'' que nous connaissons). Ainsi, l’intégralité de la base de données est stockée dans un fichier unique.&lt;br /&gt;
&lt;br /&gt;
*Base de données&lt;br /&gt;
&lt;br /&gt;
La base de données que nous avons implémentée permet de répertorier tous les jours enregistrés par la gamelle afin de pouvoir réaliser des traitements statistiques derrière. La date a été stockée en chaine de caractère car le constructeur de la forme ''Date(int year, int month, int day)'' est obsolète pour la version de l’API que nous utilisions. Le deuxième constructeur est de la forme ''Date(long Date)'' et il faut fournir à cette méthode un nombre de millisecondes qu’elle va convertir au format Date de Java. Cela nous semblait peu pratique. &lt;br /&gt;
&lt;br /&gt;
Voici un petit tableau illustrant ce que nous souhaitons stocker dans la base de données :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tableau recap bdd.png|center|450px]]&lt;br /&gt;
&lt;br /&gt;
Trois classes ont été crées : Jour.java, JoursBDD.java et MaBaseSQLite.java.&lt;br /&gt;
&lt;br /&gt;
Voici un schéma UML résumant ces trois classes :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:BDD_lulu.png|center|700px]]&lt;br /&gt;
&lt;br /&gt;
'''La base de données et Singleton'''&lt;br /&gt;
&lt;br /&gt;
Notre base de donnée étant créée et fonctionnelle, nous avions besoin de l’avoir à disposition n’importe où dans l’application. Or, passer un objet d’une page à une autre est simple pour des objets peu complexes. Cependant, il était plus difficile de passer notre base de données avec les méthodes traditionnelles utilisées auparavant. Nous avons donc utilisé un singleton. Le singleton est une instance unique d’une classe. Cela permet à la fois de récupérer facilement cette instance partout dans l’application mais cela permet également de converser une unicité de cette dernière, ce qui est important pour  une base de données. Ainsi, nous avons modifié les classes décrites précédemment afin d’implémenter le singleton. &lt;br /&gt;
&lt;br /&gt;
Deux variables ont été ajoutées à la classe joursBDD : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;private static Context context;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;private static JoursBDDSingleton mJoursBDDSingleton;  //instance unique&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deux méthodes sont également concernées dans ce changement :&lt;br /&gt;
&amp;lt;pre&amp;gt;//Méthode de restauration de contexte&lt;br /&gt;
public JoursBDD(Context context)&lt;br /&gt;
{&lt;br /&gt;
    this.context = context;&lt;br /&gt;
    //creation de la base de donnees&lt;br /&gt;
    maBaseSQLite = new MaBaseSQLite(context, NOM_BDD, null, VERSION_BDD);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Methode de recuperation de l'instance de la BDD&lt;br /&gt;
public static synchronized JoursBD getInstance(Context context){&lt;br /&gt;
    //Création de la base de données et de sa table&lt;br /&gt;
    if(mJoursBDD==null) {&lt;br /&gt;
        //CreateJoursBDD(context);&lt;br /&gt;
        mJoursBDD = new JoursBDD(context);&lt;br /&gt;
    }&lt;br /&gt;
    return mJoursBDD;&lt;br /&gt;
} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, juste un réalisant une récupération de l’instance grâce à  l’appel de la méthode getInstance : JoursBDD.getInstance(this); , il est aisé de le faire dans une nouvelle activité.&lt;br /&gt;
&lt;br /&gt;
'''Le traitement des données'''&lt;br /&gt;
&lt;br /&gt;
Une partie « statistiques » a été ajoutée à l’application mobile. Elle a pour but l’étude de l’alimentation de l’animal grâce à l’utilisation de graphiques et de tableaux. Afin de rendre la chose plus visuelle, l’utilisateur peut sélectionner soit un histogramme, soit un graphique linéaire, soit un tableau de données grâce à des radio boutons. Ensuite, l’utilisateur sélectionne soit les 7 derniers jours soit le dernier mois via un simple bouton. &lt;br /&gt;
Voici un aperçu de la première page :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:statistiques_tableau_petfun.png|center|200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Présentation rapide de achartengine :&lt;br /&gt;
Afin de réaliser l’affichage de graphiques, nous avons utilisé une bibliothèque appelée ''achartengine''. Cette bibliothèque permet la personnalisation de graphiques et l’affichage sous forme d’histogramme ou encore de graphiques linéaires des données. Cette bibliothèque facilite la dynamisation de l’activité. Nous restant peu de temps dans le projet, nous avons décidé d’exploiter cette ressource afin de réaliser une page propre et personnalisée. Nous pouvons utiliser cette bibliothèque en l’ajoutant dans les fichiers ''gradle'' du projet.&lt;br /&gt;
&lt;br /&gt;
Voici les graphiques que nous affichons :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Graphiques stats petfun1.png|200px]] [[Fichier:Graphiques stats petfun2.png|200px]]&lt;br /&gt;
&lt;br /&gt;
*Limites et améliorations :&lt;br /&gt;
L’idée d’avoir créée un bouton permettant d’afficher un graphique de la dernière semaine avait pour but une amélioration par la suite. En effet, l’objectif est de pouvoir, une fois le graphique affiché, passer d’une semaine à une autre. De même pour les mois, nous souhaiterions pouvoir, à partir du dernier mois, afficher les précédents en ''slidant'' le graphique ou en appuyant sur une touche. &lt;br /&gt;
&lt;br /&gt;
'''Configuration des paramètres'''&lt;br /&gt;
&lt;br /&gt;
*Introduction &lt;br /&gt;
&lt;br /&gt;
Une page de permettant de configurer les paramètres de l'application a été ajoutée à l’application mobile. Elle a pour but d’enregistrer les heures de repas de l'animal, le poids contenu dans la gamelle, le nom de l’animal ou encore sa photographie. Le poids contenu dans la gamelle doit être notifié car cette dernière est ajustable grâce à des rails présents sur la gamelle et ajustables. Ainsi, l’utilisateur peut doser la quantité qu’il souhaite. Il devra alors le notifier dans l’application afin que le traitement des données en tienne compte.&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Dans l’activité de contrôle ''automatique'', il s’agit en fait de configurer des paramètres. Sur cette page, les paramètres actuels de la gamelle sont affichés à l’écran. L’utilisateur peut dès lors, via des boutons, sélectionner deux activités : une pour changer les paramètres propres à la gamelle et l’autre pour changer ceux propres à l’animal. &lt;br /&gt;
&lt;br /&gt;
*Paramètres de la gamelle&lt;br /&gt;
&lt;br /&gt;
Dans les paramètres de la gamelle, deux choses sont configurables : les heures de repas de l’animal et la quantité de croquettes ajustée sur la gamelle. Afin de rentrer les heures de repas, le widget ''TimePicker'' a été utilisé et configuré en format 24 heures. L’appui de la touche « AJOUT HEURE » permet l’ajout de l’heure saisi sur le ''TimePicker'' dans les paramètres de l’application. De plus, afin de saisir le poids de la gamelle, un simple ''EditText'' permet de le faire. Si l’utilisateur ne saisi pas un nombre, un message s’affiche à l’écran le prévenant du problème de format.&lt;br /&gt;
&lt;br /&gt;
L’appui de la touche « VALIDER CONFIGURATION » permet la sauvegarde de la saisie et le retour à la première activité. &lt;br /&gt;
&lt;br /&gt;
L’appui de la touche « SUPPRIMER CONFIGURATION » permet la suppression des heures de repas enregistrées dans l’application.&lt;br /&gt;
&lt;br /&gt;
*Paramètres de l’animal&lt;br /&gt;
&lt;br /&gt;
Dans les paramètres de l’animal, le nom ainsi que la photographie de ce dernier peuvent être ajoutés. Le nom est simplement enregistré grâce à un ''EditText''. L’avatar peut être cherché par l’utilisateur dans ses fichiers de téléphone. (Des permissions spécifiques sont nécessaires). L'avatar s'affiche alors en première page de l'application.&lt;br /&gt;
&lt;br /&gt;
Maintenant, la question d’enregistrer tous ses paramètres s’est posée. En effet, une fois l’application fermée, tous les objets et toutes les variables créées dans l’application sont désallouées. Les paramètres rentrés par l’utilisateur sont alors perdus. &lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons fait le choix de modifier les préférences de l’application. Ces préférences renseignent des paires clé-valeur de données.&lt;br /&gt;
&lt;br /&gt;
*SharePreferences&lt;br /&gt;
&lt;br /&gt;
Nous devons créer un objet ''SharePreferences'' via la méthode ''getSharedPreferences'' en lui attribuant un nom unique et en privatisant son accès. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; final SharedPreferences prefs = getSharedPreferences(&amp;quot;Configuration&amp;quot;, Context.MODE_PRIVATE); &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dès lors, nous pouvons restaurer cet objet dans n’importe quelle activité, exactement comme un ''Singleton''. &lt;br /&gt;
Pour créer ou modifier des préférences, nous devons appeler la méthode ''edit()'' de l’objet ''SharedPreferences''. Une fois la valeur modifiée, il est impératif de faire appel à la méthode ''apply()'' ou ''commit()'' de l’objet afin de sauvegarder les changements apportés.	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;final SharedPreferences.Editor editor = prefs.edit();&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, les horaires sont stockées avec une clé de la forme « horairek », k représentant la numérotation des différentes heures saisies par l’utilisateur. Une variable « Taille » fait également partie des préférences afin de pouvoir savoir à tout moment le nombre de repas programmés par l’utilisateur. Le nom de l’animal est stocké avec la clé « Name » et le poids avec la clé « Poids ». Il est alors aisé de retrouvé les valeurs correspondantes dans les préférences et de pouvoir les supprimer de manière spécifique si nécessaire. &lt;br /&gt;
&lt;br /&gt;
Voici donc ce que cela peut nous donner :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Petfun config1.png|200px]] [[Fichier:Petfun config2.png|200px]] [[Fichier:Petfun config4.png|200px]] [[Fichier:Petfun config3.png|200px]]&lt;br /&gt;
&lt;br /&gt;
'''Contrôle du servomoteur via l'application'''&lt;br /&gt;
&lt;br /&gt;
La solution que nous avons choisi est de relier un GPIO de l’ESP8266 à un PIN digital de l’arduino. Ainsi, étant capables d’allumer une LED par appui d’une touche sur l’application mobile, nous serions capables de faire changer l’état d’un PIN de l’arduino et ainsi en fonction de cela, faire tourner le moteur. &lt;br /&gt;
En mettant en place cette méthode, nous nous sommes rendu compte que le PIN de l’arduino ne réagissait pas à du 3.3V, envoyé par le module wifi. Nous avons donc mis en place un ''high shifter'' à l’aide d’un transistor afin de faire passer la tension d’entrée de 3.3V à 5V. Sur le schéma, R1 = R2 = 10 kΩ. R3 = 100 kΩ. La tension Output mesurée est de [[Fichier:FormulePetfun.png|100px]].&lt;br /&gt;
&lt;br /&gt;
Voici le schéma : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:HighShifterPetfunPetfun.jpg|center|250px]]&lt;br /&gt;
&lt;br /&gt;
Voici la photographie du câblage :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cablage petfun.jpg|center|450px]]&lt;br /&gt;
&lt;br /&gt;
'''Aperçu final de la partie mécanique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Croquette.png|center|200px]]&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;br /&gt;
Rapport : [[Fichier:Rapport_P37_damiens_dorian.pdf‎ ]]&lt;br /&gt;
&lt;br /&gt;
Programmes : [[Fichier:Programmes PETFUN.zip]]&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&lt;br /&gt;
==='''Datasheet'''===&lt;br /&gt;
ESP8266 Adafruit breakout : https://cdn-learn.adafruit.com/downloads/pdf/adafruit-huzzah-esp8266-breakout.pdf&lt;br /&gt;
&lt;br /&gt;
Arduino méga 2560 : http://www.atmel.com/Images/Atmel-2549-8-bit-AVR-Microcontroller-ATmega640-1280-1281-2560-2561_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
L'ultrason HC-SR04 : http://www.gotronic.fr/pj2-hc-sr04-utilisation-avec-picaxe-1343.pdf&lt;br /&gt;
&lt;br /&gt;
Le capteur de présence Infrarouge IRS05A : https://www.pololu.com/file/0J615/tssp77038.pdf&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Programmes_PETFUN.zip&amp;diff=42512</id>
		<title>Fichier:Programmes PETFUN.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Programmes_PETFUN.zip&amp;diff=42512"/>
				<updated>2017-05-18T16:15:34Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P37&amp;diff=42254</id>
		<title>IMA4 2016/2017 P37</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P37&amp;diff=42254"/>
				<updated>2017-05-15T17:01:05Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Semaine 5 et semaine 6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Cahier des charges''' ==&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
L’objectif de ce projet est de fabriquer une gamelle pour animaux connectée. Pour ce faire, trois grands axes sont à dégager : une partie informatique, électronique et mécanique. &lt;br /&gt;
&lt;br /&gt;
==== Partie mécanique ====&lt;br /&gt;
'''Structure du système'''&lt;br /&gt;
*Le réservoir. Deux systèmes peuvent être réalisés : &lt;br /&gt;
**Un système de trappes pour le distributeur : deux trappes l’une en dessous de l’autre. &lt;br /&gt;
**Un système de vis sans fin qui permettrait d’alimenter la gamelle.&lt;br /&gt;
&lt;br /&gt;
*La gamelle. Deux méthodes sont possibles :&lt;br /&gt;
**Mesure du poids en prenant une balance déjà existante et en récupérant et en traitant les sorties.&lt;br /&gt;
**Passer par un système d’estimation de volumes. Dans la gamelle, il y aurait des capteurs permettant de connaître la quantité en volume présente dans la gamelle.&lt;br /&gt;
&lt;br /&gt;
Globalement, ces systèmes sont susceptibles de changer suivant l'état de l'art qui sera réalisé par la suite.&lt;br /&gt;
&lt;br /&gt;
==== Partie électronique ====&lt;br /&gt;
*Alimentation. Deux systèmes sont envisagés pour l’alimentation : Un système nomade avec une batterie  pour permettre d’avoir une gamelle déplaçable ou un système fixe alimenté par le secteur ou en usb.&lt;br /&gt;
**Batterie : Nous avons besoin d’une batterie qui peut garder l’énergie suffisamment longtemps pour éviter de devoir recharger la gamelle trop souvent. Une durée de vie d’une semaine est envisagée au minimum.&lt;br /&gt;
**Secteur&lt;br /&gt;
&lt;br /&gt;
*Interface Homme/machine&lt;br /&gt;
**Capteurs&lt;br /&gt;
***Des LEDs couplées à un phototransistor pourraient permettre de connaître la présence ou l’absence de croquettes dans la gamelle.&lt;br /&gt;
***Ultrason pour connaître la présence ou non de l'animal devant la gamelle&lt;br /&gt;
***Autres.&lt;br /&gt;
**Indicateurs : Des indicateurs peuvent être implantés sur le système physique : des LEDS indicatrices de l’état de batterie (si l'alimentation nomade est privilégiée) ou de l’état du réservoir (plein ou vide) sont envisagés.&lt;br /&gt;
&lt;br /&gt;
==== Partie informatique ====&lt;br /&gt;
*Unité de contrôle&lt;br /&gt;
**Utilisation d’un arduino avec un module wifi dans le but de réaliser une communication externe via une application mobile Androïd par exemple. &lt;br /&gt;
**Utilisation d’un raspberry avec création d’un serveur Apache pour permettre de communiquer avec l’utilisateur.&lt;br /&gt;
**Utilisation d'un module communiquant autre que les deux cités précédemment.&lt;br /&gt;
*En bonus :&lt;br /&gt;
**Création d’un système de contrôle à distance en mettant en place une caméra afin que l’utilisateur puisse avoir des images à distance, ou simplement une caméra série afin d'obtenir des images de contrôle. Ce système n’aura pas besoin d’être temps réel. Il pourra être implémenté grâce au serveur apache de la raspberry, si l’utilisation de celle-ci est retenue.&lt;br /&gt;
**Des actionneurs pour permettre à l’utilisateur interagir avec son chat à distance (Buzzer, laser, son, …).&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel et logiciel===&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous avons réalisé l'état de l'art des gamelles connectées déjà réalisées et commercialisées. Voici le lien PDF permettant d’accéder à ce fichier.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Etat_de_l_art.pdf]]&lt;br /&gt;
&lt;br /&gt;
Finalement, nos choix techniques sont les suivants : &lt;br /&gt;
*Matériel&lt;br /&gt;
**Mécanique&lt;br /&gt;
***Un système d’hélice contrôlée par un moteur permettant de déverser des croquettes en quantités connues. (Un schéma du système sera réalisé rapidement).&lt;br /&gt;
**Électronique&lt;br /&gt;
***Un adaptateur capable de générer une tension de 5V à partir du réseau.&lt;br /&gt;
***Des LEDs infrarouges couplées à des photodiodes afin de contrôler l'état de la gamelle et du réservoir.&lt;br /&gt;
***Un servomoteur 360° afin de faire tourner le système d'hélice et permettant ainsi de déverser une dose de croquettes dans la gamelle.&lt;br /&gt;
***Des LEDs permettant de visualiser l'état du système (alimentation du circuit, réservoir vide,...) et les résistances qui vont de pair.&lt;br /&gt;
***Un capteur Ultrason afin de pouvoir vérifier la présence ou non d'un animal devant la gamelle.&lt;br /&gt;
**Informatique&lt;br /&gt;
***Un arduino Méga car l'arduino Uno sera limité lorsque nous communiquerons entre le module wifi et l'application mobile.&lt;br /&gt;
***Un module Wifi ESP8266.&lt;br /&gt;
***Une carte shield SD afin de stocker toutes les variables de l'utilisateur et de son chat.&lt;br /&gt;
***Un module horloge temps réel (RTC) afin de pouvoir programmer en fonction de l'heure qu'il est si le choix de l'utilisateur porte sur le réapprovisionnement de la gamelle de cette manière là.&lt;br /&gt;
&lt;br /&gt;
En solution de secours : &lt;br /&gt;
*Un rapsberry&lt;br /&gt;
*Une balance à modifier manuellement&lt;br /&gt;
&lt;br /&gt;
*Logiciel&lt;br /&gt;
**Solidworks afin de pouvoir concevoir les différentes parties du système mécanique.&lt;br /&gt;
**Les logiciels de programmation (Sublime, vim, emacs, gcc...)&lt;br /&gt;
&lt;br /&gt;
*Autres&lt;br /&gt;
**Utilisation des machines mises à disposition des étudiants au Fablab : découpeuse laser et imprimante 3D pour la conception de prototypes.&lt;br /&gt;
&lt;br /&gt;
==Tableau==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Composant !! Quantité requise !! Disponible (M. Redon) ? !! À commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |Émetteur et récepteur infrarouge/photodiode&lt;br /&gt;
 |Entre 6 et 7 au minimum&lt;br /&gt;
 |Une partie&lt;br /&gt;
 |Oui&lt;br /&gt;
 |1 LED infrarouge et 1 photodiode ont été empruntés&lt;br /&gt;
 |-&lt;br /&gt;
 |Adaptateur PS512S&lt;br /&gt;
 |1&lt;br /&gt;
 |Non&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Lien Gotronic : [http://www.gotronic.fr/art-adaptateur-ps512s-19913.htm]&lt;br /&gt;
 |-&lt;br /&gt;
 |Shield carte SD&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Nous avons eu une carte shield Ethernet - SD ainsi que la carte SD.&lt;br /&gt;
 |-&lt;br /&gt;
 |Module horloge temps réel (RTC)&lt;br /&gt;
 |1&lt;br /&gt;
 |Non&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Lien Gotronic : [http://www.gotronic.fr/art-module-horloge-temps-reel-ada3296-25536.htm]&lt;br /&gt;
 |-&lt;br /&gt;
 |Capteur Ultrason&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Emprunté&lt;br /&gt;
 |-&lt;br /&gt;
 |LEDs&lt;br /&gt;
 |minimum 3&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Plusieurs empruntées&lt;br /&gt;
 |-&lt;br /&gt;
 |Résistances&lt;br /&gt;
 |Une vingtaine&lt;br /&gt;
 |Oui (C205)&lt;br /&gt;
 |Non&lt;br /&gt;
 |Plusieurs empruntées&lt;br /&gt;
 |-&lt;br /&gt;
 |Arduino méga&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Un arduino méga et un arduino uno (pour les tests) ont été empruntés&lt;br /&gt;
 |-&lt;br /&gt;
 |ESP8266&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |La version 012 a été empruntée&lt;br /&gt;
 |-&lt;br /&gt;
 |Servomoteur 360&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Emprunté&lt;br /&gt;
 |-&lt;br /&gt;
 |Solution de secours : Rapsberry&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Pas encore emprunté, solution de secours&lt;br /&gt;
 |-&lt;br /&gt;
 |Solution de secours : Balance&lt;br /&gt;
 |1&lt;br /&gt;
 |Non&lt;br /&gt;
 |Non&lt;br /&gt;
 |Pas encore emprunté, solution de secours&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
*Étude et réalisation d'un système à base de LEDs infrarouges et de photodiodes afin de pouvoir estimer si la gamelle est vide ou pleine. De même pour le réservoir.&lt;br /&gt;
**Circuit d'émission : LED Infrarouge&lt;br /&gt;
**Circuit de réception : Photodiode&lt;br /&gt;
**Étude des emplacements stratégiques dans la gamelle et le réservoir&lt;br /&gt;
*Réalisation d'un prototype de gamelle&lt;br /&gt;
**Conception 3D de l'hélice sur laquelle le servomoteur va venir se greffer&lt;br /&gt;
**Conception 3D de la gamelle complète&lt;br /&gt;
**Découpage/impression de prototypes&lt;br /&gt;
*Étude de l'ESP8266&lt;br /&gt;
*Tests d'écriture et de lecture sur la carte SD depuis l'arduino&lt;br /&gt;
*Étude du module d'horloge temps réel (RTC)&lt;br /&gt;
*Contrôle des différents capteurs en incluant le servomoteur&lt;br /&gt;
*Création de l'application mobile&lt;br /&gt;
*Mise en relation des différentes parties informatiques du système&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 et + !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 3H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Réalisation de l'état de l'art&lt;br /&gt;
| &lt;br /&gt;
|6H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|-&lt;br /&gt;
|Échange quant aux technologies et au système mécanique à choisir&lt;br /&gt;
| &lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste et de la répartition des tâches&lt;br /&gt;
| &lt;br /&gt;
|2H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2H00&lt;br /&gt;
|-&lt;br /&gt;
| Recherches quant aux échelles de dosage (Quelles quantités de nourriture consomment les chats en fonction de leur poids ?)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste de matériel et établissement des besoins (meilleur rapport besoin/prix étudié)&lt;br /&gt;
| &lt;br /&gt;
|5H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5H00&lt;br /&gt;
|-&lt;br /&gt;
| Modèle 3D de l'hélice&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Modèle 3D du réservoir&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|-&lt;br /&gt;
| Étude des LEDs Infrarouge et des photodiodes&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Tests sur le module wifi ESP8266&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|8H00&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|16H00&lt;br /&gt;
|-&lt;br /&gt;
| Tests de lecture et écriture sur la carte SD&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|6H00&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|16H00&lt;br /&gt;
|-&lt;br /&gt;
| Étude du servomoteur et réalisation d'un programme le contrôlant en C&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Prototype de l'hélice et du réservoir&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|-&lt;br /&gt;
| Achat de planches pour la réalisation des prototypes de la gamelle en bois&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Étude du capteur Infrarouge et réalisation d'un programme le contrôlant en C&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main d'androïd studio et réalisation d'une ébauche d'application mobile pour notre gamelle connectée&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|10H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|13H00&lt;br /&gt;
|-&lt;br /&gt;
| Création du réseau établi entre le système et l'application android (problème avec le point d'accès)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|8H00&lt;br /&gt;
|8H00&lt;br /&gt;
|4H00&lt;br /&gt;
|24H00&lt;br /&gt;
|-&lt;br /&gt;
| Assemblage et finition de la partie mécanique&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|8H00&lt;br /&gt;
|6H00&lt;br /&gt;
|18H00&lt;br /&gt;
|-&lt;br /&gt;
| Tests sur le module temps réel&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Création de la base de donnée de l'application android et du singleton&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|10H00&lt;br /&gt;
|10H00&lt;br /&gt;
|-&lt;br /&gt;
| Liaison ESP8266 et Arduino (Software Serial) + High shifter&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8H00&lt;br /&gt;
|8H00&lt;br /&gt;
|-&lt;br /&gt;
| Application mobile : la page des configurations&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|10H00&lt;br /&gt;
|10H00&lt;br /&gt;
|-&lt;br /&gt;
| Application mobile : la page des études statistiques&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8H00&lt;br /&gt;
|8H00&lt;br /&gt;
|-&lt;br /&gt;
| Étude du capteur ultrason et réalisation d'un programme le contrôlant en C&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| TOTAL&lt;br /&gt;
|3H00&lt;br /&gt;
|17H00&lt;br /&gt;
|10H00&lt;br /&gt;
|8H00&lt;br /&gt;
|14H00&lt;br /&gt;
|14H00&lt;br /&gt;
|13H00&lt;br /&gt;
|21H00&lt;br /&gt;
|12H00&lt;br /&gt;
|16H00&lt;br /&gt;
|49H00&lt;br /&gt;
|177H&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Préambule===&lt;br /&gt;
L’internet des objets (IoT) représente l’extension d’internet à des choses et à des lieux du monde physique (wikipédia). Les objets connectés en l’occurrence sont aujourd’hui un enjeu important. De plus en plus d’objets initialement banals se voient être connectés afin d’en améliorer l’utilisation. Lors de ce projet, nous nous intéressons aux animaux domestiques. Lorsque nous nous absentons, nous n’avons aucun contrôle sur ce qui se passe à la maison. Ainsi, nous ne pouvons pas savoir si notre animal mange ou se porte bien. De plus, nous n’avons aucun retour sur ce que notre chien ou chat notamment a consommé. Est-ce qu’il se nourrit bien ? À quelle fréquence ? Dès lors, il est impensable de s’absenter sur le long terme ou un week-end sans faire intervenir un tiers pour nourrir notre cher animal. Nous pouvons également penser à des animaux qui seraient dangereusement en surpoids. Nous voudrions surveiller leur alimentation mais cela demande une surveillance constante qui n’est pas forcément envisageable. L’objectif de ce projet est de répondre à ces questions et besoins. Et si nous connections une gamelle à une application ?&lt;br /&gt;
&lt;br /&gt;
[[Image:Gamelle-inox-couleur-antiderapante-6-tailles.jpg|center|200px]].&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
L’objectif de la première semaine a été tout d’abord de lister les différentes tâches à réaliser tout au long du projet. Cette liste sera bien sûr modifiable en fonctions des difficultés ou contraintes rencontrées au cours du projet. Cette liste a été rajoutée à la suite du cahier des charges.&lt;br /&gt;
Ensuite, un état de l’art a été réalisé. Nous avons ainsi pu clairement définir le schéma de principe de notre gamelle et le mécanisme de réapprovisionnement choisi. Voici de nouveau le lien vers notre état de l'art : [[Fichier:Etat_de_l_art.pdf]]&lt;br /&gt;
&lt;br /&gt;
Faisons un point rapide sur ces choix. Un système d’ « hélice » est privilégié afin de réapprovisionner la gamelle. Il s’agit en fait d’un cylindre plat qui sera placé en sortie du réservoir. Le réservoir sera moins large en sortie vers la gamelle qu’à son sommet, en entrée des croquettes. Cela permettra aux croquettes de s’introduire facilement dans notre système d’ « hélice ». Ce cylindre serait  troué de part et d’autre afin de pouvoir contenir une certaine dose de croquettes. Ainsi, nous pouvons réapprovisionner la gamelle en fonction de ce dosage.&lt;br /&gt;
Enfin, nous nous sommes attardés sur l’organisation et la répartition de ces tâches afin de pouvoir détailler une liste de matériel. Cette dernière a été ajoutée au wiki à la suite de la liste des tâches.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Lors de cette deuxième semaine, plusieurs tâches ont été réalisées. Tout d’abord, un début de modélisation du système a été effectué sous ''Solidworks''. Pour ce faire, nous avons dû décider de combien de grammes de croquettes à la fois nous pouvons réapprovisionner la gamelle. Ainsi, nous avons effectué des recherches quant à la consommation de nourriture journalière d’un chat. Étant donné qu’un chien consomme davantage de croquettes qu’un chat, nous nous basons sur la consommation de ce dernier, quitte à donner plusieurs doses si l’animal est un chien. Voici un tableau sur lequel nous allons nous baser :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|+ '''Tableau de référence'''&lt;br /&gt;
|-&lt;br /&gt;
! scope=col | Poids du chat adulte&lt;br /&gt;
! scope=col | 1-3 kg&lt;br /&gt;
! scope=col | 4 kg&lt;br /&gt;
! scope=col | 5 kg&lt;br /&gt;
! scope=col | 6 kg&lt;br /&gt;
|-&lt;br /&gt;
|'''Quantités journalières (en grammes)'''&lt;br /&gt;
|15-50g&lt;br /&gt;
|50-65g&lt;br /&gt;
|65-70g&lt;br /&gt;
|70-90g&lt;br /&gt;
|-&lt;br /&gt;
|'''Quantités journalières (avec un bol doseur de 300 mL)'''&lt;br /&gt;
|x 0.1 - 0.3&lt;br /&gt;
|x 0.3 - 0.4&lt;br /&gt;
|x 0.4&lt;br /&gt;
|x 0.4 - 0.6&lt;br /&gt;
|}&lt;br /&gt;
Ce tableau marche pour les croquettes Ultra premium direct en particulier.&lt;br /&gt;
&lt;br /&gt;
Grâce à ce tableau, nous pensons que réapprovisionner la gamelle par dose de 15g est approprié. Or,[[Image:Formule1.png|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Maintenant, il est nécessaire de calculer le rayon de l’hélice permettant au système de doser 15g à la fois.&lt;br /&gt;
&lt;br /&gt;
Nous voulons pouvoir doser 15g : [[Image:Formule2.png|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Posons n = 4 car nous souhaitons avec 2 doseurs, un de chaque côté de l’hélice : [[Image:Formule3.png|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Prenons à présent h = 4 cm ; h étant la largeur de l’ouverture conduisant à la gamelle. Nous avons alors : &lt;br /&gt;
&lt;br /&gt;
[[Image:Formule4.png|center|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Voici une image de l'hélice modélisée en conséquent : &lt;br /&gt;
&lt;br /&gt;
[[Image:Hélice_image.jpg|vignette|center|500px|Modélisation de l'hélice en 3D.]].&lt;br /&gt;
&lt;br /&gt;
*D’un autre côté, des tests ont été réalisés en ce qui concerne le dispositif LED infrarouge-phototransistor.&lt;br /&gt;
&lt;br /&gt;
'''Présentation de l'expérimentation :'''&lt;br /&gt;
&lt;br /&gt;
Nous utilisons une LED IR SFH 4554 pour l’émission et une pour la réception. Pour des raisons de simplicité de fonctionnement, l'allumage des LEDs ne sera pas piloté. Elles seront continuellement allumées (aucune information n'est à transmettre).&lt;br /&gt;
&lt;br /&gt;
À la réception, nous utilisons une photodiode en ''pull-down''  avec une résistance pour contrôler l'intensité dans cette dernière. Nous relions ce montage à un arduino pour vérifier jusqu'à quelle portée nous détectons le signal de la LED émettrice. Grâce à cela, nous serons à même de définir les emplacements des émetteurs/récepteurs dans la gamelle et dans le réservoir ainsi que  la taille de ces derniers. Voici le schéma de principe :&lt;br /&gt;
&lt;br /&gt;
[[Image:Schema_diode_phototransistor.png|vignette|center|500px|Schéma de principe.]].&lt;br /&gt;
&lt;br /&gt;
'''Test rapide de la portée :'''&lt;br /&gt;
&lt;br /&gt;
Calcul des résistances :&lt;br /&gt;
&lt;br /&gt;
Réception : une résistance de 4.7 kΩ est placée.&lt;br /&gt;
&lt;br /&gt;
Émission : nous alimentons la LED en 5 V. Elle possède un courant &amp;lt;math&amp;gt;U_d = 1.2 V&amp;lt;/math&amp;gt; pour 20 mA et supporte 100 mA continue. À 100 mA, &amp;lt;math&amp;gt;U_d = 1.4 V&amp;lt;/math&amp;gt;. Pour être certains d'avoir la meilleure portée possible, nous nous rapprochons des 100 mA. Ainsi, pour le dimensionnement de R nous obtenons :&lt;br /&gt;
&lt;br /&gt;
[[Image:Formule5.png|center|upright=50]]&lt;br /&gt;
1. A.N. : &amp;lt;math&amp;gt;V_{CC} = 5V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;U_d = 1.4V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;I_f = 0.1A&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
R = 36Ω. Soit, en normalisant, '''R = 47Ω'''.&lt;br /&gt;
&lt;br /&gt;
Avec ces données, nous obtenons une portée maximale de 30 cm.&lt;br /&gt;
&lt;br /&gt;
2. Nous faisons un autre test avec une intensité plus basse :&lt;br /&gt;
A.N. : &amp;lt;math&amp;gt;V_{CC} = 5V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;U_d = 1.2V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;I_f = 001A&amp;lt;/math&amp;gt;&lt;br /&gt;
R = 380Ω. Soit, en normalisant, '''R = 330Ω'''.&lt;br /&gt;
Avec ces données, nous obtenons une portée maximale de 22 cm.&lt;br /&gt;
&lt;br /&gt;
L'intérêt de connaître cette portée est que nous allons pouvoir adapter la taille du réservoir et de la gamelle afin de rendre notre dispositif réalisable. À titre de rappel, nous utilisons ce système afin de savoir si la gamelle est vide (Ce système fonctionnant en tout ou rien) et également afin de connaître le niveau approximatif des croquettes dans le réservoir. &lt;br /&gt;
&lt;br /&gt;
*Enfin, pour travailler, nous avons à notre disposition deux arduino : un arduino ''uno'' et un arduino ''méga''. L’utilisation du module wifi ESP8266 nous impose de travailler avec un arduino ''méga''. Cependant, les tests tels que pour le système LED infrarouge-phototransistor peuvent être réalisés indépendamment sur l’arduino ''uno''. Ainsi, nous pouvons travailler à deux en parallèle sur des arduino différents. Cependant, il a fallu réadapter le makefile permettant de flasher l’arduino à un arduino ''méga'' car celui que nous possédions ne fonctionnait que pour un arduino ''uno''. (Un « -D » étant nécessaire dans la ligne de commande pour flasher l’arduino dans le cas d’un ''méga'', qui ne l’était pas pour l’arduino ''uno''.)&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Lors de cette troisième semaine, nous réalisé des tests sur les deux arduinos. &lt;br /&gt;
&lt;br /&gt;
==== Le servomoteur et sa PWM ====&lt;br /&gt;
Tout d’abord, le premier test porte sur le servomoteur prévu pour faire tourner le système d’hélice et réapprovisionner la gamelle.&lt;br /&gt;
&lt;br /&gt;
Le servomoteur que nous utilisons est un servomoteur à courant continue. Il a l’avantage de pouvoir être contrôlé en vitesse et de pouvoir tourner à plus de 180°. &lt;br /&gt;
&lt;br /&gt;
Pour alimenter un servomoteur, il faut brancher ses trois connectiques sur l’alimentation 5V de l’arduino, sur la masse et sur une broche PWM. &lt;br /&gt;
&lt;br /&gt;
En effet, la consigne envoyée à un servomoteur est de type PWM (Pulse Width Modulation). Ce signal permet de faire varier la durée en état « haut » du signal grâce à la consigne que nous lui donnons. Voici un schéma montrant quelques exemples de modifications de la durée d’un état « haut » :&lt;br /&gt;
[[Image:PWM explications.png|center|300px]].&lt;br /&gt;
&lt;br /&gt;
La difficulté a été de programmer ce servomoteur en passant par le langage C. En effet, avec arduino IDE, il est plus aisé de le faire puisqu’il existe une bibliothèque servo.h permettant de programmer des servomoteurs facilement. En C, il a fallu se pencher sur le fonctionnement et le contrôle d’une PWM grâce aux différents registres de l’arduino. &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, il faut configurer les registres TCCR1A et TCCR1B afin d’activer la PWM en mode non-inversé et à fréquence élevée.  &lt;br /&gt;
&lt;br /&gt;
Enfin, il faut activer la PIN5 du port B en sortie (Pin PWM).&lt;br /&gt;
&lt;br /&gt;
Rentrons un peu plus dans le détail quant à la configuration des deux registres TCCR1A et TCCR1B.&lt;br /&gt;
TCCR0A = 1000 0001 = 0x81 et TCCR0B = 0000 0101  = 0x05&lt;br /&gt;
[[Image:TCCR0A.png|center|650px]].&lt;br /&gt;
[[Image:TCCR0B.png|center|650px]].&lt;br /&gt;
&lt;br /&gt;
TCCR0A : &lt;br /&gt;
   COM0A1 = 1 COM0A0 = 0 =&amp;gt; non-inverting mode&lt;br /&gt;
&lt;br /&gt;
   COM0B1 = 0 COM0B0 = 0 =&amp;gt; mode standard&lt;br /&gt;
&lt;br /&gt;
   WGM01 = 0 WGM00 = 1 =&amp;gt; PWM mode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TCCR0B : &lt;br /&gt;
   FOC0A = 0 FOC0B = 0 =&amp;gt; car PWM mode&lt;br /&gt;
&lt;br /&gt;
   WGM02 = 0 =&amp;gt; PWM mode&lt;br /&gt;
&lt;br /&gt;
   SC02 = 1 CS01 = 0 CS00 = 1 =&amp;gt; clk (entrée/sortie) /1024&lt;br /&gt;
&lt;br /&gt;
Pour connaître ces résultats, les tableaux descriptifs sont disponibles dans la datasheet de l'arduino méga, accessible dans les références à la fin du wiki.&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps, en modifiant directement le registre OCR0A, nous envoyons une commande au servomoteur. La durée en état « haut » est ainsi proportionnelle à la consigne saisie dans OCR0A.&lt;br /&gt;
&lt;br /&gt;
Le servomoteur tourne bien différemment en fonction de la valeur saisie dans OCR0A. Maintenant, il reste à comprendre comment contrôler de manière précise le servomoteur et sa position en fonction de la consigne.&lt;br /&gt;
&lt;br /&gt;
==== Le capteur ultrason ====&lt;br /&gt;
&lt;br /&gt;
=====  Présentation =====&lt;br /&gt;
Nous pensons utiliser le module HC-SR04 couplé à un arduino pour détecter la présence de l’animal devant la gamelle. Cela servira à ne pas prendre en considération le contenu de la gamelle pour savoir si elle est vide ou non lorsque l’animal se nourrit. Ou encore, cela aidera afin de pouvoir réaliser un suivi à savoir : à quel moment le chat a-t-il été manger ?&lt;br /&gt;
&lt;br /&gt;
En lisant la documentation technique du HC -SR04, nous en tirons ceci :&lt;br /&gt;
&lt;br /&gt;
[[Image:US data.png|center|550px]].&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement du système est simple et il suffit d'envoyer un message de 10µs minimum avec une écart de 60 ms minimum pour recevoir une réponse du capteur.&lt;br /&gt;
&lt;br /&gt;
Le capteur renvoi un signal qui a un temps proportionnel à sa distance par rapport à l’obstacle.&lt;br /&gt;
&lt;br /&gt;
=====  Expérimentation =====&lt;br /&gt;
Nous rajoutons des LEDs afin d’avoir une indication lorsqu’un signal est envoyé. La valeur reçue est visualisée à l’aide de l’outil minicom, la valeur étant envoyée sur le port série. Nous remarquons que le système fonctionne même si des imperfections de mesure subsistent (dues notamment au programme). La précision du système suffit néanmoins à  détecter le chat devant la gamelle.&lt;br /&gt;
&lt;br /&gt;
=====  Problème lié à l'étude =====&lt;br /&gt;
Le module utilise une fréquence de 40khz.&lt;br /&gt;
Suite à des vérifications, les chats et les chiens entendent des sons pouvant aller jusqu'à 60khz. &lt;br /&gt;
Une recherche a été effectuée sur les barrières repoussant les chiens et les chats. Malgré le peu de documentation technique que nous avons trouvé, nous remarquons  que les fréquences utilisées sont de l'ordre de 25 khz. Ces fréquences sont bien loin des 40khz de notre système. Cependant, une petite expérimentation a été réalisée sur un chat de 6 ans à l’aide d’une application smartphone générant des ultrasons. Il s’avère que le chat est dérangé par ces fréquences, le chat s'en va au bout de 10 minutes d’expérience.&lt;br /&gt;
&lt;br /&gt;
=====  Conclusion =====&lt;br /&gt;
Même si le module HC-SR04 est très simple d’utilisation, nous ne pouvons continuer à nous en servir pour notre projet de gamelle connectée.&lt;br /&gt;
&lt;br /&gt;
=====  Autre alternative =====&lt;br /&gt;
* Tapis de jauge de contrainte → couvre une surface trop petite&lt;br /&gt;
* Détecteur de présence infrarouge → convient pour des objets de taille supérieure à 15 cm  &lt;br /&gt;
&lt;br /&gt;
Notre choix se porte donc sur le capteur infrarouge, que nous programmerons dans une séance ultérieure.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
La semaine a été en grande partie consacrée à la réalisation d’un prototype pour le système d’hélice et le réservoir. Tout d’abord, nous avons dû faire plusieurs aller-retour au magasin afin d’acheter des planches pour la réalisation des différents prototypes. La première planche qui a été acheté était une medium, matériel qui n’est plus accepté dans la découpeuse laser puisqu’elle encrasse le filtre et la lentille de l’appareil. Nous avons donc du aller acheter les bonnes planches. De plus, il a fallu réserver des créneaux au fabricarium et apprendre à se servir de la découpeuse laser. Le prototype final n’est pas encore assemblé puisque nous réfléchissons à un système de « pied à coulisse » afin de pouvoir choisir le dosage unitaire que peut servir l’hélice.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5 et semaine 6===&lt;br /&gt;
'''Création d’un programme contrôlant la lecture et l’écriture sur la carte SD'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Pour rendre notre projet innovant par rapport aux autres gamelles connectées proposées sur le marché, nous avons décidé de faire un suivi lié à l'alimentation du chat. Par exemple, nous souhaitons savoir à quels moments de la journée l’animal va manger, pendant combien de temps, en quelles quantités etc…&lt;br /&gt;
Pour cela, nous devons stocker ces différentes données. Pour ce faire, nous utiliserons le shield SD/ethernet  suivant :&lt;br /&gt;
&lt;br /&gt;
[[Image:Shield sd ethernet.jpg|vignette|center|300px|Shield SD/ethernet.]]&lt;br /&gt;
&lt;br /&gt;
*Code arduino shield Sd/ethernet&lt;br /&gt;
&lt;br /&gt;
Pour commencer, l’expérimentation du shield  a été effectuée à l’aide d’arduino IDE afin de réaliser un prototype rapide et tester si le shield est efficace et permet de répondre à nos besoins.&lt;br /&gt;
&lt;br /&gt;
Nous nous basons sur l'exemple proposé par arduino IDE suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SD.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File myFile;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  // Open serial communications and wait for port to open:&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  while (!Serial) {&lt;br /&gt;
    ; // wait for serial port to connect. Needed for native USB port only&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Initializing SD card...&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if (!SD.begin(4)) {&lt;br /&gt;
    Serial.println(&amp;quot;initialization failed!&amp;quot;);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;initialization done.&amp;quot;);&lt;br /&gt;
  myFile = SD.open(&amp;quot;test.txt&amp;quot;, FILE_WRITE);&lt;br /&gt;
&lt;br /&gt;
  if (myFile) {&lt;br /&gt;
    Serial.print(&amp;quot;Writing to test.txt...&amp;quot;);&lt;br /&gt;
    myFile.println(&amp;quot;testing 1, 2, 3.&amp;quot;);&lt;br /&gt;
    myFile.close();&lt;br /&gt;
    Serial.println(&amp;quot;done.&amp;quot;);&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.println(&amp;quot;error opening test.txt&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  myFile = SD.open(&amp;quot;test.txt&amp;quot;);&lt;br /&gt;
  if (myFile) {&lt;br /&gt;
    Serial.println(&amp;quot;test.txt:&amp;quot;);&lt;br /&gt;
    while (myFile.available()) {&lt;br /&gt;
      Serial.write(myFile.read());&lt;br /&gt;
    }&lt;br /&gt;
    myFile.close();&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.println(&amp;quot;error opening test.txt&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous remarquons que nous écrivons facilement sur la carte SD grâce à la bibliothèque disponible. En ajoutant quelques boutons et en modifiant légèrement le code, nous arrivons à sauvegarder la durée de maintien du bouton ainsi que la fréquence d’actionnement.&lt;br /&gt;
&lt;br /&gt;
*Code C Shield  SD/ethernet&lt;br /&gt;
&lt;br /&gt;
Une fois le prototype fait et fonctionnel, nous décidons d’écrire le code en C. Pour cela, nous utilisons en particulier deux bibliothèques fournies par Monsieur REDON : Sd2Card et spi.&lt;br /&gt;
Après de multiples tentatives, nous arrivons toujours à l'erreur suivante : “SD_CARD_ERROR_CMD0”. Cette dernière est liée à un timeout qui persiste malgré la modification de paramètres dépendants.&lt;br /&gt;
&lt;br /&gt;
*Changement de matériel&lt;br /&gt;
&lt;br /&gt;
Monsieur REDON nous a fourni un nouveau shield uniquement SD cette fois-ci pour tester si le problème est matériel. En voici la photographie :&lt;br /&gt;
&lt;br /&gt;
[[Image:Shield sd simple.jpg|vignette|center|300px|Shield SD.]]&lt;br /&gt;
&lt;br /&gt;
*Code C Shield SD&lt;br /&gt;
&lt;br /&gt;
En recompilant le code sur le nouveau shield, nous remarquons qu'il n'y a pu d'erreur liée à l'initialisation de la carte SD.&lt;br /&gt;
Suite à des expérimentations liées à la prise en main du code exemple donné, nous arrivons maintenant à écrire une information dans un bloc est à relire cette information plus tard.&lt;br /&gt;
&lt;br /&gt;
Voici un extrait lu depuis l’utilitaire minicom lors de la lecture de la carte SD :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;status de la carte sd = 1                                                 &lt;br /&gt;
status=0                                                                  &lt;br /&gt;
erreur=0                                                                  &lt;br /&gt;
type=3                                                                    &lt;br /&gt;
taille=7744512                                                            &lt;br /&gt;
Lecture                                                                   &lt;br /&gt;
statut=0                                                                  &lt;br /&gt;
bloc[0]=1 bloc[1]=0 bloc[2]=aa bloc[3]=bb bloc[4]=cc bloc[5]=0&lt;br /&gt;
statut=0   &lt;br /&gt;
bloc[0]=dd bloc[1]=ee bloc[2]=ff bloc[3]=0 bloc[4]=0 bloc[5]=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le shield fonctionne comme désiré et nous pourrons ainsi enregistrer des informations afin de les traiter plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Configuration du module WiFi ESP8266'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
L’ESP8266 est un circuit intégré à un microcontrôleur qui fait office de module WiFi. Il possède un total de 9 GPIO (3.3V) ce qui lui permet d’être utilisé indépendamment, sans même se connecter à un autre microcontrôleur. La datasheet de ce composant est disponible dans la rubrique « Datasheet » en bas de page. Pour notre projet, l’utilisation seule de ce module ne suffisait pas. C’est pourquoi, nous le connectons à un arduino afin de pouvoir profiter des différentes entrées/sorties de ce microcontrôleur. Voici une photographie du composant en question :&lt;br /&gt;
&lt;br /&gt;
[[Image:Esp8266.jpg|vignette|center|300px|Shield SD.]]&lt;br /&gt;
&lt;br /&gt;
L'adresse IP de notre ESP8266 s'obtient en connectant notre composant à un réseau local. Ainsi, nous savons que cette adresse est la suivante : 192.168.43.53 .&lt;br /&gt;
&lt;br /&gt;
*Programmation du module WiFi en C&lt;br /&gt;
&lt;br /&gt;
De nombreux problèmes ont été rencontrés pour configurer l’ESP8266 en C. Le programme devant être directement chargé sur ce dernier, de nombreuses erreurs en ont résulté. Après de nombreuses heures passées à essayer de régler ces problèmes, nous avons discuté de cela avec l’un de nos encadrant, M. REDON, qui nous a autorisé à programmer le module WiFi directement sur arduino IDE, puisqu’une bibliothèque existante rend la tâche moins ardue. De ce fait, l’avantage de l’ESP8266 est que nous chargeons un programme directement sur ce dernier. Ainsi, nous pouvons programmer le reste de notre projet en C, en compilant et téléversant le fichier sur l’arduino sans perturber le fonctionnement du module WiFi.&lt;br /&gt;
&lt;br /&gt;
*Programmation du module WiFi sur arduino IDE&lt;br /&gt;
&lt;br /&gt;
Tout d’abord, lors de l’installation d’arduino IDE, il faut veiller à ce que la version soit suffisamment récente pour pouvoir y télécharger des « boards ». En effet, il faut, grâce à un lien disponible sur le site d’arduino, ajouter l’ESP8266 en tant que board dans le logiciel afin que le composant puisse être reconnu afin de téléverser un programme. &lt;br /&gt;
Ensuite, l’ESP doit être connectée en USB sur à l’ordinateur afin qu’elle soit visible sur son port propre (USB0 en l’occurrence). Ainsi, lors du téléversement du fichier, il faut sélectionner ce port dans la liste de ceux disponible. (Beaucoup de soucis ont été rencontrés à ce propos, l’ESP n’étant pas toujours visible comme étant disponible sur arduino IDE). &lt;br /&gt;
Enfin, un test basique a été réalisé qui consiste à faire clignoter une LED connectée à un GPIO de l’ESP et à se connecter à un réseau WiFi. L’avantage de programmer en arduino IDE est que, par un simple « #include &amp;lt;ESP8266WiFi.h&amp;gt; », nous ajoutons la bibliothèque propre à notre module WiFi. La fonction WiFi.begin permet alors de se connecter facilement à un réseau local en passant en paramètres le nom du réseau sans fil (SSID) ainsi que son mot de passe. &lt;br /&gt;
&lt;br /&gt;
Voici une visualisation des informations envoyées sur l'interface série :&lt;br /&gt;
&lt;br /&gt;
[[Image:Capture esp.png|vignette|center|500px|Visualisation sur l'interface série.]]&lt;br /&gt;
&lt;br /&gt;
*Réseau&lt;br /&gt;
&lt;br /&gt;
La question de la connexion réseau entre le module WiFi et l’application mobile, que nous allons bientôt réaliser, se pose. Nous avons travaillé également sur cette partie lors de la semaine 6. Cependant, nous expliciterons cette partie un peu plus tard afin d’aborder en même temps la partie réseau du côté de l’application mobile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
'''Capteur Infrarouge IRS05A'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Dans la partie liée au suivi de l'alimentation, nous avons besoin d'un détecteur de présence afin de savoir si le chat est en train de se nourrir ou pas. Pour cela, nous avions testé le module HC-SR04, expérimentation qui n'avait pas aboutie due au fait que le chat entende les ultrasons. Nous avons choisi en remplacement le module irs05a. En voici une photographie :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:IRS05A.jpg|center|200px]]&lt;br /&gt;
&lt;br /&gt;
*Programme C&lt;br /&gt;
&lt;br /&gt;
En étudiant la datasheet du composant, nous trouvons ceci : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour l'expérimentation, nous avons juste besoin de commander l'entrée enable et de placer une LED à la sortie output afin de visualiser si le module détecte ou non un objet. Suite à cette expérimentation, nous avons pu définir la zone de détection du module. Voici un schéma explicatif :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:IRS05A extrait datasheet.png|center|400px]]&lt;br /&gt;
&lt;br /&gt;
Grâce à ce schéma, nous avons pu faire un choix matériel quant à celui de l’emplacement de nos deux capteurs de présence. Ils seront disposés comme suit :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema ir disposition.jpg|center|200px]]&lt;br /&gt;
&lt;br /&gt;
'''Application mobile'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
L’objectif de cette semaine a été en partie de se familiariser avec l’environnement de développement intégré (IDE) d’Android Studio. Sous Android, il est commun de passer par cette plateforme afin de programmer différentes applications mobiles. Cela se code en java. &lt;br /&gt;
&lt;br /&gt;
*Application pour la gamelle connectée&lt;br /&gt;
&lt;br /&gt;
Tout d’abord, le domaine des applications mobiles est très complexe. De plus, la documentation technique de java est également très fournie. Cela a rendu la tâche de réaliser une application android basique très longue. Finalement, nous voulons créer une application mobile permettant de visualiser les statistiques de son animal,  de contrôler la gamelle manuellement ou de programmer des modes pour l’alimenter. Pour le moment, le squelette général a été créé, permettant d’afficher de nouvelles fenêtres à chaque choix de « mode ».  Voici des screenshots de l’application actuelle :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:App premiere page.png|200px]] [[Fichier:Onglet1.png|200px]] [[Fichier:Onglet2.png|200px]] [[Fichier:Onglet3 en cours.png|200px]] &lt;br /&gt;
&lt;br /&gt;
*Réseau &lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons voulu aller plus loin dans la fenêtre consacrée au réapprovisionnement manuel. En effet, nous souhaitons réaliser un test simple qui consiste à allumer une LED connectée à un GPIO de l’ESP8266 par simple appui d’un bouton depuis l’application mobile. Le problème qui s’est alors posé a été celui de créer un lien serveur/client entre le module WiFi et l’application mobile. L’idée serait alors de créer un serveur TCP sur arduino IDE qui se chargerait sur l’ESP8266 et de créer, à l’aide de sockets en java, un client sur l’application mobile. Le serveur TCP a été réalisé sur l’arduino mais n’a pas encore pu être testé. La réalisation du client sur l’application mobile est l’objet de la semaine 8, les tests seront alors réalisés et explicités à ce moment là.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8 et 9===&lt;br /&gt;
'''Application mobile, partie réseau'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Le serveur TCP réalisé sous arduino IDE directement sur le module WiFi a été testé à l’aide de la commande nc. En effet, nous avons utilisé un terminal téléchargé sur le téléphone afin de connecter le module WiFi et le téléphone sur le même réseau. En envoyant les requêtes directement via la commande nc, nous sommes capables d’allumer et d’éteindre la LED connectée au GPIO de l’ESP8266. Maintenant, il faut réaliser la même chose mais côté application mobile.&lt;br /&gt;
&lt;br /&gt;
La partie concernant la création du socket et l’envoi de données à l’esp8266 nous a pris beaucoup de temps. En effet, le problème ne venait pas de notre code mais simplement du fait que la version android du téléphone utilisé comme point d’accès internet empêchait l’application de connecter la socket à l’adresse IP du module WiFi. Après avoir configuré un routeur et connecté le module WiFi et le téléphone dessus, nous étions capable d’envoyer des requêtes au module WiFi afin qu’il allume une LED notamment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Principe&lt;br /&gt;
&lt;br /&gt;
Il est préférable de réaliser la partie réseau d’une application mobile via un thread afin de rendre l’application la plus fluide possible. Par exemple, l’appui du bouton ON permet de modifier une chaine de caractère et lance le thread d’envoi. Dans ce thread, l’application connecte la socket au module WiFI à l’aide de son adresse IP et du port de communication spécifié dans le programme du serveur TCP sur arduino IDE. Ensuite, la socket se charge d’envoyer la chaine de caractère à l’esp8266. Cela se fait par l’utilisation de l’objet ''DataOutputStream'' et de sa méthode ''writeBytes'' qui permet l’envoi simple d’une chaine de caractère. &lt;br /&gt;
&lt;br /&gt;
Pour la réception des données, il s’agit du même principe mais nous utilisons l’objet DataInputStream.&lt;br /&gt;
&lt;br /&gt;
Voici un aperçu de ce qui est visualisable sur l'interface série de l'arduino IDE, les requêtes sont bien envoyées :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Serveur ok.png|center|100px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 10 et +===&lt;br /&gt;
'''La base de données sur l'application android'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons déjà les données directement sur la gamelle grâce à la carte SD. Cependant, il nous a semblé nécessaire de garder en mémoire les statistiques de notre animal de compagnie directement sur l’application. Après avoir lu le livre « L’art du développement Android » de Grant Allen, prêté notre enseignant, deux possibilités nous sont apparues. La première était de manipuler des fichiers qui seraient générés par l’application afin de garder en mémoire ce que nous souhaitons. La seconde était de créer une base de données locale grâce à la base de données installée sur Android, ''SQLite''. &lt;br /&gt;
&lt;br /&gt;
*Présentation rapide de SQLite&lt;br /&gt;
&lt;br /&gt;
''SQLite'' utilise un dialecte de SQL afin de réaliser des requêtes de manipulations de données. Les « SELECT », « INSERT », « REMOVE », peuvent ainsi être utilisées.  ''SQLite'' est particulièrement approprié pour l’utilisation android car son utilisation ne repose pas sur un modèle client-serveur (comme ''mysql'' ou ''PostgreSQL'' que nous connaissons). Ainsi, l’intégralité de la base de données est stockée dans un fichier unique.&lt;br /&gt;
&lt;br /&gt;
*Base de données&lt;br /&gt;
&lt;br /&gt;
La base de données que nous avons implémentée permet de répertorier tous les jours enregistrés par la gamelle afin de pouvoir réaliser des traitements statistiques derrière. La date a été stockée en chaine de caractère car le constructeur de la forme ''Date(int year, int month, int day)'' est obsolète pour la version de l’API que nous utilisions. Le deuxième constructeur est de la forme ''Date(long Date)'' et il faut fournir à cette méthode un nombre de millisecondes qu’elle va convertir au format Date de Java. Cela nous semblait peu pratique. &lt;br /&gt;
&lt;br /&gt;
Voici un petit tableau illustrant ce que nous souhaitons stocker dans la base de données :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tableau recap bdd.png|center|450px]]&lt;br /&gt;
&lt;br /&gt;
Trois classes ont été crées : Jour.java, JoursBDD.java et MaBaseSQLite.java.&lt;br /&gt;
&lt;br /&gt;
Voici un schéma UML résumant ces trois classes :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:BDD_lulu.png|center|700px]]&lt;br /&gt;
&lt;br /&gt;
'''La base de données et Singleton'''&lt;br /&gt;
&lt;br /&gt;
Notre base de donnée étant créée et fonctionnelle, nous avions besoin de l’avoir à disposition n’importe où dans l’application. Or, passer un objet d’une page à une autre est simple pour des objets peu complexes. Cependant, il était plus difficile de passer notre base de données avec les méthodes traditionnelles utilisées auparavant. Nous avons donc utilisé un singleton. Le singleton est une instance unique d’une classe. Cela permet à la fois de récupérer facilement cette instance partout dans l’application mais cela permet également de converser une unicité de cette dernière, ce qui est important pour  une base de données. Ainsi, nous avons modifié les classes décrites précédemment afin d’implémenter le singleton. &lt;br /&gt;
&lt;br /&gt;
Deux variables ont été ajoutées à la classe joursBDD : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;private static Context context;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;private static JoursBDDSingleton mJoursBDDSingleton;  //instance unique&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deux méthodes sont également concernées dans ce changement :&lt;br /&gt;
&amp;lt;pre&amp;gt;//Méthode de restauration de contexte&lt;br /&gt;
public JoursBDD(Context context)&lt;br /&gt;
{&lt;br /&gt;
    this.context = context;&lt;br /&gt;
    //creation de la base de donnees&lt;br /&gt;
    maBaseSQLite = new MaBaseSQLite(context, NOM_BDD, null, VERSION_BDD);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Methode de recuperation de l'instance de la BDD&lt;br /&gt;
public static synchronized JoursBD getInstance(Context context){&lt;br /&gt;
    //Création de la base de données et de sa table&lt;br /&gt;
    if(mJoursBDD==null) {&lt;br /&gt;
        //CreateJoursBDD(context);&lt;br /&gt;
        mJoursBDD = new JoursBDD(context);&lt;br /&gt;
    }&lt;br /&gt;
    return mJoursBDD;&lt;br /&gt;
} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, juste un réalisant une récupération de l’instance grâce à  l’appel de la méthode getInstance : JoursBDD.getInstance(this); , il est aisé de le faire dans une nouvelle activité.&lt;br /&gt;
&lt;br /&gt;
'''Le traitement des données'''&lt;br /&gt;
&lt;br /&gt;
Une partie « statistiques » a été ajoutée à l’application mobile. Elle a pour but l’étude de l’alimentation de l’animal grâce à l’utilisation de graphiques et de tableaux. Afin de rendre la chose plus visuelle, l’utilisateur peut sélectionner soit un histogramme, soit un graphique linéaire, soit un tableau de données grâce à des radio boutons. Ensuite, l’utilisateur sélectionne soit les 7 derniers jours soit le dernier mois via un simple bouton. &lt;br /&gt;
Voici un aperçu de la première page :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:statistiques_tableau_petfun.png|center|200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Présentation rapide de achartengine :&lt;br /&gt;
Afin de réaliser l’affichage de graphiques, nous avons utilisé une bibliothèque appelée ''achartengine''. Cette bibliothèque permet la personnalisation de graphiques et l’affichage sous forme d’histogramme ou encore de graphiques linéaires des données. Cette bibliothèque facilite la dynamisation de l’activité. Nous restant peu de temps dans le projet, nous avons décidé d’exploiter cette ressource afin de réaliser une page propre et personnalisée. Nous pouvons utiliser cette bibliothèque en l’ajoutant dans les fichiers ''gradle'' du projet.&lt;br /&gt;
&lt;br /&gt;
Voici les graphiques que nous affichons :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Graphiques stats petfun1.png|200px]] [[Fichier:Graphiques stats petfun2.png|200px]]&lt;br /&gt;
&lt;br /&gt;
*Limites et améliorations :&lt;br /&gt;
L’idée d’avoir créée un bouton permettant d’afficher un graphique de la dernière semaine avait pour but une amélioration par la suite. En effet, l’objectif est de pouvoir, une fois le graphique affiché, passer d’une semaine à une autre. De même pour les mois, nous souhaiterions pouvoir, à partir du dernier mois, afficher les précédents en ''slidant'' le graphique ou en appuyant sur une touche. &lt;br /&gt;
&lt;br /&gt;
'''Configuration des paramètres'''&lt;br /&gt;
&lt;br /&gt;
*Introduction &lt;br /&gt;
&lt;br /&gt;
Une page de permettant de configurer les paramètres de l'application a été ajoutée à l’application mobile. Elle a pour but d’enregistrer les heures de repas de l'animal, le poids contenu dans la gamelle, le nom de l’animal ou encore sa photographie. Le poids contenu dans la gamelle doit être notifié car cette dernière est ajustable grâce à des rails présents sur la gamelle et ajustables. Ainsi, l’utilisateur peut doser la quantité qu’il souhaite. Il devra alors le notifier dans l’application afin que le traitement des données en tienne compte.&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Dans l’activité de contrôle ''automatique'', il s’agit en fait de configurer des paramètres. Sur cette page, les paramètres actuels de la gamelle sont affichés à l’écran. L’utilisateur peut dès lors, via des boutons, sélectionner deux activités : une pour changer les paramètres propres à la gamelle et l’autre pour changer ceux propres à l’animal. &lt;br /&gt;
&lt;br /&gt;
*Paramètres de la gamelle&lt;br /&gt;
&lt;br /&gt;
Dans les paramètres de la gamelle, deux choses sont configurables : les heures de repas de l’animal et la quantité de croquettes ajustée sur la gamelle. Afin de rentrer les heures de repas, le widget ''TimePicker'' a été utilisé et configuré en format 24 heures. L’appui de la touche « AJOUT HEURE » permet l’ajout de l’heure saisi sur le ''TimePicker'' dans les paramètres de l’application. De plus, afin de saisir le poids de la gamelle, un simple ''EditText'' permet de le faire. Si l’utilisateur ne saisi pas un nombre, un message s’affiche à l’écran le prévenant du problème de format.&lt;br /&gt;
&lt;br /&gt;
L’appui de la touche « VALIDER CONFIGURATION » permet la sauvegarde de la saisie et le retour à la première activité. &lt;br /&gt;
&lt;br /&gt;
L’appui de la touche « SUPPRIMER CONFIGURATION » permet la suppression des heures de repas enregistrées dans l’application.&lt;br /&gt;
&lt;br /&gt;
*Paramètres de l’animal&lt;br /&gt;
&lt;br /&gt;
Dans les paramètres de l’animal, le nom ainsi que la photographie de ce dernier peuvent être ajoutés. Le nom est simplement enregistré grâce à un ''EditText''. L’avatar peut être cherché par l’utilisateur dans ses fichiers de téléphone. (Des permissions spécifiques sont nécessaires). L'avatar s'affiche alors en première page de l'application.&lt;br /&gt;
&lt;br /&gt;
Maintenant, la question d’enregistrer tous ses paramètres s’est posée. En effet, une fois l’application fermée, tous les objets et toutes les variables créées dans l’application sont désallouées. Les paramètres rentrés par l’utilisateur sont alors perdus. &lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons fait le choix de modifier les préférences de l’application. Ces préférences renseignent des paires clé-valeur de données.&lt;br /&gt;
&lt;br /&gt;
*SharePreferences&lt;br /&gt;
&lt;br /&gt;
Nous devons créer un objet ''SharePreferences'' via la méthode ''getSharedPreferences'' en lui attribuant un nom unique et en privatisant son accès. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; final SharedPreferences prefs = getSharedPreferences(&amp;quot;Configuration&amp;quot;, Context.MODE_PRIVATE); &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dès lors, nous pouvons restaurer cet objet dans n’importe quelle activité, exactement comme un ''Singleton''. &lt;br /&gt;
Pour créer ou modifier des préférences, nous devons appeler la méthode ''edit()'' de l’objet ''SharedPreferences''. Une fois la valeur modifiée, il est impératif de faire appel à la méthode ''apply()'' ou ''commit()'' de l’objet afin de sauvegarder les changements apportés.	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;final SharedPreferences.Editor editor = prefs.edit();&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, les horaires sont stockées avec une clé de la forme « horairek », k représentant la numérotation des différentes heures saisies par l’utilisateur. Une variable « Taille » fait également partie des préférences afin de pouvoir savoir à tout moment le nombre de repas programmés par l’utilisateur. Le nom de l’animal est stocké avec la clé « Name » et le poids avec la clé « Poids ». Il est alors aisé de retrouvé les valeurs correspondantes dans les préférences et de pouvoir les supprimer de manière spécifique si nécessaire. &lt;br /&gt;
&lt;br /&gt;
Voici donc ce que cela peut nous donner :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Petfun config1.png|200px]] [[Fichier:Petfun config2.png|200px]] [[Fichier:Petfun config4.png|200px]] [[Fichier:Petfun config3.png|200px]]&lt;br /&gt;
&lt;br /&gt;
'''Contrôle du servomoteur via l'application'''&lt;br /&gt;
&lt;br /&gt;
La solution que nous avons choisi est de relier un GPIO de l’ESP8266 à un PIN digital de l’arduino. Ainsi, étant capables d’allumer une LED par appui d’une touche sur l’application mobile, nous serions capables de faire changer l’état d’un PIN de l’arduino et ainsi en fonction de cela, faire tourner le moteur. &lt;br /&gt;
En mettant en place cette méthode, nous nous sommes rendu compte que le PIN de l’arduino ne réagissait pas à du 3.3V, envoyé par le module wifi. Nous avons donc mis en place un ''high shifter'' à l’aide d’un transistor afin de faire passer la tension d’entrée de 3.3V à 5V. Sur le schéma, R1 = R2 = 10 kΩ. R3 = 100 kΩ. La tension Output mesurée est de [[Fichier:FormulePetfun.png|100px]].&lt;br /&gt;
&lt;br /&gt;
Voici le schéma : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:HighShifterPetfunPetfun.jpg|center|250px]]&lt;br /&gt;
&lt;br /&gt;
Voici la photographie du câblage :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cablage petfun.jpg|center|450px]]&lt;br /&gt;
&lt;br /&gt;
'''Aperçu final de la partie mécanique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Croquette.png|center|200px]]&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;br /&gt;
[[Fichier:Rapport_P37_damiens_dorian.pdf‎ ]]&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&lt;br /&gt;
==='''Datasheet'''===&lt;br /&gt;
ESP8266 Adafruit breakout : https://cdn-learn.adafruit.com/downloads/pdf/adafruit-huzzah-esp8266-breakout.pdf&lt;br /&gt;
&lt;br /&gt;
Arduino méga 2560 : http://www.atmel.com/Images/Atmel-2549-8-bit-AVR-Microcontroller-ATmega640-1280-1281-2560-2561_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
L'ultrason HC-SR04 : http://www.gotronic.fr/pj2-hc-sr04-utilisation-avec-picaxe-1343.pdf&lt;br /&gt;
&lt;br /&gt;
Le capteur de présence Infrarouge IRS05A : https://www.pololu.com/file/0J615/tssp77038.pdf&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P37&amp;diff=42252</id>
		<title>IMA4 2016/2017 P37</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P37&amp;diff=42252"/>
				<updated>2017-05-15T16:58:40Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Expérimentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Cahier des charges''' ==&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
L’objectif de ce projet est de fabriquer une gamelle pour animaux connectée. Pour ce faire, trois grands axes sont à dégager : une partie informatique, électronique et mécanique. &lt;br /&gt;
&lt;br /&gt;
==== Partie mécanique ====&lt;br /&gt;
'''Structure du système'''&lt;br /&gt;
*Le réservoir. Deux systèmes peuvent être réalisés : &lt;br /&gt;
**Un système de trappes pour le distributeur : deux trappes l’une en dessous de l’autre. &lt;br /&gt;
**Un système de vis sans fin qui permettrait d’alimenter la gamelle.&lt;br /&gt;
&lt;br /&gt;
*La gamelle. Deux méthodes sont possibles :&lt;br /&gt;
**Mesure du poids en prenant une balance déjà existante et en récupérant et en traitant les sorties.&lt;br /&gt;
**Passer par un système d’estimation de volumes. Dans la gamelle, il y aurait des capteurs permettant de connaître la quantité en volume présente dans la gamelle.&lt;br /&gt;
&lt;br /&gt;
Globalement, ces systèmes sont susceptibles de changer suivant l'état de l'art qui sera réalisé par la suite.&lt;br /&gt;
&lt;br /&gt;
==== Partie électronique ====&lt;br /&gt;
*Alimentation. Deux systèmes sont envisagés pour l’alimentation : Un système nomade avec une batterie  pour permettre d’avoir une gamelle déplaçable ou un système fixe alimenté par le secteur ou en usb.&lt;br /&gt;
**Batterie : Nous avons besoin d’une batterie qui peut garder l’énergie suffisamment longtemps pour éviter de devoir recharger la gamelle trop souvent. Une durée de vie d’une semaine est envisagée au minimum.&lt;br /&gt;
**Secteur&lt;br /&gt;
&lt;br /&gt;
*Interface Homme/machine&lt;br /&gt;
**Capteurs&lt;br /&gt;
***Des LEDs couplées à un phototransistor pourraient permettre de connaître la présence ou l’absence de croquettes dans la gamelle.&lt;br /&gt;
***Ultrason pour connaître la présence ou non de l'animal devant la gamelle&lt;br /&gt;
***Autres.&lt;br /&gt;
**Indicateurs : Des indicateurs peuvent être implantés sur le système physique : des LEDS indicatrices de l’état de batterie (si l'alimentation nomade est privilégiée) ou de l’état du réservoir (plein ou vide) sont envisagés.&lt;br /&gt;
&lt;br /&gt;
==== Partie informatique ====&lt;br /&gt;
*Unité de contrôle&lt;br /&gt;
**Utilisation d’un arduino avec un module wifi dans le but de réaliser une communication externe via une application mobile Androïd par exemple. &lt;br /&gt;
**Utilisation d’un raspberry avec création d’un serveur Apache pour permettre de communiquer avec l’utilisateur.&lt;br /&gt;
**Utilisation d'un module communiquant autre que les deux cités précédemment.&lt;br /&gt;
*En bonus :&lt;br /&gt;
**Création d’un système de contrôle à distance en mettant en place une caméra afin que l’utilisateur puisse avoir des images à distance, ou simplement une caméra série afin d'obtenir des images de contrôle. Ce système n’aura pas besoin d’être temps réel. Il pourra être implémenté grâce au serveur apache de la raspberry, si l’utilisation de celle-ci est retenue.&lt;br /&gt;
**Des actionneurs pour permettre à l’utilisateur interagir avec son chat à distance (Buzzer, laser, son, …).&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel et logiciel===&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous avons réalisé l'état de l'art des gamelles connectées déjà réalisées et commercialisées. Voici le lien PDF permettant d’accéder à ce fichier.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Etat_de_l_art.pdf]]&lt;br /&gt;
&lt;br /&gt;
Finalement, nos choix techniques sont les suivants : &lt;br /&gt;
*Matériel&lt;br /&gt;
**Mécanique&lt;br /&gt;
***Un système d’hélice contrôlée par un moteur permettant de déverser des croquettes en quantités connues. (Un schéma du système sera réalisé rapidement).&lt;br /&gt;
**Électronique&lt;br /&gt;
***Un adaptateur capable de générer une tension de 5V à partir du réseau.&lt;br /&gt;
***Des LEDs infrarouges couplées à des photodiodes afin de contrôler l'état de la gamelle et du réservoir.&lt;br /&gt;
***Un servomoteur 360° afin de faire tourner le système d'hélice et permettant ainsi de déverser une dose de croquettes dans la gamelle.&lt;br /&gt;
***Des LEDs permettant de visualiser l'état du système (alimentation du circuit, réservoir vide,...) et les résistances qui vont de pair.&lt;br /&gt;
***Un capteur Ultrason afin de pouvoir vérifier la présence ou non d'un animal devant la gamelle.&lt;br /&gt;
**Informatique&lt;br /&gt;
***Un arduino Méga car l'arduino Uno sera limité lorsque nous communiquerons entre le module wifi et l'application mobile.&lt;br /&gt;
***Un module Wifi ESP8266.&lt;br /&gt;
***Une carte shield SD afin de stocker toutes les variables de l'utilisateur et de son chat.&lt;br /&gt;
***Un module horloge temps réel (RTC) afin de pouvoir programmer en fonction de l'heure qu'il est si le choix de l'utilisateur porte sur le réapprovisionnement de la gamelle de cette manière là.&lt;br /&gt;
&lt;br /&gt;
En solution de secours : &lt;br /&gt;
*Un rapsberry&lt;br /&gt;
*Une balance à modifier manuellement&lt;br /&gt;
&lt;br /&gt;
*Logiciel&lt;br /&gt;
**Solidworks afin de pouvoir concevoir les différentes parties du système mécanique.&lt;br /&gt;
**Les logiciels de programmation (Sublime, vim, emacs, gcc...)&lt;br /&gt;
&lt;br /&gt;
*Autres&lt;br /&gt;
**Utilisation des machines mises à disposition des étudiants au Fablab : découpeuse laser et imprimante 3D pour la conception de prototypes.&lt;br /&gt;
&lt;br /&gt;
==Tableau==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Composant !! Quantité requise !! Disponible (M. Redon) ? !! À commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |Émetteur et récepteur infrarouge/photodiode&lt;br /&gt;
 |Entre 6 et 7 au minimum&lt;br /&gt;
 |Une partie&lt;br /&gt;
 |Oui&lt;br /&gt;
 |1 LED infrarouge et 1 photodiode ont été empruntés&lt;br /&gt;
 |-&lt;br /&gt;
 |Adaptateur PS512S&lt;br /&gt;
 |1&lt;br /&gt;
 |Non&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Lien Gotronic : [http://www.gotronic.fr/art-adaptateur-ps512s-19913.htm]&lt;br /&gt;
 |-&lt;br /&gt;
 |Shield carte SD&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Nous avons eu une carte shield Ethernet - SD ainsi que la carte SD.&lt;br /&gt;
 |-&lt;br /&gt;
 |Module horloge temps réel (RTC)&lt;br /&gt;
 |1&lt;br /&gt;
 |Non&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Lien Gotronic : [http://www.gotronic.fr/art-module-horloge-temps-reel-ada3296-25536.htm]&lt;br /&gt;
 |-&lt;br /&gt;
 |Capteur Ultrason&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Emprunté&lt;br /&gt;
 |-&lt;br /&gt;
 |LEDs&lt;br /&gt;
 |minimum 3&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Plusieurs empruntées&lt;br /&gt;
 |-&lt;br /&gt;
 |Résistances&lt;br /&gt;
 |Une vingtaine&lt;br /&gt;
 |Oui (C205)&lt;br /&gt;
 |Non&lt;br /&gt;
 |Plusieurs empruntées&lt;br /&gt;
 |-&lt;br /&gt;
 |Arduino méga&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Un arduino méga et un arduino uno (pour les tests) ont été empruntés&lt;br /&gt;
 |-&lt;br /&gt;
 |ESP8266&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |La version 012 a été empruntée&lt;br /&gt;
 |-&lt;br /&gt;
 |Servomoteur 360&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Emprunté&lt;br /&gt;
 |-&lt;br /&gt;
 |Solution de secours : Rapsberry&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Pas encore emprunté, solution de secours&lt;br /&gt;
 |-&lt;br /&gt;
 |Solution de secours : Balance&lt;br /&gt;
 |1&lt;br /&gt;
 |Non&lt;br /&gt;
 |Non&lt;br /&gt;
 |Pas encore emprunté, solution de secours&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
*Étude et réalisation d'un système à base de LEDs infrarouges et de photodiodes afin de pouvoir estimer si la gamelle est vide ou pleine. De même pour le réservoir.&lt;br /&gt;
**Circuit d'émission : LED Infrarouge&lt;br /&gt;
**Circuit de réception : Photodiode&lt;br /&gt;
**Étude des emplacements stratégiques dans la gamelle et le réservoir&lt;br /&gt;
*Réalisation d'un prototype de gamelle&lt;br /&gt;
**Conception 3D de l'hélice sur laquelle le servomoteur va venir se greffer&lt;br /&gt;
**Conception 3D de la gamelle complète&lt;br /&gt;
**Découpage/impression de prototypes&lt;br /&gt;
*Étude de l'ESP8266&lt;br /&gt;
*Tests d'écriture et de lecture sur la carte SD depuis l'arduino&lt;br /&gt;
*Étude du module d'horloge temps réel (RTC)&lt;br /&gt;
*Contrôle des différents capteurs en incluant le servomoteur&lt;br /&gt;
*Création de l'application mobile&lt;br /&gt;
*Mise en relation des différentes parties informatiques du système&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 et + !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 3H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Réalisation de l'état de l'art&lt;br /&gt;
| &lt;br /&gt;
|6H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|-&lt;br /&gt;
|Échange quant aux technologies et au système mécanique à choisir&lt;br /&gt;
| &lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste et de la répartition des tâches&lt;br /&gt;
| &lt;br /&gt;
|2H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2H00&lt;br /&gt;
|-&lt;br /&gt;
| Recherches quant aux échelles de dosage (Quelles quantités de nourriture consomment les chats en fonction de leur poids ?)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste de matériel et établissement des besoins (meilleur rapport besoin/prix étudié)&lt;br /&gt;
| &lt;br /&gt;
|5H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5H00&lt;br /&gt;
|-&lt;br /&gt;
| Modèle 3D de l'hélice&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Modèle 3D du réservoir&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|-&lt;br /&gt;
| Étude des LEDs Infrarouge et des photodiodes&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Tests sur le module wifi ESP8266&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|8H00&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|16H00&lt;br /&gt;
|-&lt;br /&gt;
| Tests de lecture et écriture sur la carte SD&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|6H00&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|16H00&lt;br /&gt;
|-&lt;br /&gt;
| Étude du servomoteur et réalisation d'un programme le contrôlant en C&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Prototype de l'hélice et du réservoir&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|-&lt;br /&gt;
| Achat de planches pour la réalisation des prototypes de la gamelle en bois&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Étude du capteur Infrarouge et réalisation d'un programme le contrôlant en C&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main d'androïd studio et réalisation d'une ébauche d'application mobile pour notre gamelle connectée&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|10H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|13H00&lt;br /&gt;
|-&lt;br /&gt;
| Création du réseau établi entre le système et l'application android (problème avec le point d'accès)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|8H00&lt;br /&gt;
|8H00&lt;br /&gt;
|4H00&lt;br /&gt;
|24H00&lt;br /&gt;
|-&lt;br /&gt;
| Assemblage et finition de la partie mécanique&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|8H00&lt;br /&gt;
|6H00&lt;br /&gt;
|18H00&lt;br /&gt;
|-&lt;br /&gt;
| Tests sur le module temps réel&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Création de la base de donnée de l'application android et du singleton&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|10H00&lt;br /&gt;
|10H00&lt;br /&gt;
|-&lt;br /&gt;
| Liaison ESP8266 et Arduino (Software Serial) + High shifter&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8H00&lt;br /&gt;
|8H00&lt;br /&gt;
|-&lt;br /&gt;
| Application mobile : la page des configurations&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|10H00&lt;br /&gt;
|10H00&lt;br /&gt;
|-&lt;br /&gt;
| Application mobile : la page des études statistiques&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8H00&lt;br /&gt;
|8H00&lt;br /&gt;
|-&lt;br /&gt;
| Étude du capteur ultrason et réalisation d'un programme le contrôlant en C&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| TOTAL&lt;br /&gt;
|3H00&lt;br /&gt;
|17H00&lt;br /&gt;
|10H00&lt;br /&gt;
|8H00&lt;br /&gt;
|14H00&lt;br /&gt;
|14H00&lt;br /&gt;
|13H00&lt;br /&gt;
|21H00&lt;br /&gt;
|12H00&lt;br /&gt;
|16H00&lt;br /&gt;
|49H00&lt;br /&gt;
|177H&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Préambule===&lt;br /&gt;
L’internet des objets (IoT) représente l’extension d’internet à des choses et à des lieux du monde physique (wikipédia). Les objets connectés en l’occurrence sont aujourd’hui un enjeu important. De plus en plus d’objets initialement banals se voient être connectés afin d’en améliorer l’utilisation. Lors de ce projet, nous nous intéressons aux animaux domestiques. Lorsque nous nous absentons, nous n’avons aucun contrôle sur ce qui se passe à la maison. Ainsi, nous ne pouvons pas savoir si notre animal mange ou se porte bien. De plus, nous n’avons aucun retour sur ce que notre chien ou chat notamment a consommé. Est-ce qu’il se nourrit bien ? À quelle fréquence ? Dès lors, il est impensable de s’absenter sur le long terme ou un week-end sans faire intervenir un tiers pour nourrir notre cher animal. Nous pouvons également penser à des animaux qui seraient dangereusement en surpoids. Nous voudrions surveiller leur alimentation mais cela demande une surveillance constante qui n’est pas forcément envisageable. L’objectif de ce projet est de répondre à ces questions et besoins. Et si nous connections une gamelle à une application ?&lt;br /&gt;
&lt;br /&gt;
[[Image:Gamelle-inox-couleur-antiderapante-6-tailles.jpg|center|200px]].&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
L’objectif de la première semaine a été tout d’abord de lister les différentes tâches à réaliser tout au long du projet. Cette liste sera bien sûr modifiable en fonctions des difficultés ou contraintes rencontrées au cours du projet. Cette liste a été rajoutée à la suite du cahier des charges.&lt;br /&gt;
Ensuite, un état de l’art a été réalisé. Nous avons ainsi pu clairement définir le schéma de principe de notre gamelle et le mécanisme de réapprovisionnement choisi. Voici de nouveau le lien vers notre état de l'art : [[Fichier:Etat_de_l_art.pdf]]&lt;br /&gt;
&lt;br /&gt;
Faisons un point rapide sur ces choix. Un système d’ « hélice » est privilégié afin de réapprovisionner la gamelle. Il s’agit en fait d’un cylindre plat qui sera placé en sortie du réservoir. Le réservoir sera moins large en sortie vers la gamelle qu’à son sommet, en entrée des croquettes. Cela permettra aux croquettes de s’introduire facilement dans notre système d’ « hélice ». Ce cylindre serait  troué de part et d’autre afin de pouvoir contenir une certaine dose de croquettes. Ainsi, nous pouvons réapprovisionner la gamelle en fonction de ce dosage.&lt;br /&gt;
Enfin, nous nous sommes attardés sur l’organisation et la répartition de ces tâches afin de pouvoir détailler une liste de matériel. Cette dernière a été ajoutée au wiki à la suite de la liste des tâches.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Lors de cette deuxième semaine, plusieurs tâches ont été réalisées. Tout d’abord, un début de modélisation du système a été effectué sous ''Solidworks''. Pour ce faire, nous avons dû décider de combien de grammes de croquettes à la fois nous pouvons réapprovisionner la gamelle. Ainsi, nous avons effectué des recherches quant à la consommation de nourriture journalière d’un chat. Étant donné qu’un chien consomme davantage de croquettes qu’un chat, nous nous basons sur la consommation de ce dernier, quitte à donner plusieurs doses si l’animal est un chien. Voici un tableau sur lequel nous allons nous baser :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|+ '''Tableau de référence'''&lt;br /&gt;
|-&lt;br /&gt;
! scope=col | Poids du chat adulte&lt;br /&gt;
! scope=col | 1-3 kg&lt;br /&gt;
! scope=col | 4 kg&lt;br /&gt;
! scope=col | 5 kg&lt;br /&gt;
! scope=col | 6 kg&lt;br /&gt;
|-&lt;br /&gt;
|'''Quantités journalières (en grammes)'''&lt;br /&gt;
|15-50g&lt;br /&gt;
|50-65g&lt;br /&gt;
|65-70g&lt;br /&gt;
|70-90g&lt;br /&gt;
|-&lt;br /&gt;
|'''Quantités journalières (avec un bol doseur de 300 mL)'''&lt;br /&gt;
|x 0.1 - 0.3&lt;br /&gt;
|x 0.3 - 0.4&lt;br /&gt;
|x 0.4&lt;br /&gt;
|x 0.4 - 0.6&lt;br /&gt;
|}&lt;br /&gt;
Ce tableau marche pour les croquettes Ultra premium direct en particulier.&lt;br /&gt;
&lt;br /&gt;
Grâce à ce tableau, nous pensons que réapprovisionner la gamelle par dose de 15g est approprié. Or,[[Image:Formule1.png|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Maintenant, il est nécessaire de calculer le rayon de l’hélice permettant au système de doser 15g à la fois.&lt;br /&gt;
&lt;br /&gt;
Nous voulons pouvoir doser 15g : [[Image:Formule2.png|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Posons n = 4 car nous souhaitons avec 2 doseurs, un de chaque côté de l’hélice : [[Image:Formule3.png|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Prenons à présent h = 4 cm ; h étant la largeur de l’ouverture conduisant à la gamelle. Nous avons alors : &lt;br /&gt;
&lt;br /&gt;
[[Image:Formule4.png|center|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Voici une image de l'hélice modélisée en conséquent : &lt;br /&gt;
&lt;br /&gt;
[[Image:Hélice_image.jpg|vignette|center|500px|Modélisation de l'hélice en 3D.]].&lt;br /&gt;
&lt;br /&gt;
*D’un autre côté, des tests ont été réalisés en ce qui concerne le dispositif LED infrarouge-phototransistor.&lt;br /&gt;
&lt;br /&gt;
'''Présentation de l'expérimentation :'''&lt;br /&gt;
&lt;br /&gt;
Nous utilisons une LED IR SFH 4554 pour l’émission et une pour la réception. Pour des raisons de simplicité de fonctionnement, l'allumage des LEDs ne sera pas piloté. Elles seront continuellement allumées (aucune information n'est à transmettre).&lt;br /&gt;
&lt;br /&gt;
À la réception, nous utilisons une photodiode en ''pull-down''  avec une résistance pour contrôler l'intensité dans cette dernière. Nous relions ce montage à un arduino pour vérifier jusqu'à quelle portée nous détectons le signal de la LED émettrice. Grâce à cela, nous serons à même de définir les emplacements des émetteurs/récepteurs dans la gamelle et dans le réservoir ainsi que  la taille de ces derniers. Voici le schéma de principe :&lt;br /&gt;
&lt;br /&gt;
[[Image:Schema_diode_phototransistor.png|vignette|center|500px|Schéma de principe.]].&lt;br /&gt;
&lt;br /&gt;
'''Test rapide de la portée :'''&lt;br /&gt;
&lt;br /&gt;
Calcul des résistances :&lt;br /&gt;
&lt;br /&gt;
Réception : une résistance de 4.7 kΩ est placée.&lt;br /&gt;
&lt;br /&gt;
Émission : nous alimentons la LED en 5 V. Elle possède un courant &amp;lt;math&amp;gt;U_d = 1.2 V&amp;lt;/math&amp;gt; pour 20 mA et supporte 100 mA continue. À 100 mA, &amp;lt;math&amp;gt;U_d = 1.4 V&amp;lt;/math&amp;gt;. Pour être certains d'avoir la meilleure portée possible, nous nous rapprochons des 100 mA. Ainsi, pour le dimensionnement de R nous obtenons :&lt;br /&gt;
&lt;br /&gt;
[[Image:Formule5.png|center|upright=50]]&lt;br /&gt;
1. A.N. : &amp;lt;math&amp;gt;V_{CC} = 5V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;U_d = 1.4V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;I_f = 0.1A&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
R = 36Ω. Soit, en normalisant, '''R = 47Ω'''.&lt;br /&gt;
&lt;br /&gt;
Avec ces données, nous obtenons une portée maximale de 30 cm.&lt;br /&gt;
&lt;br /&gt;
2. Nous faisons un autre test avec une intensité plus basse :&lt;br /&gt;
A.N. : &amp;lt;math&amp;gt;V_{CC} = 5V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;U_d = 1.2V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;I_f = 001A&amp;lt;/math&amp;gt;&lt;br /&gt;
R = 380Ω. Soit, en normalisant, '''R = 330Ω'''.&lt;br /&gt;
Avec ces données, nous obtenons une portée maximale de 22 cm.&lt;br /&gt;
&lt;br /&gt;
L'intérêt de connaître cette portée est que nous allons pouvoir adapter la taille du réservoir et de la gamelle afin de rendre notre dispositif réalisable. À titre de rappel, nous utilisons ce système afin de savoir si la gamelle est vide (Ce système fonctionnant en tout ou rien) et également afin de connaître le niveau approximatif des croquettes dans le réservoir. &lt;br /&gt;
&lt;br /&gt;
*Enfin, pour travailler, nous avons à notre disposition deux arduino : un arduino ''uno'' et un arduino ''méga''. L’utilisation du module wifi ESP8266 nous impose de travailler avec un arduino ''méga''. Cependant, les tests tels que pour le système LED infrarouge-phototransistor peuvent être réalisés indépendamment sur l’arduino ''uno''. Ainsi, nous pouvons travailler à deux en parallèle sur des arduino différents. Cependant, il a fallu réadapter le makefile permettant de flasher l’arduino à un arduino ''méga'' car celui que nous possédions ne fonctionnait que pour un arduino ''uno''. (Un « -D » étant nécessaire dans la ligne de commande pour flasher l’arduino dans le cas d’un ''méga'', qui ne l’était pas pour l’arduino ''uno''.)&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Lors de cette troisième semaine, nous réalisé des tests sur les deux arduinos. &lt;br /&gt;
&lt;br /&gt;
==== Le servomoteur et sa PWM ====&lt;br /&gt;
Tout d’abord, le premier test porte sur le servomoteur prévu pour faire tourner le système d’hélice et réapprovisionner la gamelle.&lt;br /&gt;
&lt;br /&gt;
Le servomoteur que nous utilisons est un servomoteur à courant continue. Il a l’avantage de pouvoir être contrôlé en vitesse et de pouvoir tourner à plus de 180°. &lt;br /&gt;
&lt;br /&gt;
Pour alimenter un servomoteur, il faut brancher ses trois connectiques sur l’alimentation 5V de l’arduino, sur la masse et sur une broche PWM. &lt;br /&gt;
&lt;br /&gt;
En effet, la consigne envoyée à un servomoteur est de type PWM (Pulse Width Modulation). Ce signal permet de faire varier la durée en état « haut » du signal grâce à la consigne que nous lui donnons. Voici un schéma montrant quelques exemples de modifications de la durée d’un état « haut » :&lt;br /&gt;
[[Image:PWM explications.png|center|300px]].&lt;br /&gt;
&lt;br /&gt;
La difficulté a été de programmer ce servomoteur en passant par le langage C. En effet, avec arduino IDE, il est plus aisé de le faire puisqu’il existe une bibliothèque servo.h permettant de programmer des servomoteurs facilement. En C, il a fallu se pencher sur le fonctionnement et le contrôle d’une PWM grâce aux différents registres de l’arduino. &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, il faut configurer les registres TCCR1A et TCCR1B afin d’activer la PWM en mode non-inversé et à fréquence élevée.  &lt;br /&gt;
&lt;br /&gt;
Enfin, il faut activer la PIN5 du port B en sortie (Pin PWM).&lt;br /&gt;
&lt;br /&gt;
Rentrons un peu plus dans le détail quant à la configuration des deux registres TCCR1A et TCCR1B.&lt;br /&gt;
TCCR0A = 1000 0001 = 0x81 et TCCR0B = 0000 0101  = 0x05&lt;br /&gt;
[[Image:TCCR0A.png|center|650px]].&lt;br /&gt;
[[Image:TCCR0B.png|center|650px]].&lt;br /&gt;
&lt;br /&gt;
TCCR0A : &lt;br /&gt;
   COM0A1 = 1 COM0A0 = 0 =&amp;gt; non-inverting mode&lt;br /&gt;
&lt;br /&gt;
   COM0B1 = 0 COM0B0 = 0 =&amp;gt; mode standard&lt;br /&gt;
&lt;br /&gt;
   WGM01 = 0 WGM00 = 1 =&amp;gt; PWM mode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TCCR0B : &lt;br /&gt;
   FOC0A = 0 FOC0B = 0 =&amp;gt; car PWM mode&lt;br /&gt;
&lt;br /&gt;
   WGM02 = 0 =&amp;gt; PWM mode&lt;br /&gt;
&lt;br /&gt;
   SC02 = 1 CS01 = 0 CS00 = 1 =&amp;gt; clk (entrée/sortie) /1024&lt;br /&gt;
&lt;br /&gt;
Pour connaître ces résultats, les tableaux descriptifs sont disponibles dans la datasheet de l'arduino méga, accessible dans les références à la fin du wiki.&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps, en modifiant directement le registre OCR0A, nous envoyons une commande au servomoteur. La durée en état « haut » est ainsi proportionnelle à la consigne saisie dans OCR0A.&lt;br /&gt;
&lt;br /&gt;
Le servomoteur tourne bien différemment en fonction de la valeur saisie dans OCR0A. Maintenant, il reste à comprendre comment contrôler de manière précise le servomoteur et sa position en fonction de la consigne.&lt;br /&gt;
&lt;br /&gt;
==== Le capteur ultrason ====&lt;br /&gt;
&lt;br /&gt;
=====  Présentation =====&lt;br /&gt;
Nous pensons utiliser le module HC-SR04 couplé à un arduino pour détecter la présence de l’animal devant la gamelle. Cela servira à ne pas prendre en considération le contenu de la gamelle pour savoir si elle est vide ou non lorsque l’animal se nourrit. Ou encore, cela aidera afin de pouvoir réaliser un suivi à savoir : à quel moment le chat a-t-il été manger ?&lt;br /&gt;
&lt;br /&gt;
En lisant la documentation technique du HC -SR04, nous en tirons ceci :&lt;br /&gt;
&lt;br /&gt;
[[Image:US data.png|center|550px]].&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement du système est simple et il suffit d'envoyer un message de 10µs minimum avec une écart de 60 ms minimum pour recevoir une réponse du capteur.&lt;br /&gt;
&lt;br /&gt;
Le capteur renvoi un signal qui a un temps proportionnel à sa distance par rapport à l’obstacle.&lt;br /&gt;
&lt;br /&gt;
=====  Expérimentation =====&lt;br /&gt;
Nous rajoutons des LEDs afin d’avoir une indication lorsqu’un signal est envoyé. La valeur reçue est visualisée à l’aide de l’outil minicom, la valeur étant envoyée sur le port série. Nous remarquons que le système fonctionne même si des imperfections de mesure subsistent (dues notamment au programme). La précision du système suffit néanmoins à  détecter le chat devant la gamelle.&lt;br /&gt;
&lt;br /&gt;
=====  Problème lié à l'étude =====&lt;br /&gt;
Le module utilise une fréquence de 40khz.&lt;br /&gt;
Suite à des vérifications, les chats et les chiens entendent des sons pouvant aller jusqu'à 60khz. &lt;br /&gt;
Une recherche a été effectuée sur les barrières repoussant les chiens et les chats. Malgré le peu de documentation technique que nous avons trouvé, nous remarquons  que les fréquences utilisées sont de l'ordre de 25 khz. Ces fréquences sont bien loin des 40khz de notre système. Cependant, une petite expérimentation a été réalisée sur un chat de 6 ans à l’aide d’une application smartphone générant des ultrasons. Il s’avère que le chat est dérangé par ces fréquences, le chat s'en va au bout de 10 minutes d’expérience.&lt;br /&gt;
&lt;br /&gt;
=====  Conclusion =====&lt;br /&gt;
Même si le module HC-SR04 est très simple d’utilisation, nous ne pouvons continuer à nous en servir pour notre projet de gamelle connectée.&lt;br /&gt;
&lt;br /&gt;
=====  Autre alternative =====&lt;br /&gt;
* Tapis de jauge de contrainte → couvre une surface trop petite&lt;br /&gt;
* Détecteur de présence infrarouge → convient pour des objets de taille supérieure à 15 cm  &lt;br /&gt;
&lt;br /&gt;
Notre choix se porte donc sur le capteur infrarouge, que nous programmerons dans une séance ultérieure.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
La semaine a été en grande partie consacrée à la réalisation d’un prototype pour le système d’hélice et le réservoir. Tout d’abord, nous avons dû faire plusieurs aller-retour au magasin afin d’acheter des planches pour la réalisation des différents prototypes. La première planche qui a été acheté était une medium, matériel qui n’est plus accepté dans la découpeuse laser puisqu’elle encrasse le filtre et la lentille de l’appareil. Nous avons donc du aller acheter les bonnes planches. De plus, il a fallu réserver des créneaux au fabricarium et apprendre à se servir de la découpeuse laser. Le prototype final n’est pas encore assemblé puisque nous réfléchissons à un système de « pied à coulisse » afin de pouvoir choisir le dosage unitaire que peut servir l’hélice.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5 et semaine 6===&lt;br /&gt;
'''Création d’un programme contrôlant la lecture et l’écriture sur la carte SD'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Pour rendre notre projet innovant par rapport aux autres gamelles connectées proposées sur le marché, nous avons décidé de faire un suivi lié à l'alimentation du chat. Par exemple, nous souhaitons savoir à quels moments de la journée l’animal va manger, pendant combien de temps, en quelles quantités etc…&lt;br /&gt;
Pour cela, nous devons stocker ces différentes données. Pour ce faire, nous utiliserons le shield SD/ethernet  suivant :&lt;br /&gt;
&lt;br /&gt;
[[Image:Shield sd ethernet.jpg|vignette|center|300px|Shield SD/ethernet.]]&lt;br /&gt;
&lt;br /&gt;
*Code arduino shield Sd/ethernet&lt;br /&gt;
&lt;br /&gt;
Pour commencer, l’expérimentation du shield  a été effectuée à l’aide d’arduino IDE afin de réaliser un prototype rapide et tester si le shield est efficace et permet de répondre à nos besoins.&lt;br /&gt;
&lt;br /&gt;
Nous nous basons sur l'exemple proposé par arduino IDE suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SD.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File myFile;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  // Open serial communications and wait for port to open:&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  while (!Serial) {&lt;br /&gt;
    ; // wait for serial port to connect. Needed for native USB port only&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Initializing SD card...&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if (!SD.begin(4)) {&lt;br /&gt;
    Serial.println(&amp;quot;initialization failed!&amp;quot;);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;initialization done.&amp;quot;);&lt;br /&gt;
  myFile = SD.open(&amp;quot;test.txt&amp;quot;, FILE_WRITE);&lt;br /&gt;
&lt;br /&gt;
  if (myFile) {&lt;br /&gt;
    Serial.print(&amp;quot;Writing to test.txt...&amp;quot;);&lt;br /&gt;
    myFile.println(&amp;quot;testing 1, 2, 3.&amp;quot;);&lt;br /&gt;
    myFile.close();&lt;br /&gt;
    Serial.println(&amp;quot;done.&amp;quot;);&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.println(&amp;quot;error opening test.txt&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  myFile = SD.open(&amp;quot;test.txt&amp;quot;);&lt;br /&gt;
  if (myFile) {&lt;br /&gt;
    Serial.println(&amp;quot;test.txt:&amp;quot;);&lt;br /&gt;
    while (myFile.available()) {&lt;br /&gt;
      Serial.write(myFile.read());&lt;br /&gt;
    }&lt;br /&gt;
    myFile.close();&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.println(&amp;quot;error opening test.txt&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous remarquons que nous écrivons facilement sur la carte SD grâce à la bibliothèque disponible. En ajoutant quelques boutons et en modifiant légèrement le code, nous arrivons à sauvegarder la durée de maintien du bouton ainsi que la fréquence d’actionnement.&lt;br /&gt;
&lt;br /&gt;
*Code C Shield  SD/ethernet&lt;br /&gt;
&lt;br /&gt;
Une fois le prototype fait et fonctionnel, nous décidons d’écrire le code en C. Pour cela, nous utilisons en particulier deux bibliothèques fournies par Monsieur REDON : Sd2Card et spi.&lt;br /&gt;
Après de multiples tentatives, nous arrivons toujours à l'erreur suivante : “SD_CARD_ERROR_CMD0”. Cette dernière est liée à un timeout qui persiste malgré la modification de paramètres dépendants.&lt;br /&gt;
&lt;br /&gt;
*Changement de matériel&lt;br /&gt;
&lt;br /&gt;
Monsieur REDON nous a fourni un nouveau shield uniquement SD cette fois-ci pour tester si le problème est matériel. En voici la photographie :&lt;br /&gt;
&lt;br /&gt;
[[Image:Shield sd simple.jpg|vignette|center|300px|Shield SD.]]&lt;br /&gt;
&lt;br /&gt;
*Code C Shield SD&lt;br /&gt;
&lt;br /&gt;
En recompilant le code sur le nouveau shield, nous remarquons qu'il n'y a pu d'erreur liée à l'initialisation de la carte SD.&lt;br /&gt;
Suite à des expérimentations liées à la prise en main du code exemple donné, nous arrivons maintenant à écrire une information dans un bloc est à relire cette information plus tard.&lt;br /&gt;
&lt;br /&gt;
Voici un extrait lu depuis l’utilitaire minicom lors de la lecture de la carte SD :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;status de la carte sd = 1                                                 &lt;br /&gt;
status=0                                                                  &lt;br /&gt;
erreur=0                                                                  &lt;br /&gt;
type=3                                                                    &lt;br /&gt;
taille=7744512                                                            &lt;br /&gt;
Lecture                                                                   &lt;br /&gt;
statut=0                                                                  &lt;br /&gt;
bloc[0]=1 bloc[1]=0 bloc[2]=aa bloc[3]=bb bloc[4]=cc bloc[5]=0&lt;br /&gt;
statut=0   &lt;br /&gt;
bloc[0]=dd bloc[1]=ee bloc[2]=ff bloc[3]=0 bloc[4]=0 bloc[5]=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le shield fonctionne comme désiré et nous pourrons ainsi enregistrer des informations afin de les traiter plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Configuration du module WiFi ESP8266'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
L’ESP8266 est un circuit intégré à un microcontrôleur qui fait office de module WiFi. Il possède un total de 9 GPIO (3.3V) ce qui lui permet d’être utilisé indépendamment, sans même se connecter à un autre microcontrôleur. La datasheet de ce composant est disponible dans la rubrique « Datasheet » en bas de page. Pour notre projet, l’utilisation seule de ce module ne suffisait pas. C’est pourquoi, nous le connectons à un arduino afin de pouvoir profiter des différentes entrées/sorties de ce microcontrôleur. Voici une photographie du composant en question :&lt;br /&gt;
&lt;br /&gt;
[[Image:Esp8266.jpg|vignette|center|300px|Shield SD.]]&lt;br /&gt;
&lt;br /&gt;
L'adresse IP de notre ESP8266 s'obtient en connectant notre composant à un réseau local. Ainsi, nous savons que cette adresse est la suivante : 192.168.43.53 .&lt;br /&gt;
&lt;br /&gt;
*Programmation du module WiFi en C&lt;br /&gt;
&lt;br /&gt;
De nombreux problèmes ont été rencontrés pour configurer l’ESP8266 en C. Le programme devant être directement chargé sur ce dernier, de nombreuses erreurs en ont résulté. Après de nombreuses heures passées à essayer de régler ces problèmes, nous avons discuté de cela avec l’un de nos encadrant, M. REDON, qui nous a autorisé à programmer le module WiFi directement sur arduino IDE, puisqu’une bibliothèque existante rend la tâche moins ardue. De ce fait, l’avantage de l’ESP8266 est que nous chargeons un programme directement sur ce dernier. Ainsi, nous pouvons programmer le reste de notre projet en C, en compilant et téléversant le fichier sur l’arduino sans perturber le fonctionnement du module WiFi.&lt;br /&gt;
&lt;br /&gt;
*Programmation du module WiFi sur arduino IDE&lt;br /&gt;
&lt;br /&gt;
Tout d’abord, lors de l’installation d’arduino IDE, il faut veiller à ce que la version soit suffisamment récente pour pouvoir y télécharger des « boards ». En effet, il faut, grâce à un lien disponible sur le site d’arduino, ajouter l’ESP8266 en tant que board dans le logiciel afin que le composant puisse être reconnu afin de téléverser un programme. &lt;br /&gt;
Ensuite, l’ESP doit être connectée en USB sur à l’ordinateur afin qu’elle soit visible sur son port propre (USB0 en l’occurrence). Ainsi, lors du téléversement du fichier, il faut sélectionner ce port dans la liste de ceux disponible. (Beaucoup de soucis ont été rencontrés à ce propos, l’ESP n’étant pas toujours visible comme étant disponible sur arduino IDE). &lt;br /&gt;
Enfin, un test basique a été réalisé qui consiste à faire clignoter une LED connectée à un GPIO de l’ESP et à se connecter à un réseau WiFi. L’avantage de programmer en arduino IDE est que, par un simple « #include &amp;lt;ESP8266WiFi.h&amp;gt; », nous ajoutons la bibliothèque propre à notre module WiFi. La fonction WiFi.begin permet alors de se connecter facilement à un réseau local en passant en paramètres le nom du réseau sans fil (SSID) ainsi que son mot de passe. &lt;br /&gt;
&lt;br /&gt;
Voici une visualisation des informations envoyées sur l'interface série :&lt;br /&gt;
&lt;br /&gt;
[[Image:Capture esp.png|vignette|center|500px|Visualisation sur l'interface série.]]&lt;br /&gt;
&lt;br /&gt;
*Réseau&lt;br /&gt;
&lt;br /&gt;
La question de la connexion réseau entre le module WiFi et l’application mobile, que nous allons bientôt réaliser, se pose. Nous avons travaillé également sur cette partie lors de la semaine 6. Cependant, nous expliciterons cette partie un peu plus tard afin d’aborder en même temps la partie réseau du côté de l’application mobile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
'''Capteur Infrarouge IRS05A'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Dans la partie liée au suivi de l'alimentation, nous avons besoin d'un détecteur de présence afin de savoir si le chat est en train de se nourrir ou pas. Pour cela, nous avions testé le module HC-SR04, expérimentation qui n'avait pas aboutie due au fait que le chat entende les ultrasons. Nous avons choisi en remplacement le module irs05a. En voici une photographie :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:IRS05A.jpg|center|200px]]&lt;br /&gt;
&lt;br /&gt;
*Programme C&lt;br /&gt;
&lt;br /&gt;
En étudiant la datasheet du composant, nous trouvons ceci : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour l'expérimentation, nous avons juste besoin de commander l'entrée enable et de placer une LED à la sortie output afin de visualiser si le module détecte ou non un objet. Suite à cette expérimentation, nous avons pu définir la zone de détection du module. Voici un schéma explicatif :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:IRS05A extrait datasheet.png|center|400px]]&lt;br /&gt;
&lt;br /&gt;
Grâce à ce schéma, nous avons pu faire un choix matériel quant à celui de l’emplacement de nos deux capteurs de présence. Ils seront disposés comme suit :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema ir disposition.jpg|center|200px]]&lt;br /&gt;
&lt;br /&gt;
'''Application mobile'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
L’objectif de cette semaine a été en partie de se familiariser avec l’environnement de développement intégré (IDE) d’Android Studio. Sous Android, il est commun de passer par cette plateforme afin de programmer différentes applications mobiles. Cela se code en java. &lt;br /&gt;
&lt;br /&gt;
*Application pour la gamelle connectée&lt;br /&gt;
&lt;br /&gt;
Tout d’abord, le domaine des applications mobiles est très complexe. De plus, la documentation technique de java est également très fournie. Cela a rendu la tâche de réaliser une application android basique très longue. Finalement, nous voulons créer une application mobile permettant de visualiser les statistiques de son animal,  de contrôler la gamelle manuellement ou de programmer des modes pour l’alimenter. Pour le moment, le squelette général a été créé, permettant d’afficher de nouvelles fenêtres à chaque choix de « mode ».  Voici des screenshots de l’application actuelle :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:App premiere page.png|200px]] [[Fichier:Onglet1.png|200px]] [[Fichier:Onglet2.png|200px]] [[Fichier:Onglet3 en cours.png|200px]] &lt;br /&gt;
&lt;br /&gt;
*Réseau &lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons voulu aller plus loin dans la fenêtre consacrée au réapprovisionnement manuel. En effet, nous souhaitons réaliser un test simple qui consiste à allumer une LED connectée à un GPIO de l’ESP8266 par simple appui d’un bouton depuis l’application mobile. Le problème qui s’est alors posé a été celui de créer un lien serveur/client entre le module WiFi et l’application mobile. L’idée serait alors de créer un serveur TCP sur arduino IDE qui se chargerait sur l’ESP8266 et de créer, à l’aide de sockets en java, un client sur l’application mobile. Le serveur TCP a été réalisé sur l’arduino mais n’a pas encore pu être testé. La réalisation du client sur l’application mobile est l’objet de la semaine 8, les tests seront alors réalisés et explicités à ce moment là.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8 et 9===&lt;br /&gt;
'''Application mobile, partie réseau'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Le serveur TCP réalisé sous arduino IDE directement sur le module WiFi a été testé à l’aide de la commande nc. En effet, nous avons utilisé un terminal téléchargé sur le téléphone afin de connecter le module WiFi et le téléphone sur le même réseau. En envoyant les requêtes directement via la commande nc, nous sommes capables d’allumer et d’éteindre la LED connectée au GPIO de l’ESP8266. Maintenant, il faut réaliser la même chose mais côté application mobile.&lt;br /&gt;
&lt;br /&gt;
La partie concernant la création du socket et l’envoi de données à l’esp8266 nous a pris beaucoup de temps. En effet, le problème ne venait pas de notre code mais simplement du fait que la version android du téléphone utilisé comme point d’accès internet empêchait l’application de connecter la socket à l’adresse IP du module WiFi. Après avoir configuré un routeur et connecté le module WiFi et le téléphone dessus, nous étions capable d’envoyer des requêtes au module WiFi afin qu’il allume une LED notamment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Principe&lt;br /&gt;
&lt;br /&gt;
Il est préférable de réaliser la partie réseau d’une application mobile via un thread afin de rendre l’application la plus fluide possible. Par exemple, l’appui du bouton ON permet de modifier une chaine de caractère et lance le thread d’envoi. Dans ce thread, l’application connecte la socket au module WiFI à l’aide de son adresse IP et du port de communication spécifié dans le programme du serveur TCP sur arduino IDE. Ensuite, la socket se charge d’envoyer la chaine de caractère à l’esp8266. Cela se fait par l’utilisation de l’objet ''DataOutputStream'' et de sa méthode ''writeBytes'' qui permet l’envoi simple d’une chaine de caractère. &lt;br /&gt;
&lt;br /&gt;
Pour la réception des données, il s’agit du même principe mais nous utilisons l’objet DataInputStream.&lt;br /&gt;
&lt;br /&gt;
Voici un aperçu de ce qui est visualisable sur l'interface série de l'arduino IDE, les requêtes sont bien envoyées :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Serveur ok.png|center|100px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 10 et +===&lt;br /&gt;
'''La base de données sur l'application android'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons déjà les données directement sur la gamelle grâce à la carte SD. Cependant, il nous a semblé nécessaire de garder en mémoire les statistiques de notre animal de compagnie directement sur l’application. Après avoir lu le livre « L’art du développement Android » de Grant Allen, prêté notre enseignant, deux possibilités nous sont apparues. La première était de manipuler des fichiers qui seraient générés par l’application afin de garder en mémoire ce que nous souhaitons. La seconde était de créer une base de données locale grâce à la base de données installée sur Android, ''SQLite''. &lt;br /&gt;
&lt;br /&gt;
*Présentation rapide de SQLite&lt;br /&gt;
&lt;br /&gt;
''SQLite'' utilise un dialecte de SQL afin de réaliser des requêtes de manipulations de données. Les « SELECT », « INSERT », « REMOVE », peuvent ainsi être utilisées.  ''SQLite'' est particulièrement approprié pour l’utilisation android car son utilisation ne repose pas sur un modèle client-serveur (comme ''mysql'' ou ''PostgreSQL'' que nous connaissons). Ainsi, l’intégralité de la base de données est stockée dans un fichier unique.&lt;br /&gt;
&lt;br /&gt;
*Base de données&lt;br /&gt;
&lt;br /&gt;
La base de données que nous avons implémentée permet de répertorier tous les jours enregistrés par la gamelle afin de pouvoir réaliser des traitements statistiques derrière. La date a été stockée en chaine de caractère car le constructeur de la forme ''Date(int year, int month, int day)'' est obsolète pour la version de l’API que nous utilisions. Le deuxième constructeur est de la forme ''Date(long Date)'' et il faut fournir à cette méthode un nombre de millisecondes qu’elle va convertir au format Date de Java. Cela nous semblait peu pratique. &lt;br /&gt;
&lt;br /&gt;
Voici un petit tableau illustrant ce que nous souhaitons stocker dans la base de données :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tableau recap bdd.png|center|450px]]&lt;br /&gt;
&lt;br /&gt;
Trois classes ont été crées : Jour.java, JoursBDD.java et MaBaseSQLite.java.&lt;br /&gt;
&lt;br /&gt;
Voici un schéma UML résumant ces trois classes :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:BDD_lulu.png|center|700px]]&lt;br /&gt;
&lt;br /&gt;
'''La base de données et Singleton'''&lt;br /&gt;
&lt;br /&gt;
Notre base de donnée étant créée et fonctionnelle, nous avions besoin de l’avoir à disposition n’importe où dans l’application. Or, passer un objet d’une page à une autre est simple pour des objets peu complexes. Cependant, il était plus difficile de passer notre base de données avec les méthodes traditionnelles utilisées auparavant. Nous avons donc utilisé un singleton. Le singleton est une instance unique d’une classe. Cela permet à la fois de récupérer facilement cette instance partout dans l’application mais cela permet également de converser une unicité de cette dernière, ce qui est important pour  une base de données. Ainsi, nous avons modifié les classes décrites précédemment afin d’implémenter le singleton. &lt;br /&gt;
&lt;br /&gt;
Deux variables ont été ajoutées à la classe joursBDD : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;private static Context context;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;private static JoursBDDSingleton mJoursBDDSingleton;  //instance unique&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deux méthodes sont également concernées dans ce changement :&lt;br /&gt;
&amp;lt;pre&amp;gt;//Méthode de restauration de contexte&lt;br /&gt;
public JoursBDD(Context context)&lt;br /&gt;
{&lt;br /&gt;
    this.context = context;&lt;br /&gt;
    //creation de la base de donnees&lt;br /&gt;
    maBaseSQLite = new MaBaseSQLite(context, NOM_BDD, null, VERSION_BDD);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Methode de recuperation de l'instance de la BDD&lt;br /&gt;
public static synchronized JoursBD getInstance(Context context){&lt;br /&gt;
    //Création de la base de données et de sa table&lt;br /&gt;
    if(mJoursBDD==null) {&lt;br /&gt;
        //CreateJoursBDD(context);&lt;br /&gt;
        mJoursBDD = new JoursBDD(context);&lt;br /&gt;
    }&lt;br /&gt;
    return mJoursBDD;&lt;br /&gt;
} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, juste un réalisant une récupération de l’instance grâce à  l’appel de la méthode getInstance : JoursBDD.getInstance(this); , il est aisé de le faire dans une nouvelle activité.&lt;br /&gt;
&lt;br /&gt;
'''Le traitement des données'''&lt;br /&gt;
&lt;br /&gt;
Une partie « statistiques » a été ajoutée à l’application mobile. Elle a pour but l’étude de l’alimentation de l’animal grâce à l’utilisation de graphiques et de tableaux. Afin de rendre la chose plus visuelle, l’utilisateur peut sélectionner soit un histogramme, soit un graphique linéaire, soit un tableau de données grâce à des radio boutons. Ensuite, l’utilisateur sélectionne soit les 7 derniers jours soit le dernier mois via un simple bouton. &lt;br /&gt;
Voici un aperçu de la première page :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:statistiques_tableau_petfun.png|center|200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Présentation rapide de achartengine :&lt;br /&gt;
Afin de réaliser l’affichage de graphiques, nous avons utilisé une bibliothèque appelée ''achartengine''. Cette bibliothèque permet la personnalisation de graphiques et l’affichage sous forme d’histogramme ou encore de graphiques linéaires des données. Cette bibliothèque facilite la dynamisation de l’activité. Nous restant peu de temps dans le projet, nous avons décidé d’exploiter cette ressource afin de réaliser une page propre et personnalisée. Nous pouvons utiliser cette bibliothèque en l’ajoutant dans les fichiers ''gradle'' du projet.&lt;br /&gt;
&lt;br /&gt;
Voici les graphiques que nous affichons :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Graphiques stats petfun1.png|200px]] [[Fichier:Graphiques stats petfun2.png|200px]]&lt;br /&gt;
&lt;br /&gt;
*Limites et améliorations :&lt;br /&gt;
L’idée d’avoir créée un bouton permettant d’afficher un graphique de la dernière semaine avait pour but une amélioration par la suite. En effet, l’objectif est de pouvoir, une fois le graphique affiché, passer d’une semaine à une autre. De même pour les mois, nous souhaiterions pouvoir, à partir du dernier mois, afficher les précédents en ''slidant'' le graphique ou en appuyant sur une touche. &lt;br /&gt;
&lt;br /&gt;
'''Configuration des paramètres'''&lt;br /&gt;
&lt;br /&gt;
*Introduction &lt;br /&gt;
&lt;br /&gt;
Une page de permettant de configurer les paramètres de l'application a été ajoutée à l’application mobile. Elle a pour but d’enregistrer les heures de repas de l'animal, le poids contenu dans la gamelle, le nom de l’animal ou encore sa photographie. Le poids contenu dans la gamelle doit être notifié car cette dernière est ajustable grâce à des rails présents sur la gamelle et ajustables. Ainsi, l’utilisateur peut doser la quantité qu’il souhaite. Il devra alors le notifier dans l’application afin que le traitement des données en tienne compte.&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Dans l’activité de contrôle ''automatique'', il s’agit en fait de configurer des paramètres. Sur cette page, les paramètres actuels de la gamelle sont affichés à l’écran. L’utilisateur peut dès lors, via des boutons, sélectionner deux activités : une pour changer les paramètres propres à la gamelle et l’autre pour changer ceux propres à l’animal. &lt;br /&gt;
&lt;br /&gt;
*Paramètres de la gamelle&lt;br /&gt;
&lt;br /&gt;
Dans les paramètres de la gamelle, deux choses sont configurables : les heures de repas de l’animal et la quantité de croquettes ajustée sur la gamelle. Afin de rentrer les heures de repas, le widget ''TimePicker'' a été utilisé et configuré en format 24 heures. L’appui de la touche « AJOUT HEURE » permet l’ajout de l’heure saisi sur le ''TimePicker'' dans les paramètres de l’application. De plus, afin de saisir le poids de la gamelle, un simple ''EditText'' permet de le faire. Si l’utilisateur ne saisi pas un nombre, un message s’affiche à l’écran le prévenant du problème de format.&lt;br /&gt;
&lt;br /&gt;
L’appui de la touche « VALIDER CONFIGURATION » permet la sauvegarde de la saisie et le retour à la première activité. &lt;br /&gt;
&lt;br /&gt;
L’appui de la touche « SUPPRIMER CONFIGURATION » permet la suppression des heures de repas enregistrées dans l’application.&lt;br /&gt;
&lt;br /&gt;
*Paramètres de l’animal&lt;br /&gt;
&lt;br /&gt;
Dans les paramètres de l’animal, le nom ainsi que la photographie de ce dernier peuvent être ajoutés. Le nom est simplement enregistré grâce à un ''EditText''. L’avatar peut être cherché par l’utilisateur dans ses fichiers de téléphone. (Des permissions spécifiques sont nécessaires). L'avatar s'affiche alors en première page de l'application.&lt;br /&gt;
&lt;br /&gt;
Maintenant, la question d’enregistrer tous ses paramètres s’est posée. En effet, une fois l’application fermée, tous les objets et toutes les variables créées dans l’application sont désallouées. Les paramètres rentrés par l’utilisateur sont alors perdus. &lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons fait le choix de modifier les préférences de l’application. Ces préférences renseignent des paires clé-valeur de données.&lt;br /&gt;
&lt;br /&gt;
*SharePreferences&lt;br /&gt;
&lt;br /&gt;
Nous devons créer un objet ''SharePreferences'' via la méthode ''getSharedPreferences'' en lui attribuant un nom unique et en privatisant son accès. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; final SharedPreferences prefs = getSharedPreferences(&amp;quot;Configuration&amp;quot;, Context.MODE_PRIVATE); &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dès lors, nous pouvons restaurer cet objet dans n’importe quelle activité, exactement comme un ''Singleton''. &lt;br /&gt;
Pour créer ou modifier des préférences, nous devons appeler la méthode ''edit()'' de l’objet ''SharedPreferences''. Une fois la valeur modifiée, il est impératif de faire appel à la méthode ''apply()'' ou ''commit()'' de l’objet afin de sauvegarder les changements apportés.	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;final SharedPreferences.Editor editor = prefs.edit();&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, les horaires sont stockées avec une clé de la forme « horairek », k représentant la numérotation des différentes heures saisies par l’utilisateur. Une variable « Taille » fait également partie des préférences afin de pouvoir savoir à tout moment le nombre de repas programmés par l’utilisateur. Le nom de l’animal est stocké avec la clé « Name » et le poids avec la clé « Poids ». Il est alors aisé de retrouvé les valeurs correspondantes dans les préférences et de pouvoir les supprimer de manière spécifique si nécessaire. &lt;br /&gt;
&lt;br /&gt;
Voici donc ce que cela peut nous donner :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Petfun config1.png|200px]] [[Fichier:Petfun config2.png|200px]] [[Fichier:Petfun config4.png|200px]] [[Fichier:Petfun config3.png|200px]]&lt;br /&gt;
&lt;br /&gt;
'''Contrôle du servomoteur via l'application'''&lt;br /&gt;
&lt;br /&gt;
La solution que nous avons choisi est de relier un GPIO de l’ESP8266 à un PIN digital de l’arduino. Ainsi, étant capables d’allumer une LED par appui d’une touche sur l’application mobile, nous serions capables de faire changer l’état d’un PIN de l’arduino et ainsi en fonction de cela, faire tourner le moteur. &lt;br /&gt;
En mettant en place cette méthode, nous nous sommes rendu compte que le PIN de l’arduino ne réagissait pas à du 3.3V, envoyé par le module wifi. Nous avons donc mis en place un ''high shifter'' à l’aide d’un transistor afin de faire passer la tension d’entrée de 3.3V à 5V. Sur le schéma, R1 = R2 = 10 kΩ. R3 = 100 kΩ. La tension Output mesurée est de [[Fichier:FormulePetfun.png|100px]].&lt;br /&gt;
&lt;br /&gt;
Voici le schéma : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:HighShifterPetfunPetfun.jpg|center|250px]]&lt;br /&gt;
&lt;br /&gt;
Voici la photographie du câblage :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cablage petfun.jpg|center|450px]]&lt;br /&gt;
&lt;br /&gt;
'''Aperçu final de la partie mécanique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Croquette.png|center|200px]]&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;br /&gt;
[[Fichier:Rapport_P37_damiens_dorian.pdf‎ ]]&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&lt;br /&gt;
==='''Datasheet'''===&lt;br /&gt;
ESP8266 Adafruit breakout : https://cdn-learn.adafruit.com/downloads/pdf/adafruit-huzzah-esp8266-breakout.pdf&lt;br /&gt;
&lt;br /&gt;
Arduino méga 2560 : http://www.atmel.com/Images/Atmel-2549-8-bit-AVR-Microcontroller-ATmega640-1280-1281-2560-2561_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
L'ultrason HC-SR04 : http://www.gotronic.fr/pj2-hc-sr04-utilisation-avec-picaxe-1343.pdf&lt;br /&gt;
&lt;br /&gt;
Le capteur de présence Infrarouge IRS05A : https://www.pololu.com/file/0J615/tssp77038.pdf&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P37&amp;diff=42251</id>
		<title>IMA4 2016/2017 P37</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P37&amp;diff=42251"/>
				<updated>2017-05-15T16:57:52Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Présentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Cahier des charges''' ==&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
L’objectif de ce projet est de fabriquer une gamelle pour animaux connectée. Pour ce faire, trois grands axes sont à dégager : une partie informatique, électronique et mécanique. &lt;br /&gt;
&lt;br /&gt;
==== Partie mécanique ====&lt;br /&gt;
'''Structure du système'''&lt;br /&gt;
*Le réservoir. Deux systèmes peuvent être réalisés : &lt;br /&gt;
**Un système de trappes pour le distributeur : deux trappes l’une en dessous de l’autre. &lt;br /&gt;
**Un système de vis sans fin qui permettrait d’alimenter la gamelle.&lt;br /&gt;
&lt;br /&gt;
*La gamelle. Deux méthodes sont possibles :&lt;br /&gt;
**Mesure du poids en prenant une balance déjà existante et en récupérant et en traitant les sorties.&lt;br /&gt;
**Passer par un système d’estimation de volumes. Dans la gamelle, il y aurait des capteurs permettant de connaître la quantité en volume présente dans la gamelle.&lt;br /&gt;
&lt;br /&gt;
Globalement, ces systèmes sont susceptibles de changer suivant l'état de l'art qui sera réalisé par la suite.&lt;br /&gt;
&lt;br /&gt;
==== Partie électronique ====&lt;br /&gt;
*Alimentation. Deux systèmes sont envisagés pour l’alimentation : Un système nomade avec une batterie  pour permettre d’avoir une gamelle déplaçable ou un système fixe alimenté par le secteur ou en usb.&lt;br /&gt;
**Batterie : Nous avons besoin d’une batterie qui peut garder l’énergie suffisamment longtemps pour éviter de devoir recharger la gamelle trop souvent. Une durée de vie d’une semaine est envisagée au minimum.&lt;br /&gt;
**Secteur&lt;br /&gt;
&lt;br /&gt;
*Interface Homme/machine&lt;br /&gt;
**Capteurs&lt;br /&gt;
***Des LEDs couplées à un phototransistor pourraient permettre de connaître la présence ou l’absence de croquettes dans la gamelle.&lt;br /&gt;
***Ultrason pour connaître la présence ou non de l'animal devant la gamelle&lt;br /&gt;
***Autres.&lt;br /&gt;
**Indicateurs : Des indicateurs peuvent être implantés sur le système physique : des LEDS indicatrices de l’état de batterie (si l'alimentation nomade est privilégiée) ou de l’état du réservoir (plein ou vide) sont envisagés.&lt;br /&gt;
&lt;br /&gt;
==== Partie informatique ====&lt;br /&gt;
*Unité de contrôle&lt;br /&gt;
**Utilisation d’un arduino avec un module wifi dans le but de réaliser une communication externe via une application mobile Androïd par exemple. &lt;br /&gt;
**Utilisation d’un raspberry avec création d’un serveur Apache pour permettre de communiquer avec l’utilisateur.&lt;br /&gt;
**Utilisation d'un module communiquant autre que les deux cités précédemment.&lt;br /&gt;
*En bonus :&lt;br /&gt;
**Création d’un système de contrôle à distance en mettant en place une caméra afin que l’utilisateur puisse avoir des images à distance, ou simplement une caméra série afin d'obtenir des images de contrôle. Ce système n’aura pas besoin d’être temps réel. Il pourra être implémenté grâce au serveur apache de la raspberry, si l’utilisation de celle-ci est retenue.&lt;br /&gt;
**Des actionneurs pour permettre à l’utilisateur interagir avec son chat à distance (Buzzer, laser, son, …).&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel et logiciel===&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous avons réalisé l'état de l'art des gamelles connectées déjà réalisées et commercialisées. Voici le lien PDF permettant d’accéder à ce fichier.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Etat_de_l_art.pdf]]&lt;br /&gt;
&lt;br /&gt;
Finalement, nos choix techniques sont les suivants : &lt;br /&gt;
*Matériel&lt;br /&gt;
**Mécanique&lt;br /&gt;
***Un système d’hélice contrôlée par un moteur permettant de déverser des croquettes en quantités connues. (Un schéma du système sera réalisé rapidement).&lt;br /&gt;
**Électronique&lt;br /&gt;
***Un adaptateur capable de générer une tension de 5V à partir du réseau.&lt;br /&gt;
***Des LEDs infrarouges couplées à des photodiodes afin de contrôler l'état de la gamelle et du réservoir.&lt;br /&gt;
***Un servomoteur 360° afin de faire tourner le système d'hélice et permettant ainsi de déverser une dose de croquettes dans la gamelle.&lt;br /&gt;
***Des LEDs permettant de visualiser l'état du système (alimentation du circuit, réservoir vide,...) et les résistances qui vont de pair.&lt;br /&gt;
***Un capteur Ultrason afin de pouvoir vérifier la présence ou non d'un animal devant la gamelle.&lt;br /&gt;
**Informatique&lt;br /&gt;
***Un arduino Méga car l'arduino Uno sera limité lorsque nous communiquerons entre le module wifi et l'application mobile.&lt;br /&gt;
***Un module Wifi ESP8266.&lt;br /&gt;
***Une carte shield SD afin de stocker toutes les variables de l'utilisateur et de son chat.&lt;br /&gt;
***Un module horloge temps réel (RTC) afin de pouvoir programmer en fonction de l'heure qu'il est si le choix de l'utilisateur porte sur le réapprovisionnement de la gamelle de cette manière là.&lt;br /&gt;
&lt;br /&gt;
En solution de secours : &lt;br /&gt;
*Un rapsberry&lt;br /&gt;
*Une balance à modifier manuellement&lt;br /&gt;
&lt;br /&gt;
*Logiciel&lt;br /&gt;
**Solidworks afin de pouvoir concevoir les différentes parties du système mécanique.&lt;br /&gt;
**Les logiciels de programmation (Sublime, vim, emacs, gcc...)&lt;br /&gt;
&lt;br /&gt;
*Autres&lt;br /&gt;
**Utilisation des machines mises à disposition des étudiants au Fablab : découpeuse laser et imprimante 3D pour la conception de prototypes.&lt;br /&gt;
&lt;br /&gt;
==Tableau==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Composant !! Quantité requise !! Disponible (M. Redon) ? !! À commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |Émetteur et récepteur infrarouge/photodiode&lt;br /&gt;
 |Entre 6 et 7 au minimum&lt;br /&gt;
 |Une partie&lt;br /&gt;
 |Oui&lt;br /&gt;
 |1 LED infrarouge et 1 photodiode ont été empruntés&lt;br /&gt;
 |-&lt;br /&gt;
 |Adaptateur PS512S&lt;br /&gt;
 |1&lt;br /&gt;
 |Non&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Lien Gotronic : [http://www.gotronic.fr/art-adaptateur-ps512s-19913.htm]&lt;br /&gt;
 |-&lt;br /&gt;
 |Shield carte SD&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Nous avons eu une carte shield Ethernet - SD ainsi que la carte SD.&lt;br /&gt;
 |-&lt;br /&gt;
 |Module horloge temps réel (RTC)&lt;br /&gt;
 |1&lt;br /&gt;
 |Non&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Lien Gotronic : [http://www.gotronic.fr/art-module-horloge-temps-reel-ada3296-25536.htm]&lt;br /&gt;
 |-&lt;br /&gt;
 |Capteur Ultrason&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Emprunté&lt;br /&gt;
 |-&lt;br /&gt;
 |LEDs&lt;br /&gt;
 |minimum 3&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Plusieurs empruntées&lt;br /&gt;
 |-&lt;br /&gt;
 |Résistances&lt;br /&gt;
 |Une vingtaine&lt;br /&gt;
 |Oui (C205)&lt;br /&gt;
 |Non&lt;br /&gt;
 |Plusieurs empruntées&lt;br /&gt;
 |-&lt;br /&gt;
 |Arduino méga&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Un arduino méga et un arduino uno (pour les tests) ont été empruntés&lt;br /&gt;
 |-&lt;br /&gt;
 |ESP8266&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |La version 012 a été empruntée&lt;br /&gt;
 |-&lt;br /&gt;
 |Servomoteur 360&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Emprunté&lt;br /&gt;
 |-&lt;br /&gt;
 |Solution de secours : Rapsberry&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Pas encore emprunté, solution de secours&lt;br /&gt;
 |-&lt;br /&gt;
 |Solution de secours : Balance&lt;br /&gt;
 |1&lt;br /&gt;
 |Non&lt;br /&gt;
 |Non&lt;br /&gt;
 |Pas encore emprunté, solution de secours&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
*Étude et réalisation d'un système à base de LEDs infrarouges et de photodiodes afin de pouvoir estimer si la gamelle est vide ou pleine. De même pour le réservoir.&lt;br /&gt;
**Circuit d'émission : LED Infrarouge&lt;br /&gt;
**Circuit de réception : Photodiode&lt;br /&gt;
**Étude des emplacements stratégiques dans la gamelle et le réservoir&lt;br /&gt;
*Réalisation d'un prototype de gamelle&lt;br /&gt;
**Conception 3D de l'hélice sur laquelle le servomoteur va venir se greffer&lt;br /&gt;
**Conception 3D de la gamelle complète&lt;br /&gt;
**Découpage/impression de prototypes&lt;br /&gt;
*Étude de l'ESP8266&lt;br /&gt;
*Tests d'écriture et de lecture sur la carte SD depuis l'arduino&lt;br /&gt;
*Étude du module d'horloge temps réel (RTC)&lt;br /&gt;
*Contrôle des différents capteurs en incluant le servomoteur&lt;br /&gt;
*Création de l'application mobile&lt;br /&gt;
*Mise en relation des différentes parties informatiques du système&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 et + !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 3H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Réalisation de l'état de l'art&lt;br /&gt;
| &lt;br /&gt;
|6H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|-&lt;br /&gt;
|Échange quant aux technologies et au système mécanique à choisir&lt;br /&gt;
| &lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste et de la répartition des tâches&lt;br /&gt;
| &lt;br /&gt;
|2H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2H00&lt;br /&gt;
|-&lt;br /&gt;
| Recherches quant aux échelles de dosage (Quelles quantités de nourriture consomment les chats en fonction de leur poids ?)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste de matériel et établissement des besoins (meilleur rapport besoin/prix étudié)&lt;br /&gt;
| &lt;br /&gt;
|5H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5H00&lt;br /&gt;
|-&lt;br /&gt;
| Modèle 3D de l'hélice&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Modèle 3D du réservoir&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|-&lt;br /&gt;
| Étude des LEDs Infrarouge et des photodiodes&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Tests sur le module wifi ESP8266&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|8H00&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|16H00&lt;br /&gt;
|-&lt;br /&gt;
| Tests de lecture et écriture sur la carte SD&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|6H00&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|16H00&lt;br /&gt;
|-&lt;br /&gt;
| Étude du servomoteur et réalisation d'un programme le contrôlant en C&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Prototype de l'hélice et du réservoir&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|-&lt;br /&gt;
| Achat de planches pour la réalisation des prototypes de la gamelle en bois&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Étude du capteur Infrarouge et réalisation d'un programme le contrôlant en C&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main d'androïd studio et réalisation d'une ébauche d'application mobile pour notre gamelle connectée&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|10H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|13H00&lt;br /&gt;
|-&lt;br /&gt;
| Création du réseau établi entre le système et l'application android (problème avec le point d'accès)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|8H00&lt;br /&gt;
|8H00&lt;br /&gt;
|4H00&lt;br /&gt;
|24H00&lt;br /&gt;
|-&lt;br /&gt;
| Assemblage et finition de la partie mécanique&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|8H00&lt;br /&gt;
|6H00&lt;br /&gt;
|18H00&lt;br /&gt;
|-&lt;br /&gt;
| Tests sur le module temps réel&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Création de la base de donnée de l'application android et du singleton&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|10H00&lt;br /&gt;
|10H00&lt;br /&gt;
|-&lt;br /&gt;
| Liaison ESP8266 et Arduino (Software Serial) + High shifter&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8H00&lt;br /&gt;
|8H00&lt;br /&gt;
|-&lt;br /&gt;
| Application mobile : la page des configurations&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|10H00&lt;br /&gt;
|10H00&lt;br /&gt;
|-&lt;br /&gt;
| Application mobile : la page des études statistiques&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8H00&lt;br /&gt;
|8H00&lt;br /&gt;
|-&lt;br /&gt;
| Étude du capteur ultrason et réalisation d'un programme le contrôlant en C&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| TOTAL&lt;br /&gt;
|3H00&lt;br /&gt;
|17H00&lt;br /&gt;
|10H00&lt;br /&gt;
|8H00&lt;br /&gt;
|14H00&lt;br /&gt;
|14H00&lt;br /&gt;
|13H00&lt;br /&gt;
|21H00&lt;br /&gt;
|12H00&lt;br /&gt;
|16H00&lt;br /&gt;
|49H00&lt;br /&gt;
|177H&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Préambule===&lt;br /&gt;
L’internet des objets (IoT) représente l’extension d’internet à des choses et à des lieux du monde physique (wikipédia). Les objets connectés en l’occurrence sont aujourd’hui un enjeu important. De plus en plus d’objets initialement banals se voient être connectés afin d’en améliorer l’utilisation. Lors de ce projet, nous nous intéressons aux animaux domestiques. Lorsque nous nous absentons, nous n’avons aucun contrôle sur ce qui se passe à la maison. Ainsi, nous ne pouvons pas savoir si notre animal mange ou se porte bien. De plus, nous n’avons aucun retour sur ce que notre chien ou chat notamment a consommé. Est-ce qu’il se nourrit bien ? À quelle fréquence ? Dès lors, il est impensable de s’absenter sur le long terme ou un week-end sans faire intervenir un tiers pour nourrir notre cher animal. Nous pouvons également penser à des animaux qui seraient dangereusement en surpoids. Nous voudrions surveiller leur alimentation mais cela demande une surveillance constante qui n’est pas forcément envisageable. L’objectif de ce projet est de répondre à ces questions et besoins. Et si nous connections une gamelle à une application ?&lt;br /&gt;
&lt;br /&gt;
[[Image:Gamelle-inox-couleur-antiderapante-6-tailles.jpg|center|200px]].&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
L’objectif de la première semaine a été tout d’abord de lister les différentes tâches à réaliser tout au long du projet. Cette liste sera bien sûr modifiable en fonctions des difficultés ou contraintes rencontrées au cours du projet. Cette liste a été rajoutée à la suite du cahier des charges.&lt;br /&gt;
Ensuite, un état de l’art a été réalisé. Nous avons ainsi pu clairement définir le schéma de principe de notre gamelle et le mécanisme de réapprovisionnement choisi. Voici de nouveau le lien vers notre état de l'art : [[Fichier:Etat_de_l_art.pdf]]&lt;br /&gt;
&lt;br /&gt;
Faisons un point rapide sur ces choix. Un système d’ « hélice » est privilégié afin de réapprovisionner la gamelle. Il s’agit en fait d’un cylindre plat qui sera placé en sortie du réservoir. Le réservoir sera moins large en sortie vers la gamelle qu’à son sommet, en entrée des croquettes. Cela permettra aux croquettes de s’introduire facilement dans notre système d’ « hélice ». Ce cylindre serait  troué de part et d’autre afin de pouvoir contenir une certaine dose de croquettes. Ainsi, nous pouvons réapprovisionner la gamelle en fonction de ce dosage.&lt;br /&gt;
Enfin, nous nous sommes attardés sur l’organisation et la répartition de ces tâches afin de pouvoir détailler une liste de matériel. Cette dernière a été ajoutée au wiki à la suite de la liste des tâches.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Lors de cette deuxième semaine, plusieurs tâches ont été réalisées. Tout d’abord, un début de modélisation du système a été effectué sous ''Solidworks''. Pour ce faire, nous avons dû décider de combien de grammes de croquettes à la fois nous pouvons réapprovisionner la gamelle. Ainsi, nous avons effectué des recherches quant à la consommation de nourriture journalière d’un chat. Étant donné qu’un chien consomme davantage de croquettes qu’un chat, nous nous basons sur la consommation de ce dernier, quitte à donner plusieurs doses si l’animal est un chien. Voici un tableau sur lequel nous allons nous baser :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|+ '''Tableau de référence'''&lt;br /&gt;
|-&lt;br /&gt;
! scope=col | Poids du chat adulte&lt;br /&gt;
! scope=col | 1-3 kg&lt;br /&gt;
! scope=col | 4 kg&lt;br /&gt;
! scope=col | 5 kg&lt;br /&gt;
! scope=col | 6 kg&lt;br /&gt;
|-&lt;br /&gt;
|'''Quantités journalières (en grammes)'''&lt;br /&gt;
|15-50g&lt;br /&gt;
|50-65g&lt;br /&gt;
|65-70g&lt;br /&gt;
|70-90g&lt;br /&gt;
|-&lt;br /&gt;
|'''Quantités journalières (avec un bol doseur de 300 mL)'''&lt;br /&gt;
|x 0.1 - 0.3&lt;br /&gt;
|x 0.3 - 0.4&lt;br /&gt;
|x 0.4&lt;br /&gt;
|x 0.4 - 0.6&lt;br /&gt;
|}&lt;br /&gt;
Ce tableau marche pour les croquettes Ultra premium direct en particulier.&lt;br /&gt;
&lt;br /&gt;
Grâce à ce tableau, nous pensons que réapprovisionner la gamelle par dose de 15g est approprié. Or,[[Image:Formule1.png|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Maintenant, il est nécessaire de calculer le rayon de l’hélice permettant au système de doser 15g à la fois.&lt;br /&gt;
&lt;br /&gt;
Nous voulons pouvoir doser 15g : [[Image:Formule2.png|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Posons n = 4 car nous souhaitons avec 2 doseurs, un de chaque côté de l’hélice : [[Image:Formule3.png|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Prenons à présent h = 4 cm ; h étant la largeur de l’ouverture conduisant à la gamelle. Nous avons alors : &lt;br /&gt;
&lt;br /&gt;
[[Image:Formule4.png|center|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Voici une image de l'hélice modélisée en conséquent : &lt;br /&gt;
&lt;br /&gt;
[[Image:Hélice_image.jpg|vignette|center|500px|Modélisation de l'hélice en 3D.]].&lt;br /&gt;
&lt;br /&gt;
*D’un autre côté, des tests ont été réalisés en ce qui concerne le dispositif LED infrarouge-phototransistor.&lt;br /&gt;
&lt;br /&gt;
'''Présentation de l'expérimentation :'''&lt;br /&gt;
&lt;br /&gt;
Nous utilisons une LED IR SFH 4554 pour l’émission et une pour la réception. Pour des raisons de simplicité de fonctionnement, l'allumage des LEDs ne sera pas piloté. Elles seront continuellement allumées (aucune information n'est à transmettre).&lt;br /&gt;
&lt;br /&gt;
À la réception, nous utilisons une photodiode en ''pull-down''  avec une résistance pour contrôler l'intensité dans cette dernière. Nous relions ce montage à un arduino pour vérifier jusqu'à quelle portée nous détectons le signal de la LED émettrice. Grâce à cela, nous serons à même de définir les emplacements des émetteurs/récepteurs dans la gamelle et dans le réservoir ainsi que  la taille de ces derniers. Voici le schéma de principe :&lt;br /&gt;
&lt;br /&gt;
[[Image:Schema_diode_phototransistor.png|vignette|center|500px|Schéma de principe.]].&lt;br /&gt;
&lt;br /&gt;
'''Test rapide de la portée :'''&lt;br /&gt;
&lt;br /&gt;
Calcul des résistances :&lt;br /&gt;
&lt;br /&gt;
Réception : une résistance de 4.7 kΩ est placée.&lt;br /&gt;
&lt;br /&gt;
Émission : nous alimentons la LED en 5 V. Elle possède un courant &amp;lt;math&amp;gt;U_d = 1.2 V&amp;lt;/math&amp;gt; pour 20 mA et supporte 100 mA continue. À 100 mA, &amp;lt;math&amp;gt;U_d = 1.4 V&amp;lt;/math&amp;gt;. Pour être certains d'avoir la meilleure portée possible, nous nous rapprochons des 100 mA. Ainsi, pour le dimensionnement de R nous obtenons :&lt;br /&gt;
&lt;br /&gt;
[[Image:Formule5.png|center|upright=50]]&lt;br /&gt;
1. A.N. : &amp;lt;math&amp;gt;V_{CC} = 5V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;U_d = 1.4V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;I_f = 0.1A&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
R = 36Ω. Soit, en normalisant, '''R = 47Ω'''.&lt;br /&gt;
&lt;br /&gt;
Avec ces données, nous obtenons une portée maximale de 30 cm.&lt;br /&gt;
&lt;br /&gt;
2. Nous faisons un autre test avec une intensité plus basse :&lt;br /&gt;
A.N. : &amp;lt;math&amp;gt;V_{CC} = 5V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;U_d = 1.2V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;I_f = 001A&amp;lt;/math&amp;gt;&lt;br /&gt;
R = 380Ω. Soit, en normalisant, '''R = 330Ω'''.&lt;br /&gt;
Avec ces données, nous obtenons une portée maximale de 22 cm.&lt;br /&gt;
&lt;br /&gt;
L'intérêt de connaître cette portée est que nous allons pouvoir adapter la taille du réservoir et de la gamelle afin de rendre notre dispositif réalisable. À titre de rappel, nous utilisons ce système afin de savoir si la gamelle est vide (Ce système fonctionnant en tout ou rien) et également afin de connaître le niveau approximatif des croquettes dans le réservoir. &lt;br /&gt;
&lt;br /&gt;
*Enfin, pour travailler, nous avons à notre disposition deux arduino : un arduino ''uno'' et un arduino ''méga''. L’utilisation du module wifi ESP8266 nous impose de travailler avec un arduino ''méga''. Cependant, les tests tels que pour le système LED infrarouge-phototransistor peuvent être réalisés indépendamment sur l’arduino ''uno''. Ainsi, nous pouvons travailler à deux en parallèle sur des arduino différents. Cependant, il a fallu réadapter le makefile permettant de flasher l’arduino à un arduino ''méga'' car celui que nous possédions ne fonctionnait que pour un arduino ''uno''. (Un « -D » étant nécessaire dans la ligne de commande pour flasher l’arduino dans le cas d’un ''méga'', qui ne l’était pas pour l’arduino ''uno''.)&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Lors de cette troisième semaine, nous réalisé des tests sur les deux arduinos. &lt;br /&gt;
&lt;br /&gt;
==== Le servomoteur et sa PWM ====&lt;br /&gt;
Tout d’abord, le premier test porte sur le servomoteur prévu pour faire tourner le système d’hélice et réapprovisionner la gamelle.&lt;br /&gt;
&lt;br /&gt;
Le servomoteur que nous utilisons est un servomoteur à courant continue. Il a l’avantage de pouvoir être contrôlé en vitesse et de pouvoir tourner à plus de 180°. &lt;br /&gt;
&lt;br /&gt;
Pour alimenter un servomoteur, il faut brancher ses trois connectiques sur l’alimentation 5V de l’arduino, sur la masse et sur une broche PWM. &lt;br /&gt;
&lt;br /&gt;
En effet, la consigne envoyée à un servomoteur est de type PWM (Pulse Width Modulation). Ce signal permet de faire varier la durée en état « haut » du signal grâce à la consigne que nous lui donnons. Voici un schéma montrant quelques exemples de modifications de la durée d’un état « haut » :&lt;br /&gt;
[[Image:PWM explications.png|center|300px]].&lt;br /&gt;
&lt;br /&gt;
La difficulté a été de programmer ce servomoteur en passant par le langage C. En effet, avec arduino IDE, il est plus aisé de le faire puisqu’il existe une bibliothèque servo.h permettant de programmer des servomoteurs facilement. En C, il a fallu se pencher sur le fonctionnement et le contrôle d’une PWM grâce aux différents registres de l’arduino. &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, il faut configurer les registres TCCR1A et TCCR1B afin d’activer la PWM en mode non-inversé et à fréquence élevée.  &lt;br /&gt;
&lt;br /&gt;
Enfin, il faut activer la PIN5 du port B en sortie (Pin PWM).&lt;br /&gt;
&lt;br /&gt;
Rentrons un peu plus dans le détail quant à la configuration des deux registres TCCR1A et TCCR1B.&lt;br /&gt;
TCCR0A = 1000 0001 = 0x81 et TCCR0B = 0000 0101  = 0x05&lt;br /&gt;
[[Image:TCCR0A.png|center|650px]].&lt;br /&gt;
[[Image:TCCR0B.png|center|650px]].&lt;br /&gt;
&lt;br /&gt;
TCCR0A : &lt;br /&gt;
   COM0A1 = 1 COM0A0 = 0 =&amp;gt; non-inverting mode&lt;br /&gt;
&lt;br /&gt;
   COM0B1 = 0 COM0B0 = 0 =&amp;gt; mode standard&lt;br /&gt;
&lt;br /&gt;
   WGM01 = 0 WGM00 = 1 =&amp;gt; PWM mode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TCCR0B : &lt;br /&gt;
   FOC0A = 0 FOC0B = 0 =&amp;gt; car PWM mode&lt;br /&gt;
&lt;br /&gt;
   WGM02 = 0 =&amp;gt; PWM mode&lt;br /&gt;
&lt;br /&gt;
   SC02 = 1 CS01 = 0 CS00 = 1 =&amp;gt; clk (entrée/sortie) /1024&lt;br /&gt;
&lt;br /&gt;
Pour connaître ces résultats, les tableaux descriptifs sont disponibles dans la datasheet de l'arduino méga, accessible dans les références à la fin du wiki.&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps, en modifiant directement le registre OCR0A, nous envoyons une commande au servomoteur. La durée en état « haut » est ainsi proportionnelle à la consigne saisie dans OCR0A.&lt;br /&gt;
&lt;br /&gt;
Le servomoteur tourne bien différemment en fonction de la valeur saisie dans OCR0A. Maintenant, il reste à comprendre comment contrôler de manière précise le servomoteur et sa position en fonction de la consigne.&lt;br /&gt;
&lt;br /&gt;
==== Le capteur ultrason ====&lt;br /&gt;
&lt;br /&gt;
=====  Présentation =====&lt;br /&gt;
Nous pensons utiliser le module HC-SR04 couplé à un arduino pour détecter la présence de l’animal devant la gamelle. Cela servira à ne pas prendre en considération le contenu de la gamelle pour savoir si elle est vide ou non lorsque l’animal se nourrit. Ou encore, cela aidera afin de pouvoir réaliser un suivi à savoir : à quel moment le chat a-t-il été manger ?&lt;br /&gt;
&lt;br /&gt;
En lisant la documentation technique du HC -SR04, nous en tirons ceci :&lt;br /&gt;
&lt;br /&gt;
[[Image:US data.png|center|550px]].&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement du système est simple et il suffit d'envoyer un message de 10µs minimum avec une écart de 60 ms minimum pour recevoir une réponse du capteur.&lt;br /&gt;
&lt;br /&gt;
Le capteur renvoi un signal qui a un temps proportionnel à sa distance par rapport à l’obstacle.&lt;br /&gt;
&lt;br /&gt;
=====  Expérimentation =====&lt;br /&gt;
Nous rajoutons des LESs afin d’avoir une indication lorsqu’un signal est envoyé. La valeur reçue est visualisée à l’aide de l’outil minicom, la valeur était envoyé sur le port série. Nous remarquons que le système fonctionne même si des imperfections de de mesure subsistent (dues notamment au programme). La précision du système suffit néanmoins à la détection du chat devant la gamelle.&lt;br /&gt;
&lt;br /&gt;
=====  Problème lié à l'étude =====&lt;br /&gt;
Le module utilise une fréquence de 40khz.&lt;br /&gt;
Suite à des vérifications, les chats et les chiens entendent des sons pouvant aller jusqu'à 60khz. &lt;br /&gt;
Une recherche a été effectuée sur les barrières repoussant les chiens et les chats. Malgré le peu de documentation technique que nous avons trouvé, nous remarquons  que les fréquences utilisées sont de l'ordre de 25 khz. Ces fréquences sont bien loin des 40khz de notre système. Cependant, une petite expérimentation a été réalisée sur un chat de 6 ans à l’aide d’une application smartphone générant des ultrasons. Il s’avère que le chat est dérangé par ces fréquences, le chat s'en va au bout de 10 minutes d’expérience.&lt;br /&gt;
&lt;br /&gt;
=====  Conclusion =====&lt;br /&gt;
Même si le module HC-SR04 est très simple d’utilisation, nous ne pouvons continuer à nous en servir pour notre projet de gamelle connectée.&lt;br /&gt;
&lt;br /&gt;
=====  Autre alternative =====&lt;br /&gt;
* Tapis de jauge de contrainte → couvre une surface trop petite&lt;br /&gt;
* Détecteur de présence infrarouge → convient pour des objets de taille supérieure à 15 cm  &lt;br /&gt;
&lt;br /&gt;
Notre choix se porte donc sur le capteur infrarouge, que nous programmerons dans une séance ultérieure.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
La semaine a été en grande partie consacrée à la réalisation d’un prototype pour le système d’hélice et le réservoir. Tout d’abord, nous avons dû faire plusieurs aller-retour au magasin afin d’acheter des planches pour la réalisation des différents prototypes. La première planche qui a été acheté était une medium, matériel qui n’est plus accepté dans la découpeuse laser puisqu’elle encrasse le filtre et la lentille de l’appareil. Nous avons donc du aller acheter les bonnes planches. De plus, il a fallu réserver des créneaux au fabricarium et apprendre à se servir de la découpeuse laser. Le prototype final n’est pas encore assemblé puisque nous réfléchissons à un système de « pied à coulisse » afin de pouvoir choisir le dosage unitaire que peut servir l’hélice.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5 et semaine 6===&lt;br /&gt;
'''Création d’un programme contrôlant la lecture et l’écriture sur la carte SD'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Pour rendre notre projet innovant par rapport aux autres gamelles connectées proposées sur le marché, nous avons décidé de faire un suivi lié à l'alimentation du chat. Par exemple, nous souhaitons savoir à quels moments de la journée l’animal va manger, pendant combien de temps, en quelles quantités etc…&lt;br /&gt;
Pour cela, nous devons stocker ces différentes données. Pour ce faire, nous utiliserons le shield SD/ethernet  suivant :&lt;br /&gt;
&lt;br /&gt;
[[Image:Shield sd ethernet.jpg|vignette|center|300px|Shield SD/ethernet.]]&lt;br /&gt;
&lt;br /&gt;
*Code arduino shield Sd/ethernet&lt;br /&gt;
&lt;br /&gt;
Pour commencer, l’expérimentation du shield  a été effectuée à l’aide d’arduino IDE afin de réaliser un prototype rapide et tester si le shield est efficace et permet de répondre à nos besoins.&lt;br /&gt;
&lt;br /&gt;
Nous nous basons sur l'exemple proposé par arduino IDE suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SD.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File myFile;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  // Open serial communications and wait for port to open:&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  while (!Serial) {&lt;br /&gt;
    ; // wait for serial port to connect. Needed for native USB port only&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Initializing SD card...&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if (!SD.begin(4)) {&lt;br /&gt;
    Serial.println(&amp;quot;initialization failed!&amp;quot;);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;initialization done.&amp;quot;);&lt;br /&gt;
  myFile = SD.open(&amp;quot;test.txt&amp;quot;, FILE_WRITE);&lt;br /&gt;
&lt;br /&gt;
  if (myFile) {&lt;br /&gt;
    Serial.print(&amp;quot;Writing to test.txt...&amp;quot;);&lt;br /&gt;
    myFile.println(&amp;quot;testing 1, 2, 3.&amp;quot;);&lt;br /&gt;
    myFile.close();&lt;br /&gt;
    Serial.println(&amp;quot;done.&amp;quot;);&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.println(&amp;quot;error opening test.txt&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  myFile = SD.open(&amp;quot;test.txt&amp;quot;);&lt;br /&gt;
  if (myFile) {&lt;br /&gt;
    Serial.println(&amp;quot;test.txt:&amp;quot;);&lt;br /&gt;
    while (myFile.available()) {&lt;br /&gt;
      Serial.write(myFile.read());&lt;br /&gt;
    }&lt;br /&gt;
    myFile.close();&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.println(&amp;quot;error opening test.txt&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous remarquons que nous écrivons facilement sur la carte SD grâce à la bibliothèque disponible. En ajoutant quelques boutons et en modifiant légèrement le code, nous arrivons à sauvegarder la durée de maintien du bouton ainsi que la fréquence d’actionnement.&lt;br /&gt;
&lt;br /&gt;
*Code C Shield  SD/ethernet&lt;br /&gt;
&lt;br /&gt;
Une fois le prototype fait et fonctionnel, nous décidons d’écrire le code en C. Pour cela, nous utilisons en particulier deux bibliothèques fournies par Monsieur REDON : Sd2Card et spi.&lt;br /&gt;
Après de multiples tentatives, nous arrivons toujours à l'erreur suivante : “SD_CARD_ERROR_CMD0”. Cette dernière est liée à un timeout qui persiste malgré la modification de paramètres dépendants.&lt;br /&gt;
&lt;br /&gt;
*Changement de matériel&lt;br /&gt;
&lt;br /&gt;
Monsieur REDON nous a fourni un nouveau shield uniquement SD cette fois-ci pour tester si le problème est matériel. En voici la photographie :&lt;br /&gt;
&lt;br /&gt;
[[Image:Shield sd simple.jpg|vignette|center|300px|Shield SD.]]&lt;br /&gt;
&lt;br /&gt;
*Code C Shield SD&lt;br /&gt;
&lt;br /&gt;
En recompilant le code sur le nouveau shield, nous remarquons qu'il n'y a pu d'erreur liée à l'initialisation de la carte SD.&lt;br /&gt;
Suite à des expérimentations liées à la prise en main du code exemple donné, nous arrivons maintenant à écrire une information dans un bloc est à relire cette information plus tard.&lt;br /&gt;
&lt;br /&gt;
Voici un extrait lu depuis l’utilitaire minicom lors de la lecture de la carte SD :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;status de la carte sd = 1                                                 &lt;br /&gt;
status=0                                                                  &lt;br /&gt;
erreur=0                                                                  &lt;br /&gt;
type=3                                                                    &lt;br /&gt;
taille=7744512                                                            &lt;br /&gt;
Lecture                                                                   &lt;br /&gt;
statut=0                                                                  &lt;br /&gt;
bloc[0]=1 bloc[1]=0 bloc[2]=aa bloc[3]=bb bloc[4]=cc bloc[5]=0&lt;br /&gt;
statut=0   &lt;br /&gt;
bloc[0]=dd bloc[1]=ee bloc[2]=ff bloc[3]=0 bloc[4]=0 bloc[5]=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le shield fonctionne comme désiré et nous pourrons ainsi enregistrer des informations afin de les traiter plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Configuration du module WiFi ESP8266'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
L’ESP8266 est un circuit intégré à un microcontrôleur qui fait office de module WiFi. Il possède un total de 9 GPIO (3.3V) ce qui lui permet d’être utilisé indépendamment, sans même se connecter à un autre microcontrôleur. La datasheet de ce composant est disponible dans la rubrique « Datasheet » en bas de page. Pour notre projet, l’utilisation seule de ce module ne suffisait pas. C’est pourquoi, nous le connectons à un arduino afin de pouvoir profiter des différentes entrées/sorties de ce microcontrôleur. Voici une photographie du composant en question :&lt;br /&gt;
&lt;br /&gt;
[[Image:Esp8266.jpg|vignette|center|300px|Shield SD.]]&lt;br /&gt;
&lt;br /&gt;
L'adresse IP de notre ESP8266 s'obtient en connectant notre composant à un réseau local. Ainsi, nous savons que cette adresse est la suivante : 192.168.43.53 .&lt;br /&gt;
&lt;br /&gt;
*Programmation du module WiFi en C&lt;br /&gt;
&lt;br /&gt;
De nombreux problèmes ont été rencontrés pour configurer l’ESP8266 en C. Le programme devant être directement chargé sur ce dernier, de nombreuses erreurs en ont résulté. Après de nombreuses heures passées à essayer de régler ces problèmes, nous avons discuté de cela avec l’un de nos encadrant, M. REDON, qui nous a autorisé à programmer le module WiFi directement sur arduino IDE, puisqu’une bibliothèque existante rend la tâche moins ardue. De ce fait, l’avantage de l’ESP8266 est que nous chargeons un programme directement sur ce dernier. Ainsi, nous pouvons programmer le reste de notre projet en C, en compilant et téléversant le fichier sur l’arduino sans perturber le fonctionnement du module WiFi.&lt;br /&gt;
&lt;br /&gt;
*Programmation du module WiFi sur arduino IDE&lt;br /&gt;
&lt;br /&gt;
Tout d’abord, lors de l’installation d’arduino IDE, il faut veiller à ce que la version soit suffisamment récente pour pouvoir y télécharger des « boards ». En effet, il faut, grâce à un lien disponible sur le site d’arduino, ajouter l’ESP8266 en tant que board dans le logiciel afin que le composant puisse être reconnu afin de téléverser un programme. &lt;br /&gt;
Ensuite, l’ESP doit être connectée en USB sur à l’ordinateur afin qu’elle soit visible sur son port propre (USB0 en l’occurrence). Ainsi, lors du téléversement du fichier, il faut sélectionner ce port dans la liste de ceux disponible. (Beaucoup de soucis ont été rencontrés à ce propos, l’ESP n’étant pas toujours visible comme étant disponible sur arduino IDE). &lt;br /&gt;
Enfin, un test basique a été réalisé qui consiste à faire clignoter une LED connectée à un GPIO de l’ESP et à se connecter à un réseau WiFi. L’avantage de programmer en arduino IDE est que, par un simple « #include &amp;lt;ESP8266WiFi.h&amp;gt; », nous ajoutons la bibliothèque propre à notre module WiFi. La fonction WiFi.begin permet alors de se connecter facilement à un réseau local en passant en paramètres le nom du réseau sans fil (SSID) ainsi que son mot de passe. &lt;br /&gt;
&lt;br /&gt;
Voici une visualisation des informations envoyées sur l'interface série :&lt;br /&gt;
&lt;br /&gt;
[[Image:Capture esp.png|vignette|center|500px|Visualisation sur l'interface série.]]&lt;br /&gt;
&lt;br /&gt;
*Réseau&lt;br /&gt;
&lt;br /&gt;
La question de la connexion réseau entre le module WiFi et l’application mobile, que nous allons bientôt réaliser, se pose. Nous avons travaillé également sur cette partie lors de la semaine 6. Cependant, nous expliciterons cette partie un peu plus tard afin d’aborder en même temps la partie réseau du côté de l’application mobile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
'''Capteur Infrarouge IRS05A'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Dans la partie liée au suivi de l'alimentation, nous avons besoin d'un détecteur de présence afin de savoir si le chat est en train de se nourrir ou pas. Pour cela, nous avions testé le module HC-SR04, expérimentation qui n'avait pas aboutie due au fait que le chat entende les ultrasons. Nous avons choisi en remplacement le module irs05a. En voici une photographie :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:IRS05A.jpg|center|200px]]&lt;br /&gt;
&lt;br /&gt;
*Programme C&lt;br /&gt;
&lt;br /&gt;
En étudiant la datasheet du composant, nous trouvons ceci : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour l'expérimentation, nous avons juste besoin de commander l'entrée enable et de placer une LED à la sortie output afin de visualiser si le module détecte ou non un objet. Suite à cette expérimentation, nous avons pu définir la zone de détection du module. Voici un schéma explicatif :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:IRS05A extrait datasheet.png|center|400px]]&lt;br /&gt;
&lt;br /&gt;
Grâce à ce schéma, nous avons pu faire un choix matériel quant à celui de l’emplacement de nos deux capteurs de présence. Ils seront disposés comme suit :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema ir disposition.jpg|center|200px]]&lt;br /&gt;
&lt;br /&gt;
'''Application mobile'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
L’objectif de cette semaine a été en partie de se familiariser avec l’environnement de développement intégré (IDE) d’Android Studio. Sous Android, il est commun de passer par cette plateforme afin de programmer différentes applications mobiles. Cela se code en java. &lt;br /&gt;
&lt;br /&gt;
*Application pour la gamelle connectée&lt;br /&gt;
&lt;br /&gt;
Tout d’abord, le domaine des applications mobiles est très complexe. De plus, la documentation technique de java est également très fournie. Cela a rendu la tâche de réaliser une application android basique très longue. Finalement, nous voulons créer une application mobile permettant de visualiser les statistiques de son animal,  de contrôler la gamelle manuellement ou de programmer des modes pour l’alimenter. Pour le moment, le squelette général a été créé, permettant d’afficher de nouvelles fenêtres à chaque choix de « mode ».  Voici des screenshots de l’application actuelle :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:App premiere page.png|200px]] [[Fichier:Onglet1.png|200px]] [[Fichier:Onglet2.png|200px]] [[Fichier:Onglet3 en cours.png|200px]] &lt;br /&gt;
&lt;br /&gt;
*Réseau &lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons voulu aller plus loin dans la fenêtre consacrée au réapprovisionnement manuel. En effet, nous souhaitons réaliser un test simple qui consiste à allumer une LED connectée à un GPIO de l’ESP8266 par simple appui d’un bouton depuis l’application mobile. Le problème qui s’est alors posé a été celui de créer un lien serveur/client entre le module WiFi et l’application mobile. L’idée serait alors de créer un serveur TCP sur arduino IDE qui se chargerait sur l’ESP8266 et de créer, à l’aide de sockets en java, un client sur l’application mobile. Le serveur TCP a été réalisé sur l’arduino mais n’a pas encore pu être testé. La réalisation du client sur l’application mobile est l’objet de la semaine 8, les tests seront alors réalisés et explicités à ce moment là.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8 et 9===&lt;br /&gt;
'''Application mobile, partie réseau'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Le serveur TCP réalisé sous arduino IDE directement sur le module WiFi a été testé à l’aide de la commande nc. En effet, nous avons utilisé un terminal téléchargé sur le téléphone afin de connecter le module WiFi et le téléphone sur le même réseau. En envoyant les requêtes directement via la commande nc, nous sommes capables d’allumer et d’éteindre la LED connectée au GPIO de l’ESP8266. Maintenant, il faut réaliser la même chose mais côté application mobile.&lt;br /&gt;
&lt;br /&gt;
La partie concernant la création du socket et l’envoi de données à l’esp8266 nous a pris beaucoup de temps. En effet, le problème ne venait pas de notre code mais simplement du fait que la version android du téléphone utilisé comme point d’accès internet empêchait l’application de connecter la socket à l’adresse IP du module WiFi. Après avoir configuré un routeur et connecté le module WiFi et le téléphone dessus, nous étions capable d’envoyer des requêtes au module WiFi afin qu’il allume une LED notamment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Principe&lt;br /&gt;
&lt;br /&gt;
Il est préférable de réaliser la partie réseau d’une application mobile via un thread afin de rendre l’application la plus fluide possible. Par exemple, l’appui du bouton ON permet de modifier une chaine de caractère et lance le thread d’envoi. Dans ce thread, l’application connecte la socket au module WiFI à l’aide de son adresse IP et du port de communication spécifié dans le programme du serveur TCP sur arduino IDE. Ensuite, la socket se charge d’envoyer la chaine de caractère à l’esp8266. Cela se fait par l’utilisation de l’objet ''DataOutputStream'' et de sa méthode ''writeBytes'' qui permet l’envoi simple d’une chaine de caractère. &lt;br /&gt;
&lt;br /&gt;
Pour la réception des données, il s’agit du même principe mais nous utilisons l’objet DataInputStream.&lt;br /&gt;
&lt;br /&gt;
Voici un aperçu de ce qui est visualisable sur l'interface série de l'arduino IDE, les requêtes sont bien envoyées :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Serveur ok.png|center|100px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 10 et +===&lt;br /&gt;
'''La base de données sur l'application android'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons déjà les données directement sur la gamelle grâce à la carte SD. Cependant, il nous a semblé nécessaire de garder en mémoire les statistiques de notre animal de compagnie directement sur l’application. Après avoir lu le livre « L’art du développement Android » de Grant Allen, prêté notre enseignant, deux possibilités nous sont apparues. La première était de manipuler des fichiers qui seraient générés par l’application afin de garder en mémoire ce que nous souhaitons. La seconde était de créer une base de données locale grâce à la base de données installée sur Android, ''SQLite''. &lt;br /&gt;
&lt;br /&gt;
*Présentation rapide de SQLite&lt;br /&gt;
&lt;br /&gt;
''SQLite'' utilise un dialecte de SQL afin de réaliser des requêtes de manipulations de données. Les « SELECT », « INSERT », « REMOVE », peuvent ainsi être utilisées.  ''SQLite'' est particulièrement approprié pour l’utilisation android car son utilisation ne repose pas sur un modèle client-serveur (comme ''mysql'' ou ''PostgreSQL'' que nous connaissons). Ainsi, l’intégralité de la base de données est stockée dans un fichier unique.&lt;br /&gt;
&lt;br /&gt;
*Base de données&lt;br /&gt;
&lt;br /&gt;
La base de données que nous avons implémentée permet de répertorier tous les jours enregistrés par la gamelle afin de pouvoir réaliser des traitements statistiques derrière. La date a été stockée en chaine de caractère car le constructeur de la forme ''Date(int year, int month, int day)'' est obsolète pour la version de l’API que nous utilisions. Le deuxième constructeur est de la forme ''Date(long Date)'' et il faut fournir à cette méthode un nombre de millisecondes qu’elle va convertir au format Date de Java. Cela nous semblait peu pratique. &lt;br /&gt;
&lt;br /&gt;
Voici un petit tableau illustrant ce que nous souhaitons stocker dans la base de données :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tableau recap bdd.png|center|450px]]&lt;br /&gt;
&lt;br /&gt;
Trois classes ont été crées : Jour.java, JoursBDD.java et MaBaseSQLite.java.&lt;br /&gt;
&lt;br /&gt;
Voici un schéma UML résumant ces trois classes :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:BDD_lulu.png|center|700px]]&lt;br /&gt;
&lt;br /&gt;
'''La base de données et Singleton'''&lt;br /&gt;
&lt;br /&gt;
Notre base de donnée étant créée et fonctionnelle, nous avions besoin de l’avoir à disposition n’importe où dans l’application. Or, passer un objet d’une page à une autre est simple pour des objets peu complexes. Cependant, il était plus difficile de passer notre base de données avec les méthodes traditionnelles utilisées auparavant. Nous avons donc utilisé un singleton. Le singleton est une instance unique d’une classe. Cela permet à la fois de récupérer facilement cette instance partout dans l’application mais cela permet également de converser une unicité de cette dernière, ce qui est important pour  une base de données. Ainsi, nous avons modifié les classes décrites précédemment afin d’implémenter le singleton. &lt;br /&gt;
&lt;br /&gt;
Deux variables ont été ajoutées à la classe joursBDD : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;private static Context context;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;private static JoursBDDSingleton mJoursBDDSingleton;  //instance unique&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deux méthodes sont également concernées dans ce changement :&lt;br /&gt;
&amp;lt;pre&amp;gt;//Méthode de restauration de contexte&lt;br /&gt;
public JoursBDD(Context context)&lt;br /&gt;
{&lt;br /&gt;
    this.context = context;&lt;br /&gt;
    //creation de la base de donnees&lt;br /&gt;
    maBaseSQLite = new MaBaseSQLite(context, NOM_BDD, null, VERSION_BDD);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Methode de recuperation de l'instance de la BDD&lt;br /&gt;
public static synchronized JoursBD getInstance(Context context){&lt;br /&gt;
    //Création de la base de données et de sa table&lt;br /&gt;
    if(mJoursBDD==null) {&lt;br /&gt;
        //CreateJoursBDD(context);&lt;br /&gt;
        mJoursBDD = new JoursBDD(context);&lt;br /&gt;
    }&lt;br /&gt;
    return mJoursBDD;&lt;br /&gt;
} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, juste un réalisant une récupération de l’instance grâce à  l’appel de la méthode getInstance : JoursBDD.getInstance(this); , il est aisé de le faire dans une nouvelle activité.&lt;br /&gt;
&lt;br /&gt;
'''Le traitement des données'''&lt;br /&gt;
&lt;br /&gt;
Une partie « statistiques » a été ajoutée à l’application mobile. Elle a pour but l’étude de l’alimentation de l’animal grâce à l’utilisation de graphiques et de tableaux. Afin de rendre la chose plus visuelle, l’utilisateur peut sélectionner soit un histogramme, soit un graphique linéaire, soit un tableau de données grâce à des radio boutons. Ensuite, l’utilisateur sélectionne soit les 7 derniers jours soit le dernier mois via un simple bouton. &lt;br /&gt;
Voici un aperçu de la première page :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:statistiques_tableau_petfun.png|center|200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Présentation rapide de achartengine :&lt;br /&gt;
Afin de réaliser l’affichage de graphiques, nous avons utilisé une bibliothèque appelée ''achartengine''. Cette bibliothèque permet la personnalisation de graphiques et l’affichage sous forme d’histogramme ou encore de graphiques linéaires des données. Cette bibliothèque facilite la dynamisation de l’activité. Nous restant peu de temps dans le projet, nous avons décidé d’exploiter cette ressource afin de réaliser une page propre et personnalisée. Nous pouvons utiliser cette bibliothèque en l’ajoutant dans les fichiers ''gradle'' du projet.&lt;br /&gt;
&lt;br /&gt;
Voici les graphiques que nous affichons :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Graphiques stats petfun1.png|200px]] [[Fichier:Graphiques stats petfun2.png|200px]]&lt;br /&gt;
&lt;br /&gt;
*Limites et améliorations :&lt;br /&gt;
L’idée d’avoir créée un bouton permettant d’afficher un graphique de la dernière semaine avait pour but une amélioration par la suite. En effet, l’objectif est de pouvoir, une fois le graphique affiché, passer d’une semaine à une autre. De même pour les mois, nous souhaiterions pouvoir, à partir du dernier mois, afficher les précédents en ''slidant'' le graphique ou en appuyant sur une touche. &lt;br /&gt;
&lt;br /&gt;
'''Configuration des paramètres'''&lt;br /&gt;
&lt;br /&gt;
*Introduction &lt;br /&gt;
&lt;br /&gt;
Une page de permettant de configurer les paramètres de l'application a été ajoutée à l’application mobile. Elle a pour but d’enregistrer les heures de repas de l'animal, le poids contenu dans la gamelle, le nom de l’animal ou encore sa photographie. Le poids contenu dans la gamelle doit être notifié car cette dernière est ajustable grâce à des rails présents sur la gamelle et ajustables. Ainsi, l’utilisateur peut doser la quantité qu’il souhaite. Il devra alors le notifier dans l’application afin que le traitement des données en tienne compte.&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Dans l’activité de contrôle ''automatique'', il s’agit en fait de configurer des paramètres. Sur cette page, les paramètres actuels de la gamelle sont affichés à l’écran. L’utilisateur peut dès lors, via des boutons, sélectionner deux activités : une pour changer les paramètres propres à la gamelle et l’autre pour changer ceux propres à l’animal. &lt;br /&gt;
&lt;br /&gt;
*Paramètres de la gamelle&lt;br /&gt;
&lt;br /&gt;
Dans les paramètres de la gamelle, deux choses sont configurables : les heures de repas de l’animal et la quantité de croquettes ajustée sur la gamelle. Afin de rentrer les heures de repas, le widget ''TimePicker'' a été utilisé et configuré en format 24 heures. L’appui de la touche « AJOUT HEURE » permet l’ajout de l’heure saisi sur le ''TimePicker'' dans les paramètres de l’application. De plus, afin de saisir le poids de la gamelle, un simple ''EditText'' permet de le faire. Si l’utilisateur ne saisi pas un nombre, un message s’affiche à l’écran le prévenant du problème de format.&lt;br /&gt;
&lt;br /&gt;
L’appui de la touche « VALIDER CONFIGURATION » permet la sauvegarde de la saisie et le retour à la première activité. &lt;br /&gt;
&lt;br /&gt;
L’appui de la touche « SUPPRIMER CONFIGURATION » permet la suppression des heures de repas enregistrées dans l’application.&lt;br /&gt;
&lt;br /&gt;
*Paramètres de l’animal&lt;br /&gt;
&lt;br /&gt;
Dans les paramètres de l’animal, le nom ainsi que la photographie de ce dernier peuvent être ajoutés. Le nom est simplement enregistré grâce à un ''EditText''. L’avatar peut être cherché par l’utilisateur dans ses fichiers de téléphone. (Des permissions spécifiques sont nécessaires). L'avatar s'affiche alors en première page de l'application.&lt;br /&gt;
&lt;br /&gt;
Maintenant, la question d’enregistrer tous ses paramètres s’est posée. En effet, une fois l’application fermée, tous les objets et toutes les variables créées dans l’application sont désallouées. Les paramètres rentrés par l’utilisateur sont alors perdus. &lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons fait le choix de modifier les préférences de l’application. Ces préférences renseignent des paires clé-valeur de données.&lt;br /&gt;
&lt;br /&gt;
*SharePreferences&lt;br /&gt;
&lt;br /&gt;
Nous devons créer un objet ''SharePreferences'' via la méthode ''getSharedPreferences'' en lui attribuant un nom unique et en privatisant son accès. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; final SharedPreferences prefs = getSharedPreferences(&amp;quot;Configuration&amp;quot;, Context.MODE_PRIVATE); &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dès lors, nous pouvons restaurer cet objet dans n’importe quelle activité, exactement comme un ''Singleton''. &lt;br /&gt;
Pour créer ou modifier des préférences, nous devons appeler la méthode ''edit()'' de l’objet ''SharedPreferences''. Une fois la valeur modifiée, il est impératif de faire appel à la méthode ''apply()'' ou ''commit()'' de l’objet afin de sauvegarder les changements apportés.	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;final SharedPreferences.Editor editor = prefs.edit();&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, les horaires sont stockées avec une clé de la forme « horairek », k représentant la numérotation des différentes heures saisies par l’utilisateur. Une variable « Taille » fait également partie des préférences afin de pouvoir savoir à tout moment le nombre de repas programmés par l’utilisateur. Le nom de l’animal est stocké avec la clé « Name » et le poids avec la clé « Poids ». Il est alors aisé de retrouvé les valeurs correspondantes dans les préférences et de pouvoir les supprimer de manière spécifique si nécessaire. &lt;br /&gt;
&lt;br /&gt;
Voici donc ce que cela peut nous donner :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Petfun config1.png|200px]] [[Fichier:Petfun config2.png|200px]] [[Fichier:Petfun config4.png|200px]] [[Fichier:Petfun config3.png|200px]]&lt;br /&gt;
&lt;br /&gt;
'''Contrôle du servomoteur via l'application'''&lt;br /&gt;
&lt;br /&gt;
La solution que nous avons choisi est de relier un GPIO de l’ESP8266 à un PIN digital de l’arduino. Ainsi, étant capables d’allumer une LED par appui d’une touche sur l’application mobile, nous serions capables de faire changer l’état d’un PIN de l’arduino et ainsi en fonction de cela, faire tourner le moteur. &lt;br /&gt;
En mettant en place cette méthode, nous nous sommes rendu compte que le PIN de l’arduino ne réagissait pas à du 3.3V, envoyé par le module wifi. Nous avons donc mis en place un ''high shifter'' à l’aide d’un transistor afin de faire passer la tension d’entrée de 3.3V à 5V. Sur le schéma, R1 = R2 = 10 kΩ. R3 = 100 kΩ. La tension Output mesurée est de [[Fichier:FormulePetfun.png|100px]].&lt;br /&gt;
&lt;br /&gt;
Voici le schéma : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:HighShifterPetfunPetfun.jpg|center|250px]]&lt;br /&gt;
&lt;br /&gt;
Voici la photographie du câblage :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cablage petfun.jpg|center|450px]]&lt;br /&gt;
&lt;br /&gt;
'''Aperçu final de la partie mécanique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Croquette.png|center|200px]]&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;br /&gt;
[[Fichier:Rapport_P37_damiens_dorian.pdf‎ ]]&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&lt;br /&gt;
==='''Datasheet'''===&lt;br /&gt;
ESP8266 Adafruit breakout : https://cdn-learn.adafruit.com/downloads/pdf/adafruit-huzzah-esp8266-breakout.pdf&lt;br /&gt;
&lt;br /&gt;
Arduino méga 2560 : http://www.atmel.com/Images/Atmel-2549-8-bit-AVR-Microcontroller-ATmega640-1280-1281-2560-2561_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
L'ultrason HC-SR04 : http://www.gotronic.fr/pj2-hc-sr04-utilisation-avec-picaxe-1343.pdf&lt;br /&gt;
&lt;br /&gt;
Le capteur de présence Infrarouge IRS05A : https://www.pololu.com/file/0J615/tssp77038.pdf&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P37&amp;diff=42250</id>
		<title>IMA4 2016/2017 P37</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P37&amp;diff=42250"/>
				<updated>2017-05-15T16:57:06Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Le servomoteur et sa PWM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Cahier des charges''' ==&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
L’objectif de ce projet est de fabriquer une gamelle pour animaux connectée. Pour ce faire, trois grands axes sont à dégager : une partie informatique, électronique et mécanique. &lt;br /&gt;
&lt;br /&gt;
==== Partie mécanique ====&lt;br /&gt;
'''Structure du système'''&lt;br /&gt;
*Le réservoir. Deux systèmes peuvent être réalisés : &lt;br /&gt;
**Un système de trappes pour le distributeur : deux trappes l’une en dessous de l’autre. &lt;br /&gt;
**Un système de vis sans fin qui permettrait d’alimenter la gamelle.&lt;br /&gt;
&lt;br /&gt;
*La gamelle. Deux méthodes sont possibles :&lt;br /&gt;
**Mesure du poids en prenant une balance déjà existante et en récupérant et en traitant les sorties.&lt;br /&gt;
**Passer par un système d’estimation de volumes. Dans la gamelle, il y aurait des capteurs permettant de connaître la quantité en volume présente dans la gamelle.&lt;br /&gt;
&lt;br /&gt;
Globalement, ces systèmes sont susceptibles de changer suivant l'état de l'art qui sera réalisé par la suite.&lt;br /&gt;
&lt;br /&gt;
==== Partie électronique ====&lt;br /&gt;
*Alimentation. Deux systèmes sont envisagés pour l’alimentation : Un système nomade avec une batterie  pour permettre d’avoir une gamelle déplaçable ou un système fixe alimenté par le secteur ou en usb.&lt;br /&gt;
**Batterie : Nous avons besoin d’une batterie qui peut garder l’énergie suffisamment longtemps pour éviter de devoir recharger la gamelle trop souvent. Une durée de vie d’une semaine est envisagée au minimum.&lt;br /&gt;
**Secteur&lt;br /&gt;
&lt;br /&gt;
*Interface Homme/machine&lt;br /&gt;
**Capteurs&lt;br /&gt;
***Des LEDs couplées à un phototransistor pourraient permettre de connaître la présence ou l’absence de croquettes dans la gamelle.&lt;br /&gt;
***Ultrason pour connaître la présence ou non de l'animal devant la gamelle&lt;br /&gt;
***Autres.&lt;br /&gt;
**Indicateurs : Des indicateurs peuvent être implantés sur le système physique : des LEDS indicatrices de l’état de batterie (si l'alimentation nomade est privilégiée) ou de l’état du réservoir (plein ou vide) sont envisagés.&lt;br /&gt;
&lt;br /&gt;
==== Partie informatique ====&lt;br /&gt;
*Unité de contrôle&lt;br /&gt;
**Utilisation d’un arduino avec un module wifi dans le but de réaliser une communication externe via une application mobile Androïd par exemple. &lt;br /&gt;
**Utilisation d’un raspberry avec création d’un serveur Apache pour permettre de communiquer avec l’utilisateur.&lt;br /&gt;
**Utilisation d'un module communiquant autre que les deux cités précédemment.&lt;br /&gt;
*En bonus :&lt;br /&gt;
**Création d’un système de contrôle à distance en mettant en place une caméra afin que l’utilisateur puisse avoir des images à distance, ou simplement une caméra série afin d'obtenir des images de contrôle. Ce système n’aura pas besoin d’être temps réel. Il pourra être implémenté grâce au serveur apache de la raspberry, si l’utilisation de celle-ci est retenue.&lt;br /&gt;
**Des actionneurs pour permettre à l’utilisateur interagir avec son chat à distance (Buzzer, laser, son, …).&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel et logiciel===&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous avons réalisé l'état de l'art des gamelles connectées déjà réalisées et commercialisées. Voici le lien PDF permettant d’accéder à ce fichier.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Etat_de_l_art.pdf]]&lt;br /&gt;
&lt;br /&gt;
Finalement, nos choix techniques sont les suivants : &lt;br /&gt;
*Matériel&lt;br /&gt;
**Mécanique&lt;br /&gt;
***Un système d’hélice contrôlée par un moteur permettant de déverser des croquettes en quantités connues. (Un schéma du système sera réalisé rapidement).&lt;br /&gt;
**Électronique&lt;br /&gt;
***Un adaptateur capable de générer une tension de 5V à partir du réseau.&lt;br /&gt;
***Des LEDs infrarouges couplées à des photodiodes afin de contrôler l'état de la gamelle et du réservoir.&lt;br /&gt;
***Un servomoteur 360° afin de faire tourner le système d'hélice et permettant ainsi de déverser une dose de croquettes dans la gamelle.&lt;br /&gt;
***Des LEDs permettant de visualiser l'état du système (alimentation du circuit, réservoir vide,...) et les résistances qui vont de pair.&lt;br /&gt;
***Un capteur Ultrason afin de pouvoir vérifier la présence ou non d'un animal devant la gamelle.&lt;br /&gt;
**Informatique&lt;br /&gt;
***Un arduino Méga car l'arduino Uno sera limité lorsque nous communiquerons entre le module wifi et l'application mobile.&lt;br /&gt;
***Un module Wifi ESP8266.&lt;br /&gt;
***Une carte shield SD afin de stocker toutes les variables de l'utilisateur et de son chat.&lt;br /&gt;
***Un module horloge temps réel (RTC) afin de pouvoir programmer en fonction de l'heure qu'il est si le choix de l'utilisateur porte sur le réapprovisionnement de la gamelle de cette manière là.&lt;br /&gt;
&lt;br /&gt;
En solution de secours : &lt;br /&gt;
*Un rapsberry&lt;br /&gt;
*Une balance à modifier manuellement&lt;br /&gt;
&lt;br /&gt;
*Logiciel&lt;br /&gt;
**Solidworks afin de pouvoir concevoir les différentes parties du système mécanique.&lt;br /&gt;
**Les logiciels de programmation (Sublime, vim, emacs, gcc...)&lt;br /&gt;
&lt;br /&gt;
*Autres&lt;br /&gt;
**Utilisation des machines mises à disposition des étudiants au Fablab : découpeuse laser et imprimante 3D pour la conception de prototypes.&lt;br /&gt;
&lt;br /&gt;
==Tableau==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Composant !! Quantité requise !! Disponible (M. Redon) ? !! À commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |Émetteur et récepteur infrarouge/photodiode&lt;br /&gt;
 |Entre 6 et 7 au minimum&lt;br /&gt;
 |Une partie&lt;br /&gt;
 |Oui&lt;br /&gt;
 |1 LED infrarouge et 1 photodiode ont été empruntés&lt;br /&gt;
 |-&lt;br /&gt;
 |Adaptateur PS512S&lt;br /&gt;
 |1&lt;br /&gt;
 |Non&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Lien Gotronic : [http://www.gotronic.fr/art-adaptateur-ps512s-19913.htm]&lt;br /&gt;
 |-&lt;br /&gt;
 |Shield carte SD&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Nous avons eu une carte shield Ethernet - SD ainsi que la carte SD.&lt;br /&gt;
 |-&lt;br /&gt;
 |Module horloge temps réel (RTC)&lt;br /&gt;
 |1&lt;br /&gt;
 |Non&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Lien Gotronic : [http://www.gotronic.fr/art-module-horloge-temps-reel-ada3296-25536.htm]&lt;br /&gt;
 |-&lt;br /&gt;
 |Capteur Ultrason&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Emprunté&lt;br /&gt;
 |-&lt;br /&gt;
 |LEDs&lt;br /&gt;
 |minimum 3&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Plusieurs empruntées&lt;br /&gt;
 |-&lt;br /&gt;
 |Résistances&lt;br /&gt;
 |Une vingtaine&lt;br /&gt;
 |Oui (C205)&lt;br /&gt;
 |Non&lt;br /&gt;
 |Plusieurs empruntées&lt;br /&gt;
 |-&lt;br /&gt;
 |Arduino méga&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Un arduino méga et un arduino uno (pour les tests) ont été empruntés&lt;br /&gt;
 |-&lt;br /&gt;
 |ESP8266&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |La version 012 a été empruntée&lt;br /&gt;
 |-&lt;br /&gt;
 |Servomoteur 360&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Emprunté&lt;br /&gt;
 |-&lt;br /&gt;
 |Solution de secours : Rapsberry&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Pas encore emprunté, solution de secours&lt;br /&gt;
 |-&lt;br /&gt;
 |Solution de secours : Balance&lt;br /&gt;
 |1&lt;br /&gt;
 |Non&lt;br /&gt;
 |Non&lt;br /&gt;
 |Pas encore emprunté, solution de secours&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
*Étude et réalisation d'un système à base de LEDs infrarouges et de photodiodes afin de pouvoir estimer si la gamelle est vide ou pleine. De même pour le réservoir.&lt;br /&gt;
**Circuit d'émission : LED Infrarouge&lt;br /&gt;
**Circuit de réception : Photodiode&lt;br /&gt;
**Étude des emplacements stratégiques dans la gamelle et le réservoir&lt;br /&gt;
*Réalisation d'un prototype de gamelle&lt;br /&gt;
**Conception 3D de l'hélice sur laquelle le servomoteur va venir se greffer&lt;br /&gt;
**Conception 3D de la gamelle complète&lt;br /&gt;
**Découpage/impression de prototypes&lt;br /&gt;
*Étude de l'ESP8266&lt;br /&gt;
*Tests d'écriture et de lecture sur la carte SD depuis l'arduino&lt;br /&gt;
*Étude du module d'horloge temps réel (RTC)&lt;br /&gt;
*Contrôle des différents capteurs en incluant le servomoteur&lt;br /&gt;
*Création de l'application mobile&lt;br /&gt;
*Mise en relation des différentes parties informatiques du système&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 et + !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 3H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Réalisation de l'état de l'art&lt;br /&gt;
| &lt;br /&gt;
|6H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|-&lt;br /&gt;
|Échange quant aux technologies et au système mécanique à choisir&lt;br /&gt;
| &lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste et de la répartition des tâches&lt;br /&gt;
| &lt;br /&gt;
|2H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2H00&lt;br /&gt;
|-&lt;br /&gt;
| Recherches quant aux échelles de dosage (Quelles quantités de nourriture consomment les chats en fonction de leur poids ?)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste de matériel et établissement des besoins (meilleur rapport besoin/prix étudié)&lt;br /&gt;
| &lt;br /&gt;
|5H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5H00&lt;br /&gt;
|-&lt;br /&gt;
| Modèle 3D de l'hélice&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Modèle 3D du réservoir&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|-&lt;br /&gt;
| Étude des LEDs Infrarouge et des photodiodes&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Tests sur le module wifi ESP8266&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|8H00&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|16H00&lt;br /&gt;
|-&lt;br /&gt;
| Tests de lecture et écriture sur la carte SD&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|6H00&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|16H00&lt;br /&gt;
|-&lt;br /&gt;
| Étude du servomoteur et réalisation d'un programme le contrôlant en C&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Prototype de l'hélice et du réservoir&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|-&lt;br /&gt;
| Achat de planches pour la réalisation des prototypes de la gamelle en bois&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Étude du capteur Infrarouge et réalisation d'un programme le contrôlant en C&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main d'androïd studio et réalisation d'une ébauche d'application mobile pour notre gamelle connectée&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|10H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|13H00&lt;br /&gt;
|-&lt;br /&gt;
| Création du réseau établi entre le système et l'application android (problème avec le point d'accès)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|8H00&lt;br /&gt;
|8H00&lt;br /&gt;
|4H00&lt;br /&gt;
|24H00&lt;br /&gt;
|-&lt;br /&gt;
| Assemblage et finition de la partie mécanique&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|8H00&lt;br /&gt;
|6H00&lt;br /&gt;
|18H00&lt;br /&gt;
|-&lt;br /&gt;
| Tests sur le module temps réel&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Création de la base de donnée de l'application android et du singleton&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|10H00&lt;br /&gt;
|10H00&lt;br /&gt;
|-&lt;br /&gt;
| Liaison ESP8266 et Arduino (Software Serial) + High shifter&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8H00&lt;br /&gt;
|8H00&lt;br /&gt;
|-&lt;br /&gt;
| Application mobile : la page des configurations&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|10H00&lt;br /&gt;
|10H00&lt;br /&gt;
|-&lt;br /&gt;
| Application mobile : la page des études statistiques&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8H00&lt;br /&gt;
|8H00&lt;br /&gt;
|-&lt;br /&gt;
| Étude du capteur ultrason et réalisation d'un programme le contrôlant en C&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| TOTAL&lt;br /&gt;
|3H00&lt;br /&gt;
|17H00&lt;br /&gt;
|10H00&lt;br /&gt;
|8H00&lt;br /&gt;
|14H00&lt;br /&gt;
|14H00&lt;br /&gt;
|13H00&lt;br /&gt;
|21H00&lt;br /&gt;
|12H00&lt;br /&gt;
|16H00&lt;br /&gt;
|49H00&lt;br /&gt;
|177H&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Préambule===&lt;br /&gt;
L’internet des objets (IoT) représente l’extension d’internet à des choses et à des lieux du monde physique (wikipédia). Les objets connectés en l’occurrence sont aujourd’hui un enjeu important. De plus en plus d’objets initialement banals se voient être connectés afin d’en améliorer l’utilisation. Lors de ce projet, nous nous intéressons aux animaux domestiques. Lorsque nous nous absentons, nous n’avons aucun contrôle sur ce qui se passe à la maison. Ainsi, nous ne pouvons pas savoir si notre animal mange ou se porte bien. De plus, nous n’avons aucun retour sur ce que notre chien ou chat notamment a consommé. Est-ce qu’il se nourrit bien ? À quelle fréquence ? Dès lors, il est impensable de s’absenter sur le long terme ou un week-end sans faire intervenir un tiers pour nourrir notre cher animal. Nous pouvons également penser à des animaux qui seraient dangereusement en surpoids. Nous voudrions surveiller leur alimentation mais cela demande une surveillance constante qui n’est pas forcément envisageable. L’objectif de ce projet est de répondre à ces questions et besoins. Et si nous connections une gamelle à une application ?&lt;br /&gt;
&lt;br /&gt;
[[Image:Gamelle-inox-couleur-antiderapante-6-tailles.jpg|center|200px]].&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
L’objectif de la première semaine a été tout d’abord de lister les différentes tâches à réaliser tout au long du projet. Cette liste sera bien sûr modifiable en fonctions des difficultés ou contraintes rencontrées au cours du projet. Cette liste a été rajoutée à la suite du cahier des charges.&lt;br /&gt;
Ensuite, un état de l’art a été réalisé. Nous avons ainsi pu clairement définir le schéma de principe de notre gamelle et le mécanisme de réapprovisionnement choisi. Voici de nouveau le lien vers notre état de l'art : [[Fichier:Etat_de_l_art.pdf]]&lt;br /&gt;
&lt;br /&gt;
Faisons un point rapide sur ces choix. Un système d’ « hélice » est privilégié afin de réapprovisionner la gamelle. Il s’agit en fait d’un cylindre plat qui sera placé en sortie du réservoir. Le réservoir sera moins large en sortie vers la gamelle qu’à son sommet, en entrée des croquettes. Cela permettra aux croquettes de s’introduire facilement dans notre système d’ « hélice ». Ce cylindre serait  troué de part et d’autre afin de pouvoir contenir une certaine dose de croquettes. Ainsi, nous pouvons réapprovisionner la gamelle en fonction de ce dosage.&lt;br /&gt;
Enfin, nous nous sommes attardés sur l’organisation et la répartition de ces tâches afin de pouvoir détailler une liste de matériel. Cette dernière a été ajoutée au wiki à la suite de la liste des tâches.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Lors de cette deuxième semaine, plusieurs tâches ont été réalisées. Tout d’abord, un début de modélisation du système a été effectué sous ''Solidworks''. Pour ce faire, nous avons dû décider de combien de grammes de croquettes à la fois nous pouvons réapprovisionner la gamelle. Ainsi, nous avons effectué des recherches quant à la consommation de nourriture journalière d’un chat. Étant donné qu’un chien consomme davantage de croquettes qu’un chat, nous nous basons sur la consommation de ce dernier, quitte à donner plusieurs doses si l’animal est un chien. Voici un tableau sur lequel nous allons nous baser :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|+ '''Tableau de référence'''&lt;br /&gt;
|-&lt;br /&gt;
! scope=col | Poids du chat adulte&lt;br /&gt;
! scope=col | 1-3 kg&lt;br /&gt;
! scope=col | 4 kg&lt;br /&gt;
! scope=col | 5 kg&lt;br /&gt;
! scope=col | 6 kg&lt;br /&gt;
|-&lt;br /&gt;
|'''Quantités journalières (en grammes)'''&lt;br /&gt;
|15-50g&lt;br /&gt;
|50-65g&lt;br /&gt;
|65-70g&lt;br /&gt;
|70-90g&lt;br /&gt;
|-&lt;br /&gt;
|'''Quantités journalières (avec un bol doseur de 300 mL)'''&lt;br /&gt;
|x 0.1 - 0.3&lt;br /&gt;
|x 0.3 - 0.4&lt;br /&gt;
|x 0.4&lt;br /&gt;
|x 0.4 - 0.6&lt;br /&gt;
|}&lt;br /&gt;
Ce tableau marche pour les croquettes Ultra premium direct en particulier.&lt;br /&gt;
&lt;br /&gt;
Grâce à ce tableau, nous pensons que réapprovisionner la gamelle par dose de 15g est approprié. Or,[[Image:Formule1.png|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Maintenant, il est nécessaire de calculer le rayon de l’hélice permettant au système de doser 15g à la fois.&lt;br /&gt;
&lt;br /&gt;
Nous voulons pouvoir doser 15g : [[Image:Formule2.png|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Posons n = 4 car nous souhaitons avec 2 doseurs, un de chaque côté de l’hélice : [[Image:Formule3.png|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Prenons à présent h = 4 cm ; h étant la largeur de l’ouverture conduisant à la gamelle. Nous avons alors : &lt;br /&gt;
&lt;br /&gt;
[[Image:Formule4.png|center|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Voici une image de l'hélice modélisée en conséquent : &lt;br /&gt;
&lt;br /&gt;
[[Image:Hélice_image.jpg|vignette|center|500px|Modélisation de l'hélice en 3D.]].&lt;br /&gt;
&lt;br /&gt;
*D’un autre côté, des tests ont été réalisés en ce qui concerne le dispositif LED infrarouge-phototransistor.&lt;br /&gt;
&lt;br /&gt;
'''Présentation de l'expérimentation :'''&lt;br /&gt;
&lt;br /&gt;
Nous utilisons une LED IR SFH 4554 pour l’émission et une pour la réception. Pour des raisons de simplicité de fonctionnement, l'allumage des LEDs ne sera pas piloté. Elles seront continuellement allumées (aucune information n'est à transmettre).&lt;br /&gt;
&lt;br /&gt;
À la réception, nous utilisons une photodiode en ''pull-down''  avec une résistance pour contrôler l'intensité dans cette dernière. Nous relions ce montage à un arduino pour vérifier jusqu'à quelle portée nous détectons le signal de la LED émettrice. Grâce à cela, nous serons à même de définir les emplacements des émetteurs/récepteurs dans la gamelle et dans le réservoir ainsi que  la taille de ces derniers. Voici le schéma de principe :&lt;br /&gt;
&lt;br /&gt;
[[Image:Schema_diode_phototransistor.png|vignette|center|500px|Schéma de principe.]].&lt;br /&gt;
&lt;br /&gt;
'''Test rapide de la portée :'''&lt;br /&gt;
&lt;br /&gt;
Calcul des résistances :&lt;br /&gt;
&lt;br /&gt;
Réception : une résistance de 4.7 kΩ est placée.&lt;br /&gt;
&lt;br /&gt;
Émission : nous alimentons la LED en 5 V. Elle possède un courant &amp;lt;math&amp;gt;U_d = 1.2 V&amp;lt;/math&amp;gt; pour 20 mA et supporte 100 mA continue. À 100 mA, &amp;lt;math&amp;gt;U_d = 1.4 V&amp;lt;/math&amp;gt;. Pour être certains d'avoir la meilleure portée possible, nous nous rapprochons des 100 mA. Ainsi, pour le dimensionnement de R nous obtenons :&lt;br /&gt;
&lt;br /&gt;
[[Image:Formule5.png|center|upright=50]]&lt;br /&gt;
1. A.N. : &amp;lt;math&amp;gt;V_{CC} = 5V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;U_d = 1.4V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;I_f = 0.1A&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
R = 36Ω. Soit, en normalisant, '''R = 47Ω'''.&lt;br /&gt;
&lt;br /&gt;
Avec ces données, nous obtenons une portée maximale de 30 cm.&lt;br /&gt;
&lt;br /&gt;
2. Nous faisons un autre test avec une intensité plus basse :&lt;br /&gt;
A.N. : &amp;lt;math&amp;gt;V_{CC} = 5V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;U_d = 1.2V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;I_f = 001A&amp;lt;/math&amp;gt;&lt;br /&gt;
R = 380Ω. Soit, en normalisant, '''R = 330Ω'''.&lt;br /&gt;
Avec ces données, nous obtenons une portée maximale de 22 cm.&lt;br /&gt;
&lt;br /&gt;
L'intérêt de connaître cette portée est que nous allons pouvoir adapter la taille du réservoir et de la gamelle afin de rendre notre dispositif réalisable. À titre de rappel, nous utilisons ce système afin de savoir si la gamelle est vide (Ce système fonctionnant en tout ou rien) et également afin de connaître le niveau approximatif des croquettes dans le réservoir. &lt;br /&gt;
&lt;br /&gt;
*Enfin, pour travailler, nous avons à notre disposition deux arduino : un arduino ''uno'' et un arduino ''méga''. L’utilisation du module wifi ESP8266 nous impose de travailler avec un arduino ''méga''. Cependant, les tests tels que pour le système LED infrarouge-phototransistor peuvent être réalisés indépendamment sur l’arduino ''uno''. Ainsi, nous pouvons travailler à deux en parallèle sur des arduino différents. Cependant, il a fallu réadapter le makefile permettant de flasher l’arduino à un arduino ''méga'' car celui que nous possédions ne fonctionnait que pour un arduino ''uno''. (Un « -D » étant nécessaire dans la ligne de commande pour flasher l’arduino dans le cas d’un ''méga'', qui ne l’était pas pour l’arduino ''uno''.)&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Lors de cette troisième semaine, nous réalisé des tests sur les deux arduinos. &lt;br /&gt;
&lt;br /&gt;
==== Le servomoteur et sa PWM ====&lt;br /&gt;
Tout d’abord, le premier test porte sur le servomoteur prévu pour faire tourner le système d’hélice et réapprovisionner la gamelle.&lt;br /&gt;
&lt;br /&gt;
Le servomoteur que nous utilisons est un servomoteur à courant continue. Il a l’avantage de pouvoir être contrôlé en vitesse et de pouvoir tourner à plus de 180°. &lt;br /&gt;
&lt;br /&gt;
Pour alimenter un servomoteur, il faut brancher ses trois connectiques sur l’alimentation 5V de l’arduino, sur la masse et sur une broche PWM. &lt;br /&gt;
&lt;br /&gt;
En effet, la consigne envoyée à un servomoteur est de type PWM (Pulse Width Modulation). Ce signal permet de faire varier la durée en état « haut » du signal grâce à la consigne que nous lui donnons. Voici un schéma montrant quelques exemples de modifications de la durée d’un état « haut » :&lt;br /&gt;
[[Image:PWM explications.png|center|300px]].&lt;br /&gt;
&lt;br /&gt;
La difficulté a été de programmer ce servomoteur en passant par le langage C. En effet, avec arduino IDE, il est plus aisé de le faire puisqu’il existe une bibliothèque servo.h permettant de programmer des servomoteurs facilement. En C, il a fallu se pencher sur le fonctionnement et le contrôle d’une PWM grâce aux différents registres de l’arduino. &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, il faut configurer les registres TCCR1A et TCCR1B afin d’activer la PWM en mode non-inversé et à fréquence élevée.  &lt;br /&gt;
&lt;br /&gt;
Enfin, il faut activer la PIN5 du port B en sortie (Pin PWM).&lt;br /&gt;
&lt;br /&gt;
Rentrons un peu plus dans le détail quant à la configuration des deux registres TCCR1A et TCCR1B.&lt;br /&gt;
TCCR0A = 1000 0001 = 0x81 et TCCR0B = 0000 0101  = 0x05&lt;br /&gt;
[[Image:TCCR0A.png|center|650px]].&lt;br /&gt;
[[Image:TCCR0B.png|center|650px]].&lt;br /&gt;
&lt;br /&gt;
TCCR0A : &lt;br /&gt;
   COM0A1 = 1 COM0A0 = 0 =&amp;gt; non-inverting mode&lt;br /&gt;
&lt;br /&gt;
   COM0B1 = 0 COM0B0 = 0 =&amp;gt; mode standard&lt;br /&gt;
&lt;br /&gt;
   WGM01 = 0 WGM00 = 1 =&amp;gt; PWM mode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TCCR0B : &lt;br /&gt;
   FOC0A = 0 FOC0B = 0 =&amp;gt; car PWM mode&lt;br /&gt;
&lt;br /&gt;
   WGM02 = 0 =&amp;gt; PWM mode&lt;br /&gt;
&lt;br /&gt;
   SC02 = 1 CS01 = 0 CS00 = 1 =&amp;gt; clk (entrée/sortie) /1024&lt;br /&gt;
&lt;br /&gt;
Pour connaître ces résultats, les tableaux descriptifs sont disponibles dans la datasheet de l'arduino méga, accessible dans les références à la fin du wiki.&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps, en modifiant directement le registre OCR0A, nous envoyons une commande au servomoteur. La durée en état « haut » est ainsi proportionnelle à la consigne saisie dans OCR0A.&lt;br /&gt;
&lt;br /&gt;
Le servomoteur tourne bien différemment en fonction de la valeur saisie dans OCR0A. Maintenant, il reste à comprendre comment contrôler de manière précise le servomoteur et sa position en fonction de la consigne.&lt;br /&gt;
&lt;br /&gt;
==== Le capteur ultrason ====&lt;br /&gt;
&lt;br /&gt;
=====  Présentation =====&lt;br /&gt;
Nous pensons utiliser le module HC-SR04 couplé à un arduino pour détecter la présence de l’animal devant la gamelle. Cela servira à ne pas prendre en considération le contenu de la gamelle pour savoir si elle est vide ou non lorsque l’animal se nourrit. Ou encore, cela aidera afin de pouvoir réaliser un suivi à savoir : à quel moment le chat a-t-il été manger ?&lt;br /&gt;
&lt;br /&gt;
En lisant la documentation technique du HC -SR04, nous en tirons ceci :&lt;br /&gt;
&lt;br /&gt;
[[Image:US data.png|center|550px]].&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement du système est simple et qu’il suffit d'envoyer un message de 10µs minimum avec une écart de 60 ms minimum pour recevoir une réponse du capteur.&lt;br /&gt;
&lt;br /&gt;
Le capteur renvoi un signal qui a un temps proportionnel à sa distance par rapport à l’obstacle.&lt;br /&gt;
&lt;br /&gt;
=====  Expérimentation =====&lt;br /&gt;
Nous rajoutons des LESs afin d’avoir une indication lorsqu’un signal est envoyé. La valeur reçue est visualisée à l’aide de l’outil minicom, la valeur était envoyé sur le port série. Nous remarquons que le système fonctionne même si des imperfections de de mesure subsistent (dues notamment au programme). La précision du système suffit néanmoins à la détection du chat devant la gamelle.&lt;br /&gt;
&lt;br /&gt;
=====  Problème lié à l'étude =====&lt;br /&gt;
Le module utilise une fréquence de 40khz.&lt;br /&gt;
Suite à des vérifications, les chats et les chiens entendent des sons pouvant aller jusqu'à 60khz. &lt;br /&gt;
Une recherche a été effectuée sur les barrières repoussant les chiens et les chats. Malgré le peu de documentation technique que nous avons trouvé, nous remarquons  que les fréquences utilisées sont de l'ordre de 25 khz. Ces fréquences sont bien loin des 40khz de notre système. Cependant, une petite expérimentation a été réalisée sur un chat de 6 ans à l’aide d’une application smartphone générant des ultrasons. Il s’avère que le chat est dérangé par ces fréquences, le chat s'en va au bout de 10 minutes d’expérience.&lt;br /&gt;
&lt;br /&gt;
=====  Conclusion =====&lt;br /&gt;
Même si le module HC-SR04 est très simple d’utilisation, nous ne pouvons continuer à nous en servir pour notre projet de gamelle connectée.&lt;br /&gt;
&lt;br /&gt;
=====  Autre alternative =====&lt;br /&gt;
* Tapis de jauge de contrainte → couvre une surface trop petite&lt;br /&gt;
* Détecteur de présence infrarouge → convient pour des objets de taille supérieure à 15 cm  &lt;br /&gt;
&lt;br /&gt;
Notre choix se porte donc sur le capteur infrarouge, que nous programmerons dans une séance ultérieure.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
La semaine a été en grande partie consacrée à la réalisation d’un prototype pour le système d’hélice et le réservoir. Tout d’abord, nous avons dû faire plusieurs aller-retour au magasin afin d’acheter des planches pour la réalisation des différents prototypes. La première planche qui a été acheté était une medium, matériel qui n’est plus accepté dans la découpeuse laser puisqu’elle encrasse le filtre et la lentille de l’appareil. Nous avons donc du aller acheter les bonnes planches. De plus, il a fallu réserver des créneaux au fabricarium et apprendre à se servir de la découpeuse laser. Le prototype final n’est pas encore assemblé puisque nous réfléchissons à un système de « pied à coulisse » afin de pouvoir choisir le dosage unitaire que peut servir l’hélice.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5 et semaine 6===&lt;br /&gt;
'''Création d’un programme contrôlant la lecture et l’écriture sur la carte SD'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Pour rendre notre projet innovant par rapport aux autres gamelles connectées proposées sur le marché, nous avons décidé de faire un suivi lié à l'alimentation du chat. Par exemple, nous souhaitons savoir à quels moments de la journée l’animal va manger, pendant combien de temps, en quelles quantités etc…&lt;br /&gt;
Pour cela, nous devons stocker ces différentes données. Pour ce faire, nous utiliserons le shield SD/ethernet  suivant :&lt;br /&gt;
&lt;br /&gt;
[[Image:Shield sd ethernet.jpg|vignette|center|300px|Shield SD/ethernet.]]&lt;br /&gt;
&lt;br /&gt;
*Code arduino shield Sd/ethernet&lt;br /&gt;
&lt;br /&gt;
Pour commencer, l’expérimentation du shield  a été effectuée à l’aide d’arduino IDE afin de réaliser un prototype rapide et tester si le shield est efficace et permet de répondre à nos besoins.&lt;br /&gt;
&lt;br /&gt;
Nous nous basons sur l'exemple proposé par arduino IDE suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SD.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File myFile;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  // Open serial communications and wait for port to open:&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  while (!Serial) {&lt;br /&gt;
    ; // wait for serial port to connect. Needed for native USB port only&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Initializing SD card...&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if (!SD.begin(4)) {&lt;br /&gt;
    Serial.println(&amp;quot;initialization failed!&amp;quot;);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;initialization done.&amp;quot;);&lt;br /&gt;
  myFile = SD.open(&amp;quot;test.txt&amp;quot;, FILE_WRITE);&lt;br /&gt;
&lt;br /&gt;
  if (myFile) {&lt;br /&gt;
    Serial.print(&amp;quot;Writing to test.txt...&amp;quot;);&lt;br /&gt;
    myFile.println(&amp;quot;testing 1, 2, 3.&amp;quot;);&lt;br /&gt;
    myFile.close();&lt;br /&gt;
    Serial.println(&amp;quot;done.&amp;quot;);&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.println(&amp;quot;error opening test.txt&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  myFile = SD.open(&amp;quot;test.txt&amp;quot;);&lt;br /&gt;
  if (myFile) {&lt;br /&gt;
    Serial.println(&amp;quot;test.txt:&amp;quot;);&lt;br /&gt;
    while (myFile.available()) {&lt;br /&gt;
      Serial.write(myFile.read());&lt;br /&gt;
    }&lt;br /&gt;
    myFile.close();&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.println(&amp;quot;error opening test.txt&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous remarquons que nous écrivons facilement sur la carte SD grâce à la bibliothèque disponible. En ajoutant quelques boutons et en modifiant légèrement le code, nous arrivons à sauvegarder la durée de maintien du bouton ainsi que la fréquence d’actionnement.&lt;br /&gt;
&lt;br /&gt;
*Code C Shield  SD/ethernet&lt;br /&gt;
&lt;br /&gt;
Une fois le prototype fait et fonctionnel, nous décidons d’écrire le code en C. Pour cela, nous utilisons en particulier deux bibliothèques fournies par Monsieur REDON : Sd2Card et spi.&lt;br /&gt;
Après de multiples tentatives, nous arrivons toujours à l'erreur suivante : “SD_CARD_ERROR_CMD0”. Cette dernière est liée à un timeout qui persiste malgré la modification de paramètres dépendants.&lt;br /&gt;
&lt;br /&gt;
*Changement de matériel&lt;br /&gt;
&lt;br /&gt;
Monsieur REDON nous a fourni un nouveau shield uniquement SD cette fois-ci pour tester si le problème est matériel. En voici la photographie :&lt;br /&gt;
&lt;br /&gt;
[[Image:Shield sd simple.jpg|vignette|center|300px|Shield SD.]]&lt;br /&gt;
&lt;br /&gt;
*Code C Shield SD&lt;br /&gt;
&lt;br /&gt;
En recompilant le code sur le nouveau shield, nous remarquons qu'il n'y a pu d'erreur liée à l'initialisation de la carte SD.&lt;br /&gt;
Suite à des expérimentations liées à la prise en main du code exemple donné, nous arrivons maintenant à écrire une information dans un bloc est à relire cette information plus tard.&lt;br /&gt;
&lt;br /&gt;
Voici un extrait lu depuis l’utilitaire minicom lors de la lecture de la carte SD :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;status de la carte sd = 1                                                 &lt;br /&gt;
status=0                                                                  &lt;br /&gt;
erreur=0                                                                  &lt;br /&gt;
type=3                                                                    &lt;br /&gt;
taille=7744512                                                            &lt;br /&gt;
Lecture                                                                   &lt;br /&gt;
statut=0                                                                  &lt;br /&gt;
bloc[0]=1 bloc[1]=0 bloc[2]=aa bloc[3]=bb bloc[4]=cc bloc[5]=0&lt;br /&gt;
statut=0   &lt;br /&gt;
bloc[0]=dd bloc[1]=ee bloc[2]=ff bloc[3]=0 bloc[4]=0 bloc[5]=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le shield fonctionne comme désiré et nous pourrons ainsi enregistrer des informations afin de les traiter plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Configuration du module WiFi ESP8266'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
L’ESP8266 est un circuit intégré à un microcontrôleur qui fait office de module WiFi. Il possède un total de 9 GPIO (3.3V) ce qui lui permet d’être utilisé indépendamment, sans même se connecter à un autre microcontrôleur. La datasheet de ce composant est disponible dans la rubrique « Datasheet » en bas de page. Pour notre projet, l’utilisation seule de ce module ne suffisait pas. C’est pourquoi, nous le connectons à un arduino afin de pouvoir profiter des différentes entrées/sorties de ce microcontrôleur. Voici une photographie du composant en question :&lt;br /&gt;
&lt;br /&gt;
[[Image:Esp8266.jpg|vignette|center|300px|Shield SD.]]&lt;br /&gt;
&lt;br /&gt;
L'adresse IP de notre ESP8266 s'obtient en connectant notre composant à un réseau local. Ainsi, nous savons que cette adresse est la suivante : 192.168.43.53 .&lt;br /&gt;
&lt;br /&gt;
*Programmation du module WiFi en C&lt;br /&gt;
&lt;br /&gt;
De nombreux problèmes ont été rencontrés pour configurer l’ESP8266 en C. Le programme devant être directement chargé sur ce dernier, de nombreuses erreurs en ont résulté. Après de nombreuses heures passées à essayer de régler ces problèmes, nous avons discuté de cela avec l’un de nos encadrant, M. REDON, qui nous a autorisé à programmer le module WiFi directement sur arduino IDE, puisqu’une bibliothèque existante rend la tâche moins ardue. De ce fait, l’avantage de l’ESP8266 est que nous chargeons un programme directement sur ce dernier. Ainsi, nous pouvons programmer le reste de notre projet en C, en compilant et téléversant le fichier sur l’arduino sans perturber le fonctionnement du module WiFi.&lt;br /&gt;
&lt;br /&gt;
*Programmation du module WiFi sur arduino IDE&lt;br /&gt;
&lt;br /&gt;
Tout d’abord, lors de l’installation d’arduino IDE, il faut veiller à ce que la version soit suffisamment récente pour pouvoir y télécharger des « boards ». En effet, il faut, grâce à un lien disponible sur le site d’arduino, ajouter l’ESP8266 en tant que board dans le logiciel afin que le composant puisse être reconnu afin de téléverser un programme. &lt;br /&gt;
Ensuite, l’ESP doit être connectée en USB sur à l’ordinateur afin qu’elle soit visible sur son port propre (USB0 en l’occurrence). Ainsi, lors du téléversement du fichier, il faut sélectionner ce port dans la liste de ceux disponible. (Beaucoup de soucis ont été rencontrés à ce propos, l’ESP n’étant pas toujours visible comme étant disponible sur arduino IDE). &lt;br /&gt;
Enfin, un test basique a été réalisé qui consiste à faire clignoter une LED connectée à un GPIO de l’ESP et à se connecter à un réseau WiFi. L’avantage de programmer en arduino IDE est que, par un simple « #include &amp;lt;ESP8266WiFi.h&amp;gt; », nous ajoutons la bibliothèque propre à notre module WiFi. La fonction WiFi.begin permet alors de se connecter facilement à un réseau local en passant en paramètres le nom du réseau sans fil (SSID) ainsi que son mot de passe. &lt;br /&gt;
&lt;br /&gt;
Voici une visualisation des informations envoyées sur l'interface série :&lt;br /&gt;
&lt;br /&gt;
[[Image:Capture esp.png|vignette|center|500px|Visualisation sur l'interface série.]]&lt;br /&gt;
&lt;br /&gt;
*Réseau&lt;br /&gt;
&lt;br /&gt;
La question de la connexion réseau entre le module WiFi et l’application mobile, que nous allons bientôt réaliser, se pose. Nous avons travaillé également sur cette partie lors de la semaine 6. Cependant, nous expliciterons cette partie un peu plus tard afin d’aborder en même temps la partie réseau du côté de l’application mobile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
'''Capteur Infrarouge IRS05A'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Dans la partie liée au suivi de l'alimentation, nous avons besoin d'un détecteur de présence afin de savoir si le chat est en train de se nourrir ou pas. Pour cela, nous avions testé le module HC-SR04, expérimentation qui n'avait pas aboutie due au fait que le chat entende les ultrasons. Nous avons choisi en remplacement le module irs05a. En voici une photographie :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:IRS05A.jpg|center|200px]]&lt;br /&gt;
&lt;br /&gt;
*Programme C&lt;br /&gt;
&lt;br /&gt;
En étudiant la datasheet du composant, nous trouvons ceci : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour l'expérimentation, nous avons juste besoin de commander l'entrée enable et de placer une LED à la sortie output afin de visualiser si le module détecte ou non un objet. Suite à cette expérimentation, nous avons pu définir la zone de détection du module. Voici un schéma explicatif :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:IRS05A extrait datasheet.png|center|400px]]&lt;br /&gt;
&lt;br /&gt;
Grâce à ce schéma, nous avons pu faire un choix matériel quant à celui de l’emplacement de nos deux capteurs de présence. Ils seront disposés comme suit :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema ir disposition.jpg|center|200px]]&lt;br /&gt;
&lt;br /&gt;
'''Application mobile'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
L’objectif de cette semaine a été en partie de se familiariser avec l’environnement de développement intégré (IDE) d’Android Studio. Sous Android, il est commun de passer par cette plateforme afin de programmer différentes applications mobiles. Cela se code en java. &lt;br /&gt;
&lt;br /&gt;
*Application pour la gamelle connectée&lt;br /&gt;
&lt;br /&gt;
Tout d’abord, le domaine des applications mobiles est très complexe. De plus, la documentation technique de java est également très fournie. Cela a rendu la tâche de réaliser une application android basique très longue. Finalement, nous voulons créer une application mobile permettant de visualiser les statistiques de son animal,  de contrôler la gamelle manuellement ou de programmer des modes pour l’alimenter. Pour le moment, le squelette général a été créé, permettant d’afficher de nouvelles fenêtres à chaque choix de « mode ».  Voici des screenshots de l’application actuelle :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:App premiere page.png|200px]] [[Fichier:Onglet1.png|200px]] [[Fichier:Onglet2.png|200px]] [[Fichier:Onglet3 en cours.png|200px]] &lt;br /&gt;
&lt;br /&gt;
*Réseau &lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons voulu aller plus loin dans la fenêtre consacrée au réapprovisionnement manuel. En effet, nous souhaitons réaliser un test simple qui consiste à allumer une LED connectée à un GPIO de l’ESP8266 par simple appui d’un bouton depuis l’application mobile. Le problème qui s’est alors posé a été celui de créer un lien serveur/client entre le module WiFi et l’application mobile. L’idée serait alors de créer un serveur TCP sur arduino IDE qui se chargerait sur l’ESP8266 et de créer, à l’aide de sockets en java, un client sur l’application mobile. Le serveur TCP a été réalisé sur l’arduino mais n’a pas encore pu être testé. La réalisation du client sur l’application mobile est l’objet de la semaine 8, les tests seront alors réalisés et explicités à ce moment là.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8 et 9===&lt;br /&gt;
'''Application mobile, partie réseau'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Le serveur TCP réalisé sous arduino IDE directement sur le module WiFi a été testé à l’aide de la commande nc. En effet, nous avons utilisé un terminal téléchargé sur le téléphone afin de connecter le module WiFi et le téléphone sur le même réseau. En envoyant les requêtes directement via la commande nc, nous sommes capables d’allumer et d’éteindre la LED connectée au GPIO de l’ESP8266. Maintenant, il faut réaliser la même chose mais côté application mobile.&lt;br /&gt;
&lt;br /&gt;
La partie concernant la création du socket et l’envoi de données à l’esp8266 nous a pris beaucoup de temps. En effet, le problème ne venait pas de notre code mais simplement du fait que la version android du téléphone utilisé comme point d’accès internet empêchait l’application de connecter la socket à l’adresse IP du module WiFi. Après avoir configuré un routeur et connecté le module WiFi et le téléphone dessus, nous étions capable d’envoyer des requêtes au module WiFi afin qu’il allume une LED notamment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Principe&lt;br /&gt;
&lt;br /&gt;
Il est préférable de réaliser la partie réseau d’une application mobile via un thread afin de rendre l’application la plus fluide possible. Par exemple, l’appui du bouton ON permet de modifier une chaine de caractère et lance le thread d’envoi. Dans ce thread, l’application connecte la socket au module WiFI à l’aide de son adresse IP et du port de communication spécifié dans le programme du serveur TCP sur arduino IDE. Ensuite, la socket se charge d’envoyer la chaine de caractère à l’esp8266. Cela se fait par l’utilisation de l’objet ''DataOutputStream'' et de sa méthode ''writeBytes'' qui permet l’envoi simple d’une chaine de caractère. &lt;br /&gt;
&lt;br /&gt;
Pour la réception des données, il s’agit du même principe mais nous utilisons l’objet DataInputStream.&lt;br /&gt;
&lt;br /&gt;
Voici un aperçu de ce qui est visualisable sur l'interface série de l'arduino IDE, les requêtes sont bien envoyées :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Serveur ok.png|center|100px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 10 et +===&lt;br /&gt;
'''La base de données sur l'application android'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons déjà les données directement sur la gamelle grâce à la carte SD. Cependant, il nous a semblé nécessaire de garder en mémoire les statistiques de notre animal de compagnie directement sur l’application. Après avoir lu le livre « L’art du développement Android » de Grant Allen, prêté notre enseignant, deux possibilités nous sont apparues. La première était de manipuler des fichiers qui seraient générés par l’application afin de garder en mémoire ce que nous souhaitons. La seconde était de créer une base de données locale grâce à la base de données installée sur Android, ''SQLite''. &lt;br /&gt;
&lt;br /&gt;
*Présentation rapide de SQLite&lt;br /&gt;
&lt;br /&gt;
''SQLite'' utilise un dialecte de SQL afin de réaliser des requêtes de manipulations de données. Les « SELECT », « INSERT », « REMOVE », peuvent ainsi être utilisées.  ''SQLite'' est particulièrement approprié pour l’utilisation android car son utilisation ne repose pas sur un modèle client-serveur (comme ''mysql'' ou ''PostgreSQL'' que nous connaissons). Ainsi, l’intégralité de la base de données est stockée dans un fichier unique.&lt;br /&gt;
&lt;br /&gt;
*Base de données&lt;br /&gt;
&lt;br /&gt;
La base de données que nous avons implémentée permet de répertorier tous les jours enregistrés par la gamelle afin de pouvoir réaliser des traitements statistiques derrière. La date a été stockée en chaine de caractère car le constructeur de la forme ''Date(int year, int month, int day)'' est obsolète pour la version de l’API que nous utilisions. Le deuxième constructeur est de la forme ''Date(long Date)'' et il faut fournir à cette méthode un nombre de millisecondes qu’elle va convertir au format Date de Java. Cela nous semblait peu pratique. &lt;br /&gt;
&lt;br /&gt;
Voici un petit tableau illustrant ce que nous souhaitons stocker dans la base de données :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tableau recap bdd.png|center|450px]]&lt;br /&gt;
&lt;br /&gt;
Trois classes ont été crées : Jour.java, JoursBDD.java et MaBaseSQLite.java.&lt;br /&gt;
&lt;br /&gt;
Voici un schéma UML résumant ces trois classes :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:BDD_lulu.png|center|700px]]&lt;br /&gt;
&lt;br /&gt;
'''La base de données et Singleton'''&lt;br /&gt;
&lt;br /&gt;
Notre base de donnée étant créée et fonctionnelle, nous avions besoin de l’avoir à disposition n’importe où dans l’application. Or, passer un objet d’une page à une autre est simple pour des objets peu complexes. Cependant, il était plus difficile de passer notre base de données avec les méthodes traditionnelles utilisées auparavant. Nous avons donc utilisé un singleton. Le singleton est une instance unique d’une classe. Cela permet à la fois de récupérer facilement cette instance partout dans l’application mais cela permet également de converser une unicité de cette dernière, ce qui est important pour  une base de données. Ainsi, nous avons modifié les classes décrites précédemment afin d’implémenter le singleton. &lt;br /&gt;
&lt;br /&gt;
Deux variables ont été ajoutées à la classe joursBDD : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;private static Context context;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;private static JoursBDDSingleton mJoursBDDSingleton;  //instance unique&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deux méthodes sont également concernées dans ce changement :&lt;br /&gt;
&amp;lt;pre&amp;gt;//Méthode de restauration de contexte&lt;br /&gt;
public JoursBDD(Context context)&lt;br /&gt;
{&lt;br /&gt;
    this.context = context;&lt;br /&gt;
    //creation de la base de donnees&lt;br /&gt;
    maBaseSQLite = new MaBaseSQLite(context, NOM_BDD, null, VERSION_BDD);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Methode de recuperation de l'instance de la BDD&lt;br /&gt;
public static synchronized JoursBD getInstance(Context context){&lt;br /&gt;
    //Création de la base de données et de sa table&lt;br /&gt;
    if(mJoursBDD==null) {&lt;br /&gt;
        //CreateJoursBDD(context);&lt;br /&gt;
        mJoursBDD = new JoursBDD(context);&lt;br /&gt;
    }&lt;br /&gt;
    return mJoursBDD;&lt;br /&gt;
} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, juste un réalisant une récupération de l’instance grâce à  l’appel de la méthode getInstance : JoursBDD.getInstance(this); , il est aisé de le faire dans une nouvelle activité.&lt;br /&gt;
&lt;br /&gt;
'''Le traitement des données'''&lt;br /&gt;
&lt;br /&gt;
Une partie « statistiques » a été ajoutée à l’application mobile. Elle a pour but l’étude de l’alimentation de l’animal grâce à l’utilisation de graphiques et de tableaux. Afin de rendre la chose plus visuelle, l’utilisateur peut sélectionner soit un histogramme, soit un graphique linéaire, soit un tableau de données grâce à des radio boutons. Ensuite, l’utilisateur sélectionne soit les 7 derniers jours soit le dernier mois via un simple bouton. &lt;br /&gt;
Voici un aperçu de la première page :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:statistiques_tableau_petfun.png|center|200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Présentation rapide de achartengine :&lt;br /&gt;
Afin de réaliser l’affichage de graphiques, nous avons utilisé une bibliothèque appelée ''achartengine''. Cette bibliothèque permet la personnalisation de graphiques et l’affichage sous forme d’histogramme ou encore de graphiques linéaires des données. Cette bibliothèque facilite la dynamisation de l’activité. Nous restant peu de temps dans le projet, nous avons décidé d’exploiter cette ressource afin de réaliser une page propre et personnalisée. Nous pouvons utiliser cette bibliothèque en l’ajoutant dans les fichiers ''gradle'' du projet.&lt;br /&gt;
&lt;br /&gt;
Voici les graphiques que nous affichons :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Graphiques stats petfun1.png|200px]] [[Fichier:Graphiques stats petfun2.png|200px]]&lt;br /&gt;
&lt;br /&gt;
*Limites et améliorations :&lt;br /&gt;
L’idée d’avoir créée un bouton permettant d’afficher un graphique de la dernière semaine avait pour but une amélioration par la suite. En effet, l’objectif est de pouvoir, une fois le graphique affiché, passer d’une semaine à une autre. De même pour les mois, nous souhaiterions pouvoir, à partir du dernier mois, afficher les précédents en ''slidant'' le graphique ou en appuyant sur une touche. &lt;br /&gt;
&lt;br /&gt;
'''Configuration des paramètres'''&lt;br /&gt;
&lt;br /&gt;
*Introduction &lt;br /&gt;
&lt;br /&gt;
Une page de permettant de configurer les paramètres de l'application a été ajoutée à l’application mobile. Elle a pour but d’enregistrer les heures de repas de l'animal, le poids contenu dans la gamelle, le nom de l’animal ou encore sa photographie. Le poids contenu dans la gamelle doit être notifié car cette dernière est ajustable grâce à des rails présents sur la gamelle et ajustables. Ainsi, l’utilisateur peut doser la quantité qu’il souhaite. Il devra alors le notifier dans l’application afin que le traitement des données en tienne compte.&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Dans l’activité de contrôle ''automatique'', il s’agit en fait de configurer des paramètres. Sur cette page, les paramètres actuels de la gamelle sont affichés à l’écran. L’utilisateur peut dès lors, via des boutons, sélectionner deux activités : une pour changer les paramètres propres à la gamelle et l’autre pour changer ceux propres à l’animal. &lt;br /&gt;
&lt;br /&gt;
*Paramètres de la gamelle&lt;br /&gt;
&lt;br /&gt;
Dans les paramètres de la gamelle, deux choses sont configurables : les heures de repas de l’animal et la quantité de croquettes ajustée sur la gamelle. Afin de rentrer les heures de repas, le widget ''TimePicker'' a été utilisé et configuré en format 24 heures. L’appui de la touche « AJOUT HEURE » permet l’ajout de l’heure saisi sur le ''TimePicker'' dans les paramètres de l’application. De plus, afin de saisir le poids de la gamelle, un simple ''EditText'' permet de le faire. Si l’utilisateur ne saisi pas un nombre, un message s’affiche à l’écran le prévenant du problème de format.&lt;br /&gt;
&lt;br /&gt;
L’appui de la touche « VALIDER CONFIGURATION » permet la sauvegarde de la saisie et le retour à la première activité. &lt;br /&gt;
&lt;br /&gt;
L’appui de la touche « SUPPRIMER CONFIGURATION » permet la suppression des heures de repas enregistrées dans l’application.&lt;br /&gt;
&lt;br /&gt;
*Paramètres de l’animal&lt;br /&gt;
&lt;br /&gt;
Dans les paramètres de l’animal, le nom ainsi que la photographie de ce dernier peuvent être ajoutés. Le nom est simplement enregistré grâce à un ''EditText''. L’avatar peut être cherché par l’utilisateur dans ses fichiers de téléphone. (Des permissions spécifiques sont nécessaires). L'avatar s'affiche alors en première page de l'application.&lt;br /&gt;
&lt;br /&gt;
Maintenant, la question d’enregistrer tous ses paramètres s’est posée. En effet, une fois l’application fermée, tous les objets et toutes les variables créées dans l’application sont désallouées. Les paramètres rentrés par l’utilisateur sont alors perdus. &lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons fait le choix de modifier les préférences de l’application. Ces préférences renseignent des paires clé-valeur de données.&lt;br /&gt;
&lt;br /&gt;
*SharePreferences&lt;br /&gt;
&lt;br /&gt;
Nous devons créer un objet ''SharePreferences'' via la méthode ''getSharedPreferences'' en lui attribuant un nom unique et en privatisant son accès. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; final SharedPreferences prefs = getSharedPreferences(&amp;quot;Configuration&amp;quot;, Context.MODE_PRIVATE); &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dès lors, nous pouvons restaurer cet objet dans n’importe quelle activité, exactement comme un ''Singleton''. &lt;br /&gt;
Pour créer ou modifier des préférences, nous devons appeler la méthode ''edit()'' de l’objet ''SharedPreferences''. Une fois la valeur modifiée, il est impératif de faire appel à la méthode ''apply()'' ou ''commit()'' de l’objet afin de sauvegarder les changements apportés.	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;final SharedPreferences.Editor editor = prefs.edit();&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, les horaires sont stockées avec une clé de la forme « horairek », k représentant la numérotation des différentes heures saisies par l’utilisateur. Une variable « Taille » fait également partie des préférences afin de pouvoir savoir à tout moment le nombre de repas programmés par l’utilisateur. Le nom de l’animal est stocké avec la clé « Name » et le poids avec la clé « Poids ». Il est alors aisé de retrouvé les valeurs correspondantes dans les préférences et de pouvoir les supprimer de manière spécifique si nécessaire. &lt;br /&gt;
&lt;br /&gt;
Voici donc ce que cela peut nous donner :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Petfun config1.png|200px]] [[Fichier:Petfun config2.png|200px]] [[Fichier:Petfun config4.png|200px]] [[Fichier:Petfun config3.png|200px]]&lt;br /&gt;
&lt;br /&gt;
'''Contrôle du servomoteur via l'application'''&lt;br /&gt;
&lt;br /&gt;
La solution que nous avons choisi est de relier un GPIO de l’ESP8266 à un PIN digital de l’arduino. Ainsi, étant capables d’allumer une LED par appui d’une touche sur l’application mobile, nous serions capables de faire changer l’état d’un PIN de l’arduino et ainsi en fonction de cela, faire tourner le moteur. &lt;br /&gt;
En mettant en place cette méthode, nous nous sommes rendu compte que le PIN de l’arduino ne réagissait pas à du 3.3V, envoyé par le module wifi. Nous avons donc mis en place un ''high shifter'' à l’aide d’un transistor afin de faire passer la tension d’entrée de 3.3V à 5V. Sur le schéma, R1 = R2 = 10 kΩ. R3 = 100 kΩ. La tension Output mesurée est de [[Fichier:FormulePetfun.png|100px]].&lt;br /&gt;
&lt;br /&gt;
Voici le schéma : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:HighShifterPetfunPetfun.jpg|center|250px]]&lt;br /&gt;
&lt;br /&gt;
Voici la photographie du câblage :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cablage petfun.jpg|center|450px]]&lt;br /&gt;
&lt;br /&gt;
'''Aperçu final de la partie mécanique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Croquette.png|center|200px]]&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;br /&gt;
[[Fichier:Rapport_P37_damiens_dorian.pdf‎ ]]&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&lt;br /&gt;
==='''Datasheet'''===&lt;br /&gt;
ESP8266 Adafruit breakout : https://cdn-learn.adafruit.com/downloads/pdf/adafruit-huzzah-esp8266-breakout.pdf&lt;br /&gt;
&lt;br /&gt;
Arduino méga 2560 : http://www.atmel.com/Images/Atmel-2549-8-bit-AVR-Microcontroller-ATmega640-1280-1281-2560-2561_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
L'ultrason HC-SR04 : http://www.gotronic.fr/pj2-hc-sr04-utilisation-avec-picaxe-1343.pdf&lt;br /&gt;
&lt;br /&gt;
Le capteur de présence Infrarouge IRS05A : https://www.pololu.com/file/0J615/tssp77038.pdf&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P37&amp;diff=42249</id>
		<title>IMA4 2016/2017 P37</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P37&amp;diff=42249"/>
				<updated>2017-05-15T16:55:20Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Semaine 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Cahier des charges''' ==&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
L’objectif de ce projet est de fabriquer une gamelle pour animaux connectée. Pour ce faire, trois grands axes sont à dégager : une partie informatique, électronique et mécanique. &lt;br /&gt;
&lt;br /&gt;
==== Partie mécanique ====&lt;br /&gt;
'''Structure du système'''&lt;br /&gt;
*Le réservoir. Deux systèmes peuvent être réalisés : &lt;br /&gt;
**Un système de trappes pour le distributeur : deux trappes l’une en dessous de l’autre. &lt;br /&gt;
**Un système de vis sans fin qui permettrait d’alimenter la gamelle.&lt;br /&gt;
&lt;br /&gt;
*La gamelle. Deux méthodes sont possibles :&lt;br /&gt;
**Mesure du poids en prenant une balance déjà existante et en récupérant et en traitant les sorties.&lt;br /&gt;
**Passer par un système d’estimation de volumes. Dans la gamelle, il y aurait des capteurs permettant de connaître la quantité en volume présente dans la gamelle.&lt;br /&gt;
&lt;br /&gt;
Globalement, ces systèmes sont susceptibles de changer suivant l'état de l'art qui sera réalisé par la suite.&lt;br /&gt;
&lt;br /&gt;
==== Partie électronique ====&lt;br /&gt;
*Alimentation. Deux systèmes sont envisagés pour l’alimentation : Un système nomade avec une batterie  pour permettre d’avoir une gamelle déplaçable ou un système fixe alimenté par le secteur ou en usb.&lt;br /&gt;
**Batterie : Nous avons besoin d’une batterie qui peut garder l’énergie suffisamment longtemps pour éviter de devoir recharger la gamelle trop souvent. Une durée de vie d’une semaine est envisagée au minimum.&lt;br /&gt;
**Secteur&lt;br /&gt;
&lt;br /&gt;
*Interface Homme/machine&lt;br /&gt;
**Capteurs&lt;br /&gt;
***Des LEDs couplées à un phototransistor pourraient permettre de connaître la présence ou l’absence de croquettes dans la gamelle.&lt;br /&gt;
***Ultrason pour connaître la présence ou non de l'animal devant la gamelle&lt;br /&gt;
***Autres.&lt;br /&gt;
**Indicateurs : Des indicateurs peuvent être implantés sur le système physique : des LEDS indicatrices de l’état de batterie (si l'alimentation nomade est privilégiée) ou de l’état du réservoir (plein ou vide) sont envisagés.&lt;br /&gt;
&lt;br /&gt;
==== Partie informatique ====&lt;br /&gt;
*Unité de contrôle&lt;br /&gt;
**Utilisation d’un arduino avec un module wifi dans le but de réaliser une communication externe via une application mobile Androïd par exemple. &lt;br /&gt;
**Utilisation d’un raspberry avec création d’un serveur Apache pour permettre de communiquer avec l’utilisateur.&lt;br /&gt;
**Utilisation d'un module communiquant autre que les deux cités précédemment.&lt;br /&gt;
*En bonus :&lt;br /&gt;
**Création d’un système de contrôle à distance en mettant en place une caméra afin que l’utilisateur puisse avoir des images à distance, ou simplement une caméra série afin d'obtenir des images de contrôle. Ce système n’aura pas besoin d’être temps réel. Il pourra être implémenté grâce au serveur apache de la raspberry, si l’utilisation de celle-ci est retenue.&lt;br /&gt;
**Des actionneurs pour permettre à l’utilisateur interagir avec son chat à distance (Buzzer, laser, son, …).&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel et logiciel===&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous avons réalisé l'état de l'art des gamelles connectées déjà réalisées et commercialisées. Voici le lien PDF permettant d’accéder à ce fichier.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Etat_de_l_art.pdf]]&lt;br /&gt;
&lt;br /&gt;
Finalement, nos choix techniques sont les suivants : &lt;br /&gt;
*Matériel&lt;br /&gt;
**Mécanique&lt;br /&gt;
***Un système d’hélice contrôlée par un moteur permettant de déverser des croquettes en quantités connues. (Un schéma du système sera réalisé rapidement).&lt;br /&gt;
**Électronique&lt;br /&gt;
***Un adaptateur capable de générer une tension de 5V à partir du réseau.&lt;br /&gt;
***Des LEDs infrarouges couplées à des photodiodes afin de contrôler l'état de la gamelle et du réservoir.&lt;br /&gt;
***Un servomoteur 360° afin de faire tourner le système d'hélice et permettant ainsi de déverser une dose de croquettes dans la gamelle.&lt;br /&gt;
***Des LEDs permettant de visualiser l'état du système (alimentation du circuit, réservoir vide,...) et les résistances qui vont de pair.&lt;br /&gt;
***Un capteur Ultrason afin de pouvoir vérifier la présence ou non d'un animal devant la gamelle.&lt;br /&gt;
**Informatique&lt;br /&gt;
***Un arduino Méga car l'arduino Uno sera limité lorsque nous communiquerons entre le module wifi et l'application mobile.&lt;br /&gt;
***Un module Wifi ESP8266.&lt;br /&gt;
***Une carte shield SD afin de stocker toutes les variables de l'utilisateur et de son chat.&lt;br /&gt;
***Un module horloge temps réel (RTC) afin de pouvoir programmer en fonction de l'heure qu'il est si le choix de l'utilisateur porte sur le réapprovisionnement de la gamelle de cette manière là.&lt;br /&gt;
&lt;br /&gt;
En solution de secours : &lt;br /&gt;
*Un rapsberry&lt;br /&gt;
*Une balance à modifier manuellement&lt;br /&gt;
&lt;br /&gt;
*Logiciel&lt;br /&gt;
**Solidworks afin de pouvoir concevoir les différentes parties du système mécanique.&lt;br /&gt;
**Les logiciels de programmation (Sublime, vim, emacs, gcc...)&lt;br /&gt;
&lt;br /&gt;
*Autres&lt;br /&gt;
**Utilisation des machines mises à disposition des étudiants au Fablab : découpeuse laser et imprimante 3D pour la conception de prototypes.&lt;br /&gt;
&lt;br /&gt;
==Tableau==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Composant !! Quantité requise !! Disponible (M. Redon) ? !! À commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |Émetteur et récepteur infrarouge/photodiode&lt;br /&gt;
 |Entre 6 et 7 au minimum&lt;br /&gt;
 |Une partie&lt;br /&gt;
 |Oui&lt;br /&gt;
 |1 LED infrarouge et 1 photodiode ont été empruntés&lt;br /&gt;
 |-&lt;br /&gt;
 |Adaptateur PS512S&lt;br /&gt;
 |1&lt;br /&gt;
 |Non&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Lien Gotronic : [http://www.gotronic.fr/art-adaptateur-ps512s-19913.htm]&lt;br /&gt;
 |-&lt;br /&gt;
 |Shield carte SD&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Nous avons eu une carte shield Ethernet - SD ainsi que la carte SD.&lt;br /&gt;
 |-&lt;br /&gt;
 |Module horloge temps réel (RTC)&lt;br /&gt;
 |1&lt;br /&gt;
 |Non&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Lien Gotronic : [http://www.gotronic.fr/art-module-horloge-temps-reel-ada3296-25536.htm]&lt;br /&gt;
 |-&lt;br /&gt;
 |Capteur Ultrason&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Emprunté&lt;br /&gt;
 |-&lt;br /&gt;
 |LEDs&lt;br /&gt;
 |minimum 3&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Plusieurs empruntées&lt;br /&gt;
 |-&lt;br /&gt;
 |Résistances&lt;br /&gt;
 |Une vingtaine&lt;br /&gt;
 |Oui (C205)&lt;br /&gt;
 |Non&lt;br /&gt;
 |Plusieurs empruntées&lt;br /&gt;
 |-&lt;br /&gt;
 |Arduino méga&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Un arduino méga et un arduino uno (pour les tests) ont été empruntés&lt;br /&gt;
 |-&lt;br /&gt;
 |ESP8266&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |La version 012 a été empruntée&lt;br /&gt;
 |-&lt;br /&gt;
 |Servomoteur 360&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Emprunté&lt;br /&gt;
 |-&lt;br /&gt;
 |Solution de secours : Rapsberry&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Pas encore emprunté, solution de secours&lt;br /&gt;
 |-&lt;br /&gt;
 |Solution de secours : Balance&lt;br /&gt;
 |1&lt;br /&gt;
 |Non&lt;br /&gt;
 |Non&lt;br /&gt;
 |Pas encore emprunté, solution de secours&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
*Étude et réalisation d'un système à base de LEDs infrarouges et de photodiodes afin de pouvoir estimer si la gamelle est vide ou pleine. De même pour le réservoir.&lt;br /&gt;
**Circuit d'émission : LED Infrarouge&lt;br /&gt;
**Circuit de réception : Photodiode&lt;br /&gt;
**Étude des emplacements stratégiques dans la gamelle et le réservoir&lt;br /&gt;
*Réalisation d'un prototype de gamelle&lt;br /&gt;
**Conception 3D de l'hélice sur laquelle le servomoteur va venir se greffer&lt;br /&gt;
**Conception 3D de la gamelle complète&lt;br /&gt;
**Découpage/impression de prototypes&lt;br /&gt;
*Étude de l'ESP8266&lt;br /&gt;
*Tests d'écriture et de lecture sur la carte SD depuis l'arduino&lt;br /&gt;
*Étude du module d'horloge temps réel (RTC)&lt;br /&gt;
*Contrôle des différents capteurs en incluant le servomoteur&lt;br /&gt;
*Création de l'application mobile&lt;br /&gt;
*Mise en relation des différentes parties informatiques du système&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 et + !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 3H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Réalisation de l'état de l'art&lt;br /&gt;
| &lt;br /&gt;
|6H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|-&lt;br /&gt;
|Échange quant aux technologies et au système mécanique à choisir&lt;br /&gt;
| &lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste et de la répartition des tâches&lt;br /&gt;
| &lt;br /&gt;
|2H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2H00&lt;br /&gt;
|-&lt;br /&gt;
| Recherches quant aux échelles de dosage (Quelles quantités de nourriture consomment les chats en fonction de leur poids ?)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste de matériel et établissement des besoins (meilleur rapport besoin/prix étudié)&lt;br /&gt;
| &lt;br /&gt;
|5H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5H00&lt;br /&gt;
|-&lt;br /&gt;
| Modèle 3D de l'hélice&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Modèle 3D du réservoir&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|-&lt;br /&gt;
| Étude des LEDs Infrarouge et des photodiodes&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Tests sur le module wifi ESP8266&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|8H00&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|16H00&lt;br /&gt;
|-&lt;br /&gt;
| Tests de lecture et écriture sur la carte SD&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|6H00&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|16H00&lt;br /&gt;
|-&lt;br /&gt;
| Étude du servomoteur et réalisation d'un programme le contrôlant en C&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Prototype de l'hélice et du réservoir&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|-&lt;br /&gt;
| Achat de planches pour la réalisation des prototypes de la gamelle en bois&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Étude du capteur Infrarouge et réalisation d'un programme le contrôlant en C&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main d'androïd studio et réalisation d'une ébauche d'application mobile pour notre gamelle connectée&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|10H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|13H00&lt;br /&gt;
|-&lt;br /&gt;
| Création du réseau établi entre le système et l'application android (problème avec le point d'accès)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|8H00&lt;br /&gt;
|8H00&lt;br /&gt;
|4H00&lt;br /&gt;
|24H00&lt;br /&gt;
|-&lt;br /&gt;
| Assemblage et finition de la partie mécanique&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|8H00&lt;br /&gt;
|6H00&lt;br /&gt;
|18H00&lt;br /&gt;
|-&lt;br /&gt;
| Tests sur le module temps réel&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Création de la base de donnée de l'application android et du singleton&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|10H00&lt;br /&gt;
|10H00&lt;br /&gt;
|-&lt;br /&gt;
| Liaison ESP8266 et Arduino (Software Serial) + High shifter&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8H00&lt;br /&gt;
|8H00&lt;br /&gt;
|-&lt;br /&gt;
| Application mobile : la page des configurations&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|10H00&lt;br /&gt;
|10H00&lt;br /&gt;
|-&lt;br /&gt;
| Application mobile : la page des études statistiques&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8H00&lt;br /&gt;
|8H00&lt;br /&gt;
|-&lt;br /&gt;
| Étude du capteur ultrason et réalisation d'un programme le contrôlant en C&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| TOTAL&lt;br /&gt;
|3H00&lt;br /&gt;
|17H00&lt;br /&gt;
|10H00&lt;br /&gt;
|8H00&lt;br /&gt;
|14H00&lt;br /&gt;
|14H00&lt;br /&gt;
|13H00&lt;br /&gt;
|21H00&lt;br /&gt;
|12H00&lt;br /&gt;
|16H00&lt;br /&gt;
|49H00&lt;br /&gt;
|177H&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Préambule===&lt;br /&gt;
L’internet des objets (IoT) représente l’extension d’internet à des choses et à des lieux du monde physique (wikipédia). Les objets connectés en l’occurrence sont aujourd’hui un enjeu important. De plus en plus d’objets initialement banals se voient être connectés afin d’en améliorer l’utilisation. Lors de ce projet, nous nous intéressons aux animaux domestiques. Lorsque nous nous absentons, nous n’avons aucun contrôle sur ce qui se passe à la maison. Ainsi, nous ne pouvons pas savoir si notre animal mange ou se porte bien. De plus, nous n’avons aucun retour sur ce que notre chien ou chat notamment a consommé. Est-ce qu’il se nourrit bien ? À quelle fréquence ? Dès lors, il est impensable de s’absenter sur le long terme ou un week-end sans faire intervenir un tiers pour nourrir notre cher animal. Nous pouvons également penser à des animaux qui seraient dangereusement en surpoids. Nous voudrions surveiller leur alimentation mais cela demande une surveillance constante qui n’est pas forcément envisageable. L’objectif de ce projet est de répondre à ces questions et besoins. Et si nous connections une gamelle à une application ?&lt;br /&gt;
&lt;br /&gt;
[[Image:Gamelle-inox-couleur-antiderapante-6-tailles.jpg|center|200px]].&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
L’objectif de la première semaine a été tout d’abord de lister les différentes tâches à réaliser tout au long du projet. Cette liste sera bien sûr modifiable en fonctions des difficultés ou contraintes rencontrées au cours du projet. Cette liste a été rajoutée à la suite du cahier des charges.&lt;br /&gt;
Ensuite, un état de l’art a été réalisé. Nous avons ainsi pu clairement définir le schéma de principe de notre gamelle et le mécanisme de réapprovisionnement choisi. Voici de nouveau le lien vers notre état de l'art : [[Fichier:Etat_de_l_art.pdf]]&lt;br /&gt;
&lt;br /&gt;
Faisons un point rapide sur ces choix. Un système d’ « hélice » est privilégié afin de réapprovisionner la gamelle. Il s’agit en fait d’un cylindre plat qui sera placé en sortie du réservoir. Le réservoir sera moins large en sortie vers la gamelle qu’à son sommet, en entrée des croquettes. Cela permettra aux croquettes de s’introduire facilement dans notre système d’ « hélice ». Ce cylindre serait  troué de part et d’autre afin de pouvoir contenir une certaine dose de croquettes. Ainsi, nous pouvons réapprovisionner la gamelle en fonction de ce dosage.&lt;br /&gt;
Enfin, nous nous sommes attardés sur l’organisation et la répartition de ces tâches afin de pouvoir détailler une liste de matériel. Cette dernière a été ajoutée au wiki à la suite de la liste des tâches.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Lors de cette deuxième semaine, plusieurs tâches ont été réalisées. Tout d’abord, un début de modélisation du système a été effectué sous ''Solidworks''. Pour ce faire, nous avons dû décider de combien de grammes de croquettes à la fois nous pouvons réapprovisionner la gamelle. Ainsi, nous avons effectué des recherches quant à la consommation de nourriture journalière d’un chat. Étant donné qu’un chien consomme davantage de croquettes qu’un chat, nous nous basons sur la consommation de ce dernier, quitte à donner plusieurs doses si l’animal est un chien. Voici un tableau sur lequel nous allons nous baser :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|+ '''Tableau de référence'''&lt;br /&gt;
|-&lt;br /&gt;
! scope=col | Poids du chat adulte&lt;br /&gt;
! scope=col | 1-3 kg&lt;br /&gt;
! scope=col | 4 kg&lt;br /&gt;
! scope=col | 5 kg&lt;br /&gt;
! scope=col | 6 kg&lt;br /&gt;
|-&lt;br /&gt;
|'''Quantités journalières (en grammes)'''&lt;br /&gt;
|15-50g&lt;br /&gt;
|50-65g&lt;br /&gt;
|65-70g&lt;br /&gt;
|70-90g&lt;br /&gt;
|-&lt;br /&gt;
|'''Quantités journalières (avec un bol doseur de 300 mL)'''&lt;br /&gt;
|x 0.1 - 0.3&lt;br /&gt;
|x 0.3 - 0.4&lt;br /&gt;
|x 0.4&lt;br /&gt;
|x 0.4 - 0.6&lt;br /&gt;
|}&lt;br /&gt;
Ce tableau marche pour les croquettes Ultra premium direct en particulier.&lt;br /&gt;
&lt;br /&gt;
Grâce à ce tableau, nous pensons que réapprovisionner la gamelle par dose de 15g est approprié. Or,[[Image:Formule1.png|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Maintenant, il est nécessaire de calculer le rayon de l’hélice permettant au système de doser 15g à la fois.&lt;br /&gt;
&lt;br /&gt;
Nous voulons pouvoir doser 15g : [[Image:Formule2.png|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Posons n = 4 car nous souhaitons avec 2 doseurs, un de chaque côté de l’hélice : [[Image:Formule3.png|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Prenons à présent h = 4 cm ; h étant la largeur de l’ouverture conduisant à la gamelle. Nous avons alors : &lt;br /&gt;
&lt;br /&gt;
[[Image:Formule4.png|center|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Voici une image de l'hélice modélisée en conséquent : &lt;br /&gt;
&lt;br /&gt;
[[Image:Hélice_image.jpg|vignette|center|500px|Modélisation de l'hélice en 3D.]].&lt;br /&gt;
&lt;br /&gt;
*D’un autre côté, des tests ont été réalisés en ce qui concerne le dispositif LED infrarouge-phototransistor.&lt;br /&gt;
&lt;br /&gt;
'''Présentation de l'expérimentation :'''&lt;br /&gt;
&lt;br /&gt;
Nous utilisons une LED IR SFH 4554 pour l’émission et une pour la réception. Pour des raisons de simplicité de fonctionnement, l'allumage des LEDs ne sera pas piloté. Elles seront continuellement allumées (aucune information n'est à transmettre).&lt;br /&gt;
&lt;br /&gt;
À la réception, nous utilisons une photodiode en ''pull-down''  avec une résistance pour contrôler l'intensité dans cette dernière. Nous relions ce montage à un arduino pour vérifier jusqu'à quelle portée nous détectons le signal de la LED émettrice. Grâce à cela, nous serons à même de définir les emplacements des émetteurs/récepteurs dans la gamelle et dans le réservoir ainsi que  la taille de ces derniers. Voici le schéma de principe :&lt;br /&gt;
&lt;br /&gt;
[[Image:Schema_diode_phototransistor.png|vignette|center|500px|Schéma de principe.]].&lt;br /&gt;
&lt;br /&gt;
'''Test rapide de la portée :'''&lt;br /&gt;
&lt;br /&gt;
Calcul des résistances :&lt;br /&gt;
&lt;br /&gt;
Réception : une résistance de 4.7 kΩ est placée.&lt;br /&gt;
&lt;br /&gt;
Émission : nous alimentons la LED en 5 V. Elle possède un courant &amp;lt;math&amp;gt;U_d = 1.2 V&amp;lt;/math&amp;gt; pour 20 mA et supporte 100 mA continue. À 100 mA, &amp;lt;math&amp;gt;U_d = 1.4 V&amp;lt;/math&amp;gt;. Pour être certains d'avoir la meilleure portée possible, nous nous rapprochons des 100 mA. Ainsi, pour le dimensionnement de R nous obtenons :&lt;br /&gt;
&lt;br /&gt;
[[Image:Formule5.png|center|upright=50]]&lt;br /&gt;
1. A.N. : &amp;lt;math&amp;gt;V_{CC} = 5V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;U_d = 1.4V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;I_f = 0.1A&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
R = 36Ω. Soit, en normalisant, '''R = 47Ω'''.&lt;br /&gt;
&lt;br /&gt;
Avec ces données, nous obtenons une portée maximale de 30 cm.&lt;br /&gt;
&lt;br /&gt;
2. Nous faisons un autre test avec une intensité plus basse :&lt;br /&gt;
A.N. : &amp;lt;math&amp;gt;V_{CC} = 5V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;U_d = 1.2V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;I_f = 001A&amp;lt;/math&amp;gt;&lt;br /&gt;
R = 380Ω. Soit, en normalisant, '''R = 330Ω'''.&lt;br /&gt;
Avec ces données, nous obtenons une portée maximale de 22 cm.&lt;br /&gt;
&lt;br /&gt;
L'intérêt de connaître cette portée est que nous allons pouvoir adapter la taille du réservoir et de la gamelle afin de rendre notre dispositif réalisable. À titre de rappel, nous utilisons ce système afin de savoir si la gamelle est vide (Ce système fonctionnant en tout ou rien) et également afin de connaître le niveau approximatif des croquettes dans le réservoir. &lt;br /&gt;
&lt;br /&gt;
*Enfin, pour travailler, nous avons à notre disposition deux arduino : un arduino ''uno'' et un arduino ''méga''. L’utilisation du module wifi ESP8266 nous impose de travailler avec un arduino ''méga''. Cependant, les tests tels que pour le système LED infrarouge-phototransistor peuvent être réalisés indépendamment sur l’arduino ''uno''. Ainsi, nous pouvons travailler à deux en parallèle sur des arduino différents. Cependant, il a fallu réadapter le makefile permettant de flasher l’arduino à un arduino ''méga'' car celui que nous possédions ne fonctionnait que pour un arduino ''uno''. (Un « -D » étant nécessaire dans la ligne de commande pour flasher l’arduino dans le cas d’un ''méga'', qui ne l’était pas pour l’arduino ''uno''.)&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Lors de cette troisième semaine, nous réalisé des tests sur les deux arduinos. &lt;br /&gt;
&lt;br /&gt;
==== Le servomoteur et sa PWM ====&lt;br /&gt;
Tout d’abord, le premier test porte sur le servomoteur prévu pour faire tourner le système d’hélice et réapprovisionner la gamelle.&lt;br /&gt;
&lt;br /&gt;
Le servomoteur que nous utilisons est un servomoteur à courant continue. Il a l’avantage de pouvoir être contrôlé en vitesse et de pouvoir tourner à plus de 180°. &lt;br /&gt;
&lt;br /&gt;
Pour alimenter un servomoteur, il faut brancher ses trois connectiques sur l’alimentation 5V de l’arduino, sur la masse et sur une broche PWM. &lt;br /&gt;
&lt;br /&gt;
En effet, la consigne envoyée à un servomoteur est de type PWM (Pulse Width Modulation). Ce signal permet de faire varier la durée en état « haut » du signal grâce à la consigne que nous lui donnons. Voici un schéma montrant quelques exemples de modifications de la durée d’un état « haut » :&lt;br /&gt;
[[Image:PWM explications.png|center|300px]].&lt;br /&gt;
&lt;br /&gt;
La difficulté a été de programmer ce servomoteur en passant par le langage C. En effet, arduino IDE, il est plus aisé de le faire puisqu’il existe une bibliothèque servo.h permettant de programmer des servomoteurs facilement. En C, il a fallu se pencher sur le fonctionnement et le contrôle d’une PWM grâce aux différents registres de l’arduino. &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, il faut configurer les registres TCCR1A et TCCR1B afin d’activer la PWM en mode non-inversé et à fréquence élevée.  &lt;br /&gt;
&lt;br /&gt;
Enfin, il faut activer la PIN5 du port B en sortie (Pin PWM).&lt;br /&gt;
&lt;br /&gt;
Rentrons un peu plus dans le détail quant à la configuration des deux registres TCCR1A et TCCR1B.&lt;br /&gt;
TCCR0A = 1000 0001 = 0x81 et TCCR0B = 0000 0101  = 0x05&lt;br /&gt;
[[Image:TCCR0A.png|center|650px]].&lt;br /&gt;
[[Image:TCCR0B.png|center|650px]].&lt;br /&gt;
&lt;br /&gt;
TCCR0A : &lt;br /&gt;
   COM0A1 = 1 COM0A0 = 0 =&amp;gt; non-inverting mode&lt;br /&gt;
&lt;br /&gt;
   COM0B1 = 0 COM0B0 = 0 =&amp;gt; mode standard&lt;br /&gt;
&lt;br /&gt;
   WGM01 = 0 WGM00 = 1 =&amp;gt; PWM mode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TCCR0B : &lt;br /&gt;
   FOC0A = 0 FOC0B = 0 =&amp;gt; car PWM mode&lt;br /&gt;
&lt;br /&gt;
   WGM02 = 0 =&amp;gt; PWM mode&lt;br /&gt;
&lt;br /&gt;
   SC02 = 1 CS01 = 0 CS00 = 1 =&amp;gt; clk (entrée/sortie) /1024&lt;br /&gt;
&lt;br /&gt;
Pour connaître ces résultats, les tableaux descriptifs sont disponibles dans la datasheet de l'arduino méga, disponible dans les références à la fin du wiki.&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps, en modifiant directement le registre OCR0A, nous envoyons directement une commande au servomoteur. La durée en état « haut » est ainsi proportionnelle à la consigne saisie dans OCR0A.&lt;br /&gt;
&lt;br /&gt;
Le servomoteur tourne bien différemment en fonction de la valeur saisie dans OCR0A. Maintenant, il reste à comprendre comment contrôler de manière précise le servomoteur et sa position en fonction de la consigne.&lt;br /&gt;
&lt;br /&gt;
==== Le capteur ultrason ====&lt;br /&gt;
&lt;br /&gt;
=====  Présentation =====&lt;br /&gt;
Nous pensons utiliser le module HC-SR04 couplé à un arduino pour détecter la présence de l’animal devant la gamelle. Cela servira à ne pas prendre en considération le contenu de la gamelle pour savoir si elle est vide ou non lorsque l’animal se nourrit. Ou encore, cela aidera afin de pouvoir réaliser un suivi à savoir : à quel moment le chat a-t-il été manger ?&lt;br /&gt;
&lt;br /&gt;
En lisant la documentation technique du HC -SR04, nous en tirons ceci :&lt;br /&gt;
&lt;br /&gt;
[[Image:US data.png|center|550px]].&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement du système est simple et qu’il suffit d'envoyer un message de 10µs minimum avec une écart de 60 ms minimum pour recevoir une réponse du capteur.&lt;br /&gt;
&lt;br /&gt;
Le capteur renvoi un signal qui a un temps proportionnel à sa distance par rapport à l’obstacle.&lt;br /&gt;
&lt;br /&gt;
=====  Expérimentation =====&lt;br /&gt;
Nous rajoutons des LESs afin d’avoir une indication lorsqu’un signal est envoyé. La valeur reçue est visualisée à l’aide de l’outil minicom, la valeur était envoyé sur le port série. Nous remarquons que le système fonctionne même si des imperfections de de mesure subsistent (dues notamment au programme). La précision du système suffit néanmoins à la détection du chat devant la gamelle.&lt;br /&gt;
&lt;br /&gt;
=====  Problème lié à l'étude =====&lt;br /&gt;
Le module utilise une fréquence de 40khz.&lt;br /&gt;
Suite à des vérifications, les chats et les chiens entendent des sons pouvant aller jusqu'à 60khz. &lt;br /&gt;
Une recherche a été effectuée sur les barrières repoussant les chiens et les chats. Malgré le peu de documentation technique que nous avons trouvé, nous remarquons  que les fréquences utilisées sont de l'ordre de 25 khz. Ces fréquences sont bien loin des 40khz de notre système. Cependant, une petite expérimentation a été réalisée sur un chat de 6 ans à l’aide d’une application smartphone générant des ultrasons. Il s’avère que le chat est dérangé par ces fréquences, le chat s'en va au bout de 10 minutes d’expérience.&lt;br /&gt;
&lt;br /&gt;
=====  Conclusion =====&lt;br /&gt;
Même si le module HC-SR04 est très simple d’utilisation, nous ne pouvons continuer à nous en servir pour notre projet de gamelle connectée.&lt;br /&gt;
&lt;br /&gt;
=====  Autre alternative =====&lt;br /&gt;
* Tapis de jauge de contrainte → couvre une surface trop petite&lt;br /&gt;
* Détecteur de présence infrarouge → convient pour des objets de taille supérieure à 15 cm  &lt;br /&gt;
&lt;br /&gt;
Notre choix se porte donc sur le capteur infrarouge, que nous programmerons dans une séance ultérieure.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
La semaine a été en grande partie consacrée à la réalisation d’un prototype pour le système d’hélice et le réservoir. Tout d’abord, nous avons dû faire plusieurs aller-retour au magasin afin d’acheter des planches pour la réalisation des différents prototypes. La première planche qui a été acheté était une medium, matériel qui n’est plus accepté dans la découpeuse laser puisqu’elle encrasse le filtre et la lentille de l’appareil. Nous avons donc du aller acheter les bonnes planches. De plus, il a fallu réserver des créneaux au fabricarium et apprendre à se servir de la découpeuse laser. Le prototype final n’est pas encore assemblé puisque nous réfléchissons à un système de « pied à coulisse » afin de pouvoir choisir le dosage unitaire que peut servir l’hélice.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5 et semaine 6===&lt;br /&gt;
'''Création d’un programme contrôlant la lecture et l’écriture sur la carte SD'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Pour rendre notre projet innovant par rapport aux autres gamelles connectées proposées sur le marché, nous avons décidé de faire un suivi lié à l'alimentation du chat. Par exemple, nous souhaitons savoir à quels moments de la journée l’animal va manger, pendant combien de temps, en quelles quantités etc…&lt;br /&gt;
Pour cela, nous devons stocker ces différentes données. Pour ce faire, nous utiliserons le shield SD/ethernet  suivant :&lt;br /&gt;
&lt;br /&gt;
[[Image:Shield sd ethernet.jpg|vignette|center|300px|Shield SD/ethernet.]]&lt;br /&gt;
&lt;br /&gt;
*Code arduino shield Sd/ethernet&lt;br /&gt;
&lt;br /&gt;
Pour commencer, l’expérimentation du shield  a été effectuée à l’aide d’arduino IDE afin de réaliser un prototype rapide et tester si le shield est efficace et permet de répondre à nos besoins.&lt;br /&gt;
&lt;br /&gt;
Nous nous basons sur l'exemple proposé par arduino IDE suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SD.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File myFile;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  // Open serial communications and wait for port to open:&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  while (!Serial) {&lt;br /&gt;
    ; // wait for serial port to connect. Needed for native USB port only&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Initializing SD card...&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if (!SD.begin(4)) {&lt;br /&gt;
    Serial.println(&amp;quot;initialization failed!&amp;quot;);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;initialization done.&amp;quot;);&lt;br /&gt;
  myFile = SD.open(&amp;quot;test.txt&amp;quot;, FILE_WRITE);&lt;br /&gt;
&lt;br /&gt;
  if (myFile) {&lt;br /&gt;
    Serial.print(&amp;quot;Writing to test.txt...&amp;quot;);&lt;br /&gt;
    myFile.println(&amp;quot;testing 1, 2, 3.&amp;quot;);&lt;br /&gt;
    myFile.close();&lt;br /&gt;
    Serial.println(&amp;quot;done.&amp;quot;);&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.println(&amp;quot;error opening test.txt&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  myFile = SD.open(&amp;quot;test.txt&amp;quot;);&lt;br /&gt;
  if (myFile) {&lt;br /&gt;
    Serial.println(&amp;quot;test.txt:&amp;quot;);&lt;br /&gt;
    while (myFile.available()) {&lt;br /&gt;
      Serial.write(myFile.read());&lt;br /&gt;
    }&lt;br /&gt;
    myFile.close();&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.println(&amp;quot;error opening test.txt&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous remarquons que nous écrivons facilement sur la carte SD grâce à la bibliothèque disponible. En ajoutant quelques boutons et en modifiant légèrement le code, nous arrivons à sauvegarder la durée de maintien du bouton ainsi que la fréquence d’actionnement.&lt;br /&gt;
&lt;br /&gt;
*Code C Shield  SD/ethernet&lt;br /&gt;
&lt;br /&gt;
Une fois le prototype fait et fonctionnel, nous décidons d’écrire le code en C. Pour cela, nous utilisons en particulier deux bibliothèques fournies par Monsieur REDON : Sd2Card et spi.&lt;br /&gt;
Après de multiples tentatives, nous arrivons toujours à l'erreur suivante : “SD_CARD_ERROR_CMD0”. Cette dernière est liée à un timeout qui persiste malgré la modification de paramètres dépendants.&lt;br /&gt;
&lt;br /&gt;
*Changement de matériel&lt;br /&gt;
&lt;br /&gt;
Monsieur REDON nous a fourni un nouveau shield uniquement SD cette fois-ci pour tester si le problème est matériel. En voici la photographie :&lt;br /&gt;
&lt;br /&gt;
[[Image:Shield sd simple.jpg|vignette|center|300px|Shield SD.]]&lt;br /&gt;
&lt;br /&gt;
*Code C Shield SD&lt;br /&gt;
&lt;br /&gt;
En recompilant le code sur le nouveau shield, nous remarquons qu'il n'y a pu d'erreur liée à l'initialisation de la carte SD.&lt;br /&gt;
Suite à des expérimentations liées à la prise en main du code exemple donné, nous arrivons maintenant à écrire une information dans un bloc est à relire cette information plus tard.&lt;br /&gt;
&lt;br /&gt;
Voici un extrait lu depuis l’utilitaire minicom lors de la lecture de la carte SD :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;status de la carte sd = 1                                                 &lt;br /&gt;
status=0                                                                  &lt;br /&gt;
erreur=0                                                                  &lt;br /&gt;
type=3                                                                    &lt;br /&gt;
taille=7744512                                                            &lt;br /&gt;
Lecture                                                                   &lt;br /&gt;
statut=0                                                                  &lt;br /&gt;
bloc[0]=1 bloc[1]=0 bloc[2]=aa bloc[3]=bb bloc[4]=cc bloc[5]=0&lt;br /&gt;
statut=0   &lt;br /&gt;
bloc[0]=dd bloc[1]=ee bloc[2]=ff bloc[3]=0 bloc[4]=0 bloc[5]=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le shield fonctionne comme désiré et nous pourrons ainsi enregistrer des informations afin de les traiter plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Configuration du module WiFi ESP8266'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
L’ESP8266 est un circuit intégré à un microcontrôleur qui fait office de module WiFi. Il possède un total de 9 GPIO (3.3V) ce qui lui permet d’être utilisé indépendamment, sans même se connecter à un autre microcontrôleur. La datasheet de ce composant est disponible dans la rubrique « Datasheet » en bas de page. Pour notre projet, l’utilisation seule de ce module ne suffisait pas. C’est pourquoi, nous le connectons à un arduino afin de pouvoir profiter des différentes entrées/sorties de ce microcontrôleur. Voici une photographie du composant en question :&lt;br /&gt;
&lt;br /&gt;
[[Image:Esp8266.jpg|vignette|center|300px|Shield SD.]]&lt;br /&gt;
&lt;br /&gt;
L'adresse IP de notre ESP8266 s'obtient en connectant notre composant à un réseau local. Ainsi, nous savons que cette adresse est la suivante : 192.168.43.53 .&lt;br /&gt;
&lt;br /&gt;
*Programmation du module WiFi en C&lt;br /&gt;
&lt;br /&gt;
De nombreux problèmes ont été rencontrés pour configurer l’ESP8266 en C. Le programme devant être directement chargé sur ce dernier, de nombreuses erreurs en ont résulté. Après de nombreuses heures passées à essayer de régler ces problèmes, nous avons discuté de cela avec l’un de nos encadrant, M. REDON, qui nous a autorisé à programmer le module WiFi directement sur arduino IDE, puisqu’une bibliothèque existante rend la tâche moins ardue. De ce fait, l’avantage de l’ESP8266 est que nous chargeons un programme directement sur ce dernier. Ainsi, nous pouvons programmer le reste de notre projet en C, en compilant et téléversant le fichier sur l’arduino sans perturber le fonctionnement du module WiFi.&lt;br /&gt;
&lt;br /&gt;
*Programmation du module WiFi sur arduino IDE&lt;br /&gt;
&lt;br /&gt;
Tout d’abord, lors de l’installation d’arduino IDE, il faut veiller à ce que la version soit suffisamment récente pour pouvoir y télécharger des « boards ». En effet, il faut, grâce à un lien disponible sur le site d’arduino, ajouter l’ESP8266 en tant que board dans le logiciel afin que le composant puisse être reconnu afin de téléverser un programme. &lt;br /&gt;
Ensuite, l’ESP doit être connectée en USB sur à l’ordinateur afin qu’elle soit visible sur son port propre (USB0 en l’occurrence). Ainsi, lors du téléversement du fichier, il faut sélectionner ce port dans la liste de ceux disponible. (Beaucoup de soucis ont été rencontrés à ce propos, l’ESP n’étant pas toujours visible comme étant disponible sur arduino IDE). &lt;br /&gt;
Enfin, un test basique a été réalisé qui consiste à faire clignoter une LED connectée à un GPIO de l’ESP et à se connecter à un réseau WiFi. L’avantage de programmer en arduino IDE est que, par un simple « #include &amp;lt;ESP8266WiFi.h&amp;gt; », nous ajoutons la bibliothèque propre à notre module WiFi. La fonction WiFi.begin permet alors de se connecter facilement à un réseau local en passant en paramètres le nom du réseau sans fil (SSID) ainsi que son mot de passe. &lt;br /&gt;
&lt;br /&gt;
Voici une visualisation des informations envoyées sur l'interface série :&lt;br /&gt;
&lt;br /&gt;
[[Image:Capture esp.png|vignette|center|500px|Visualisation sur l'interface série.]]&lt;br /&gt;
&lt;br /&gt;
*Réseau&lt;br /&gt;
&lt;br /&gt;
La question de la connexion réseau entre le module WiFi et l’application mobile, que nous allons bientôt réaliser, se pose. Nous avons travaillé également sur cette partie lors de la semaine 6. Cependant, nous expliciterons cette partie un peu plus tard afin d’aborder en même temps la partie réseau du côté de l’application mobile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
'''Capteur Infrarouge IRS05A'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Dans la partie liée au suivi de l'alimentation, nous avons besoin d'un détecteur de présence afin de savoir si le chat est en train de se nourrir ou pas. Pour cela, nous avions testé le module HC-SR04, expérimentation qui n'avait pas aboutie due au fait que le chat entende les ultrasons. Nous avons choisi en remplacement le module irs05a. En voici une photographie :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:IRS05A.jpg|center|200px]]&lt;br /&gt;
&lt;br /&gt;
*Programme C&lt;br /&gt;
&lt;br /&gt;
En étudiant la datasheet du composant, nous trouvons ceci : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour l'expérimentation, nous avons juste besoin de commander l'entrée enable et de placer une LED à la sortie output afin de visualiser si le module détecte ou non un objet. Suite à cette expérimentation, nous avons pu définir la zone de détection du module. Voici un schéma explicatif :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:IRS05A extrait datasheet.png|center|400px]]&lt;br /&gt;
&lt;br /&gt;
Grâce à ce schéma, nous avons pu faire un choix matériel quant à celui de l’emplacement de nos deux capteurs de présence. Ils seront disposés comme suit :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema ir disposition.jpg|center|200px]]&lt;br /&gt;
&lt;br /&gt;
'''Application mobile'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
L’objectif de cette semaine a été en partie de se familiariser avec l’environnement de développement intégré (IDE) d’Android Studio. Sous Android, il est commun de passer par cette plateforme afin de programmer différentes applications mobiles. Cela se code en java. &lt;br /&gt;
&lt;br /&gt;
*Application pour la gamelle connectée&lt;br /&gt;
&lt;br /&gt;
Tout d’abord, le domaine des applications mobiles est très complexe. De plus, la documentation technique de java est également très fournie. Cela a rendu la tâche de réaliser une application android basique très longue. Finalement, nous voulons créer une application mobile permettant de visualiser les statistiques de son animal,  de contrôler la gamelle manuellement ou de programmer des modes pour l’alimenter. Pour le moment, le squelette général a été créé, permettant d’afficher de nouvelles fenêtres à chaque choix de « mode ».  Voici des screenshots de l’application actuelle :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:App premiere page.png|200px]] [[Fichier:Onglet1.png|200px]] [[Fichier:Onglet2.png|200px]] [[Fichier:Onglet3 en cours.png|200px]] &lt;br /&gt;
&lt;br /&gt;
*Réseau &lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons voulu aller plus loin dans la fenêtre consacrée au réapprovisionnement manuel. En effet, nous souhaitons réaliser un test simple qui consiste à allumer une LED connectée à un GPIO de l’ESP8266 par simple appui d’un bouton depuis l’application mobile. Le problème qui s’est alors posé a été celui de créer un lien serveur/client entre le module WiFi et l’application mobile. L’idée serait alors de créer un serveur TCP sur arduino IDE qui se chargerait sur l’ESP8266 et de créer, à l’aide de sockets en java, un client sur l’application mobile. Le serveur TCP a été réalisé sur l’arduino mais n’a pas encore pu être testé. La réalisation du client sur l’application mobile est l’objet de la semaine 8, les tests seront alors réalisés et explicités à ce moment là.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8 et 9===&lt;br /&gt;
'''Application mobile, partie réseau'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Le serveur TCP réalisé sous arduino IDE directement sur le module WiFi a été testé à l’aide de la commande nc. En effet, nous avons utilisé un terminal téléchargé sur le téléphone afin de connecter le module WiFi et le téléphone sur le même réseau. En envoyant les requêtes directement via la commande nc, nous sommes capables d’allumer et d’éteindre la LED connectée au GPIO de l’ESP8266. Maintenant, il faut réaliser la même chose mais côté application mobile.&lt;br /&gt;
&lt;br /&gt;
La partie concernant la création du socket et l’envoi de données à l’esp8266 nous a pris beaucoup de temps. En effet, le problème ne venait pas de notre code mais simplement du fait que la version android du téléphone utilisé comme point d’accès internet empêchait l’application de connecter la socket à l’adresse IP du module WiFi. Après avoir configuré un routeur et connecté le module WiFi et le téléphone dessus, nous étions capable d’envoyer des requêtes au module WiFi afin qu’il allume une LED notamment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Principe&lt;br /&gt;
&lt;br /&gt;
Il est préférable de réaliser la partie réseau d’une application mobile via un thread afin de rendre l’application la plus fluide possible. Par exemple, l’appui du bouton ON permet de modifier une chaine de caractère et lance le thread d’envoi. Dans ce thread, l’application connecte la socket au module WiFI à l’aide de son adresse IP et du port de communication spécifié dans le programme du serveur TCP sur arduino IDE. Ensuite, la socket se charge d’envoyer la chaine de caractère à l’esp8266. Cela se fait par l’utilisation de l’objet ''DataOutputStream'' et de sa méthode ''writeBytes'' qui permet l’envoi simple d’une chaine de caractère. &lt;br /&gt;
&lt;br /&gt;
Pour la réception des données, il s’agit du même principe mais nous utilisons l’objet DataInputStream.&lt;br /&gt;
&lt;br /&gt;
Voici un aperçu de ce qui est visualisable sur l'interface série de l'arduino IDE, les requêtes sont bien envoyées :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Serveur ok.png|center|100px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 10 et +===&lt;br /&gt;
'''La base de données sur l'application android'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons déjà les données directement sur la gamelle grâce à la carte SD. Cependant, il nous a semblé nécessaire de garder en mémoire les statistiques de notre animal de compagnie directement sur l’application. Après avoir lu le livre « L’art du développement Android » de Grant Allen, prêté notre enseignant, deux possibilités nous sont apparues. La première était de manipuler des fichiers qui seraient générés par l’application afin de garder en mémoire ce que nous souhaitons. La seconde était de créer une base de données locale grâce à la base de données installée sur Android, ''SQLite''. &lt;br /&gt;
&lt;br /&gt;
*Présentation rapide de SQLite&lt;br /&gt;
&lt;br /&gt;
''SQLite'' utilise un dialecte de SQL afin de réaliser des requêtes de manipulations de données. Les « SELECT », « INSERT », « REMOVE », peuvent ainsi être utilisées.  ''SQLite'' est particulièrement approprié pour l’utilisation android car son utilisation ne repose pas sur un modèle client-serveur (comme ''mysql'' ou ''PostgreSQL'' que nous connaissons). Ainsi, l’intégralité de la base de données est stockée dans un fichier unique.&lt;br /&gt;
&lt;br /&gt;
*Base de données&lt;br /&gt;
&lt;br /&gt;
La base de données que nous avons implémentée permet de répertorier tous les jours enregistrés par la gamelle afin de pouvoir réaliser des traitements statistiques derrière. La date a été stockée en chaine de caractère car le constructeur de la forme ''Date(int year, int month, int day)'' est obsolète pour la version de l’API que nous utilisions. Le deuxième constructeur est de la forme ''Date(long Date)'' et il faut fournir à cette méthode un nombre de millisecondes qu’elle va convertir au format Date de Java. Cela nous semblait peu pratique. &lt;br /&gt;
&lt;br /&gt;
Voici un petit tableau illustrant ce que nous souhaitons stocker dans la base de données :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tableau recap bdd.png|center|450px]]&lt;br /&gt;
&lt;br /&gt;
Trois classes ont été crées : Jour.java, JoursBDD.java et MaBaseSQLite.java.&lt;br /&gt;
&lt;br /&gt;
Voici un schéma UML résumant ces trois classes :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:BDD_lulu.png|center|700px]]&lt;br /&gt;
&lt;br /&gt;
'''La base de données et Singleton'''&lt;br /&gt;
&lt;br /&gt;
Notre base de donnée étant créée et fonctionnelle, nous avions besoin de l’avoir à disposition n’importe où dans l’application. Or, passer un objet d’une page à une autre est simple pour des objets peu complexes. Cependant, il était plus difficile de passer notre base de données avec les méthodes traditionnelles utilisées auparavant. Nous avons donc utilisé un singleton. Le singleton est une instance unique d’une classe. Cela permet à la fois de récupérer facilement cette instance partout dans l’application mais cela permet également de converser une unicité de cette dernière, ce qui est important pour  une base de données. Ainsi, nous avons modifié les classes décrites précédemment afin d’implémenter le singleton. &lt;br /&gt;
&lt;br /&gt;
Deux variables ont été ajoutées à la classe joursBDD : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;private static Context context;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;private static JoursBDDSingleton mJoursBDDSingleton;  //instance unique&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deux méthodes sont également concernées dans ce changement :&lt;br /&gt;
&amp;lt;pre&amp;gt;//Méthode de restauration de contexte&lt;br /&gt;
public JoursBDD(Context context)&lt;br /&gt;
{&lt;br /&gt;
    this.context = context;&lt;br /&gt;
    //creation de la base de donnees&lt;br /&gt;
    maBaseSQLite = new MaBaseSQLite(context, NOM_BDD, null, VERSION_BDD);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Methode de recuperation de l'instance de la BDD&lt;br /&gt;
public static synchronized JoursBD getInstance(Context context){&lt;br /&gt;
    //Création de la base de données et de sa table&lt;br /&gt;
    if(mJoursBDD==null) {&lt;br /&gt;
        //CreateJoursBDD(context);&lt;br /&gt;
        mJoursBDD = new JoursBDD(context);&lt;br /&gt;
    }&lt;br /&gt;
    return mJoursBDD;&lt;br /&gt;
} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, juste un réalisant une récupération de l’instance grâce à  l’appel de la méthode getInstance : JoursBDD.getInstance(this); , il est aisé de le faire dans une nouvelle activité.&lt;br /&gt;
&lt;br /&gt;
'''Le traitement des données'''&lt;br /&gt;
&lt;br /&gt;
Une partie « statistiques » a été ajoutée à l’application mobile. Elle a pour but l’étude de l’alimentation de l’animal grâce à l’utilisation de graphiques et de tableaux. Afin de rendre la chose plus visuelle, l’utilisateur peut sélectionner soit un histogramme, soit un graphique linéaire, soit un tableau de données grâce à des radio boutons. Ensuite, l’utilisateur sélectionne soit les 7 derniers jours soit le dernier mois via un simple bouton. &lt;br /&gt;
Voici un aperçu de la première page :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:statistiques_tableau_petfun.png|center|200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Présentation rapide de achartengine :&lt;br /&gt;
Afin de réaliser l’affichage de graphiques, nous avons utilisé une bibliothèque appelée ''achartengine''. Cette bibliothèque permet la personnalisation de graphiques et l’affichage sous forme d’histogramme ou encore de graphiques linéaires des données. Cette bibliothèque facilite la dynamisation de l’activité. Nous restant peu de temps dans le projet, nous avons décidé d’exploiter cette ressource afin de réaliser une page propre et personnalisée. Nous pouvons utiliser cette bibliothèque en l’ajoutant dans les fichiers ''gradle'' du projet.&lt;br /&gt;
&lt;br /&gt;
Voici les graphiques que nous affichons :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Graphiques stats petfun1.png|200px]] [[Fichier:Graphiques stats petfun2.png|200px]]&lt;br /&gt;
&lt;br /&gt;
*Limites et améliorations :&lt;br /&gt;
L’idée d’avoir créée un bouton permettant d’afficher un graphique de la dernière semaine avait pour but une amélioration par la suite. En effet, l’objectif est de pouvoir, une fois le graphique affiché, passer d’une semaine à une autre. De même pour les mois, nous souhaiterions pouvoir, à partir du dernier mois, afficher les précédents en ''slidant'' le graphique ou en appuyant sur une touche. &lt;br /&gt;
&lt;br /&gt;
'''Configuration des paramètres'''&lt;br /&gt;
&lt;br /&gt;
*Introduction &lt;br /&gt;
&lt;br /&gt;
Une page de permettant de configurer les paramètres de l'application a été ajoutée à l’application mobile. Elle a pour but d’enregistrer les heures de repas de l'animal, le poids contenu dans la gamelle, le nom de l’animal ou encore sa photographie. Le poids contenu dans la gamelle doit être notifié car cette dernière est ajustable grâce à des rails présents sur la gamelle et ajustables. Ainsi, l’utilisateur peut doser la quantité qu’il souhaite. Il devra alors le notifier dans l’application afin que le traitement des données en tienne compte.&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Dans l’activité de contrôle ''automatique'', il s’agit en fait de configurer des paramètres. Sur cette page, les paramètres actuels de la gamelle sont affichés à l’écran. L’utilisateur peut dès lors, via des boutons, sélectionner deux activités : une pour changer les paramètres propres à la gamelle et l’autre pour changer ceux propres à l’animal. &lt;br /&gt;
&lt;br /&gt;
*Paramètres de la gamelle&lt;br /&gt;
&lt;br /&gt;
Dans les paramètres de la gamelle, deux choses sont configurables : les heures de repas de l’animal et la quantité de croquettes ajustée sur la gamelle. Afin de rentrer les heures de repas, le widget ''TimePicker'' a été utilisé et configuré en format 24 heures. L’appui de la touche « AJOUT HEURE » permet l’ajout de l’heure saisi sur le ''TimePicker'' dans les paramètres de l’application. De plus, afin de saisir le poids de la gamelle, un simple ''EditText'' permet de le faire. Si l’utilisateur ne saisi pas un nombre, un message s’affiche à l’écran le prévenant du problème de format.&lt;br /&gt;
&lt;br /&gt;
L’appui de la touche « VALIDER CONFIGURATION » permet la sauvegarde de la saisie et le retour à la première activité. &lt;br /&gt;
&lt;br /&gt;
L’appui de la touche « SUPPRIMER CONFIGURATION » permet la suppression des heures de repas enregistrées dans l’application.&lt;br /&gt;
&lt;br /&gt;
*Paramètres de l’animal&lt;br /&gt;
&lt;br /&gt;
Dans les paramètres de l’animal, le nom ainsi que la photographie de ce dernier peuvent être ajoutés. Le nom est simplement enregistré grâce à un ''EditText''. L’avatar peut être cherché par l’utilisateur dans ses fichiers de téléphone. (Des permissions spécifiques sont nécessaires). L'avatar s'affiche alors en première page de l'application.&lt;br /&gt;
&lt;br /&gt;
Maintenant, la question d’enregistrer tous ses paramètres s’est posée. En effet, une fois l’application fermée, tous les objets et toutes les variables créées dans l’application sont désallouées. Les paramètres rentrés par l’utilisateur sont alors perdus. &lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons fait le choix de modifier les préférences de l’application. Ces préférences renseignent des paires clé-valeur de données.&lt;br /&gt;
&lt;br /&gt;
*SharePreferences&lt;br /&gt;
&lt;br /&gt;
Nous devons créer un objet ''SharePreferences'' via la méthode ''getSharedPreferences'' en lui attribuant un nom unique et en privatisant son accès. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; final SharedPreferences prefs = getSharedPreferences(&amp;quot;Configuration&amp;quot;, Context.MODE_PRIVATE); &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dès lors, nous pouvons restaurer cet objet dans n’importe quelle activité, exactement comme un ''Singleton''. &lt;br /&gt;
Pour créer ou modifier des préférences, nous devons appeler la méthode ''edit()'' de l’objet ''SharedPreferences''. Une fois la valeur modifiée, il est impératif de faire appel à la méthode ''apply()'' ou ''commit()'' de l’objet afin de sauvegarder les changements apportés.	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;final SharedPreferences.Editor editor = prefs.edit();&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, les horaires sont stockées avec une clé de la forme « horairek », k représentant la numérotation des différentes heures saisies par l’utilisateur. Une variable « Taille » fait également partie des préférences afin de pouvoir savoir à tout moment le nombre de repas programmés par l’utilisateur. Le nom de l’animal est stocké avec la clé « Name » et le poids avec la clé « Poids ». Il est alors aisé de retrouvé les valeurs correspondantes dans les préférences et de pouvoir les supprimer de manière spécifique si nécessaire. &lt;br /&gt;
&lt;br /&gt;
Voici donc ce que cela peut nous donner :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Petfun config1.png|200px]] [[Fichier:Petfun config2.png|200px]] [[Fichier:Petfun config4.png|200px]] [[Fichier:Petfun config3.png|200px]]&lt;br /&gt;
&lt;br /&gt;
'''Contrôle du servomoteur via l'application'''&lt;br /&gt;
&lt;br /&gt;
La solution que nous avons choisi est de relier un GPIO de l’ESP8266 à un PIN digital de l’arduino. Ainsi, étant capables d’allumer une LED par appui d’une touche sur l’application mobile, nous serions capables de faire changer l’état d’un PIN de l’arduino et ainsi en fonction de cela, faire tourner le moteur. &lt;br /&gt;
En mettant en place cette méthode, nous nous sommes rendu compte que le PIN de l’arduino ne réagissait pas à du 3.3V, envoyé par le module wifi. Nous avons donc mis en place un ''high shifter'' à l’aide d’un transistor afin de faire passer la tension d’entrée de 3.3V à 5V. Sur le schéma, R1 = R2 = 10 kΩ. R3 = 100 kΩ. La tension Output mesurée est de [[Fichier:FormulePetfun.png|100px]].&lt;br /&gt;
&lt;br /&gt;
Voici le schéma : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:HighShifterPetfunPetfun.jpg|center|250px]]&lt;br /&gt;
&lt;br /&gt;
Voici la photographie du câblage :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cablage petfun.jpg|center|450px]]&lt;br /&gt;
&lt;br /&gt;
'''Aperçu final de la partie mécanique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Croquette.png|center|200px]]&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;br /&gt;
[[Fichier:Rapport_P37_damiens_dorian.pdf‎ ]]&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&lt;br /&gt;
==='''Datasheet'''===&lt;br /&gt;
ESP8266 Adafruit breakout : https://cdn-learn.adafruit.com/downloads/pdf/adafruit-huzzah-esp8266-breakout.pdf&lt;br /&gt;
&lt;br /&gt;
Arduino méga 2560 : http://www.atmel.com/Images/Atmel-2549-8-bit-AVR-Microcontroller-ATmega640-1280-1281-2560-2561_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
L'ultrason HC-SR04 : http://www.gotronic.fr/pj2-hc-sr04-utilisation-avec-picaxe-1343.pdf&lt;br /&gt;
&lt;br /&gt;
Le capteur de présence Infrarouge IRS05A : https://www.pololu.com/file/0J615/tssp77038.pdf&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P37&amp;diff=42248</id>
		<title>IMA4 2016/2017 P37</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P37&amp;diff=42248"/>
				<updated>2017-05-15T16:44:37Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Semaine 10 et + */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Cahier des charges''' ==&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
L’objectif de ce projet est de fabriquer une gamelle pour animaux connectée. Pour ce faire, trois grands axes sont à dégager : une partie informatique, électronique et mécanique. &lt;br /&gt;
&lt;br /&gt;
==== Partie mécanique ====&lt;br /&gt;
'''Structure du système'''&lt;br /&gt;
*Le réservoir. Deux systèmes peuvent être réalisés : &lt;br /&gt;
**Un système de trappes pour le distributeur : deux trappes l’une en dessous de l’autre. &lt;br /&gt;
**Un système de vis sans fin qui permettrait d’alimenter la gamelle.&lt;br /&gt;
&lt;br /&gt;
*La gamelle. Deux méthodes sont possibles :&lt;br /&gt;
**Mesure du poids en prenant une balance déjà existante et en récupérant et en traitant les sorties.&lt;br /&gt;
**Passer par un système d’estimation de volumes. Dans la gamelle, il y aurait des capteurs permettant de connaître la quantité en volume présente dans la gamelle.&lt;br /&gt;
&lt;br /&gt;
Globalement, ces systèmes sont susceptibles de changer suivant l'état de l'art qui sera réalisé par la suite.&lt;br /&gt;
&lt;br /&gt;
==== Partie électronique ====&lt;br /&gt;
*Alimentation. Deux systèmes sont envisagés pour l’alimentation : Un système nomade avec une batterie  pour permettre d’avoir une gamelle déplaçable ou un système fixe alimenté par le secteur ou en usb.&lt;br /&gt;
**Batterie : Nous avons besoin d’une batterie qui peut garder l’énergie suffisamment longtemps pour éviter de devoir recharger la gamelle trop souvent. Une durée de vie d’une semaine est envisagée au minimum.&lt;br /&gt;
**Secteur&lt;br /&gt;
&lt;br /&gt;
*Interface Homme/machine&lt;br /&gt;
**Capteurs&lt;br /&gt;
***Des LEDs couplées à un phototransistor pourraient permettre de connaître la présence ou l’absence de croquettes dans la gamelle.&lt;br /&gt;
***Ultrason pour connaître la présence ou non de l'animal devant la gamelle&lt;br /&gt;
***Autres.&lt;br /&gt;
**Indicateurs : Des indicateurs peuvent être implantés sur le système physique : des LEDS indicatrices de l’état de batterie (si l'alimentation nomade est privilégiée) ou de l’état du réservoir (plein ou vide) sont envisagés.&lt;br /&gt;
&lt;br /&gt;
==== Partie informatique ====&lt;br /&gt;
*Unité de contrôle&lt;br /&gt;
**Utilisation d’un arduino avec un module wifi dans le but de réaliser une communication externe via une application mobile Androïd par exemple. &lt;br /&gt;
**Utilisation d’un raspberry avec création d’un serveur Apache pour permettre de communiquer avec l’utilisateur.&lt;br /&gt;
**Utilisation d'un module communiquant autre que les deux cités précédemment.&lt;br /&gt;
*En bonus :&lt;br /&gt;
**Création d’un système de contrôle à distance en mettant en place une caméra afin que l’utilisateur puisse avoir des images à distance, ou simplement une caméra série afin d'obtenir des images de contrôle. Ce système n’aura pas besoin d’être temps réel. Il pourra être implémenté grâce au serveur apache de la raspberry, si l’utilisation de celle-ci est retenue.&lt;br /&gt;
**Des actionneurs pour permettre à l’utilisateur interagir avec son chat à distance (Buzzer, laser, son, …).&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel et logiciel===&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous avons réalisé l'état de l'art des gamelles connectées déjà réalisées et commercialisées. Voici le lien PDF permettant d’accéder à ce fichier.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Etat_de_l_art.pdf]]&lt;br /&gt;
&lt;br /&gt;
Finalement, nos choix techniques sont les suivants : &lt;br /&gt;
*Matériel&lt;br /&gt;
**Mécanique&lt;br /&gt;
***Un système d’hélice contrôlée par un moteur permettant de déverser des croquettes en quantités connues. (Un schéma du système sera réalisé rapidement).&lt;br /&gt;
**Électronique&lt;br /&gt;
***Un adaptateur capable de générer une tension de 5V à partir du réseau.&lt;br /&gt;
***Des LEDs infrarouges couplées à des photodiodes afin de contrôler l'état de la gamelle et du réservoir.&lt;br /&gt;
***Un servomoteur 360° afin de faire tourner le système d'hélice et permettant ainsi de déverser une dose de croquettes dans la gamelle.&lt;br /&gt;
***Des LEDs permettant de visualiser l'état du système (alimentation du circuit, réservoir vide,...) et les résistances qui vont de pair.&lt;br /&gt;
***Un capteur Ultrason afin de pouvoir vérifier la présence ou non d'un animal devant la gamelle.&lt;br /&gt;
**Informatique&lt;br /&gt;
***Un arduino Méga car l'arduino Uno sera limité lorsque nous communiquerons entre le module wifi et l'application mobile.&lt;br /&gt;
***Un module Wifi ESP8266.&lt;br /&gt;
***Une carte shield SD afin de stocker toutes les variables de l'utilisateur et de son chat.&lt;br /&gt;
***Un module horloge temps réel (RTC) afin de pouvoir programmer en fonction de l'heure qu'il est si le choix de l'utilisateur porte sur le réapprovisionnement de la gamelle de cette manière là.&lt;br /&gt;
&lt;br /&gt;
En solution de secours : &lt;br /&gt;
*Un rapsberry&lt;br /&gt;
*Une balance à modifier manuellement&lt;br /&gt;
&lt;br /&gt;
*Logiciel&lt;br /&gt;
**Solidworks afin de pouvoir concevoir les différentes parties du système mécanique.&lt;br /&gt;
**Les logiciels de programmation (Sublime, vim, emacs, gcc...)&lt;br /&gt;
&lt;br /&gt;
*Autres&lt;br /&gt;
**Utilisation des machines mises à disposition des étudiants au Fablab : découpeuse laser et imprimante 3D pour la conception de prototypes.&lt;br /&gt;
&lt;br /&gt;
==Tableau==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Composant !! Quantité requise !! Disponible (M. Redon) ? !! À commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |Émetteur et récepteur infrarouge/photodiode&lt;br /&gt;
 |Entre 6 et 7 au minimum&lt;br /&gt;
 |Une partie&lt;br /&gt;
 |Oui&lt;br /&gt;
 |1 LED infrarouge et 1 photodiode ont été empruntés&lt;br /&gt;
 |-&lt;br /&gt;
 |Adaptateur PS512S&lt;br /&gt;
 |1&lt;br /&gt;
 |Non&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Lien Gotronic : [http://www.gotronic.fr/art-adaptateur-ps512s-19913.htm]&lt;br /&gt;
 |-&lt;br /&gt;
 |Shield carte SD&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Nous avons eu une carte shield Ethernet - SD ainsi que la carte SD.&lt;br /&gt;
 |-&lt;br /&gt;
 |Module horloge temps réel (RTC)&lt;br /&gt;
 |1&lt;br /&gt;
 |Non&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Lien Gotronic : [http://www.gotronic.fr/art-module-horloge-temps-reel-ada3296-25536.htm]&lt;br /&gt;
 |-&lt;br /&gt;
 |Capteur Ultrason&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Emprunté&lt;br /&gt;
 |-&lt;br /&gt;
 |LEDs&lt;br /&gt;
 |minimum 3&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Plusieurs empruntées&lt;br /&gt;
 |-&lt;br /&gt;
 |Résistances&lt;br /&gt;
 |Une vingtaine&lt;br /&gt;
 |Oui (C205)&lt;br /&gt;
 |Non&lt;br /&gt;
 |Plusieurs empruntées&lt;br /&gt;
 |-&lt;br /&gt;
 |Arduino méga&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Un arduino méga et un arduino uno (pour les tests) ont été empruntés&lt;br /&gt;
 |-&lt;br /&gt;
 |ESP8266&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |La version 012 a été empruntée&lt;br /&gt;
 |-&lt;br /&gt;
 |Servomoteur 360&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Emprunté&lt;br /&gt;
 |-&lt;br /&gt;
 |Solution de secours : Rapsberry&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Pas encore emprunté, solution de secours&lt;br /&gt;
 |-&lt;br /&gt;
 |Solution de secours : Balance&lt;br /&gt;
 |1&lt;br /&gt;
 |Non&lt;br /&gt;
 |Non&lt;br /&gt;
 |Pas encore emprunté, solution de secours&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
*Étude et réalisation d'un système à base de LEDs infrarouges et de photodiodes afin de pouvoir estimer si la gamelle est vide ou pleine. De même pour le réservoir.&lt;br /&gt;
**Circuit d'émission : LED Infrarouge&lt;br /&gt;
**Circuit de réception : Photodiode&lt;br /&gt;
**Étude des emplacements stratégiques dans la gamelle et le réservoir&lt;br /&gt;
*Réalisation d'un prototype de gamelle&lt;br /&gt;
**Conception 3D de l'hélice sur laquelle le servomoteur va venir se greffer&lt;br /&gt;
**Conception 3D de la gamelle complète&lt;br /&gt;
**Découpage/impression de prototypes&lt;br /&gt;
*Étude de l'ESP8266&lt;br /&gt;
*Tests d'écriture et de lecture sur la carte SD depuis l'arduino&lt;br /&gt;
*Étude du module d'horloge temps réel (RTC)&lt;br /&gt;
*Contrôle des différents capteurs en incluant le servomoteur&lt;br /&gt;
*Création de l'application mobile&lt;br /&gt;
*Mise en relation des différentes parties informatiques du système&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 et + !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 3H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Réalisation de l'état de l'art&lt;br /&gt;
| &lt;br /&gt;
|6H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|-&lt;br /&gt;
|Échange quant aux technologies et au système mécanique à choisir&lt;br /&gt;
| &lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste et de la répartition des tâches&lt;br /&gt;
| &lt;br /&gt;
|2H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2H00&lt;br /&gt;
|-&lt;br /&gt;
| Recherches quant aux échelles de dosage (Quelles quantités de nourriture consomment les chats en fonction de leur poids ?)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste de matériel et établissement des besoins (meilleur rapport besoin/prix étudié)&lt;br /&gt;
| &lt;br /&gt;
|5H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5H00&lt;br /&gt;
|-&lt;br /&gt;
| Modèle 3D de l'hélice&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Modèle 3D du réservoir&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|-&lt;br /&gt;
| Étude des LEDs Infrarouge et des photodiodes&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Tests sur le module wifi ESP8266&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|8H00&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|16H00&lt;br /&gt;
|-&lt;br /&gt;
| Tests de lecture et écriture sur la carte SD&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|6H00&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|16H00&lt;br /&gt;
|-&lt;br /&gt;
| Étude du servomoteur et réalisation d'un programme le contrôlant en C&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Prototype de l'hélice et du réservoir&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|-&lt;br /&gt;
| Achat de planches pour la réalisation des prototypes de la gamelle en bois&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Étude du capteur Infrarouge et réalisation d'un programme le contrôlant en C&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main d'androïd studio et réalisation d'une ébauche d'application mobile pour notre gamelle connectée&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|10H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|13H00&lt;br /&gt;
|-&lt;br /&gt;
| Création du réseau établi entre le système et l'application android (problème avec le point d'accès)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|8H00&lt;br /&gt;
|8H00&lt;br /&gt;
|4H00&lt;br /&gt;
|24H00&lt;br /&gt;
|-&lt;br /&gt;
| Assemblage et finition de la partie mécanique&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|8H00&lt;br /&gt;
|6H00&lt;br /&gt;
|18H00&lt;br /&gt;
|-&lt;br /&gt;
| Tests sur le module temps réel&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Création de la base de donnée de l'application android et du singleton&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|10H00&lt;br /&gt;
|10H00&lt;br /&gt;
|-&lt;br /&gt;
| Liaison ESP8266 et Arduino (Software Serial) + High shifter&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8H00&lt;br /&gt;
|8H00&lt;br /&gt;
|-&lt;br /&gt;
| Application mobile : la page des configurations&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|10H00&lt;br /&gt;
|10H00&lt;br /&gt;
|-&lt;br /&gt;
| Application mobile : la page des études statistiques&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8H00&lt;br /&gt;
|8H00&lt;br /&gt;
|-&lt;br /&gt;
| Étude du capteur ultrason et réalisation d'un programme le contrôlant en C&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| TOTAL&lt;br /&gt;
|3H00&lt;br /&gt;
|17H00&lt;br /&gt;
|10H00&lt;br /&gt;
|8H00&lt;br /&gt;
|14H00&lt;br /&gt;
|14H00&lt;br /&gt;
|13H00&lt;br /&gt;
|21H00&lt;br /&gt;
|12H00&lt;br /&gt;
|16H00&lt;br /&gt;
|49H00&lt;br /&gt;
|177H&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Préambule===&lt;br /&gt;
L’internet des objets (IoT) représente l’extension d’internet à des choses et à des lieux du monde physique (wikipédia). Les objets connectés en l’occurrence sont aujourd’hui un enjeu important. De plus en plus d’objets initialement banals se voient être connectés afin d’en améliorer l’utilisation. Lors de ce projet, nous nous intéressons aux animaux domestiques. Lorsque nous nous absentons, nous n’avons aucun contrôle sur ce qui se passe à la maison. Ainsi, nous ne pouvons pas savoir si notre animal mange ou se porte bien. De plus, nous n’avons aucun retour sur ce que notre chien ou chat notamment a consommé. Est-ce qu’il se nourrit bien ? À quelle fréquence ? Dès lors, il est impensable de s’absenter sur le long terme ou un week-end sans faire intervenir un tiers pour nourrir notre cher animal. Nous pouvons également penser à des animaux qui seraient dangereusement en surpoids. Nous voudrions surveiller leur alimentation mais cela demande une surveillance constante qui n’est pas forcément envisageable. L’objectif de ce projet est de répondre à ces questions et besoins. Et si nous connections une gamelle à une application ?&lt;br /&gt;
&lt;br /&gt;
[[Image:Gamelle-inox-couleur-antiderapante-6-tailles.jpg|center|200px]].&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
L’objectif de la première semaine a été tout d’abord de lister les différentes tâches à réaliser tout au long du projet. Cette liste sera bien sûr modifiable en fonctions des difficultés ou contraintes rencontrées au cours du projet. Cette liste a été rajoutée à la suite du cahier des charges.&lt;br /&gt;
Ensuite, un état de l’art a été réalisé. Nous avons ainsi pu clairement définir le schéma de principe de notre gamelle et le mécanisme de réapprovisionnement choisi. Voici de nouveau le lien vers notre état de l'art : [[Fichier:Etat_de_l_art.pdf]]&lt;br /&gt;
&lt;br /&gt;
Faisons un point rapide sur ces choix. Un système d’ « hélice » est privilégié afin de réapprovisionner la gamelle. Il s’agit en fait d’un cylindre plat qui sera placé en sortie du réservoir. Le réservoir sera moins large en sortie vers la gamelle qu’à son sommet, en entrée des croquettes. Cela permettra aux croquettes de s’introduire facilement dans notre système d’ « hélice ». Ce cylindre serait  troué de part et d’autre afin de pouvoir contenir une certaine dose de croquettes. Ainsi, nous pouvons réapprovisionner la gamelle en fonction de ce dosage.&lt;br /&gt;
Enfin, nous nous sommes attardés sur l’organisation et la répartition de ces tâches afin de pouvoir détailler une liste de matériel. Cette dernière a été ajoutée au wiki à la suite de la liste des tâches.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Lors de cette deuxième semaine, plusieurs tâches ont été réalisées. Tout d’abord, un début de modélisation du système a été effectué sous Solidworks. Pour ce faire, nous avons dû décider de combien de grammes de croquettes à la fois nous pouvons réapprovisionner la gamelle. Ainsi, nous avons effectué des recherches quant à la consommation de nourriture journalière d’un chat. Étant donné qu’un chien consomme davantage de croquettes qu’un chat, nous nous basons sur la consommation de ce dernier, quitte à donner plusieurs doses si l’animal est un chien. Voici un tableau sur lequel nous allons nous baser :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|+ '''Tableau de référence'''&lt;br /&gt;
|-&lt;br /&gt;
! scope=col | Poids du chat adulte&lt;br /&gt;
! scope=col | 1-3 kg&lt;br /&gt;
! scope=col | 4 kg&lt;br /&gt;
! scope=col | 5 kg&lt;br /&gt;
! scope=col | 6 kg&lt;br /&gt;
|-&lt;br /&gt;
|'''Quantités journalières (en grammes)'''&lt;br /&gt;
|15-50g&lt;br /&gt;
|50-65g&lt;br /&gt;
|65-70g&lt;br /&gt;
|70-90g&lt;br /&gt;
|-&lt;br /&gt;
|'''Quantités journalières (avec un bol doseur de 300 mL)'''&lt;br /&gt;
|x 0.1 - 0.3&lt;br /&gt;
|x 0.3 - 0.4&lt;br /&gt;
|x 0.4&lt;br /&gt;
|x 0.4 - 0.6&lt;br /&gt;
|}&lt;br /&gt;
Ce tableau marche pour les croquettes Ultra premium direct en particulier.&lt;br /&gt;
&lt;br /&gt;
Grâce à ce tableau, nous pensons que réapprovisionner la gamelle par dose de 15g est approprié. Or,[[Image:Formule1.png|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Maintenant, il est nécessaire de calculer le rayon de l’hélice permettant au système de doser 15g à la fois.&lt;br /&gt;
&lt;br /&gt;
Nous voulons pouvoir doser 15g : [[Image:Formule2.png|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Posons n = 4 car nous souhaitons avec 2 doseurs, un de chaque côté de l’hélice : [[Image:Formule3.png|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Prenons à présent h = 4 cm ; h étant la largeur de l’ouverture conduisant à la gamelle. Nous avons alors : &lt;br /&gt;
&lt;br /&gt;
[[Image:Formule4.png|center|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Voici une image de l'hélice modélisée en conséquent : &lt;br /&gt;
&lt;br /&gt;
[[Image:Hélice_image.jpg|vignette|center|500px|Modélisation de l'hélice en 3D.]].&lt;br /&gt;
&lt;br /&gt;
*D’un autre côté, des tests ont été réalisés en ce qui concerne le dispositif LED infrarouge-phototransistor.&lt;br /&gt;
&lt;br /&gt;
'''Présentation de l'expérimentation :'''&lt;br /&gt;
&lt;br /&gt;
Nous utilisons une LED IR SFH 4554 pour l’émission et une pour la réception. Pour des raisons de simplicité de fonctionnement, l'allumage des LEDs ne sera pas piloté. Elles seront continuellement allumées (aucune information n'est à transmettre).&lt;br /&gt;
&lt;br /&gt;
À la réception, nous utilisons une photodiode en pull-down  avec une résistance pour contrôler l'intensité dans cette dernière. Nous relions ce montage à un arduino pour vérifier jusqu'à quelle portée nous détectons le signal de la led émettrice. Grâce à cela, nous serons à même de définir les emplacements des émetteurs/récepteurs dans la gamelle et dans le réservoir ainsi que  la taille de ces derniers. Voici le schéma de principe :&lt;br /&gt;
&lt;br /&gt;
[[Image:Schema_diode_phototransistor.png|vignette|center|500px|Schéma de principe.]].&lt;br /&gt;
&lt;br /&gt;
'''Test rapide de la portée :'''&lt;br /&gt;
&lt;br /&gt;
Calcul des résistances :&lt;br /&gt;
&lt;br /&gt;
Réception : une résistance de 4.7 kΩ est placée.&lt;br /&gt;
&lt;br /&gt;
Émission : nous alimentons la LED en 5 V. Elle possède un courant &amp;lt;math&amp;gt;U_d = 1.2 V&amp;lt;/math&amp;gt; pour 20 mA et supporte 100 mA continue. À 100 mA, &amp;lt;math&amp;gt;U_d = 1.4 V&amp;lt;/math&amp;gt;. Pour être certains d'avoir la meilleure portée possible, nous nous rapprochons des 100 mA. Ainsi, pour le dimensionnement de R nous obtenons :&lt;br /&gt;
&lt;br /&gt;
[[Image:Formule5.png|center|upright=50]]&lt;br /&gt;
1. A.N. : &amp;lt;math&amp;gt;V_{CC} = 5V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;U_d = 1.4V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;I_f = 0.1A&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
R = 36Ω. Soit, en normalisant, '''R = 47Ω'''.&lt;br /&gt;
&lt;br /&gt;
Avec ces données, nous obtenons une portée maximale de 30 cm.&lt;br /&gt;
&lt;br /&gt;
2. Nous faisons un autre test avec une intensité plus basse :&lt;br /&gt;
A.N. : &amp;lt;math&amp;gt;V_{CC} = 5V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;U_d = 1.2V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;I_f = 001A&amp;lt;/math&amp;gt;&lt;br /&gt;
R = 380Ω. Soit, en normalisant, '''R = 330Ω'''.&lt;br /&gt;
Avec ces données, nous obtenons une portée maximale de 22 cm.&lt;br /&gt;
&lt;br /&gt;
L'intérêt de connaître cette portée est que nous allons pouvoir adapter la taille du réservoir et de la gamelle en elle même afin de rendre notre dispositif réalisable. À titre de rappel, nous utilisons ce système afin de savoir si la gamelle est vide (Ce système fonctionnant en tout ou rien) et également afin de connaître le niveau approximatif des croquettes dans le réservoir. &lt;br /&gt;
&lt;br /&gt;
*Enfin, pour travailler, nous avons à notre disposition deux arduino : un arduino ''uno'' et un arduino ''méga''. L’utilisation du module wifi ESP8266 nous impose de travailler avec un arduino ''méga''. Cependant, les tests tels que pour le système LED infrarouge-phototransistor peuvent être réalisés indépendamment sur l’arduino ''uno''. Ainsi, nous pouvons travailler à deux en parallèle sur des arduino différents. Cependant, il a fallu réadapter le makefile permettant de flasher l’arduino à un arduino ''méga'' car celui que nous possédions ne fonctionnait que pour un arduino ''uno''. (Un « -D » étant nécessaire dans la ligne de commande pour flasher l’arduino dans le cas d’un ''méga'', qui ne l’était pas pour l’arduino ''uno''.)&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Lors de cette troisième semaine, nous réalisé des tests sur les deux arduinos. &lt;br /&gt;
&lt;br /&gt;
==== Le servomoteur et sa PWM ====&lt;br /&gt;
Tout d’abord, le premier test porte sur le servomoteur prévu pour faire tourner le système d’hélice et réapprovisionner la gamelle.&lt;br /&gt;
&lt;br /&gt;
Le servomoteur que nous utilisons est un servomoteur à courant continue. Il a l’avantage de pouvoir être contrôlé en vitesse et de pouvoir tourner à plus de 180°. &lt;br /&gt;
&lt;br /&gt;
Pour alimenter un servomoteur, il faut brancher ses trois connectiques sur l’alimentation 5V de l’arduino, sur la masse et sur une broche PWM. &lt;br /&gt;
&lt;br /&gt;
En effet, la consigne envoyée à un servomoteur est de type PWM (Pulse Width Modulation). Ce signal permet de faire varier la durée en état « haut » du signal grâce à la consigne que nous lui donnons. Voici un schéma montrant quelques exemples de modifications de la durée d’un état « haut » :&lt;br /&gt;
[[Image:PWM explications.png|center|300px]].&lt;br /&gt;
&lt;br /&gt;
La difficulté a été de programmer ce servomoteur en passant par le langage C. En effet, arduino IDE, il est plus aisé de le faire puisqu’il existe une bibliothèque servo.h permettant de programmer des servomoteurs facilement. En C, il a fallu se pencher sur le fonctionnement et le contrôle d’une PWM grâce aux différents registres de l’arduino. &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, il faut configurer les registres TCCR1A et TCCR1B afin d’activer la PWM en mode non-inversé et à fréquence élevée.  &lt;br /&gt;
&lt;br /&gt;
Enfin, il faut activer la PIN5 du port B en sortie (Pin PWM).&lt;br /&gt;
&lt;br /&gt;
Rentrons un peu plus dans le détail quant à la configuration des deux registres TCCR1A et TCCR1B.&lt;br /&gt;
TCCR0A = 1000 0001 = 0x81 et TCCR0B = 0000 0101  = 0x05&lt;br /&gt;
[[Image:TCCR0A.png|center|650px]].&lt;br /&gt;
[[Image:TCCR0B.png|center|650px]].&lt;br /&gt;
&lt;br /&gt;
TCCR0A : &lt;br /&gt;
   COM0A1 = 1 COM0A0 = 0 =&amp;gt; non-inverting mode&lt;br /&gt;
&lt;br /&gt;
   COM0B1 = 0 COM0B0 = 0 =&amp;gt; mode standard&lt;br /&gt;
&lt;br /&gt;
   WGM01 = 0 WGM00 = 1 =&amp;gt; PWM mode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TCCR0B : &lt;br /&gt;
   FOC0A = 0 FOC0B = 0 =&amp;gt; car PWM mode&lt;br /&gt;
&lt;br /&gt;
   WGM02 = 0 =&amp;gt; PWM mode&lt;br /&gt;
&lt;br /&gt;
   SC02 = 1 CS01 = 0 CS00 = 1 =&amp;gt; clk (entrée/sortie) /1024&lt;br /&gt;
&lt;br /&gt;
Pour connaître ces résultats, les tableaux descriptifs sont disponibles dans la datasheet de l'arduino méga, disponible dans les références à la fin du wiki.&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps, en modifiant directement le registre OCR0A, nous envoyons directement une commande au servomoteur. La durée en état « haut » est ainsi proportionnelle à la consigne saisie dans OCR0A.&lt;br /&gt;
&lt;br /&gt;
Le servomoteur tourne bien différemment en fonction de la valeur saisie dans OCR0A. Maintenant, il reste à comprendre comment contrôler de manière précise le servomoteur et sa position en fonction de la consigne.&lt;br /&gt;
&lt;br /&gt;
==== Le capteur ultrason ====&lt;br /&gt;
&lt;br /&gt;
=====  Présentation =====&lt;br /&gt;
Nous pensons utiliser le module HC-SR04 couplé à un arduino pour détecter la présence de l’animal devant la gamelle. Cela servira à ne pas prendre en considération le contenu de la gamelle pour savoir si elle est vide ou non lorsque l’animal se nourrit. Ou encore, cela aidera afin de pouvoir réaliser un suivi à savoir : à quel moment le chat a-t-il été manger ?&lt;br /&gt;
&lt;br /&gt;
En lisant la documentation technique du HC -SR04, nous en tirons ceci :&lt;br /&gt;
&lt;br /&gt;
[[Image:US data.png|center|550px]].&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement du système est simple et qu’il suffit d'envoyer un message de 10µs minimum avec une écart de 60 ms minimum pour recevoir une réponse du capteur.&lt;br /&gt;
&lt;br /&gt;
Le capteur renvoi un signal qui a un temps proportionnel à sa distance par rapport à l’obstacle.&lt;br /&gt;
&lt;br /&gt;
=====  Expérimentation =====&lt;br /&gt;
Nous rajoutons des LESs afin d’avoir une indication lorsqu’un signal est envoyé. La valeur reçue est visualisée à l’aide de l’outil minicom, la valeur était envoyé sur le port série. Nous remarquons que le système fonctionne même si des imperfections de de mesure subsistent (dues notamment au programme). La précision du système suffit néanmoins à la détection du chat devant la gamelle.&lt;br /&gt;
&lt;br /&gt;
=====  Problème lié à l'étude =====&lt;br /&gt;
Le module utilise une fréquence de 40khz.&lt;br /&gt;
Suite à des vérifications, les chats et les chiens entendent des sons pouvant aller jusqu'à 60khz. &lt;br /&gt;
Une recherche a été effectuée sur les barrières repoussant les chiens et les chats. Malgré le peu de documentation technique que nous avons trouvé, nous remarquons  que les fréquences utilisées sont de l'ordre de 25 khz. Ces fréquences sont bien loin des 40khz de notre système. Cependant, une petite expérimentation a été réalisée sur un chat de 6 ans à l’aide d’une application smartphone générant des ultrasons. Il s’avère que le chat est dérangé par ces fréquences, le chat s'en va au bout de 10 minutes d’expérience.&lt;br /&gt;
&lt;br /&gt;
=====  Conclusion =====&lt;br /&gt;
Même si le module HC-SR04 est très simple d’utilisation, nous ne pouvons continuer à nous en servir pour notre projet de gamelle connectée.&lt;br /&gt;
&lt;br /&gt;
=====  Autre alternative =====&lt;br /&gt;
* Tapis de jauge de contrainte → couvre une surface trop petite&lt;br /&gt;
* Détecteur de présence infrarouge → convient pour des objets de taille supérieure à 15 cm  &lt;br /&gt;
&lt;br /&gt;
Notre choix se porte donc sur le capteur infrarouge, que nous programmerons dans une séance ultérieure.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
La semaine a été en grande partie consacrée à la réalisation d’un prototype pour le système d’hélice et le réservoir. Tout d’abord, nous avons dû faire plusieurs aller-retour au magasin afin d’acheter des planches pour la réalisation des différents prototypes. La première planche qui a été acheté était une medium, matériel qui n’est plus accepté dans la découpeuse laser puisqu’elle encrasse le filtre et la lentille de l’appareil. Nous avons donc du aller acheter les bonnes planches. De plus, il a fallu réserver des créneaux au fabricarium et apprendre à se servir de la découpeuse laser. Le prototype final n’est pas encore assemblé puisque nous réfléchissons à un système de « pied à coulisse » afin de pouvoir choisir le dosage unitaire que peut servir l’hélice.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5 et semaine 6===&lt;br /&gt;
'''Création d’un programme contrôlant la lecture et l’écriture sur la carte SD'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Pour rendre notre projet innovant par rapport aux autres gamelles connectées proposées sur le marché, nous avons décidé de faire un suivi lié à l'alimentation du chat. Par exemple, nous souhaitons savoir à quels moments de la journée l’animal va manger, pendant combien de temps, en quelles quantités etc…&lt;br /&gt;
Pour cela, nous devons stocker ces différentes données. Pour ce faire, nous utiliserons le shield SD/ethernet  suivant :&lt;br /&gt;
&lt;br /&gt;
[[Image:Shield sd ethernet.jpg|vignette|center|300px|Shield SD/ethernet.]]&lt;br /&gt;
&lt;br /&gt;
*Code arduino shield Sd/ethernet&lt;br /&gt;
&lt;br /&gt;
Pour commencer, l’expérimentation du shield  a été effectuée à l’aide d’arduino IDE afin de réaliser un prototype rapide et tester si le shield est efficace et permet de répondre à nos besoins.&lt;br /&gt;
&lt;br /&gt;
Nous nous basons sur l'exemple proposé par arduino IDE suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SD.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File myFile;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  // Open serial communications and wait for port to open:&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  while (!Serial) {&lt;br /&gt;
    ; // wait for serial port to connect. Needed for native USB port only&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Initializing SD card...&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if (!SD.begin(4)) {&lt;br /&gt;
    Serial.println(&amp;quot;initialization failed!&amp;quot;);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;initialization done.&amp;quot;);&lt;br /&gt;
  myFile = SD.open(&amp;quot;test.txt&amp;quot;, FILE_WRITE);&lt;br /&gt;
&lt;br /&gt;
  if (myFile) {&lt;br /&gt;
    Serial.print(&amp;quot;Writing to test.txt...&amp;quot;);&lt;br /&gt;
    myFile.println(&amp;quot;testing 1, 2, 3.&amp;quot;);&lt;br /&gt;
    myFile.close();&lt;br /&gt;
    Serial.println(&amp;quot;done.&amp;quot;);&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.println(&amp;quot;error opening test.txt&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  myFile = SD.open(&amp;quot;test.txt&amp;quot;);&lt;br /&gt;
  if (myFile) {&lt;br /&gt;
    Serial.println(&amp;quot;test.txt:&amp;quot;);&lt;br /&gt;
    while (myFile.available()) {&lt;br /&gt;
      Serial.write(myFile.read());&lt;br /&gt;
    }&lt;br /&gt;
    myFile.close();&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.println(&amp;quot;error opening test.txt&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous remarquons que nous écrivons facilement sur la carte SD grâce à la bibliothèque disponible. En ajoutant quelques boutons et en modifiant légèrement le code, nous arrivons à sauvegarder la durée de maintien du bouton ainsi que la fréquence d’actionnement.&lt;br /&gt;
&lt;br /&gt;
*Code C Shield  SD/ethernet&lt;br /&gt;
&lt;br /&gt;
Une fois le prototype fait et fonctionnel, nous décidons d’écrire le code en C. Pour cela, nous utilisons en particulier deux bibliothèques fournies par Monsieur REDON : Sd2Card et spi.&lt;br /&gt;
Après de multiples tentatives, nous arrivons toujours à l'erreur suivante : “SD_CARD_ERROR_CMD0”. Cette dernière est liée à un timeout qui persiste malgré la modification de paramètres dépendants.&lt;br /&gt;
&lt;br /&gt;
*Changement de matériel&lt;br /&gt;
&lt;br /&gt;
Monsieur REDON nous a fourni un nouveau shield uniquement SD cette fois-ci pour tester si le problème est matériel. En voici la photographie :&lt;br /&gt;
&lt;br /&gt;
[[Image:Shield sd simple.jpg|vignette|center|300px|Shield SD.]]&lt;br /&gt;
&lt;br /&gt;
*Code C Shield SD&lt;br /&gt;
&lt;br /&gt;
En recompilant le code sur le nouveau shield, nous remarquons qu'il n'y a pu d'erreur liée à l'initialisation de la carte SD.&lt;br /&gt;
Suite à des expérimentations liées à la prise en main du code exemple donné, nous arrivons maintenant à écrire une information dans un bloc est à relire cette information plus tard.&lt;br /&gt;
&lt;br /&gt;
Voici un extrait lu depuis l’utilitaire minicom lors de la lecture de la carte SD :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;status de la carte sd = 1                                                 &lt;br /&gt;
status=0                                                                  &lt;br /&gt;
erreur=0                                                                  &lt;br /&gt;
type=3                                                                    &lt;br /&gt;
taille=7744512                                                            &lt;br /&gt;
Lecture                                                                   &lt;br /&gt;
statut=0                                                                  &lt;br /&gt;
bloc[0]=1 bloc[1]=0 bloc[2]=aa bloc[3]=bb bloc[4]=cc bloc[5]=0&lt;br /&gt;
statut=0   &lt;br /&gt;
bloc[0]=dd bloc[1]=ee bloc[2]=ff bloc[3]=0 bloc[4]=0 bloc[5]=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le shield fonctionne comme désiré et nous pourrons ainsi enregistrer des informations afin de les traiter plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Configuration du module WiFi ESP8266'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
L’ESP8266 est un circuit intégré à un microcontrôleur qui fait office de module WiFi. Il possède un total de 9 GPIO (3.3V) ce qui lui permet d’être utilisé indépendamment, sans même se connecter à un autre microcontrôleur. La datasheet de ce composant est disponible dans la rubrique « Datasheet » en bas de page. Pour notre projet, l’utilisation seule de ce module ne suffisait pas. C’est pourquoi, nous le connectons à un arduino afin de pouvoir profiter des différentes entrées/sorties de ce microcontrôleur. Voici une photographie du composant en question :&lt;br /&gt;
&lt;br /&gt;
[[Image:Esp8266.jpg|vignette|center|300px|Shield SD.]]&lt;br /&gt;
&lt;br /&gt;
L'adresse IP de notre ESP8266 s'obtient en connectant notre composant à un réseau local. Ainsi, nous savons que cette adresse est la suivante : 192.168.43.53 .&lt;br /&gt;
&lt;br /&gt;
*Programmation du module WiFi en C&lt;br /&gt;
&lt;br /&gt;
De nombreux problèmes ont été rencontrés pour configurer l’ESP8266 en C. Le programme devant être directement chargé sur ce dernier, de nombreuses erreurs en ont résulté. Après de nombreuses heures passées à essayer de régler ces problèmes, nous avons discuté de cela avec l’un de nos encadrant, M. REDON, qui nous a autorisé à programmer le module WiFi directement sur arduino IDE, puisqu’une bibliothèque existante rend la tâche moins ardue. De ce fait, l’avantage de l’ESP8266 est que nous chargeons un programme directement sur ce dernier. Ainsi, nous pouvons programmer le reste de notre projet en C, en compilant et téléversant le fichier sur l’arduino sans perturber le fonctionnement du module WiFi.&lt;br /&gt;
&lt;br /&gt;
*Programmation du module WiFi sur arduino IDE&lt;br /&gt;
&lt;br /&gt;
Tout d’abord, lors de l’installation d’arduino IDE, il faut veiller à ce que la version soit suffisamment récente pour pouvoir y télécharger des « boards ». En effet, il faut, grâce à un lien disponible sur le site d’arduino, ajouter l’ESP8266 en tant que board dans le logiciel afin que le composant puisse être reconnu afin de téléverser un programme. &lt;br /&gt;
Ensuite, l’ESP doit être connectée en USB sur à l’ordinateur afin qu’elle soit visible sur son port propre (USB0 en l’occurrence). Ainsi, lors du téléversement du fichier, il faut sélectionner ce port dans la liste de ceux disponible. (Beaucoup de soucis ont été rencontrés à ce propos, l’ESP n’étant pas toujours visible comme étant disponible sur arduino IDE). &lt;br /&gt;
Enfin, un test basique a été réalisé qui consiste à faire clignoter une LED connectée à un GPIO de l’ESP et à se connecter à un réseau WiFi. L’avantage de programmer en arduino IDE est que, par un simple « #include &amp;lt;ESP8266WiFi.h&amp;gt; », nous ajoutons la bibliothèque propre à notre module WiFi. La fonction WiFi.begin permet alors de se connecter facilement à un réseau local en passant en paramètres le nom du réseau sans fil (SSID) ainsi que son mot de passe. &lt;br /&gt;
&lt;br /&gt;
Voici une visualisation des informations envoyées sur l'interface série :&lt;br /&gt;
&lt;br /&gt;
[[Image:Capture esp.png|vignette|center|500px|Visualisation sur l'interface série.]]&lt;br /&gt;
&lt;br /&gt;
*Réseau&lt;br /&gt;
&lt;br /&gt;
La question de la connexion réseau entre le module WiFi et l’application mobile, que nous allons bientôt réaliser, se pose. Nous avons travaillé également sur cette partie lors de la semaine 6. Cependant, nous expliciterons cette partie un peu plus tard afin d’aborder en même temps la partie réseau du côté de l’application mobile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
'''Capteur Infrarouge IRS05A'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Dans la partie liée au suivi de l'alimentation, nous avons besoin d'un détecteur de présence afin de savoir si le chat est en train de se nourrir ou pas. Pour cela, nous avions testé le module HC-SR04, expérimentation qui n'avait pas aboutie due au fait que le chat entende les ultrasons. Nous avons choisi en remplacement le module irs05a. En voici une photographie :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:IRS05A.jpg|center|200px]]&lt;br /&gt;
&lt;br /&gt;
*Programme C&lt;br /&gt;
&lt;br /&gt;
En étudiant la datasheet du composant, nous trouvons ceci : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour l'expérimentation, nous avons juste besoin de commander l'entrée enable et de placer une LED à la sortie output afin de visualiser si le module détecte ou non un objet. Suite à cette expérimentation, nous avons pu définir la zone de détection du module. Voici un schéma explicatif :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:IRS05A extrait datasheet.png|center|400px]]&lt;br /&gt;
&lt;br /&gt;
Grâce à ce schéma, nous avons pu faire un choix matériel quant à celui de l’emplacement de nos deux capteurs de présence. Ils seront disposés comme suit :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema ir disposition.jpg|center|200px]]&lt;br /&gt;
&lt;br /&gt;
'''Application mobile'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
L’objectif de cette semaine a été en partie de se familiariser avec l’environnement de développement intégré (IDE) d’Android Studio. Sous Android, il est commun de passer par cette plateforme afin de programmer différentes applications mobiles. Cela se code en java. &lt;br /&gt;
&lt;br /&gt;
*Application pour la gamelle connectée&lt;br /&gt;
&lt;br /&gt;
Tout d’abord, le domaine des applications mobiles est très complexe. De plus, la documentation technique de java est également très fournie. Cela a rendu la tâche de réaliser une application android basique très longue. Finalement, nous voulons créer une application mobile permettant de visualiser les statistiques de son animal,  de contrôler la gamelle manuellement ou de programmer des modes pour l’alimenter. Pour le moment, le squelette général a été créé, permettant d’afficher de nouvelles fenêtres à chaque choix de « mode ».  Voici des screenshots de l’application actuelle :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:App premiere page.png|200px]] [[Fichier:Onglet1.png|200px]] [[Fichier:Onglet2.png|200px]] [[Fichier:Onglet3 en cours.png|200px]] &lt;br /&gt;
&lt;br /&gt;
*Réseau &lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons voulu aller plus loin dans la fenêtre consacrée au réapprovisionnement manuel. En effet, nous souhaitons réaliser un test simple qui consiste à allumer une LED connectée à un GPIO de l’ESP8266 par simple appui d’un bouton depuis l’application mobile. Le problème qui s’est alors posé a été celui de créer un lien serveur/client entre le module WiFi et l’application mobile. L’idée serait alors de créer un serveur TCP sur arduino IDE qui se chargerait sur l’ESP8266 et de créer, à l’aide de sockets en java, un client sur l’application mobile. Le serveur TCP a été réalisé sur l’arduino mais n’a pas encore pu être testé. La réalisation du client sur l’application mobile est l’objet de la semaine 8, les tests seront alors réalisés et explicités à ce moment là.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8 et 9===&lt;br /&gt;
'''Application mobile, partie réseau'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Le serveur TCP réalisé sous arduino IDE directement sur le module WiFi a été testé à l’aide de la commande nc. En effet, nous avons utilisé un terminal téléchargé sur le téléphone afin de connecter le module WiFi et le téléphone sur le même réseau. En envoyant les requêtes directement via la commande nc, nous sommes capables d’allumer et d’éteindre la LED connectée au GPIO de l’ESP8266. Maintenant, il faut réaliser la même chose mais côté application mobile.&lt;br /&gt;
&lt;br /&gt;
La partie concernant la création du socket et l’envoi de données à l’esp8266 nous a pris beaucoup de temps. En effet, le problème ne venait pas de notre code mais simplement du fait que la version android du téléphone utilisé comme point d’accès internet empêchait l’application de connecter la socket à l’adresse IP du module WiFi. Après avoir configuré un routeur et connecté le module WiFi et le téléphone dessus, nous étions capable d’envoyer des requêtes au module WiFi afin qu’il allume une LED notamment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Principe&lt;br /&gt;
&lt;br /&gt;
Il est préférable de réaliser la partie réseau d’une application mobile via un thread afin de rendre l’application la plus fluide possible. Par exemple, l’appui du bouton ON permet de modifier une chaine de caractère et lance le thread d’envoi. Dans ce thread, l’application connecte la socket au module WiFI à l’aide de son adresse IP et du port de communication spécifié dans le programme du serveur TCP sur arduino IDE. Ensuite, la socket se charge d’envoyer la chaine de caractère à l’esp8266. Cela se fait par l’utilisation de l’objet ''DataOutputStream'' et de sa méthode ''writeBytes'' qui permet l’envoi simple d’une chaine de caractère. &lt;br /&gt;
&lt;br /&gt;
Pour la réception des données, il s’agit du même principe mais nous utilisons l’objet DataInputStream.&lt;br /&gt;
&lt;br /&gt;
Voici un aperçu de ce qui est visualisable sur l'interface série de l'arduino IDE, les requêtes sont bien envoyées :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Serveur ok.png|center|100px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 10 et +===&lt;br /&gt;
'''La base de données sur l'application android'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons déjà les données directement sur la gamelle grâce à la carte SD. Cependant, il nous a semblé nécessaire de garder en mémoire les statistiques de notre animal de compagnie directement sur l’application. Après avoir lu le livre « L’art du développement Android » de Grant Allen, prêté notre enseignant, deux possibilités nous sont apparues. La première était de manipuler des fichiers qui seraient générés par l’application afin de garder en mémoire ce que nous souhaitons. La seconde était de créer une base de données locale grâce à la base de données installée sur Android, ''SQLite''. &lt;br /&gt;
&lt;br /&gt;
*Présentation rapide de SQLite&lt;br /&gt;
&lt;br /&gt;
''SQLite'' utilise un dialecte de SQL afin de réaliser des requêtes de manipulations de données. Les « SELECT », « INSERT », « REMOVE », peuvent ainsi être utilisées.  ''SQLite'' est particulièrement approprié pour l’utilisation android car son utilisation ne repose pas sur un modèle client-serveur (comme ''mysql'' ou ''PostgreSQL'' que nous connaissons). Ainsi, l’intégralité de la base de données est stockée dans un fichier unique.&lt;br /&gt;
&lt;br /&gt;
*Base de données&lt;br /&gt;
&lt;br /&gt;
La base de données que nous avons implémentée permet de répertorier tous les jours enregistrés par la gamelle afin de pouvoir réaliser des traitements statistiques derrière. La date a été stockée en chaine de caractère car le constructeur de la forme ''Date(int year, int month, int day)'' est obsolète pour la version de l’API que nous utilisions. Le deuxième constructeur est de la forme ''Date(long Date)'' et il faut fournir à cette méthode un nombre de millisecondes qu’elle va convertir au format Date de Java. Cela nous semblait peu pratique. &lt;br /&gt;
&lt;br /&gt;
Voici un petit tableau illustrant ce que nous souhaitons stocker dans la base de données :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tableau recap bdd.png|center|450px]]&lt;br /&gt;
&lt;br /&gt;
Trois classes ont été crées : Jour.java, JoursBDD.java et MaBaseSQLite.java.&lt;br /&gt;
&lt;br /&gt;
Voici un schéma UML résumant ces trois classes :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:BDD_lulu.png|center|700px]]&lt;br /&gt;
&lt;br /&gt;
'''La base de données et Singleton'''&lt;br /&gt;
&lt;br /&gt;
Notre base de donnée étant créée et fonctionnelle, nous avions besoin de l’avoir à disposition n’importe où dans l’application. Or, passer un objet d’une page à une autre est simple pour des objets peu complexes. Cependant, il était plus difficile de passer notre base de données avec les méthodes traditionnelles utilisées auparavant. Nous avons donc utilisé un singleton. Le singleton est une instance unique d’une classe. Cela permet à la fois de récupérer facilement cette instance partout dans l’application mais cela permet également de converser une unicité de cette dernière, ce qui est important pour  une base de données. Ainsi, nous avons modifié les classes décrites précédemment afin d’implémenter le singleton. &lt;br /&gt;
&lt;br /&gt;
Deux variables ont été ajoutées à la classe joursBDD : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;private static Context context;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;private static JoursBDDSingleton mJoursBDDSingleton;  //instance unique&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deux méthodes sont également concernées dans ce changement :&lt;br /&gt;
&amp;lt;pre&amp;gt;//Méthode de restauration de contexte&lt;br /&gt;
public JoursBDD(Context context)&lt;br /&gt;
{&lt;br /&gt;
    this.context = context;&lt;br /&gt;
    //creation de la base de donnees&lt;br /&gt;
    maBaseSQLite = new MaBaseSQLite(context, NOM_BDD, null, VERSION_BDD);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Methode de recuperation de l'instance de la BDD&lt;br /&gt;
public static synchronized JoursBD getInstance(Context context){&lt;br /&gt;
    //Création de la base de données et de sa table&lt;br /&gt;
    if(mJoursBDD==null) {&lt;br /&gt;
        //CreateJoursBDD(context);&lt;br /&gt;
        mJoursBDD = new JoursBDD(context);&lt;br /&gt;
    }&lt;br /&gt;
    return mJoursBDD;&lt;br /&gt;
} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, juste un réalisant une récupération de l’instance grâce à  l’appel de la méthode getInstance : JoursBDD.getInstance(this); , il est aisé de le faire dans une nouvelle activité.&lt;br /&gt;
&lt;br /&gt;
'''Le traitement des données'''&lt;br /&gt;
&lt;br /&gt;
Une partie « statistiques » a été ajoutée à l’application mobile. Elle a pour but l’étude de l’alimentation de l’animal grâce à l’utilisation de graphiques et de tableaux. Afin de rendre la chose plus visuelle, l’utilisateur peut sélectionner soit un histogramme, soit un graphique linéaire, soit un tableau de données grâce à des radio boutons. Ensuite, l’utilisateur sélectionne soit les 7 derniers jours soit le dernier mois via un simple bouton. &lt;br /&gt;
Voici un aperçu de la première page :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:statistiques_tableau_petfun.png|center|200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Présentation rapide de achartengine :&lt;br /&gt;
Afin de réaliser l’affichage de graphiques, nous avons utilisé une bibliothèque appelée ''achartengine''. Cette bibliothèque permet la personnalisation de graphiques et l’affichage sous forme d’histogramme ou encore de graphiques linéaires des données. Cette bibliothèque facilite la dynamisation de l’activité. Nous restant peu de temps dans le projet, nous avons décidé d’exploiter cette ressource afin de réaliser une page propre et personnalisée. Nous pouvons utiliser cette bibliothèque en l’ajoutant dans les fichiers ''gradle'' du projet.&lt;br /&gt;
&lt;br /&gt;
Voici les graphiques que nous affichons :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Graphiques stats petfun1.png|200px]] [[Fichier:Graphiques stats petfun2.png|200px]]&lt;br /&gt;
&lt;br /&gt;
*Limites et améliorations :&lt;br /&gt;
L’idée d’avoir créée un bouton permettant d’afficher un graphique de la dernière semaine avait pour but une amélioration par la suite. En effet, l’objectif est de pouvoir, une fois le graphique affiché, passer d’une semaine à une autre. De même pour les mois, nous souhaiterions pouvoir, à partir du dernier mois, afficher les précédents en ''slidant'' le graphique ou en appuyant sur une touche. &lt;br /&gt;
&lt;br /&gt;
'''Configuration des paramètres'''&lt;br /&gt;
&lt;br /&gt;
*Introduction &lt;br /&gt;
&lt;br /&gt;
Une page de permettant de configurer les paramètres de l'application a été ajoutée à l’application mobile. Elle a pour but d’enregistrer les heures de repas de l'animal, le poids contenu dans la gamelle, le nom de l’animal ou encore sa photographie. Le poids contenu dans la gamelle doit être notifié car cette dernière est ajustable grâce à des rails présents sur la gamelle et ajustables. Ainsi, l’utilisateur peut doser la quantité qu’il souhaite. Il devra alors le notifier dans l’application afin que le traitement des données en tienne compte.&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Dans l’activité de contrôle ''automatique'', il s’agit en fait de configurer des paramètres. Sur cette page, les paramètres actuels de la gamelle sont affichés à l’écran. L’utilisateur peut dès lors, via des boutons, sélectionner deux activités : une pour changer les paramètres propres à la gamelle et l’autre pour changer ceux propres à l’animal. &lt;br /&gt;
&lt;br /&gt;
*Paramètres de la gamelle&lt;br /&gt;
&lt;br /&gt;
Dans les paramètres de la gamelle, deux choses sont configurables : les heures de repas de l’animal et la quantité de croquettes ajustée sur la gamelle. Afin de rentrer les heures de repas, le widget ''TimePicker'' a été utilisé et configuré en format 24 heures. L’appui de la touche « AJOUT HEURE » permet l’ajout de l’heure saisi sur le ''TimePicker'' dans les paramètres de l’application. De plus, afin de saisir le poids de la gamelle, un simple ''EditText'' permet de le faire. Si l’utilisateur ne saisi pas un nombre, un message s’affiche à l’écran le prévenant du problème de format.&lt;br /&gt;
&lt;br /&gt;
L’appui de la touche « VALIDER CONFIGURATION » permet la sauvegarde de la saisie et le retour à la première activité. &lt;br /&gt;
&lt;br /&gt;
L’appui de la touche « SUPPRIMER CONFIGURATION » permet la suppression des heures de repas enregistrées dans l’application.&lt;br /&gt;
&lt;br /&gt;
*Paramètres de l’animal&lt;br /&gt;
&lt;br /&gt;
Dans les paramètres de l’animal, le nom ainsi que la photographie de ce dernier peuvent être ajoutés. Le nom est simplement enregistré grâce à un ''EditText''. L’avatar peut être cherché par l’utilisateur dans ses fichiers de téléphone. (Des permissions spécifiques sont nécessaires). L'avatar s'affiche alors en première page de l'application.&lt;br /&gt;
&lt;br /&gt;
Maintenant, la question d’enregistrer tous ses paramètres s’est posée. En effet, une fois l’application fermée, tous les objets et toutes les variables créées dans l’application sont désallouées. Les paramètres rentrés par l’utilisateur sont alors perdus. &lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons fait le choix de modifier les préférences de l’application. Ces préférences renseignent des paires clé-valeur de données.&lt;br /&gt;
&lt;br /&gt;
*SharePreferences&lt;br /&gt;
&lt;br /&gt;
Nous devons créer un objet ''SharePreferences'' via la méthode ''getSharedPreferences'' en lui attribuant un nom unique et en privatisant son accès. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; final SharedPreferences prefs = getSharedPreferences(&amp;quot;Configuration&amp;quot;, Context.MODE_PRIVATE); &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dès lors, nous pouvons restaurer cet objet dans n’importe quelle activité, exactement comme un ''Singleton''. &lt;br /&gt;
Pour créer ou modifier des préférences, nous devons appeler la méthode ''edit()'' de l’objet ''SharedPreferences''. Une fois la valeur modifiée, il est impératif de faire appel à la méthode ''apply()'' ou ''commit()'' de l’objet afin de sauvegarder les changements apportés.	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;final SharedPreferences.Editor editor = prefs.edit();&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, les horaires sont stockées avec une clé de la forme « horairek », k représentant la numérotation des différentes heures saisies par l’utilisateur. Une variable « Taille » fait également partie des préférences afin de pouvoir savoir à tout moment le nombre de repas programmés par l’utilisateur. Le nom de l’animal est stocké avec la clé « Name » et le poids avec la clé « Poids ». Il est alors aisé de retrouvé les valeurs correspondantes dans les préférences et de pouvoir les supprimer de manière spécifique si nécessaire. &lt;br /&gt;
&lt;br /&gt;
Voici donc ce que cela peut nous donner :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Petfun config1.png|200px]] [[Fichier:Petfun config2.png|200px]] [[Fichier:Petfun config4.png|200px]] [[Fichier:Petfun config3.png|200px]]&lt;br /&gt;
&lt;br /&gt;
'''Contrôle du servomoteur via l'application'''&lt;br /&gt;
&lt;br /&gt;
La solution que nous avons choisi est de relier un GPIO de l’ESP8266 à un PIN digital de l’arduino. Ainsi, étant capables d’allumer une LED par appui d’une touche sur l’application mobile, nous serions capables de faire changer l’état d’un PIN de l’arduino et ainsi en fonction de cela, faire tourner le moteur. &lt;br /&gt;
En mettant en place cette méthode, nous nous sommes rendu compte que le PIN de l’arduino ne réagissait pas à du 3.3V, envoyé par le module wifi. Nous avons donc mis en place un ''high shifter'' à l’aide d’un transistor afin de faire passer la tension d’entrée de 3.3V à 5V. Sur le schéma, R1 = R2 = 10 kΩ. R3 = 100 kΩ. La tension Output mesurée est de [[Fichier:FormulePetfun.png|100px]].&lt;br /&gt;
&lt;br /&gt;
Voici le schéma : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:HighShifterPetfunPetfun.jpg|center|250px]]&lt;br /&gt;
&lt;br /&gt;
Voici la photographie du câblage :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Cablage petfun.jpg|center|450px]]&lt;br /&gt;
&lt;br /&gt;
'''Aperçu final de la partie mécanique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Croquette.png|center|200px]]&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;br /&gt;
[[Fichier:Rapport_P37_damiens_dorian.pdf‎ ]]&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&lt;br /&gt;
==='''Datasheet'''===&lt;br /&gt;
ESP8266 Adafruit breakout : https://cdn-learn.adafruit.com/downloads/pdf/adafruit-huzzah-esp8266-breakout.pdf&lt;br /&gt;
&lt;br /&gt;
Arduino méga 2560 : http://www.atmel.com/Images/Atmel-2549-8-bit-AVR-Microcontroller-ATmega640-1280-1281-2560-2561_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
L'ultrason HC-SR04 : http://www.gotronic.fr/pj2-hc-sr04-utilisation-avec-picaxe-1343.pdf&lt;br /&gt;
&lt;br /&gt;
Le capteur de présence Infrarouge IRS05A : https://www.pololu.com/file/0J615/tssp77038.pdf&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Cablage_petfun.jpg&amp;diff=42247</id>
		<title>Fichier:Cablage petfun.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Cablage_petfun.jpg&amp;diff=42247"/>
				<updated>2017-05-15T16:43:11Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Cablage_petfun.png&amp;diff=42246</id>
		<title>Fichier:Cablage petfun.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Cablage_petfun.png&amp;diff=42246"/>
				<updated>2017-05-15T16:35:58Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P37&amp;diff=42245</id>
		<title>IMA4 2016/2017 P37</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=IMA4_2016/2017_P37&amp;diff=42245"/>
				<updated>2017-05-15T16:32:04Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : /* Semaine 10 et + */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Cahier des charges''' ==&lt;br /&gt;
&lt;br /&gt;
===Présentation générale du projet=== &lt;br /&gt;
L’objectif de ce projet est de fabriquer une gamelle pour animaux connectée. Pour ce faire, trois grands axes sont à dégager : une partie informatique, électronique et mécanique. &lt;br /&gt;
&lt;br /&gt;
==== Partie mécanique ====&lt;br /&gt;
'''Structure du système'''&lt;br /&gt;
*Le réservoir. Deux systèmes peuvent être réalisés : &lt;br /&gt;
**Un système de trappes pour le distributeur : deux trappes l’une en dessous de l’autre. &lt;br /&gt;
**Un système de vis sans fin qui permettrait d’alimenter la gamelle.&lt;br /&gt;
&lt;br /&gt;
*La gamelle. Deux méthodes sont possibles :&lt;br /&gt;
**Mesure du poids en prenant une balance déjà existante et en récupérant et en traitant les sorties.&lt;br /&gt;
**Passer par un système d’estimation de volumes. Dans la gamelle, il y aurait des capteurs permettant de connaître la quantité en volume présente dans la gamelle.&lt;br /&gt;
&lt;br /&gt;
Globalement, ces systèmes sont susceptibles de changer suivant l'état de l'art qui sera réalisé par la suite.&lt;br /&gt;
&lt;br /&gt;
==== Partie électronique ====&lt;br /&gt;
*Alimentation. Deux systèmes sont envisagés pour l’alimentation : Un système nomade avec une batterie  pour permettre d’avoir une gamelle déplaçable ou un système fixe alimenté par le secteur ou en usb.&lt;br /&gt;
**Batterie : Nous avons besoin d’une batterie qui peut garder l’énergie suffisamment longtemps pour éviter de devoir recharger la gamelle trop souvent. Une durée de vie d’une semaine est envisagée au minimum.&lt;br /&gt;
**Secteur&lt;br /&gt;
&lt;br /&gt;
*Interface Homme/machine&lt;br /&gt;
**Capteurs&lt;br /&gt;
***Des LEDs couplées à un phototransistor pourraient permettre de connaître la présence ou l’absence de croquettes dans la gamelle.&lt;br /&gt;
***Ultrason pour connaître la présence ou non de l'animal devant la gamelle&lt;br /&gt;
***Autres.&lt;br /&gt;
**Indicateurs : Des indicateurs peuvent être implantés sur le système physique : des LEDS indicatrices de l’état de batterie (si l'alimentation nomade est privilégiée) ou de l’état du réservoir (plein ou vide) sont envisagés.&lt;br /&gt;
&lt;br /&gt;
==== Partie informatique ====&lt;br /&gt;
*Unité de contrôle&lt;br /&gt;
**Utilisation d’un arduino avec un module wifi dans le but de réaliser une communication externe via une application mobile Androïd par exemple. &lt;br /&gt;
**Utilisation d’un raspberry avec création d’un serveur Apache pour permettre de communiquer avec l’utilisateur.&lt;br /&gt;
**Utilisation d'un module communiquant autre que les deux cités précédemment.&lt;br /&gt;
*En bonus :&lt;br /&gt;
**Création d’un système de contrôle à distance en mettant en place une caméra afin que l’utilisateur puisse avoir des images à distance, ou simplement une caméra série afin d'obtenir des images de contrôle. Ce système n’aura pas besoin d’être temps réel. Il pourra être implémenté grâce au serveur apache de la raspberry, si l’utilisation de celle-ci est retenue.&lt;br /&gt;
**Des actionneurs pour permettre à l’utilisateur interagir avec son chat à distance (Buzzer, laser, son, …).&lt;br /&gt;
&lt;br /&gt;
===Choix techniques : matériel et logiciel===&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, nous avons réalisé l'état de l'art des gamelles connectées déjà réalisées et commercialisées. Voici le lien PDF permettant d’accéder à ce fichier.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Etat_de_l_art.pdf]]&lt;br /&gt;
&lt;br /&gt;
Finalement, nos choix techniques sont les suivants : &lt;br /&gt;
*Matériel&lt;br /&gt;
**Mécanique&lt;br /&gt;
***Un système d’hélice contrôlée par un moteur permettant de déverser des croquettes en quantités connues. (Un schéma du système sera réalisé rapidement).&lt;br /&gt;
**Électronique&lt;br /&gt;
***Un adaptateur capable de générer une tension de 5V à partir du réseau.&lt;br /&gt;
***Des LEDs infrarouges couplées à des photodiodes afin de contrôler l'état de la gamelle et du réservoir.&lt;br /&gt;
***Un servomoteur 360° afin de faire tourner le système d'hélice et permettant ainsi de déverser une dose de croquettes dans la gamelle.&lt;br /&gt;
***Des LEDs permettant de visualiser l'état du système (alimentation du circuit, réservoir vide,...) et les résistances qui vont de pair.&lt;br /&gt;
***Un capteur Ultrason afin de pouvoir vérifier la présence ou non d'un animal devant la gamelle.&lt;br /&gt;
**Informatique&lt;br /&gt;
***Un arduino Méga car l'arduino Uno sera limité lorsque nous communiquerons entre le module wifi et l'application mobile.&lt;br /&gt;
***Un module Wifi ESP8266.&lt;br /&gt;
***Une carte shield SD afin de stocker toutes les variables de l'utilisateur et de son chat.&lt;br /&gt;
***Un module horloge temps réel (RTC) afin de pouvoir programmer en fonction de l'heure qu'il est si le choix de l'utilisateur porte sur le réapprovisionnement de la gamelle de cette manière là.&lt;br /&gt;
&lt;br /&gt;
En solution de secours : &lt;br /&gt;
*Un rapsberry&lt;br /&gt;
*Une balance à modifier manuellement&lt;br /&gt;
&lt;br /&gt;
*Logiciel&lt;br /&gt;
**Solidworks afin de pouvoir concevoir les différentes parties du système mécanique.&lt;br /&gt;
**Les logiciels de programmation (Sublime, vim, emacs, gcc...)&lt;br /&gt;
&lt;br /&gt;
*Autres&lt;br /&gt;
**Utilisation des machines mises à disposition des étudiants au Fablab : découpeuse laser et imprimante 3D pour la conception de prototypes.&lt;br /&gt;
&lt;br /&gt;
==Tableau==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Composant !! Quantité requise !! Disponible (M. Redon) ? !! À commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |Émetteur et récepteur infrarouge/photodiode&lt;br /&gt;
 |Entre 6 et 7 au minimum&lt;br /&gt;
 |Une partie&lt;br /&gt;
 |Oui&lt;br /&gt;
 |1 LED infrarouge et 1 photodiode ont été empruntés&lt;br /&gt;
 |-&lt;br /&gt;
 |Adaptateur PS512S&lt;br /&gt;
 |1&lt;br /&gt;
 |Non&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Lien Gotronic : [http://www.gotronic.fr/art-adaptateur-ps512s-19913.htm]&lt;br /&gt;
 |-&lt;br /&gt;
 |Shield carte SD&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Nous avons eu une carte shield Ethernet - SD ainsi que la carte SD.&lt;br /&gt;
 |-&lt;br /&gt;
 |Module horloge temps réel (RTC)&lt;br /&gt;
 |1&lt;br /&gt;
 |Non&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Lien Gotronic : [http://www.gotronic.fr/art-module-horloge-temps-reel-ada3296-25536.htm]&lt;br /&gt;
 |-&lt;br /&gt;
 |Capteur Ultrason&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Emprunté&lt;br /&gt;
 |-&lt;br /&gt;
 |LEDs&lt;br /&gt;
 |minimum 3&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Plusieurs empruntées&lt;br /&gt;
 |-&lt;br /&gt;
 |Résistances&lt;br /&gt;
 |Une vingtaine&lt;br /&gt;
 |Oui (C205)&lt;br /&gt;
 |Non&lt;br /&gt;
 |Plusieurs empruntées&lt;br /&gt;
 |-&lt;br /&gt;
 |Arduino méga&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Un arduino méga et un arduino uno (pour les tests) ont été empruntés&lt;br /&gt;
 |-&lt;br /&gt;
 |ESP8266&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |La version 012 a été empruntée&lt;br /&gt;
 |-&lt;br /&gt;
 |Servomoteur 360&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Emprunté&lt;br /&gt;
 |-&lt;br /&gt;
 |Solution de secours : Rapsberry&lt;br /&gt;
 |1&lt;br /&gt;
 |Oui&lt;br /&gt;
 |Non&lt;br /&gt;
 |Pas encore emprunté, solution de secours&lt;br /&gt;
 |-&lt;br /&gt;
 |Solution de secours : Balance&lt;br /&gt;
 |1&lt;br /&gt;
 |Non&lt;br /&gt;
 |Non&lt;br /&gt;
 |Pas encore emprunté, solution de secours&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Calendrier prévisionnel===&lt;br /&gt;
&lt;br /&gt;
====Liste des tâches à effectuer====&lt;br /&gt;
*Étude et réalisation d'un système à base de LEDs infrarouges et de photodiodes afin de pouvoir estimer si la gamelle est vide ou pleine. De même pour le réservoir.&lt;br /&gt;
**Circuit d'émission : LED Infrarouge&lt;br /&gt;
**Circuit de réception : Photodiode&lt;br /&gt;
**Étude des emplacements stratégiques dans la gamelle et le réservoir&lt;br /&gt;
*Réalisation d'un prototype de gamelle&lt;br /&gt;
**Conception 3D de l'hélice sur laquelle le servomoteur va venir se greffer&lt;br /&gt;
**Conception 3D de la gamelle complète&lt;br /&gt;
**Découpage/impression de prototypes&lt;br /&gt;
*Étude de l'ESP8266&lt;br /&gt;
*Tests d'écriture et de lecture sur la carte SD depuis l'arduino&lt;br /&gt;
*Étude du module d'horloge temps réel (RTC)&lt;br /&gt;
*Contrôle des différents capteurs en incluant le servomoteur&lt;br /&gt;
*Création de l'application mobile&lt;br /&gt;
*Mise en relation des différentes parties informatiques du système&lt;br /&gt;
&lt;br /&gt;
====Calendrier====&lt;br /&gt;
&lt;br /&gt;
==Feuille d'heures==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 et + !! Total&lt;br /&gt;
|-&lt;br /&gt;
| Définition cahier des charges &lt;br /&gt;
| 3H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Réalisation de l'état de l'art&lt;br /&gt;
| &lt;br /&gt;
|6H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|-&lt;br /&gt;
|Échange quant aux technologies et au système mécanique à choisir&lt;br /&gt;
| &lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste et de la répartition des tâches&lt;br /&gt;
| &lt;br /&gt;
|2H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|2H00&lt;br /&gt;
|-&lt;br /&gt;
| Recherches quant aux échelles de dosage (Quelles quantités de nourriture consomment les chats en fonction de leur poids ?)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|-&lt;br /&gt;
| Établissement de la liste de matériel et établissement des besoins (meilleur rapport besoin/prix étudié)&lt;br /&gt;
| &lt;br /&gt;
|5H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|5H00&lt;br /&gt;
|-&lt;br /&gt;
| Modèle 3D de l'hélice&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Modèle 3D du réservoir&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1H30&lt;br /&gt;
|-&lt;br /&gt;
| Étude des LEDs Infrarouge et des photodiodes&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Tests sur le module wifi ESP8266&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|8H00&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|16H00&lt;br /&gt;
|-&lt;br /&gt;
| Tests de lecture et écriture sur la carte SD&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|6H00&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|16H00&lt;br /&gt;
|-&lt;br /&gt;
| Étude du servomoteur et réalisation d'un programme le contrôlant en C&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Prototype de l'hélice et du réservoir&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|6H00&lt;br /&gt;
|-&lt;br /&gt;
| Achat de planches pour la réalisation des prototypes de la gamelle en bois&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| Étude du capteur Infrarouge et réalisation d'un programme le contrôlant en C&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Prise en main d'androïd studio et réalisation d'une ébauche d'application mobile pour notre gamelle connectée&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|10H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|13H00&lt;br /&gt;
|-&lt;br /&gt;
| Création du réseau établi entre le système et l'application android (problème avec le point d'accès)&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|8H00&lt;br /&gt;
|8H00&lt;br /&gt;
|4H00&lt;br /&gt;
|24H00&lt;br /&gt;
|-&lt;br /&gt;
| Assemblage et finition de la partie mécanique&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|8H00&lt;br /&gt;
|6H00&lt;br /&gt;
|18H00&lt;br /&gt;
|-&lt;br /&gt;
| Tests sur le module temps réel&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3H00&lt;br /&gt;
|3H00&lt;br /&gt;
|-&lt;br /&gt;
| Création de la base de donnée de l'application android et du singleton&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|10H00&lt;br /&gt;
|10H00&lt;br /&gt;
|-&lt;br /&gt;
| Liaison ESP8266 et Arduino (Software Serial) + High shifter&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8H00&lt;br /&gt;
|8H00&lt;br /&gt;
|-&lt;br /&gt;
| Application mobile : la page des configurations&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|10H00&lt;br /&gt;
|10H00&lt;br /&gt;
|-&lt;br /&gt;
| Application mobile : la page des études statistiques&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|8H00&lt;br /&gt;
|8H00&lt;br /&gt;
|-&lt;br /&gt;
| Étude du capteur ultrason et réalisation d'un programme le contrôlant en C&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|4H00&lt;br /&gt;
|-&lt;br /&gt;
| TOTAL&lt;br /&gt;
|3H00&lt;br /&gt;
|17H00&lt;br /&gt;
|10H00&lt;br /&gt;
|8H00&lt;br /&gt;
|14H00&lt;br /&gt;
|14H00&lt;br /&gt;
|13H00&lt;br /&gt;
|21H00&lt;br /&gt;
|12H00&lt;br /&gt;
|16H00&lt;br /&gt;
|49H00&lt;br /&gt;
|177H&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
&lt;br /&gt;
===Préambule===&lt;br /&gt;
L’internet des objets (IoT) représente l’extension d’internet à des choses et à des lieux du monde physique (wikipédia). Les objets connectés en l’occurrence sont aujourd’hui un enjeu important. De plus en plus d’objets initialement banals se voient être connectés afin d’en améliorer l’utilisation. Lors de ce projet, nous nous intéressons aux animaux domestiques. Lorsque nous nous absentons, nous n’avons aucun contrôle sur ce qui se passe à la maison. Ainsi, nous ne pouvons pas savoir si notre animal mange ou se porte bien. De plus, nous n’avons aucun retour sur ce que notre chien ou chat notamment a consommé. Est-ce qu’il se nourrit bien ? À quelle fréquence ? Dès lors, il est impensable de s’absenter sur le long terme ou un week-end sans faire intervenir un tiers pour nourrir notre cher animal. Nous pouvons également penser à des animaux qui seraient dangereusement en surpoids. Nous voudrions surveiller leur alimentation mais cela demande une surveillance constante qui n’est pas forcément envisageable. L’objectif de ce projet est de répondre à ces questions et besoins. Et si nous connections une gamelle à une application ?&lt;br /&gt;
&lt;br /&gt;
[[Image:Gamelle-inox-couleur-antiderapante-6-tailles.jpg|center|200px]].&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
L’objectif de la première semaine a été tout d’abord de lister les différentes tâches à réaliser tout au long du projet. Cette liste sera bien sûr modifiable en fonctions des difficultés ou contraintes rencontrées au cours du projet. Cette liste a été rajoutée à la suite du cahier des charges.&lt;br /&gt;
Ensuite, un état de l’art a été réalisé. Nous avons ainsi pu clairement définir le schéma de principe de notre gamelle et le mécanisme de réapprovisionnement choisi. Voici de nouveau le lien vers notre état de l'art : [[Fichier:Etat_de_l_art.pdf]]&lt;br /&gt;
&lt;br /&gt;
Faisons un point rapide sur ces choix. Un système d’ « hélice » est privilégié afin de réapprovisionner la gamelle. Il s’agit en fait d’un cylindre plat qui sera placé en sortie du réservoir. Le réservoir sera moins large en sortie vers la gamelle qu’à son sommet, en entrée des croquettes. Cela permettra aux croquettes de s’introduire facilement dans notre système d’ « hélice ». Ce cylindre serait  troué de part et d’autre afin de pouvoir contenir une certaine dose de croquettes. Ainsi, nous pouvons réapprovisionner la gamelle en fonction de ce dosage.&lt;br /&gt;
Enfin, nous nous sommes attardés sur l’organisation et la répartition de ces tâches afin de pouvoir détailler une liste de matériel. Cette dernière a été ajoutée au wiki à la suite de la liste des tâches.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Lors de cette deuxième semaine, plusieurs tâches ont été réalisées. Tout d’abord, un début de modélisation du système a été effectué sous Solidworks. Pour ce faire, nous avons dû décider de combien de grammes de croquettes à la fois nous pouvons réapprovisionner la gamelle. Ainsi, nous avons effectué des recherches quant à la consommation de nourriture journalière d’un chat. Étant donné qu’un chien consomme davantage de croquettes qu’un chat, nous nous basons sur la consommation de ce dernier, quitte à donner plusieurs doses si l’animal est un chien. Voici un tableau sur lequel nous allons nous baser :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|+ '''Tableau de référence'''&lt;br /&gt;
|-&lt;br /&gt;
! scope=col | Poids du chat adulte&lt;br /&gt;
! scope=col | 1-3 kg&lt;br /&gt;
! scope=col | 4 kg&lt;br /&gt;
! scope=col | 5 kg&lt;br /&gt;
! scope=col | 6 kg&lt;br /&gt;
|-&lt;br /&gt;
|'''Quantités journalières (en grammes)'''&lt;br /&gt;
|15-50g&lt;br /&gt;
|50-65g&lt;br /&gt;
|65-70g&lt;br /&gt;
|70-90g&lt;br /&gt;
|-&lt;br /&gt;
|'''Quantités journalières (avec un bol doseur de 300 mL)'''&lt;br /&gt;
|x 0.1 - 0.3&lt;br /&gt;
|x 0.3 - 0.4&lt;br /&gt;
|x 0.4&lt;br /&gt;
|x 0.4 - 0.6&lt;br /&gt;
|}&lt;br /&gt;
Ce tableau marche pour les croquettes Ultra premium direct en particulier.&lt;br /&gt;
&lt;br /&gt;
Grâce à ce tableau, nous pensons que réapprovisionner la gamelle par dose de 15g est approprié. Or,[[Image:Formule1.png|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Maintenant, il est nécessaire de calculer le rayon de l’hélice permettant au système de doser 15g à la fois.&lt;br /&gt;
&lt;br /&gt;
Nous voulons pouvoir doser 15g : [[Image:Formule2.png|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Posons n = 4 car nous souhaitons avec 2 doseurs, un de chaque côté de l’hélice : [[Image:Formule3.png|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Prenons à présent h = 4 cm ; h étant la largeur de l’ouverture conduisant à la gamelle. Nous avons alors : &lt;br /&gt;
&lt;br /&gt;
[[Image:Formule4.png|center|upright=50]].&lt;br /&gt;
&lt;br /&gt;
Voici une image de l'hélice modélisée en conséquent : &lt;br /&gt;
&lt;br /&gt;
[[Image:Hélice_image.jpg|vignette|center|500px|Modélisation de l'hélice en 3D.]].&lt;br /&gt;
&lt;br /&gt;
*D’un autre côté, des tests ont été réalisés en ce qui concerne le dispositif LED infrarouge-phototransistor.&lt;br /&gt;
&lt;br /&gt;
'''Présentation de l'expérimentation :'''&lt;br /&gt;
&lt;br /&gt;
Nous utilisons une LED IR SFH 4554 pour l’émission et une pour la réception. Pour des raisons de simplicité de fonctionnement, l'allumage des LEDs ne sera pas piloté. Elles seront continuellement allumées (aucune information n'est à transmettre).&lt;br /&gt;
&lt;br /&gt;
À la réception, nous utilisons une photodiode en pull-down  avec une résistance pour contrôler l'intensité dans cette dernière. Nous relions ce montage à un arduino pour vérifier jusqu'à quelle portée nous détectons le signal de la led émettrice. Grâce à cela, nous serons à même de définir les emplacements des émetteurs/récepteurs dans la gamelle et dans le réservoir ainsi que  la taille de ces derniers. Voici le schéma de principe :&lt;br /&gt;
&lt;br /&gt;
[[Image:Schema_diode_phototransistor.png|vignette|center|500px|Schéma de principe.]].&lt;br /&gt;
&lt;br /&gt;
'''Test rapide de la portée :'''&lt;br /&gt;
&lt;br /&gt;
Calcul des résistances :&lt;br /&gt;
&lt;br /&gt;
Réception : une résistance de 4.7 kΩ est placée.&lt;br /&gt;
&lt;br /&gt;
Émission : nous alimentons la LED en 5 V. Elle possède un courant &amp;lt;math&amp;gt;U_d = 1.2 V&amp;lt;/math&amp;gt; pour 20 mA et supporte 100 mA continue. À 100 mA, &amp;lt;math&amp;gt;U_d = 1.4 V&amp;lt;/math&amp;gt;. Pour être certains d'avoir la meilleure portée possible, nous nous rapprochons des 100 mA. Ainsi, pour le dimensionnement de R nous obtenons :&lt;br /&gt;
&lt;br /&gt;
[[Image:Formule5.png|center|upright=50]]&lt;br /&gt;
1. A.N. : &amp;lt;math&amp;gt;V_{CC} = 5V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;U_d = 1.4V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;I_f = 0.1A&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
R = 36Ω. Soit, en normalisant, '''R = 47Ω'''.&lt;br /&gt;
&lt;br /&gt;
Avec ces données, nous obtenons une portée maximale de 30 cm.&lt;br /&gt;
&lt;br /&gt;
2. Nous faisons un autre test avec une intensité plus basse :&lt;br /&gt;
A.N. : &amp;lt;math&amp;gt;V_{CC} = 5V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;U_d = 1.2V &amp;lt;/math&amp;gt;  ;  &amp;lt;math&amp;gt;I_f = 001A&amp;lt;/math&amp;gt;&lt;br /&gt;
R = 380Ω. Soit, en normalisant, '''R = 330Ω'''.&lt;br /&gt;
Avec ces données, nous obtenons une portée maximale de 22 cm.&lt;br /&gt;
&lt;br /&gt;
L'intérêt de connaître cette portée est que nous allons pouvoir adapter la taille du réservoir et de la gamelle en elle même afin de rendre notre dispositif réalisable. À titre de rappel, nous utilisons ce système afin de savoir si la gamelle est vide (Ce système fonctionnant en tout ou rien) et également afin de connaître le niveau approximatif des croquettes dans le réservoir. &lt;br /&gt;
&lt;br /&gt;
*Enfin, pour travailler, nous avons à notre disposition deux arduino : un arduino ''uno'' et un arduino ''méga''. L’utilisation du module wifi ESP8266 nous impose de travailler avec un arduino ''méga''. Cependant, les tests tels que pour le système LED infrarouge-phototransistor peuvent être réalisés indépendamment sur l’arduino ''uno''. Ainsi, nous pouvons travailler à deux en parallèle sur des arduino différents. Cependant, il a fallu réadapter le makefile permettant de flasher l’arduino à un arduino ''méga'' car celui que nous possédions ne fonctionnait que pour un arduino ''uno''. (Un « -D » étant nécessaire dans la ligne de commande pour flasher l’arduino dans le cas d’un ''méga'', qui ne l’était pas pour l’arduino ''uno''.)&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
&lt;br /&gt;
Lors de cette troisième semaine, nous réalisé des tests sur les deux arduinos. &lt;br /&gt;
&lt;br /&gt;
==== Le servomoteur et sa PWM ====&lt;br /&gt;
Tout d’abord, le premier test porte sur le servomoteur prévu pour faire tourner le système d’hélice et réapprovisionner la gamelle.&lt;br /&gt;
&lt;br /&gt;
Le servomoteur que nous utilisons est un servomoteur à courant continue. Il a l’avantage de pouvoir être contrôlé en vitesse et de pouvoir tourner à plus de 180°. &lt;br /&gt;
&lt;br /&gt;
Pour alimenter un servomoteur, il faut brancher ses trois connectiques sur l’alimentation 5V de l’arduino, sur la masse et sur une broche PWM. &lt;br /&gt;
&lt;br /&gt;
En effet, la consigne envoyée à un servomoteur est de type PWM (Pulse Width Modulation). Ce signal permet de faire varier la durée en état « haut » du signal grâce à la consigne que nous lui donnons. Voici un schéma montrant quelques exemples de modifications de la durée d’un état « haut » :&lt;br /&gt;
[[Image:PWM explications.png|center|300px]].&lt;br /&gt;
&lt;br /&gt;
La difficulté a été de programmer ce servomoteur en passant par le langage C. En effet, arduino IDE, il est plus aisé de le faire puisqu’il existe une bibliothèque servo.h permettant de programmer des servomoteurs facilement. En C, il a fallu se pencher sur le fonctionnement et le contrôle d’une PWM grâce aux différents registres de l’arduino. &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, il faut configurer les registres TCCR1A et TCCR1B afin d’activer la PWM en mode non-inversé et à fréquence élevée.  &lt;br /&gt;
&lt;br /&gt;
Enfin, il faut activer la PIN5 du port B en sortie (Pin PWM).&lt;br /&gt;
&lt;br /&gt;
Rentrons un peu plus dans le détail quant à la configuration des deux registres TCCR1A et TCCR1B.&lt;br /&gt;
TCCR0A = 1000 0001 = 0x81 et TCCR0B = 0000 0101  = 0x05&lt;br /&gt;
[[Image:TCCR0A.png|center|650px]].&lt;br /&gt;
[[Image:TCCR0B.png|center|650px]].&lt;br /&gt;
&lt;br /&gt;
TCCR0A : &lt;br /&gt;
   COM0A1 = 1 COM0A0 = 0 =&amp;gt; non-inverting mode&lt;br /&gt;
&lt;br /&gt;
   COM0B1 = 0 COM0B0 = 0 =&amp;gt; mode standard&lt;br /&gt;
&lt;br /&gt;
   WGM01 = 0 WGM00 = 1 =&amp;gt; PWM mode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TCCR0B : &lt;br /&gt;
   FOC0A = 0 FOC0B = 0 =&amp;gt; car PWM mode&lt;br /&gt;
&lt;br /&gt;
   WGM02 = 0 =&amp;gt; PWM mode&lt;br /&gt;
&lt;br /&gt;
   SC02 = 1 CS01 = 0 CS00 = 1 =&amp;gt; clk (entrée/sortie) /1024&lt;br /&gt;
&lt;br /&gt;
Pour connaître ces résultats, les tableaux descriptifs sont disponibles dans la datasheet de l'arduino méga, disponible dans les références à la fin du wiki.&lt;br /&gt;
&lt;br /&gt;
Dans un deuxième temps, en modifiant directement le registre OCR0A, nous envoyons directement une commande au servomoteur. La durée en état « haut » est ainsi proportionnelle à la consigne saisie dans OCR0A.&lt;br /&gt;
&lt;br /&gt;
Le servomoteur tourne bien différemment en fonction de la valeur saisie dans OCR0A. Maintenant, il reste à comprendre comment contrôler de manière précise le servomoteur et sa position en fonction de la consigne.&lt;br /&gt;
&lt;br /&gt;
==== Le capteur ultrason ====&lt;br /&gt;
&lt;br /&gt;
=====  Présentation =====&lt;br /&gt;
Nous pensons utiliser le module HC-SR04 couplé à un arduino pour détecter la présence de l’animal devant la gamelle. Cela servira à ne pas prendre en considération le contenu de la gamelle pour savoir si elle est vide ou non lorsque l’animal se nourrit. Ou encore, cela aidera afin de pouvoir réaliser un suivi à savoir : à quel moment le chat a-t-il été manger ?&lt;br /&gt;
&lt;br /&gt;
En lisant la documentation technique du HC -SR04, nous en tirons ceci :&lt;br /&gt;
&lt;br /&gt;
[[Image:US data.png|center|550px]].&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement du système est simple et qu’il suffit d'envoyer un message de 10µs minimum avec une écart de 60 ms minimum pour recevoir une réponse du capteur.&lt;br /&gt;
&lt;br /&gt;
Le capteur renvoi un signal qui a un temps proportionnel à sa distance par rapport à l’obstacle.&lt;br /&gt;
&lt;br /&gt;
=====  Expérimentation =====&lt;br /&gt;
Nous rajoutons des LESs afin d’avoir une indication lorsqu’un signal est envoyé. La valeur reçue est visualisée à l’aide de l’outil minicom, la valeur était envoyé sur le port série. Nous remarquons que le système fonctionne même si des imperfections de de mesure subsistent (dues notamment au programme). La précision du système suffit néanmoins à la détection du chat devant la gamelle.&lt;br /&gt;
&lt;br /&gt;
=====  Problème lié à l'étude =====&lt;br /&gt;
Le module utilise une fréquence de 40khz.&lt;br /&gt;
Suite à des vérifications, les chats et les chiens entendent des sons pouvant aller jusqu'à 60khz. &lt;br /&gt;
Une recherche a été effectuée sur les barrières repoussant les chiens et les chats. Malgré le peu de documentation technique que nous avons trouvé, nous remarquons  que les fréquences utilisées sont de l'ordre de 25 khz. Ces fréquences sont bien loin des 40khz de notre système. Cependant, une petite expérimentation a été réalisée sur un chat de 6 ans à l’aide d’une application smartphone générant des ultrasons. Il s’avère que le chat est dérangé par ces fréquences, le chat s'en va au bout de 10 minutes d’expérience.&lt;br /&gt;
&lt;br /&gt;
=====  Conclusion =====&lt;br /&gt;
Même si le module HC-SR04 est très simple d’utilisation, nous ne pouvons continuer à nous en servir pour notre projet de gamelle connectée.&lt;br /&gt;
&lt;br /&gt;
=====  Autre alternative =====&lt;br /&gt;
* Tapis de jauge de contrainte → couvre une surface trop petite&lt;br /&gt;
* Détecteur de présence infrarouge → convient pour des objets de taille supérieure à 15 cm  &lt;br /&gt;
&lt;br /&gt;
Notre choix se porte donc sur le capteur infrarouge, que nous programmerons dans une séance ultérieure.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
La semaine a été en grande partie consacrée à la réalisation d’un prototype pour le système d’hélice et le réservoir. Tout d’abord, nous avons dû faire plusieurs aller-retour au magasin afin d’acheter des planches pour la réalisation des différents prototypes. La première planche qui a été acheté était une medium, matériel qui n’est plus accepté dans la découpeuse laser puisqu’elle encrasse le filtre et la lentille de l’appareil. Nous avons donc du aller acheter les bonnes planches. De plus, il a fallu réserver des créneaux au fabricarium et apprendre à se servir de la découpeuse laser. Le prototype final n’est pas encore assemblé puisque nous réfléchissons à un système de « pied à coulisse » afin de pouvoir choisir le dosage unitaire que peut servir l’hélice.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5 et semaine 6===&lt;br /&gt;
'''Création d’un programme contrôlant la lecture et l’écriture sur la carte SD'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Pour rendre notre projet innovant par rapport aux autres gamelles connectées proposées sur le marché, nous avons décidé de faire un suivi lié à l'alimentation du chat. Par exemple, nous souhaitons savoir à quels moments de la journée l’animal va manger, pendant combien de temps, en quelles quantités etc…&lt;br /&gt;
Pour cela, nous devons stocker ces différentes données. Pour ce faire, nous utiliserons le shield SD/ethernet  suivant :&lt;br /&gt;
&lt;br /&gt;
[[Image:Shield sd ethernet.jpg|vignette|center|300px|Shield SD/ethernet.]]&lt;br /&gt;
&lt;br /&gt;
*Code arduino shield Sd/ethernet&lt;br /&gt;
&lt;br /&gt;
Pour commencer, l’expérimentation du shield  a été effectuée à l’aide d’arduino IDE afin de réaliser un prototype rapide et tester si le shield est efficace et permet de répondre à nos besoins.&lt;br /&gt;
&lt;br /&gt;
Nous nous basons sur l'exemple proposé par arduino IDE suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SD.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File myFile;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  // Open serial communications and wait for port to open:&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  while (!Serial) {&lt;br /&gt;
    ; // wait for serial port to connect. Needed for native USB port only&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Initializing SD card...&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if (!SD.begin(4)) {&lt;br /&gt;
    Serial.println(&amp;quot;initialization failed!&amp;quot;);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(&amp;quot;initialization done.&amp;quot;);&lt;br /&gt;
  myFile = SD.open(&amp;quot;test.txt&amp;quot;, FILE_WRITE);&lt;br /&gt;
&lt;br /&gt;
  if (myFile) {&lt;br /&gt;
    Serial.print(&amp;quot;Writing to test.txt...&amp;quot;);&lt;br /&gt;
    myFile.println(&amp;quot;testing 1, 2, 3.&amp;quot;);&lt;br /&gt;
    myFile.close();&lt;br /&gt;
    Serial.println(&amp;quot;done.&amp;quot;);&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.println(&amp;quot;error opening test.txt&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  myFile = SD.open(&amp;quot;test.txt&amp;quot;);&lt;br /&gt;
  if (myFile) {&lt;br /&gt;
    Serial.println(&amp;quot;test.txt:&amp;quot;);&lt;br /&gt;
    while (myFile.available()) {&lt;br /&gt;
      Serial.write(myFile.read());&lt;br /&gt;
    }&lt;br /&gt;
    myFile.close();&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.println(&amp;quot;error opening test.txt&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous remarquons que nous écrivons facilement sur la carte SD grâce à la bibliothèque disponible. En ajoutant quelques boutons et en modifiant légèrement le code, nous arrivons à sauvegarder la durée de maintien du bouton ainsi que la fréquence d’actionnement.&lt;br /&gt;
&lt;br /&gt;
*Code C Shield  SD/ethernet&lt;br /&gt;
&lt;br /&gt;
Une fois le prototype fait et fonctionnel, nous décidons d’écrire le code en C. Pour cela, nous utilisons en particulier deux bibliothèques fournies par Monsieur REDON : Sd2Card et spi.&lt;br /&gt;
Après de multiples tentatives, nous arrivons toujours à l'erreur suivante : “SD_CARD_ERROR_CMD0”. Cette dernière est liée à un timeout qui persiste malgré la modification de paramètres dépendants.&lt;br /&gt;
&lt;br /&gt;
*Changement de matériel&lt;br /&gt;
&lt;br /&gt;
Monsieur REDON nous a fourni un nouveau shield uniquement SD cette fois-ci pour tester si le problème est matériel. En voici la photographie :&lt;br /&gt;
&lt;br /&gt;
[[Image:Shield sd simple.jpg|vignette|center|300px|Shield SD.]]&lt;br /&gt;
&lt;br /&gt;
*Code C Shield SD&lt;br /&gt;
&lt;br /&gt;
En recompilant le code sur le nouveau shield, nous remarquons qu'il n'y a pu d'erreur liée à l'initialisation de la carte SD.&lt;br /&gt;
Suite à des expérimentations liées à la prise en main du code exemple donné, nous arrivons maintenant à écrire une information dans un bloc est à relire cette information plus tard.&lt;br /&gt;
&lt;br /&gt;
Voici un extrait lu depuis l’utilitaire minicom lors de la lecture de la carte SD :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;status de la carte sd = 1                                                 &lt;br /&gt;
status=0                                                                  &lt;br /&gt;
erreur=0                                                                  &lt;br /&gt;
type=3                                                                    &lt;br /&gt;
taille=7744512                                                            &lt;br /&gt;
Lecture                                                                   &lt;br /&gt;
statut=0                                                                  &lt;br /&gt;
bloc[0]=1 bloc[1]=0 bloc[2]=aa bloc[3]=bb bloc[4]=cc bloc[5]=0&lt;br /&gt;
statut=0   &lt;br /&gt;
bloc[0]=dd bloc[1]=ee bloc[2]=ff bloc[3]=0 bloc[4]=0 bloc[5]=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le shield fonctionne comme désiré et nous pourrons ainsi enregistrer des informations afin de les traiter plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Configuration du module WiFi ESP8266'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
L’ESP8266 est un circuit intégré à un microcontrôleur qui fait office de module WiFi. Il possède un total de 9 GPIO (3.3V) ce qui lui permet d’être utilisé indépendamment, sans même se connecter à un autre microcontrôleur. La datasheet de ce composant est disponible dans la rubrique « Datasheet » en bas de page. Pour notre projet, l’utilisation seule de ce module ne suffisait pas. C’est pourquoi, nous le connectons à un arduino afin de pouvoir profiter des différentes entrées/sorties de ce microcontrôleur. Voici une photographie du composant en question :&lt;br /&gt;
&lt;br /&gt;
[[Image:Esp8266.jpg|vignette|center|300px|Shield SD.]]&lt;br /&gt;
&lt;br /&gt;
L'adresse IP de notre ESP8266 s'obtient en connectant notre composant à un réseau local. Ainsi, nous savons que cette adresse est la suivante : 192.168.43.53 .&lt;br /&gt;
&lt;br /&gt;
*Programmation du module WiFi en C&lt;br /&gt;
&lt;br /&gt;
De nombreux problèmes ont été rencontrés pour configurer l’ESP8266 en C. Le programme devant être directement chargé sur ce dernier, de nombreuses erreurs en ont résulté. Après de nombreuses heures passées à essayer de régler ces problèmes, nous avons discuté de cela avec l’un de nos encadrant, M. REDON, qui nous a autorisé à programmer le module WiFi directement sur arduino IDE, puisqu’une bibliothèque existante rend la tâche moins ardue. De ce fait, l’avantage de l’ESP8266 est que nous chargeons un programme directement sur ce dernier. Ainsi, nous pouvons programmer le reste de notre projet en C, en compilant et téléversant le fichier sur l’arduino sans perturber le fonctionnement du module WiFi.&lt;br /&gt;
&lt;br /&gt;
*Programmation du module WiFi sur arduino IDE&lt;br /&gt;
&lt;br /&gt;
Tout d’abord, lors de l’installation d’arduino IDE, il faut veiller à ce que la version soit suffisamment récente pour pouvoir y télécharger des « boards ». En effet, il faut, grâce à un lien disponible sur le site d’arduino, ajouter l’ESP8266 en tant que board dans le logiciel afin que le composant puisse être reconnu afin de téléverser un programme. &lt;br /&gt;
Ensuite, l’ESP doit être connectée en USB sur à l’ordinateur afin qu’elle soit visible sur son port propre (USB0 en l’occurrence). Ainsi, lors du téléversement du fichier, il faut sélectionner ce port dans la liste de ceux disponible. (Beaucoup de soucis ont été rencontrés à ce propos, l’ESP n’étant pas toujours visible comme étant disponible sur arduino IDE). &lt;br /&gt;
Enfin, un test basique a été réalisé qui consiste à faire clignoter une LED connectée à un GPIO de l’ESP et à se connecter à un réseau WiFi. L’avantage de programmer en arduino IDE est que, par un simple « #include &amp;lt;ESP8266WiFi.h&amp;gt; », nous ajoutons la bibliothèque propre à notre module WiFi. La fonction WiFi.begin permet alors de se connecter facilement à un réseau local en passant en paramètres le nom du réseau sans fil (SSID) ainsi que son mot de passe. &lt;br /&gt;
&lt;br /&gt;
Voici une visualisation des informations envoyées sur l'interface série :&lt;br /&gt;
&lt;br /&gt;
[[Image:Capture esp.png|vignette|center|500px|Visualisation sur l'interface série.]]&lt;br /&gt;
&lt;br /&gt;
*Réseau&lt;br /&gt;
&lt;br /&gt;
La question de la connexion réseau entre le module WiFi et l’application mobile, que nous allons bientôt réaliser, se pose. Nous avons travaillé également sur cette partie lors de la semaine 6. Cependant, nous expliciterons cette partie un peu plus tard afin d’aborder en même temps la partie réseau du côté de l’application mobile.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
'''Capteur Infrarouge IRS05A'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Dans la partie liée au suivi de l'alimentation, nous avons besoin d'un détecteur de présence afin de savoir si le chat est en train de se nourrir ou pas. Pour cela, nous avions testé le module HC-SR04, expérimentation qui n'avait pas aboutie due au fait que le chat entende les ultrasons. Nous avons choisi en remplacement le module irs05a. En voici une photographie :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:IRS05A.jpg|center|200px]]&lt;br /&gt;
&lt;br /&gt;
*Programme C&lt;br /&gt;
&lt;br /&gt;
En étudiant la datasheet du composant, nous trouvons ceci : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour l'expérimentation, nous avons juste besoin de commander l'entrée enable et de placer une LED à la sortie output afin de visualiser si le module détecte ou non un objet. Suite à cette expérimentation, nous avons pu définir la zone de détection du module. Voici un schéma explicatif :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:IRS05A extrait datasheet.png|center|400px]]&lt;br /&gt;
&lt;br /&gt;
Grâce à ce schéma, nous avons pu faire un choix matériel quant à celui de l’emplacement de nos deux capteurs de présence. Ils seront disposés comme suit :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schema ir disposition.jpg|center|200px]]&lt;br /&gt;
&lt;br /&gt;
'''Application mobile'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
L’objectif de cette semaine a été en partie de se familiariser avec l’environnement de développement intégré (IDE) d’Android Studio. Sous Android, il est commun de passer par cette plateforme afin de programmer différentes applications mobiles. Cela se code en java. &lt;br /&gt;
&lt;br /&gt;
*Application pour la gamelle connectée&lt;br /&gt;
&lt;br /&gt;
Tout d’abord, le domaine des applications mobiles est très complexe. De plus, la documentation technique de java est également très fournie. Cela a rendu la tâche de réaliser une application android basique très longue. Finalement, nous voulons créer une application mobile permettant de visualiser les statistiques de son animal,  de contrôler la gamelle manuellement ou de programmer des modes pour l’alimenter. Pour le moment, le squelette général a été créé, permettant d’afficher de nouvelles fenêtres à chaque choix de « mode ».  Voici des screenshots de l’application actuelle :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:App premiere page.png|200px]] [[Fichier:Onglet1.png|200px]] [[Fichier:Onglet2.png|200px]] [[Fichier:Onglet3 en cours.png|200px]] &lt;br /&gt;
&lt;br /&gt;
*Réseau &lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons voulu aller plus loin dans la fenêtre consacrée au réapprovisionnement manuel. En effet, nous souhaitons réaliser un test simple qui consiste à allumer une LED connectée à un GPIO de l’ESP8266 par simple appui d’un bouton depuis l’application mobile. Le problème qui s’est alors posé a été celui de créer un lien serveur/client entre le module WiFi et l’application mobile. L’idée serait alors de créer un serveur TCP sur arduino IDE qui se chargerait sur l’ESP8266 et de créer, à l’aide de sockets en java, un client sur l’application mobile. Le serveur TCP a été réalisé sur l’arduino mais n’a pas encore pu être testé. La réalisation du client sur l’application mobile est l’objet de la semaine 8, les tests seront alors réalisés et explicités à ce moment là.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8 et 9===&lt;br /&gt;
'''Application mobile, partie réseau'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Le serveur TCP réalisé sous arduino IDE directement sur le module WiFi a été testé à l’aide de la commande nc. En effet, nous avons utilisé un terminal téléchargé sur le téléphone afin de connecter le module WiFi et le téléphone sur le même réseau. En envoyant les requêtes directement via la commande nc, nous sommes capables d’allumer et d’éteindre la LED connectée au GPIO de l’ESP8266. Maintenant, il faut réaliser la même chose mais côté application mobile.&lt;br /&gt;
&lt;br /&gt;
La partie concernant la création du socket et l’envoi de données à l’esp8266 nous a pris beaucoup de temps. En effet, le problème ne venait pas de notre code mais simplement du fait que la version android du téléphone utilisé comme point d’accès internet empêchait l’application de connecter la socket à l’adresse IP du module WiFi. Après avoir configuré un routeur et connecté le module WiFi et le téléphone dessus, nous étions capable d’envoyer des requêtes au module WiFi afin qu’il allume une LED notamment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Principe&lt;br /&gt;
&lt;br /&gt;
Il est préférable de réaliser la partie réseau d’une application mobile via un thread afin de rendre l’application la plus fluide possible. Par exemple, l’appui du bouton ON permet de modifier une chaine de caractère et lance le thread d’envoi. Dans ce thread, l’application connecte la socket au module WiFI à l’aide de son adresse IP et du port de communication spécifié dans le programme du serveur TCP sur arduino IDE. Ensuite, la socket se charge d’envoyer la chaine de caractère à l’esp8266. Cela se fait par l’utilisation de l’objet ''DataOutputStream'' et de sa méthode ''writeBytes'' qui permet l’envoi simple d’une chaine de caractère. &lt;br /&gt;
&lt;br /&gt;
Pour la réception des données, il s’agit du même principe mais nous utilisons l’objet DataInputStream.&lt;br /&gt;
&lt;br /&gt;
Voici un aperçu de ce qui est visualisable sur l'interface série de l'arduino IDE, les requêtes sont bien envoyées :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Serveur ok.png|center|100px]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 10 et +===&lt;br /&gt;
'''La base de données sur l'application android'''&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Nous sauvegardons déjà les données directement sur la gamelle grâce à la carte SD. Cependant, il nous a semblé nécessaire de garder en mémoire les statistiques de notre animal de compagnie directement sur l’application. Après avoir lu le livre « L’art du développement Android » de Grant Allen, prêté notre enseignant, deux possibilités nous sont apparues. La première était de manipuler des fichiers qui seraient générés par l’application afin de garder en mémoire ce que nous souhaitons. La seconde était de créer une base de données locale grâce à la base de données installée sur Android, ''SQLite''. &lt;br /&gt;
&lt;br /&gt;
*Présentation rapide de SQLite&lt;br /&gt;
&lt;br /&gt;
''SQLite'' utilise un dialecte de SQL afin de réaliser des requêtes de manipulations de données. Les « SELECT », « INSERT », « REMOVE », peuvent ainsi être utilisées.  ''SQLite'' est particulièrement approprié pour l’utilisation android car son utilisation ne repose pas sur un modèle client-serveur (comme ''mysql'' ou ''PostgreSQL'' que nous connaissons). Ainsi, l’intégralité de la base de données est stockée dans un fichier unique.&lt;br /&gt;
&lt;br /&gt;
*Base de données&lt;br /&gt;
&lt;br /&gt;
La base de données que nous avons implémentée permet de répertorier tous les jours enregistrés par la gamelle afin de pouvoir réaliser des traitements statistiques derrière. La date a été stockée en chaine de caractère car le constructeur de la forme ''Date(int year, int month, int day)'' est obsolète pour la version de l’API que nous utilisions. Le deuxième constructeur est de la forme ''Date(long Date)'' et il faut fournir à cette méthode un nombre de millisecondes qu’elle va convertir au format Date de Java. Cela nous semblait peu pratique. &lt;br /&gt;
&lt;br /&gt;
Voici un petit tableau illustrant ce que nous souhaitons stocker dans la base de données :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tableau recap bdd.png|center|450px]]&lt;br /&gt;
&lt;br /&gt;
Trois classes ont été crées : Jour.java, JoursBDD.java et MaBaseSQLite.java.&lt;br /&gt;
&lt;br /&gt;
Voici un schéma UML résumant ces trois classes :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:BDD_lulu.png|center|700px]]&lt;br /&gt;
&lt;br /&gt;
'''La base de données et Singleton'''&lt;br /&gt;
&lt;br /&gt;
Notre base de donnée étant créée et fonctionnelle, nous avions besoin de l’avoir à disposition n’importe où dans l’application. Or, passer un objet d’une page à une autre est simple pour des objets peu complexes. Cependant, il était plus difficile de passer notre base de données avec les méthodes traditionnelles utilisées auparavant. Nous avons donc utilisé un singleton. Le singleton est une instance unique d’une classe. Cela permet à la fois de récupérer facilement cette instance partout dans l’application mais cela permet également de converser une unicité de cette dernière, ce qui est important pour  une base de données. Ainsi, nous avons modifié les classes décrites précédemment afin d’implémenter le singleton. &lt;br /&gt;
&lt;br /&gt;
Deux variables ont été ajoutées à la classe joursBDD : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;private static Context context;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;private static JoursBDDSingleton mJoursBDDSingleton;  //instance unique&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deux méthodes sont également concernées dans ce changement :&lt;br /&gt;
&amp;lt;pre&amp;gt;//Méthode de restauration de contexte&lt;br /&gt;
public JoursBDD(Context context)&lt;br /&gt;
{&lt;br /&gt;
    this.context = context;&lt;br /&gt;
    //creation de la base de donnees&lt;br /&gt;
    maBaseSQLite = new MaBaseSQLite(context, NOM_BDD, null, VERSION_BDD);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Methode de recuperation de l'instance de la BDD&lt;br /&gt;
public static synchronized JoursBD getInstance(Context context){&lt;br /&gt;
    //Création de la base de données et de sa table&lt;br /&gt;
    if(mJoursBDD==null) {&lt;br /&gt;
        //CreateJoursBDD(context);&lt;br /&gt;
        mJoursBDD = new JoursBDD(context);&lt;br /&gt;
    }&lt;br /&gt;
    return mJoursBDD;&lt;br /&gt;
} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, juste un réalisant une récupération de l’instance grâce à  l’appel de la méthode getInstance : JoursBDD.getInstance(this); , il est aisé de le faire dans une nouvelle activité.&lt;br /&gt;
&lt;br /&gt;
'''Le traitement des données'''&lt;br /&gt;
&lt;br /&gt;
Une partie « statistiques » a été ajoutée à l’application mobile. Elle a pour but l’étude de l’alimentation de l’animal grâce à l’utilisation de graphiques et de tableaux. Afin de rendre la chose plus visuelle, l’utilisateur peut sélectionner soit un histogramme, soit un graphique linéaire, soit un tableau de données grâce à des radio boutons. Ensuite, l’utilisateur sélectionne soit les 7 derniers jours soit le dernier mois via un simple bouton. &lt;br /&gt;
Voici un aperçu de la première page :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:statistiques_tableau_petfun.png|center|200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Présentation rapide de achartengine :&lt;br /&gt;
Afin de réaliser l’affichage de graphiques, nous avons utilisé une bibliothèque appelée ''achartengine''. Cette bibliothèque permet la personnalisation de graphiques et l’affichage sous forme d’histogramme ou encore de graphiques linéaires des données. Cette bibliothèque facilite la dynamisation de l’activité. Nous restant peu de temps dans le projet, nous avons décidé d’exploiter cette ressource afin de réaliser une page propre et personnalisée. Nous pouvons utiliser cette bibliothèque en l’ajoutant dans les fichiers ''gradle'' du projet.&lt;br /&gt;
&lt;br /&gt;
Voici les graphiques que nous affichons :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Graphiques stats petfun1.png|200px]] [[Fichier:Graphiques stats petfun2.png|200px]]&lt;br /&gt;
&lt;br /&gt;
*Limites et améliorations :&lt;br /&gt;
L’idée d’avoir créée un bouton permettant d’afficher un graphique de la dernière semaine avait pour but une amélioration par la suite. En effet, l’objectif est de pouvoir, une fois le graphique affiché, passer d’une semaine à une autre. De même pour les mois, nous souhaiterions pouvoir, à partir du dernier mois, afficher les précédents en ''slidant'' le graphique ou en appuyant sur une touche. &lt;br /&gt;
&lt;br /&gt;
'''Configuration des paramètres'''&lt;br /&gt;
&lt;br /&gt;
*Introduction &lt;br /&gt;
&lt;br /&gt;
Une page de permettant de configurer les paramètres de l'application a été ajoutée à l’application mobile. Elle a pour but d’enregistrer les heures de repas de l'animal, le poids contenu dans la gamelle, le nom de l’animal ou encore sa photographie. Le poids contenu dans la gamelle doit être notifié car cette dernière est ajustable grâce à des rails présents sur la gamelle et ajustables. Ainsi, l’utilisateur peut doser la quantité qu’il souhaite. Il devra alors le notifier dans l’application afin que le traitement des données en tienne compte.&lt;br /&gt;
&lt;br /&gt;
*Présentation&lt;br /&gt;
&lt;br /&gt;
Dans l’activité de contrôle ''automatique'', il s’agit en fait de configurer des paramètres. Sur cette page, les paramètres actuels de la gamelle sont affichés à l’écran. L’utilisateur peut dès lors, via des boutons, sélectionner deux activités : une pour changer les paramètres propres à la gamelle et l’autre pour changer ceux propres à l’animal. &lt;br /&gt;
&lt;br /&gt;
*Paramètres de la gamelle&lt;br /&gt;
&lt;br /&gt;
Dans les paramètres de la gamelle, deux choses sont configurables : les heures de repas de l’animal et la quantité de croquettes ajustée sur la gamelle. Afin de rentrer les heures de repas, le widget ''TimePicker'' a été utilisé et configuré en format 24 heures. L’appui de la touche « AJOUT HEURE » permet l’ajout de l’heure saisi sur le ''TimePicker'' dans les paramètres de l’application. De plus, afin de saisir le poids de la gamelle, un simple ''EditText'' permet de le faire. Si l’utilisateur ne saisi pas un nombre, un message s’affiche à l’écran le prévenant du problème de format.&lt;br /&gt;
&lt;br /&gt;
L’appui de la touche « VALIDER CONFIGURATION » permet la sauvegarde de la saisie et le retour à la première activité. &lt;br /&gt;
&lt;br /&gt;
L’appui de la touche « SUPPRIMER CONFIGURATION » permet la suppression des heures de repas enregistrées dans l’application.&lt;br /&gt;
&lt;br /&gt;
*Paramètres de l’animal&lt;br /&gt;
&lt;br /&gt;
Dans les paramètres de l’animal, le nom ainsi que la photographie de ce dernier peuvent être ajoutés. Le nom est simplement enregistré grâce à un ''EditText''. L’avatar peut être cherché par l’utilisateur dans ses fichiers de téléphone. (Des permissions spécifiques sont nécessaires). L'avatar s'affiche alors en première page de l'application.&lt;br /&gt;
&lt;br /&gt;
Maintenant, la question d’enregistrer tous ses paramètres s’est posée. En effet, une fois l’application fermée, tous les objets et toutes les variables créées dans l’application sont désallouées. Les paramètres rentrés par l’utilisateur sont alors perdus. &lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons fait le choix de modifier les préférences de l’application. Ces préférences renseignent des paires clé-valeur de données.&lt;br /&gt;
&lt;br /&gt;
*SharePreferences&lt;br /&gt;
&lt;br /&gt;
Nous devons créer un objet ''SharePreferences'' via la méthode ''getSharedPreferences'' en lui attribuant un nom unique et en privatisant son accès. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; final SharedPreferences prefs = getSharedPreferences(&amp;quot;Configuration&amp;quot;, Context.MODE_PRIVATE); &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dès lors, nous pouvons restaurer cet objet dans n’importe quelle activité, exactement comme un ''Singleton''. &lt;br /&gt;
Pour créer ou modifier des préférences, nous devons appeler la méthode ''edit()'' de l’objet ''SharedPreferences''. Une fois la valeur modifiée, il est impératif de faire appel à la méthode ''apply()'' ou ''commit()'' de l’objet afin de sauvegarder les changements apportés.	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;final SharedPreferences.Editor editor = prefs.edit();&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, les horaires sont stockées avec une clé de la forme « horairek », k représentant la numérotation des différentes heures saisies par l’utilisateur. Une variable « Taille » fait également partie des préférences afin de pouvoir savoir à tout moment le nombre de repas programmés par l’utilisateur. Le nom de l’animal est stocké avec la clé « Name » et le poids avec la clé « Poids ». Il est alors aisé de retrouvé les valeurs correspondantes dans les préférences et de pouvoir les supprimer de manière spécifique si nécessaire. &lt;br /&gt;
&lt;br /&gt;
Voici donc ce que cela peut nous donner :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Petfun config1.png|200px]] [[Fichier:Petfun config2.png|200px]] [[Fichier:Petfun config4.png|200px]] [[Fichier:Petfun config3.png|200px]]&lt;br /&gt;
&lt;br /&gt;
'''Contrôle du servomoteur via l'application'''&lt;br /&gt;
&lt;br /&gt;
La solution que nous avons choisi est de relier un GPIO de l’ESP8266 à un PIN digital de l’arduino. Ainsi, étant capables d’allumer une LED par appui d’une touche sur l’application mobile, nous serions capables de faire changer l’état d’un PIN de l’arduino et ainsi en fonction de cela, faire tourner le moteur. &lt;br /&gt;
En mettant en place cette méthode, nous nous sommes rendu compte que le PIN de l’arduino ne réagissait pas à du 3.3V, envoyé par le module wifi. Nous avons donc mis en place un ''high shifter'' à l’aide d’un transistor afin de faire passer la tension d’entrée de 3.3V à 5V. Sur le schéma, R1 = R2 = 10 kΩ. R3 = 100 kΩ. La tension Output mesurée est de [[Fichier:FormulePetfun.png|100px]].&lt;br /&gt;
&lt;br /&gt;
Voici le schéma : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:HighShifterPetfunPetfun.jpg|center|300px]]&lt;br /&gt;
&lt;br /&gt;
Voici la photographie du câblage :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:HighShifterPetfunPetfun.jpg|center|300px]]&lt;br /&gt;
&lt;br /&gt;
'''Aperçu final de la partie mécanique'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Croquette.png|center|200px]]&lt;br /&gt;
&lt;br /&gt;
== Fichiers Rendus ==&lt;br /&gt;
[[Fichier:Rapport_P37_damiens_dorian.pdf‎ ]]&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&lt;br /&gt;
==='''Datasheet'''===&lt;br /&gt;
ESP8266 Adafruit breakout : https://cdn-learn.adafruit.com/downloads/pdf/adafruit-huzzah-esp8266-breakout.pdf&lt;br /&gt;
&lt;br /&gt;
Arduino méga 2560 : http://www.atmel.com/Images/Atmel-2549-8-bit-AVR-Microcontroller-ATmega640-1280-1281-2560-2561_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
L'ultrason HC-SR04 : http://www.gotronic.fr/pj2-hc-sr04-utilisation-avec-picaxe-1343.pdf&lt;br /&gt;
&lt;br /&gt;
Le capteur de présence Infrarouge IRS05A : https://www.pololu.com/file/0J615/tssp77038.pdf&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Croquette.png&amp;diff=42244</id>
		<title>Fichier:Croquette.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Croquette.png&amp;diff=42244"/>
				<updated>2017-05-15T16:31:30Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : a téléversé une nouvelle version de « Fichier:Croquette.png »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Croquette.png&amp;diff=42243</id>
		<title>Fichier:Croquette.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Croquette.png&amp;diff=42243"/>
				<updated>2017-05-15T16:29:09Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:HighShifterPetfunPetfun.jpg&amp;diff=42242</id>
		<title>Fichier:HighShifterPetfunPetfun.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:HighShifterPetfunPetfun.jpg&amp;diff=42242"/>
				<updated>2017-05-15T16:26:33Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:HighShifterPetfun.png&amp;diff=42241</id>
		<title>Fichier:HighShifterPetfun.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:HighShifterPetfun.png&amp;diff=42241"/>
				<updated>2017-05-15T16:23:52Z</updated>
		
		<summary type="html">&lt;p&gt;Ldamiens : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ldamiens</name></author>	</entry>

	</feed>