« SE3Groupe2024-5 » : différence entre les versions
(ajout lien git sonar) |
|||
(12 versions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
== Description == | == Description == | ||
Ligne 30 : | Ligne 32 : | ||
=== Schématique === | === Schématique === | ||
[[Fichier:Schematique-sonar.pdf|alt=schématique de la carte|gauche|vignette|schématique de la carte de pilotage du sonar]] | |||
<p style="clear: both;" /> | |||
=== Routage === | === Routage === | ||
[[Fichier:Routage-sonar.pdf|alt=image du routage de la carte|gauche|vignette|capture d'écran du routage du sonar]] | |||
<p style="clear: both;" /> | |||
=== Vue 3D === | |||
[[Fichier:Vue-3D-sonar.pdf|alt=Vue 3D de la carte|gauche|vignette|Vue 3D du routage]] | |||
<p style="clear: both;" /> | |||
=== CAO de la carte du sonar === | |||
[[Fichier:Sonar.zip|vignette]] | |||
<p style="clear: both;" /> | |||
=== Réalisation === | === Réalisation === | ||
<p style="clear: both;" /> | |||
=== Matériel === | === Matériel === | ||
CD4543 en DIP-16 | CD4543 en DIP-16 | ||
<p style="clear: both;" /> | |||
== Programmation == | |||
= | <p style="clear: both;" /> | ||
== Programmateur AVR == | == Programmateur AVR == | ||
=== Tests allumage des LEDs === | === Tests allumage des LEDs === | ||
[[Fichier:Image pcb.jpg|gauche|vignette|Allumage de 2 LEDs sur la carte.]] | Lorsque nous avons fini de souder les composants sur la carte, nous avons voulu tester que la carte fonctionnait correctement, c'est pourquoi nous avons écrit un petit programme permettant l'allumage des leds jaunes(une qui s'allume à l'appui sur le bouton bleu traversant, une qui clignote à 10 Hz).<syntaxhighlight lang="c" line="1" start="1"> | ||
//avr-gcc -mmcu=atmega8u2 -Wall -Werror -I. -DF_CPU=16000000 -Os -o blink.elf blink.c | |||
//avr-objcopy -j .text -j .data -O ihex blink.elf blink.hex | |||
// avrdude -v -patmega8u2 -carduino -b115200 -P/dev/ttyACM0 -U flash:w:blink.hex | |||
#include <avr/io.h> | |||
#include <util/delay.h> | |||
int main(void){ | |||
CLKSEL0 = 0b00010101; // sélection de l'horloge externe | |||
CLKSEL1 = 0b00001111; // minimum de 8Mhz | |||
CLKPR = 0b10000000; // modification du diviseur d'horloge (CLKPCE=1) | |||
CLKPR = 0; // 0 pour pas de diviseur (diviseur de 1) | |||
DDRD |= 0x00; // Sortie pour la LED | |||
DDRC=0x24; // Entrée pour le bouton | |||
while(1){ | |||
if(PIND & 0x40) PORTC =0x20; // LED éteinte | |||
else PORTC |= 0x00; // LED allumée | |||
} | |||
PORTC^=0x04; | |||
_delay_ms(100); | |||
} | |||
</syntaxhighlight>Une fois le code compilé et uploadé, on obtient le résultat suivant:[[Fichier:Image pcb.jpg|gauche|vignette|Allumage de 2 LEDs sur la carte.]] | |||
<div style="clear: both;"> | <div style="clear: both;"> | ||
Pour que le microcontroleur se comporte comme un programmateur AVR USB, il faut d'abord qu'il puisse être reconnu comme un appareil USB, c'est pourquoi nous avons utilisé la bibliothèque LUFA et avons programmé notre carte avec le code qui suit pour qu'il puisse communiquer en USB:<syntaxhighlight lang="makefile" line="1" start="1"> | |||
<syntaxhighlight lang="makefile" line="1" start="1"> | |||
MCU = atmega8u2 | MCU = atmega8u2 | ||
ARCH = AVR8 | ARCH = AVR8 | ||
Ligne 80 : | Ligne 115 : | ||
} | } | ||
else button=false; | else button=false; | ||
</syntaxhighlight> | </syntaxhighlight>En faisant un lsusb, on observe que la carte est reconnue comme un appareil USB, configuré d'après les fichiers de configuration de la LUFA.[[Fichier:Screenshot 2025-03-26 13-23-23.jpg|centré|vignette|800x800px|carte apparaissant comme appareil USB]]Le résultat est présenté dans la vidéo ci-dessous:[[Fichier:Video pcb(1).mp4|gauche|vignette|Communication USB entre ISP et PC visualisée via minicom]]</div> | ||
[[Fichier:Video pcb(1).mp4|gauche|vignette|Communication USB entre ISP et PC visualisée via minicom]]</div> | |||
<div style="clear: both;"> | <div style="clear: both;"> | ||
Ligne 91 : | Ligne 124 : | ||
=== Archive GIT === | === Archive GIT === | ||
https://gitea.plil.fr/abiernac/SE3_2024_B5.git | |||
=== Autres rendus === | === Autres rendus === |
Version actuelle datée du 15 avril 2025 à 14:59
Description
Objectif
Concevoir et réaliser un mini sonar à partir d'un émetteur-récepteur ultrason, avec un traitement des données effectué par un micro-contrôleur. Les données seront ensuite communiquées par ondes radio à un ordinateur. Le système devra être capable de fonctionner aussi bien sur batterie que connecté en USB à un ordinateur, et devra au minimum comporter des LED d'indication.
Cahier des charges
- Contrôle et traitement des informations de l'émetteur-récepteur ultrason
- Pilotage par moteur de l'angle de l'émetteur-récepteur ultrason
- Retour de l'information par des LED sur la carte
- Gestion de l'alimentation par USB
- Communication sans fil avec un ordinateur
- Gestion de l'alimentation sur batterie
- Interface pour visualiser les informations sur ordinateur
Spécification techniques
- angle de détection large (-90°,90°)
- deux émetteurs/récepteurs à ultrason HC-SR04
- Recharge par USB
- transmission des données par onde radio via un module RF (NRFL2401)
- Batteries Li-ion
- une LED tricolore, pour notamment informer des différents niveaux de batterie
- un afficheur 7 segments pour le débogage
- interface machine via une application python
- microcontroleur atmega
Carte électronique
Schématique
Routage
Vue 3D
CAO de la carte du sonar
Réalisation
Matériel
CD4543 en DIP-16
Programmation
Programmateur AVR
Tests allumage des LEDs
Lorsque nous avons fini de souder les composants sur la carte, nous avons voulu tester que la carte fonctionnait correctement, c'est pourquoi nous avons écrit un petit programme permettant l'allumage des leds jaunes(une qui s'allume à l'appui sur le bouton bleu traversant, une qui clignote à 10 Hz).
//avr-gcc -mmcu=atmega8u2 -Wall -Werror -I. -DF_CPU=16000000 -Os -o blink.elf blink.c
//avr-objcopy -j .text -j .data -O ihex blink.elf blink.hex
// avrdude -v -patmega8u2 -carduino -b115200 -P/dev/ttyACM0 -U flash:w:blink.hex
#include <avr/io.h>
#include <util/delay.h>
int main(void){
CLKSEL0 = 0b00010101; // sélection de l'horloge externe
CLKSEL1 = 0b00001111; // minimum de 8Mhz
CLKPR = 0b10000000; // modification du diviseur d'horloge (CLKPCE=1)
CLKPR = 0; // 0 pour pas de diviseur (diviseur de 1)
DDRD |= 0x00; // Sortie pour la LED
DDRC=0x24; // Entrée pour le bouton
while(1){
if(PIND & 0x40) PORTC =0x20; // LED éteinte
else PORTC |= 0x00; // LED allumée
}
PORTC^=0x04;
_delay_ms(100);
}
Une fois le code compilé et uploadé, on obtient le résultat suivant:
MCU = atmega8u2
ARCH = AVR8
BOARD = NONE
F_CPU = 16000000
F_USB = $(F_CPU)
OPTIMIZATION = s
TARGET = VirtualSerial
SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB)
LUFA_PATH = ../../LUFA
CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/
LD_FLAGS =
char* ReportString = NULL;
static bool ActionSent = false;
static bool button = false;
/* Device must be connected and configured for the task to run */
if (USB_DeviceState != DEVICE_STATE_Configured)
return;
/* Determine if a joystick action has occurred */
if (!(PIND & 0x40)){
if(!button){
ReportString = "BOUTON PRESSE\r\n";
ActionSent=false;
}
button=true;
}
else button=false;
Tests
Rendus
Archive GIT
https://gitea.plil.fr/abiernac/SE3_2024_B5.git
Autres rendus
Projet KiCad programmateur AVR : Fichier:SE3-2024-G5-prog-kicad.zip