Vous êtes sur la page 1sur 3

Nom : toureche

Prenom : heythem
Group :01 auto et info

DEVOIR01 :
1/
Pour montrer que 60μs correspondent à 1cm, nous utilisons la formule de base de la
vitesse,
distance = vitesse × temps. Sachant que la vitesse du son est d'environ 330 m/s (ou 33000 cm/s), nous
avons :
Distance = 33000 cm/s × (60μs × 10^-6 s) = 33000 cm/s × 0.00006 s = 1.98 cm ≈ 1 cm
Donc, une impulsion Echo de 60μs correspond à environ 1 cm.

2/
Pour déduire la portée minimale et maximale du détecteur à ultrason, nous utilisons la
vitesse et la durée maximale et minimale de l'impulsion Echo.
Portée minimale:
Avec une impulsion Echo de 100μs, la distance minimale est :

Distance_min = 33000 cm/s × (100μs × 10^-6 s) = 3.3 cm

Portée maximale:
Avec une impulsion Echo de 18ms, la distance maximale est :

Distance_max = 33000 cm/s × (18ms × 10^-3 s) = 594 cm

3/
Pour coder la valeur de la distance en centimètres, nous devons utiliser suffisamment de
bits pour représenter des valeurs allant de 0 à 594 cm. Pour cela, nous avons besoin d'au
moins 10 bits, car 2^10 = 1024, ce qui est supérieur à 594.

4/ programme en MikroC pour effectuer les tâches mentionnées :

// Inclusion des librairies nécessaires


#include <stdint.h>
#include <pic18f4520.h>

// Configuration des broches du capteur à ultrasons


#define TRIG RB0_bit
#define ECHO RB1_bit

// Variables globales
uint16_t distance_cm;

// Fonction pour initialiser le module LCD


void LCD_Init() {
TRISD = 0; // Configure les broches RD0-RD7 comme sorties
PORTD = 0; // Initialise le port D à 0
}

// Fonction pour envoyer une donnée à l'afficheur LCD


void LCD_Send(char data) {
PORTD = data; // Envoie la donnée sur le port D
RD2_bit = 1; // Active le signal d'écriture (RW)
RD1_bit = 1; // Active le signal de sélection de donnée (RS)
RD0_bit = 0; // Déclenche une impulsion d'écriture (EN)
Delay_us(1);
RD0_bit = 1;
}

// Fonction pour initialiser l'afficheur LCD


void LCD_Init() {
LCD_Send(0x38); // Initialise l'afficheur LCD en mode 2 lignes, 5x8 points
LCD_Send(0x0C); // Afficheur activé, curseur désactivé, clignotement désactivé
LCD_Send(0x01); // Efface l'écran LCD
Delay_ms(2); // Attends que l'écran soit effacé
}

// Fonction pour afficher une chaîne de caractères sur l'afficheur LCD


void LCD_Display(char *string) {
uint8_t i = 0;
while (string[i] != '\0') {
LCD_Send(string[i]);
i++;
}
}

// Fonction pour mesurer la distance


void Measure_Distance() {
TRIG = 1; // Déclenche une impulsion Trig
Delay_us(10);
TRIG = 0;

while(!ECHO); // Attends le début de l'impulsion Echo


TMR1 = 0; // Initialise le compteur de temps
T1CON.TMR1ON = 1; // Active le compteur de temps

while(ECHO); // Attends la fin de l'impulsion Echo


T1CON.TMR1ON = 0; // Désactive le compteur de temps

// Calcule la distance en cm
distance_cm = TMR1 * 0.017; // 1 us = 0.017 cm (330 m/s * 100 / 2)
}

// Fonction principale
void main() {
TRISB = 0b00000010; // Configure RB0 comme sortie (TRIG) et RB1 comme entrée
(ECHO)

LCD_Init(); // Initialise l'afficheur LCD


while(1) {
Measure_Distance(); // Mesure la distance

// Affiche la distance mesurée sur l'afficheur LCD


LCD_Send(0x80); // Place le curseur au début de la première ligne
LCD_Display("Distance: ");
LCD_Send(0x8A); // Place le curseur à la 9ème position sur la première ligne
LCD_Send((distance_cm / 100) + '0'); // Affiche la partie entière de la distance
LCD_Send('.');
LCD_Send((distance_cm % 100) / 10 + '0'); // Affiche la première décimale de la
distance
LCD_Send((distance_cm % 10) + '0'); // Affiche la deuxième décimale de la distance
LCD_Display(" cm");

Delay_ms(500); // Attend un peu avant de mesurer à nouveau


}
}

Vous aimerez peut-être aussi