2
I. Tâche tDetection_Metaux
Un détecteur de métaux est un capteur permettant de localiser des objets métalliques en exploitant le principe de
l’induction électromagnétique. Il est composé d’une bobine émettrice et d’une autre réceptrice. La bobine émettrice
qui est traversée par un courant sinusoïdal, génère autour d’elle un champ magnétique. Lorsqu’un objet métallique
est détecté, la bobine réceptrice capte un signal dont le déphasage dépend du champ magnétique émis par l’objet.
Le capteur délivre à sa sortie un signal numérique : 0 (pas de métal) ou 1 (détection de métal).
1) Coder la tâche tDetection_Metaux qui permet de lire la sortie du capteur (reliée à PB2) toutes les 2s.
Dans le cas de détection de métal, elle commande un buzzer relié à PB3 et elle commande l’arrêt du moteur
par l’envoie d’une variable Arret_Moteur(=1) dans la queue Qdetect_metal.
II. Tâche tDetection_Obstacle
Le capteur de distance utilisé est un capteur Sharp, sa
caractéristique est donnée par la figure 3. Il est appliqué à
l’entrée ADC1_IN10 (PC10) du STM32F4, configuré en
mode 8 bits, une seule conversion (single conversion). La
fonction void MX_ADC1_Init(void) est déjà définie.
VREF=3V.
Lorsque la distance d retournée par le capteur est
inférieur à 20cm (qui correspond à une tension V0=0.6V),
une alarme est envoyée dans la queue Qobstacle.
On suppose que le BSP suivant est prédéfini :
uint8_t Alarme;
ADC_HandleTypeDef hadc1, hadc2;
/** @brief Enables ADC and starts conversion of the regular channels. */
HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc);
/** @brief Disables ADC and stop conversion of regular channels. */
HAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef* hadc)
HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t
Timeout)
/** @brief Gets the converted value from data register of regular channel.*/
uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef* hadc);
1) Coder la tâche tDetection_Obstacle qui permet de lire la sortie de l’ADC1, la convertie en tension
délivrée par le capteur de distance V0, suivi de sa conversion en distance d, ensuite la comparer par rapport
à 20cm. Dans le cas où cette distance est inférieure à 20cm, envoyer une alarme (=1) sous la forme d'une
variable de type uint8_t dans une queue appelée Qobstacle. Enfin cette tâche sera bloquée pendant 1s.
III. Tâche tNiveau_Batterie
Le robot intègre un mécanisme permettant de contrôler le niveau de tension minimal pour le fonctionnement du
système. La tension délivrée par la batterie VBAT comprise entre [0..10V] passe à travers un conditionneur pour
l'adapter à [0..3.3V] (Vout) :
𝑉
𝐵𝐴𝑇 =𝑉
𝑂𝑢𝑡 × (𝑅1+ 𝑅2)
𝑅2
Où R1=3.3kΩ et R2=1kΩ. La sortie Vout du conditionneur est reliée à l’ADC2_IN8 (PB0) configuré en mode 10 bits
en mode conversion continue et VREF=3.3V.
2) Coder la tâche tNiveau_Batterie qui permet de lire la sortie de l’ADC2 toutes les 10s, la convertie en tension
𝑉𝑂𝑢𝑡 récupérée à partir du conditionneur, ensuite déduire la tension réelle des batteries, si elle est inférieure à 6V,
une LED connectée à PB1 est allumée et une alerte niveau bas sera envoyée sous la forme d'une variable Niv_Bas
de type uint8_t dans la queue appelée Qbatterie.