<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://projets-se.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Yelqasta</id>
	<title>projets-se.plil.fr - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://projets-se.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Yelqasta"/>
	<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php/Sp%C3%A9cial:Contributions/Yelqasta"/>
	<updated>2026-05-14T10:41:14Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.39.1</generator>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=SE4Binome2023-9&amp;diff=1603</id>
		<title>SE4Binome2023-9</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=SE4Binome2023-9&amp;diff=1603"/>
		<updated>2023-09-20T08:32:47Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : /* Test du bouclier */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ordonnanceur / SE ==&lt;br /&gt;
&lt;br /&gt;
=== Matériel pour l'ordonnanceur ===&lt;br /&gt;
[[Fichier:Carte du bouclier avant soudure.jpg|vignette|gauche|Carte du bouclier avant soudure|304x304px]]&lt;br /&gt;
[[Fichier:Carte après soudure.jpg|vignette|droite|Carte du bouclier après première soudure|285x285px]][[Fichier:He10 cable.jpg|vignette|centre|2 câbles HE10/HE10|317x317px]]&lt;br /&gt;
[[Fichier:Adaptateur le.jpg|vignette|Adaptateur|gauche|287x287px]][[Fichier:Adaptateur l.jpg|vignette|Bouclier soudé|306x306px]]&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;
&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;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Test du bouclier ===&lt;br /&gt;
Pour tester le bon fonctionnement des LED, nous avons simplement écrit un code avec &amp;lt;code&amp;gt;PORTB&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PORTC&amp;lt;/code&amp;gt;et&amp;lt;code&amp;gt;PORTD&amp;lt;/code&amp;gt;à &amp;lt;code&amp;gt;0xFF&amp;lt;/code&amp;gt;(le code est disponible sur le git) :[[Fichier:Video test led.mov|vignette|Test des LED du shield|centré]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Programmation du timer1 ===&lt;br /&gt;
Il est demandé de générer une interruption toutes les 20 ms. En nous inspirant du code présent sur cette [https://rex.plil.fr/Enseignement/Systeme/Systeme.PSE/systeme038.html page], nous avons pu, par le biais d'interruptions, allumer la LED d'un Arduino Uno.&lt;br /&gt;
&lt;br /&gt;
Pour générer une interruption toutes les 20 ms, il est nécessaire de régler le nombre de &amp;quot;ticks&amp;quot; et donc la valeur du registre &amp;lt;code&amp;gt;OCR1A&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Carte FPGA / VHDL ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Carte électronique numérique ==&lt;br /&gt;
&lt;br /&gt;
=== Type carte choisi ===&lt;br /&gt;
&lt;br /&gt;
Carte mère&lt;br /&gt;
=== Caractéristiques de la carte mère ===&lt;br /&gt;
&lt;br /&gt;
ReX : a mettre comme sous-section de la section &amp;quot;Carte électronique numérique&amp;quot;*&lt;br /&gt;
&lt;br /&gt;
ReX : utilisez la syntaxe mediawiki pour les items.&lt;br /&gt;
&lt;br /&gt;
* Alimentation : USB&lt;br /&gt;
&lt;br /&gt;
* Tension alimentation : 5V avec régulateur&lt;br /&gt;
&lt;br /&gt;
* Programmation par AVR ISP&lt;br /&gt;
&lt;br /&gt;
= Rendus =&lt;br /&gt;
&lt;br /&gt;
== GIT ==&lt;br /&gt;
https://archives.plil.fr/yelqasta/pico_ybenmbar_yelqasta_se4.git&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=SE4Binome2023-9&amp;diff=1435</id>
		<title>SE4Binome2023-9</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=SE4Binome2023-9&amp;diff=1435"/>
		<updated>2023-09-12T13:20:24Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Caractéristiques de la carte mère ==&lt;br /&gt;
- alimentation : usb&lt;br /&gt;
&lt;br /&gt;
- tension alimentation : 5V avec regulateur&lt;br /&gt;
&lt;br /&gt;
- programmmation par avr isp&lt;br /&gt;
&lt;br /&gt;
== Ordonnanceur ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Carte FPGA / VHDL ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Carte électronique numérique ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Type carte choisi ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Carte mère&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=SE4Binome2023-9&amp;diff=1434</id>
		<title>SE4Binome2023-9</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=SE4Binome2023-9&amp;diff=1434"/>
		<updated>2023-09-12T13:15:15Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : /* Type carte choisi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ordonnanceur ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Carte FPGA / VHDL ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Carte électronique numérique ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Type carte choisi ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Carte mère&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=SE4Binome2023-9&amp;diff=1433</id>
		<title>SE4Binome2023-9</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=SE4Binome2023-9&amp;diff=1433"/>
		<updated>2023-09-12T13:14:18Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : Page créée avec « == Ordonnanceur ==   == Carte FPGA / VHDL ==   == Carte électronique numérique ==   == Type carte choisi == »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ordonnanceur ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Carte FPGA / VHDL ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Carte électronique numérique ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Type carte choisi ==&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Pico_SE4_2023/2024&amp;diff=1424</id>
		<title>Pico SE4 2023/2024</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Pico_SE4_2023/2024&amp;diff=1424"/>
		<updated>2023-09-12T12:47:12Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : /* Réalisations des élèves */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Objectif =&lt;br /&gt;
&lt;br /&gt;
Pour l'année académique 2023/2024 nous vous demandons de construire un pico-ordinateur comprenant les éléments suivants :&lt;br /&gt;
* un processeur de type microcontrôleur ;&lt;br /&gt;
* un clavier ;&lt;br /&gt;
* un dispositif d'affichage ;&lt;br /&gt;
* un système d'exploitation stocké dans la mémoire flash du microcontrôleur ;&lt;br /&gt;
* une mémoire de masse allant au delà de la mémoire flash sus-citée ;&lt;br /&gt;
* un dispositif de communication avec l'extérieur.&lt;br /&gt;
&lt;br /&gt;
Pour faire en sorte que tous les éléments puissent communiquer entre eux nous vous demandons d'utiliser un bus série.&lt;br /&gt;
&lt;br /&gt;
= Compétences évaluées =&lt;br /&gt;
&lt;br /&gt;
Les compétences suivantes doivent être acquises durant ce module.&lt;br /&gt;
* Savoir comprendre, ou à défaut être actif en séances pour poser les questions pertinentes aux encadrants.&lt;br /&gt;
* Savoir produire un travail régulier et documenté durant la totalité de la période.&lt;br /&gt;
* Savoir concevoir et réaliser des cartes électroniques fonctionnelles.&lt;br /&gt;
* Savoir concevoir et programmer un circuit FPGA en VHDL.&lt;br /&gt;
* Savoir structurer et écrire des pilotes pour cartes électroniques.&lt;br /&gt;
* Savoir concevoir et implanter des primitives systèmes et un micro-système d'exploitation.&lt;br /&gt;
&lt;br /&gt;
= Organisation du travail =&lt;br /&gt;
&lt;br /&gt;
Vous aurez, comme d'habitude, la lourde tâche de tester ce module de travaux pratiques.&lt;br /&gt;
&lt;br /&gt;
Ce sera d'autant moins facile que nous vous demandons de vous coordonner pour réaliser le pico-ordinateur : un seul exemplaire fonctionnel est attendu par groupes de 4 binômes.&lt;br /&gt;
&lt;br /&gt;
Vous allez donc devoir vous organiser pour que chaque binôme réalise une partie de l'ensemble. Cela dit des tâches identiques sont à réaliser par tous les binômes, ces tâches vous permettront de vous exercer mais aussi de tester vos réalisations spécifiques.&lt;br /&gt;
&lt;br /&gt;
== Matériel fourni ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:2023_Bouclier_Pico.pdf||thumb|right|400px]]&lt;br /&gt;
&lt;br /&gt;
Pour que chaque binôme puisse avoir un minimum d'autonomie, un matériel de base est fourni :&lt;br /&gt;
* un Arduino Uno pour prototyper le coeur d'une carte mère ;&lt;br /&gt;
* un bouclier Arduino pour disposer d'une mémoire de masse (carte SD) et de connecteurs vers les cartes filles, voir le schéma et le PCB ci-contre ;&lt;br /&gt;
* d'une matrice de LED et d'un afficheur 7-segments tous les deux gérables par SPI pour pouvoir écrire les briques de votre système d'exploitation.&lt;br /&gt;
&lt;br /&gt;
Le projet KiCAD pour le bouclier Arduino est disponible : [[Média:2023_Bouclier_Pico.zip]]&lt;br /&gt;
&lt;br /&gt;
Les projets KiCAD pour connecter les périphériques via un connecteur sont disponibles : [[Média:2023_HE10-periph.zip]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[file:2023_Bouclier_Pico_PCB.png||thumb|center|300px]]&lt;br /&gt;
&lt;br /&gt;
Vision de la carte partiellement montée. L'accès à la carte SD est fonctionnel.&lt;br /&gt;
&lt;br /&gt;
[[file:2023_Bouclier_Pico_Test.jpg||thumb|center|300px]]&lt;br /&gt;
&lt;br /&gt;
Pour la partie programmation concernant la carte SD vous pouvez vous appuyer sur le projet ci-contre utilisant &amp;lt;code&amp;gt;avr-gcc&amp;lt;/code&amp;gt; comme compilateur : [[Fichier:TestSD_avrgcc.zip]].&lt;br /&gt;
&lt;br /&gt;
== Réalisations par binôme ==&lt;br /&gt;
&lt;br /&gt;
Chaque binôme réalise :&lt;br /&gt;
* un système d'exploitation basé sur un ordonnanceur ;&lt;br /&gt;
* une carte fille FPGA programmée par VHDL, le binôme écrit aussi le code pour que la carte puisse être gérée par le système d'exploitation ;&lt;br /&gt;
* une carte mère ou une carte fille à base de microcontrôleur, le binôme écrit aussi le code pour que la carte puisse être gérée par le système d'exploitation, le binôme peut réaliser plusieurs cartes pour maximiser sa note.&lt;br /&gt;
&lt;br /&gt;
== Réalisation par groupe de binômes ==&lt;br /&gt;
&lt;br /&gt;
Par groupe de 4 binômes vous devez réaliser un pico-ordinateur complet :&lt;br /&gt;
* une carte mère ;&lt;br /&gt;
* une carte fille FPGA/VHDL fonctionnelle et supportée par votre carte mère ;&lt;br /&gt;
* au moins 3 cartes filles fonctionnelles et supportées par votre carte mère (clavier, écran, réseau) ;&lt;br /&gt;
* vous pouvez ajouter une cinquième carte fille optionnelle de type carte son.&lt;br /&gt;
&lt;br /&gt;
= Cahier des charges =&lt;br /&gt;
&lt;br /&gt;
== Ordonnanceur ==&lt;br /&gt;
&lt;br /&gt;
Vous n'avez pas besoin d'avoir conçu et réalisé des cartes électroniques pour commencer à écrire le système d'exploitation du pico-ordinateur et en particulier l'ordonnanceur sous-jacent.&lt;br /&gt;
&lt;br /&gt;
Le principe est d'utiliser un minuteur du microcontrôleur pour lancer périodiquement une fonction d'interruption que vous allez transformer en ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps vous testerez votre ordonnanceur en créant deux tâches statiques pour faire clignoter, avec des périodes différentes, deux LED du bouclier fourni.&lt;br /&gt;
&lt;br /&gt;
Par la suite vous allez complexifier votre ordonnanceur en ajoutant :&lt;br /&gt;
* une tâche de lecture de caractère par le port série (stocké en mémoire partagé) ;&lt;br /&gt;
* une tâche d'écriture sur le port série (du caractère lu sur le port série) ;&lt;br /&gt;
* une tâche d'écriture sur la matrice (du caractère lu sur le port série) ;&lt;br /&gt;
* une tâche d'écriture sur l'afficheur 7 segments (du caractère lu sur le port série).&lt;br /&gt;
&lt;br /&gt;
Les deux dernières tâches sont plus compliquées à réaliser dans la mesure où elles utilisent une ressource commune.&lt;br /&gt;
&lt;br /&gt;
== Cartes filles FPGA ==&lt;br /&gt;
&lt;br /&gt;
Les cartes filles FPGA doivent être programmées en VHDL. Tous les binômes doivent implanter en VHDL :&lt;br /&gt;
* un contrôleur de bus série SPI ;&lt;br /&gt;
* un décodeur des commandes reçues par SPI (commandes sur un octet avec éventuellement des paramètres à suivre) ;&lt;br /&gt;
* un contrôleur d'écran VGA affichant le contenu graphique de la RAM de la carte FPGA.&lt;br /&gt;
&lt;br /&gt;
A minima il faut une commande pour insérer un pixel d'une couleur donnée dans la RAM d'affichage.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aussi ajouter des fonctionnalités supplémentaires à votre carte FPGA :&lt;br /&gt;
* mémoire de masse par accès direct à une carte mémoire SD ;&lt;br /&gt;
* carte réseau Ethernet en utilisant un module PHY Ethernet.&lt;br /&gt;
&lt;br /&gt;
Pour les fonctionnalités supplémentaires vous devez prévoir des commandes supplémentaire au niveau du décodeur.&lt;br /&gt;
&lt;br /&gt;
== Cartes électroniques ==&lt;br /&gt;
&lt;br /&gt;
Vous devez réaliser deux type de cartes électroniques à base de microcontrôleur : une carte mère et des cartes filles.&lt;br /&gt;
La carte FPGA/VHDL décrite dans la section précédente est considérée comme une carte fille.&lt;br /&gt;
&lt;br /&gt;
Les cartes filles sont connectées via un bus série à la carte mère. C'est aussi la carte mère qui alimente les cartes filles.&lt;br /&gt;
Enfin la carte mère dispose d'une mémoire permanente pour stocker des fichiers.&lt;br /&gt;
&lt;br /&gt;
Les cartes filles peuvent être de différents types :&lt;br /&gt;
* carte fille clavier ;&lt;br /&gt;
* carte fille d'affichage ;&lt;br /&gt;
* carte fille série (se comporte comme un clavier et comme un dispositif d'affichage) ;&lt;br /&gt;
* carte fille réseau ;&lt;br /&gt;
* carte fille mémoire de masse (alternative à la mémoire de masse de la carte mère) ;&lt;br /&gt;
* carte fille son.&lt;br /&gt;
&lt;br /&gt;
Pour un type donné vous avez le choix entre plusieurs technologies pour réaliser votre carte. Par exemple une carte fille clavier peut être implantée par une matrice de touches ou en utilisant un clavier USB.&lt;br /&gt;
&lt;br /&gt;
== Programmation système ==&lt;br /&gt;
&lt;br /&gt;
Le système d'exploitation du pico-ordinateur doit avoir les fonctionnalités d'un DOS (Disk Operating System), à savoir :&lt;br /&gt;
* lecture des commandes tapées par l'utilisateur ;&lt;br /&gt;
* téléchargement d'exécutables ou de sources via le dispositif de communication extérieur  ;&lt;br /&gt;
* sauvegarde et chargement d'exécutables ou de sources via la mémoire de masse ;&lt;br /&gt;
* permettre l'affichage de chaînes de caractères ;&lt;br /&gt;
* comprend un interpréteur micro-python pour faire tourner les sources ;&lt;br /&gt;
* les différentes fonctionnalités sont réalisées sous forme de tâches gérées par un ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Commandes de base ===&lt;br /&gt;
&lt;br /&gt;
Ces commandes sont les commandes les plus simples à implanter :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VERSION || Affiche la version du système d'exploitation&lt;br /&gt;
|-&lt;br /&gt;
| DEVICES || Affiche la liste des cartes filles connectées&lt;br /&gt;
|-&lt;br /&gt;
| ECHO || Affiche les arguments de la commande&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Commandes liées aux processus ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PS || Liste les processus disponibles et leur état&lt;br /&gt;
|-&lt;br /&gt;
| SLEEP || Met un processus en sommeil&lt;br /&gt;
|-&lt;br /&gt;
| WAKE || Relance un processus dormant&lt;br /&gt;
|-&lt;br /&gt;
| EXEC || Création d'un processus à partir d'un fichier exécutable&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
La commande EXEC est complexe à réaliser, elle est optionnelle pour l'année 2023/2024.&lt;br /&gt;
&lt;br /&gt;
=== Commandes liées au système de fichiers ===&lt;br /&gt;
&lt;br /&gt;
Commandes pour gérer le système de fichiers :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description&lt;br /&gt;
|-&lt;br /&gt;
| FORMAT || Formate le système de fichiers&lt;br /&gt;
|-&lt;br /&gt;
| LIST || Affiche les fichiers du répertoire principal&lt;br /&gt;
|-&lt;br /&gt;
| CREATE || Création d'un fichier avec l'entrée standard&lt;br /&gt;
|-&lt;br /&gt;
| TYPE || Affiche le contenu d'un fichier&lt;br /&gt;
|-&lt;br /&gt;
| COPY || Copie un fichier&lt;br /&gt;
|-&lt;br /&gt;
| RENAME || Renomme un fichier&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Commandes liées au réseau ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description&lt;br /&gt;
|-&lt;br /&gt;
| REMOTE || Liste les fichiers disponibles sur le réseau&lt;br /&gt;
|-&lt;br /&gt;
| GET || Télécharge un fichier en provenance du réseau&lt;br /&gt;
|-&lt;br /&gt;
| PUT || Sauve un fichier sur le réseau&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Programmation des pilotes ==&lt;br /&gt;
&lt;br /&gt;
La programmation c'est aussi l'écriture des sous-systèmes ou des pilotes liés à chaque cartes :&lt;br /&gt;
* pour la carte mère, il faut écrire un sous-système de gestion de fichiers ;&lt;br /&gt;
* pour la carte fille comportant une matrice de touches, il faut écrire le pilote identifiant les touches actionnées et gérant l'envoi de ces touches à la carte mère ;&lt;br /&gt;
* pour la carte fille gérant un clavier USB, il faut utiliser un projet LUFA pour scanner régulièrement le clavier USB et envoyer d'éventuels événements à la carte mère ;&lt;br /&gt;
*  pour la carte fille gérant un écran LCD, il faut écrire le pilote capable de gérer l'écran et la partie récupérant les données de la carte mère ;&lt;br /&gt;
* pour la carte fille gérant une clé USB, il faut utiliser un projet LUFA pour l'accès à la clé et écrire un sous-système de gestion de fichiers ;&lt;br /&gt;
* la carte fille gérant une connexion série ne nécessite qu'un modeste pilote de communication avec la carte mère ;&lt;br /&gt;
* pour la carte fille permettant une connexion avec le monde extérieur via de simples points d'accès USB de volume (EP Bulk), il faut écrire le pilote pour communication avec la carte mère mais aussi le programme sur le PC permettant la réception ou l'envoi de fichiers ;&lt;br /&gt;
* pour la carte fille permettant une connexion Ethernet au dessus d'USB (RNDIS), il faut écrire une micro-pile réseau capable de récupérer et d'envoyer des fichiers au travers de paquets Ethernet mais aussi le programme sur le PC cible capable de comprendre ces paquets Ethernet ;&lt;br /&gt;
* pour la carte fille incluant une puce Ethernet, il faut implanter la micro-pile réseau et le programme évoquée ci-dessus mais aussi le pilote capable de gérer la puce Ethernet ;&lt;br /&gt;
* pour la carte fille son, il faut écrire la partie permettant de récupérer les échantillons, les copier en mémoire, et les jouer à la vitesse d'échantillonnage préalablement transmise.&lt;br /&gt;
&lt;br /&gt;
= Spécifications techniques =&lt;br /&gt;
&lt;br /&gt;
== Ordonnanceur ==&lt;br /&gt;
&lt;br /&gt;
Pour réaliser votre ordonnanceur commencez par programmer le minuteur 1 de l'ATMega328p de sorte à ce qu'il génère une interruption toutes&lt;br /&gt;
les 20ms. L'interruption va déclencher une fonction de gestion d'interruption (ISR pour Interrupt Service Routine). Vous utiliserez une ISR nue pour éviter les interférences du compilateur sur la pile d'exécution :&lt;br /&gt;
 ISR(TIMER1_COMPA_vect,ISR_NAKED)&lt;br /&gt;
 {&lt;br /&gt;
 /* Sauvegarde du contexte de la tâche interrompue */&lt;br /&gt;
 ...&lt;br /&gt;
 /* Appel à l'ordonnanceur */&lt;br /&gt;
 scheduler();&lt;br /&gt;
 /* Récupération du contexte de la tâche ré-activée */&lt;br /&gt;
 ...&lt;br /&gt;
 asm volatile ( &amp;quot;reti&amp;quot; );&lt;br /&gt;
 }&lt;br /&gt;
Vous constatez qu'il vous reste à écrire, dans l'ISR, le code pour sauvegarder et récupérer le contexte d'exécution d'une tâche. Pour cela réfléchissez aux éléments d'un microcontrôleur qui sont nécessaires pour l'exécution d'un programme puis réfléchissez à une méthode pour sauver l'état de ces éléments. &lt;br /&gt;
&lt;br /&gt;
Au moins dans un premier temps, les tâches seront définies de façon statique. Toutes les tâches doivent être définies dans un tableau global, seront lancées dès le démarrage du microcontrôleur et ne se termineront que lorsque le microcontrôleur sera arrêté ou relancé. Une tâche est à définir par une structure dont un des champs doit être la fonction réalisant la tâche. A vous de définir les autres champs.&lt;br /&gt;
&lt;br /&gt;
Avant de démarrer l'ordonnanceur, il faut prendre soin à ce que la récupération du contexte dans l'ISR fonctionne alors que les tâches n'auront pas encore été lancées. Il faut donc une fonction permettant d'initialiser le contexte pour chaque tâche.&lt;br /&gt;
&lt;br /&gt;
== Cartes électroniques à microcontrôleur ==&lt;br /&gt;
&lt;br /&gt;
Le bus série préconisé pour la communication entre la carte mère et les cartes filles est un bus SPI. Au niveau physique, les connexions entre cartes mères et cartes filles doivent être réalisées via des connecteurs HE-10 à 8 broches :&lt;br /&gt;
* 2 broches pour l'alimentation ;&lt;br /&gt;
* 3 broches pour les signaux SPI (MISO, MOSI, SCK) ;&lt;br /&gt;
* 1 broche pour le CS (Chip Select) ;-&lt;br /&gt;
* 1 broche pour une éventuelle ligne d'interruption ;&lt;br /&gt;
* 1 broche pour une eventuelle réinitialisation de la carte (Reset).&lt;br /&gt;
&lt;br /&gt;
Il est conseillé d'organiser les broches sur les connecteurs HE-10 sur le modèle du bouclier Arduino fourni.&lt;br /&gt;
&lt;br /&gt;
La carte mère est constituée autour d'un ATMega328p et d'une puce mémoire de type AT45DB641E de 8 Mo. Il faut réflechir à l'alimentation sachant que :&lt;br /&gt;
* l'alimentation de la carte mère doit être suffisante pour alimenter les cartes filles ;&lt;br /&gt;
* l'alimentation du microcontrôleur doit être compatible avec l'alimentation de la puce mémoire sauf à prévoir une conversion de niveaux logiques entre les deux puces ;&lt;br /&gt;
* les cartes filles d'un même pico-ordinateur doivent être alimentées avec la même tension.&lt;br /&gt;
&lt;br /&gt;
Voici quelques exemples d'architectures de cartes filles :&lt;br /&gt;
* une carte fille SPI avec un ATMega328p et une matrice de touches ;&lt;br /&gt;
* une carte fille SPI avec un AT90USB647 pour connexion à un clavier USB ou une clef USB ;&lt;br /&gt;
* une carte fille SPI avec un ATMega328p et un écran LCD 2 lignes HD44780 ;&lt;br /&gt;
* une carte fille SPI avec un ATMega16u2 pour une connexion série USB ;&lt;br /&gt;
* une carte fille SPI avec un ATMega328p et un DAC R-2R comme carte son ;&lt;br /&gt;
* une carte fille SPI avec un ATMega16u2 (ou supérieur) pour une connexion réseau (périphérique USB générique EP bulk ou périphérique USB RNDIS) ;&lt;br /&gt;
* une carte fille SPI avec un ATMega328p et un ENC28J60 pour une connexion Ethernet 10Mb/s.&lt;br /&gt;
&lt;br /&gt;
Toutes les cartes doivent permettre un accès au port série de leur microcontrôleur pour un déverminage via un FTDI. Vous devez aussi ajouter des points de test pour les lignes importantes : lignes du bus SPI, horloge, alimentations, etc.&lt;br /&gt;
&lt;br /&gt;
Toutes les cartes filles répondent à la commande SPI constituée de l'octet de commande 0x00 et de l'octet de donnée 0x00. Le résultat se lit sur le second octet de réponse et détermine le type de la carte fille. Le chiffre de poid fort de la réponse est un code magique : 0xa. Le chiffre de poid faible est donné par le tableau ci-dessous :&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Chiffre !! Type de carte&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || Clavier&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || Affichage&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || Réseau&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || Carte son&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Il est bon aussi de prévoir que les cartes filles puissent répondre à une commande SPI permettant de savoir si elles sont occupées ou non. L'octet de commande serait 0xFF et l'octet de donnée 0xFF. En cas de succès les deux octets de réponse sont à 0x55. Les cartes filles doivent prendre soin d'initialiser leur réponse SPI à autre chose que 0x55 lorsqu'elles se lancent dans un traitement autre qu'une écoute SPI.&lt;br /&gt;
&lt;br /&gt;
== Electronique et programmation système ==&lt;br /&gt;
 &lt;br /&gt;
=== Carte mère ===&lt;br /&gt;
&lt;br /&gt;
La carte mère doit comporter un microcontrôleur ATMega328p, une puce mémoire AT45DB641E et 5 connecteurs HE10 pour connecter une carte fille FPGA et 4 cartes filles à microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Vous avez aussi quelques points à approfondir.&lt;br /&gt;
# La source d'alimentation de votre pico-ordinateur, le plus simple semble être un connecteur USB pour utiliser soit un PC soit une batterie comme source ;&lt;br /&gt;
# La tension d'alimentation du microcontrôleur et des cartes filles :&lt;br /&gt;
#* soit vous optez pour du 5V auquel cas il faut prévoir un régulateur de tension pour la puce mémoire et une adaptation des niveaux logiques pour cette même puce (voir le schéma des boucliers Arduino),&lt;br /&gt;
#* soit vous partez sur du 3.3V et vos cartes filles doivent tourner en 3.3V, vu que vous aurez probablement un adaptateur 5V il faut quand même prévoir un régulateur 3.3V assez costaud sur la carte mère, de plus vous ne pouvez pas dépasser 8Mhz comme horloge ;&lt;br /&gt;
# La méthode de programmation de la carte mère :&lt;br /&gt;
#* soit vous programmez le microcontrôleur via un connecteur AVR ISP, un programmateur et l'utilitaire &amp;lt;code&amp;gt;avrdude&amp;lt;/code&amp;gt; ;&lt;br /&gt;
#* soit vous ajoutez une puce pour réaliser un pont USB vers série vous pourrez alors programmer le microcontrôleur avec &amp;lt;code&amp;gt;dfu-programmer&amp;lt;/code&amp;gt;, attention il faut tout de même prévoir des connecteurs AVR ISP pour charger l'amorceur sur l'ATMega328p et l'éventuel ATMega8u2 (vous utilisez cette puce pour l'USB/série plutôt qu'une puce FTDI).&lt;br /&gt;
&lt;br /&gt;
Du coté programmation vous êtes chargés d'écrire les fonctions d'accès à la mémoire, des primitives systèmes implantant un micro-système de fichiers et des primitives de communication via le bus SPI.&lt;br /&gt;
&lt;br /&gt;
Les fonctions de base d'accès à la mémoire sont facilement trouvables, par exemple sur les sites du bureau d'études systèmes embarqués des PeiP.&lt;br /&gt;
&lt;br /&gt;
Concernant le micro-système de fichiers, les fonctionnalités suivantes doivent être implantées :&lt;br /&gt;
&lt;br /&gt;
* le système de fichiers doit résider dans la mémoire de 8 Mo, les accès à la mémoire se font par blocs de 256 octets ;&lt;br /&gt;
* l'accès au système de fichiers se fait par des primitives système ;&lt;br /&gt;
* le micro-système de fichiers ne comporte qu'un répertoire : le répertoire principal, ce dernier peut comporter au maximum 64 fichiers, un fichier est caractérisé par un nom de 16 caractères au maximum, sa taille et ses blocs de données, un fichier est décrit par un maximum de 16 blocs de données ;&lt;br /&gt;
* le superbloc du système de fichiers comprend, en plus de la description du répertoire racine, une carte bit à bit des blocs de données libres, cette carte nécessite 16 blocs ;&lt;br /&gt;
* les différentes primitives à implanter sont :&lt;br /&gt;
** &amp;lt;code&amp;gt;append&amp;lt;/code&amp;gt; pour créer un fichier si non existant et ajouter des données en fin de fichier, les paramètres sont le nom du fichier, les données à ajouter et la taille des données,&lt;br /&gt;
** &amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt; pour lire des données dans un fichier, les paramètres sont le nom du fichier, le tableau dans lequel stocker les données, la taille du tableau et le déplacement par rapport au début du fichier,&lt;br /&gt;
** &amp;lt;code&amp;gt;remove&amp;lt;/code&amp;gt; pour détruire un fichier, le seul paramètre est le nom du fichier,&lt;br /&gt;
** &amp;lt;code&amp;gt;rename&amp;lt;/code&amp;gt; pour renommer un fichier, les paramètres sont l'ancien et le nouveau noms du fichier,&lt;br /&gt;
** &amp;lt;code&amp;gt;copy&amp;lt;/code&amp;gt; pour copier un fichier, les paramètres sont le nom du fichier original et le nom de la copie.&lt;br /&gt;
&lt;br /&gt;
Les primitives pour le bus SPI doivent être :&lt;br /&gt;
* une fonction d'initialisation avec le mode SPI désiré et la vitesse d'horloge souhaitée ;&lt;br /&gt;
* une primitive pour envoyer quelques octets via le bus SPI :&lt;br /&gt;
** les paramètres de la primitive sont le tableau des octets à envoyer, le tableau des octets à recevoir, le nombre d'octets à envoyer et la spécification de la sortie CS de sélection du périphérique SPI,&lt;br /&gt;
** la primitive stocke l'opération dans une file et effectue l'envoi dès que le bus est libre,&lt;br /&gt;
** si la file est pleine la primitive peut retourner un code d'erreur sinon la primitive retourne l'identifiant unique de l'opération,&lt;br /&gt;
** les octets de réponse du périphérique sont stockés dans le tableau des octets à recevoir, si le pointeur est nul les réponses ne sont pas stockées ;&lt;br /&gt;
* une primitive pour attendre la fin d'un envoi SPI, il faut donner en unique paramètre l'identifiant de l'opération, l'attente s'effectue en mettant le processus appelant en mode sommeil et en le réveillant dès que l'opération est effectuée.&lt;br /&gt;
&lt;br /&gt;
Précisons que les tableaux stockés dans la file d'attente (requête et réponse SPI) le sont sous la forme de pointeurs. Ces pointeurs peuvent être librérés une fois l'opération effectuée.&lt;br /&gt;
&lt;br /&gt;
=== Carte fille clavier &amp;quot;matrice de touches&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
La réalisation de la carte est simple, il s'agit de scanner une matrice de touches à l'aide d'un ATMega328p. N'oubliez pas le connecteur HE10 pour la connexion de cette carte fille à une carte mère. Sur le connecteur HE10 il faut prévoir à la fois la ligne de sélection SPI (utilisez la broche SS par défaut sur votre carte) et une ligne pour générer une interruption sur la carte mère. Vous devez faire avec l'alimentation fournie par la carte mère. Regardez aussi la problèmatique sur la programmation décrite dans la section sur la carte mère.&lt;br /&gt;
&lt;br /&gt;
Du coté programmation, c'est plus compliqué, vous êtes déjà chargés d'écrire la fonction de scan des touches :&lt;br /&gt;
* le scan des touches consiste juste à passer les lignes de la matrice en sorties, les colonnes en entrées avec résistance de charge et de rentrer dans une boucle pour passer une sortie à GND tandis que les autres restent à VCC, il suffit alors de consulter les entrées pour voir si une touche est appuyée (ou plusieurs) ;&lt;br /&gt;
* si une touche est appuyée la touche est stockée dans un tampon et la ligne d'interruption est activée ;&lt;br /&gt;
* si une requête SPI de code commande 0x01 est reçue, le nombre de touches dans le tampon est envoyé suivi des touches elles-mêmes.&lt;br /&gt;
&lt;br /&gt;
Ensuite, au niveau de la carte mère vous devez écrire la primitive gérant les claviers. Cette primitive prend en paramètre la ligne de sélection SPI du clavier ciblé et un tampon pour stocker les codes des touches. La taille du tampon est aussi passée en paramètre. La primitive prépare une transmission SPI constituée du seul octet de valeur 0x01 en prenant soin de préciser un tableau pour stocker d'éventuelles touches. Attention, la transmission SPI est constituée de l'octet 0x01 mais aussi d'autant d'octets de valeurs indéterminées qu'il est attendu d'octets dans la réponse SPI. La primitive se met alors en attente de la réponse.&lt;br /&gt;
&lt;br /&gt;
Au niveau du système d'exploitation les comportements suivants sont à implanter :&lt;br /&gt;
* à l'initialisation de la carte mère les périphériques SPI doivent être contactés pour déterminer lequels sont des claviers, des commandes SPI 0x00 sont donc envoyées avec attente des réponses SPI ;&lt;br /&gt;
* le processus SHELL toujours présent dans le système d'exploitation doit avoir le comportement suivant :&lt;br /&gt;
** si une interruption est reçue qui correspond à un périphérique clavier, le SHELL doit utiliser la primitive de lecture clavier pour obtenir la ou les touches appuyées ;&lt;br /&gt;
** dans un premier temps, les caractères reçus sont affichés en utilisant la primitive d'affichage (echo) ;&lt;br /&gt;
** à terme les lignes de caractères reçues sont analysées pour en extraire des commandes et les exécuter.&lt;br /&gt;
&lt;br /&gt;
=== Carte fille clavier &amp;quot;USB&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Votre carte électronique doit tourner autour d'un AT90USB647 (ou supérieur). Ce microcontrôleur peut être programmé, en utilisant la bibliothèque LUFA, comme hôte USB. Il est donc possible de gérer, de cette façon un clavier USB et de faire interface avec la carte mère. Le schéma de la carte est très semblable à celui d'une carte comportant un ATMega16u2. Vous pouvez vous appuyer sur ce [https://wiki-se.plil.fr/mediawiki/index.php/SE4_2022/2023_EC5 projet keylogger]. Le plus simple est de programmer le microcontrôleur en utilisant l'utilitaire &amp;lt;code&amp;gt;dfu-programmer&amp;lt;/code&amp;gt;, pour cela il faut prévoir, en plus d'un connecteur USB A femelle pour le clavier, un connecteur USB mâle pour la programmation.&lt;br /&gt;
&lt;br /&gt;
La programmation pour la gestion du clavier USB doit se reposer sur la démonstration &amp;lt;code&amp;gt;KeyboardHost&amp;lt;/code&amp;gt; de la bibliothèque LUFA. La conversion des modificateurs et des codes de touches en caractères ASCII sont à votre charge.&lt;br /&gt;
&lt;br /&gt;
Pour le reste de la programmation voir la section sur la carte fille &amp;quot;matrice de touches&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Carte fille écran LCD ===&lt;br /&gt;
&lt;br /&gt;
Cette carte comporte un ATMega328p et un écran LCD à base de contrôleur HD44780. L'écran LCD nécessite un potentiomètre pour régler la luminosité   des cristaux liquides. N'oubliez pas le connecteur HE10 pour la connexion de cette carte fille à une carte mère. Sur le connecteur HE10 il faut prévoir une ligne de sélection SPI. Aucune ligne d'interruption n'est nécessaire pour cette carte. Enfin il vous faut prévoir un connecteur AVR ISP pour programmer le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Le microcontrôleur de la carte fille doit être programmé pour gérer le contrôleur HD44780 ou compatible :&lt;br /&gt;
* les écrans avec 1, 2, 3 ou 4 lignes doivent être gérés ;&lt;br /&gt;
* les caractères ASCII doivent être affichés sur l'écran ;&lt;br /&gt;
* les caractères spéciaux &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;\r&amp;lt;/code&amp;gt; doivent être pris en compte pour le saut de ligne et le retour chariot ;&lt;br /&gt;
* les codes VT100 doivent être pris en compte, en particulier pour le déplacement du curseur doivent être pris en compte ;&lt;br /&gt;
* le contrôleur HD44780 ou compatible doit être configuré en mode défilement automatique.&lt;br /&gt;
&lt;br /&gt;
Les caractères à afficher ou spéciaux (y compris les séquences VT100) sont reçus par le bus SPI par la carte fille préfixés par le code commande 0x01. &lt;br /&gt;
&lt;br /&gt;
Au niveau de la carte mère vous devez écrire la primitive système. Cette primitive prend en paramètre la ligne de sélection SPI de l'écran ciblé et la chaîne des caractères à envoyer. La primitive prépare une transmission SPI constituée de l'octet de commande 0x01 et des octets correspondant aux caractères.&lt;br /&gt;
&lt;br /&gt;
Il ne faut pas demander un affichage si un autre affichage est en cours. C'est possible à réaliser avec la ligne prévue pour une interruption. La carte fille peut mettre cette ligne en état haut quand un affichage est en cours. Du coup la primitive peut se mettre en attente sur un état bas avant d'envoyer la requête SPI. C'est aussi possible de lancer des commandes 0xFF sur la carte jusqu'à obtenir les octets de réponse indiquant que la carte est libre.&lt;br /&gt;
&lt;br /&gt;
Cette primitive est utilisée par le système d'exploitation pour réaliser l'écho des commandes dans le SHELL et aussi par toutes les commandes qui nécessitent un affichage. Tous les écrans doivent être sollicités lors des affichages, il faut donc que le système d'exploitation scanne les périphériques SPI pour trouver les écrans comme il le fait pour les claviers.&lt;br /&gt;
&lt;br /&gt;
=== Carte fille réseau RNDIS ===&lt;br /&gt;
&lt;br /&gt;
Le but de cette carte est de permettre au pico-ordinateur de converser avec l'extérieur. Une carte RNDIS permet de faire transister des paquets Ethernet au dessus d'une liaison USB. La carte n'a besoin que d'un microcontrôleur avec capacités USB pour fonctionner. Vous pouvez utiliser un &lt;br /&gt;
ATMega16u2, un ATMega32u4 ou un AT90USB suivant la taille mémoire dont vous souhaitez disposer. Gardez en mémoire qu'un paquet Ethernet peut comporter jusqu'à 1500 octets. La programmation du microcontrôleur se fera par DFU USB. Il est notable que la programmation du microcontrôleur et la communication vers l'extérieur se fait par le même connecteur USB.&lt;br /&gt;
&lt;br /&gt;
La communication se fait forcément via le PC auquel la carte fille est connectée par USB. Cela dit si ce PC est connecté en réseau, les fichiers auxquels le pico-ordinateur accède peuvent se trouver sur un autre PC. Si votre carte fille est correctement programmée comme carte RNDIS USB, le PC sous Linux va automatiquement créer une interface réseau &amp;lt;code&amp;gt;usb0&amp;lt;/code&amp;gt;. A vous de la démarrer avec la commande &amp;lt;code&amp;gt;ip link set usb0 up&amp;lt;/code&amp;gt; ou une commande du type &amp;lt;code&amp;gt;ip address add @IP/masque dev usb0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
La base de la programmation de cette carte est la démonstration LUFA RNDIS. Des versions de cette démonstration incluent une implantation de pile TCP/IP. A vous de voir à quel niveau vous souhaitez que votre carte réseau opère :&lt;br /&gt;
* si vous visez Ethernet, votre projet LUFA sera assez simple à écrire mais l'application sur le PC sera un peu exotique, il vous faudra utiliser la programmation socket en mode RAW ;&lt;br /&gt;
* si vous visez UDP, votre projet LUFA sera plus complexe mais l'application sur le PC pourra se faire avec des sockets en mode non connecté standard ;&lt;br /&gt;
* si vous visez TCP, votre projet LUFA sera complexe et nécessitera un microcontrôleur avec pas mal de mémoire, par contre vous pourrez utiliser des applications standard sur le PC (serveur Web ou FTP).&lt;br /&gt;
&lt;br /&gt;
Au niveau de la carte, en plus de votre pile réseau vous devez écrire les fonctions permettant de lister des fichiers distants, de les recevoir et d'en envoyer :&lt;br /&gt;
* Si la commande SPI est 0x01, la carte mère vous demande de lister les fichiers distants, vous devez donc former les paquets réseau nécessaires pour envoyer la demande, la commande SPI peut comporter un argument supplémentaire pour préciser la localisation des fichiers. A la suite d'une commande 0x01, la carte mère doit envoyer des commandes 0x11 pour récupérer tous les noms de fichiers, idéalement un nom par commande 0x11 pour ne pas déborder la mémoire du microcontrôleur. Si le fichier n'est pas le dernier la réponse SPI est 0x01 sinon 0x00.  Si vous utilisez Ethernet ou UDP, il faut prévoir un délai maximal pour la réception des paquets de sorte à ne pas bloquer la commande. En cas de non réception de paquet, il faut retourner un code SPI d'erreur, par exemple 0x02.&lt;br /&gt;
&lt;br /&gt;
* Si la commande SPI est 0x02, la carte mère souhaite récupérer un fichier. Vous devez former les paquets réseau nécessaires pour demander le fichier précisé dans la suite de la commande SPI. De la même façon que pour la liste, des commandes SPI ultérieures 0x12 doivent être envoyées pour récupérer le contenu du fichier, la carte mère précise dans la commande la taille de données qu'elle est prête à accepter par requête. Même principe pour les réponses SPI que pour les commandes 0x11. Si vous utilisez Ethernet ou UDP, il faut mettre en place le même dispositif de surveillance de perte de paquets que pour la liste.&lt;br /&gt;
&lt;br /&gt;
* Si la commande SPI est 0x03, la carte mère souhaite envoyer un fichier. Vous devez former les paquets réseau nécessaires pour préparer la réception du fichier précisé dans la suite de la commande SPI. De la même façon que pour la liste, des commandes SPI ultérieures 0x13 doivent être envoyées pour passer les fragements de fichier. Si vous utilisez Ethernet ou UDP, les paquets envoyés pour transmettre les fragments comportent un numéro de séquence. La carte mère termine par un fragment vide pour indiquer que le fichier est totalement transféré. Dans ce dernier cas un paquet particulier doit être envoyé pour indiquer la fin du fichier. Une réponse est requise pour ce paquet, cette réponse peut être un succès (tous les fragments ont été reçus) ou échec. Il convient de répercuter cette réponse en tant que réponse SPI : 0x00 pour succès ou 0x02 en cas d'erreur que ce soit une erreur remontée ou une absence de paquet réponse.&lt;br /&gt;
&lt;br /&gt;
Au niveau de la carte mère vous devez écrire les primitives système permettant de préparer et de réaliser les listes, récupération et envois de fichiers. Ces primitives sont de simples encapsulation des commandes SPI décrites ci-dessus avec attente des réponses SPI pour les commandes de chiffre de poid fort 0x1. Il faut cependant s'assurer, avant chaque requête SPI, que la carte RNDIS est libre en utilisant la commande 0xFF.&lt;br /&gt;
&lt;br /&gt;
Ces primitives sont utilisées par le système d'exploitation pour réaliser les commandes de sauvegarde et de chargement de fichiers. Il est supposé qu'il n'existe qu'une carte réseau par pico-ordinateur avec une ligne de sélection de périphérique SPI fixe.&lt;br /&gt;
&lt;br /&gt;
=== Carte fille réseau &amp;quot;points d'accès de volume&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Cette carte est identique, au niveau électronique, à la carte réseau RNDIS. La seule différence réside dans la façon de faire transiter les paquets réseau de la carte vers le PC auquel elle est connectée en USB. Pour cette carte, il vous est proposé de faire ce transfert en utilisant deux points d'accès USB de type volume (bulk), un entrant et un sortant. Cette fois vous n'aurez pas l'aide du noyau Linux pour la création de l'interface réseau. Vous allez devoir écrire votre propre programme PC pour faire le pont entre la carte et une interface réseau virtuelle.&lt;br /&gt;
&lt;br /&gt;
Sous Linux la création d'une interface virtuelle est possible avec la fonction ci-dessous.&lt;br /&gt;
&lt;br /&gt;
 int allocateNetworkDevice(char *name,int flags){&lt;br /&gt;
 struct ifreq ifr;&lt;br /&gt;
 int fd,err;&lt;br /&gt;
 char *clonedev = &amp;quot;/dev/net/tun&amp;quot;;&lt;br /&gt;
 /* Open the clone device */&lt;br /&gt;
 if((fd=open(clonedev,O_RDWR))&amp;lt;0) return fd;&lt;br /&gt;
 /* Preparation of the struct ifr, of type &amp;quot;struct ifreq&amp;quot; */&lt;br /&gt;
 memset(&amp;amp;ifr,0,sizeof(ifr));&lt;br /&gt;
 ifr.ifr_flags=flags;   /* IFF_TUN or IFF_TAP, plus maybe IFF_NO_PI */&lt;br /&gt;
 if(name!=NULL) strncpy(ifr.ifr_name,name,IFNAMSIZ);&lt;br /&gt;
 /* Try to create the device */&lt;br /&gt;
 if((err=ioctl(fd,TUNSETIFF,(void *)&amp;amp;ifr))&amp;lt;0){ close(fd); return err; }&lt;br /&gt;
 /* Write back the name of the * interface to the variable &amp;quot;name&amp;quot; */&lt;br /&gt;
 if(name!=NULL) strcpy(name,ifr.ifr_name);&lt;br /&gt;
 return fd;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Le descripteur de fichier retourné est utilisable avec &amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt; pour récupérer les paquets Ethernet entrants et avec &amp;lt;code&amp;gt;write&amp;lt;/code&amp;gt; pour envoyer des paquets sur l'interface. Pour transmettre les paquets à la carte ou lire ceux provenant de la carte vous pouvez utiliser la bibliothèque &amp;lt;code&amp;gt;libusb-1.0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pour le reste de la programmation liée à cette carte vous reporter à ce qui est demandé pour la carte réseau RNDIS.&lt;br /&gt;
&lt;br /&gt;
=== Carte fille réseau Ethernet ===&lt;br /&gt;
&lt;br /&gt;
Cette version de la carte réseau se connecte à un commutateur Ethernet et non pas à un PC pour communiquer avec le monde extérieur.&lt;br /&gt;
&lt;br /&gt;
Au niveau électronique une puce Ethernet ENC28J60 (ou supérieur) est supervisée par un microcontrôleur ATMega328p. Toutes les précisions concernant les cartes à base d'ATMega328p s'appliquent (voir par exemple la carte fille clavier &amp;quot;matrice de touches). Vous trouverez la documentation de la puce Ethernet à l'adresse http://ww1.microchip.com/downloads/en/devicedoc/39662c.pdf. Un exemple de programmtion de la puce ENC624J600 est disponible à l'adresse https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers. Vous pouvez vous en inspirer pour la programmation de la puce ENC28J60.&lt;br /&gt;
&lt;br /&gt;
La programmation spécifique à cette carte concerne l'envoi des paquets à la puce ENC28J60 et la récupération des paquets en provenance de la puce ENC28J60. Comme pour la liaison RNDIS, trois options s'ouvrent à vous pour l'implémentation de votre pile réseau :&lt;br /&gt;
&lt;br /&gt;
*programmation Ethernet, votre projet sera assez simple à écrire mais l'application sur le PC sera un peu exotique, il vous faudra utiliser la programmation socket en mode RAW ;&lt;br /&gt;
* programmation UDP, votre projet sera plus complexe mais l'application sur le PC pourra se faire avec des sockets en mode non connecté standard ;&lt;br /&gt;
* programmation TCP, votre projet sera plus complexe;  par contre vous pourrez utiliser des applications standard sur le PC (serveur Web ou FTP).&lt;br /&gt;
&lt;br /&gt;
Le reste de la programmation (communication avec la carte mère et ajouts dans le système d'exploitation) est identique à ce qui est décrit pour la carte réseau RNDIS.&lt;br /&gt;
&lt;br /&gt;
=== Carte fille son ===&lt;br /&gt;
 &lt;br /&gt;
D'un point de vue électronique la carte n'est pas très compliquée, elle comporte un ATMega328p comme coeur et sa spécificité est un convertisseur numérique vers analogique dit R-2R utilisant un réseau de résistance pour implanter la conversion. Utilisez au moins un DAC sur 8 bits, vous devez pouvoir pousser jusqu'à 12 bits en utilisant pratiquement toutes les sorties disponibles. En sortie du DAC utilisez un montage Darligton pour commander le haut-parleur. N'oubliez pas le connecteur HE10 pour connecter votre carte à une carte mère. Utilisez la ligne de sélection SPI par défaut pour que la carte mère puisse commander votre carte et prévoyez une ligne d'interruption. Enfin il vous faut prévoir un connecteur AVR ISP pour programmer le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Le microcontrôleur de la carte fille doit être programmé pour pouvoir jouer des sons déjà enregistrés :&lt;br /&gt;
* des variables globales doivent être configurées pour spécifier les caractéristiques des enregistrements à jouer :&lt;br /&gt;
** précision d'échantillonnage (8 à 24 bits même si au-delà de 14 bits vous devez abandonner les bits de poids faibles),&lt;br /&gt;
** vitesse d'acquisition (vous trouverez la vitesse maximale par essais et erreurs),&lt;br /&gt;
** format des enregistrements (vous vous limiterez à un format PCM entier classique avec représentation petit-boutiste) ;&lt;br /&gt;
* une fonction permettant d'envoyer les échantillons, à la bonne vitesse, sur le DAC.&lt;br /&gt;
&lt;br /&gt;
Les échantillons sonores sont reçus par le bus SPI préfixés par le code commande 0x02. Les 2 valeurs de configuration, précision sur un octet et vitesse sur quatre octets sont envoyées préfixés par le code commande 0x01.&lt;br /&gt;
&lt;br /&gt;
Au niveau de la carte mère vous devez écrire les primitives système :&lt;br /&gt;
* la première primitive correspond au message SPI de code commande 0x01 et passe les paramètres de configuration à la carte fille ;&lt;br /&gt;
* la seconde primitive correspond au message SPI de code commande 0x02 et passe les échantillons sonores à jouer à la carte fille, la primitive s'assure auparavent que la carte n'est pas déjà occupée à jouer des échantillons avec la commande SPI 0xFF, en cas de carte occupée le code 0xFF est retourné.&lt;br /&gt;
&lt;br /&gt;
Ces primitives sont utilisées utilisée par le système d'exploitation pour implanter une nouvelle commande &amp;lt;code&amp;gt;PLAY&amp;lt;/code&amp;gt; permettant de jouer un fichier WAV :&lt;br /&gt;
* l'entête du fichier est récupéré avec la primitive &amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt; ;&lt;br /&gt;
* l'entête WAV est analysée pour récupérer la fréquence et la précision d'échantillonnage, ces données sont passées à la carte son via la première primitive décrite ci-dessus ;&lt;br /&gt;
* le nombre de canaux est récupéré dans l'entête, les echantillons du premier canal sont alors lus grâce à &amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt; et envoyés à la carte son en utilisant la seconde primitive ;&lt;br /&gt;
* si les échantillons sont envoyés trop vite et donnent lieu à un code d'erreur de la seconde primitive, les mêmes échantillons sont à nouveau envoyés et ainsi de suite ;&lt;br /&gt;
* éventuellement, si votre système d'exploitation dispose d'une primitive &amp;lt;code&amp;gt;usleep&amp;lt;/code&amp;gt; vous pouvez mettre en place un algorithme d'attente après chaque appel à la primitive, ce temps peut être calculé en fonction de la vitesse de restitution et du nombre d'échantillons envoyés.&lt;br /&gt;
&lt;br /&gt;
= Réalisations des élèves =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Numéro du binôme !! Numéro du groupe !! Elèves !! Page &lt;br /&gt;
|-&lt;br /&gt;
| Binôme 1&lt;br /&gt;
| Groupe 1&lt;br /&gt;
| Taha Nehari &amp;amp; Martin Chauveliere&lt;br /&gt;
| [[SE4Binome2023-1|Binôme 1 2023/2024]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 2&lt;br /&gt;
| Groupe 1&lt;br /&gt;
| Simon CRUCHET &amp;amp; Amaury BECQUET&lt;br /&gt;
| [[SE4Binome2023-2|Binôme 2 2023/2024]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 3&lt;br /&gt;
| Groupe 1&lt;br /&gt;
| Louis DERYCKERE &amp;amp; Romain DUHR&lt;br /&gt;
| [[SE4Binome2023-3|Binôme 3 2023/2024]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 4&lt;br /&gt;
| Groupe 1&lt;br /&gt;
| Thomas NAVE &amp;amp; Thibault DUYCK&lt;br /&gt;
| [[SE4Binome2023-4|Binôme 4 2023/2024]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 5&lt;br /&gt;
| Groupe 2&lt;br /&gt;
| Stéphane KADER ISSACK &amp;amp; Marion NORMAND&lt;br /&gt;
| [[SE4Binome2023-5|Binôme 5 2023/2024]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 6&lt;br /&gt;
| Groupe 2&lt;br /&gt;
| Dylan Ling&lt;br /&gt;
| [[SE4Binome2023-6|Binôme 6 2023/2024]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 7&lt;br /&gt;
| Groupe 2&lt;br /&gt;
| Louis Wijsman &amp;amp; Adrien Paliferro&lt;br /&gt;
| [[SE4Binome2023-7|Binôme 7 2023/2024]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 8&lt;br /&gt;
| Groupe 2&lt;br /&gt;
| Némo CAZIN &amp;amp; Némo &lt;br /&gt;
| [[SE4Binome2023-8|Binôme 8 2023/2024]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 9&lt;br /&gt;
| Groupe 3&lt;br /&gt;
| Younes BENMBAREK &amp;amp; Youness EL QASTALANI&lt;br /&gt;
| [[SE4Binome2023-9|Binôme 9 2023/2024]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 10&lt;br /&gt;
| Groupe 3&lt;br /&gt;
| Prénom Nom &amp;amp; Prénom Nom&lt;br /&gt;
| [[SE4Binome2023-10|Binôme 10 2023/2024]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 11&lt;br /&gt;
| Groupe 3&lt;br /&gt;
| Prénom Nom &amp;amp; Prénom Nom&lt;br /&gt;
| [[SE4Binome2023-11|Binôme 11 2023/2024]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Pico_SE4_2023/2024&amp;diff=1413</id>
		<title>Pico SE4 2023/2024</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Pico_SE4_2023/2024&amp;diff=1413"/>
		<updated>2023-09-12T12:24:38Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : /* Réalisations des élèves */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Objectif =&lt;br /&gt;
&lt;br /&gt;
Pour l'année académique 2023/2024 nous vous demandons de construire un pico-ordinateur comprenant les éléments suivants :&lt;br /&gt;
* un processeur de type microcontrôleur ;&lt;br /&gt;
* un clavier ;&lt;br /&gt;
* un dispositif d'affichage ;&lt;br /&gt;
* un système d'exploitation stocké dans la mémoire flash du microcontrôleur ;&lt;br /&gt;
* une mémoire de masse allant au delà de la mémoire flash sus-citée ;&lt;br /&gt;
* un dispositif de communication avec l'extérieur.&lt;br /&gt;
&lt;br /&gt;
Pour faire en sorte que tous les éléments puissent communiquer entre eux nous vous demandons d'utiliser un bus série.&lt;br /&gt;
&lt;br /&gt;
= Compétences évaluées =&lt;br /&gt;
&lt;br /&gt;
Les compétences suivantes doivent être acquises durant ce module.&lt;br /&gt;
* Savoir comprendre, ou à défaut être actif en séances pour poser les questions pertinentes aux encadrants.&lt;br /&gt;
* Savoir produire un travail régulier et documenté durant la totalité de la période.&lt;br /&gt;
* Savoir concevoir et réaliser des cartes électroniques fonctionnelles.&lt;br /&gt;
* Savoir concevoir et programmer un circuit FPGA en VHDL.&lt;br /&gt;
* Savoir structurer et écrire des pilotes pour cartes électroniques.&lt;br /&gt;
* Savoir concevoir et implanter des primitives systèmes et un micro-système d'exploitation.&lt;br /&gt;
&lt;br /&gt;
= Organisation du travail =&lt;br /&gt;
&lt;br /&gt;
Vous aurez, comme d'habitude, la lourde tâche de tester ce module de travaux pratiques.&lt;br /&gt;
&lt;br /&gt;
Ce sera d'autant moins facile que nous vous demandons de vous coordonner pour réaliser le pico-ordinateur : un seul exemplaire fonctionnel est attendu par groupes de 4 binômes.&lt;br /&gt;
&lt;br /&gt;
Vous allez donc devoir vous organiser pour que chaque binôme réalise une partie de l'ensemble. Cela dit des tâches identiques sont à réaliser par tous les binômes, ces tâches vous permettront de vous exercer mais aussi de tester vos réalisations spécifiques.&lt;br /&gt;
&lt;br /&gt;
== Matériel fourni ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:2023_Bouclier_Pico.pdf||thumb|right|400px]]&lt;br /&gt;
&lt;br /&gt;
Pour que chaque binôme puisse avoir un minimum d'autonomie, un matériel de base est fourni :&lt;br /&gt;
* un Arduino Uno pour prototyper le coeur d'une carte mère ;&lt;br /&gt;
* un bouclier Arduino pour disposer d'une mémoire de masse (carte SD) et de connecteurs vers les cartes filles, voir le schéma et le PCB ci-contre ;&lt;br /&gt;
* d'une matrice de LED et d'un afficheur 7-segments tous les deux gérables par SPI pour pouvoir écrire les briques de votre système d'exploitation.&lt;br /&gt;
&lt;br /&gt;
Le projet KiCAD pour le bouclier Arduino est disponible : [[Média:2023_Bouclier_Pico.zip]]&lt;br /&gt;
&lt;br /&gt;
Les projets KiCAD pour connecter les périphériques via un connecteur sont disponibles : [[Média:2023_HE10-periph.zip]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[file:2023_Bouclier_Pico_PCB.png||thumb|center|300px]]&lt;br /&gt;
&lt;br /&gt;
Vision de la carte partiellement montée. L'accès à la carte SD est fonctionnel.&lt;br /&gt;
&lt;br /&gt;
[[file:2023_Bouclier_Pico_Test.jpg||thumb|center|300px]]&lt;br /&gt;
&lt;br /&gt;
Pour la partie programmation concernant la carte SD vous pouvez vous appuyer sur le projet ci-contre utilisant &amp;lt;code&amp;gt;avr-gcc&amp;lt;/code&amp;gt; comme compilateur : [[Fichier:TestSD_avrgcc.zip]].&lt;br /&gt;
&lt;br /&gt;
== Réalisations par binôme ==&lt;br /&gt;
&lt;br /&gt;
Chaque binôme réalise :&lt;br /&gt;
* un système d'exploitation basé sur un ordonnanceur ;&lt;br /&gt;
* une carte fille FPGA programmée par VHDL, le binôme écrit aussi le code pour que la carte puisse être gérée par le système d'exploitation ;&lt;br /&gt;
* une carte mère ou une carte fille à base de microcontrôleur, le binôme écrit aussi le code pour que la carte puisse être gérée par le système d'exploitation, le binôme peut réaliser plusieurs cartes pour maximiser sa note.&lt;br /&gt;
&lt;br /&gt;
== Réalisation par groupe de binômes ==&lt;br /&gt;
&lt;br /&gt;
Par groupe de 4 binômes vous devez réaliser un pico-ordinateur complet :&lt;br /&gt;
* une carte mère ;&lt;br /&gt;
* une carte fille FPGA/VHDL fonctionnelle et supportée par votre carte mère ;&lt;br /&gt;
* au moins 3 cartes filles fonctionnelles et supportées par votre carte mère (clavier, écran, réseau) ;&lt;br /&gt;
* vous pouvez ajouter une cinquième carte fille optionnelle de type carte son.&lt;br /&gt;
&lt;br /&gt;
= Cahier des charges =&lt;br /&gt;
&lt;br /&gt;
== Ordonnanceur ==&lt;br /&gt;
&lt;br /&gt;
Vous n'avez pas besoin d'avoir conçu et réalisé des cartes électroniques pour commencer à écrire le système d'exploitation du pico-ordinateur et en particulier l'ordonnanceur sous-jacent.&lt;br /&gt;
&lt;br /&gt;
Le principe est d'utiliser un minuteur du microcontrôleur pour lancer périodiquement une fonction d'interruption que vous allez transformer en ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps vous testerez votre ordonnanceur en créant deux tâches statiques pour faire clignoter, avec des périodes différentes, deux LED du bouclier fourni.&lt;br /&gt;
&lt;br /&gt;
Par la suite vous allez complexifier votre ordonnanceur en ajoutant :&lt;br /&gt;
* une tâche de lecture de caractère par le port série (stocké en mémoire partagé) ;&lt;br /&gt;
* une tâche d'écriture sur le port série (du caractère lu sur le port série) ;&lt;br /&gt;
* une tâche d'écriture sur la matrice (du caractère lu sur le port série) ;&lt;br /&gt;
* une tâche d'écriture sur l'afficheur 7 segments (du caractère lu sur le port série).&lt;br /&gt;
&lt;br /&gt;
Les deux dernières tâches sont plus compliquées à réaliser dans la mesure où elles utilisent une ressource commune.&lt;br /&gt;
&lt;br /&gt;
== Cartes filles FPGA ==&lt;br /&gt;
&lt;br /&gt;
Les cartes filles FPGA doivent être programmées en VHDL. Tous les binômes doivent implanter en VHDL :&lt;br /&gt;
* un contrôleur de bus série SPI ;&lt;br /&gt;
* un décodeur des commandes reçues par SPI (commandes sur un octet avec éventuellement des paramètres à suivre) ;&lt;br /&gt;
* un contrôleur d'écran VGA affichant le contenu graphique de la RAM de la carte FPGA.&lt;br /&gt;
&lt;br /&gt;
A minima il faut une commande pour insérer un pixel d'une couleur donnée dans la RAM d'affichage.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aussi ajouter des fonctionnalités supplémentaires à votre carte FPGA :&lt;br /&gt;
* mémoire de masse par accès direct à une carte mémoire SD ;&lt;br /&gt;
* carte réseau Ethernet en utilisant un module PHY Ethernet.&lt;br /&gt;
&lt;br /&gt;
Pour les fonctionnalités supplémentaires vous devez prévoir des commandes supplémentaire au niveau du décodeur.&lt;br /&gt;
&lt;br /&gt;
== Cartes électroniques ==&lt;br /&gt;
&lt;br /&gt;
Vous devez réaliser deux type de cartes électroniques à base de microcontrôleur : une carte mère et des cartes filles.&lt;br /&gt;
La carte FPGA/VHDL décrite dans la section précédente est considérée comme une carte fille.&lt;br /&gt;
&lt;br /&gt;
Les cartes filles sont connectées via un bus série à la carte mère. C'est aussi la carte mère qui alimente les cartes filles.&lt;br /&gt;
Enfin la carte mère dispose d'une mémoire permanente pour stocker des fichiers.&lt;br /&gt;
&lt;br /&gt;
Les cartes filles peuvent être de différents types :&lt;br /&gt;
* carte fille clavier ;&lt;br /&gt;
* carte fille d'affichage ;&lt;br /&gt;
* carte fille série (se comporte comme un clavier et comme un dispositif d'affichage) ;&lt;br /&gt;
* carte fille réseau ;&lt;br /&gt;
* carte fille mémoire de masse (alternative à la mémoire de masse de la carte mère) ;&lt;br /&gt;
* carte fille son.&lt;br /&gt;
&lt;br /&gt;
Pour un type donné vous avez le choix entre plusieurs technologies pour réaliser votre carte. Par exemple une carte fille clavier peut être implantée par une matrice de touches ou en utilisant un clavier USB.&lt;br /&gt;
&lt;br /&gt;
== Programmation système ==&lt;br /&gt;
&lt;br /&gt;
Le système d'exploitation du pico-ordinateur doit avoir les fonctionnalités d'un DOS (Disk Operating System), à savoir :&lt;br /&gt;
* lecture des commandes tapées par l'utilisateur ;&lt;br /&gt;
* téléchargement d'exécutables ou de sources via le dispositif de communication extérieur  ;&lt;br /&gt;
* sauvegarde et chargement d'exécutables ou de sources via la mémoire de masse ;&lt;br /&gt;
* permettre l'affichage de chaînes de caractères ;&lt;br /&gt;
* comprend un interpréteur micro-python pour faire tourner les sources ;&lt;br /&gt;
* les différentes fonctionnalités sont réalisées sous forme de tâches gérées par un ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
=== Commandes de base ===&lt;br /&gt;
&lt;br /&gt;
Ces commandes sont les commandes les plus simples à implanter :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VERSION || Affiche la version du système d'exploitation&lt;br /&gt;
|-&lt;br /&gt;
| DEVICES || Affiche la liste des cartes filles connectées&lt;br /&gt;
|-&lt;br /&gt;
| ECHO || Affiche les arguments de la commande&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Commandes liées aux processus ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PS || Liste les processus disponibles et leur état&lt;br /&gt;
|-&lt;br /&gt;
| SLEEP || Met un processus en sommeil&lt;br /&gt;
|-&lt;br /&gt;
| WAKE || Relance un processus dormant&lt;br /&gt;
|-&lt;br /&gt;
| EXEC || Création d'un processus à partir d'un fichier exécutable&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
La commande EXEC est complexe à réaliser, elle est optionnelle pour l'année 2023/2024.&lt;br /&gt;
&lt;br /&gt;
=== Commandes liées au système de fichiers ===&lt;br /&gt;
&lt;br /&gt;
Commandes pour gérer le système de fichiers :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description&lt;br /&gt;
|-&lt;br /&gt;
| FORMAT || Formate le système de fichiers&lt;br /&gt;
|-&lt;br /&gt;
| LIST || Affiche les fichiers du répertoire principal&lt;br /&gt;
|-&lt;br /&gt;
| CREATE || Création d'un fichier avec l'entrée standard&lt;br /&gt;
|-&lt;br /&gt;
| TYPE || Affiche le contenu d'un fichier&lt;br /&gt;
|-&lt;br /&gt;
| COPY || Copie un fichier&lt;br /&gt;
|-&lt;br /&gt;
| RENAME || Renomme un fichier&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Commandes liées au réseau ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description&lt;br /&gt;
|-&lt;br /&gt;
| REMOTE || Liste les fichiers disponibles sur le réseau&lt;br /&gt;
|-&lt;br /&gt;
| GET || Télécharge un fichier en provenance du réseau&lt;br /&gt;
|-&lt;br /&gt;
| PUT || Sauve un fichier sur le réseau&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Programmation des pilotes ==&lt;br /&gt;
&lt;br /&gt;
La programmation c'est aussi l'écriture des sous-systèmes ou des pilotes liés à chaque cartes :&lt;br /&gt;
* pour la carte mère, il faut écrire un sous-système de gestion de fichiers ;&lt;br /&gt;
* pour la carte fille comportant une matrice de touches, il faut écrire le pilote identifiant les touches actionnées et gérant l'envoi de ces touches à la carte mère ;&lt;br /&gt;
* pour la carte fille gérant un clavier USB, il faut utiliser un projet LUFA pour scanner régulièrement le clavier USB et envoyer d'éventuels événements à la carte mère ;&lt;br /&gt;
*  pour la carte fille gérant un écran LCD, il faut écrire le pilote capable de gérer l'écran et la partie récupérant les données de la carte mère ;&lt;br /&gt;
* pour la carte fille gérant une clé USB, il faut utiliser un projet LUFA pour l'accès à la clé et écrire un sous-système de gestion de fichiers ;&lt;br /&gt;
* la carte fille gérant une connexion série ne nécessite qu'un modeste pilote de communication avec la carte mère ;&lt;br /&gt;
* pour la carte fille permettant une connexion avec le monde extérieur via de simples points d'accès USB de volume (EP Bulk), il faut écrire le pilote pour communication avec la carte mère mais aussi le programme sur le PC permettant la réception ou l'envoi de fichiers ;&lt;br /&gt;
* pour la carte fille permettant une connexion Ethernet au dessus d'USB (RNDIS), il faut écrire une micro-pile réseau capable de récupérer et d'envoyer des fichiers au travers de paquets Ethernet mais aussi le programme sur le PC cible capable de comprendre ces paquets Ethernet ;&lt;br /&gt;
* pour la carte fille incluant une puce Ethernet, il faut implanter la micro-pile réseau et le programme évoquée ci-dessus mais aussi le pilote capable de gérer la puce Ethernet ;&lt;br /&gt;
* pour la carte fille son, il faut écrire la partie permettant de récupérer les échantillons, les copier en mémoire, et les jouer à la vitesse d'échantillonnage préalablement transmise.&lt;br /&gt;
&lt;br /&gt;
= Spécifications techniques =&lt;br /&gt;
&lt;br /&gt;
== Ordonnanceur ==&lt;br /&gt;
&lt;br /&gt;
Pour réaliser votre ordonnanceur commencez par programmer le minuteur 1 de l'ATMega328p de sorte à ce qu'il génère une interruption toutes&lt;br /&gt;
les 20ms. L'interruption va déclencher une fonction de gestion d'interruption (ISR pour Interrupt Service Routine). Vous utiliserez une ISR nue pour éviter les interférences du compilateur sur la pile d'exécution :&lt;br /&gt;
 ISR(TIMER1_COMPA_vect,ISR_NAKED)&lt;br /&gt;
 {&lt;br /&gt;
 /* Sauvegarde du contexte de la tâche interrompue */&lt;br /&gt;
 ...&lt;br /&gt;
 /* Appel à l'ordonnanceur */&lt;br /&gt;
 scheduler();&lt;br /&gt;
 /* Récupération du contexte de la tâche ré-activée */&lt;br /&gt;
 ...&lt;br /&gt;
 asm volatile ( &amp;quot;reti&amp;quot; );&lt;br /&gt;
 }&lt;br /&gt;
Vous constatez qu'il vous reste à écrire, dans l'ISR, le code pour sauvegarder et récupérer le contexte d'exécution d'une tâche. Pour cela réfléchissez aux éléments d'un microcontrôleur qui sont nécessaires pour l'exécution d'un programme puis réfléchissez à une méthode pour sauver l'état de ces éléments. &lt;br /&gt;
&lt;br /&gt;
Au moins dans un premier temps, les tâches seront définies de façon statique. Toutes les tâches doivent être définies dans un tableau global, seront lancées dès le démarrage du microcontrôleur et ne se termineront que lorsque le microcontrôleur sera arrêté ou relancé. Une tâche est à définir par une structure dont un des champs doit être la fonction réalisant la tâche. A vous de définir les autres champs.&lt;br /&gt;
&lt;br /&gt;
Avant de démarrer l'ordonnanceur, il faut prendre soin à ce que la récupération du contexte dans l'ISR fonctionne alors que les tâches n'auront pas encore été lancées. Il faut donc une fonction permettant d'initialiser le contexte pour chaque tâche.&lt;br /&gt;
&lt;br /&gt;
== Cartes électroniques à microcontrôleur ==&lt;br /&gt;
&lt;br /&gt;
Le bus série préconisé pour la communication entre la carte mère et les cartes filles est un bus SPI. Au niveau physique, les connexions entre cartes mères et cartes filles doivent être réalisées via des connecteurs HE-10 à 8 broches :&lt;br /&gt;
* 2 broches pour l'alimentation ;&lt;br /&gt;
* 3 broches pour les signaux SPI (MISO, MOSI, SCK) ;&lt;br /&gt;
* 1 broche pour le CS (Chip Select) ;-&lt;br /&gt;
* 1 broche pour une éventuelle ligne d'interruption ;&lt;br /&gt;
* 1 broche pour une eventuelle réinitialisation de la carte (Reset).&lt;br /&gt;
&lt;br /&gt;
Il est conseillé d'organiser les broches sur les connecteurs HE-10 sur le modèle du bouclier Arduino fourni.&lt;br /&gt;
&lt;br /&gt;
La carte mère est constituée autour d'un ATMega328p et d'une puce mémoire de type AT45DB641E de 8 Mo. Il faut réflechir à l'alimentation sachant que :&lt;br /&gt;
* l'alimentation de la carte mère doit être suffisante pour alimenter les cartes filles ;&lt;br /&gt;
* l'alimentation du microcontrôleur doit être compatible avec l'alimentation de la puce mémoire sauf à prévoir une conversion de niveaux logiques entre les deux puces ;&lt;br /&gt;
* les cartes filles d'un même pico-ordinateur doivent être alimentées avec la même tension.&lt;br /&gt;
&lt;br /&gt;
Voici quelques exemples d'architectures de cartes filles :&lt;br /&gt;
* une carte fille SPI avec un ATMega328p et une matrice de touches ;&lt;br /&gt;
* une carte fille SPI avec un AT90USB647 pour connexion à un clavier USB ou une clef USB ;&lt;br /&gt;
* une carte fille SPI avec un ATMega328p et un écran LCD 2 lignes HD44780 ;&lt;br /&gt;
* une carte fille SPI avec un ATMega16u2 pour une connexion série USB ;&lt;br /&gt;
* une carte fille SPI avec un ATMega328p et un DAC R-2R comme carte son ;&lt;br /&gt;
* une carte fille SPI avec un ATMega16u2 (ou supérieur) pour une connexion réseau (périphérique USB générique EP bulk ou périphérique USB RNDIS) ;&lt;br /&gt;
* une carte fille SPI avec un ATMega328p et un ENC28J60 pour une connexion Ethernet 10Mb/s.&lt;br /&gt;
&lt;br /&gt;
Toutes les cartes doivent permettre un accès au port série de leur microcontrôleur pour un déverminage via un FTDI. Vous devez aussi ajouter des points de test pour les lignes importantes : lignes du bus SPI, horloge, alimentations, etc.&lt;br /&gt;
&lt;br /&gt;
Toutes les cartes filles répondent à la commande SPI constituée de l'octet de commande 0x00 et de l'octet de donnée 0x00. Le résultat se lit sur le second octet de réponse et détermine le type de la carte fille. Le chiffre de poid fort de la réponse est un code magique : 0xa. Le chiffre de poid faible est donné par le tableau ci-dessous :&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Chiffre !! Type de carte&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || Clavier&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || Affichage&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || Réseau&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || Carte son&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Il est bon aussi de prévoir que les cartes filles puissent répondre à une commande SPI permettant de savoir si elles sont occupées ou non. L'octet de commande serait 0xFF et l'octet de donnée 0xFF. En cas de succès les deux octets de réponse sont à 0x55. Les cartes filles doivent prendre soin d'initialiser leur réponse SPI à autre chose que 0x55 lorsqu'elles se lancent dans un traitement autre qu'une écoute SPI.&lt;br /&gt;
&lt;br /&gt;
== Electronique et programmation système ==&lt;br /&gt;
 &lt;br /&gt;
=== Carte mère ===&lt;br /&gt;
&lt;br /&gt;
La carte mère doit comporter un microcontrôleur ATMega328p, une puce mémoire AT45DB641E et 5 connecteurs HE10 pour connecter une carte fille FPGA et 4 cartes filles à microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Vous avez aussi quelques points à approfondir.&lt;br /&gt;
# La source d'alimentation de votre pico-ordinateur, le plus simple semble être un connecteur USB pour utiliser soit un PC soit une batterie comme source ;&lt;br /&gt;
# La tension d'alimentation du microcontrôleur et des cartes filles :&lt;br /&gt;
#* soit vous optez pour du 5V auquel cas il faut prévoir un régulateur de tension pour la puce mémoire et une adaptation des niveaux logiques pour cette même puce (voir le schéma des boucliers Arduino),&lt;br /&gt;
#* soit vous partez sur du 3.3V et vos cartes filles doivent tourner en 3.3V, vu que vous aurez probablement un adaptateur 5V il faut quand même prévoir un régulateur 3.3V assez costaud sur la carte mère, de plus vous ne pouvez pas dépasser 8Mhz comme horloge ;&lt;br /&gt;
# La méthode de programmation de la carte mère :&lt;br /&gt;
#* soit vous programmez le microcontrôleur via un connecteur AVR ISP, un programmateur et l'utilitaire &amp;lt;code&amp;gt;avrdude&amp;lt;/code&amp;gt; ;&lt;br /&gt;
#* soit vous ajoutez une puce pour réaliser un pont USB vers série vous pourrez alors programmer le microcontrôleur avec &amp;lt;code&amp;gt;dfu-programmer&amp;lt;/code&amp;gt;, attention il faut tout de même prévoir des connecteurs AVR ISP pour charger l'amorceur sur l'ATMega328p et l'éventuel ATMega8u2 (vous utilisez cette puce pour l'USB/série plutôt qu'une puce FTDI).&lt;br /&gt;
&lt;br /&gt;
Du coté programmation vous êtes chargés d'écrire les fonctions d'accès à la mémoire, des primitives systèmes implantant un micro-système de fichiers et des primitives de communication via le bus SPI.&lt;br /&gt;
&lt;br /&gt;
Les fonctions de base d'accès à la mémoire sont facilement trouvables, par exemple sur les sites du bureau d'études systèmes embarqués des PeiP.&lt;br /&gt;
&lt;br /&gt;
Concernant le micro-système de fichiers, les fonctionnalités suivantes doivent être implantées :&lt;br /&gt;
&lt;br /&gt;
* le système de fichiers doit résider dans la mémoire de 8 Mo, les accès à la mémoire se font par blocs de 256 octets ;&lt;br /&gt;
* l'accès au système de fichiers se fait par des primitives système ;&lt;br /&gt;
* le micro-système de fichiers ne comporte qu'un répertoire : le répertoire principal, ce dernier peut comporter au maximum 64 fichiers, un fichier est caractérisé par un nom de 16 caractères au maximum, sa taille et ses blocs de données, un fichier est décrit par un maximum de 16 blocs de données ;&lt;br /&gt;
* le superbloc du système de fichiers comprend, en plus de la description du répertoire racine, une carte bit à bit des blocs de données libres, cette carte nécessite 16 blocs ;&lt;br /&gt;
* les différentes primitives à implanter sont :&lt;br /&gt;
** &amp;lt;code&amp;gt;append&amp;lt;/code&amp;gt; pour créer un fichier si non existant et ajouter des données en fin de fichier, les paramètres sont le nom du fichier, les données à ajouter et la taille des données,&lt;br /&gt;
** &amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt; pour lire des données dans un fichier, les paramètres sont le nom du fichier, le tableau dans lequel stocker les données, la taille du tableau et le déplacement par rapport au début du fichier,&lt;br /&gt;
** &amp;lt;code&amp;gt;remove&amp;lt;/code&amp;gt; pour détruire un fichier, le seul paramètre est le nom du fichier,&lt;br /&gt;
** &amp;lt;code&amp;gt;rename&amp;lt;/code&amp;gt; pour renommer un fichier, les paramètres sont l'ancien et le nouveau noms du fichier,&lt;br /&gt;
** &amp;lt;code&amp;gt;copy&amp;lt;/code&amp;gt; pour copier un fichier, les paramètres sont le nom du fichier original et le nom de la copie.&lt;br /&gt;
&lt;br /&gt;
Les primitives pour le bus SPI doivent être :&lt;br /&gt;
* une fonction d'initialisation avec le mode SPI désiré et la vitesse d'horloge souhaitée ;&lt;br /&gt;
* une primitive pour envoyer quelques octets via le bus SPI :&lt;br /&gt;
** les paramètres de la primitive sont le tableau des octets à envoyer, le tableau des octets à recevoir, le nombre d'octets à envoyer et la spécification de la sortie CS de sélection du périphérique SPI,&lt;br /&gt;
** la primitive stocke l'opération dans une file et effectue l'envoi dès que le bus est libre,&lt;br /&gt;
** si la file est pleine la primitive peut retourner un code d'erreur sinon la primitive retourne l'identifiant unique de l'opération,&lt;br /&gt;
** les octets de réponse du périphérique sont stockés dans le tableau des octets à recevoir, si le pointeur est nul les réponses ne sont pas stockées ;&lt;br /&gt;
* une primitive pour attendre la fin d'un envoi SPI, il faut donner en unique paramètre l'identifiant de l'opération, l'attente s'effectue en mettant le processus appelant en mode sommeil et en le réveillant dès que l'opération est effectuée.&lt;br /&gt;
&lt;br /&gt;
Précisons que les tableaux stockés dans la file d'attente (requête et réponse SPI) le sont sous la forme de pointeurs. Ces pointeurs peuvent être librérés une fois l'opération effectuée.&lt;br /&gt;
&lt;br /&gt;
=== Carte fille clavier &amp;quot;matrice de touches&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
La réalisation de la carte est simple, il s'agit de scanner une matrice de touches à l'aide d'un ATMega328p. N'oubliez pas le connecteur HE10 pour la connexion de cette carte fille à une carte mère. Sur le connecteur HE10 il faut prévoir à la fois la ligne de sélection SPI (utilisez la broche SS par défaut sur votre carte) et une ligne pour générer une interruption sur la carte mère. Vous devez faire avec l'alimentation fournie par la carte mère. Regardez aussi la problèmatique sur la programmation décrite dans la section sur la carte mère.&lt;br /&gt;
&lt;br /&gt;
Du coté programmation, c'est plus compliqué, vous êtes déjà chargés d'écrire la fonction de scan des touches :&lt;br /&gt;
* le scan des touches consiste juste à passer les lignes de la matrice en sorties, les colonnes en entrées avec résistance de charge et de rentrer dans une boucle pour passer une sortie à GND tandis que les autres restent à VCC, il suffit alors de consulter les entrées pour voir si une touche est appuyée (ou plusieurs) ;&lt;br /&gt;
* si une touche est appuyée la touche est stockée dans un tampon et la ligne d'interruption est activée ;&lt;br /&gt;
* si une requête SPI de code commande 0x01 est reçue, le nombre de touches dans le tampon est envoyé suivi des touches elles-mêmes.&lt;br /&gt;
&lt;br /&gt;
Ensuite, au niveau de la carte mère vous devez écrire la primitive gérant les claviers. Cette primitive prend en paramètre la ligne de sélection SPI du clavier ciblé et un tampon pour stocker les codes des touches. La taille du tampon est aussi passée en paramètre. La primitive prépare une transmission SPI constituée du seul octet de valeur 0x01 en prenant soin de préciser un tableau pour stocker d'éventuelles touches. Attention, la transmission SPI est constituée de l'octet 0x01 mais aussi d'autant d'octets de valeurs indéterminées qu'il est attendu d'octets dans la réponse SPI. La primitive se met alors en attente de la réponse.&lt;br /&gt;
&lt;br /&gt;
Au niveau du système d'exploitation les comportements suivants sont à implanter :&lt;br /&gt;
* à l'initialisation de la carte mère les périphériques SPI doivent être contactés pour déterminer lequels sont des claviers, des commandes SPI 0x00 sont donc envoyées avec attente des réponses SPI ;&lt;br /&gt;
* le processus SHELL toujours présent dans le système d'exploitation doit avoir le comportement suivant :&lt;br /&gt;
** si une interruption est reçue qui correspond à un périphérique clavier, le SHELL doit utiliser la primitive de lecture clavier pour obtenir la ou les touches appuyées ;&lt;br /&gt;
** dans un premier temps, les caractères reçus sont affichés en utilisant la primitive d'affichage (echo) ;&lt;br /&gt;
** à terme les lignes de caractères reçues sont analysées pour en extraire des commandes et les exécuter.&lt;br /&gt;
&lt;br /&gt;
=== Carte fille clavier &amp;quot;USB&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Votre carte électronique doit tourner autour d'un AT90USB647 (ou supérieur). Ce microcontrôleur peut être programmé, en utilisant la bibliothèque LUFA, comme hôte USB. Il est donc possible de gérer, de cette façon un clavier USB et de faire interface avec la carte mère. Le schéma de la carte est très semblable à celui d'une carte comportant un ATMega16u2. Vous pouvez vous appuyer sur ce [https://wiki-se.plil.fr/mediawiki/index.php/SE4_2022/2023_EC5 projet keylogger]. Le plus simple est de programmer le microcontrôleur en utilisant l'utilitaire &amp;lt;code&amp;gt;dfu-programmer&amp;lt;/code&amp;gt;, pour cela il faut prévoir, en plus d'un connecteur USB A femelle pour le clavier, un connecteur USB mâle pour la programmation.&lt;br /&gt;
&lt;br /&gt;
La programmation pour la gestion du clavier USB doit se reposer sur la démonstration &amp;lt;code&amp;gt;KeyboardHost&amp;lt;/code&amp;gt; de la bibliothèque LUFA. La conversion des modificateurs et des codes de touches en caractères ASCII sont à votre charge.&lt;br /&gt;
&lt;br /&gt;
Pour le reste de la programmation voir la section sur la carte fille &amp;quot;matrice de touches&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Carte fille écran LCD ===&lt;br /&gt;
&lt;br /&gt;
Cette carte comporte un ATMega328p et un écran LCD à base de contrôleur HD44780. L'écran LCD nécessite un potentiomètre pour régler la luminosité   des cristaux liquides. N'oubliez pas le connecteur HE10 pour la connexion de cette carte fille à une carte mère. Sur le connecteur HE10 il faut prévoir une ligne de sélection SPI. Aucune ligne d'interruption n'est nécessaire pour cette carte. Enfin il vous faut prévoir un connecteur AVR ISP pour programmer le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Le microcontrôleur de la carte fille doit être programmé pour gérer le contrôleur HD44780 ou compatible :&lt;br /&gt;
* les écrans avec 1, 2, 3 ou 4 lignes doivent être gérés ;&lt;br /&gt;
* les caractères ASCII doivent être affichés sur l'écran ;&lt;br /&gt;
* les caractères spéciaux &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;\r&amp;lt;/code&amp;gt; doivent être pris en compte pour le saut de ligne et le retour chariot ;&lt;br /&gt;
* les codes VT100 doivent être pris en compte, en particulier pour le déplacement du curseur doivent être pris en compte ;&lt;br /&gt;
* le contrôleur HD44780 ou compatible doit être configuré en mode défilement automatique.&lt;br /&gt;
&lt;br /&gt;
Les caractères à afficher ou spéciaux (y compris les séquences VT100) sont reçus par le bus SPI par la carte fille préfixés par le code commande 0x01. &lt;br /&gt;
&lt;br /&gt;
Au niveau de la carte mère vous devez écrire la primitive système. Cette primitive prend en paramètre la ligne de sélection SPI de l'écran ciblé et la chaîne des caractères à envoyer. La primitive prépare une transmission SPI constituée de l'octet de commande 0x01 et des octets correspondant aux caractères.&lt;br /&gt;
&lt;br /&gt;
Il ne faut pas demander un affichage si un autre affichage est en cours. C'est possible à réaliser avec la ligne prévue pour une interruption. La carte fille peut mettre cette ligne en état haut quand un affichage est en cours. Du coup la primitive peut se mettre en attente sur un état bas avant d'envoyer la requête SPI. C'est aussi possible de lancer des commandes 0xFF sur la carte jusqu'à obtenir les octets de réponse indiquant que la carte est libre.&lt;br /&gt;
&lt;br /&gt;
Cette primitive est utilisée par le système d'exploitation pour réaliser l'écho des commandes dans le SHELL et aussi par toutes les commandes qui nécessitent un affichage. Tous les écrans doivent être sollicités lors des affichages, il faut donc que le système d'exploitation scanne les périphériques SPI pour trouver les écrans comme il le fait pour les claviers.&lt;br /&gt;
&lt;br /&gt;
=== Carte fille réseau RNDIS ===&lt;br /&gt;
&lt;br /&gt;
Le but de cette carte est de permettre au pico-ordinateur de converser avec l'extérieur. Une carte RNDIS permet de faire transister des paquets Ethernet au dessus d'une liaison USB. La carte n'a besoin que d'un microcontrôleur avec capacités USB pour fonctionner. Vous pouvez utiliser un &lt;br /&gt;
ATMega16u2, un ATMega32u4 ou un AT90USB suivant la taille mémoire dont vous souhaitez disposer. Gardez en mémoire qu'un paquet Ethernet peut comporter jusqu'à 1500 octets. La programmation du microcontrôleur se fera par DFU USB. Il est notable que la programmation du microcontrôleur et la communication vers l'extérieur se fait par le même connecteur USB.&lt;br /&gt;
&lt;br /&gt;
La communication se fait forcément via le PC auquel la carte fille est connectée par USB. Cela dit si ce PC est connecté en réseau, les fichiers auxquels le pico-ordinateur accède peuvent se trouver sur un autre PC. Si votre carte fille est correctement programmée comme carte RNDIS USB, le PC sous Linux va automatiquement créer une interface réseau &amp;lt;code&amp;gt;usb0&amp;lt;/code&amp;gt;. A vous de la démarrer avec la commande &amp;lt;code&amp;gt;ip link set usb0 up&amp;lt;/code&amp;gt; ou une commande du type &amp;lt;code&amp;gt;ip address add @IP/masque dev usb0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
La base de la programmation de cette carte est la démonstration LUFA RNDIS. Des versions de cette démonstration incluent une implantation de pile TCP/IP. A vous de voir à quel niveau vous souhaitez que votre carte réseau opère :&lt;br /&gt;
* si vous visez Ethernet, votre projet LUFA sera assez simple à écrire mais l'application sur le PC sera un peu exotique, il vous faudra utiliser la programmation socket en mode RAW ;&lt;br /&gt;
* si vous visez UDP, votre projet LUFA sera plus complexe mais l'application sur le PC pourra se faire avec des sockets en mode non connecté standard ;&lt;br /&gt;
* si vous visez TCP, votre projet LUFA sera complexe et nécessitera un microcontrôleur avec pas mal de mémoire, par contre vous pourrez utiliser des applications standard sur le PC (serveur Web ou FTP).&lt;br /&gt;
&lt;br /&gt;
Au niveau de la carte, en plus de votre pile réseau vous devez écrire les fonctions permettant de lister des fichiers distants, de les recevoir et d'en envoyer :&lt;br /&gt;
* Si la commande SPI est 0x01, la carte mère vous demande de lister les fichiers distants, vous devez donc former les paquets réseau nécessaires pour envoyer la demande, la commande SPI peut comporter un argument supplémentaire pour préciser la localisation des fichiers. A la suite d'une commande 0x01, la carte mère doit envoyer des commandes 0x11 pour récupérer tous les noms de fichiers, idéalement un nom par commande 0x11 pour ne pas déborder la mémoire du microcontrôleur. Si le fichier n'est pas le dernier la réponse SPI est 0x01 sinon 0x00.  Si vous utilisez Ethernet ou UDP, il faut prévoir un délai maximal pour la réception des paquets de sorte à ne pas bloquer la commande. En cas de non réception de paquet, il faut retourner un code SPI d'erreur, par exemple 0x02.&lt;br /&gt;
&lt;br /&gt;
* Si la commande SPI est 0x02, la carte mère souhaite récupérer un fichier. Vous devez former les paquets réseau nécessaires pour demander le fichier précisé dans la suite de la commande SPI. De la même façon que pour la liste, des commandes SPI ultérieures 0x12 doivent être envoyées pour récupérer le contenu du fichier, la carte mère précise dans la commande la taille de données qu'elle est prête à accepter par requête. Même principe pour les réponses SPI que pour les commandes 0x11. Si vous utilisez Ethernet ou UDP, il faut mettre en place le même dispositif de surveillance de perte de paquets que pour la liste.&lt;br /&gt;
&lt;br /&gt;
* Si la commande SPI est 0x03, la carte mère souhaite envoyer un fichier. Vous devez former les paquets réseau nécessaires pour préparer la réception du fichier précisé dans la suite de la commande SPI. De la même façon que pour la liste, des commandes SPI ultérieures 0x13 doivent être envoyées pour passer les fragements de fichier. Si vous utilisez Ethernet ou UDP, les paquets envoyés pour transmettre les fragments comportent un numéro de séquence. La carte mère termine par un fragment vide pour indiquer que le fichier est totalement transféré. Dans ce dernier cas un paquet particulier doit être envoyé pour indiquer la fin du fichier. Une réponse est requise pour ce paquet, cette réponse peut être un succès (tous les fragments ont été reçus) ou échec. Il convient de répercuter cette réponse en tant que réponse SPI : 0x00 pour succès ou 0x02 en cas d'erreur que ce soit une erreur remontée ou une absence de paquet réponse.&lt;br /&gt;
&lt;br /&gt;
Au niveau de la carte mère vous devez écrire les primitives système permettant de préparer et de réaliser les listes, récupération et envois de fichiers. Ces primitives sont de simples encapsulation des commandes SPI décrites ci-dessus avec attente des réponses SPI pour les commandes de chiffre de poid fort 0x1. Il faut cependant s'assurer, avant chaque requête SPI, que la carte RNDIS est libre en utilisant la commande 0xFF.&lt;br /&gt;
&lt;br /&gt;
Ces primitives sont utilisées par le système d'exploitation pour réaliser les commandes de sauvegarde et de chargement de fichiers. Il est supposé qu'il n'existe qu'une carte réseau par pico-ordinateur avec une ligne de sélection de périphérique SPI fixe.&lt;br /&gt;
&lt;br /&gt;
=== Carte fille réseau &amp;quot;points d'accès de volume&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Cette carte est identique, au niveau électronique, à la carte réseau RNDIS. La seule différence réside dans la façon de faire transiter les paquets réseau de la carte vers le PC auquel elle est connectée en USB. Pour cette carte, il vous est proposé de faire ce transfert en utilisant deux points d'accès USB de type volume (bulk), un entrant et un sortant. Cette fois vous n'aurez pas l'aide du noyau Linux pour la création de l'interface réseau. Vous allez devoir écrire votre propre programme PC pour faire le pont entre la carte et une interface réseau virtuelle.&lt;br /&gt;
&lt;br /&gt;
Sous Linux la création d'une interface virtuelle est possible avec la fonction ci-dessous.&lt;br /&gt;
&lt;br /&gt;
 int allocateNetworkDevice(char *name,int flags){&lt;br /&gt;
 struct ifreq ifr;&lt;br /&gt;
 int fd,err;&lt;br /&gt;
 char *clonedev = &amp;quot;/dev/net/tun&amp;quot;;&lt;br /&gt;
 /* Open the clone device */&lt;br /&gt;
 if((fd=open(clonedev,O_RDWR))&amp;lt;0) return fd;&lt;br /&gt;
 /* Preparation of the struct ifr, of type &amp;quot;struct ifreq&amp;quot; */&lt;br /&gt;
 memset(&amp;amp;ifr,0,sizeof(ifr));&lt;br /&gt;
 ifr.ifr_flags=flags;   /* IFF_TUN or IFF_TAP, plus maybe IFF_NO_PI */&lt;br /&gt;
 if(name!=NULL) strncpy(ifr.ifr_name,name,IFNAMSIZ);&lt;br /&gt;
 /* Try to create the device */&lt;br /&gt;
 if((err=ioctl(fd,TUNSETIFF,(void *)&amp;amp;ifr))&amp;lt;0){ close(fd); return err; }&lt;br /&gt;
 /* Write back the name of the * interface to the variable &amp;quot;name&amp;quot; */&lt;br /&gt;
 if(name!=NULL) strcpy(name,ifr.ifr_name);&lt;br /&gt;
 return fd;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Le descripteur de fichier retourné est utilisable avec &amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt; pour récupérer les paquets Ethernet entrants et avec &amp;lt;code&amp;gt;write&amp;lt;/code&amp;gt; pour envoyer des paquets sur l'interface. Pour transmettre les paquets à la carte ou lire ceux provenant de la carte vous pouvez utiliser la bibliothèque &amp;lt;code&amp;gt;libusb-1.0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pour le reste de la programmation liée à cette carte vous reporter à ce qui est demandé pour la carte réseau RNDIS.&lt;br /&gt;
&lt;br /&gt;
=== Carte fille réseau Ethernet ===&lt;br /&gt;
&lt;br /&gt;
Cette version de la carte réseau se connecte à un commutateur Ethernet et non pas à un PC pour communiquer avec le monde extérieur.&lt;br /&gt;
&lt;br /&gt;
Au niveau électronique une puce Ethernet ENC28J60 (ou supérieur) est supervisée par un microcontrôleur ATMega328p. Toutes les précisions concernant les cartes à base d'ATMega328p s'appliquent (voir par exemple la carte fille clavier &amp;quot;matrice de touches). Vous trouverez la documentation de la puce Ethernet à l'adresse http://ww1.microchip.com/downloads/en/devicedoc/39662c.pdf. Un exemple de programmtion de la puce ENC624J600 est disponible à l'adresse https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers. Vous pouvez vous en inspirer pour la programmation de la puce ENC28J60.&lt;br /&gt;
&lt;br /&gt;
La programmation spécifique à cette carte concerne l'envoi des paquets à la puce ENC28J60 et la récupération des paquets en provenance de la puce ENC28J60. Comme pour la liaison RNDIS, trois options s'ouvrent à vous pour l'implémentation de votre pile réseau :&lt;br /&gt;
&lt;br /&gt;
*programmation Ethernet, votre projet sera assez simple à écrire mais l'application sur le PC sera un peu exotique, il vous faudra utiliser la programmation socket en mode RAW ;&lt;br /&gt;
* programmation UDP, votre projet sera plus complexe mais l'application sur le PC pourra se faire avec des sockets en mode non connecté standard ;&lt;br /&gt;
* programmation TCP, votre projet sera plus complexe;  par contre vous pourrez utiliser des applications standard sur le PC (serveur Web ou FTP).&lt;br /&gt;
&lt;br /&gt;
Le reste de la programmation (communication avec la carte mère et ajouts dans le système d'exploitation) est identique à ce qui est décrit pour la carte réseau RNDIS.&lt;br /&gt;
&lt;br /&gt;
=== Carte fille son ===&lt;br /&gt;
 &lt;br /&gt;
D'un point de vue électronique la carte n'est pas très compliquée, elle comporte un ATMega328p comme coeur et sa spécificité est un convertisseur numérique vers analogique dit R-2R utilisant un réseau de résistance pour implanter la conversion. Utilisez au moins un DAC sur 8 bits, vous devez pouvoir pousser jusqu'à 12 bits en utilisant pratiquement toutes les sorties disponibles. En sortie du DAC utilisez un montage Darligton pour commander le haut-parleur. N'oubliez pas le connecteur HE10 pour connecter votre carte à une carte mère. Utilisez la ligne de sélection SPI par défaut pour que la carte mère puisse commander votre carte et prévoyez une ligne d'interruption. Enfin il vous faut prévoir un connecteur AVR ISP pour programmer le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Le microcontrôleur de la carte fille doit être programmé pour pouvoir jouer des sons déjà enregistrés :&lt;br /&gt;
* des variables globales doivent être configurées pour spécifier les caractéristiques des enregistrements à jouer :&lt;br /&gt;
** précision d'échantillonnage (8 à 24 bits même si au-delà de 14 bits vous devez abandonner les bits de poids faibles),&lt;br /&gt;
** vitesse d'acquisition (vous trouverez la vitesse maximale par essais et erreurs),&lt;br /&gt;
** format des enregistrements (vous vous limiterez à un format PCM entier classique avec représentation petit-boutiste) ;&lt;br /&gt;
* une fonction permettant d'envoyer les échantillons, à la bonne vitesse, sur le DAC.&lt;br /&gt;
&lt;br /&gt;
Les échantillons sonores sont reçus par le bus SPI préfixés par le code commande 0x02. Les 2 valeurs de configuration, précision sur un octet et vitesse sur quatre octets sont envoyées préfixés par le code commande 0x01.&lt;br /&gt;
&lt;br /&gt;
Au niveau de la carte mère vous devez écrire les primitives système :&lt;br /&gt;
* la première primitive correspond au message SPI de code commande 0x01 et passe les paramètres de configuration à la carte fille ;&lt;br /&gt;
* la seconde primitive correspond au message SPI de code commande 0x02 et passe les échantillons sonores à jouer à la carte fille, la primitive s'assure auparavent que la carte n'est pas déjà occupée à jouer des échantillons avec la commande SPI 0xFF, en cas de carte occupée le code 0xFF est retourné.&lt;br /&gt;
&lt;br /&gt;
Ces primitives sont utilisées utilisée par le système d'exploitation pour implanter une nouvelle commande &amp;lt;code&amp;gt;PLAY&amp;lt;/code&amp;gt; permettant de jouer un fichier WAV :&lt;br /&gt;
* l'entête du fichier est récupéré avec la primitive &amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt; ;&lt;br /&gt;
* l'entête WAV est analysée pour récupérer la fréquence et la précision d'échantillonnage, ces données sont passées à la carte son via la première primitive décrite ci-dessus ;&lt;br /&gt;
* le nombre de canaux est récupéré dans l'entête, les echantillons du premier canal sont alors lus grâce à &amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt; et envoyés à la carte son en utilisant la seconde primitive ;&lt;br /&gt;
* si les échantillons sont envoyés trop vite et donnent lieu à un code d'erreur de la seconde primitive, les mêmes échantillons sont à nouveau envoyés et ainsi de suite ;&lt;br /&gt;
* éventuellement, si votre système d'exploitation dispose d'une primitive &amp;lt;code&amp;gt;usleep&amp;lt;/code&amp;gt; vous pouvez mettre en place un algorithme d'attente après chaque appel à la primitive, ce temps peut être calculé en fonction de la vitesse de restitution et du nombre d'échantillons envoyés.&lt;br /&gt;
&lt;br /&gt;
= Réalisations des élèves =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Numéro du binôme !! Numéro du groupe !! Elèves !! Page &lt;br /&gt;
|-&lt;br /&gt;
| Binôme 1&lt;br /&gt;
| Groupe 1&lt;br /&gt;
| Taha Nehari &amp;amp; Martin Chauveliere&lt;br /&gt;
| [[SE4Binome2023-1|Binôme 1 2023/2024]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 2&lt;br /&gt;
| Groupe 1&lt;br /&gt;
| Simon CRUCHET &amp;amp; Amaury BECQUET&lt;br /&gt;
| [[SE4Binome2023-2|Binôme 2 2023/2024]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 3&lt;br /&gt;
| Groupe 1&lt;br /&gt;
| Louis DERYCKERE &amp;amp; Romain DUHR&lt;br /&gt;
| [[SE4Binome2023-3|Binôme 3 2023/2024]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 4&lt;br /&gt;
| Groupe 1&lt;br /&gt;
| Prénom Nom &amp;amp; Prénom Nom&lt;br /&gt;
| [[SE4Binome2023-4|Binôme 4 2023/2024]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 5&lt;br /&gt;
| Groupe 2&lt;br /&gt;
| Stéphane Kader Issack - Marion Normand&lt;br /&gt;
| [[SE4Binome2023-5|Binôme 5 2023/2024]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 6&lt;br /&gt;
| Groupe 2&lt;br /&gt;
| Prénom Nom &amp;amp; Prénom Nom&lt;br /&gt;
| [[SE4Binome2023-6|Binôme 6 2023/2024]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 7&lt;br /&gt;
| Groupe 2&lt;br /&gt;
| Younes BENMBAREK &amp;amp; Youness EL QASTALANI&lt;br /&gt;
| [[SE4Binome2023-7|Binôme 7 2023/2024]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 8&lt;br /&gt;
| Groupe 2&lt;br /&gt;
| Prénom Nom &amp;amp; Prénom Nom&lt;br /&gt;
| [[SE4Binome2023-8|Binôme 8 2023/2024]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 9&lt;br /&gt;
| Groupe 3&lt;br /&gt;
| Prénom Nom &amp;amp; Prénom Nom&lt;br /&gt;
| [[SE4Binome2023-9|Binôme 9 2023/2024]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 10&lt;br /&gt;
| Groupe 3&lt;br /&gt;
| Prénom Nom &amp;amp; Prénom Nom&lt;br /&gt;
| [[SE4Binome2023-10|Binôme 10 2023/2024]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 11&lt;br /&gt;
| Groupe 3&lt;br /&gt;
| Prénom Nom &amp;amp; Prénom Nom&lt;br /&gt;
| [[SE4Binome2023-11|Binôme 11 2023/2024]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1198</id>
		<title>SE3Binome2022-5</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1198"/>
		<updated>2023-06-04T16:03:10Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : /* Visual 3D */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==                                                                       '''&amp;lt;big&amp;gt;Présentation du projet&amp;lt;/big&amp;gt;''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Objectif&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
Concevoir un modèle de voiture 1:43 équipée d'un microcontrôleur ATMega16u2 permettant de commander la voiture en se basant sur un programme. Nous avons choisi de rajouter une option de suivi d'une ligne droite, ceci se fera à l'aide d'un capteur QRE1113gr.&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Composants&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
les composants à utiliser dans notre projet sont les suivants :&lt;br /&gt;
&lt;br /&gt;
* Un microcontrôleur ATMega16u2&lt;br /&gt;
* Un capteur QRE1113gr&lt;br /&gt;
* Un mini-moteur à courant continu&lt;br /&gt;
* Un pilote du mini-moteur à courant continu (DRV8210DRLR)&lt;br /&gt;
* Un micro-moteur glissière pas à pas &lt;br /&gt;
* Une batterie LiPo&lt;br /&gt;
* Une puce de contrôle de charge de la batterie (MAX1811)&lt;br /&gt;
* Des leds pour simuler le système d'éclairage&lt;br /&gt;
* Des résistances&lt;br /&gt;
* Des capacités&lt;br /&gt;
* Un quartz&lt;br /&gt;
* Un port USB&lt;br /&gt;
*Des diodes&lt;br /&gt;
*Un AVR-ISP 6&lt;br /&gt;
*Des connecteurs&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Caractéristiques et limites de notre système&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
==== caractéristiques ====&lt;br /&gt;
Pour comprendre le fonctionnement de suivi de ligne souhaité, il faut d'abord comprendre le fonctionnement du capteur QRE. C'est un capteur de réflexion infrarouge, il est utilisé pour détecter la présence ou l'absence d'objets réfléchissants à proximité. Il se compose d'une LED infrarouge émettant de la lumière infrarouge et d'un phototransistor qui mesure la quantité de lumière réfléchie. Lorsqu'un objet se trouve devant le capteur, il réfléchit la lumière infrarouge émise par la LED vers le phototransistor. Le phototransistor détecte cette lumière réfléchie et génère un courant proportionnel à son intensité. La valeur mesurée par le capteur dépend de la quantité de lumière infrarouge réfléchie par l'objet. Si l'objet est réfléchissant et renvoie une grande quantité de lumière infrarouge, le phototransistor générera un courant plus élevé, ce qui se traduira par une valeur positive lorsqu'elle est lue par le microcontrôleur. En revanche, si aucun objet réfléchissant n'est présent devant le capteur, la quantité de lumière infrarouge réfléchie sera faible. Par conséquent, le phototransistor générera un courant plus faible ou nul, ce qui se traduira par une valeur de capteur égale à zéro lorsqu'elle est lue par le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
==== Limites ====&lt;br /&gt;
Les composants cités ci-dessus étaient soudés et utilisés dans notre carte, sauf la batterie et sa puce de contrôle, les diodes, l'AVR-ISP et les connecteurs.&lt;br /&gt;
&lt;br /&gt;
Pour réinitialiser le microprocesseur afin de mettre un nouveau code, il faut à chaque fois utiliser un fil entre la masse et la broche de reset du AVR-ISP. Le rajout d'un bouton aurait était mieux.&lt;br /&gt;
&lt;br /&gt;
Lors du routage de la carte, nous n'avons pas fait attention que le capteur doit être placé en bas, afin de détecter la ligne. &lt;br /&gt;
&lt;br /&gt;
Après avoir fini le code pour tester le mini-moteur dc, nous nous rendons compte que le microprocessur n'est plus détectable en utilisant la commande lsusb. Nous avons vérifié les connections, essayé de changer le port usb mais sans résultat (pourtant que les leds et le capteur marchait bien). Nous avons alors tester le code sur la carte du groupe 2 en ajustant un peu la structure et en supprimant les parties correspondantes au capteur. &lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Avancement du projet&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
==== le 14/02 : ====&lt;br /&gt;
- Compréhension de l'idée directrice du projet &lt;br /&gt;
&lt;br /&gt;
- Recherche de l'option à rajouter&lt;br /&gt;
&lt;br /&gt;
==== le 28/02 : ====&lt;br /&gt;
- Début de conception de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 21/03 : ====&lt;br /&gt;
- début du rajout des empreintes des composants&lt;br /&gt;
&lt;br /&gt;
==== le 07/04 : ====&lt;br /&gt;
- Fin de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 13/04 : ====&lt;br /&gt;
- Fin du routage de la carte&lt;br /&gt;
&lt;br /&gt;
- Envoi du modèle aux enseignants pour le valider et commander la carte&lt;br /&gt;
&lt;br /&gt;
==== le 02/05: ====&lt;br /&gt;
- Réception de la carte &lt;br /&gt;
&lt;br /&gt;
- Soudure de quelques résistances et capacités&lt;br /&gt;
&lt;br /&gt;
==== le 09/05: ====&lt;br /&gt;
- Les composants suivants sont déjà soudés par l'enseignant : ATMega16u2, le quartz&lt;br /&gt;
&lt;br /&gt;
- Rajout des leds et des résistances restantes&lt;br /&gt;
&lt;br /&gt;
- Début du code pour tester les leds&lt;br /&gt;
&lt;br /&gt;
==== le 16/05: ====&lt;br /&gt;
- Fin du code pour tester les leds&lt;br /&gt;
&lt;br /&gt;
- Réorganisation de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 23/05: ====&lt;br /&gt;
- Soudure du capteur&lt;br /&gt;
&lt;br /&gt;
- Implémentation du code pour tester le capteur&lt;br /&gt;
&lt;br /&gt;
- Soudure du mini-moteur dc &lt;br /&gt;
&lt;br /&gt;
==== le 29/05: ====&lt;br /&gt;
- Soudure du micro-moteur pas à pas &lt;br /&gt;
&lt;br /&gt;
- Implémentation du code pour tester le mini-moteur dc&lt;br /&gt;
&lt;br /&gt;
==== le 03/06: ====&lt;br /&gt;
- Test du code de moteur sur la carte du groupe 2&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GIT&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
le lien de notre archive GIT : https://archives.plil.fr/yelqasta/pse-g5.git&lt;br /&gt;
&lt;br /&gt;
== '''Conception de la carte électronique''' ==&lt;br /&gt;
&lt;br /&gt;
=== Composants et empreintes créés ===&lt;br /&gt;
nous avons créer le symbole du pilote du moteur DC via Kicad :&lt;br /&gt;
[[Fichier:Driver.png|vignette|250x250px|centré|Symbole du pilote DRV8210DRLR]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir mesurer les dimensions du mini-moteur continu on a pu créer l'empreinte suivante : &lt;br /&gt;
[[Fichier:Dc moteur.png|centré|vignette|Empreinte du mini-moteur dc]]&lt;br /&gt;
&lt;br /&gt;
=== '''schéma''' ===&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Réalisation du schématique du PCB sur le logiciel KiCad : [[Fichier:Schématique de la carte.png|centré|vignette|439x439px|schématique]]lors de la phase de soudure, l'enseignant nous a mentionné que le schéma du capteur n'est pas bon. Nous avons pu corriger le problème avec l'aide de l'enseignant en se basant sur le schéma suivant : https://cdn.sparkfun.com/datasheets/Sensors/Proximity/QRE1113-Digital-Breakout-v11.pdf &lt;br /&gt;
&lt;br /&gt;
=== '''Visual 3D''' ===&lt;br /&gt;
[[Fichier:Voiture 3D.png|vignette|502x502px|visualisation 3D de la carte |centré]]&lt;br /&gt;
&lt;br /&gt;
=== '''Routage de la carte''' ===&lt;br /&gt;
[[Fichier:Routage de la carte .png|centré|vignette|670x670px|carte routée]]&lt;br /&gt;
&lt;br /&gt;
=== '''Carte imprimée''' ===&lt;br /&gt;
                                                                                                                                                 [[Fichier:Carte imprimee bas.jpg|néant|vignette|Carte en vue de bas]]&lt;br /&gt;
[[Fichier:Notre carte.jpg|néant|vignette|carte en vue de haut]]&lt;br /&gt;
&lt;br /&gt;
=== Carte en étape intermédiaire ===&lt;br /&gt;
[[Fichier:Carte soudée entièrement.jpg|centré|vignette]]                                                                                                                                                 &lt;br /&gt;
==                                                                                                                                                   '''Premier Test de la carte''' ==&lt;br /&gt;
[[Fichier:Test.png|vignette|611x611px|résultat de la commande lsusb|néant]]Comme vous le voyez dessus, le microcontrôleur est détecté en utilisant la commande lsusb. Néanmoins, après avoir fini le code du mini-moteur dc, le microcontrôleur n'est plus détectable pour une raison inconnue.&lt;br /&gt;
&lt;br /&gt;
== Eclairage ==&lt;br /&gt;
[[Fichier:Clignotement des Leds.mp4|vignette|néant|Clignotement des Leds]]Les leds marchent bien ce qui nous a permi de passer à l'étape suivante ( souder le capteur et le coder )&lt;br /&gt;
&lt;br /&gt;
== Capteur ==&lt;br /&gt;
Le capteur marche bien, puisqu'il permet aux leds de s'allumer s'il détecte quelquechose, et s'éteignent sinon.[[Fichier:Fonctionnement capteur.mov|vignette|néant|Vidéo du fonctionnement du capteur]]&lt;br /&gt;
&lt;br /&gt;
==                                                                                    '''Moteurs''' ==&lt;br /&gt;
Nous avons soudé le pilote du mini-moteur dc, le mini-moteur DC et le micro-moteur glissière pas à pas.[[Fichier:Soudure.jpg|gauche|vignette|résultat final 1]]&lt;br /&gt;
[[Fichier:Photo.jpg|vignette|néant|505x505px|résultat final 2]]&lt;br /&gt;
&lt;br /&gt;
===== Vidéo du fonctionnement du mini-moteur dc =====&lt;br /&gt;
Comme indiqué, nous ne pouvions plus programmer le microprocesseur. Pour cela , nous avons testé notre code sur la carte du groupe 2 :&lt;br /&gt;
[[Fichier:Vidéo moteur dc.mov|vignette|Vidéo du fonctionnement du mini-moteur dc|néant]]Voici le code utilisé pour tester le moteur sur la carte du groupe 2, il ne reste qu'à changer les pins pour convenir à leur structure :&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;io.h&amp;quot;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define MAX_LED	4&lt;br /&gt;
&lt;br /&gt;
#define PORTB_OUTPUT	0x50&lt;br /&gt;
#define PORTC_OUTPUT	0x84&lt;br /&gt;
#define PORTD_OUTPUT	0x01&lt;br /&gt;
&lt;br /&gt;
unsigned char led1[] = {0x00, 0x80, 0x00}; // PC7&lt;br /&gt;
unsigned char led5[] = {0x40, 0x00, 0x00}; // PB6&lt;br /&gt;
unsigned char led6[] = {0x10, 0x00, 0x00}; // PB4&lt;br /&gt;
unsigned char led8[] = {0x00, 0x04, 0x00}; // PC2&lt;br /&gt;
unsigned char *leds[] = {led1, led5, led6, led8};&lt;br /&gt;
&lt;br /&gt;
unsigned char qre1113gr[] = {0x01, 0x00, 0x00}; // PD0&lt;br /&gt;
&lt;br /&gt;
#define PORTB_INPUT	0x00&lt;br /&gt;
#define PORTC_INPUT	0x00&lt;br /&gt;
#define PORTD_INPUT	0x00&lt;br /&gt;
&lt;br /&gt;
void control_motor(int enable) {&lt;br /&gt;
    // Set appropriate signals for motor control using DRV8210DRLR&lt;br /&gt;
    if (enable) {&lt;br /&gt;
        // Enable the motor in the desired direction (e.g., set appropriate motor pins high/low)&lt;br /&gt;
        PORTC |= (1 &amp;lt;&amp;lt; PC6);  // Set PC6 high&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    } else {&lt;br /&gt;
        // Disable the motor (e.g., set all motor pins low)&lt;br /&gt;
        PORTC &amp;amp;= ~(1 &amp;lt;&amp;lt; PC6); // Set PC6 low&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unsigned char input_get(unsigned char *pin) {&lt;br /&gt;
    unsigned char port_num = pin[0] &amp;gt;&amp;gt; 4;  // Extract the port number from the pin value&lt;br /&gt;
    unsigned char pin_num = pin[0] &amp;amp; 0x0F; // Extract the pin number from the pin value&lt;br /&gt;
&lt;br /&gt;
    switch (port_num) {&lt;br /&gt;
        case 0:  // PORTB&lt;br /&gt;
            return (PINB &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 1:  // PORTC&lt;br /&gt;
            return (PINC &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 2:  // PORTD&lt;br /&gt;
            return (PIND &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        default:&lt;br /&gt;
            return 0;  // Invalid port number&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
int main(void) {&lt;br /&gt;
    unsigned char imasks[] = {PORTB_INPUT, PORTC_INPUT, PORTD_INPUT};&lt;br /&gt;
    unsigned char pullup[] = {0x00, 0x00, 0x01};&lt;br /&gt;
    inputs_init(imasks, pullup);&lt;br /&gt;
    unsigned char omasks[] = {PORTB_OUTPUT, PORTC_OUTPUT, PORTD_OUTPUT};&lt;br /&gt;
    outputs_init(omasks);&lt;br /&gt;
 while (1) {&lt;br /&gt;
  control_motor(1);&lt;br /&gt;
  _delay_ms(300);&lt;br /&gt;
  control_motor(0);&lt;br /&gt;
  inputs_init(imasks, pullup);&lt;br /&gt;
 }&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Voici le code final en se basant sur les mêmes fonctions utilisées ci-dessus :&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;io.h&amp;quot;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define MAX_LED	4&lt;br /&gt;
&lt;br /&gt;
#define PORTB_OUTPUT	0x50&lt;br /&gt;
#define PORTC_OUTPUT	0x84&lt;br /&gt;
#define PORTD_OUTPUT	0x01&lt;br /&gt;
&lt;br /&gt;
unsigned char led1[] = {0x00, 0x80, 0x00}; // PC7&lt;br /&gt;
unsigned char led5[] = {0x40, 0x00, 0x00}; // PB6&lt;br /&gt;
unsigned char led6[] = {0x10, 0x00, 0x00}; // PB4&lt;br /&gt;
unsigned char led8[] = {0x00, 0x04, 0x00}; // PC2&lt;br /&gt;
unsigned char *leds[] = {led1, led5, led6, led8};&lt;br /&gt;
&lt;br /&gt;
unsigned char qre1113gr[] = {0x01, 0x00, 0x00}; // PD0&lt;br /&gt;
&lt;br /&gt;
#define PORTB_INPUT	0x00&lt;br /&gt;
#define PORTC_INPUT	0x00&lt;br /&gt;
#define PORTD_INPUT	0x00&lt;br /&gt;
&lt;br /&gt;
void control_motor(int enable) {&lt;br /&gt;
    // Set appropriate signals for motor control using DRV8210DRLR&lt;br /&gt;
    if (enable) {&lt;br /&gt;
        // Enable the motor in the desired direction (e.g., set appropriate motor pins high/low)&lt;br /&gt;
        PORTC |= (1 &amp;lt;&amp;lt; PC6);  // Set PC6 high&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    } else {&lt;br /&gt;
        // Disable the motor (e.g., set all motor pins low)&lt;br /&gt;
        PORTC &amp;amp;= ~(1 &amp;lt;&amp;lt; PC6); // Set PC6 low&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
// The motor here is running anti clock-wise&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unsigned char input_get(unsigned char *pin) {&lt;br /&gt;
    unsigned char port_num = pin[0] &amp;gt;&amp;gt; 4;  // Extract the port number from the pin value&lt;br /&gt;
    unsigned char pin_num = pin[0] &amp;amp; 0x0F; // Extract the pin number from the pin value&lt;br /&gt;
&lt;br /&gt;
    switch (port_num) {&lt;br /&gt;
        case 0:  // PORTB&lt;br /&gt;
            return (PINB &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 1:  // PORTC&lt;br /&gt;
            return (PINC &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 2:  // PORTD&lt;br /&gt;
            return (PIND &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        default:&lt;br /&gt;
            return 0;  // Invalid port number&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void) {&lt;br /&gt;
    unsigned char imasks[] = {PORTB_INPUT, PORTC_INPUT, PORTD_INPUT};&lt;br /&gt;
    unsigned char pullup[] = {0x00, 0x00, 0x01};&lt;br /&gt;
    inputs_init(imasks, pullup);&lt;br /&gt;
    unsigned char omasks[] = {PORTB_OUTPUT, PORTC_OUTPUT, PORTD_OUTPUT};&lt;br /&gt;
    outputs_init(omasks);&lt;br /&gt;
&lt;br /&gt;
    while (1) {&lt;br /&gt;
        // Get the value read by the sensor&lt;br /&gt;
        unsigned char qre_value = input_get(qre1113gr);&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
        if (qre_value &amp;gt; 0) {&lt;br /&gt;
               // Infra-red light detected, set everything on&lt;br /&gt;
            output_set(leds, 0);&lt;br /&gt;
            output_set(leds, 1);&lt;br /&gt;
            output_set(leds, 2);&lt;br /&gt;
            output_set(leds, 3);&lt;br /&gt;
            control_motor(1);&lt;br /&gt;
            &lt;br /&gt;
        } else {&lt;br /&gt;
            // Nothing detected, set everything off&lt;br /&gt;
            output_unset(leds, 0);&lt;br /&gt;
            output_unset(leds, 1);&lt;br /&gt;
            output_unset(leds, 2);&lt;br /&gt;
            output_unset(leds, 3);&lt;br /&gt;
            control_motor(0);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
        inputs_init(imasks, pullup); // reset the values&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
Nous avons appris beaucoup de nouvelles compétences, notamment la conception et le routage d'une carte électronique, la soudure des composants et la manipulation d'un capteur.&lt;br /&gt;
&lt;br /&gt;
Nous aurions pu avancer sur la partie LUFA et micro-moteur glissière pas à pas si nous n'avons pas eu le problème de détection du microcontrôleur. La batterie aussi reste à faire.&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1197</id>
		<title>SE3Binome2022-5</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1197"/>
		<updated>2023-06-04T16:02:16Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==                                                                       '''&amp;lt;big&amp;gt;Présentation du projet&amp;lt;/big&amp;gt;''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Objectif&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
Concevoir un modèle de voiture 1:43 équipée d'un microcontrôleur ATMega16u2 permettant de commander la voiture en se basant sur un programme. Nous avons choisi de rajouter une option de suivi d'une ligne droite, ceci se fera à l'aide d'un capteur QRE1113gr.&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Composants&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
les composants à utiliser dans notre projet sont les suivants :&lt;br /&gt;
&lt;br /&gt;
* Un microcontrôleur ATMega16u2&lt;br /&gt;
* Un capteur QRE1113gr&lt;br /&gt;
* Un mini-moteur à courant continu&lt;br /&gt;
* Un pilote du mini-moteur à courant continu (DRV8210DRLR)&lt;br /&gt;
* Un micro-moteur glissière pas à pas &lt;br /&gt;
* Une batterie LiPo&lt;br /&gt;
* Une puce de contrôle de charge de la batterie (MAX1811)&lt;br /&gt;
* Des leds pour simuler le système d'éclairage&lt;br /&gt;
* Des résistances&lt;br /&gt;
* Des capacités&lt;br /&gt;
* Un quartz&lt;br /&gt;
* Un port USB&lt;br /&gt;
*Des diodes&lt;br /&gt;
*Un AVR-ISP 6&lt;br /&gt;
*Des connecteurs&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Caractéristiques et limites de notre système&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
==== caractéristiques ====&lt;br /&gt;
Pour comprendre le fonctionnement de suivi de ligne souhaité, il faut d'abord comprendre le fonctionnement du capteur QRE. C'est un capteur de réflexion infrarouge, il est utilisé pour détecter la présence ou l'absence d'objets réfléchissants à proximité. Il se compose d'une LED infrarouge émettant de la lumière infrarouge et d'un phototransistor qui mesure la quantité de lumière réfléchie. Lorsqu'un objet se trouve devant le capteur, il réfléchit la lumière infrarouge émise par la LED vers le phototransistor. Le phototransistor détecte cette lumière réfléchie et génère un courant proportionnel à son intensité. La valeur mesurée par le capteur dépend de la quantité de lumière infrarouge réfléchie par l'objet. Si l'objet est réfléchissant et renvoie une grande quantité de lumière infrarouge, le phototransistor générera un courant plus élevé, ce qui se traduira par une valeur positive lorsqu'elle est lue par le microcontrôleur. En revanche, si aucun objet réfléchissant n'est présent devant le capteur, la quantité de lumière infrarouge réfléchie sera faible. Par conséquent, le phototransistor générera un courant plus faible ou nul, ce qui se traduira par une valeur de capteur égale à zéro lorsqu'elle est lue par le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
==== Limites ====&lt;br /&gt;
Les composants cités ci-dessus étaient soudés et utilisés dans notre carte, sauf la batterie et sa puce de contrôle, les diodes, l'AVR-ISP et les connecteurs.&lt;br /&gt;
&lt;br /&gt;
Pour réinitialiser le microprocesseur afin de mettre un nouveau code, il faut à chaque fois utiliser un fil entre la masse et la broche de reset du AVR-ISP. Le rajout d'un bouton aurait était mieux.&lt;br /&gt;
&lt;br /&gt;
Lors du routage de la carte, nous n'avons pas fait attention que le capteur doit être placé en bas, afin de détecter la ligne. &lt;br /&gt;
&lt;br /&gt;
Après avoir fini le code pour tester le mini-moteur dc, nous nous rendons compte que le microprocessur n'est plus détectable en utilisant la commande lsusb. Nous avons vérifié les connections, essayé de changer le port usb mais sans résultat (pourtant que les leds et le capteur marchait bien). Nous avons alors tester le code sur la carte du groupe 2 en ajustant un peu la structure et en supprimant les parties correspondantes au capteur. &lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Avancement du projet&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
==== le 14/02 : ====&lt;br /&gt;
- Compréhension de l'idée directrice du projet &lt;br /&gt;
&lt;br /&gt;
- Recherche de l'option à rajouter&lt;br /&gt;
&lt;br /&gt;
==== le 28/02 : ====&lt;br /&gt;
- Début de conception de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 21/03 : ====&lt;br /&gt;
- début du rajout des empreintes des composants&lt;br /&gt;
&lt;br /&gt;
==== le 07/04 : ====&lt;br /&gt;
- Fin de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 13/04 : ====&lt;br /&gt;
- Fin du routage de la carte&lt;br /&gt;
&lt;br /&gt;
- Envoi du modèle aux enseignants pour le valider et commander la carte&lt;br /&gt;
&lt;br /&gt;
==== le 02/05: ====&lt;br /&gt;
- Réception de la carte &lt;br /&gt;
&lt;br /&gt;
- Soudure de quelques résistances et capacités&lt;br /&gt;
&lt;br /&gt;
==== le 09/05: ====&lt;br /&gt;
- Les composants suivants sont déjà soudés par l'enseignant : ATMega16u2, le quartz&lt;br /&gt;
&lt;br /&gt;
- Rajout des leds et des résistances restantes&lt;br /&gt;
&lt;br /&gt;
- Début du code pour tester les leds&lt;br /&gt;
&lt;br /&gt;
==== le 16/05: ====&lt;br /&gt;
- Fin du code pour tester les leds&lt;br /&gt;
&lt;br /&gt;
- Réorganisation de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 23/05: ====&lt;br /&gt;
- Soudure du capteur&lt;br /&gt;
&lt;br /&gt;
- Implémentation du code pour tester le capteur&lt;br /&gt;
&lt;br /&gt;
- Soudure du mini-moteur dc &lt;br /&gt;
&lt;br /&gt;
==== le 29/05: ====&lt;br /&gt;
- Soudure du micro-moteur pas à pas &lt;br /&gt;
&lt;br /&gt;
- Implémentation du code pour tester le mini-moteur dc&lt;br /&gt;
&lt;br /&gt;
==== le 03/06: ====&lt;br /&gt;
- Test du code de moteur sur la carte du groupe 2&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GIT&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
le lien de notre archive GIT : https://archives.plil.fr/yelqasta/pse-g5.git&lt;br /&gt;
&lt;br /&gt;
== '''Conception de la carte électronique''' ==&lt;br /&gt;
&lt;br /&gt;
=== Composants et empreintes créés ===&lt;br /&gt;
nous avons créer le symbole du pilote du moteur DC via Kicad :&lt;br /&gt;
[[Fichier:Driver.png|vignette|250x250px|centré|Symbole du pilote DRV8210DRLR]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir mesurer les dimensions du mini-moteur continu on a pu créer l'empreinte suivante : &lt;br /&gt;
[[Fichier:Dc moteur.png|centré|vignette|Empreinte du mini-moteur dc]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''schéma''' &lt;br /&gt;
&lt;br /&gt;
Réalisation du schématique du PCB sur le logiciel KiCad : [[Fichier:Schématique de la carte.png|centré|vignette|439x439px|schématique]]lors de la phase de soudure, l'enseignant nous a mentionné que le schéma du capteur n'est pas bon. Nous avons pu corriger le problème avec l'aide de l'enseignant en se basant sur le schéma suivant : https://cdn.sparkfun.com/datasheets/Sensors/Proximity/QRE1113-Digital-Breakout-v11.pdf &lt;br /&gt;
&lt;br /&gt;
=== '''Visual 3D''' ===&lt;br /&gt;
[[Fichier:Voiture 3D.png|vignette|502x502px|visualisation 3D de la carte |centré]]&lt;br /&gt;
&lt;br /&gt;
=== '''Routage de la carte''' ===&lt;br /&gt;
[[Fichier:Routage de la carte .png|centré|vignette|670x670px|carte routée]]&lt;br /&gt;
&lt;br /&gt;
=== '''Carte imprimée''' ===&lt;br /&gt;
                                                                                                                                                 [[Fichier:Carte imprimee bas.jpg|néant|vignette|Carte en vue de bas]]&lt;br /&gt;
[[Fichier:Notre carte.jpg|néant|vignette|carte en vue de haut]]&lt;br /&gt;
&lt;br /&gt;
=== Carte en étape intermédiaire ===&lt;br /&gt;
[[Fichier:Carte soudée entièrement.jpg|centré|vignette]]                                                                                                                                                 &lt;br /&gt;
==                                                                                                                                                   '''Premier Test de la carte''' ==&lt;br /&gt;
[[Fichier:Test.png|vignette|611x611px|résultat de la commande lsusb|néant]]Comme vous le voyez dessus, le microcontrôleur est détecté en utilisant la commande lsusb. Néanmoins, après avoir fini le code du mini-moteur dc, le microcontrôleur n'est plus détectable pour une raison inconnue.&lt;br /&gt;
&lt;br /&gt;
== Eclairage ==&lt;br /&gt;
[[Fichier:Clignotement des Leds.mp4|vignette|néant|Clignotement des Leds]]Les leds marchent bien ce qui nous a permi de passer à l'étape suivante ( souder le capteur et le coder )&lt;br /&gt;
&lt;br /&gt;
== Capteur ==&lt;br /&gt;
Le capteur marche bien, puisqu'il permet aux leds de s'allumer s'il détecte quelquechose, et s'éteignent sinon.[[Fichier:Fonctionnement capteur.mov|vignette|néant|Vidéo du fonctionnement du capteur]]&lt;br /&gt;
&lt;br /&gt;
==                                                                                    '''Moteurs''' ==&lt;br /&gt;
Nous avons soudé le pilote du mini-moteur dc, le mini-moteur DC et le micro-moteur glissière pas à pas.[[Fichier:Soudure.jpg|gauche|vignette|résultat final 1]]&lt;br /&gt;
[[Fichier:Photo.jpg|vignette|néant|505x505px|résultat final 2]]&lt;br /&gt;
&lt;br /&gt;
===== Vidéo du fonctionnement du mini-moteur dc =====&lt;br /&gt;
Comme indiqué, nous ne pouvions plus programmer le microprocesseur. Pour cela , nous avons testé notre code sur la carte du groupe 2 :&lt;br /&gt;
[[Fichier:Vidéo moteur dc.mov|vignette|Vidéo du fonctionnement du mini-moteur dc|néant]]Voici le code utilisé pour tester le moteur sur la carte du groupe 2, il ne reste qu'à changer les pins pour convenir à leur structure :&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;io.h&amp;quot;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define MAX_LED	4&lt;br /&gt;
&lt;br /&gt;
#define PORTB_OUTPUT	0x50&lt;br /&gt;
#define PORTC_OUTPUT	0x84&lt;br /&gt;
#define PORTD_OUTPUT	0x01&lt;br /&gt;
&lt;br /&gt;
unsigned char led1[] = {0x00, 0x80, 0x00}; // PC7&lt;br /&gt;
unsigned char led5[] = {0x40, 0x00, 0x00}; // PB6&lt;br /&gt;
unsigned char led6[] = {0x10, 0x00, 0x00}; // PB4&lt;br /&gt;
unsigned char led8[] = {0x00, 0x04, 0x00}; // PC2&lt;br /&gt;
unsigned char *leds[] = {led1, led5, led6, led8};&lt;br /&gt;
&lt;br /&gt;
unsigned char qre1113gr[] = {0x01, 0x00, 0x00}; // PD0&lt;br /&gt;
&lt;br /&gt;
#define PORTB_INPUT	0x00&lt;br /&gt;
#define PORTC_INPUT	0x00&lt;br /&gt;
#define PORTD_INPUT	0x00&lt;br /&gt;
&lt;br /&gt;
void control_motor(int enable) {&lt;br /&gt;
    // Set appropriate signals for motor control using DRV8210DRLR&lt;br /&gt;
    if (enable) {&lt;br /&gt;
        // Enable the motor in the desired direction (e.g., set appropriate motor pins high/low)&lt;br /&gt;
        PORTC |= (1 &amp;lt;&amp;lt; PC6);  // Set PC6 high&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    } else {&lt;br /&gt;
        // Disable the motor (e.g., set all motor pins low)&lt;br /&gt;
        PORTC &amp;amp;= ~(1 &amp;lt;&amp;lt; PC6); // Set PC6 low&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unsigned char input_get(unsigned char *pin) {&lt;br /&gt;
    unsigned char port_num = pin[0] &amp;gt;&amp;gt; 4;  // Extract the port number from the pin value&lt;br /&gt;
    unsigned char pin_num = pin[0] &amp;amp; 0x0F; // Extract the pin number from the pin value&lt;br /&gt;
&lt;br /&gt;
    switch (port_num) {&lt;br /&gt;
        case 0:  // PORTB&lt;br /&gt;
            return (PINB &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 1:  // PORTC&lt;br /&gt;
            return (PINC &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 2:  // PORTD&lt;br /&gt;
            return (PIND &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        default:&lt;br /&gt;
            return 0;  // Invalid port number&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
int main(void) {&lt;br /&gt;
    unsigned char imasks[] = {PORTB_INPUT, PORTC_INPUT, PORTD_INPUT};&lt;br /&gt;
    unsigned char pullup[] = {0x00, 0x00, 0x01};&lt;br /&gt;
    inputs_init(imasks, pullup);&lt;br /&gt;
    unsigned char omasks[] = {PORTB_OUTPUT, PORTC_OUTPUT, PORTD_OUTPUT};&lt;br /&gt;
    outputs_init(omasks);&lt;br /&gt;
 while (1) {&lt;br /&gt;
  control_motor(1);&lt;br /&gt;
  _delay_ms(300);&lt;br /&gt;
  control_motor(0);&lt;br /&gt;
  inputs_init(imasks, pullup);&lt;br /&gt;
 }&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Voici le code final en se basant sur les mêmes fonctions utilisées ci-dessus :&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;io.h&amp;quot;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define MAX_LED	4&lt;br /&gt;
&lt;br /&gt;
#define PORTB_OUTPUT	0x50&lt;br /&gt;
#define PORTC_OUTPUT	0x84&lt;br /&gt;
#define PORTD_OUTPUT	0x01&lt;br /&gt;
&lt;br /&gt;
unsigned char led1[] = {0x00, 0x80, 0x00}; // PC7&lt;br /&gt;
unsigned char led5[] = {0x40, 0x00, 0x00}; // PB6&lt;br /&gt;
unsigned char led6[] = {0x10, 0x00, 0x00}; // PB4&lt;br /&gt;
unsigned char led8[] = {0x00, 0x04, 0x00}; // PC2&lt;br /&gt;
unsigned char *leds[] = {led1, led5, led6, led8};&lt;br /&gt;
&lt;br /&gt;
unsigned char qre1113gr[] = {0x01, 0x00, 0x00}; // PD0&lt;br /&gt;
&lt;br /&gt;
#define PORTB_INPUT	0x00&lt;br /&gt;
#define PORTC_INPUT	0x00&lt;br /&gt;
#define PORTD_INPUT	0x00&lt;br /&gt;
&lt;br /&gt;
void control_motor(int enable) {&lt;br /&gt;
    // Set appropriate signals for motor control using DRV8210DRLR&lt;br /&gt;
    if (enable) {&lt;br /&gt;
        // Enable the motor in the desired direction (e.g., set appropriate motor pins high/low)&lt;br /&gt;
        PORTC |= (1 &amp;lt;&amp;lt; PC6);  // Set PC6 high&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    } else {&lt;br /&gt;
        // Disable the motor (e.g., set all motor pins low)&lt;br /&gt;
        PORTC &amp;amp;= ~(1 &amp;lt;&amp;lt; PC6); // Set PC6 low&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
// The motor here is running anti clock-wise&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unsigned char input_get(unsigned char *pin) {&lt;br /&gt;
    unsigned char port_num = pin[0] &amp;gt;&amp;gt; 4;  // Extract the port number from the pin value&lt;br /&gt;
    unsigned char pin_num = pin[0] &amp;amp; 0x0F; // Extract the pin number from the pin value&lt;br /&gt;
&lt;br /&gt;
    switch (port_num) {&lt;br /&gt;
        case 0:  // PORTB&lt;br /&gt;
            return (PINB &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 1:  // PORTC&lt;br /&gt;
            return (PINC &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 2:  // PORTD&lt;br /&gt;
            return (PIND &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        default:&lt;br /&gt;
            return 0;  // Invalid port number&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void) {&lt;br /&gt;
    unsigned char imasks[] = {PORTB_INPUT, PORTC_INPUT, PORTD_INPUT};&lt;br /&gt;
    unsigned char pullup[] = {0x00, 0x00, 0x01};&lt;br /&gt;
    inputs_init(imasks, pullup);&lt;br /&gt;
    unsigned char omasks[] = {PORTB_OUTPUT, PORTC_OUTPUT, PORTD_OUTPUT};&lt;br /&gt;
    outputs_init(omasks);&lt;br /&gt;
&lt;br /&gt;
    while (1) {&lt;br /&gt;
        // Get the value read by the sensor&lt;br /&gt;
        unsigned char qre_value = input_get(qre1113gr);&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
        if (qre_value &amp;gt; 0) {&lt;br /&gt;
               // Infra-red light detected, set everything on&lt;br /&gt;
            output_set(leds, 0);&lt;br /&gt;
            output_set(leds, 1);&lt;br /&gt;
            output_set(leds, 2);&lt;br /&gt;
            output_set(leds, 3);&lt;br /&gt;
            control_motor(1);&lt;br /&gt;
            &lt;br /&gt;
        } else {&lt;br /&gt;
            // Nothing detected, set everything off&lt;br /&gt;
            output_unset(leds, 0);&lt;br /&gt;
            output_unset(leds, 1);&lt;br /&gt;
            output_unset(leds, 2);&lt;br /&gt;
            output_unset(leds, 3);&lt;br /&gt;
            control_motor(0);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
        inputs_init(imasks, pullup); // reset the values&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
Nous avons appris beaucoup de nouvelles compétences, notamment la conception et le routage d'une carte électronique, la soudure des composants et la manipulation d'un capteur.&lt;br /&gt;
&lt;br /&gt;
Nous aurions pu avancer sur la partie LUFA et micro-moteur glissière pas à pas si nous n'avons pas eu le problème de détection du microcontrôleur. La batterie aussi reste à faire.&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1196</id>
		<title>SE3Binome2022-5</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1196"/>
		<updated>2023-06-04T16:01:11Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : /* Carte imprimée */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==                                                                       '''&amp;lt;big&amp;gt;Présentation du projet&amp;lt;/big&amp;gt;''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Objectif&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
Concevoir un modèle de voiture 1:43 équipée d'un microcontrôleur ATMega16u2 permettant de commander la voiture en se basant sur un programme. Nous avons choisi de rajouter une option de suivi d'une ligne droite, ceci se fera à l'aide d'un capteur QRE1113gr.&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Composants&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
les composants à utiliser dans notre projet sont les suivants :&lt;br /&gt;
&lt;br /&gt;
* Un microcontrôleur ATMega16u2&lt;br /&gt;
* Un capteur QRE1113gr&lt;br /&gt;
* Un mini-moteur à courant continu&lt;br /&gt;
* Un pilote du mini-moteur à courant continu (DRV8210DRLR)&lt;br /&gt;
* Un micro-moteur glissière pas à pas &lt;br /&gt;
* Une batterie LiPo&lt;br /&gt;
* Une puce de contrôle de charge de la batterie (MAX1811)&lt;br /&gt;
* Des leds pour simuler le système d'éclairage&lt;br /&gt;
* Des résistances&lt;br /&gt;
* Des capacités&lt;br /&gt;
* Un quartz&lt;br /&gt;
* Un port USB&lt;br /&gt;
*Des diodes&lt;br /&gt;
*Un AVR-ISP 6&lt;br /&gt;
*Des connecteurs&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Caractéristiques et limites de notre système&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
==== caractéristiques ====&lt;br /&gt;
Pour comprendre le fonctionnement de suivi de ligne souhaité, il faut d'abord comprendre le fonctionnement du capteur QRE. C'est un capteur de réflexion infrarouge, il est utilisé pour détecter la présence ou l'absence d'objets réfléchissants à proximité. Il se compose d'une LED infrarouge émettant de la lumière infrarouge et d'un phototransistor qui mesure la quantité de lumière réfléchie. Lorsqu'un objet se trouve devant le capteur, il réfléchit la lumière infrarouge émise par la LED vers le phototransistor. Le phototransistor détecte cette lumière réfléchie et génère un courant proportionnel à son intensité. La valeur mesurée par le capteur dépend de la quantité de lumière infrarouge réfléchie par l'objet. Si l'objet est réfléchissant et renvoie une grande quantité de lumière infrarouge, le phototransistor générera un courant plus élevé, ce qui se traduira par une valeur positive lorsqu'elle est lue par le microcontrôleur. En revanche, si aucun objet réfléchissant n'est présent devant le capteur, la quantité de lumière infrarouge réfléchie sera faible. Par conséquent, le phototransistor générera un courant plus faible ou nul, ce qui se traduira par une valeur de capteur égale à zéro lorsqu'elle est lue par le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
==== Limites ====&lt;br /&gt;
Les composants cités ci-dessus étaient soudés et utilisés dans notre carte, sauf la batterie et sa puce de contrôle, les diodes, l'AVR-ISP et les connecteurs.&lt;br /&gt;
&lt;br /&gt;
Pour réinitialiser le microprocesseur afin de mettre un nouveau code, il faut à chaque fois utiliser un fil entre la masse et la broche de reset du AVR-ISP. Le rajout d'un bouton aurait était mieux.&lt;br /&gt;
&lt;br /&gt;
Lors du routage de la carte, nous n'avons pas fait attention que le capteur doit être placé en bas, afin de détecter la ligne. &lt;br /&gt;
&lt;br /&gt;
Après avoir fini le code pour tester le mini-moteur dc, nous nous rendons compte que le microprocessur n'est plus détectable en utilisant la commande lsusb. Nous avons vérifié les connections, essayé de changer le port usb mais sans résultat (pourtant que les leds et le capteur marchait bien). Nous avons alors tester le code sur la carte du groupe 2 en ajustant un peu la structure et en supprimant les parties correspondantes au capteur. &lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Avancement du projet&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
==== le 14/02 : ====&lt;br /&gt;
- Compréhension de l'idée directrice du projet &lt;br /&gt;
&lt;br /&gt;
- Recherche de l'option à rajouter&lt;br /&gt;
&lt;br /&gt;
==== le 28/02 : ====&lt;br /&gt;
- Début de conception de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 21/03 : ====&lt;br /&gt;
- début du rajout des empreintes des composants&lt;br /&gt;
&lt;br /&gt;
==== le 07/04 : ====&lt;br /&gt;
- Fin de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 13/04 : ====&lt;br /&gt;
- Fin du routage de la carte&lt;br /&gt;
&lt;br /&gt;
- Envoi du modèle aux enseignants pour le valider et commander la carte&lt;br /&gt;
&lt;br /&gt;
==== le 02/05: ====&lt;br /&gt;
- Réception de la carte &lt;br /&gt;
&lt;br /&gt;
- Soudure de quelques résistances et capacités&lt;br /&gt;
&lt;br /&gt;
==== le 09/05: ====&lt;br /&gt;
- Les composants suivants sont déjà soudés par l'enseignant : ATMega16u2, le quartz&lt;br /&gt;
&lt;br /&gt;
- Rajout des leds et des résistances restantes&lt;br /&gt;
&lt;br /&gt;
- Début du code pour tester les leds&lt;br /&gt;
&lt;br /&gt;
==== le 16/05: ====&lt;br /&gt;
- Fin du code pour tester les leds&lt;br /&gt;
&lt;br /&gt;
- Réorganisation de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 23/05: ====&lt;br /&gt;
- Soudure du capteur&lt;br /&gt;
&lt;br /&gt;
- Implémentation du code pour tester le capteur&lt;br /&gt;
&lt;br /&gt;
- Soudure du mini-moteur dc &lt;br /&gt;
&lt;br /&gt;
==== le 29/05: ====&lt;br /&gt;
- Soudure du micro-moteur pas à pas &lt;br /&gt;
&lt;br /&gt;
- Implémentation du code pour tester le mini-moteur dc&lt;br /&gt;
&lt;br /&gt;
==== le 03/06: ====&lt;br /&gt;
- Test du code de moteur sur la carte du groupe 2&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GIT&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
le lien de notre archive GIT : https://archives.plil.fr/yelqasta/pse-g5.git&lt;br /&gt;
&lt;br /&gt;
== '''Conception de la carte électronique''' ==&lt;br /&gt;
&lt;br /&gt;
=== Composants et empreintes créés ===&lt;br /&gt;
nous avons créer le symbole du pilote du moteur DC via Kicad :&lt;br /&gt;
[[Fichier:Driver.png|vignette|250x250px|centré|Symbole du pilote DRV8210DRLR]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir mesurer les dimensions du mini-moteur continu on a pu créer l'empreinte suivante : &lt;br /&gt;
[[Fichier:Dc moteur.png|centré|vignette|Empreinte du mini-moteur dc]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''schéma''' &lt;br /&gt;
&lt;br /&gt;
Réalisation du schématique du PCB sur le logiciel KiCad : [[Fichier:Schématique de la carte.png|centré|vignette|439x439px|schématique]]lors de la phase de soudure, l'enseignant nous a mentionné que le schéma du capteur n'est pas bon. Nous avons pu corriger le problème avec l'aide de l'enseignant en se basant sur le schéma suivant : https://cdn.sparkfun.com/datasheets/Sensors/Proximity/QRE1113-Digital-Breakout-v11.pdf &lt;br /&gt;
&lt;br /&gt;
=== '''Visual 3D''' ===&lt;br /&gt;
[[Fichier:Voiture 3D.png|vignette|502x502px|visualisation 3D de la carte |centré]]&lt;br /&gt;
&lt;br /&gt;
=== '''Routage de la carte''' ===&lt;br /&gt;
[[Fichier:Routage de la carte .png|centré|vignette|670x670px|carte routée]]&lt;br /&gt;
&lt;br /&gt;
=== '''Carte imprimée''' ===&lt;br /&gt;
                                                                                                                                                 [[Fichier:Carte imprimee bas.jpg|néant|vignette|Carte en vue de bas]]                                                                                                                                                 &lt;br /&gt;
                                                                                                                                                 &lt;br /&gt;
=== Carte en étape intermédiaire ===&lt;br /&gt;
[[Fichier:Carte soudée entièrement.jpg|centré|vignette|premièr]]                                                                                                                                                 &lt;br /&gt;
==                                                                                                                                                   '''Premier Test de la carte''' ==&lt;br /&gt;
[[Fichier:Test.png|vignette|611x611px|résultat de la commande lsusb|néant]]Comme vous le voyez dessus, le microcontrôleur est détecté en utilisant la commande lsusb. Néanmoins, après avoir fini le code du mini-moteur dc, le microcontrôleur n'est plus détectable pour une raison inconnue.&lt;br /&gt;
&lt;br /&gt;
== Eclairage ==&lt;br /&gt;
[[Fichier:Clignotement des Leds.mp4|vignette|néant|Clignotement des Leds]]Les leds marchent bien ce qui nous a permi de passer à l'étape suivante ( souder le capteur et le coder )&lt;br /&gt;
&lt;br /&gt;
== Capteur ==&lt;br /&gt;
Le capteur marche bien, puisqu'il permet aux leds de s'allumer s'il détecte quelquechose, et s'éteignent sinon.[[Fichier:Fonctionnement capteur.mov|vignette|néant|Vidéo du fonctionnement du capteur]]&lt;br /&gt;
&lt;br /&gt;
==                                                                                    '''Moteurs''' ==&lt;br /&gt;
Nous avons soudé le pilote du mini-moteur dc, le mini-moteur DC et le micro-moteur glissière pas à pas.[[Fichier:Soudure.jpg|gauche|vignette|résultat final 1]]&lt;br /&gt;
[[Fichier:Photo.jpg|vignette|néant|505x505px|résultat final 2]]&lt;br /&gt;
&lt;br /&gt;
===== Vidéo du fonctionnement du mini-moteur dc =====&lt;br /&gt;
Comme indiqué, nous ne pouvions plus programmer le microprocesseur. Pour cela , nous avons testé notre code sur la carte du groupe 2 :&lt;br /&gt;
[[Fichier:Vidéo moteur dc.mov|vignette|Vidéo du fonctionnement du mini-moteur dc|néant]]Voici le code utilisé pour tester le moteur sur la carte du groupe 2, il ne reste qu'à changer les pins pour convenir à leur structure :&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;io.h&amp;quot;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define MAX_LED	4&lt;br /&gt;
&lt;br /&gt;
#define PORTB_OUTPUT	0x50&lt;br /&gt;
#define PORTC_OUTPUT	0x84&lt;br /&gt;
#define PORTD_OUTPUT	0x01&lt;br /&gt;
&lt;br /&gt;
unsigned char led1[] = {0x00, 0x80, 0x00}; // PC7&lt;br /&gt;
unsigned char led5[] = {0x40, 0x00, 0x00}; // PB6&lt;br /&gt;
unsigned char led6[] = {0x10, 0x00, 0x00}; // PB4&lt;br /&gt;
unsigned char led8[] = {0x00, 0x04, 0x00}; // PC2&lt;br /&gt;
unsigned char *leds[] = {led1, led5, led6, led8};&lt;br /&gt;
&lt;br /&gt;
unsigned char qre1113gr[] = {0x01, 0x00, 0x00}; // PD0&lt;br /&gt;
&lt;br /&gt;
#define PORTB_INPUT	0x00&lt;br /&gt;
#define PORTC_INPUT	0x00&lt;br /&gt;
#define PORTD_INPUT	0x00&lt;br /&gt;
&lt;br /&gt;
void control_motor(int enable) {&lt;br /&gt;
    // Set appropriate signals for motor control using DRV8210DRLR&lt;br /&gt;
    if (enable) {&lt;br /&gt;
        // Enable the motor in the desired direction (e.g., set appropriate motor pins high/low)&lt;br /&gt;
        PORTC |= (1 &amp;lt;&amp;lt; PC6);  // Set PC6 high&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    } else {&lt;br /&gt;
        // Disable the motor (e.g., set all motor pins low)&lt;br /&gt;
        PORTC &amp;amp;= ~(1 &amp;lt;&amp;lt; PC6); // Set PC6 low&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unsigned char input_get(unsigned char *pin) {&lt;br /&gt;
    unsigned char port_num = pin[0] &amp;gt;&amp;gt; 4;  // Extract the port number from the pin value&lt;br /&gt;
    unsigned char pin_num = pin[0] &amp;amp; 0x0F; // Extract the pin number from the pin value&lt;br /&gt;
&lt;br /&gt;
    switch (port_num) {&lt;br /&gt;
        case 0:  // PORTB&lt;br /&gt;
            return (PINB &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 1:  // PORTC&lt;br /&gt;
            return (PINC &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 2:  // PORTD&lt;br /&gt;
            return (PIND &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        default:&lt;br /&gt;
            return 0;  // Invalid port number&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
int main(void) {&lt;br /&gt;
    unsigned char imasks[] = {PORTB_INPUT, PORTC_INPUT, PORTD_INPUT};&lt;br /&gt;
    unsigned char pullup[] = {0x00, 0x00, 0x01};&lt;br /&gt;
    inputs_init(imasks, pullup);&lt;br /&gt;
    unsigned char omasks[] = {PORTB_OUTPUT, PORTC_OUTPUT, PORTD_OUTPUT};&lt;br /&gt;
    outputs_init(omasks);&lt;br /&gt;
 while (1) {&lt;br /&gt;
  control_motor(1);&lt;br /&gt;
  _delay_ms(300);&lt;br /&gt;
  control_motor(0);&lt;br /&gt;
  inputs_init(imasks, pullup);&lt;br /&gt;
 }&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Voici le code final en se basant sur les mêmes fonctions utilisées ci-dessus :&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;io.h&amp;quot;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define MAX_LED	4&lt;br /&gt;
&lt;br /&gt;
#define PORTB_OUTPUT	0x50&lt;br /&gt;
#define PORTC_OUTPUT	0x84&lt;br /&gt;
#define PORTD_OUTPUT	0x01&lt;br /&gt;
&lt;br /&gt;
unsigned char led1[] = {0x00, 0x80, 0x00}; // PC7&lt;br /&gt;
unsigned char led5[] = {0x40, 0x00, 0x00}; // PB6&lt;br /&gt;
unsigned char led6[] = {0x10, 0x00, 0x00}; // PB4&lt;br /&gt;
unsigned char led8[] = {0x00, 0x04, 0x00}; // PC2&lt;br /&gt;
unsigned char *leds[] = {led1, led5, led6, led8};&lt;br /&gt;
&lt;br /&gt;
unsigned char qre1113gr[] = {0x01, 0x00, 0x00}; // PD0&lt;br /&gt;
&lt;br /&gt;
#define PORTB_INPUT	0x00&lt;br /&gt;
#define PORTC_INPUT	0x00&lt;br /&gt;
#define PORTD_INPUT	0x00&lt;br /&gt;
&lt;br /&gt;
void control_motor(int enable) {&lt;br /&gt;
    // Set appropriate signals for motor control using DRV8210DRLR&lt;br /&gt;
    if (enable) {&lt;br /&gt;
        // Enable the motor in the desired direction (e.g., set appropriate motor pins high/low)&lt;br /&gt;
        PORTC |= (1 &amp;lt;&amp;lt; PC6);  // Set PC6 high&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    } else {&lt;br /&gt;
        // Disable the motor (e.g., set all motor pins low)&lt;br /&gt;
        PORTC &amp;amp;= ~(1 &amp;lt;&amp;lt; PC6); // Set PC6 low&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
// The motor here is running anti clock-wise&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unsigned char input_get(unsigned char *pin) {&lt;br /&gt;
    unsigned char port_num = pin[0] &amp;gt;&amp;gt; 4;  // Extract the port number from the pin value&lt;br /&gt;
    unsigned char pin_num = pin[0] &amp;amp; 0x0F; // Extract the pin number from the pin value&lt;br /&gt;
&lt;br /&gt;
    switch (port_num) {&lt;br /&gt;
        case 0:  // PORTB&lt;br /&gt;
            return (PINB &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 1:  // PORTC&lt;br /&gt;
            return (PINC &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 2:  // PORTD&lt;br /&gt;
            return (PIND &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        default:&lt;br /&gt;
            return 0;  // Invalid port number&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void) {&lt;br /&gt;
    unsigned char imasks[] = {PORTB_INPUT, PORTC_INPUT, PORTD_INPUT};&lt;br /&gt;
    unsigned char pullup[] = {0x00, 0x00, 0x01};&lt;br /&gt;
    inputs_init(imasks, pullup);&lt;br /&gt;
    unsigned char omasks[] = {PORTB_OUTPUT, PORTC_OUTPUT, PORTD_OUTPUT};&lt;br /&gt;
    outputs_init(omasks);&lt;br /&gt;
&lt;br /&gt;
    while (1) {&lt;br /&gt;
        // Get the value read by the sensor&lt;br /&gt;
        unsigned char qre_value = input_get(qre1113gr);&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
        if (qre_value &amp;gt; 0) {&lt;br /&gt;
               // Infra-red light detected, set everything on&lt;br /&gt;
            output_set(leds, 0);&lt;br /&gt;
            output_set(leds, 1);&lt;br /&gt;
            output_set(leds, 2);&lt;br /&gt;
            output_set(leds, 3);&lt;br /&gt;
            control_motor(1);&lt;br /&gt;
            &lt;br /&gt;
        } else {&lt;br /&gt;
            // Nothing detected, set everything off&lt;br /&gt;
            output_unset(leds, 0);&lt;br /&gt;
            output_unset(leds, 1);&lt;br /&gt;
            output_unset(leds, 2);&lt;br /&gt;
            output_unset(leds, 3);&lt;br /&gt;
            control_motor(0);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
        inputs_init(imasks, pullup); // reset the values&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
Nous avons appris beaucoup de nouvelles compétences, notamment la conception et le routage d'une carte électronique, la soudure des composants et la manipulation d'un capteur.&lt;br /&gt;
&lt;br /&gt;
Nous aurions pu avancer sur la partie LUFA et micro-moteur glissière pas à pas si nous n'avons pas eu le problème de détection du microcontrôleur. La batterie aussi reste à faire.&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Fichier:Carte_imprimee_bas.jpg&amp;diff=1193</id>
		<title>Fichier:Carte imprimee bas.jpg</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Fichier:Carte_imprimee_bas.jpg&amp;diff=1193"/>
		<updated>2023-06-04T15:59:20Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;carte en bas&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1192</id>
		<title>SE3Binome2022-5</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1192"/>
		<updated>2023-06-04T15:56:42Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : /* Capteur */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==                                                                       '''&amp;lt;big&amp;gt;Présentation du projet&amp;lt;/big&amp;gt;''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Objectif&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
Concevoir un modèle de voiture 1:43 équipée d'un microcontrôleur ATMega16u2 permettant de commander la voiture en se basant sur un programme. Nous avons choisi de rajouter une option de suivi d'une ligne droite, ceci se fera à l'aide d'un capteur QRE1113gr.&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Composants&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
les composants à utiliser dans notre projet sont les suivants :&lt;br /&gt;
&lt;br /&gt;
* Un microcontrôleur ATMega16u2&lt;br /&gt;
* Un capteur QRE1113gr&lt;br /&gt;
* Un mini-moteur à courant continu&lt;br /&gt;
* Un pilote du mini-moteur à courant continu (DRV8210DRLR)&lt;br /&gt;
* Un micro-moteur glissière pas à pas &lt;br /&gt;
* Une batterie LiPo&lt;br /&gt;
* Une puce de contrôle de charge de la batterie (MAX1811)&lt;br /&gt;
* Des leds pour simuler le système d'éclairage&lt;br /&gt;
* Des résistances&lt;br /&gt;
* Des capacités&lt;br /&gt;
* Un quartz&lt;br /&gt;
* Un port USB&lt;br /&gt;
*Des diodes&lt;br /&gt;
*Un AVR-ISP 6&lt;br /&gt;
*Des connecteurs&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Caractéristiques et limites de notre système&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
==== caractéristiques ====&lt;br /&gt;
Pour comprendre le fonctionnement de suivi de ligne souhaité, il faut d'abord comprendre le fonctionnement du capteur QRE. C'est un capteur de réflexion infrarouge, il est utilisé pour détecter la présence ou l'absence d'objets réfléchissants à proximité. Il se compose d'une LED infrarouge émettant de la lumière infrarouge et d'un phototransistor qui mesure la quantité de lumière réfléchie. Lorsqu'un objet se trouve devant le capteur, il réfléchit la lumière infrarouge émise par la LED vers le phototransistor. Le phototransistor détecte cette lumière réfléchie et génère un courant proportionnel à son intensité. La valeur mesurée par le capteur dépend de la quantité de lumière infrarouge réfléchie par l'objet. Si l'objet est réfléchissant et renvoie une grande quantité de lumière infrarouge, le phototransistor générera un courant plus élevé, ce qui se traduira par une valeur positive lorsqu'elle est lue par le microcontrôleur. En revanche, si aucun objet réfléchissant n'est présent devant le capteur, la quantité de lumière infrarouge réfléchie sera faible. Par conséquent, le phototransistor générera un courant plus faible ou nul, ce qui se traduira par une valeur de capteur égale à zéro lorsqu'elle est lue par le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
==== Limites ====&lt;br /&gt;
Les composants cités ci-dessus étaient soudés et utilisés dans notre carte, sauf la batterie et sa puce de contrôle, les diodes, l'AVR-ISP et les connecteurs.&lt;br /&gt;
&lt;br /&gt;
Pour réinitialiser le microprocesseur afin de mettre un nouveau code, il faut à chaque fois utiliser un fil entre la masse et la broche de reset du AVR-ISP. Le rajout d'un bouton aurait était mieux.&lt;br /&gt;
&lt;br /&gt;
Lors du routage de la carte, nous n'avons pas fait attention que le capteur doit être placé en bas, afin de détecter la ligne. &lt;br /&gt;
&lt;br /&gt;
Après avoir fini le code pour tester le mini-moteur dc, nous nous rendons compte que le microprocessur n'est plus détectable en utilisant la commande lsusb. Nous avons vérifié les connections, essayé de changer le port usb mais sans résultat (pourtant que les leds et le capteur marchait bien). Nous avons alors tester le code sur la carte du groupe 2 en ajustant un peu la structure et en supprimant les parties correspondantes au capteur. &lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Avancement du projet&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
==== le 14/02 : ====&lt;br /&gt;
- Compréhension de l'idée directrice du projet &lt;br /&gt;
&lt;br /&gt;
- Recherche de l'option à rajouter&lt;br /&gt;
&lt;br /&gt;
==== le 28/02 : ====&lt;br /&gt;
- Début de conception de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 21/03 : ====&lt;br /&gt;
- début du rajout des empreintes des composants&lt;br /&gt;
&lt;br /&gt;
==== le 07/04 : ====&lt;br /&gt;
- Fin de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 13/04 : ====&lt;br /&gt;
- Fin du routage de la carte&lt;br /&gt;
&lt;br /&gt;
- Envoi du modèle aux enseignants pour le valider et commander la carte&lt;br /&gt;
&lt;br /&gt;
==== le 02/05: ====&lt;br /&gt;
- Réception de la carte &lt;br /&gt;
&lt;br /&gt;
- Soudure de quelques résistances et capacités&lt;br /&gt;
&lt;br /&gt;
==== le 09/05: ====&lt;br /&gt;
- Les composants suivants sont déjà soudés par l'enseignant : ATMega16u2, le quartz&lt;br /&gt;
&lt;br /&gt;
- Rajout des leds et des résistances restantes&lt;br /&gt;
&lt;br /&gt;
- Début du code pour tester les leds&lt;br /&gt;
&lt;br /&gt;
==== le 16/05: ====&lt;br /&gt;
- Fin du code pour tester les leds&lt;br /&gt;
&lt;br /&gt;
- Réorganisation de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 23/05: ====&lt;br /&gt;
- Soudure du capteur&lt;br /&gt;
&lt;br /&gt;
- Implémentation du code pour tester le capteur&lt;br /&gt;
&lt;br /&gt;
- Soudure du mini-moteur dc &lt;br /&gt;
&lt;br /&gt;
==== le 29/05: ====&lt;br /&gt;
- Soudure du micro-moteur pas à pas &lt;br /&gt;
&lt;br /&gt;
- Implémentation du code pour tester le mini-moteur dc&lt;br /&gt;
&lt;br /&gt;
==== le 03/06: ====&lt;br /&gt;
- Teste du code de moteur sur la carte du groupe 2&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GIT&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
le lien de notre archive GIT : https://archives.plil.fr/yelqasta/pse-g5.git&lt;br /&gt;
&lt;br /&gt;
== '''Conception de la carte électronique''' ==&lt;br /&gt;
&lt;br /&gt;
=== Composants et empreintes créés ===&lt;br /&gt;
nous avons créer le symbole du pilote du moteur DC via Kicad :&lt;br /&gt;
[[Fichier:Driver.png|vignette|250x250px|centré|Symbole du pilote DRV8210DRLR]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir mesurer les dimensions du mini-moteur continu on a pu créer l'empreinte suivante : &lt;br /&gt;
[[Fichier:Dc moteur.png|centré|vignette|Empreinte du mini-moteur dc]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''schéma''' &lt;br /&gt;
&lt;br /&gt;
Réalisation du schématique du PCB sur le logiciel KiCad : [[Fichier:Schématique de la carte.png|centré|vignette|439x439px|schématique]]lors de la phase de soudure, l'enseignant nous a mentionné que le schéma du capteur n'est pas bon. Nous avons pu corriger le problème avec l'aide de l'enseignant en se basant sur le schéma suivant : https://cdn.sparkfun.com/datasheets/Sensors/Proximity/QRE1113-Digital-Breakout-v11.pdf &lt;br /&gt;
&lt;br /&gt;
=== '''Visual 3D''' ===&lt;br /&gt;
[[Fichier:Voiture 3D.png|vignette|502x502px|visualisation 3D de la carte |centré]]&lt;br /&gt;
&lt;br /&gt;
=== '''Routage de la carte''' ===&lt;br /&gt;
[[Fichier:Routage de la carte .png|centré|vignette|670x670px|carte routée]]&lt;br /&gt;
&lt;br /&gt;
=== '''Carte imprimée''' ===&lt;br /&gt;
la carte imprimée et soudure du capteur, leds, résistances et microcontrôleur ATMega16U2 :                                                                                                                                                 &lt;br /&gt;
[[Fichier:Carte soudée entièrement.jpg|centré|vignette]]                                                                                                                                                 &lt;br /&gt;
==                                                                                                                                                   '''Premier Test de la carte''' ==&lt;br /&gt;
[[Fichier:Test.png|vignette|611x611px|résultat de la commande lsusb|néant]]Comme vous le voyez dessus, le microcontrôleur est détecté en utilisant la commande lsusb. Néanmoins, après avoir fini le code du mini-moteur dc, le microcontrôleur n'est plus détectable pour une raison inconnue.&lt;br /&gt;
&lt;br /&gt;
== Eclairage ==&lt;br /&gt;
[[Fichier:Clignotement des Leds.mp4|vignette|néant]]Les leds marchent bien ce qui nous a permi de passer à l'étape suivante ( souder le capteur et le coder )&lt;br /&gt;
&lt;br /&gt;
== Capteur ==&lt;br /&gt;
Le capteur marche bien, puisqu'il permet aux leds de s'allumer s'il détecte quelquechose, et s'éteignent sinon.[[Fichier:Fonctionnement capteur.mov|vignette|néant|Vidéo du fonctionnement du capteur]]&lt;br /&gt;
&lt;br /&gt;
==                                                                                    '''Moteurs''' ==&lt;br /&gt;
Nous avons soudé le pilote du mini-moteur dc, le mini-moteur DC et le micro-moteur glissière pas à pas.[[Fichier:Soudure.jpg|gauche|vignette|résultat final 1]]&lt;br /&gt;
[[Fichier:Photo.jpg|vignette|néant|505x505px|résultat final 2]]&lt;br /&gt;
&lt;br /&gt;
===== Vidéo du fonctionnement du mini-moteur dc =====&lt;br /&gt;
Comme indiqué, nous ne pouvions plus programmer le microprocesseur. Pour cela , nous avons testé notre code sur la carte du groupe 2 :&lt;br /&gt;
[[Fichier:Vidéo moteur dc.mov|vignette|Vidéo du fonctionnement du mini-moteur dc|néant]]Voici le code utilisé pour tester le moteur sur la carte du groupe 2, il ne reste qu'à changer les pins pour convenir à leur structure :&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;io.h&amp;quot;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define MAX_LED	4&lt;br /&gt;
&lt;br /&gt;
#define PORTB_OUTPUT	0x50&lt;br /&gt;
#define PORTC_OUTPUT	0x84&lt;br /&gt;
#define PORTD_OUTPUT	0x01&lt;br /&gt;
&lt;br /&gt;
unsigned char led1[] = {0x00, 0x80, 0x00}; // PC7&lt;br /&gt;
unsigned char led5[] = {0x40, 0x00, 0x00}; // PB6&lt;br /&gt;
unsigned char led6[] = {0x10, 0x00, 0x00}; // PB4&lt;br /&gt;
unsigned char led8[] = {0x00, 0x04, 0x00}; // PC2&lt;br /&gt;
unsigned char *leds[] = {led1, led5, led6, led8};&lt;br /&gt;
&lt;br /&gt;
unsigned char qre1113gr[] = {0x01, 0x00, 0x00}; // PD0&lt;br /&gt;
&lt;br /&gt;
#define PORTB_INPUT	0x00&lt;br /&gt;
#define PORTC_INPUT	0x00&lt;br /&gt;
#define PORTD_INPUT	0x00&lt;br /&gt;
&lt;br /&gt;
void control_motor(int enable) {&lt;br /&gt;
    // Set appropriate signals for motor control using DRV8210DRLR&lt;br /&gt;
    if (enable) {&lt;br /&gt;
        // Enable the motor in the desired direction (e.g., set appropriate motor pins high/low)&lt;br /&gt;
        PORTC |= (1 &amp;lt;&amp;lt; PC6);  // Set PC6 high&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    } else {&lt;br /&gt;
        // Disable the motor (e.g., set all motor pins low)&lt;br /&gt;
        PORTC &amp;amp;= ~(1 &amp;lt;&amp;lt; PC6); // Set PC6 low&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unsigned char input_get(unsigned char *pin) {&lt;br /&gt;
    unsigned char port_num = pin[0] &amp;gt;&amp;gt; 4;  // Extract the port number from the pin value&lt;br /&gt;
    unsigned char pin_num = pin[0] &amp;amp; 0x0F; // Extract the pin number from the pin value&lt;br /&gt;
&lt;br /&gt;
    switch (port_num) {&lt;br /&gt;
        case 0:  // PORTB&lt;br /&gt;
            return (PINB &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 1:  // PORTC&lt;br /&gt;
            return (PINC &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 2:  // PORTD&lt;br /&gt;
            return (PIND &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        default:&lt;br /&gt;
            return 0;  // Invalid port number&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
int main(void) {&lt;br /&gt;
    unsigned char imasks[] = {PORTB_INPUT, PORTC_INPUT, PORTD_INPUT};&lt;br /&gt;
    unsigned char pullup[] = {0x00, 0x00, 0x01};&lt;br /&gt;
    inputs_init(imasks, pullup);&lt;br /&gt;
    unsigned char omasks[] = {PORTB_OUTPUT, PORTC_OUTPUT, PORTD_OUTPUT};&lt;br /&gt;
    outputs_init(omasks);&lt;br /&gt;
 while (1) {&lt;br /&gt;
  control_motor(1);&lt;br /&gt;
  _delay_ms(300);&lt;br /&gt;
  control_motor(0);&lt;br /&gt;
  inputs_init(imasks, pullup);&lt;br /&gt;
 }&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Voici le code final en se basant sur les mêmes fonctions utilisées ci-dessus :&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;io.h&amp;quot;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define MAX_LED	4&lt;br /&gt;
&lt;br /&gt;
#define PORTB_OUTPUT	0x50&lt;br /&gt;
#define PORTC_OUTPUT	0x84&lt;br /&gt;
#define PORTD_OUTPUT	0x01&lt;br /&gt;
&lt;br /&gt;
unsigned char led1[] = {0x00, 0x80, 0x00}; // PC7&lt;br /&gt;
unsigned char led5[] = {0x40, 0x00, 0x00}; // PB6&lt;br /&gt;
unsigned char led6[] = {0x10, 0x00, 0x00}; // PB4&lt;br /&gt;
unsigned char led8[] = {0x00, 0x04, 0x00}; // PC2&lt;br /&gt;
unsigned char *leds[] = {led1, led5, led6, led8};&lt;br /&gt;
&lt;br /&gt;
unsigned char qre1113gr[] = {0x01, 0x00, 0x00}; // PD0&lt;br /&gt;
&lt;br /&gt;
#define PORTB_INPUT	0x00&lt;br /&gt;
#define PORTC_INPUT	0x00&lt;br /&gt;
#define PORTD_INPUT	0x00&lt;br /&gt;
&lt;br /&gt;
void control_motor(int enable) {&lt;br /&gt;
    // Set appropriate signals for motor control using DRV8210DRLR&lt;br /&gt;
    if (enable) {&lt;br /&gt;
        // Enable the motor in the desired direction (e.g., set appropriate motor pins high/low)&lt;br /&gt;
        PORTC |= (1 &amp;lt;&amp;lt; PC6);  // Set PC6 high&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    } else {&lt;br /&gt;
        // Disable the motor (e.g., set all motor pins low)&lt;br /&gt;
        PORTC &amp;amp;= ~(1 &amp;lt;&amp;lt; PC6); // Set PC6 low&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
// The motor here is running anti clock-wise&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unsigned char input_get(unsigned char *pin) {&lt;br /&gt;
    unsigned char port_num = pin[0] &amp;gt;&amp;gt; 4;  // Extract the port number from the pin value&lt;br /&gt;
    unsigned char pin_num = pin[0] &amp;amp; 0x0F; // Extract the pin number from the pin value&lt;br /&gt;
&lt;br /&gt;
    switch (port_num) {&lt;br /&gt;
        case 0:  // PORTB&lt;br /&gt;
            return (PINB &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 1:  // PORTC&lt;br /&gt;
            return (PINC &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 2:  // PORTD&lt;br /&gt;
            return (PIND &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        default:&lt;br /&gt;
            return 0;  // Invalid port number&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void) {&lt;br /&gt;
    unsigned char imasks[] = {PORTB_INPUT, PORTC_INPUT, PORTD_INPUT};&lt;br /&gt;
    unsigned char pullup[] = {0x00, 0x00, 0x01};&lt;br /&gt;
    inputs_init(imasks, pullup);&lt;br /&gt;
    unsigned char omasks[] = {PORTB_OUTPUT, PORTC_OUTPUT, PORTD_OUTPUT};&lt;br /&gt;
    outputs_init(omasks);&lt;br /&gt;
&lt;br /&gt;
    while (1) {&lt;br /&gt;
        // Get the value read by the sensor&lt;br /&gt;
        unsigned char qre_value = input_get(qre1113gr);&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
        if (qre_value &amp;gt; 0) {&lt;br /&gt;
               // Infra-red light detected, set everything on&lt;br /&gt;
            output_set(leds, 0);&lt;br /&gt;
            output_set(leds, 1);&lt;br /&gt;
            output_set(leds, 2);&lt;br /&gt;
            output_set(leds, 3);&lt;br /&gt;
            control_motor(1);&lt;br /&gt;
            &lt;br /&gt;
        } else {&lt;br /&gt;
            // Nothing detected, set everything off&lt;br /&gt;
            output_unset(leds, 0);&lt;br /&gt;
            output_unset(leds, 1);&lt;br /&gt;
            output_unset(leds, 2);&lt;br /&gt;
            output_unset(leds, 3);&lt;br /&gt;
            control_motor(0);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
        inputs_init(imasks, pullup); // reset the values&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
Nous avons appris beaucoup de nouvelles compétences, notamment la conception et le routage d'une schématique, la soudure des composants et la manipulation d'un capteur.&lt;br /&gt;
&lt;br /&gt;
Nous aurions pu avancer sur la partie LUFA et micro-moteur glissière pas à pas si nous n'avons pas eu le problème de détection du microcontrôleur. La batterie aussi reste à faire.&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1190</id>
		<title>SE3Binome2022-5</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1190"/>
		<updated>2023-06-04T15:47:51Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : /* Vidéo en fonctionnement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==                                                                       '''&amp;lt;big&amp;gt;Présentation du projet&amp;lt;/big&amp;gt;''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Objectif&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
Concevoir un modèle de voiture 1:43 équipée d'un microcontrôleur ATMega16u2 permettant de commander la voiture en se basant sur un programme. Nous avons choisi de rajouter une option de suivi d'une ligne droite, ceci se fera à l'aide d'un capteur QRE1113gr.&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Composants&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
les composants à utiliser dans notre projet sont les suivants :&lt;br /&gt;
&lt;br /&gt;
* Un microcontrôleur ATMega16u2&lt;br /&gt;
* Un capteur QRE1113gr&lt;br /&gt;
* Un mini-moteur à courant continu&lt;br /&gt;
* Un pilote du mini-moteur à courant continu (DRV8210DRLR)&lt;br /&gt;
* Un micro-moteur glissière pas à pas &lt;br /&gt;
* Une batterie LiPo&lt;br /&gt;
* Une puce de contrôle de charge de la batterie (MAX1811)&lt;br /&gt;
* Des leds pour simuler le système d'éclairage&lt;br /&gt;
* Des résistances&lt;br /&gt;
* Des capacités&lt;br /&gt;
* Un quartz&lt;br /&gt;
* Un port USB&lt;br /&gt;
*Des diodes&lt;br /&gt;
*Un AVR-ISP 6&lt;br /&gt;
*Des connecteurs&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Caractéristiques et limites de notre système&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
==== caractéristiques ====&lt;br /&gt;
Pour comprendre le fonctionnement de suivi de ligne souhaité, il faut d'abord comprendre le fonctionnement du capteur QRE. C'est un capteur de réflexion infrarouge, il est utilisé pour détecter la présence ou l'absence d'objets réfléchissants à proximité. Il se compose d'une LED infrarouge émettant de la lumière infrarouge et d'un phototransistor qui mesure la quantité de lumière réfléchie. Lorsqu'un objet se trouve devant le capteur, il réfléchit la lumière infrarouge émise par la LED vers le phototransistor. Le phototransistor détecte cette lumière réfléchie et génère un courant proportionnel à son intensité. La valeur mesurée par le capteur dépend de la quantité de lumière infrarouge réfléchie par l'objet. Si l'objet est réfléchissant et renvoie une grande quantité de lumière infrarouge, le phototransistor générera un courant plus élevé, ce qui se traduira par une valeur positive lorsqu'elle est lue par le microcontrôleur. En revanche, si aucun objet réfléchissant n'est présent devant le capteur, la quantité de lumière infrarouge réfléchie sera faible. Par conséquent, le phototransistor générera un courant plus faible ou nul, ce qui se traduira par une valeur de capteur égale à zéro lorsqu'elle est lue par le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
==== Limites ====&lt;br /&gt;
Les composants cités ci-dessus étaient soudés et utilisés dans notre carte, sauf la batterie et sa puce de contrôle, les diodes, l'AVR-ISP et quelques capacités de filtrage de bruit ainsi que les connecteurs.&lt;br /&gt;
&lt;br /&gt;
Pour réinitialiser le microprocesseur afin de mettre un nouveau code, il faut à chaque fois utiliser un fil entre la masse et la broche de reset du AVR-ISP. Le rajout d'un bouton aurait était mieux.&lt;br /&gt;
&lt;br /&gt;
Lors du routage de la carte, nous n'avons pas fait attention que le capteur doit être placé en bas, afin de détecter la ligne. &lt;br /&gt;
&lt;br /&gt;
Après avoir fini le code pour tester le mini-moteur dc, nous nous rendons compte que le microprocessur n'est plus détectable en utilisant la commande lsusb. Nous avons vérifié les connections, essayé de changer le port usb mais sans résultat (pourtant que les leds et le capteur marchait bien). Nous avons alors tester le code sur la carte du groupe 2 en ajustant un peu la structure et en supprimant les parties correspondantes au capteur. &lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Avancement du projet&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
==== le 14/02 : ====&lt;br /&gt;
- Compréhension de l'idée directrice du projet &lt;br /&gt;
&lt;br /&gt;
- Recherche de l'option à rajouter&lt;br /&gt;
&lt;br /&gt;
==== le 28/02 : ====&lt;br /&gt;
- Début de conception de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 21/03 : ====&lt;br /&gt;
- début du rajout des empreintes des composants&lt;br /&gt;
&lt;br /&gt;
==== le 07/04 : ====&lt;br /&gt;
- Fin de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 13/04 : ====&lt;br /&gt;
- Fin du routage de la carte&lt;br /&gt;
&lt;br /&gt;
- Envoi du modèle aux enseignants pour le valider et commander la carte&lt;br /&gt;
&lt;br /&gt;
==== le 02/05: ====&lt;br /&gt;
- Réception de la carte &lt;br /&gt;
&lt;br /&gt;
- Soudure de quelques résistances et capacités&lt;br /&gt;
&lt;br /&gt;
==== le 09/05: ====&lt;br /&gt;
- Les composants suivants sont déjà soudés par l'enseignant : ATMega16u2, le quartz&lt;br /&gt;
&lt;br /&gt;
- Rajout des leds et des résistances restantes&lt;br /&gt;
&lt;br /&gt;
- Début du code pour tester les leds&lt;br /&gt;
&lt;br /&gt;
==== le 16/05: ====&lt;br /&gt;
- Fin du code pour tester les leds&lt;br /&gt;
&lt;br /&gt;
- Réorganisation de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 23/05: ====&lt;br /&gt;
- Soudure du capteur&lt;br /&gt;
&lt;br /&gt;
- Implémentation du code pour tester le capteur&lt;br /&gt;
&lt;br /&gt;
- Soudure du mini-moteur dc &lt;br /&gt;
&lt;br /&gt;
==== le 29/05: ====&lt;br /&gt;
- Soudure du micro-moteur pas à pas &lt;br /&gt;
&lt;br /&gt;
- Implémentation du code pour tester le mini-moteur dc&lt;br /&gt;
&lt;br /&gt;
==== le 03/06: ====&lt;br /&gt;
- Teste du code de moteur sur la carte du groupe 2&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GIT&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
le lien de notre archive GIT : https://archives.plil.fr/yelqasta/pse-g5.git&lt;br /&gt;
&lt;br /&gt;
== '''Conception de la carte électronique''' ==&lt;br /&gt;
&lt;br /&gt;
=== Composants et empreintes créés ===&lt;br /&gt;
nous avons créer le symbole du pilote du moteur DC via Kicad :&lt;br /&gt;
[[Fichier:Driver.png|vignette|250x250px|centré|Symbole du pilote DRV8210DRLR]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir mesurer les dimensions du mini-moteur continu on a pu créer l'empreinte suivante : &lt;br /&gt;
[[Fichier:Dc moteur.png|centré|vignette|Empreinte du mini-moteur dc]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''schéma''' &lt;br /&gt;
&lt;br /&gt;
Réalisation du schématique du PCB sur le logiciel KiCad : [[Fichier:Schématique de la carte.png|centré|vignette|439x439px|schématique]]lors de la phase de soudure, l'enseignant nous a mentionné que le schéma du capteur n'est pas bon. Nous avons pu corriger le problème avec l'aide de l'enseignant en se basant sur le schéma suivant : https://cdn.sparkfun.com/datasheets/Sensors/Proximity/QRE1113-Digital-Breakout-v11.pdf &lt;br /&gt;
&lt;br /&gt;
=== '''Visual 3D''' ===&lt;br /&gt;
[[Fichier:Voiture 3D.png|vignette|502x502px|visualisation 3D de la carte |centré]]&lt;br /&gt;
&lt;br /&gt;
=== '''Routage de la carte''' ===&lt;br /&gt;
[[Fichier:Routage de la carte .png|centré|vignette|670x670px|carte routée]]&lt;br /&gt;
&lt;br /&gt;
=== '''Carte imprimée''' ===&lt;br /&gt;
la carte imprimée et soudure du capteur, leds, résistances et microcontrôleur ATMega16U2 :                                                                                                                                                 &lt;br /&gt;
[[Fichier:Carte soudée entièrement.jpg|centré|vignette]]                                                                                                                                                 &lt;br /&gt;
==                                                                                                                                                   '''Premier Test de la carte''' ==&lt;br /&gt;
[[Fichier:Test.png|vignette|611x611px|résultat de la commande lsusb|néant]]Comme vous le voyez dessus, le microcontrôleur est détecté en utilisant la commande lsusb. Néanmoins, après avoir fini le code du mini-moteur dc, le microcontrôleur n'est plus détectable pour une raison inconnue.&lt;br /&gt;
&lt;br /&gt;
==                                                                                       '''Programme''' ==&lt;br /&gt;
&lt;br /&gt;
=== Eclairage ===&lt;br /&gt;
[[Fichier:Clignotement des Leds.mp4|vignette|néant]]Les leds marchent bien ce qui nous a permi de passer à l'étape suivante ( souder le capteur et le coder )&lt;br /&gt;
&lt;br /&gt;
=== Capteur ===&lt;br /&gt;
Le capteur marche bien, puisqu'il permet aux leds de s'allumer s'il détecte quelquechose.[[Fichier:Fonctionnement capteur.mov|vignette|néant|Vidéo du fonctionnement du capteur]]&lt;br /&gt;
&lt;br /&gt;
==                                                                                    '''Soudure des moteurs''' ==&lt;br /&gt;
Nous avons soudé le pilote du mini-moteur dc, le mini-moteur DC et le micro-moteur glissière pas à pas.[[Fichier:Soudure.jpg|gauche|vignette|résultat final 1]]&lt;br /&gt;
[[Fichier:Photo.jpg|vignette|néant|505x505px|résultat final 2]]&lt;br /&gt;
&lt;br /&gt;
===== Vidéo du fonctionnement du mini-moteur dc =====&lt;br /&gt;
Comme indiqué, nous ne pouvions plus programmer le microprocesseur. Pour cela , nous avons testé notre code sur la carte du groupe 2 :&lt;br /&gt;
[[Fichier:Vidéo moteur dc.mov|vignette|Vidéo du fonctionnement du mini-moteur dc|néant]]Voici le code utilisé pour tester le moteur sur la carte du groupe 2, il ne reste qu'à changer les pins pour convenir à leur structure :&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;io.h&amp;quot;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define MAX_LED	4&lt;br /&gt;
&lt;br /&gt;
#define PORTB_OUTPUT	0x50&lt;br /&gt;
#define PORTC_OUTPUT	0x84&lt;br /&gt;
#define PORTD_OUTPUT	0x01&lt;br /&gt;
&lt;br /&gt;
unsigned char led1[] = {0x00, 0x80, 0x00}; // PC7&lt;br /&gt;
unsigned char led5[] = {0x40, 0x00, 0x00}; // PB6&lt;br /&gt;
unsigned char led6[] = {0x10, 0x00, 0x00}; // PB4&lt;br /&gt;
unsigned char led8[] = {0x00, 0x04, 0x00}; // PC2&lt;br /&gt;
unsigned char *leds[] = {led1, led5, led6, led8};&lt;br /&gt;
&lt;br /&gt;
unsigned char qre1113gr[] = {0x01, 0x00, 0x00}; // PD0&lt;br /&gt;
&lt;br /&gt;
#define PORTB_INPUT	0x00&lt;br /&gt;
#define PORTC_INPUT	0x00&lt;br /&gt;
#define PORTD_INPUT	0x00&lt;br /&gt;
&lt;br /&gt;
void control_motor(int enable) {&lt;br /&gt;
    // Set appropriate signals for motor control using DRV8210DRLR&lt;br /&gt;
    if (enable) {&lt;br /&gt;
        // Enable the motor in the desired direction (e.g., set appropriate motor pins high/low)&lt;br /&gt;
        PORTC |= (1 &amp;lt;&amp;lt; PC6);  // Set PC6 high&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    } else {&lt;br /&gt;
        // Disable the motor (e.g., set all motor pins low)&lt;br /&gt;
        PORTC &amp;amp;= ~(1 &amp;lt;&amp;lt; PC6); // Set PC6 low&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unsigned char input_get(unsigned char *pin) {&lt;br /&gt;
    unsigned char port_num = pin[0] &amp;gt;&amp;gt; 4;  // Extract the port number from the pin value&lt;br /&gt;
    unsigned char pin_num = pin[0] &amp;amp; 0x0F; // Extract the pin number from the pin value&lt;br /&gt;
&lt;br /&gt;
    switch (port_num) {&lt;br /&gt;
        case 0:  // PORTB&lt;br /&gt;
            return (PINB &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 1:  // PORTC&lt;br /&gt;
            return (PINC &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 2:  // PORTD&lt;br /&gt;
            return (PIND &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        default:&lt;br /&gt;
            return 0;  // Invalid port number&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
int main(void) {&lt;br /&gt;
    unsigned char imasks[] = {PORTB_INPUT, PORTC_INPUT, PORTD_INPUT};&lt;br /&gt;
    unsigned char pullup[] = {0x00, 0x00, 0x01};&lt;br /&gt;
    inputs_init(imasks, pullup);&lt;br /&gt;
    unsigned char omasks[] = {PORTB_OUTPUT, PORTC_OUTPUT, PORTD_OUTPUT};&lt;br /&gt;
    outputs_init(omasks);&lt;br /&gt;
 while (1) {&lt;br /&gt;
  control_motor(1);&lt;br /&gt;
  _delay_ms(300);&lt;br /&gt;
  control_motor(0);&lt;br /&gt;
  inputs_init(imasks, pullup);&lt;br /&gt;
 }&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Voici le code final en se basant sur les mêmes fonctions utilisées ci-dessus :&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;io.h&amp;quot;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define MAX_LED	4&lt;br /&gt;
&lt;br /&gt;
#define PORTB_OUTPUT	0x50&lt;br /&gt;
#define PORTC_OUTPUT	0x84&lt;br /&gt;
#define PORTD_OUTPUT	0x01&lt;br /&gt;
&lt;br /&gt;
unsigned char led1[] = {0x00, 0x80, 0x00}; // PC7&lt;br /&gt;
unsigned char led5[] = {0x40, 0x00, 0x00}; // PB6&lt;br /&gt;
unsigned char led6[] = {0x10, 0x00, 0x00}; // PB4&lt;br /&gt;
unsigned char led8[] = {0x00, 0x04, 0x00}; // PC2&lt;br /&gt;
unsigned char *leds[] = {led1, led5, led6, led8};&lt;br /&gt;
&lt;br /&gt;
unsigned char qre1113gr[] = {0x01, 0x00, 0x00}; // PD0&lt;br /&gt;
&lt;br /&gt;
#define PORTB_INPUT	0x00&lt;br /&gt;
#define PORTC_INPUT	0x00&lt;br /&gt;
#define PORTD_INPUT	0x00&lt;br /&gt;
&lt;br /&gt;
void control_motor(int enable) {&lt;br /&gt;
    // Set appropriate signals for motor control using DRV8210DRLR&lt;br /&gt;
    if (enable) {&lt;br /&gt;
        // Enable the motor in the desired direction (e.g., set appropriate motor pins high/low)&lt;br /&gt;
        PORTC |= (1 &amp;lt;&amp;lt; PC6);  // Set PC6 high&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    } else {&lt;br /&gt;
        // Disable the motor (e.g., set all motor pins low)&lt;br /&gt;
        PORTC &amp;amp;= ~(1 &amp;lt;&amp;lt; PC6); // Set PC6 low&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
// The motor here is running anti clock-wise&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unsigned char input_get(unsigned char *pin) {&lt;br /&gt;
    unsigned char port_num = pin[0] &amp;gt;&amp;gt; 4;  // Extract the port number from the pin value&lt;br /&gt;
    unsigned char pin_num = pin[0] &amp;amp; 0x0F; // Extract the pin number from the pin value&lt;br /&gt;
&lt;br /&gt;
    switch (port_num) {&lt;br /&gt;
        case 0:  // PORTB&lt;br /&gt;
            return (PINB &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 1:  // PORTC&lt;br /&gt;
            return (PINC &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 2:  // PORTD&lt;br /&gt;
            return (PIND &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        default:&lt;br /&gt;
            return 0;  // Invalid port number&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void) {&lt;br /&gt;
    unsigned char imasks[] = {PORTB_INPUT, PORTC_INPUT, PORTD_INPUT};&lt;br /&gt;
    unsigned char pullup[] = {0x00, 0x00, 0x01};&lt;br /&gt;
    inputs_init(imasks, pullup);&lt;br /&gt;
    unsigned char omasks[] = {PORTB_OUTPUT, PORTC_OUTPUT, PORTD_OUTPUT};&lt;br /&gt;
    outputs_init(omasks);&lt;br /&gt;
&lt;br /&gt;
    while (1) {&lt;br /&gt;
        // Get the value read by the sensor&lt;br /&gt;
        unsigned char qre_value = input_get(qre1113gr);&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
        if (qre_value &amp;gt; 0) {&lt;br /&gt;
               // Infra-red light detected, set everything on&lt;br /&gt;
            output_set(leds, 0);&lt;br /&gt;
            output_set(leds, 1);&lt;br /&gt;
            output_set(leds, 2);&lt;br /&gt;
            output_set(leds, 3);&lt;br /&gt;
            control_motor(1);&lt;br /&gt;
            &lt;br /&gt;
        } else {&lt;br /&gt;
            // Nothing detected, set everything off&lt;br /&gt;
            output_unset(leds, 0);&lt;br /&gt;
            output_unset(leds, 1);&lt;br /&gt;
            output_unset(leds, 2);&lt;br /&gt;
            output_unset(leds, 3);&lt;br /&gt;
            control_motor(0);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
        inputs_init(imasks, pullup); // reset the values&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1189</id>
		<title>SE3Binome2022-5</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1189"/>
		<updated>2023-06-04T15:33:05Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : /* Vidéo en fonctionnement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==                                                                       '''&amp;lt;big&amp;gt;Présentation du projet&amp;lt;/big&amp;gt;''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Objectif&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
Concevoir un modèle de voiture 1:43 équipée d'un microcontrôleur ATMega16u2 permettant de commander la voiture en se basant sur un programme. Nous avons choisi de rajouter une option de suivi d'une ligne droite, ceci se fera à l'aide d'un capteur QRE1113gr.&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Composants&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
les composants à utiliser dans notre projet sont les suivants :&lt;br /&gt;
&lt;br /&gt;
* Un microcontrôleur ATMega16u2&lt;br /&gt;
* Un capteur QRE1113gr&lt;br /&gt;
* Un mini-moteur à courant continu&lt;br /&gt;
* Un pilote du mini-moteur à courant continu (DRV8210DRLR)&lt;br /&gt;
* Un micro-moteur glissière pas à pas &lt;br /&gt;
* Une batterie LiPo&lt;br /&gt;
* Une puce de contrôle de charge de la batterie (MAX1811)&lt;br /&gt;
* Des leds pour simuler le système d'éclairage&lt;br /&gt;
* Des résistances&lt;br /&gt;
* Des capacités&lt;br /&gt;
* Un quartz&lt;br /&gt;
* Un port USB&lt;br /&gt;
*Des diodes&lt;br /&gt;
*Un AVR-ISP 6&lt;br /&gt;
*Des connecteurs&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Caractéristiques et limites de notre système&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
==== caractéristiques ====&lt;br /&gt;
Pour comprendre le fonctionnement de suivi de ligne souhaité, il faut d'abord comprendre le fonctionnement du capteur QRE. C'est un capteur de réflexion infrarouge, il est utilisé pour détecter la présence ou l'absence d'objets réfléchissants à proximité. Il se compose d'une LED infrarouge émettant de la lumière infrarouge et d'un phototransistor qui mesure la quantité de lumière réfléchie. Lorsqu'un objet se trouve devant le capteur, il réfléchit la lumière infrarouge émise par la LED vers le phototransistor. Le phototransistor détecte cette lumière réfléchie et génère un courant proportionnel à son intensité. La valeur mesurée par le capteur dépend de la quantité de lumière infrarouge réfléchie par l'objet. Si l'objet est réfléchissant et renvoie une grande quantité de lumière infrarouge, le phototransistor générera un courant plus élevé, ce qui se traduira par une valeur positive lorsqu'elle est lue par le microcontrôleur. En revanche, si aucun objet réfléchissant n'est présent devant le capteur, la quantité de lumière infrarouge réfléchie sera faible. Par conséquent, le phototransistor générera un courant plus faible ou nul, ce qui se traduira par une valeur de capteur égale à zéro lorsqu'elle est lue par le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
==== Limites ====&lt;br /&gt;
Les composants cités ci-dessus étaient soudés et utilisés dans notre carte, sauf la batterie et sa puce de contrôle, les diodes, l'AVR-ISP et quelques capacités de filtrage de bruit ainsi que les connecteurs.&lt;br /&gt;
&lt;br /&gt;
Pour réinitialiser le microprocesseur afin de mettre un nouveau code, il faut à chaque fois utiliser un fil entre la masse et la broche de reset du AVR-ISP. Le rajout d'un bouton aurait était mieux.&lt;br /&gt;
&lt;br /&gt;
Lors du routage de la carte, nous n'avons pas fait attention que le capteur doit être placé en bas, afin de détecter la ligne. &lt;br /&gt;
&lt;br /&gt;
Après avoir fini le code pour tester le mini-moteur dc, nous nous rendons compte que le microprocessur n'est plus détectable en utilisant la commande lsusb. Nous avons vérifié les connections, essayé de changer le port usb mais sans résultat (pourtant que les leds et le capteur marchait bien). Nous avons alors tester le code sur la carte du groupe 2 en ajustant un peu la structure et en supprimant les parties correspondantes au capteur. &lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Avancement du projet&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
==== le 14/02 : ====&lt;br /&gt;
- Compréhension de l'idée directrice du projet &lt;br /&gt;
&lt;br /&gt;
- Recherche de l'option à rajouter&lt;br /&gt;
&lt;br /&gt;
==== le 28/02 : ====&lt;br /&gt;
- Début de conception de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 21/03 : ====&lt;br /&gt;
- début du rajout des empreintes des composants&lt;br /&gt;
&lt;br /&gt;
==== le 07/04 : ====&lt;br /&gt;
- Fin de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 13/04 : ====&lt;br /&gt;
- Fin du routage de la carte&lt;br /&gt;
&lt;br /&gt;
- Envoi du modèle aux enseignants pour le valider et commander la carte&lt;br /&gt;
&lt;br /&gt;
==== le 02/05: ====&lt;br /&gt;
- Réception de la carte &lt;br /&gt;
&lt;br /&gt;
- Soudure de quelques résistances et capacités&lt;br /&gt;
&lt;br /&gt;
==== le 09/05: ====&lt;br /&gt;
- Les composants suivants sont déjà soudés par l'enseignant : ATMega16u2, le quartz&lt;br /&gt;
&lt;br /&gt;
- Rajout des leds et des résistances restantes&lt;br /&gt;
&lt;br /&gt;
- Début du code pour tester les leds&lt;br /&gt;
&lt;br /&gt;
==== le 16/05: ====&lt;br /&gt;
- Fin du code pour tester les leds&lt;br /&gt;
&lt;br /&gt;
- Réorganisation de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 23/05: ====&lt;br /&gt;
- Soudure du capteur&lt;br /&gt;
&lt;br /&gt;
- Implémentation du code pour tester le capteur&lt;br /&gt;
&lt;br /&gt;
- Soudure du mini-moteur dc &lt;br /&gt;
&lt;br /&gt;
==== le 29/05: ====&lt;br /&gt;
- Soudure du micro-moteur pas à pas &lt;br /&gt;
&lt;br /&gt;
- Implémentation du code pour tester le mini-moteur dc&lt;br /&gt;
&lt;br /&gt;
==== le 03/06: ====&lt;br /&gt;
- Teste du code de moteur sur la carte du groupe 2&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GIT&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
le lien de notre archive GIT : https://archives.plil.fr/yelqasta/pse-g5.git&lt;br /&gt;
&lt;br /&gt;
== '''Conception de la carte électronique''' ==&lt;br /&gt;
&lt;br /&gt;
=== Composants et empreintes créés ===&lt;br /&gt;
nous avons créer le symbole du pilote du moteur DC via Kicad :&lt;br /&gt;
[[Fichier:Driver.png|vignette|250x250px|centré|Symbole du pilote DRV8210DRLR]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir mesurer les dimensions du mini-moteur continu on a pu créer l'empreinte suivante : &lt;br /&gt;
[[Fichier:Dc moteur.png|centré|vignette|Empreinte du mini-moteur dc]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''schéma''' &lt;br /&gt;
&lt;br /&gt;
Réalisation du schématique du PCB sur le logiciel KiCad : [[Fichier:Schématique de la carte.png|centré|vignette|439x439px|schématique]]lors de la phase de soudure, l'enseignant nous a mentionné que le schéma du capteur n'est pas bon. Nous avons pu corriger le problème avec l'aide de l'enseignant en se basant sur le schéma suivant : https://cdn.sparkfun.com/datasheets/Sensors/Proximity/QRE1113-Digital-Breakout-v11.pdf &lt;br /&gt;
&lt;br /&gt;
=== '''Visual 3D''' ===&lt;br /&gt;
[[Fichier:Voiture 3D.png|vignette|502x502px|visualisation 3D de la carte |centré]]&lt;br /&gt;
&lt;br /&gt;
=== '''Routage de la carte''' ===&lt;br /&gt;
[[Fichier:Routage de la carte .png|centré|vignette|670x670px|carte routée]]&lt;br /&gt;
&lt;br /&gt;
=== '''Carte imprimée''' ===&lt;br /&gt;
la carte imprimée et soudure du capteur, leds, résistances et microcontrôleur ATMega16U2 :                                                                                                                                                 &lt;br /&gt;
[[Fichier:Carte soudée entièrement.jpg|centré|vignette]]                                                                                                                                                 &lt;br /&gt;
==                                                                                                                                                   '''Premier Test de la carte''' ==&lt;br /&gt;
[[Fichier:Test.png|centré|vignette|611x611px|résultat de la commande lsusb]]&lt;br /&gt;
&lt;br /&gt;
==                                                                                       '''Programme''' ==&lt;br /&gt;
&lt;br /&gt;
=== Code de clignotement des Leds ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Vidéo en fonctionnement ====&lt;br /&gt;
[[Fichier:Clignotement des Leds.mp4|centré|vignette]]&lt;br /&gt;
&lt;br /&gt;
=== '''Code du suiveur QRE1113GR''' ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Fonctionnement capteur.mov|vignette]]&lt;br /&gt;
&lt;br /&gt;
==== Vidéo en fonctionnement ====&lt;br /&gt;
&lt;br /&gt;
==                                                                                    '''Soudure des moteurs''' ==&lt;br /&gt;
Nous avons soudé le pilote du mini-moteur dc, le mini-moteur DC et le micro-moteur glissière pas à pas.[[Fichier:Soudure.jpg|gauche|vignette|résultat final 1]]&lt;br /&gt;
[[Fichier:Photo.jpg|vignette|néant|505x505px|résultat final 2]]&lt;br /&gt;
&lt;br /&gt;
===== Vidéo du fonctionnement du mini-moteur dc =====&lt;br /&gt;
Comme indiqué, nous ne pouvions plus programmer le microprocesseur. Pour cela , nous avons testé notre code sur la carte du groupe 2 :&lt;br /&gt;
[[Fichier:Vidéo moteur dc.mov|vignette|Vidéo du fonctionnement du mini-moteur dc|néant]]Voici le code utilisé pour tester le moteur sur la carte du groupe 2, il ne reste qu'à changer les pins pour convenir à leur structure :&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;io.h&amp;quot;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define MAX_LED	4&lt;br /&gt;
&lt;br /&gt;
#define PORTB_OUTPUT	0x50&lt;br /&gt;
#define PORTC_OUTPUT	0x84&lt;br /&gt;
#define PORTD_OUTPUT	0x01&lt;br /&gt;
&lt;br /&gt;
unsigned char led1[] = {0x00, 0x80, 0x00}; // PC7&lt;br /&gt;
unsigned char led5[] = {0x40, 0x00, 0x00}; // PB6&lt;br /&gt;
unsigned char led6[] = {0x10, 0x00, 0x00}; // PB4&lt;br /&gt;
unsigned char led8[] = {0x00, 0x04, 0x00}; // PC2&lt;br /&gt;
unsigned char *leds[] = {led1, led5, led6, led8};&lt;br /&gt;
&lt;br /&gt;
unsigned char qre1113gr[] = {0x01, 0x00, 0x00}; // PD0&lt;br /&gt;
&lt;br /&gt;
#define PORTB_INPUT	0x00&lt;br /&gt;
#define PORTC_INPUT	0x00&lt;br /&gt;
#define PORTD_INPUT	0x00&lt;br /&gt;
&lt;br /&gt;
void control_motor(int enable) {&lt;br /&gt;
    // Set appropriate signals for motor control using DRV8210DRLR&lt;br /&gt;
    if (enable) {&lt;br /&gt;
        // Enable the motor in the desired direction (e.g., set appropriate motor pins high/low)&lt;br /&gt;
        PORTC |= (1 &amp;lt;&amp;lt; PC6);  // Set PC6 high&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    } else {&lt;br /&gt;
        // Disable the motor (e.g., set all motor pins low)&lt;br /&gt;
        PORTC &amp;amp;= ~(1 &amp;lt;&amp;lt; PC6); // Set PC6 low&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unsigned char input_get(unsigned char *pin) {&lt;br /&gt;
    unsigned char port_num = pin[0] &amp;gt;&amp;gt; 4;  // Extract the port number from the pin value&lt;br /&gt;
    unsigned char pin_num = pin[0] &amp;amp; 0x0F; // Extract the pin number from the pin value&lt;br /&gt;
&lt;br /&gt;
    switch (port_num) {&lt;br /&gt;
        case 0:  // PORTB&lt;br /&gt;
            return (PINB &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 1:  // PORTC&lt;br /&gt;
            return (PINC &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 2:  // PORTD&lt;br /&gt;
            return (PIND &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        default:&lt;br /&gt;
            return 0;  // Invalid port number&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
int main(void) {&lt;br /&gt;
    unsigned char imasks[] = {PORTB_INPUT, PORTC_INPUT, PORTD_INPUT};&lt;br /&gt;
    unsigned char pullup[] = {0x00, 0x00, 0x01};&lt;br /&gt;
    inputs_init(imasks, pullup);&lt;br /&gt;
    unsigned char omasks[] = {PORTB_OUTPUT, PORTC_OUTPUT, PORTD_OUTPUT};&lt;br /&gt;
    outputs_init(omasks);&lt;br /&gt;
 while (1) {&lt;br /&gt;
  control_motor(1);&lt;br /&gt;
  _delay_ms(300);&lt;br /&gt;
  control_motor(0);&lt;br /&gt;
  inputs_init(imasks, pullup);&lt;br /&gt;
 }&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Voici le code final en se basant sur les mêmes fonctions utilisées ci-dessus :&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;io.h&amp;quot;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define MAX_LED	4&lt;br /&gt;
&lt;br /&gt;
#define PORTB_OUTPUT	0x50&lt;br /&gt;
#define PORTC_OUTPUT	0x84&lt;br /&gt;
#define PORTD_OUTPUT	0x01&lt;br /&gt;
&lt;br /&gt;
unsigned char led1[] = {0x00, 0x80, 0x00}; // PC7&lt;br /&gt;
unsigned char led5[] = {0x40, 0x00, 0x00}; // PB6&lt;br /&gt;
unsigned char led6[] = {0x10, 0x00, 0x00}; // PB4&lt;br /&gt;
unsigned char led8[] = {0x00, 0x04, 0x00}; // PC2&lt;br /&gt;
unsigned char *leds[] = {led1, led5, led6, led8};&lt;br /&gt;
&lt;br /&gt;
unsigned char qre1113gr[] = {0x01, 0x00, 0x00}; // PD0&lt;br /&gt;
&lt;br /&gt;
#define PORTB_INPUT	0x00&lt;br /&gt;
#define PORTC_INPUT	0x00&lt;br /&gt;
#define PORTD_INPUT	0x00&lt;br /&gt;
&lt;br /&gt;
void control_motor(int enable) {&lt;br /&gt;
    // Set appropriate signals for motor control using DRV8210DRLR&lt;br /&gt;
    if (enable) {&lt;br /&gt;
        // Enable the motor in the desired direction (e.g., set appropriate motor pins high/low)&lt;br /&gt;
        PORTC |= (1 &amp;lt;&amp;lt; PC6);  // Set PC6 high&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    } else {&lt;br /&gt;
        // Disable the motor (e.g., set all motor pins low)&lt;br /&gt;
        PORTC &amp;amp;= ~(1 &amp;lt;&amp;lt; PC6); // Set PC6 low&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
// The motor here is running anti clock-wise&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unsigned char input_get(unsigned char *pin) {&lt;br /&gt;
    unsigned char port_num = pin[0] &amp;gt;&amp;gt; 4;  // Extract the port number from the pin value&lt;br /&gt;
    unsigned char pin_num = pin[0] &amp;amp; 0x0F; // Extract the pin number from the pin value&lt;br /&gt;
&lt;br /&gt;
    switch (port_num) {&lt;br /&gt;
        case 0:  // PORTB&lt;br /&gt;
            return (PINB &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 1:  // PORTC&lt;br /&gt;
            return (PINC &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 2:  // PORTD&lt;br /&gt;
            return (PIND &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        default:&lt;br /&gt;
            return 0;  // Invalid port number&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void) {&lt;br /&gt;
    unsigned char imasks[] = {PORTB_INPUT, PORTC_INPUT, PORTD_INPUT};&lt;br /&gt;
    unsigned char pullup[] = {0x00, 0x00, 0x01};&lt;br /&gt;
    inputs_init(imasks, pullup);&lt;br /&gt;
    unsigned char omasks[] = {PORTB_OUTPUT, PORTC_OUTPUT, PORTD_OUTPUT};&lt;br /&gt;
    outputs_init(omasks);&lt;br /&gt;
&lt;br /&gt;
    while (1) {&lt;br /&gt;
        // Get the value read by the sensor&lt;br /&gt;
        unsigned char qre_value = input_get(qre1113gr);&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
        if (qre_value &amp;gt; 0) {&lt;br /&gt;
               // Infra-red light detected, set everything on&lt;br /&gt;
            output_set(leds, 0);&lt;br /&gt;
            output_set(leds, 1);&lt;br /&gt;
            output_set(leds, 2);&lt;br /&gt;
            output_set(leds, 3);&lt;br /&gt;
            control_motor(1);&lt;br /&gt;
            &lt;br /&gt;
        } else {&lt;br /&gt;
            // Nothing detected, set everything off&lt;br /&gt;
            output_unset(leds, 0);&lt;br /&gt;
            output_unset(leds, 1);&lt;br /&gt;
            output_unset(leds, 2);&lt;br /&gt;
            output_unset(leds, 3);&lt;br /&gt;
            control_motor(0);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
        inputs_init(imasks, pullup); // reset the values&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Fichier:Fonctionnement_capteur.mov&amp;diff=1188</id>
		<title>Fichier:Fonctionnement capteur.mov</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Fichier:Fonctionnement_capteur.mov&amp;diff=1188"/>
		<updated>2023-06-04T15:32:48Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vidéo du fonctionnement du capteur&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1186</id>
		<title>SE3Binome2022-5</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1186"/>
		<updated>2023-06-04T15:28:16Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : /* Vidéo en fonctionnement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==                                                                       '''&amp;lt;big&amp;gt;Présentation du projet&amp;lt;/big&amp;gt;''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Objectif&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
Concevoir un modèle de voiture 1:43 équipée d'un microcontrôleur ATMega16u2 permettant de commander la voiture en se basant sur un programme. Nous avons choisi de rajouter une option de suivi d'une ligne droite, ceci se fera à l'aide d'un capteur QRE1113gr.&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Composants&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
les composants à utiliser dans notre projet sont les suivants :&lt;br /&gt;
&lt;br /&gt;
* Un microcontrôleur ATMega16u2&lt;br /&gt;
* Un capteur QRE1113gr&lt;br /&gt;
* Un mini-moteur à courant continu&lt;br /&gt;
* Un pilote du mini-moteur à courant continu (DRV8210DRLR)&lt;br /&gt;
* Un micro-moteur glissière pas à pas &lt;br /&gt;
* Une batterie LiPo&lt;br /&gt;
* Une puce de contrôle de charge de la batterie (MAX1811)&lt;br /&gt;
* Des leds pour simuler le système d'éclairage&lt;br /&gt;
* Des résistances&lt;br /&gt;
* Des capacités&lt;br /&gt;
* Un quartz&lt;br /&gt;
* Un port USB&lt;br /&gt;
*Des diodes&lt;br /&gt;
*Un AVR-ISP 6&lt;br /&gt;
*Des connecteurs&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Caractéristiques et limites de notre système&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
==== caractéristiques ====&lt;br /&gt;
Pour comprendre le fonctionnement de suivi de ligne souhaité, il faut d'abord comprendre le fonctionnement du capteur QRE. C'est un capteur de réflexion infrarouge, il est utilisé pour détecter la présence ou l'absence d'objets réfléchissants à proximité. Il se compose d'une LED infrarouge émettant de la lumière infrarouge et d'un phototransistor qui mesure la quantité de lumière réfléchie. Lorsqu'un objet se trouve devant le capteur, il réfléchit la lumière infrarouge émise par la LED vers le phototransistor. Le phototransistor détecte cette lumière réfléchie et génère un courant proportionnel à son intensité. La valeur mesurée par le capteur dépend de la quantité de lumière infrarouge réfléchie par l'objet. Si l'objet est réfléchissant et renvoie une grande quantité de lumière infrarouge, le phototransistor générera un courant plus élevé, ce qui se traduira par une valeur positive lorsqu'elle est lue par le microcontrôleur. En revanche, si aucun objet réfléchissant n'est présent devant le capteur, la quantité de lumière infrarouge réfléchie sera faible. Par conséquent, le phototransistor générera un courant plus faible ou nul, ce qui se traduira par une valeur de capteur égale à zéro lorsqu'elle est lue par le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
==== Limites ====&lt;br /&gt;
Les composants cités ci-dessus étaient soudés et utilisés dans notre carte, sauf la batterie et sa puce de contrôle, les diodes, l'AVR-ISP et quelques capacités de filtrage de bruit ainsi que les connecteurs.&lt;br /&gt;
&lt;br /&gt;
Pour réinitialiser le microprocesseur afin de mettre un nouveau code, il faut à chaque fois utiliser un fil entre la masse et la broche de reset du AVR-ISP. Le rajout d'un bouton aurait était mieux.&lt;br /&gt;
&lt;br /&gt;
Lors du routage de la carte, nous n'avons pas fait attention que le capteur doit être placé en bas, afin de détecter la ligne. &lt;br /&gt;
&lt;br /&gt;
Après avoir fini le code pour tester le mini-moteur dc, nous nous rendons compte que le microprocessur n'est plus détectable en utilisant la commande lsusb. Nous avons vérifié les connections, essayé de changer le port usb mais sans résultat (pourtant que les leds et le capteur marchait bien). Nous avons alors tester le code sur la carte du groupe 2 en ajustant un peu la structure et en supprimant les parties correspondantes au capteur. &lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Avancement du projet&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
==== le 14/02 : ====&lt;br /&gt;
- Compréhension de l'idée directrice du projet &lt;br /&gt;
&lt;br /&gt;
- Recherche de l'option à rajouter&lt;br /&gt;
&lt;br /&gt;
==== le 28/02 : ====&lt;br /&gt;
- Début de conception de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 21/03 : ====&lt;br /&gt;
- début du rajout des empreintes des composants&lt;br /&gt;
&lt;br /&gt;
==== le 07/04 : ====&lt;br /&gt;
- Fin de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 13/04 : ====&lt;br /&gt;
- Fin du routage de la carte&lt;br /&gt;
&lt;br /&gt;
- Envoi du modèle aux enseignants pour le valider et commander la carte&lt;br /&gt;
&lt;br /&gt;
==== le 02/05: ====&lt;br /&gt;
- Réception de la carte &lt;br /&gt;
&lt;br /&gt;
- Soudure de quelques résistances et capacités&lt;br /&gt;
&lt;br /&gt;
==== le 09/05: ====&lt;br /&gt;
- Les composants suivants sont déjà soudés par l'enseignant : ATMega16u2, le quartz&lt;br /&gt;
&lt;br /&gt;
- Rajout des leds et des résistances restantes&lt;br /&gt;
&lt;br /&gt;
- Début du code pour tester les leds&lt;br /&gt;
&lt;br /&gt;
==== le 16/05: ====&lt;br /&gt;
- Fin du code pour tester les leds&lt;br /&gt;
&lt;br /&gt;
- Réorganisation de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 23/05: ====&lt;br /&gt;
- Soudure du capteur&lt;br /&gt;
&lt;br /&gt;
- Implémentation du code pour tester le capteur&lt;br /&gt;
&lt;br /&gt;
- Soudure du mini-moteur dc &lt;br /&gt;
&lt;br /&gt;
==== le 29/05: ====&lt;br /&gt;
- Soudure du micro-moteur pas à pas &lt;br /&gt;
&lt;br /&gt;
- Implémentation du code pour tester le mini-moteur dc&lt;br /&gt;
&lt;br /&gt;
==== le 03/06: ====&lt;br /&gt;
- Teste du code de moteur sur la carte du groupe 2&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GIT&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
le lien de notre archive GIT : https://archives.plil.fr/yelqasta/pse-g5.git&lt;br /&gt;
&lt;br /&gt;
== '''Conception de la carte électronique''' ==&lt;br /&gt;
&lt;br /&gt;
=== Composants et empreintes créés ===&lt;br /&gt;
nous avons créer le symbole du pilote du moteur DC via Kicad :&lt;br /&gt;
[[Fichier:Driver.png|vignette|250x250px|centré|Symbole du pilote DRV8210DRLR]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir mesurer les dimensions du mini-moteur continu on a pu créer l'empreinte suivante : &lt;br /&gt;
[[Fichier:Dc moteur.png|centré|vignette|Empreinte du mini-moteur dc]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''schéma''' &lt;br /&gt;
&lt;br /&gt;
Réalisation du schématique du PCB sur le logiciel KiCad : [[Fichier:Schématique de la carte.png|centré|vignette|439x439px|schématique]]lors de la phase de soudure, l'enseignant nous a mentionné que le schéma du capteur n'est pas bon. Nous avons pu corriger le problème avec l'aide de l'enseignant en se basant sur le schéma suivant : https://cdn.sparkfun.com/datasheets/Sensors/Proximity/QRE1113-Digital-Breakout-v11.pdf &lt;br /&gt;
&lt;br /&gt;
=== '''Visual 3D''' ===&lt;br /&gt;
[[Fichier:Voiture 3D.png|vignette|502x502px|visualisation 3D de la carte |centré]]&lt;br /&gt;
&lt;br /&gt;
=== '''Routage de la carte''' ===&lt;br /&gt;
[[Fichier:Routage de la carte .png|centré|vignette|670x670px|carte routée]]&lt;br /&gt;
&lt;br /&gt;
=== '''Carte imprimée''' ===&lt;br /&gt;
la carte imprimée et soudure du capteur, leds, résistances et microcontrôleur ATMega16U2 :                                                                                                                                                 &lt;br /&gt;
[[Fichier:Carte soudée entièrement.jpg|centré|vignette]]                                                                                                                                                 &lt;br /&gt;
==                                                                                                                                                   '''Premier Test de la carte''' ==&lt;br /&gt;
[[Fichier:Test.png|centré|vignette|611x611px|résultat de la commande lsusb]]&lt;br /&gt;
&lt;br /&gt;
==                                                                                       '''Programme''' ==&lt;br /&gt;
&lt;br /&gt;
=== Code de clignotement des Leds ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Vidéo en fonctionnement ====&lt;br /&gt;
[[Fichier:Clignotement des Leds.mp4|centré|vignette]]&lt;br /&gt;
&lt;br /&gt;
=== '''Code du suiveur QRE1113GR''' ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Vidéo en fonctionnement ====&lt;br /&gt;
&lt;br /&gt;
==                                                                                    '''Soudure des moteurs''' ==&lt;br /&gt;
Nous avons soudé le pilote du mini-moteur dc, le mini-moteur DC et le micro-moteur glissière pas à pas.[[Fichier:Soudure.jpg|gauche|vignette|résultat final 1]]&lt;br /&gt;
[[Fichier:Photo.jpg|vignette|néant|505x505px|résultat final 2]]&lt;br /&gt;
&lt;br /&gt;
===== Vidéo du fonctionnement du mini-moteur dc =====&lt;br /&gt;
Comme indiqué, nous ne pouvions plus programmer le microprocesseur. Pour cela , nous avons testé notre code sur la carte du groupe 2 :&lt;br /&gt;
[[Fichier:Vidéo moteur dc.mov|vignette|Vidéo du fonctionnement du mini-moteur dc|néant]]Voici le code utilisé pour tester le moteur sur la carte du groupe 2, il ne reste qu'à changer les pins pour convenir à leur structure :&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;io.h&amp;quot;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define MAX_LED	4&lt;br /&gt;
&lt;br /&gt;
#define PORTB_OUTPUT	0x50&lt;br /&gt;
#define PORTC_OUTPUT	0x84&lt;br /&gt;
#define PORTD_OUTPUT	0x01&lt;br /&gt;
&lt;br /&gt;
unsigned char led1[] = {0x00, 0x80, 0x00}; // PC7&lt;br /&gt;
unsigned char led5[] = {0x40, 0x00, 0x00}; // PB6&lt;br /&gt;
unsigned char led6[] = {0x10, 0x00, 0x00}; // PB4&lt;br /&gt;
unsigned char led8[] = {0x00, 0x04, 0x00}; // PC2&lt;br /&gt;
unsigned char *leds[] = {led1, led5, led6, led8};&lt;br /&gt;
&lt;br /&gt;
unsigned char qre1113gr[] = {0x01, 0x00, 0x00}; // PD0&lt;br /&gt;
&lt;br /&gt;
#define PORTB_INPUT	0x00&lt;br /&gt;
#define PORTC_INPUT	0x00&lt;br /&gt;
#define PORTD_INPUT	0x00&lt;br /&gt;
&lt;br /&gt;
void control_motor(int enable) {&lt;br /&gt;
    // Set appropriate signals for motor control using DRV8210DRLR&lt;br /&gt;
    if (enable) {&lt;br /&gt;
        // Enable the motor in the desired direction (e.g., set appropriate motor pins high/low)&lt;br /&gt;
        PORTC |= (1 &amp;lt;&amp;lt; PC6);  // Set PC6 high&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    } else {&lt;br /&gt;
        // Disable the motor (e.g., set all motor pins low)&lt;br /&gt;
        PORTC &amp;amp;= ~(1 &amp;lt;&amp;lt; PC6); // Set PC6 low&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unsigned char input_get(unsigned char *pin) {&lt;br /&gt;
    unsigned char port_num = pin[0] &amp;gt;&amp;gt; 4;  // Extract the port number from the pin value&lt;br /&gt;
    unsigned char pin_num = pin[0] &amp;amp; 0x0F; // Extract the pin number from the pin value&lt;br /&gt;
&lt;br /&gt;
    switch (port_num) {&lt;br /&gt;
        case 0:  // PORTB&lt;br /&gt;
            return (PINB &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 1:  // PORTC&lt;br /&gt;
            return (PINC &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 2:  // PORTD&lt;br /&gt;
            return (PIND &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        default:&lt;br /&gt;
            return 0;  // Invalid port number&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
int main(void) {&lt;br /&gt;
    unsigned char imasks[] = {PORTB_INPUT, PORTC_INPUT, PORTD_INPUT};&lt;br /&gt;
    unsigned char pullup[] = {0x00, 0x00, 0x01};&lt;br /&gt;
    inputs_init(imasks, pullup);&lt;br /&gt;
    unsigned char omasks[] = {PORTB_OUTPUT, PORTC_OUTPUT, PORTD_OUTPUT};&lt;br /&gt;
    outputs_init(omasks);&lt;br /&gt;
 while (1) {&lt;br /&gt;
  control_motor(1);&lt;br /&gt;
  _delay_ms(300);&lt;br /&gt;
  control_motor(0);&lt;br /&gt;
  inputs_init(imasks, pullup);&lt;br /&gt;
 }&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Voici le code final en se basant sur les mêmes fonctions utilisées ci-dessus :&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;io.h&amp;quot;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define MAX_LED	4&lt;br /&gt;
&lt;br /&gt;
#define PORTB_OUTPUT	0x50&lt;br /&gt;
#define PORTC_OUTPUT	0x84&lt;br /&gt;
#define PORTD_OUTPUT	0x01&lt;br /&gt;
&lt;br /&gt;
unsigned char led1[] = {0x00, 0x80, 0x00}; // PC7&lt;br /&gt;
unsigned char led5[] = {0x40, 0x00, 0x00}; // PB6&lt;br /&gt;
unsigned char led6[] = {0x10, 0x00, 0x00}; // PB4&lt;br /&gt;
unsigned char led8[] = {0x00, 0x04, 0x00}; // PC2&lt;br /&gt;
unsigned char *leds[] = {led1, led5, led6, led8};&lt;br /&gt;
&lt;br /&gt;
unsigned char qre1113gr[] = {0x01, 0x00, 0x00}; // PD0&lt;br /&gt;
&lt;br /&gt;
#define PORTB_INPUT	0x00&lt;br /&gt;
#define PORTC_INPUT	0x00&lt;br /&gt;
#define PORTD_INPUT	0x00&lt;br /&gt;
&lt;br /&gt;
void control_motor(int enable) {&lt;br /&gt;
    // Set appropriate signals for motor control using DRV8210DRLR&lt;br /&gt;
    if (enable) {&lt;br /&gt;
        // Enable the motor in the desired direction (e.g., set appropriate motor pins high/low)&lt;br /&gt;
        PORTC |= (1 &amp;lt;&amp;lt; PC6);  // Set PC6 high&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    } else {&lt;br /&gt;
        // Disable the motor (e.g., set all motor pins low)&lt;br /&gt;
        PORTC &amp;amp;= ~(1 &amp;lt;&amp;lt; PC6); // Set PC6 low&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
// The motor here is running anti clock-wise&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unsigned char input_get(unsigned char *pin) {&lt;br /&gt;
    unsigned char port_num = pin[0] &amp;gt;&amp;gt; 4;  // Extract the port number from the pin value&lt;br /&gt;
    unsigned char pin_num = pin[0] &amp;amp; 0x0F; // Extract the pin number from the pin value&lt;br /&gt;
&lt;br /&gt;
    switch (port_num) {&lt;br /&gt;
        case 0:  // PORTB&lt;br /&gt;
            return (PINB &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 1:  // PORTC&lt;br /&gt;
            return (PINC &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 2:  // PORTD&lt;br /&gt;
            return (PIND &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        default:&lt;br /&gt;
            return 0;  // Invalid port number&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void) {&lt;br /&gt;
    unsigned char imasks[] = {PORTB_INPUT, PORTC_INPUT, PORTD_INPUT};&lt;br /&gt;
    unsigned char pullup[] = {0x00, 0x00, 0x01};&lt;br /&gt;
    inputs_init(imasks, pullup);&lt;br /&gt;
    unsigned char omasks[] = {PORTB_OUTPUT, PORTC_OUTPUT, PORTD_OUTPUT};&lt;br /&gt;
    outputs_init(omasks);&lt;br /&gt;
&lt;br /&gt;
    while (1) {&lt;br /&gt;
        // Get the value read by the sensor&lt;br /&gt;
        unsigned char qre_value = input_get(qre1113gr);&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
        if (qre_value &amp;gt; 0) {&lt;br /&gt;
               // Infra-red light detected, set everything on&lt;br /&gt;
            output_set(leds, 0);&lt;br /&gt;
            output_set(leds, 1);&lt;br /&gt;
            output_set(leds, 2);&lt;br /&gt;
            output_set(leds, 3);&lt;br /&gt;
            control_motor(1);&lt;br /&gt;
            &lt;br /&gt;
        } else {&lt;br /&gt;
            // Nothing detected, set everything off&lt;br /&gt;
            output_unset(leds, 0);&lt;br /&gt;
            output_unset(leds, 1);&lt;br /&gt;
            output_unset(leds, 2);&lt;br /&gt;
            output_unset(leds, 3);&lt;br /&gt;
            control_motor(0);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
        inputs_init(imasks, pullup); // reset the values&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1185</id>
		<title>SE3Binome2022-5</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1185"/>
		<updated>2023-06-04T15:23:23Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : /* Vidéo du fonctionnement du mini-moteur dc */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==                                                                       '''&amp;lt;big&amp;gt;Présentation du projet&amp;lt;/big&amp;gt;''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Objectif&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
Concevoir un modèle de voiture 1:43 équipée d'un microcontrôleur ATMega16u2 permettant de commander la voiture en se basant sur un programme. Nous avons choisi de rajouter une option de suivi d'une ligne droite, ceci se fera à l'aide d'un capteur QRE1113gr.&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Composants&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
les composants à utiliser dans notre projet sont les suivants :&lt;br /&gt;
&lt;br /&gt;
* Un microcontrôleur ATMega16u2&lt;br /&gt;
* Un capteur QRE1113gr&lt;br /&gt;
* Un mini-moteur à courant continu&lt;br /&gt;
* Un pilote du mini-moteur à courant continu (DRV8210DRLR)&lt;br /&gt;
* Un micro-moteur glissière pas à pas &lt;br /&gt;
* Une batterie LiPo&lt;br /&gt;
* Une puce de contrôle de charge de la batterie (MAX1811)&lt;br /&gt;
* Des leds pour simuler le système d'éclairage&lt;br /&gt;
* Des résistances&lt;br /&gt;
* Des capacités&lt;br /&gt;
* Un quartz&lt;br /&gt;
* Un port USB&lt;br /&gt;
*Des diodes&lt;br /&gt;
*Un AVR-ISP 6&lt;br /&gt;
*Des connecteurs&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Caractéristiques et limites de notre système&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
==== caractéristiques ====&lt;br /&gt;
Pour comprendre le fonctionnement de suivi de ligne souhaité, il faut d'abord comprendre le fonctionnement du capteur QRE. C'est un capteur de réflexion infrarouge, il est utilisé pour détecter la présence ou l'absence d'objets réfléchissants à proximité. Il se compose d'une LED infrarouge émettant de la lumière infrarouge et d'un phototransistor qui mesure la quantité de lumière réfléchie. Lorsqu'un objet se trouve devant le capteur, il réfléchit la lumière infrarouge émise par la LED vers le phototransistor. Le phototransistor détecte cette lumière réfléchie et génère un courant proportionnel à son intensité. La valeur mesurée par le capteur dépend de la quantité de lumière infrarouge réfléchie par l'objet. Si l'objet est réfléchissant et renvoie une grande quantité de lumière infrarouge, le phototransistor générera un courant plus élevé, ce qui se traduira par une valeur positive lorsqu'elle est lue par le microcontrôleur. En revanche, si aucun objet réfléchissant n'est présent devant le capteur, la quantité de lumière infrarouge réfléchie sera faible. Par conséquent, le phototransistor générera un courant plus faible ou nul, ce qui se traduira par une valeur de capteur égale à zéro lorsqu'elle est lue par le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
==== Limites ====&lt;br /&gt;
Les composants cités ci-dessus étaient soudés et utilisés dans notre carte, sauf la batterie et sa puce de contrôle, les diodes, l'AVR-ISP et quelques capacités de filtrage de bruit ainsi que les connecteurs.&lt;br /&gt;
&lt;br /&gt;
Pour réinitialiser le microprocesseur afin de mettre un nouveau code, il faut à chaque fois utiliser un fil entre la masse et la broche de reset du AVR-ISP. Le rajout d'un bouton aurait était mieux.&lt;br /&gt;
&lt;br /&gt;
Lors du routage de la carte, nous n'avons pas fait attention que le capteur doit être placé en bas, afin de détecter la ligne. &lt;br /&gt;
&lt;br /&gt;
Après avoir fini le code pour tester le mini-moteur dc, nous nous rendons compte que le microprocessur n'est plus détectable en utilisant la commande lsusb. Nous avons vérifié les connections, essayé de changer le port usb mais sans résultat (pourtant que les leds et le capteur marchait bien). Nous avons alors tester le code sur la carte du groupe 2 en ajustant un peu la structure et en supprimant les parties correspondantes au capteur. &lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Avancement du projet&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
==== le 14/02 : ====&lt;br /&gt;
- Compréhension de l'idée directrice du projet &lt;br /&gt;
&lt;br /&gt;
- Recherche de l'option à rajouter&lt;br /&gt;
&lt;br /&gt;
==== le 28/02 : ====&lt;br /&gt;
- Début de conception de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 21/03 : ====&lt;br /&gt;
- début du rajout des empreintes des composants&lt;br /&gt;
&lt;br /&gt;
==== le 07/04 : ====&lt;br /&gt;
- Fin de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 13/04 : ====&lt;br /&gt;
- Fin du routage de la carte&lt;br /&gt;
&lt;br /&gt;
- Envoi du modèle aux enseignants pour le valider et commander la carte&lt;br /&gt;
&lt;br /&gt;
==== le 02/05: ====&lt;br /&gt;
- Réception de la carte &lt;br /&gt;
&lt;br /&gt;
- Soudure de quelques résistances et capacités&lt;br /&gt;
&lt;br /&gt;
==== le 09/05: ====&lt;br /&gt;
- Les composants suivants sont déjà soudés par l'enseignant : ATMega16u2, le quartz&lt;br /&gt;
&lt;br /&gt;
- Rajout des leds et des résistances restantes&lt;br /&gt;
&lt;br /&gt;
- Début du code pour tester les leds&lt;br /&gt;
&lt;br /&gt;
==== le 16/05: ====&lt;br /&gt;
- Fin du code pour tester les leds&lt;br /&gt;
&lt;br /&gt;
- Réorganisation de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 23/05: ====&lt;br /&gt;
- Soudure du capteur&lt;br /&gt;
&lt;br /&gt;
- Implémentation du code pour tester le capteur&lt;br /&gt;
&lt;br /&gt;
- Soudure du mini-moteur dc &lt;br /&gt;
&lt;br /&gt;
==== le 29/05: ====&lt;br /&gt;
- Soudure du micro-moteur pas à pas &lt;br /&gt;
&lt;br /&gt;
- Implémentation du code pour tester le mini-moteur dc&lt;br /&gt;
&lt;br /&gt;
==== le 03/06: ====&lt;br /&gt;
- Teste du code de moteur sur la carte du groupe 2&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GIT&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
le lien de notre archive GIT : https://archives.plil.fr/yelqasta/pse-g5.git&lt;br /&gt;
&lt;br /&gt;
== '''Conception de la carte électronique''' ==&lt;br /&gt;
&lt;br /&gt;
=== Composants et empreintes créés ===&lt;br /&gt;
nous avons créer le symbole du pilote du moteur DC via Kicad :&lt;br /&gt;
[[Fichier:Driver.png|vignette|250x250px|centré|Symbole du pilote DRV8210DRLR]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir mesurer les dimensions du mini-moteur continu on a pu créer l'empreinte suivante : &lt;br /&gt;
[[Fichier:Dc moteur.png|centré|vignette|Empreinte du mini-moteur dc]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''schéma''' &lt;br /&gt;
&lt;br /&gt;
Réalisation du schématique du PCB sur le logiciel KiCad : [[Fichier:Schématique de la carte.png|centré|vignette|439x439px|schématique]]lors de la phase de soudure, l'enseignant nous a mentionné que le schéma du capteur n'est pas bon. Nous avons pu corriger le problème avec l'aide de l'enseignant en se basant sur le schéma suivant : https://cdn.sparkfun.com/datasheets/Sensors/Proximity/QRE1113-Digital-Breakout-v11.pdf &lt;br /&gt;
&lt;br /&gt;
=== '''Visual 3D''' ===&lt;br /&gt;
[[Fichier:Voiture 3D.png|vignette|502x502px|visualisation 3D de la carte |centré]]&lt;br /&gt;
&lt;br /&gt;
=== '''Routage de la carte''' ===&lt;br /&gt;
[[Fichier:Routage de la carte .png|centré|vignette|670x670px|carte routée]]&lt;br /&gt;
&lt;br /&gt;
=== '''Carte imprimée''' ===&lt;br /&gt;
la carte imprimée et soudure du capteur, leds, résistances et microcontrôleur ATMega16U2 :                                                                                                                                                 &lt;br /&gt;
[[Fichier:Carte soudée entièrement.jpg|centré|vignette]]                                                                                                                                                 &lt;br /&gt;
==                                                                                                                                                   '''Premier Test de la carte''' ==&lt;br /&gt;
[[Fichier:Test.png|centré|vignette|611x611px|résultat de la commande lsusb]]&lt;br /&gt;
&lt;br /&gt;
==                                                                                       '''Programme''' ==&lt;br /&gt;
&lt;br /&gt;
=== Code de clignotement des Leds ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Vidéo en fonctionnement ====&lt;br /&gt;
[[Fichier:Clignotement des Leds.mp4|centré|vignette]]&lt;br /&gt;
&lt;br /&gt;
=== '''Code du suiveur QRE1113GR''' ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Vidéo en fonctionnement ====&lt;br /&gt;
[[Fichier:Test du capteur.mp4|centré|vignette]]&lt;br /&gt;
&lt;br /&gt;
==                                                                                    '''Soudure des moteurs''' ==&lt;br /&gt;
Nous avons soudé le pilote du mini-moteur dc, le mini-moteur DC et le micro-moteur glissière pas à pas.[[Fichier:Soudure.jpg|gauche|vignette|résultat final 1]]&lt;br /&gt;
[[Fichier:Photo.jpg|vignette|néant|505x505px|résultat final 2]]&lt;br /&gt;
&lt;br /&gt;
===== Vidéo du fonctionnement du mini-moteur dc =====&lt;br /&gt;
Comme indiqué, nous ne pouvions plus programmer le microprocesseur. Pour cela , nous avons testé notre code sur la carte du groupe 2 :&lt;br /&gt;
[[Fichier:Vidéo moteur dc.mov|vignette|Vidéo du fonctionnement du mini-moteur dc|néant]]Voici le code utilisé pour tester le moteur sur la carte du groupe 2, il ne reste qu'à changer les pins pour convenir à leur structure :&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;io.h&amp;quot;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define MAX_LED	4&lt;br /&gt;
&lt;br /&gt;
#define PORTB_OUTPUT	0x50&lt;br /&gt;
#define PORTC_OUTPUT	0x84&lt;br /&gt;
#define PORTD_OUTPUT	0x01&lt;br /&gt;
&lt;br /&gt;
unsigned char led1[] = {0x00, 0x80, 0x00}; // PC7&lt;br /&gt;
unsigned char led5[] = {0x40, 0x00, 0x00}; // PB6&lt;br /&gt;
unsigned char led6[] = {0x10, 0x00, 0x00}; // PB4&lt;br /&gt;
unsigned char led8[] = {0x00, 0x04, 0x00}; // PC2&lt;br /&gt;
unsigned char *leds[] = {led1, led5, led6, led8};&lt;br /&gt;
&lt;br /&gt;
unsigned char qre1113gr[] = {0x01, 0x00, 0x00}; // PD0&lt;br /&gt;
&lt;br /&gt;
#define PORTB_INPUT	0x00&lt;br /&gt;
#define PORTC_INPUT	0x00&lt;br /&gt;
#define PORTD_INPUT	0x00&lt;br /&gt;
&lt;br /&gt;
void control_motor(int enable) {&lt;br /&gt;
    // Set appropriate signals for motor control using DRV8210DRLR&lt;br /&gt;
    if (enable) {&lt;br /&gt;
        // Enable the motor in the desired direction (e.g., set appropriate motor pins high/low)&lt;br /&gt;
        PORTC |= (1 &amp;lt;&amp;lt; PC6);  // Set PC6 high&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    } else {&lt;br /&gt;
        // Disable the motor (e.g., set all motor pins low)&lt;br /&gt;
        PORTC &amp;amp;= ~(1 &amp;lt;&amp;lt; PC6); // Set PC6 low&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unsigned char input_get(unsigned char *pin) {&lt;br /&gt;
    unsigned char port_num = pin[0] &amp;gt;&amp;gt; 4;  // Extract the port number from the pin value&lt;br /&gt;
    unsigned char pin_num = pin[0] &amp;amp; 0x0F; // Extract the pin number from the pin value&lt;br /&gt;
&lt;br /&gt;
    switch (port_num) {&lt;br /&gt;
        case 0:  // PORTB&lt;br /&gt;
            return (PINB &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 1:  // PORTC&lt;br /&gt;
            return (PINC &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 2:  // PORTD&lt;br /&gt;
            return (PIND &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        default:&lt;br /&gt;
            return 0;  // Invalid port number&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
int main(void) {&lt;br /&gt;
    unsigned char imasks[] = {PORTB_INPUT, PORTC_INPUT, PORTD_INPUT};&lt;br /&gt;
    unsigned char pullup[] = {0x00, 0x00, 0x01};&lt;br /&gt;
    inputs_init(imasks, pullup);&lt;br /&gt;
    unsigned char omasks[] = {PORTB_OUTPUT, PORTC_OUTPUT, PORTD_OUTPUT};&lt;br /&gt;
    outputs_init(omasks);&lt;br /&gt;
 while (1) {&lt;br /&gt;
  control_motor(1);&lt;br /&gt;
  _delay_ms(300);&lt;br /&gt;
  control_motor(0);&lt;br /&gt;
  inputs_init(imasks, pullup);&lt;br /&gt;
 }&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Voici le code final en se basant sur les mêmes fonctions utilisées ci-dessus :&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;io.h&amp;quot;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define MAX_LED	4&lt;br /&gt;
&lt;br /&gt;
#define PORTB_OUTPUT	0x50&lt;br /&gt;
#define PORTC_OUTPUT	0x84&lt;br /&gt;
#define PORTD_OUTPUT	0x01&lt;br /&gt;
&lt;br /&gt;
unsigned char led1[] = {0x00, 0x80, 0x00}; // PC7&lt;br /&gt;
unsigned char led5[] = {0x40, 0x00, 0x00}; // PB6&lt;br /&gt;
unsigned char led6[] = {0x10, 0x00, 0x00}; // PB4&lt;br /&gt;
unsigned char led8[] = {0x00, 0x04, 0x00}; // PC2&lt;br /&gt;
unsigned char *leds[] = {led1, led5, led6, led8};&lt;br /&gt;
&lt;br /&gt;
unsigned char qre1113gr[] = {0x01, 0x00, 0x00}; // PD0&lt;br /&gt;
&lt;br /&gt;
#define PORTB_INPUT	0x00&lt;br /&gt;
#define PORTC_INPUT	0x00&lt;br /&gt;
#define PORTD_INPUT	0x00&lt;br /&gt;
&lt;br /&gt;
void control_motor(int enable) {&lt;br /&gt;
    // Set appropriate signals for motor control using DRV8210DRLR&lt;br /&gt;
    if (enable) {&lt;br /&gt;
        // Enable the motor in the desired direction (e.g., set appropriate motor pins high/low)&lt;br /&gt;
        PORTC |= (1 &amp;lt;&amp;lt; PC6);  // Set PC6 high&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    } else {&lt;br /&gt;
        // Disable the motor (e.g., set all motor pins low)&lt;br /&gt;
        PORTC &amp;amp;= ~(1 &amp;lt;&amp;lt; PC6); // Set PC6 low&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
// The motor here is running anti clock-wise&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unsigned char input_get(unsigned char *pin) {&lt;br /&gt;
    unsigned char port_num = pin[0] &amp;gt;&amp;gt; 4;  // Extract the port number from the pin value&lt;br /&gt;
    unsigned char pin_num = pin[0] &amp;amp; 0x0F; // Extract the pin number from the pin value&lt;br /&gt;
&lt;br /&gt;
    switch (port_num) {&lt;br /&gt;
        case 0:  // PORTB&lt;br /&gt;
            return (PINB &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 1:  // PORTC&lt;br /&gt;
            return (PINC &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 2:  // PORTD&lt;br /&gt;
            return (PIND &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        default:&lt;br /&gt;
            return 0;  // Invalid port number&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void) {&lt;br /&gt;
    unsigned char imasks[] = {PORTB_INPUT, PORTC_INPUT, PORTD_INPUT};&lt;br /&gt;
    unsigned char pullup[] = {0x00, 0x00, 0x01};&lt;br /&gt;
    inputs_init(imasks, pullup);&lt;br /&gt;
    unsigned char omasks[] = {PORTB_OUTPUT, PORTC_OUTPUT, PORTD_OUTPUT};&lt;br /&gt;
    outputs_init(omasks);&lt;br /&gt;
&lt;br /&gt;
    while (1) {&lt;br /&gt;
        // Get the value read by the sensor&lt;br /&gt;
        unsigned char qre_value = input_get(qre1113gr);&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
        if (qre_value &amp;gt; 0) {&lt;br /&gt;
               // Infra-red light detected, set everything on&lt;br /&gt;
            output_set(leds, 0);&lt;br /&gt;
            output_set(leds, 1);&lt;br /&gt;
            output_set(leds, 2);&lt;br /&gt;
            output_set(leds, 3);&lt;br /&gt;
            control_motor(1);&lt;br /&gt;
            &lt;br /&gt;
        } else {&lt;br /&gt;
            // Nothing detected, set everything off&lt;br /&gt;
            output_unset(leds, 0);&lt;br /&gt;
            output_unset(leds, 1);&lt;br /&gt;
            output_unset(leds, 2);&lt;br /&gt;
            output_unset(leds, 3);&lt;br /&gt;
            control_motor(0);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
        inputs_init(imasks, pullup); // reset the values&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1183</id>
		<title>SE3Binome2022-5</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1183"/>
		<updated>2023-06-04T15:13:15Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : /* Soudure des moteurs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==                                                                       '''&amp;lt;big&amp;gt;Présentation du projet&amp;lt;/big&amp;gt;''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Objectif&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
Concevoir un modèle de voiture 1:43 équipée d'un microcontrôleur ATMega16u2 permettant de commander la voiture en se basant sur un programme. Nous avons choisi de rajouter une option de suivi d'une ligne droite, ceci se fera à l'aide d'un capteur QRE1113gr.&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Composants&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
les composants à utiliser dans notre projet sont les suivants :&lt;br /&gt;
&lt;br /&gt;
* Un microcontrôleur ATMega16u2&lt;br /&gt;
* Un capteur QRE1113gr&lt;br /&gt;
* Un mini-moteur à courant continu&lt;br /&gt;
* Un pilote du mini-moteur à courant continu (DRV8210DRLR)&lt;br /&gt;
* Un micro-moteur glissière pas à pas &lt;br /&gt;
* Une batterie LiPo&lt;br /&gt;
* Une puce de contrôle de charge de la batterie (MAX1811)&lt;br /&gt;
* Des leds pour simuler le système d'éclairage&lt;br /&gt;
* Des résistances&lt;br /&gt;
* Des capacités&lt;br /&gt;
* Un quartz&lt;br /&gt;
* Un port USB&lt;br /&gt;
*Des diodes&lt;br /&gt;
*Un AVR-ISP 6&lt;br /&gt;
*Des connecteurs&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Caractéristiques et limites de notre système&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
==== caractéristiques ====&lt;br /&gt;
Pour comprendre le fonctionnement de suivi de ligne souhaité, il faut d'abord comprendre le fonctionnement du capteur QRE. C'est un capteur de réflexion infrarouge, il est utilisé pour détecter la présence ou l'absence d'objets réfléchissants à proximité. Il se compose d'une LED infrarouge émettant de la lumière infrarouge et d'un phototransistor qui mesure la quantité de lumière réfléchie. Lorsqu'un objet se trouve devant le capteur, il réfléchit la lumière infrarouge émise par la LED vers le phototransistor. Le phototransistor détecte cette lumière réfléchie et génère un courant proportionnel à son intensité. La valeur mesurée par le capteur dépend de la quantité de lumière infrarouge réfléchie par l'objet. Si l'objet est réfléchissant et renvoie une grande quantité de lumière infrarouge, le phototransistor générera un courant plus élevé, ce qui se traduira par une valeur positive lorsqu'elle est lue par le microcontrôleur. En revanche, si aucun objet réfléchissant n'est présent devant le capteur, la quantité de lumière infrarouge réfléchie sera faible. Par conséquent, le phototransistor générera un courant plus faible ou nul, ce qui se traduira par une valeur de capteur égale à zéro lorsqu'elle est lue par le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
==== Limites ====&lt;br /&gt;
Les composants cités ci-dessus étaient soudés et utilisés dans notre carte, sauf la batterie et sa puce de contrôle, les diodes, l'AVR-ISP et quelques capacités de filtrage de bruit ainsi que les connecteurs.&lt;br /&gt;
&lt;br /&gt;
Pour réinitialiser le microprocesseur afin de mettre un nouveau code, il faut à chaque fois utiliser un fil entre la masse et la broche de reset du AVR-ISP. Le rajout d'un bouton aurait était mieux.&lt;br /&gt;
&lt;br /&gt;
Lors du routage de la carte, nous n'avons pas fait attention que le capteur doit être placé en bas, afin de détecter la ligne. &lt;br /&gt;
&lt;br /&gt;
Après avoir fini le code pour tester le mini-moteur dc, nous nous rendons compte que le microprocessur n'est plus détectable en utilisant la commande lsusb. Nous avons vérifié les connections, essayé de changer le port usb mais sans résultat (pourtant que les leds et le capteur marchait bien). Nous avons alors tester le code sur la carte du groupe 2 en ajustant un peu la structure et en supprimant les parties correspondantes au capteur. &lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Avancement du projet&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
==== le 14/02 : ====&lt;br /&gt;
- Compréhension de l'idée directrice du projet &lt;br /&gt;
&lt;br /&gt;
- Recherche de l'option à rajouter&lt;br /&gt;
&lt;br /&gt;
==== le 28/02 : ====&lt;br /&gt;
- Début de conception de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 21/03 : ====&lt;br /&gt;
- début du rajout des empreintes des composants&lt;br /&gt;
&lt;br /&gt;
==== le 07/04 : ====&lt;br /&gt;
- Fin de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 13/04 : ====&lt;br /&gt;
- Fin du routage de la carte&lt;br /&gt;
&lt;br /&gt;
- Envoi du modèle aux enseignants pour le valider et commander la carte&lt;br /&gt;
&lt;br /&gt;
==== le 02/05: ====&lt;br /&gt;
- Réception de la carte &lt;br /&gt;
&lt;br /&gt;
- Soudure de quelques résistances et capacités&lt;br /&gt;
&lt;br /&gt;
==== le 09/05: ====&lt;br /&gt;
- Les composants suivants sont déjà soudés par l'enseignant : ATMega16u2, le quartz&lt;br /&gt;
&lt;br /&gt;
- Rajout des leds et des résistances restantes&lt;br /&gt;
&lt;br /&gt;
- Début du code pour tester les leds&lt;br /&gt;
&lt;br /&gt;
==== le 16/05: ====&lt;br /&gt;
- Fin du code pour tester les leds&lt;br /&gt;
&lt;br /&gt;
- Réorganisation de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 23/05: ====&lt;br /&gt;
- Soudure du capteur&lt;br /&gt;
&lt;br /&gt;
- Implémentation du code pour tester le capteur&lt;br /&gt;
&lt;br /&gt;
- Soudure du mini-moteur dc &lt;br /&gt;
&lt;br /&gt;
==== le 29/05: ====&lt;br /&gt;
- Soudure du micro-moteur pas à pas &lt;br /&gt;
&lt;br /&gt;
- Implémentation du code pour tester le mini-moteur dc&lt;br /&gt;
&lt;br /&gt;
==== le 03/06: ====&lt;br /&gt;
- Teste du code de moteur sur la carte du groupe 2&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GIT&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
le lien de notre archive GIT : https://archives.plil.fr/yelqasta/pse-g5.git&lt;br /&gt;
&lt;br /&gt;
== '''Conception de la carte électronique''' ==&lt;br /&gt;
&lt;br /&gt;
=== Composants et empreintes créés ===&lt;br /&gt;
nous avons créer le symbole du pilote du moteur DC via Kicad :&lt;br /&gt;
[[Fichier:Driver.png|vignette|250x250px|centré|Symbole du pilote DRV8210DRLR]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir mesurer les dimensions du mini-moteur continu on a pu créer l'empreinte suivante : &lt;br /&gt;
[[Fichier:Dc moteur.png|centré|vignette|Empreinte du mini-moteur dc]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''schéma''' &lt;br /&gt;
&lt;br /&gt;
Réalisation du schématique du PCB sur le logiciel KiCad : [[Fichier:Schématique de la carte.png|centré|vignette|439x439px|schématique]]lors de la phase de soudure, l'enseignant nous a mentionné que le schéma du capteur n'est pas bon. Nous avons pu corriger le problème avec l'aide de l'enseignant en se basant sur le schéma suivant : https://cdn.sparkfun.com/datasheets/Sensors/Proximity/QRE1113-Digital-Breakout-v11.pdf &lt;br /&gt;
&lt;br /&gt;
=== '''Visual 3D''' ===&lt;br /&gt;
[[Fichier:Voiture 3D.png|vignette|502x502px|visualisation 3D de la carte |centré]]&lt;br /&gt;
&lt;br /&gt;
=== '''Routage de la carte''' ===&lt;br /&gt;
[[Fichier:Routage de la carte .png|centré|vignette|670x670px|carte routée]]&lt;br /&gt;
&lt;br /&gt;
=== '''Carte imprimée''' ===&lt;br /&gt;
la carte imprimée et soudure du capteur, leds, résistances et microcontrôleur ATMega16U2 :                                                                                                                                                 &lt;br /&gt;
[[Fichier:Carte soudée entièrement.jpg|centré|vignette]]                                                                                                                                                 &lt;br /&gt;
==                                                                                                                                                   '''Premier Test de la carte''' ==&lt;br /&gt;
[[Fichier:Test.png|centré|vignette|611x611px|résultat de la commande lsusb]]&lt;br /&gt;
&lt;br /&gt;
==                                                                                       '''Programme''' ==&lt;br /&gt;
&lt;br /&gt;
=== Code de clignotement des Leds ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Vidéo en fonctionnement ====&lt;br /&gt;
[[Fichier:Clignotement des Leds.mp4|centré|vignette]]&lt;br /&gt;
&lt;br /&gt;
=== '''Code du suiveur QRE1113GR''' ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Vidéo en fonctionnement ====&lt;br /&gt;
[[Fichier:Test du capteur.mp4|centré|vignette]]&lt;br /&gt;
&lt;br /&gt;
==                                                                                    '''Soudure des moteurs''' ==&lt;br /&gt;
Nous avons soudé le pilote du mini-moteur dc, le mini-moteur DC et le micro-moteur glissière pas à pas.[[Fichier:Soudure.jpg|gauche|vignette|résultat final 1]]&lt;br /&gt;
[[Fichier:Photo.jpg|vignette|néant|505x505px|résultat final 2]]&lt;br /&gt;
&lt;br /&gt;
===== Vidéo du fonctionnement du mini-moteur dc =====&lt;br /&gt;
Comme indiqué, nous ne pouvions plus programmer le microprocesseur. Pour cela , nous avons testé notre code sur la carte du groupe 2 :&lt;br /&gt;
[[Fichier:Vidéo moteur dc.mov|vignette|gauche|Vidéo du fonctionnement du mini-moteur dc]]&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;io.h&amp;quot;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define MAX_LED	4&lt;br /&gt;
&lt;br /&gt;
#define PORTB_OUTPUT	0x50&lt;br /&gt;
#define PORTC_OUTPUT	0x84&lt;br /&gt;
#define PORTD_OUTPUT	0x01&lt;br /&gt;
&lt;br /&gt;
unsigned char led1[] = {0x00, 0x80, 0x00}; // PC7&lt;br /&gt;
unsigned char led5[] = {0x40, 0x00, 0x00}; // PB6&lt;br /&gt;
unsigned char led6[] = {0x10, 0x00, 0x00}; // PB4&lt;br /&gt;
unsigned char led8[] = {0x00, 0x04, 0x00}; // PC2&lt;br /&gt;
unsigned char *leds[] = {led1, led5, led6, led8};&lt;br /&gt;
&lt;br /&gt;
unsigned char qre1113gr[] = {0x01, 0x00, 0x00}; // PD0&lt;br /&gt;
&lt;br /&gt;
#define PORTB_INPUT	0x00&lt;br /&gt;
#define PORTC_INPUT	0x00&lt;br /&gt;
#define PORTD_INPUT	0x00&lt;br /&gt;
&lt;br /&gt;
void control_motor(int enable) {&lt;br /&gt;
    // Set appropriate signals for motor control using DRV8210DRLR&lt;br /&gt;
    if (enable) {&lt;br /&gt;
        // Enable the motor in the desired direction (e.g., set appropriate motor pins high/low)&lt;br /&gt;
        PORTC |= (1 &amp;lt;&amp;lt; PC6);  // Set PC6 high&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    } else {&lt;br /&gt;
        // Disable the motor (e.g., set all motor pins low)&lt;br /&gt;
        PORTC &amp;amp;= ~(1 &amp;lt;&amp;lt; PC6); // Set PC6 low&lt;br /&gt;
        PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; PB7); // Set PB7 low&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unsigned char input_get(unsigned char *pin) {&lt;br /&gt;
    unsigned char port_num = pin[0] &amp;gt;&amp;gt; 4;  // Extract the port number from the pin value&lt;br /&gt;
    unsigned char pin_num = pin[0] &amp;amp; 0x0F; // Extract the pin number from the pin value&lt;br /&gt;
&lt;br /&gt;
    switch (port_num) {&lt;br /&gt;
        case 0:  // PORTB&lt;br /&gt;
            return (PINB &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 1:  // PORTC&lt;br /&gt;
            return (PINC &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        case 2:  // PORTD&lt;br /&gt;
            return (PIND &amp;gt;&amp;gt; pin_num) &amp;amp; 0x01;&lt;br /&gt;
        default:&lt;br /&gt;
            return 0;  // Invalid port number&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
int main(void) {&lt;br /&gt;
    unsigned char imasks[] = {PORTB_INPUT, PORTC_INPUT, PORTD_INPUT};&lt;br /&gt;
    unsigned char pullup[] = {0x00, 0x00, 0x01};&lt;br /&gt;
    inputs_init(imasks, pullup);&lt;br /&gt;
    unsigned char omasks[] = {PORTB_OUTPUT, PORTC_OUTPUT, PORTD_OUTPUT};&lt;br /&gt;
    outputs_init(omasks);&lt;br /&gt;
 while (1) {&lt;br /&gt;
  control_motor(1);&lt;br /&gt;
  _delay_ms(300);&lt;br /&gt;
  control_motor(0);&lt;br /&gt;
  inputs_init(imasks, pullup);&lt;br /&gt;
 }&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1181</id>
		<title>SE3Binome2022-5</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1181"/>
		<updated>2023-06-04T15:02:30Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : /* Conception de la carte électronique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==                                                                       '''&amp;lt;big&amp;gt;Présentation du projet&amp;lt;/big&amp;gt;''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Objectif&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
Concevoir un modèle de voiture 1:43 équipée d'un microcontrôleur ATMega16u2 permettant de commander la voiture en se basant sur un programme. Nous avons choisi de rajouter une option de suivi d'une ligne droite, ceci se fera à l'aide d'un capteur QRE1113gr.&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Composants&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
les composants à utiliser dans notre projet sont les suivants :&lt;br /&gt;
&lt;br /&gt;
* Un microcontrôleur ATMega16u2&lt;br /&gt;
* Un capteur QRE1113gr&lt;br /&gt;
* Un mini-moteur à courant continu&lt;br /&gt;
* Un pilote du mini-moteur à courant continu (DRV8210DRLR)&lt;br /&gt;
* Un micro-moteur glissière pas à pas &lt;br /&gt;
* Une batterie LiPo&lt;br /&gt;
* Une puce de contrôle de charge de la batterie (MAX1811)&lt;br /&gt;
* Des leds pour simuler le système d'éclairage&lt;br /&gt;
* Des résistances&lt;br /&gt;
* Des capacités&lt;br /&gt;
* Un quartz&lt;br /&gt;
* Un port USB&lt;br /&gt;
*Des diodes&lt;br /&gt;
*Un AVR-ISP 6&lt;br /&gt;
*Des connecteurs&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Caractéristiques et limites de notre système&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
==== caractéristiques ====&lt;br /&gt;
Pour comprendre le fonctionnement de suivi de ligne souhaité, il faut d'abord comprendre le fonctionnement du capteur QRE. C'est un capteur de réflexion infrarouge, il est utilisé pour détecter la présence ou l'absence d'objets réfléchissants à proximité. Il se compose d'une LED infrarouge émettant de la lumière infrarouge et d'un phototransistor qui mesure la quantité de lumière réfléchie. Lorsqu'un objet se trouve devant le capteur, il réfléchit la lumière infrarouge émise par la LED vers le phototransistor. Le phototransistor détecte cette lumière réfléchie et génère un courant proportionnel à son intensité. La valeur mesurée par le capteur dépend de la quantité de lumière infrarouge réfléchie par l'objet. Si l'objet est réfléchissant et renvoie une grande quantité de lumière infrarouge, le phototransistor générera un courant plus élevé, ce qui se traduira par une valeur positive lorsqu'elle est lue par le microcontrôleur. En revanche, si aucun objet réfléchissant n'est présent devant le capteur, la quantité de lumière infrarouge réfléchie sera faible. Par conséquent, le phototransistor générera un courant plus faible ou nul, ce qui se traduira par une valeur de capteur égale à zéro lorsqu'elle est lue par le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
==== Limites ====&lt;br /&gt;
Les composants cités ci-dessus étaient soudés et utilisés dans notre carte, sauf la batterie et sa puce de contrôle, les diodes, l'AVR-ISP et quelques capacités de filtrage de bruit ainsi que les connecteurs.&lt;br /&gt;
&lt;br /&gt;
Pour réinitialiser le microprocesseur afin de mettre un nouveau code, il faut à chaque fois utiliser un fil entre la masse et la broche de reset du AVR-ISP. Le rajout d'un bouton aurait était mieux.&lt;br /&gt;
&lt;br /&gt;
Lors du routage de la carte, nous n'avons pas fait attention que le capteur doit être placé en bas, afin de détecter la ligne. &lt;br /&gt;
&lt;br /&gt;
Après avoir fini le code pour tester le mini-moteur dc, nous nous rendons compte que le microprocessur n'est plus détectable en utilisant la commande lsusb. Nous avons vérifié les connections, essayé de changer le port usb mais sans résultat (pourtant que les leds et le capteur marchait bien). Nous avons alors tester le code sur la carte du groupe 2 en ajustant un peu la structure et en supprimant les parties correspondantes au capteur. &lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Avancement du projet&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
==== le 14/02 : ====&lt;br /&gt;
- Compréhension de l'idée directrice du projet &lt;br /&gt;
&lt;br /&gt;
- Recherche de l'option à rajouter&lt;br /&gt;
&lt;br /&gt;
==== le 28/02 : ====&lt;br /&gt;
- Début de conception de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 21/03 : ====&lt;br /&gt;
- début du rajout des empreintes des composants&lt;br /&gt;
&lt;br /&gt;
==== le 07/04 : ====&lt;br /&gt;
- Fin de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 13/04 : ====&lt;br /&gt;
- Fin du routage de la carte&lt;br /&gt;
&lt;br /&gt;
- Envoi du modèle aux enseignants pour le valider et commander la carte&lt;br /&gt;
&lt;br /&gt;
==== le 02/05: ====&lt;br /&gt;
- Réception de la carte &lt;br /&gt;
&lt;br /&gt;
- Soudure de quelques résistances et capacités&lt;br /&gt;
&lt;br /&gt;
==== le 09/05: ====&lt;br /&gt;
- Les composants suivants sont déjà soudés par l'enseignant : ATMega16u2, le quartz&lt;br /&gt;
&lt;br /&gt;
- Rajout des leds et des résistances restantes&lt;br /&gt;
&lt;br /&gt;
- Début du code pour tester les leds&lt;br /&gt;
&lt;br /&gt;
==== le 16/05: ====&lt;br /&gt;
- Fin du code pour tester les leds&lt;br /&gt;
&lt;br /&gt;
- Réorganisation de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 23/05: ====&lt;br /&gt;
- Soudure du capteur&lt;br /&gt;
&lt;br /&gt;
- Implémentation du code pour tester le capteur&lt;br /&gt;
&lt;br /&gt;
- Soudure du mini-moteur dc &lt;br /&gt;
&lt;br /&gt;
==== le 29/05: ====&lt;br /&gt;
- Soudure du micro-moteur pas à pas &lt;br /&gt;
&lt;br /&gt;
- Implémentation du code pour tester le mini-moteur dc&lt;br /&gt;
&lt;br /&gt;
==== le 03/06: ====&lt;br /&gt;
- Teste du code de moteur sur la carte du groupe 2&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GIT&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
le lien de notre archive GIT : https://archives.plil.fr/yelqasta/pse-g5.git&lt;br /&gt;
&lt;br /&gt;
== '''Conception de la carte électronique''' ==&lt;br /&gt;
&lt;br /&gt;
=== Composants et empreintes créés ===&lt;br /&gt;
nous avons créer le symbole du pilote du moteur DC via Kicad :&lt;br /&gt;
[[Fichier:Driver.png|vignette|250x250px|centré|Symbole du pilote DRV8210DRLR]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir mesurer les dimensions du mini-moteur continu on a pu créer l'empreinte suivante : &lt;br /&gt;
[[Fichier:Dc moteur.png|centré|vignette|Empreinte du mini-moteur dc]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''schéma''' &lt;br /&gt;
&lt;br /&gt;
Réalisation du schématique du PCB sur le logiciel KiCad : [[Fichier:Schématique de la carte.png|centré|vignette|439x439px|schématique]]lors de la phase de soudure, l'enseignant nous a mentionné que le schéma du capteur n'est pas bon. Nous avons pu corriger le problème avec l'aide de l'enseignant en se basant sur le schéma suivant : https://cdn.sparkfun.com/datasheets/Sensors/Proximity/QRE1113-Digital-Breakout-v11.pdf &lt;br /&gt;
&lt;br /&gt;
=== '''Visual 3D''' ===&lt;br /&gt;
[[Fichier:Voiture 3D.png|vignette|502x502px|visualisation 3D de la carte |centré]]&lt;br /&gt;
&lt;br /&gt;
=== '''Routage de la carte''' ===&lt;br /&gt;
[[Fichier:Routage de la carte .png|centré|vignette|670x670px|carte routée]]&lt;br /&gt;
&lt;br /&gt;
=== '''Carte imprimée''' ===&lt;br /&gt;
la carte imprimée et soudure du capteur, leds, résistances et microcontrôleur ATMega16U2 :                                                                                                                                                 &lt;br /&gt;
[[Fichier:Carte soudée entièrement.jpg|centré|vignette]]                                                                                                                                                 &lt;br /&gt;
==                                                                                                                                                   '''Premier Test de la carte''' ==&lt;br /&gt;
[[Fichier:Test.png|centré|vignette|611x611px|résultat de la commande lsusb]]&lt;br /&gt;
&lt;br /&gt;
==                                                                                       '''Programme''' ==&lt;br /&gt;
&lt;br /&gt;
=== Code de clignotement des Leds ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Vidéo en fonctionnement ====&lt;br /&gt;
[[Fichier:Clignotement des Leds.mp4|centré|vignette]]&lt;br /&gt;
&lt;br /&gt;
=== '''Code du suiveur QRE1113GR''' ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Vidéo en fonctionnement ====&lt;br /&gt;
[[Fichier:Test du capteur.mp4|centré|vignette]]&lt;br /&gt;
&lt;br /&gt;
==                                                                                    '''Soudure des moteurs''' ==&lt;br /&gt;
Nous avons soudé le pilote du mini-moteur dc, le mini-moteur DC et le micro-moteur glissière pas à pas.[[Fichier:Soudure.jpg|gauche|vignette]]&lt;br /&gt;
[[Fichier:Photo.jpg|vignette]]Vidéo du fonctionnement du mini-moteur dc&lt;br /&gt;
&lt;br /&gt;
Comme indiqué, nous nous pouvions plus programmer le microprocesseur. Pour cela , nous avons testé notre code sur la carte du groupe 2 :&lt;br /&gt;
[[Fichier:Vidéo moteur dc.mov|vignette]]&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Fichier:Vid%C3%A9o_moteur_dc.mov&amp;diff=1180</id>
		<title>Fichier:Vidéo moteur dc.mov</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Fichier:Vid%C3%A9o_moteur_dc.mov&amp;diff=1180"/>
		<updated>2023-06-04T15:01:54Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vidéo du moteur dc&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1175</id>
		<title>SE3Binome2022-5</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1175"/>
		<updated>2023-06-04T14:39:20Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : /* Limites */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==                                                                       '''&amp;lt;big&amp;gt;Présentation du projet&amp;lt;/big&amp;gt;''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Objectif&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
Concevoir un modèle de voiture 1:43 équipée d'un microcontrôleur ATMega16u2 permettant de commander la voiture en se basant sur un programme. Nous avons choisi de rajouter une option de suivi d'une ligne droite, ceci se fera à l'aide d'un capteur QRE1113gr.&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Composants&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
les composants à utiliser dans notre projet sont les suivants :&lt;br /&gt;
&lt;br /&gt;
* Un microcontrôleur ATMega16u2&lt;br /&gt;
* Un capteur QRE1113gr&lt;br /&gt;
* Un mini-moteur à courant continu&lt;br /&gt;
* Un pilote du mini-moteur à courant continu (DRV8210DRLR)&lt;br /&gt;
* Un micro-moteur glissière pas à pas &lt;br /&gt;
* Une batterie LiPo&lt;br /&gt;
* Une puce de contrôle de charge de la batterie (MAX1811)&lt;br /&gt;
* Des leds pour simuler le système d'éclairage&lt;br /&gt;
* Des résistances&lt;br /&gt;
* Des capacités&lt;br /&gt;
* Un quartz&lt;br /&gt;
* Un port USB&lt;br /&gt;
*Des diodes&lt;br /&gt;
*Un AVR-ISP 6&lt;br /&gt;
*Des connecteurs&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Caractéristiques et limites de notre système&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
==== caractéristiques ====&lt;br /&gt;
Pour comprendre le fonctionnement de suivi de ligne souhaité, il faut d'abord comprendre le fonctionnement du capteur QRE. C'est un capteur de réflexion infrarouge, il est utilisé pour détecter la présence ou l'absence d'objets réfléchissants à proximité. Il se compose d'une LED infrarouge émettant de la lumière infrarouge et d'un phototransistor qui mesure la quantité de lumière réfléchie. Lorsqu'un objet se trouve devant le capteur, il réfléchit la lumière infrarouge émise par la LED vers le phototransistor. Le phototransistor détecte cette lumière réfléchie et génère un courant proportionnel à son intensité. La valeur mesurée par le capteur dépend de la quantité de lumière infrarouge réfléchie par l'objet. Si l'objet est réfléchissant et renvoie une grande quantité de lumière infrarouge, le phototransistor générera un courant plus élevé, ce qui se traduira par une valeur positive lorsqu'elle est lue par le microcontrôleur. En revanche, si aucun objet réfléchissant n'est présent devant le capteur, la quantité de lumière infrarouge réfléchie sera faible. Par conséquent, le phototransistor générera un courant plus faible ou nul, ce qui se traduira par une valeur de capteur égale à zéro lorsqu'elle est lue par le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
==== Limites ====&lt;br /&gt;
Les composants cités ci-dessus étaient soudés et utilisés dans notre carte, sauf la batterie et sa puce de contrôle, les diodes, l'AVR-ISP et quelques capacités de filtrage de bruit ainsi que les connecteurs.&lt;br /&gt;
&lt;br /&gt;
Pour réinitialiser le microprocesseur afin de mettre un nouveau code, il faut à chaque fois utiliser un fil entre la masse et la broche de reset du AVR-ISP. Le rajout d'un bouton aurait était mieux.&lt;br /&gt;
&lt;br /&gt;
Lors du routage de la carte, nous n'avons pas fait attention que le capteur doit être placé en bas, afin de détecter la ligne. &lt;br /&gt;
&lt;br /&gt;
Après avoir fini le code pour tester le mini-moteur dc, nous nous rendons compte que le microprocessur n'est plus détectable en utilisant la commande lsusb. Nous avons vérifié les connections, essayé de changer le port usb mais sans résultat (pourtant les leds et le capteur marchait bien). Nous avons alors tester le code sur la carte du groupe 2 en ajustant un peu la structure et en supprimant les parties correspondantes au capteur. &lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Avancement du projet&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
==== le 14/02 : ====&lt;br /&gt;
- Compréhension de l'idée directrice du projet &lt;br /&gt;
&lt;br /&gt;
- Recherche de l'option à rajouter&lt;br /&gt;
&lt;br /&gt;
==== le 28/02 : ====&lt;br /&gt;
- Début de conception de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 21/03 : ====&lt;br /&gt;
- début du rajout des empreintes des composants&lt;br /&gt;
&lt;br /&gt;
==== le 07/04 : ====&lt;br /&gt;
- Fin de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 13/04 : ====&lt;br /&gt;
- Fin du routage de la carte&lt;br /&gt;
&lt;br /&gt;
- Envoi du modèle aux enseignants pour le valider et commander la carte&lt;br /&gt;
&lt;br /&gt;
==== le 02/05: ====&lt;br /&gt;
- Réception de la carte &lt;br /&gt;
&lt;br /&gt;
- Soudure de quelques résistances et capacités&lt;br /&gt;
&lt;br /&gt;
==== le 09/05: ====&lt;br /&gt;
- Les composants suivants sont déjà soudés par l'enseignant : ATMega16u2, le quartz, DRV8210DRLR&lt;br /&gt;
&lt;br /&gt;
- Rajout des leds et des résistances restantes&lt;br /&gt;
&lt;br /&gt;
- Début du code pour tester les leds&lt;br /&gt;
&lt;br /&gt;
==== le 16/05: ====&lt;br /&gt;
- Fin du code pour tester les leds&lt;br /&gt;
&lt;br /&gt;
- Réorganisation de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 23/05: ====&lt;br /&gt;
- Soudure du capteur&lt;br /&gt;
&lt;br /&gt;
- Implémentation du code pour tester le capteur&lt;br /&gt;
&lt;br /&gt;
- Soudure du mini-moteur dc &lt;br /&gt;
&lt;br /&gt;
==== le 29/05: ====&lt;br /&gt;
- Soudure du micro-moteur pas à pas &lt;br /&gt;
&lt;br /&gt;
- Implémentation du code pour tester le mini-moteur dc&lt;br /&gt;
&lt;br /&gt;
==== le 03/06: ====&lt;br /&gt;
- Teste du code de moteur sur la carte du groupe 2&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GIT&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
le lien de notre archive GIT : https://archives.plil.fr/yelqasta/pse-g5.git&lt;br /&gt;
&lt;br /&gt;
== '''Conception de la carte électronique''' ==&lt;br /&gt;
&lt;br /&gt;
=== Composants et empreintes créés ===&lt;br /&gt;
nous avons créer le symbole du pilote du moteur DC via Kicad :&lt;br /&gt;
[[Fichier:Driver.png|vignette|250x250px|centré|Symbole du pilote DRV8210DRLR]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir mesurer les dimensions du mini-moteur continu on a pu créer l'empreinte suivante : &lt;br /&gt;
[[Fichier:Dc moteur.png|centré|vignette|Empreinte du mini-moteur dc]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''schéma''' &lt;br /&gt;
&lt;br /&gt;
Réalisation du schématique du PCB sur le logiciel KiCad : [[Fichier:Schématique de la carte.png|centré|vignette|439x439px|schématique]]lors de la phase de soudure, l'enseignant nous a mentionné que le schéma du capteur n'est pas bon. Nous avons pu corriger le problème avec l'aide de l'enseignant en se basant sur le schéma suivant : https://cdn.sparkfun.com/datasheets/Sensors/Proximity/QRE1113-Digital-Breakout-v11.pdf &lt;br /&gt;
&lt;br /&gt;
=== '''Visual 3D''' ===&lt;br /&gt;
[[Fichier:Voiture 3D.png|vignette|502x502px|visualisation 3D de la carte |centré]]&lt;br /&gt;
&lt;br /&gt;
=== '''Routage de la carte''' ===&lt;br /&gt;
[[Fichier:Routage de la carte .png|centré|vignette|670x670px|carte routée]]&lt;br /&gt;
&lt;br /&gt;
=== '''Carte imprimée''' ===&lt;br /&gt;
la carte imprimée et soudure du capteur, leds, résistances et microcontrôleur ATMega16U2 :                                                                                                                                                 &lt;br /&gt;
[[Fichier:Carte soudée entièrement.jpg|centré|vignette]]                                                                                                                                                 &lt;br /&gt;
==                                                                                                                                                   '''Premier Test de la carte''' ==&lt;br /&gt;
[[Fichier:Test.png|centré|vignette|611x611px|résultat de la commande lsusb]]&lt;br /&gt;
&lt;br /&gt;
==                                                                                       '''Programme''' ==&lt;br /&gt;
&lt;br /&gt;
=== Code de clignotement des Leds ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Vidéo en fonctionnement ====&lt;br /&gt;
[[Fichier:Clignotement des Leds.mp4|centré|vignette]]&lt;br /&gt;
&lt;br /&gt;
=== '''Code du suiveur QRE1113GR''' ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Vidéo en fonctionnement ====&lt;br /&gt;
[[Fichier:Test du capteur.mp4|centré|vignette]]&lt;br /&gt;
&lt;br /&gt;
==                                                                                    '''Soudure des moteurs''' ==&lt;br /&gt;
Nous avons soudé le driver, le moteur DC et le Micro-moteur glissière pas à pas.[[Fichier:Soudure.jpg|gauche|vignette]]&lt;br /&gt;
[[Fichier:Photo.jpg|vignette]]&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1172</id>
		<title>SE3Binome2022-5</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1172"/>
		<updated>2023-06-04T14:25:52Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : /* le 02/05: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==                                                                       '''&amp;lt;big&amp;gt;Présentation du projet&amp;lt;/big&amp;gt;''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Objectif&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
Concevoir un modèle de voiture 1:43 équipée d'un microcontrôleur ATMega16u2 permettant de commander la voiture en se basant sur un programme. Nous avons choisi de rajouter une option de suivi d'une ligne droite, ceci se fera à l'aide d'un capteur QRE1113gr.&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Composants&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
les composants à utiliser dans notre projet sont les suivants :&lt;br /&gt;
&lt;br /&gt;
* Un microcontrôleur ATMega16u2&lt;br /&gt;
* Un capteur QRE1113gr&lt;br /&gt;
* Un mini-moteur à courant continu&lt;br /&gt;
* Un pilote du mini-moteur à courant continu (DRV8210DRLR)&lt;br /&gt;
* Un micro-moteur glissière pas à pas &lt;br /&gt;
* Une batterie LiPo&lt;br /&gt;
* Une puce de contrôle de charge de la batterie (MAX1811)&lt;br /&gt;
* Des leds pour simuler le système d'éclairage&lt;br /&gt;
* Des résistances&lt;br /&gt;
* Des capacités&lt;br /&gt;
* Un quartz&lt;br /&gt;
* Un port USB&lt;br /&gt;
*Des diodes&lt;br /&gt;
*Un AVR-ISP 6&lt;br /&gt;
*Des connecteurs&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Caractéristiques et limites de notre système&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
==== caractéristiques ====&lt;br /&gt;
Pour comprendre le fonctionnement de suivi de ligne souhaité, il faut d'abord comprendre le fonctionnement du capteur QRE. C'est un capteur de réflexion infrarouge, il est utilisé pour détecter la présence ou l'absence d'objets réfléchissants à proximité. Il se compose d'une LED infrarouge émettant de la lumière infrarouge et d'un phototransistor qui mesure la quantité de lumière réfléchie. Lorsqu'un objet se trouve devant le capteur, il réfléchit la lumière infrarouge émise par la LED vers le phototransistor. Le phototransistor détecte cette lumière réfléchie et génère un courant proportionnel à son intensité. La valeur mesurée par le capteur dépend de la quantité de lumière infrarouge réfléchie par l'objet. Si l'objet est réfléchissant et renvoie une grande quantité de lumière infrarouge, le phototransistor générera un courant plus élevé, ce qui se traduira par une valeur positive lorsqu'elle est lue par le microcontrôleur. En revanche, si aucun objet réfléchissant n'est présent devant le capteur, la quantité de lumière infrarouge réfléchie sera faible. Par conséquent, le phototransistor générera un courant plus faible ou nul, ce qui se traduira par une valeur de capteur égale à zéro lorsqu'elle est lue par le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
==== Limites ====&lt;br /&gt;
Les composants cités ci-dessus étaient soudés et utilisés dans notre carte, sauf la batterie et sa puce de contrôle, les diodes, l'AVR-ISP et quelques capacités de filtrage de bruit ainsi que les connecteurs.&lt;br /&gt;
&lt;br /&gt;
Pour réinitialiser le microprocesseur afin de mettre un nouveau code, il faut à chaque fois utiliser un fil entre la masse et la broche de reset du AVR-ISP. Le rajout d'un bouton aurait était mieux.&lt;br /&gt;
&lt;br /&gt;
Lors du routage de la carte, nous n'avons pas fait attention que le capteur doit être placé en bas, afin de détecter la ligne. &lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Avancement du projet&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
==== le 14/02 : ====&lt;br /&gt;
- Compréhension de l'idée directrice du projet &lt;br /&gt;
&lt;br /&gt;
- Recherche de l'option à rajouter&lt;br /&gt;
&lt;br /&gt;
==== le 28/02 : ====&lt;br /&gt;
- Début de conception de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 07/04 : ====&lt;br /&gt;
- Fin de la schématique&lt;br /&gt;
&lt;br /&gt;
- Début du rajout des empreintes des composants&lt;br /&gt;
&lt;br /&gt;
==== le 13/04 : ====&lt;br /&gt;
- Fin du routage de la carte&lt;br /&gt;
&lt;br /&gt;
- Envoi du modèle aux enseignants pour le valider et commander la carte&lt;br /&gt;
&lt;br /&gt;
==== le 02/05: ====&lt;br /&gt;
- Réception de la carte &lt;br /&gt;
&lt;br /&gt;
- Soudure de quelques résistances et capacités&lt;br /&gt;
&lt;br /&gt;
==== le 09/05: ====&lt;br /&gt;
- Les composants suivants sont déjà soudés par l'enseignant : ATMega16u2, le quartz, DRV8210DRLR&lt;br /&gt;
&lt;br /&gt;
- Rajout des leds et des résistances restantes&lt;br /&gt;
&lt;br /&gt;
- Début du code pour tester les leds&lt;br /&gt;
&lt;br /&gt;
==== le 16/05: ====&lt;br /&gt;
- Fin du code pour tester les leds&lt;br /&gt;
&lt;br /&gt;
- Réorganisation de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 23/05: ====&lt;br /&gt;
- Soudure du capteur&lt;br /&gt;
&lt;br /&gt;
- Implémentation du code pour tester le capteur&lt;br /&gt;
&lt;br /&gt;
- Soudure du mini-moteur dc &lt;br /&gt;
&lt;br /&gt;
==== le 29/05: ====&lt;br /&gt;
- Soudure du micro-moteur pas à pas &lt;br /&gt;
&lt;br /&gt;
- Implémentation du code pour tester le mini-moteur dc&lt;br /&gt;
&lt;br /&gt;
==== le 03/06: ====&lt;br /&gt;
- Teste du code de moteur sur la carte du groupe 2&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GIT&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
le lien de notre archive GIT : https://archives.plil.fr/yelqasta/pse-g5.git&lt;br /&gt;
&lt;br /&gt;
== '''Conception de la carte électronique''' ==&lt;br /&gt;
&lt;br /&gt;
=== Composants et empreintes créés ===&lt;br /&gt;
nous avons créer le symbole du pilote du moteur DC via Kicad :&lt;br /&gt;
[[Fichier:Driver.png|vignette|250x250px|centré|Symbole du pilote DRV8210DRLR]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir mesurer les dimensions du mini-moteur continu on a pu créer l'empreinte suivante : &lt;br /&gt;
[[Fichier:Dc moteur.png|centré|vignette|Empreinte du mini-moteur dc]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''schéma''' &lt;br /&gt;
&lt;br /&gt;
Réalisation du schématique du PCB sur le logiciel KiCad : [[Fichier:Schématique de la carte.png|centré|vignette|439x439px|schématique]]lors de la phase de soudure, l'enseignant nous a mentionné que le schéma du capteur n'est pas bon. Nous avons pu corriger le problème avec l'aide de l'enseignant en se basant sur le schéma suivant : https://cdn.sparkfun.com/datasheets/Sensors/Proximity/QRE1113-Digital-Breakout-v11.pdf &lt;br /&gt;
&lt;br /&gt;
=== '''Visual 3D''' ===&lt;br /&gt;
[[Fichier:Voiture 3D.png|vignette|502x502px|visualisation 3D de la carte |centré]]&lt;br /&gt;
&lt;br /&gt;
=== '''Routage de la carte''' ===&lt;br /&gt;
[[Fichier:Routage de la carte .png|centré|vignette|670x670px|carte routée]]&lt;br /&gt;
&lt;br /&gt;
=== '''Carte imprimée''' ===&lt;br /&gt;
la carte imprimée et soudure du capteur, leds, résistances et microcontrôleur ATMega16U2 :                                                                                                                                                 &lt;br /&gt;
[[Fichier:Carte soudée entièrement.jpg|centré|vignette]]                                                                                                                                                 &lt;br /&gt;
==                                                                                                                                                   '''Premier Test de la carte''' ==&lt;br /&gt;
[[Fichier:Test.png|centré|vignette|611x611px|résultat de la commande lsusb]]&lt;br /&gt;
&lt;br /&gt;
==                                                                                       '''Programme''' ==&lt;br /&gt;
&lt;br /&gt;
=== Code de clignotement des Leds ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Vidéo en fonctionnement ====&lt;br /&gt;
[[Fichier:Clignotement des Leds.mp4|centré|vignette]]&lt;br /&gt;
&lt;br /&gt;
=== '''Code du suiveur QRE1113GR''' ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Vidéo en fonctionnement ====&lt;br /&gt;
[[Fichier:Test du capteur.mp4|centré|vignette]]&lt;br /&gt;
&lt;br /&gt;
==                                                                                    '''Soudure des moteurs''' ==&lt;br /&gt;
Nous avons soudé le driver, le moteur DC et le Micro-moteur glissière pas à pas.[[Fichier:Soudure.jpg|gauche|vignette]]&lt;br /&gt;
[[Fichier:Photo.jpg|vignette]]&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1168</id>
		<title>SE3Binome2022-5</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1168"/>
		<updated>2023-06-04T14:08:09Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : /* Présentation du projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==                                                                       '''&amp;lt;big&amp;gt;Présentation du projet&amp;lt;/big&amp;gt;''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Objectif&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
Concevoir un modèle de voiture 1:43 équipée d'un microcontrôleur ATMega16u2 permettant de commander la voiture en se basant sur un programme. Nous avons choisi de rajouter une option de suivi d'une ligne droite, ceci se fera à l'aide d'un capteur QRE1113gr.&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Composants&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
les composants à utiliser dans notre projet sont les suivants :&lt;br /&gt;
&lt;br /&gt;
* Un microcontrôleur ATMega16u2&lt;br /&gt;
* Un capteur QRE1113gr&lt;br /&gt;
* Un mini-moteur à courant continu&lt;br /&gt;
* Un pilote du mini-moteur à courant continu (DRV8210DRLR)&lt;br /&gt;
* Un micro-moteur glissière pas à pas &lt;br /&gt;
* Une batterie LiPo&lt;br /&gt;
* Une puce de contrôle de charge de la batterie (MAX1811)&lt;br /&gt;
* Des leds pour simuler le système d'éclairage&lt;br /&gt;
* Des résistances&lt;br /&gt;
* Des capacités&lt;br /&gt;
* Un quartz&lt;br /&gt;
* Un port USB&lt;br /&gt;
*Des diodes&lt;br /&gt;
*Un AVR-ISP 6&lt;br /&gt;
*Des connecteurs&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Caractéristiques et limites de notre système&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
==== caractéristiques ====&lt;br /&gt;
Pour comprendre le fonctionnement de suivi de ligne souhaité, il faut d'abord comprendre le fonctionnement du capteur QRE. C'est un capteur de réflexion infrarouge, il est utilisé pour détecter la présence ou l'absence d'objets réfléchissants à proximité. Il se compose d'une LED infrarouge émettant de la lumière infrarouge et d'un phototransistor qui mesure la quantité de lumière réfléchie. Lorsqu'un objet se trouve devant le capteur, il réfléchit la lumière infrarouge émise par la LED vers le phototransistor. Le phototransistor détecte cette lumière réfléchie et génère un courant proportionnel à son intensité. La valeur mesurée par le capteur dépend de la quantité de lumière infrarouge réfléchie par l'objet. Si l'objet est réfléchissant et renvoie une grande quantité de lumière infrarouge, le phototransistor générera un courant plus élevé, ce qui se traduira par une valeur positive lorsqu'elle est lue par le microcontrôleur. En revanche, si aucun objet réfléchissant n'est présent devant le capteur, la quantité de lumière infrarouge réfléchie sera faible. Par conséquent, le phototransistor générera un courant plus faible ou nul, ce qui se traduira par une valeur de capteur égale à zéro lorsqu'elle est lue par le microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
==== Limites ====&lt;br /&gt;
Les composants cités ci-dessus étaient soudés et utilisés dans notre carte, sauf la batterie et sa puce de contrôle, les diodes, l'AVR-ISP et quelques capacités de filtrage de bruit ainsi que les connecteurs.&lt;br /&gt;
&lt;br /&gt;
Pour réinitialiser le microprocesseur afin de mettre un nouveau code, il faut à chaque fois utiliser un fil entre la masse et la broche de reset du AVR-ISP. Le rajout d'un bouton aurait était mieux.&lt;br /&gt;
&lt;br /&gt;
Lors du routage de la carte, nous n'avons pas fait attention que le capteur doit être placé en bas, afin de détecter la ligne. &lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Avancement du projet&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
==== le 14/02 : ====&lt;br /&gt;
- Compréhension de l'idée directrice du projet &lt;br /&gt;
&lt;br /&gt;
- Recherche de l'option à rajouter&lt;br /&gt;
&lt;br /&gt;
==== le 28/02 : ====&lt;br /&gt;
- Début de conception de la schématique&lt;br /&gt;
&lt;br /&gt;
==== le 07/04 : ====&lt;br /&gt;
- Fin de la schématique&lt;br /&gt;
&lt;br /&gt;
- Début du rajout des empreintes des composants&lt;br /&gt;
&lt;br /&gt;
==== le 13/04 : ====&lt;br /&gt;
- Fin du routage de la carte&lt;br /&gt;
&lt;br /&gt;
- Envoi du modèle aux enseignants pour le valider et commander la carte&lt;br /&gt;
&lt;br /&gt;
==== le 02/05: ====&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GIT&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
le lien de notre archive GIT : https://archives.plil.fr/yelqasta/pse-g5.git&lt;br /&gt;
&lt;br /&gt;
== '''Conception de la carte électronique''' ==&lt;br /&gt;
&lt;br /&gt;
=== Composants et empreintes créés ===&lt;br /&gt;
nous avons créer le symbole du pilote du moteur DC via Kicad :&lt;br /&gt;
[[Fichier:Driver.png|vignette|250x250px|centré|Symbole du pilote DRV8210DRLR]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir mesurer les dimensions du mini-moteur continu on a pu créer l'empreinte suivante : &lt;br /&gt;
[[Fichier:Dc moteur.png|centré|vignette|Empreinte du mini-moteur dc]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''schéma''' &lt;br /&gt;
&lt;br /&gt;
Réalisation du schématique du PCB sur le logiciel KiCad : [[Fichier:Schématique de la carte.png|centré|vignette|439x439px|schématique]]lors de la phase de soudure, l'enseignant nous a mentionné que le schéma du capteur n'est pas bon. Nous avons pu corriger le problème avec l'aide de l'enseignant en se basant sur le schéma suivant : https://cdn.sparkfun.com/datasheets/Sensors/Proximity/QRE1113-Digital-Breakout-v11.pdf &lt;br /&gt;
&lt;br /&gt;
=== '''Visual 3D''' ===&lt;br /&gt;
[[Fichier:Voiture 3D.png|vignette|502x502px|visualisation 3D de la carte |centré]]&lt;br /&gt;
&lt;br /&gt;
=== '''Routage de la carte''' ===&lt;br /&gt;
[[Fichier:Routage de la carte .png|centré|vignette|670x670px|carte routée]]&lt;br /&gt;
&lt;br /&gt;
=== '''Carte imprimée''' ===&lt;br /&gt;
la carte imprimée et soudure du capteur, leds, résistances et microcontrôleur ATMega16U2 :                                                                                                                                                 &lt;br /&gt;
[[Fichier:Carte soudée entièrement.jpg|centré|vignette]]                                                                                                                                                 &lt;br /&gt;
==                                                                                                                                                   '''Premier Test de la carte''' ==&lt;br /&gt;
[[Fichier:Test.png|centré|vignette|611x611px|résultat de la commande lsusb]]&lt;br /&gt;
&lt;br /&gt;
==                                                                                       '''Programme''' ==&lt;br /&gt;
&lt;br /&gt;
=== Code de clignotement des Leds ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Vidéo en fonctionnement ====&lt;br /&gt;
[[Fichier:Clignotement des Leds.mp4|centré|vignette]]&lt;br /&gt;
&lt;br /&gt;
=== '''Code du suiveur QRE1113GR''' ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Vidéo en fonctionnement ====&lt;br /&gt;
[[Fichier:Test du capteur.mp4|centré|vignette]]&lt;br /&gt;
&lt;br /&gt;
==                                                                                    '''Soudure des moteurs''' ==&lt;br /&gt;
Nous avons soudé le driver, le moteur DC et le Micro-moteur glissière pas à pas.[[Fichier:Soudure.jpg|gauche|vignette]]&lt;br /&gt;
[[Fichier:Photo.jpg|vignette]]&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1117</id>
		<title>SE3Binome2022-5</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1117"/>
		<updated>2023-06-04T12:51:21Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : /* Composants */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==                                                                       '''&amp;lt;big&amp;gt;Présentation du projet&amp;lt;/big&amp;gt;''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Objectif&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
Concevoir un modèle de voiture 1:43 équipée d'un microcontrôleur ATMega16u2 permettant de commander la voiture en se basant sur un programme. Nous avons choisi de rajouter une option de suivi de ligne.&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Composants&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
les composants à utiliser dans notre projet sont les suivants :&lt;br /&gt;
&lt;br /&gt;
* Un microcontrôleur ATMega16u2&lt;br /&gt;
* Un capteur QRE1113gr&lt;br /&gt;
* Un mini-moteur à courant continu&lt;br /&gt;
* Un pilote du mini-moteur à courant continu (DRV8210DRLR)&lt;br /&gt;
* Un micro-moteur glissière pas à pas &lt;br /&gt;
* Une batterie LiPo&lt;br /&gt;
* Une puce de contrôle de charge de la batterie (MAX1811)&lt;br /&gt;
* Des leds pour simuler le système d'éclairage&lt;br /&gt;
* Des résistances&lt;br /&gt;
* Des capacités&lt;br /&gt;
* Un port USB&lt;br /&gt;
*Des diodes&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Caractéristiques de notre système&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GIT&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
le lien de notre archive GIT : https://archives.plil.fr/yelqasta/pse-g5.git&lt;br /&gt;
&lt;br /&gt;
== '''Conception de la carte électronique''' ==&lt;br /&gt;
&lt;br /&gt;
=== Composants et empreintes créés ===&lt;br /&gt;
nous avons créer le symbole du pilote du moteur DC via Kicad :&lt;br /&gt;
[[Fichier:Driver.png|vignette|250x250px|centré|Symbole du pilote DRV8210DRLR]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir mesurer les dimensions du mini-moteur continu on a pu créer l'empreinte suivante : &lt;br /&gt;
[[Fichier:Dc moteur.png|centré|vignette|Empreinte du mini-moteur dc]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''schéma''' &lt;br /&gt;
&lt;br /&gt;
Réalisation du schématique du PCB sur le logiciel KiCad : [[Fichier:Schématique de la carte.png|centré|vignette|439x439px|schématique]]&lt;br /&gt;
&lt;br /&gt;
=== '''Visual 3D''' ===&lt;br /&gt;
[[Fichier:Voiture 3D.png|vignette|502x502px|visualisation de la carte |centré]]&lt;br /&gt;
&lt;br /&gt;
=== '''Routage de la carte''' ===&lt;br /&gt;
[[Fichier:Routage de la carte .png|centré|vignette|670x670px|carte routée]]&lt;br /&gt;
&lt;br /&gt;
=== '''Carte imprimée''' ===&lt;br /&gt;
la carte imprimée et soudure du capteur, leds, résistances et  microcontrôleur ATMega16U2 :                                                                                                                                                 &lt;br /&gt;
[[Fichier:Carte soudée entièrement.jpg|centré|vignette]]                                                                                                                                                 &lt;br /&gt;
==                                                                                                                                                   '''Premier Test de la carte''' ==&lt;br /&gt;
[[Fichier:Test.png|centré|vignette|611x611px|la commande lsusb]]&lt;br /&gt;
&lt;br /&gt;
==                                                                                       '''Programme''' ==&lt;br /&gt;
&lt;br /&gt;
=== Code de clignotement des Leds ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Vidéo en fonctionnement ====&lt;br /&gt;
[[Fichier:Clignotement des Leds.mp4|centré|vignette]]&lt;br /&gt;
&lt;br /&gt;
=== '''Code du suiveur QRE1113GR''' ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Vidéo en fonctionnement ====&lt;br /&gt;
[[Fichier:Test du capteur.mp4|centré|vignette]]&lt;br /&gt;
&lt;br /&gt;
==                                                                                    '''Soudure des moteurs''' ==&lt;br /&gt;
Nous avons soudé le driver, le moteur DC et le Micro-moteur glissière pas à pas.[[Fichier:Soudure.jpg|gauche|vignette]]&lt;br /&gt;
[[Fichier:Photo.jpg|vignette]]&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1106</id>
		<title>SE3Binome2022-5</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1106"/>
		<updated>2023-06-04T11:51:25Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : /* Présentation du projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==                                                                       '''&amp;lt;big&amp;gt;Présentation du projet&amp;lt;/big&amp;gt;''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Objectif&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
Concevoir un modèle de voiture 1:43 équipée d'un microcontrôleur ATMega16u2 permettant de commander la voiture en se basant sur un programme. Nous avons choisi de rajouter une option de suivi de ligne.&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Composants&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
les composants à utiliser dans notre projet sont les suivants :&lt;br /&gt;
&lt;br /&gt;
* Un microcontrôleur ATMega16u2&lt;br /&gt;
* Un capteur QRE1113gr&lt;br /&gt;
* Un mini-moteur à courant continu&lt;br /&gt;
* Un pilote du mini-moteur à courant continu (DRV8210DRLR)&lt;br /&gt;
* Un micro-moteur glissière pas à pas &lt;br /&gt;
* Une batterie LiPo&lt;br /&gt;
* Une puce de contrôle de charge de la batterie (MAX1811)&lt;br /&gt;
* Des leds pour simuler le système d'éclairage&lt;br /&gt;
* Des résistances&lt;br /&gt;
* Des capacités&lt;br /&gt;
* Un port USB&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;Caractéristiques de notre système&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
&lt;br /&gt;
=== '''&amp;lt;big&amp;gt;GIT&amp;lt;/big&amp;gt;''' ===&lt;br /&gt;
le lien de notre archive GIT : https://archives.plil.fr/yelqasta/pse-g5.git&lt;br /&gt;
&lt;br /&gt;
== '''Conception de la carte électronique''' ==&lt;br /&gt;
&lt;br /&gt;
=== Composants et empreintes créés ===&lt;br /&gt;
nous avons créer la schématique du Driver du moteur DC via Kicad :&lt;br /&gt;
[[Fichier:Driver.png|vignette|250x250px|centré]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir mesurer les dimensions du capteur continu avec réducteur on a pu créer l'empreinte: &lt;br /&gt;
[[Fichier:Dc moteur.png|centré|vignette]] &lt;br /&gt;
&lt;br /&gt;
'''schéma''' &lt;br /&gt;
&lt;br /&gt;
Réalisation du schématique du PCB sur le logiciel KiCad : [[Fichier:Schématique de la carte.png|centré|vignette|439x439px|schématique]]&lt;br /&gt;
&lt;br /&gt;
=== '''Visual 3D''' ===&lt;br /&gt;
[[Fichier:Voiture 3D.png|vignette|502x502px|visualisation de la carte |centré]]&lt;br /&gt;
&lt;br /&gt;
=== '''Routage de la carte''' ===&lt;br /&gt;
[[Fichier:Routage de la carte .png|centré|vignette|670x670px|carte routée]]&lt;br /&gt;
&lt;br /&gt;
=== '''Carte imprimée''' ===&lt;br /&gt;
la carte imprimée et soudure du capteur, leds, résistances et  microcontrôleur ATmega16U2 :                                                                                                                                                 &lt;br /&gt;
[[Fichier:Carte soudée entièrement.jpg|centré|vignette]]                                                                                                                                                 &lt;br /&gt;
==                                                                                                                                                   '''Premier Test de la carte''' ==&lt;br /&gt;
[[Fichier:Test.png|centré|vignette|611x611px|la commande lsusb]]&lt;br /&gt;
&lt;br /&gt;
==                                                                                       '''Programme''' ==&lt;br /&gt;
&lt;br /&gt;
=== Code de clignotement des Leds ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Vidéo en fonctionnement ====&lt;br /&gt;
[[Fichier:Clignotement des Leds.mp4|centré|vignette]]&lt;br /&gt;
&lt;br /&gt;
=== '''Code du suiveur QRE1113GR''' ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Vidéo en fonctionnement ====&lt;br /&gt;
[[Fichier:Test du capteur.mp4|centré|vignette]]&lt;br /&gt;
&lt;br /&gt;
==                                                                                    '''Soudure des moteurs''' ==&lt;br /&gt;
Nous avons soudé le driver, le moteur DC et le Micro-moteur glissière pas à pas.[[Fichier:Soudure.jpg|gauche|vignette]]&lt;br /&gt;
[[Fichier:Photo.jpg|vignette]]&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1105</id>
		<title>SE3Binome2022-5</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=1105"/>
		<updated>2023-06-04T11:44:33Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : /* Objectif */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==                                                                       '''Présentation du projet''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Objectif''' ===&lt;br /&gt;
Concevoir un modèle de voiture 1:43 équipée d'un microcontrôleur ATMega16u2 permettant de commander la voiture en se basant sur un programme. Nous avons choisi de rajouter une option de suivi de ligne.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;big&amp;gt;Composants&amp;lt;/big&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
les composants à utiliser dans notre projet sont les suivants :&lt;br /&gt;
&lt;br /&gt;
* Un microcontrôleur ATMega16u2&lt;br /&gt;
* Un capteur QRE1113gr&lt;br /&gt;
* Un mini-moteur à courant continu&lt;br /&gt;
* Un pilote du mini-moteur à courant continu (DRV8210DRLR)&lt;br /&gt;
* Un micro-moteur glissière pas à pas &lt;br /&gt;
* Une batterie LiPo&lt;br /&gt;
* Une puce de contrôle de charge de la batterie (MAX1811)&lt;br /&gt;
* Des leds pour simuler le système d'éclairage&lt;br /&gt;
* Des résistances&lt;br /&gt;
* Des capacités&lt;br /&gt;
* Un port USB&lt;br /&gt;
&lt;br /&gt;
=== '''Caractéristiques de notre système''' ===&lt;br /&gt;
&lt;br /&gt;
=== '''GIT''' ===&lt;br /&gt;
l'URL HTTPS de l'archive GIT : https://archives.plil.fr/yelqasta/pse-g5.git&lt;br /&gt;
&lt;br /&gt;
== '''Conception de la carte électronique''' ==&lt;br /&gt;
&lt;br /&gt;
=== Composants et empreintes créés ===&lt;br /&gt;
nous avons créer la schématique du Driver du moteur DC via Kicad :&lt;br /&gt;
[[Fichier:Driver.png|vignette|250x250px|centré]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir mesurer les dimensions du capteur continu avec réducteur on a pu créer l'empreinte: &lt;br /&gt;
[[Fichier:Dc moteur.png|centré|vignette]] &lt;br /&gt;
&lt;br /&gt;
'''schéma''' &lt;br /&gt;
&lt;br /&gt;
Réalisation du schématique du PCB sur le logiciel KiCad : [[Fichier:Schématique de la carte.png|centré|vignette|439x439px|schématique]]&lt;br /&gt;
&lt;br /&gt;
=== '''Visual 3D''' ===&lt;br /&gt;
[[Fichier:Voiture 3D.png|vignette|502x502px|visualisation de la carte |centré]]&lt;br /&gt;
&lt;br /&gt;
=== '''Routage de la carte''' ===&lt;br /&gt;
[[Fichier:Routage de la carte .png|centré|vignette|670x670px|carte routée]]&lt;br /&gt;
&lt;br /&gt;
=== '''Carte imprimée''' ===&lt;br /&gt;
la carte imprimée et soudure du capteur, leds, résistances et  microcontrôleur ATmega16U2 :                                                                                                                                                 &lt;br /&gt;
[[Fichier:Carte soudée entièrement.jpg|centré|vignette]]                                                                                                                                                 &lt;br /&gt;
==                                                                                                                                                   '''Premier Test de la carte''' ==&lt;br /&gt;
[[Fichier:Test.png|centré|vignette|611x611px|la commande lsusb]]&lt;br /&gt;
&lt;br /&gt;
==                                                                                       '''Programme''' ==&lt;br /&gt;
&lt;br /&gt;
=== Code de clignotement des Leds ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Vidéo en fonctionnement ====&lt;br /&gt;
[[Fichier:Clignotement des Leds.mp4|centré|vignette]]&lt;br /&gt;
&lt;br /&gt;
=== '''Code du suiveur QRE1113GR''' ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Vidéo en fonctionnement ====&lt;br /&gt;
[[Fichier:Test du capteur.mp4|centré|vignette]]&lt;br /&gt;
&lt;br /&gt;
==                                                                                    '''Soudure des moteurs''' ==&lt;br /&gt;
Nous avons soudé le driver, le moteur DC et le Micro-moteur glissière pas à pas.[[Fichier:Soudure.jpg|gauche|vignette]]&lt;br /&gt;
[[Fichier:Photo.jpg|vignette]]&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Fichier:Sch%C3%A9matique_de_la_carte.png&amp;diff=961</id>
		<title>Fichier:Schématique de la carte.png</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Fichier:Sch%C3%A9matique_de_la_carte.png&amp;diff=961"/>
		<updated>2023-06-03T20:57:58Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : Yelqasta a téléversé une nouvelle version de Fichier:Schématique de la carte.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;schema&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Fichier:Sch%C3%A9matique_de_la_carte.png&amp;diff=960</id>
		<title>Fichier:Schématique de la carte.png</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Fichier:Sch%C3%A9matique_de_la_carte.png&amp;diff=960"/>
		<updated>2023-06-03T20:45:54Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : Yelqasta a annulé Fichier:Schématique de la carte.png vers une ancienne version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;schema&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Fichier:Sch%C3%A9matique_de_la_carte.png&amp;diff=959</id>
		<title>Fichier:Schématique de la carte.png</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Fichier:Sch%C3%A9matique_de_la_carte.png&amp;diff=959"/>
		<updated>2023-06-03T20:44:44Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : Yelqasta a téléversé une nouvelle version de Fichier:Schématique de la carte.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;schema&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=PSE_SE3_2022/2023&amp;diff=559</id>
		<title>PSE SE3 2022/2023</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=PSE_SE3_2022/2023&amp;diff=559"/>
		<updated>2023-04-12T06:26:54Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : /* Réalisation &amp;quot;programmateur AVR&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Objectif =&lt;br /&gt;
&lt;br /&gt;
Pour l'année académique 2022/2023 il demandé de motoriser un modèle réduit de voiture au 1:87ème ou au 1:43ème avec contrôle par microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Votre objectif est de concevoir votre propre modèle à l'aide des éléments présentés dans cette page. Vous ne devez pas forcément fusionner l'ensemble&lt;br /&gt;
des possibilités, d'ailleurs certaines sont incompatibles entre elles. Partir sur quelque chose de simple n'est pas infamant du moment qu'il est proprement exécuté et qu'il débouche sur un prototype fonctionnel.&lt;br /&gt;
&lt;br /&gt;
Certes si vous nous sortez une voiture au 1:87ème totalement fonctionnelle avec propulsion, roues avant directionnelles, chargeur de batterie intégré et contrôle radio nous serons enchantés et nous aurons assez peu de difficulté à vous noter. Maintenant si vous partez sur un simple chassis au 1:43ème avec propulsion utilisant de simples poulies, roue folle permettant des reculs avec virage (axe de roue non fixe) et contrôle par programmation, vous aurez rempli le contrat.&lt;br /&gt;
&lt;br /&gt;
= Mécanique =&lt;br /&gt;
&lt;br /&gt;
La partie mécanique n'est pas évaluée dans ce projet car elle est hors-sujet pour la filière. Par contre, une démonstration avec une voiture mobile est un excellent moyen de prouver que votre projet fonctionne.&lt;br /&gt;
&lt;br /&gt;
[[file:2022-chassis.png|thumb|400px|right|Image du chassis]]&lt;br /&gt;
&lt;br /&gt;
Pour vous aider nous avons modélisé un chassis avec roues avant directionnelles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
file:2022-chassis-dessus.pdf|Chassis vu de dessus&lt;br /&gt;
file:2022-chassis-dessous.pdf|Chassis vu de dessous&lt;br /&gt;
file:2022-chassis-cote-1.pdf|Chassis vu de coté&lt;br /&gt;
file:2022-chassis-cote-2.pdf|Chassis vu d'un autre coté&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le fichier &amp;lt;code&amp;gt;freeCAD&amp;lt;/code&amp;gt; du chassis [[file:chassis-2022.tar]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seconde version de chassis.&lt;br /&gt;
&lt;br /&gt;
[[file:2022-chassis2.png|thumb|400px|right|Image du chassis]]&lt;br /&gt;
&lt;br /&gt;
Pour vous aider nous avons modélisé un chassis avec roues avant directionnelles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
file:2022-chassis2-dessus.pdf|Chassis vu de dessus&lt;br /&gt;
file:2022-chassis2-dessous.pdf|Chassis vu de dessous&lt;br /&gt;
file:2022-chassis2-cote-1.pdf|Chassis vu de coté&lt;br /&gt;
file:2022-chassis2-cote-2.pdf|Chassis vu d'un autre coté&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le fichier &amp;lt;code&amp;gt;freeCAD&amp;lt;/code&amp;gt; du chassis [[file:chassis2-2022.tar]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[file:2022-roue_folle.png|thumb|200px|right|Image de la roue]]&lt;br /&gt;
&lt;br /&gt;
Vous avez aussi un modèle de principe pour une roue folle avec recul en virant.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
file:2022-roue-folle.pdf|Roue en 3D&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le fichier &amp;lt;code&amp;gt;freeCAD&amp;lt;/code&amp;gt; de la roue [[file:roue-folle-2022.tar]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au niveau accessoires vous pouvez, ou pourrez, disposer des éléments suivants :&lt;br /&gt;
* engrenages métal pour axe 0.7mm, disponibles et semblent s'adapter aux micro-moteurs simples ;&lt;br /&gt;
* vis sans fin métal pour axe de 1mm (diamètre extérieur 3,8mm), disponibles, prévues pour l'axe des voitures 1:87 ;&lt;br /&gt;
* vis sans fil plastique pour axe 2mm, disponibles mais s'adaptent mal aux axes des voitures 1:43 ;&lt;br /&gt;
* vis sans fil plastique pour axe &amp;lt;2mm, disponibles, prévues pour l'axe des voitures 1:43 ;&lt;br /&gt;
* engrenages plastiques pour axe de 3mm, disponibles, pour les moteurs continus.&lt;br /&gt;
&lt;br /&gt;
= Moteurs =&lt;br /&gt;
&lt;br /&gt;
La commande des moteurs n'est pas, elle, optionnelle.&lt;br /&gt;
&lt;br /&gt;
Plusieurs types de moteurs sont disponibles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:micro-moteur-pas-a-pas-simple.jpg|Micro-moteur pas à pas propulsion&lt;br /&gt;
File:micro-moteur-pas-a-pas-simple-dims.jpg|Dimensions du micro-moteur propulsion&lt;br /&gt;
File:micro-glissiere-pas-a-pas.jpg|Micro-moteur glissière pas à pas&lt;br /&gt;
File:micro-glissiere-pas-a-pas-dimensions.jpg|Dimensions du micro-moteur glissière&lt;br /&gt;
File:micro-glissiere-pas-a-pas-connecteurs.jpg|Connecteurs du micro-moteur glissière&lt;br /&gt;
File:mini-motoreducteur.jpg|Mini-moteur continu avec réducteur&lt;br /&gt;
File:pilote-motoreducteur.jpg|Pilote pour le mini-moteur continu (DRV8210DRLR)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[file:2022-banc-essai-micro-moteurs.jpg|thumb|250px|right|Banc d'essai des micro-moteurs]]&lt;br /&gt;
&lt;br /&gt;
Ressources pour les moteurs :&lt;br /&gt;
* les micro-moteurs peuvent éventuellement fonctionner sans pilote (alimentation directe par le microcontrôleur), il reste à vérifier que le couple obtenu suffit et que l'utilisation de plusieurs périphériques n'effondre pas le microcontrôleur ;&lt;br /&gt;
* empreintes approximatives pour les microcontrôleurs (à peaufiner) : [[file:KiCAD-lib-micro-motors.tar]] ;&lt;br /&gt;
* premier jet du PCB de coté pour le micro-moteur glissière : [[file:KiCAD-slider-side-2022.tar]] ;&lt;br /&gt;
* programme C pour les micro-moteurs pas à pas sans pilote (vidéo de démonstration ci-dessous) : [[Média:Programme_moteur_pap.tar]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[file:2022-demo-micro-moteur.mp4|500px|left|Vidéo pour le micro-moteur]]&lt;br /&gt;
[[file:2022-demo-micro-slider.mp4|500px|right|Vidéo pour le micro-moteur glissière]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Cartes électroniques =&lt;br /&gt;
&lt;br /&gt;
Vous devez concevoir une carte électronique pour contrôler la voiture. La conception doit se faire en utilisant le logiciel KiCAD.&lt;br /&gt;
&lt;br /&gt;
Il est recommandé de reporter au maximum les fonctions mécaniques sur la carte. Le chassis peut ainsi être entièrement constitué de PCB, y compris les pièces mobiles.&lt;br /&gt;
&lt;br /&gt;
Nous vous donnons deux exemples de schémas électroniques.&lt;br /&gt;
&lt;br /&gt;
== Exemple de carte pour la voiture au 1:87 ==&lt;br /&gt;
&lt;br /&gt;
Le schéma électronique de la carte :&lt;br /&gt;
[[file:2022-schema-voiture-rex.pdf|thumb|400px|center|Schéma pour une voiture 1:87]]&lt;br /&gt;
Dans le schéma vous pouvez trouver les fonctionnalités suivantes :&lt;br /&gt;
* une alimentation avec un régulateur pour passer du 5V USB à une tension de 3.3V mais aussi avec un dispositif pour sélectionner une alimentation par USB ou par batterie ;&lt;br /&gt;
* le microcontrôleur avec son horloge mais aussi son connecteur de programmation ISP et le connecteur USB ;&lt;br /&gt;
* un dispositif de recharge de la batterie LiPo avec une entrée pour tester la tension de la batterie (sur une entrée numérique donc avec peu de sensibilité) ;&lt;br /&gt;
* deux moteurs pas à pas et un système d'éclairage ;&lt;br /&gt;
* enfin un module de communication radio.&lt;br /&gt;
&lt;br /&gt;
Après le routage les cartes suivantes sont obtenues.&lt;br /&gt;
[[file:2022-PCB-voiture-rex.pdf|thumb|400px|center|Cartes pour une voiture 1:87]]&lt;br /&gt;
&lt;br /&gt;
Un total de 8 cartes sont prévues :&lt;br /&gt;
* principalement la carte chassis sur laquelle sont implantés les puces microcontrôleur, charge de LiPo et communication radio ;&lt;br /&gt;
* le moteur-glissière nécessite une micro-carte de côté pour récupérer les phases ; &lt;br /&gt;
* tous les composants ne tiennent pas sur le chassis 50x20mm, une carte fille est donc prévue pour porter l'éclairage, l'antenne radio et même des pistes supplémentaires ;&lt;br /&gt;
* 3 petites cartes sont dédiées pour recevoir les roues : deux pour les roues directionnelles et une pour le train arrière, sur ces cartes doivent êtres soudés des morceaux de tube de cuivre recevant les axes ;&lt;br /&gt;
* toujours sur le principe que la carte principale ne permet pas de recevoir tous les éléments, une carte fille permet de connecter l'ISP et une autre l'USB.&lt;br /&gt;
&lt;br /&gt;
Les cartes ont été commandées. En aucun cas il est prévu que ces cartes fonctionnent dans leur version initiale. C'est d'ailleurs la démarche &amp;quot;bureau d'études&amp;quot; que nous souhaitons que vous assimiliez. Ces cartes vont permettre d'avancer dans le projet pour éventuellement aboutir sur une seconde version des cartes. Ci-dessous sont listés les points que les premières cartes vont permettre d'éclaircir.&lt;br /&gt;
* Le microcontrôleur devrait fonctionner mais le principe des cartes filles pour la programmation ISP et DFU/USB est à valider.&lt;br /&gt;
* Il y a peu de chances pour que les empreintes pour les micro-moteurs pas à pas soient exactes mais ce devrait être une bonne base pour aboutir à une seconde version fonctionnelle.&lt;br /&gt;
* L'aspect mécanique est aussi à tester et à corriger : les roues directionnelles fonctionnent-elles ? quels problèmes sont rencontrés pour la transmission de la propulsion via l'engrenage et la vis sans fin.&lt;br /&gt;
* Le dispositif d'alimentation par USB ou par batterie est-il fonctionnel ? Le test de tension de la batterie donne-t-il quelque chose ? La recharge de la batterie par le MAX1811 marche-t-elle ?&lt;br /&gt;
* La transmission radio est-elle fonctionnelle ? En particulier les libertés prises au niveau de l'antenne sur PCB dégradent-elles beaucoup cette transmission ?&lt;br /&gt;
&lt;br /&gt;
Les sources pour le logiciel KiCAD version 5.1 : [[Média:2022-voiture-kicad-rex.tgz|Fichiers KiCAD pour la voiture 1:87]].&lt;br /&gt;
&lt;br /&gt;
Uniquement les sources pour les empreintes des moteurs pas à pas (modifiées) : [[Média:Rex-motors.zip|Empreintes KiCAD pour les moteurs pas à pas]].&lt;br /&gt;
&lt;br /&gt;
== Exemple de carte pour la voiture au 1:43 ==&lt;br /&gt;
&lt;br /&gt;
[[file:2022-schema-voiture-boe.pdf|thumb|400px|right|Schéma pour une voiture 1:43]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Le microcontrôleur ==&lt;br /&gt;
&lt;br /&gt;
Vous utiliserez un microcontrôleur ATMega16u2 comme coeur de votre circuit imprimé. Prenez exemple sur la partie microcontrôleur des schémas fournis.&lt;br /&gt;
&lt;br /&gt;
La programmation du microcontrôleur se fera par DFU USB.&lt;br /&gt;
&lt;br /&gt;
== Energie ==&lt;br /&gt;
&lt;br /&gt;
La carte électronique de votre voiture est alimentée par une batterie LiPo. La batterie peut être chargée en utilisant une puce MAX1811. Voir les schémas fournis pour avoir une idée de commencer utiliser une puce MAX1811.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:puce_max1811.jpg|Puce de contrôle de charge&lt;br /&gt;
File:batteries_LiPo.jpg|Batteries 100mAh et 300mAh, connecteur molex mâle&lt;br /&gt;
File:batterie_LiPo_FQ777.jpg|Batterie 100mAh 15x20x5mm&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les connecteurs adaptés aux batteries FQ777 ont aussi été commandés (micro JST 2 broches 1.25mm).&lt;br /&gt;
&lt;br /&gt;
== Eclairage ==&lt;br /&gt;
&lt;br /&gt;
Vous pouvez vous lâcher sur les LED pour simuler les dispositifs lumineux de votre voiture. Attention cependant votre micro-contrôleur n'a qu'un nombre limité de sorties.&lt;br /&gt;
&lt;br /&gt;
== Contrôle de la voiture ==&lt;br /&gt;
&lt;br /&gt;
=== Contrôle par programmation ===&lt;br /&gt;
&lt;br /&gt;
Il est recommandé d'utiliser la fonctionnalité USB pour pouvoir programmer le comportement de la voiture. A défaut une programmation par port série est acceptable. Le programme PC permettant d'envoyer la suite d'instructions que la voiture doit réaliser est aussi à votre charge.&lt;br /&gt;
&lt;br /&gt;
=== Radio-contrôle ===&lt;br /&gt;
&lt;br /&gt;
Vous avez deux possibilités pour la commande à distance de votre voiture, soit une communication radio classique, soit une communication BlueTooth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:module_nrf24L01.jpg|Module de communication 2,4Ghz&lt;br /&gt;
File:module_BLE.jpg|Module Bluetooth Low Energy&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les modules RF 2,4Ghz utilisent une puce NRF24L01, ces modules étant un peu encombrants, quelques puces ont été commandées pour intégration directe sur le PCB (disponibilité fin février). Vous avez un exemple d'utilisation sur le premier schéma de carte fourni plus haut. Les puces NRF24L01 doivent être alimentées en 3,3V mais ses E/S sont compatibles 5V. Il n'est donc pas obligatoire de passer l'ATMega16u2 en 3,3V.&lt;br /&gt;
&lt;br /&gt;
= Réalisation des groupes =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Numéro !! Elèves !! Page &lt;br /&gt;
|-&lt;br /&gt;
| Trinôme 1&lt;br /&gt;
| Sarra BEZZINE &amp;amp; Heriniaina ANDRIANIRINTSOA &amp;amp; Imen MLIKA&lt;br /&gt;
| [[SE3Binome2022-1|Trinôme 1 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
| Trinôme 2&lt;br /&gt;
| Younes BENMBAREK &amp;amp; Camille CARIAT &amp;amp; Abdel ZONGO&lt;br /&gt;
| [[SE3Trinome2022-2|Trinôme 2 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 3&lt;br /&gt;
| Simon CRUCHET &amp;amp; Amaury BECQUET&lt;br /&gt;
| [[SE3Binome2022-3|Binôme 3 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 4&lt;br /&gt;
| Romain DUHR &amp;amp; Louis DERYCKERE&lt;br /&gt;
| [[SE3Binome2022-4|Binôme 4 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 5&lt;br /&gt;
| Youness EL QASTALANI &amp;amp; Chaymae Rhanim&lt;br /&gt;
| [[SE3Binome2022-5|Binôme 5 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
| Trinôme 6&lt;br /&gt;
| Stephane KADER ISSACK &amp;amp; Marion NORMAND &amp;amp; Amaury DA PONTE&lt;br /&gt;
| [[SE3Trinome2022-6|Trinôme 6 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 7&lt;br /&gt;
| Alexandre BRASSEUR &amp;amp; Louis WIJSMAN&lt;br /&gt;
| [[SE3Binome2022-7|Binôme 7 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
| Trinôme 8&lt;br /&gt;
| Némo CAZIN &amp;amp; Antoine CEGARRA &amp;amp; Adrien PALIFERRO&lt;br /&gt;
| [[SE3Trinome2022-8|Trinôme 8 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 9&lt;br /&gt;
| Thomas NAVE &amp;amp; Thibault DUYCK&lt;br /&gt;
| [[SE3Binome2022-9|Binôme 9 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
| Monôme 10&lt;br /&gt;
| Adrien GONTIER&lt;br /&gt;
| [[SE3Monome2022-10|Monôme 10 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 11&lt;br /&gt;
| Taha NEHARI &amp;amp; Martin CHAUVELIERE &lt;br /&gt;
| [[SE3Binome2022-11|Binôme 11 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
Absents :&lt;br /&gt;
* Imen MLIKA&lt;br /&gt;
* Ababacar sadikh NDOYE&lt;br /&gt;
&lt;br /&gt;
= Réalisation &amp;quot;programmateur AVR&amp;quot; =&lt;br /&gt;
&lt;br /&gt;
Utilisez ces pages pour :&lt;br /&gt;
* indiquer l'URL HTTPS de votre archive GIT sur laquelle trouver le projet KiCAD et les programmes C (LUFA et libusb) ;&lt;br /&gt;
* un schéma 3D de votre PCB ;&lt;br /&gt;
* une photo de la carte soudée ;&lt;br /&gt;
* une très courte vidéo de la carte avec les LED clignotantes ;&lt;br /&gt;
* une copie écran montrant l'affichage de la communication entre votre programme libusb, votre carte et le microcontrôleur AVR.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Numéro !! Elèves !! Page &lt;br /&gt;
|-&lt;br /&gt;
| Binôme 1&lt;br /&gt;
| Simon CRUCHET &amp;amp; Amaury BECQUET &lt;br /&gt;
| [[SE3_PSE_Binome2022-1|Binôme 1 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 2&lt;br /&gt;
| Romain DUHR &amp;amp; Louis DERYCKÈRE&lt;br /&gt;
| [[SE3_PSE_Binome2022-2|Binôme 2 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 3&lt;br /&gt;
| Chaymae RHANIM &amp;amp; Heriniaina ANDRIANIRINTSOA&lt;br /&gt;
| [[SE3_PSE_Binome2022-3|Binôme 3 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 4&lt;br /&gt;
| Stéphane Kader Issack &amp;amp; Marion Normand&lt;br /&gt;
| [[SE3_PSE_Binome2022-4|Binôme 4 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 5&lt;br /&gt;
| Thomas NAVE &amp;amp; Thibault DUYCK&lt;br /&gt;
| [[SE3_PSE_Binome2022-5|Binôme 5 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 6&lt;br /&gt;
| Amaury Da Ponte&lt;br /&gt;
| [[SE3_PSE_Binome2022-6|Binôme 6 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 7&lt;br /&gt;
| Sarra Bezzine &amp;amp; Imen MLika&lt;br /&gt;
| [[SE3_PSE_Binome2022-7|Binôme 7 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 8&lt;br /&gt;
| Némo CAZIN &amp;amp; Antoine CEGARRA&lt;br /&gt;
| [[SE3_PSE_Binome2022-8|Binôme 8 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 9&lt;br /&gt;
| Alexandre BRASSEUR &amp;amp; Louis WIJSMAN&lt;br /&gt;
| [[SE3_PSE_Binome2022-9|Binôme 9 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 10&lt;br /&gt;
| Taha NEHARI &amp;amp; Martin CHAUVELIERE&lt;br /&gt;
| [[SE3_PSE_Binnome2022-10|Binôme 10 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 11&lt;br /&gt;
| Younes BENMBAREK &amp;amp; Abdel ZONGO &lt;br /&gt;
| [[SE3_PSE_Binome2022-11|Binôme 11 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
|Monôme 12&lt;br /&gt;
|Camille Cariat&lt;br /&gt;
|[[SE3_PSE_Binome2022-12|Monôme 12 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
|Binôme 13&lt;br /&gt;
|Youness EL QASTALANI &amp;amp; Adrien PALIFERRO&lt;br /&gt;
|[[Binôme 13 2022/2023]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=180</id>
		<title>SE3Binome2022-5</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=180"/>
		<updated>2023-02-14T14:52:04Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Initial idea :&lt;br /&gt;
&lt;br /&gt;
automated parking system&lt;br /&gt;
&lt;br /&gt;
Approach :&lt;br /&gt;
&lt;br /&gt;
* Line Follower system&lt;br /&gt;
* Using a ToF sensor&lt;br /&gt;
useful links:&lt;br /&gt;
&lt;br /&gt;
https://docs.rs-online.com/29df/A700000008343421.pdf?cm_mmc=FR-3P-_-SURF-_-DTC_087_0223_SE-_-STMicroelectronics&lt;br /&gt;
&lt;br /&gt;
https://www.academia.edu/32137948/Etude_et_realisation_d_un_robot_suiveur_de_ligne_part&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=172</id>
		<title>SE3Binome2022-5</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=SE3Binome2022-5&amp;diff=172"/>
		<updated>2023-02-14T14:48:27Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : premières idées&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Initial idea :&lt;br /&gt;
&lt;br /&gt;
automated parking system&lt;br /&gt;
&lt;br /&gt;
Approach :&lt;br /&gt;
&lt;br /&gt;
* Line Follower system&lt;br /&gt;
* Using a ToF sensor&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=PSE_SE3_2022/2023&amp;diff=126</id>
		<title>PSE SE3 2022/2023</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=PSE_SE3_2022/2023&amp;diff=126"/>
		<updated>2023-02-14T13:55:04Z</updated>

		<summary type="html">&lt;p&gt;Yelqasta : /* Réalisation des binômes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Objectif =&lt;br /&gt;
&lt;br /&gt;
Pour l'année académique 2022/2023 il demandé de motoriser un modèle réduit de voiture au 1:87ème ou au 1:43ème avec contrôle par microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:modele-voiture-1-87.jpg|Modéle réduit au 1:87&lt;br /&gt;
File:modele-voiture-1-43.jpg|Modéle réduit au 1:43&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Votre objectif est de concevoir votre propre modèle à l'aide des éléments présentés dans cette page. Vous ne devez pas forcément fusionner l'ensemble&lt;br /&gt;
des possibilités, d'ailleurs certaines sont incompatibles entre elles. Partir sur quelque chose de simple n'est pas infamant du moment qu'il est proprement exécuté et qu'il débouche sur un prototype fonctionnel.&lt;br /&gt;
&lt;br /&gt;
Certes si vous nous sortez une voiture au 1:87ème totalement fonctionnelle avec propulsion, roues avant directionnelles, chargeur de batterie intégré et contrôle radio nous serons enchantés et nous aurons assez peu de difficulté à vous noter. Maintenant si vous partez sur un simple chassis au 1:43ème avec propulsion utilisant de simples poulies, roue folle permettant des reculs avec virage (axe de roue non fixe) et contrôle par programmation, vous aurez rempli le contrat.&lt;br /&gt;
&lt;br /&gt;
= Mécanique =&lt;br /&gt;
&lt;br /&gt;
La partie mécanique n'est pas évaluée dans ce projet car elle est hors-sujet pour la filière. Par contre, une démonstration avec une voiture mobile est un excellent moyen de prouver que votre projet fonctionne.&lt;br /&gt;
&lt;br /&gt;
[[file:2022-chassis.png|thumb|400px|right|Image du chassis]]&lt;br /&gt;
&lt;br /&gt;
Pour vous aider nous avons modélisé un chassis avec roues avant directionnelles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
file:2022-chassis-dessus.pdf|Chassis vu de dessus&lt;br /&gt;
file:2022-chassis-dessous.pdf|Chassis vu de dessous&lt;br /&gt;
file:2022-chassis-cote-1.pdf|Chassis vu de coté&lt;br /&gt;
file:2022-chassis-cote-2.pdf|Chassis vu d'un autre coté&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le fichier &amp;lt;code&amp;gt;freeCAD&amp;lt;/code&amp;gt; du chassis [[file:chassis-2022.tar]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[file:2022-roue_folle.png|thumb|200px|right|Image de la roue]]&lt;br /&gt;
&lt;br /&gt;
Vous avez aussi un modèle de principe pour une roue folle avec recul en virant.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
file:2022-roue-folle.pdf|Roue en 3D&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le fichier &amp;lt;code&amp;gt;freeCAD&amp;lt;/code&amp;gt; de la roue [[file:roue-folle-2022.tar]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Au niveau accessoires vous pouvez, ou pourrez, disposer des éléments suivants :&lt;br /&gt;
* engrenages métal pour axe 0.7mm, disponibles et semblent s'adapter aux micro-moteurs simples ;&lt;br /&gt;
* vis sans fil plastique pour axe 2mm, disponibles mais s'adaptent mal aux axes des voitures 1:43 ;&lt;br /&gt;
* vis sans fin 3,8mm pour axe de 1mm, &amp;quot;en cours de livraison&amp;quot;, prévues pour l'axe des voitures 1:87 ;&lt;br /&gt;
* divers engrenages plastiques pour les voitures 1:43, arrivés en france ;&lt;br /&gt;
* engrenages plastique pour axe de 1mm (voitures 1:43), arrivés en france.&lt;br /&gt;
&lt;br /&gt;
= Moteurs =&lt;br /&gt;
&lt;br /&gt;
La commande des moteurs n'est pas, elle, optionnelle.&lt;br /&gt;
&lt;br /&gt;
Plusieurs types de moteurs sont disponibles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:micro-moteur-pas-a-pas-simple.jpg|Micro-moteur pas à pas propulsion&lt;br /&gt;
File:micro-moteur-pas-a-pas-simple-dims.jpg|Dimensions du micro-moteur propulsion&lt;br /&gt;
File:micro-glissiere-pas-a-pas.jpg|Micro-moteur glissière pas à pas&lt;br /&gt;
File:micro-glissiere-pas-a-pas-dimensions.jpg|Dimensions du micro-moteur glissière&lt;br /&gt;
File:micro-glissiere-pas-a-pas-connecteurs.jpg|Connecteurs du micro-moteur glissière&lt;br /&gt;
File:mini-motoreducteur.jpg|Mini-moteur continu avec réducteur&lt;br /&gt;
File:pilote-motoreducteur.jpg|Pilote pour le mini-moteur continu (DRV8210DRLR)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[file:2022-banc-essai-micro-moteurs.jpg|thumb|250px|right|Banc d'essai des micro-moteurs]]&lt;br /&gt;
&lt;br /&gt;
Ressources pour les moteurs :&lt;br /&gt;
* les micro-moteurs peuvent éventuellement fonctionner sans pilote (alimentation directe par le microcontrôleur), il reste à vérifier que le couple obtenu suffit et que l'utilisation de plusieurs périphériques n'effondre pas le microcontrôleur ;&lt;br /&gt;
* empreintes approximatives pour les microcontrôleurs (à peaufiner) : [[file:KiCAD-lib-micro-motors.tar]] ;&lt;br /&gt;
* premier jet du PCB de coté pour le micro-moteur glissière : [[file:KiCAD-slider-side-2022.tar]] ;&lt;br /&gt;
* programme C pour les micro-moteurs pas à pas sans pilote (vidéo de démonstration ci-dessous) : [[Média:Programme_moteur_pap.tar]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[file:2022-demo-micro-moteur.mp4|500px|left|Vidéo pour le micro-moteur]]&lt;br /&gt;
[[file:2022-demo-micro-slider.mp4|500px|right|Vidéo pour le micro-moteur glissière]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Carte électronique =&lt;br /&gt;
&lt;br /&gt;
Vous devez concevoir une carte électronique pour contrôler la voiture. La conception doit se faire en utilisant le logiciel KiCAD.&lt;br /&gt;
&lt;br /&gt;
Il est recommandé de reporter au maximum les fonctions mécaniques sur la carte. Le chassis peut ainsi être entièrement constitué de PCB, y compris les pièces mobiles.&lt;br /&gt;
&lt;br /&gt;
Nous vous donnons deux exemples de schémas électroniques :&lt;br /&gt;
&lt;br /&gt;
[[file:2022-schema-voiture-rex.pdf|thumb|400px|left|Schéma pour une voiture 1:87]]&lt;br /&gt;
&lt;br /&gt;
[[file:2022-schema-voiture-boe.pdf|thumb|400px|right|Schéma pour une voiture 1:43]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Le microcontrôleur ==&lt;br /&gt;
&lt;br /&gt;
Vous utiliserez un microcontrôleur ATMega16u2 comme coeur de votre circuit imprimé. Prenez exemple sur la partie microcontrôleur des schémas fournis.&lt;br /&gt;
&lt;br /&gt;
La programmation du microcontrôleur se fera par DFU USB.&lt;br /&gt;
&lt;br /&gt;
== Energie ==&lt;br /&gt;
&lt;br /&gt;
La carte électronique de votre voiture est alimentée par une batterie LiPo. La batterie peut être chargée en utilisant une puce MAX1811. Voir les schémas fournis pour avoir une idée de commencer utiliser une puce MAX1811.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:puce_max1811.jpg|Puce de contrôle de charge&lt;br /&gt;
File:batteries_LiPo.jpg|Batteries 100mAh et 300mAh, connecteur molex mâle&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Des batteries FQ777-124 mAh un peu moins encombrantes ont été commandées (disponibilité fin mars ?). Les connecteurs adaptés ont aussi été commandés (micro JST 2 broches 1.25mm).&lt;br /&gt;
&lt;br /&gt;
== Eclairage ==&lt;br /&gt;
&lt;br /&gt;
Vous pouvez vous lâcher sur les LED pour simuler les dispositifs lumineux de votre voiture. Attention cependant votre micro-contrôleur n'a qu'un nombre limité de sorties.&lt;br /&gt;
&lt;br /&gt;
== Contrôle de la voiture ==&lt;br /&gt;
&lt;br /&gt;
=== Contrôle par programmation ===&lt;br /&gt;
&lt;br /&gt;
Il est recommandé d'utiliser la fonctionnalité USB pour pouvoir programmer le comportement de la voiture. A défaut une programmation par port série est acceptable. Le programme PC permettant d'envoyer la suite d'instructions que la voiture doit réaliser est aussi à votre charge.&lt;br /&gt;
&lt;br /&gt;
=== Radio-contrôle ===&lt;br /&gt;
&lt;br /&gt;
Vous avez deux possibilités pour la commande à distance de votre voiture, soit une communication radio classique, soit une communication BlueTooth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:module_nrf24L01.jpg|Module de communication 2,4Ghz&lt;br /&gt;
File:module_BLE.jpg|Module Bluetooth Low Energy&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les modules RF 2,4Ghz utilisent une puce NRF24L01, ces modules étant un peu encombrants, quelques puces ont été commandées pour intégration directe sur le PCB (disponibilité fin février). Vous avez un exemple d'utilisation sur le premier schéma de carte fourni plus haut. Les puces NRF24L01 doivent être alimentées en 3,3V mais ses E/S sont compatibles 5V. Il n'est donc pas obligatoire de passer l'ATMega16u2 en 3,3V.&lt;br /&gt;
&lt;br /&gt;
= Réalisation des binômes =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Numéro !! Elèves !! Page &lt;br /&gt;
|-&lt;br /&gt;
| Binôme 1&lt;br /&gt;
| Sarra BEZZINE &amp;amp; Heriniaina ANDRIANIRINTSOA&lt;br /&gt;
| [[SE3Trinome2022-1|Trinôme 1 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
| Trinôme 2&lt;br /&gt;
| Younes BENMBAREK &amp;amp; Camille CARIAT &amp;amp; Abdel ZONGO&lt;br /&gt;
| [[SE3Trinome2022-2|Trinôme 2 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 3&lt;br /&gt;
| Simon CRUCHET &amp;amp; Amaury BECQUET&lt;br /&gt;
| [[SE3Trinome2022-3|Trinôme 3 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 4&lt;br /&gt;
| Romain DUHR &amp;amp; Louis DERYCKERE&lt;br /&gt;
| [[SE3Trinome2022-4|Trinôme 4 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 5&lt;br /&gt;
| Youness EL QASTALANI &amp;amp; Chaymae Rhanim&lt;br /&gt;
| [[SE3Trinome2022-5|Trinôme 5 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
| Trinôme 6&lt;br /&gt;
| Prénom NOM &amp;amp; Prénom NOM &amp;amp; Prénom NOM&lt;br /&gt;
| [[SE3Trinome2022-6|Trinôme 6 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
| Trinôme 7&lt;br /&gt;
| Prénom NOM &amp;amp; Prénom NOM &amp;amp; Prénom NOM&lt;br /&gt;
| [[SE3Trinome2022-7|Trinôme 7 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
| Trinôme 8&lt;br /&gt;
| Prénom NOM &amp;amp; Prénom NOM &amp;amp; Prénom NOM&lt;br /&gt;
| [[SE3Trinome2022-8|Trinôme 8 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
| Trinôme 9&lt;br /&gt;
| Prénom NOM &amp;amp; Prénom NOM &amp;amp; Prénom NOM&lt;br /&gt;
| [[SE3Trinome2022-9|Trinôme 9 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
| Monôme 10&lt;br /&gt;
| Adrien Gontier&lt;br /&gt;
| [[SE3Trinome2022-10|Trinôme 10 2022/2023]]&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Yelqasta</name></author>
	</entry>
</feed>