I2L 2024 Groupe3
Proposition de système
Création d'un sonar 180 degrés qui écrit des données rudimentaires sur un écran LCD et qui, lorsqu'on connecte le microcontrôleur au PC, envoi en temps réel les données au PC et génère un affichage style sonar.
On a 2 programmes :
- 1 programme qui tourne dans le microcontrôleur, il est autonome, fait tourner a l'aide d'un servo-moteur le sonar (capteur style sonar) et affiche des informationss rudimentaires sur les obstacles repérés (e.g. l'obstacle le plus proche) ;
- 1 programme qui tourne sur le PC connecté au microcontrôleur. Il récupère les données en temps réel envoyées par le microcontrôleur et affiche graphiquement le résultat ;
- 2 LED de couleur (vert et rouge), la LED verte clignote toute les 3 secondes quand le système embarqué est autonome et la LED rouge, éteinte par défaut, double clignote quand un obstacle est détecté.
A prévoir un bouton "autonomous_system" sur le microcontroleur, qui, lorsque celui-ci est branché au PC, n'envoie pas les données au PC.
Contre-proposition
OK pour la proposition.
Pour la gestion de l'écran vous pouvez vous inspirer du code des groupes 3 et 4 I2L en 2023/2024.
Vous utiliserez la classe USB "vendeur spécifique" avec des points d'accès propres à votre application. Plus exactement vous prévoierez un point d'accès sortant pour spécifier l'angle du servo-moteur et un point d'accès entrant pour récupérer la distance mesurée.
Pour l'application sur PC vous utiliserez la bibliothèque C libusb-1.0.
Il faut aussi penser à un système pour assembler le servo-moteur et le sonar. Si vous avez accès à une imprimante 3D suivez ce lien [1].
Proposition définitive
Le projet consiste en la création d’un sonar à balayage 180° capable de détecter des obstacles et d’afficher les données recueillies de deux façons complémentaires :
- Un premier programme est embarqué dans le microcontrôleur. Il pilote un capteur à ultrasons monté sur un servomoteur afin de balayer un angle de 180°. Ce programme fonctionne de manière autonome et affiche des informations rudimentaires sur un écran LCD, comme la distance de l'obstacle le plus proche détecté.
- Un second programme, exécuté sur un ordinateur connecté au microcontrôleur, reçoit en temps réel les données envoyées par celui-ci via USB. Il se charge de les représenter graphiquement sous forme d’un affichage de type sonar 180°, facilitant la visualisation des obstacles détectés dans l’environnement.
Répartition du travail
La répartition des tâches au sein du groupe s’est organisée de la manière suivante :
- Thomas a pris en charge la gestion de l’écran LCD ainsi que le contrôle du servomoteur.
- Adrien s’est occupé de l’architecture générale du code et du pilotage du sonar.
- Mathieu a travaillé sur l’intégration de LUFA (USB), une tâche complexe ayant nécessité plusieurs ajustements.
Par ailleurs, de nombreuses sessions de pair programming ont été menées, notamment lors de l’apparition de problèmes liés à la LUFA.
Carte
Schéma initial
- schéma : Fichier:I2L-2024-Carte-G3a.zip
Carte routée
Composants
- ATmega32u4 : disponible
- quartz GND24 : disponible
- buzzer : disponible
- perle ferrite MH2029-300Y : commandée
- chargeur MAX1811 : disponible
- potentiomètre : disponible
- connecteur femelle 16 contacts : commandé
- écran LCD 2 lignes : commandé
- boutons : disponibles
- sonar HC-SR4 : disponible
- servo-moteur 270° : disponible
Carte au 23/02/2025
Non encore réalisé :
- ajouter la perle de ferrite ;
- ajouter les connecteurs J5, J6, J7 et J9 pour la charge ;
- ajouter le condensateur de 2,2uF pour la charge ;
- ajouter R8 et le potentiomètre pour l'écran LCD ;
- ajouter le buzzer ;
- ajouter M1 et J3 pour le servo-moteur et le sonar.
- remplacer une led rouge par une led verte.
Carte au 27/02/2025
Non encore réalisé :
- ajouter la perle de ferrite ;
- remplacer une led rouge par une led verte.
Carte au 07/03/2025
Une erreur a été introduite au moment du routage de la carte : la ligne de commande du serveur a été mise sur PF6 qui ne peut pas être commandée en PWM par un compteur. Du coup, des fils sont soudés à la place du buzzer pour commander le servo avec PB7.
Montage
Code
# Script de simulation du périphérique série
Ce script Bash simule un capteur envoyant des données de distance en fonction d'un balayage angulaire.
## simulate_serial.sh
```bash
#!/bin/bash
# simulate_serial.sh - Simule un balayage angulaire avec distance aléatoire
angle=0.0 # Angle de départ
direction=1 # Direction d'incrémentation de l'angle
pipe="/tmp/virtual_serial" # Chemin du tube nommé pour la communication
# Forcer l'utilisation du point comme séparateur décimal
export LC_NUMERIC=C
# Créer le tube nommé si besoin
[ ! -p "$pipe" ] && mkfifo "$pipe"
# Boucle infinie de génération de données
while true; do
# Générer une distance aléatoire entre 0.50 m et 5.50 m
distance=$(echo "scale=2; $RANDOM/32767*5+0.5" | bc -l)
# Envoyer les données sous forme "distance,angle" dans le tube
printf "%s,%.2f\n" $distance $angle > "$pipe"
# Incrémenter ou décrémenter l'angle
angle=$(echo "scale=2; $angle + $direction" | bc -l)
# Inverser la direction à 0° et 180°
if (( $(echo "$angle >= 180.0" | bc -l) )); then
direction="-1"
elif (( $(echo "$angle <= 0.0" | bc -l) )); then
direction="1"
fi
# Attendre 10 ms avant d'envoyer la prochaine donnée
sleep 0.01
done
Lancement
Pour exécuter le programme sur la carte, il faut tout d’abord le compiler et le téléverser. Voici les étapes à suivre dans le terminal :
make clean # Nettoie les fichiers de compilation précédents
make # Compile le programme
reset # Réinitialise la carte (via bouton physique sur la carte)
make upload # Téléverse le programme sur la carte
Une fois ces commandes exécutées, la carte est prête à faire fonctionner le programme.
Démonstrations
Voici une vidéo qui présente le fonctionnement du sonar, ainsi que le rôle du moteur et de l’écran LCD.
Rendus
Projet KiCAD : Fichier:I2L-2024-Carte-G3.zip
Programmes :
- démonstration : Fichier:I2L-2024-Programmes-G3-rex.zip
- SIMON : Fichier:I2L-2024-Programmes-G3.zip