Prog Thib Ju

Dependencies:   mbed

Committer:
MaxLaMenace
Date:
Thu May 09 14:34:14 2019 +0000
Revision:
4:b00081eecde0
Parent:
3:f56ec086a122
fusion final commente

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JulienB1 0:5535594ef331 1 #include "mbed.h"
MaxLaMenace 4:b00081eecde0 2
thibautm 3:f56ec086a122 3
MaxLaMenace 1:7d94c1b86ad6 4 // Definition des variables : moteur
MaxLaMenace 4:b00081eecde0 5
MaxLaMenace 4:b00081eecde0 6 PwmOut moteur1(D10); //On déclare la 1ère broche PWM pour la relier au moteur pour ainsi moduler la vitesse du moteur
MaxLaMenace 4:b00081eecde0 7 PwmOut moteur2(D9); //On déclare la 2ème broche PWM
MaxLaMenace 4:b00081eecde0 8 DigitalOut Trig(D12); //On déclare la broche qui va envoyer le signal à l'emetteur-recepteur d'ultrasons
MaxLaMenace 4:b00081eecde0 9 InterruptIn reception(D8); //On déclare notre broche d'interruption
thibautm 3:f56ec086a122 10
MaxLaMenace 4:b00081eecde0 11 Serial pc(USBTX, USBRX); //On crée la connexion Pc-µchip pour afficher les résultats sur Teraterm
JulienB1 0:5535594ef331 12
MaxLaMenace 4:b00081eecde0 13 Timer t2; //On déclarer le timer servant pour calculer la distance emetteur-objet
JulienB1 0:5535594ef331 14
MaxLaMenace 4:b00081eecde0 15 double rc; //Variable compris entre 0 et 1 qui contrôlera le rapport cyclique du moteur
MaxLaMenace 4:b00081eecde0 16 float dist; //Variable qui nous permettra de calculer la distance voiture-objet
MaxLaMenace 4:b00081eecde0 17 float dist_securite; //Variable à laquelle on affectera la distance à respecter
MaxLaMenace 4:b00081eecde0 18 float tps3; //Variable de lecture de temps
JulienB1 2:8817ad0d0a78 19
JulienB1 0:5535594ef331 20
MaxLaMenace 4:b00081eecde0 21 // Definition des variables : codeur incrémentale
MaxLaMenace 1:7d94c1b86ad6 22
MaxLaMenace 4:b00081eecde0 23 InterruptIn ComptIncr(D7); //Broche d'interruption permettant le comptage de front montant du codeur incrémentale
MaxLaMenace 4:b00081eecde0 24
MaxLaMenace 4:b00081eecde0 25 Timer t1; //Timer pour connaître le temps qu'a mis la roue pour faire un tour
MaxLaMenace 1:7d94c1b86ad6 26
MaxLaMenace 4:b00081eecde0 27 float tps1; //Variable servant de zéro pour la mesure de temps d'un tour de roue
MaxLaMenace 4:b00081eecde0 28 float tps2; //Variable servant de stop pour la mesure de temps d'un tour de roue
MaxLaMenace 4:b00081eecde0 29 float dt; //Variable de stockage du calcul de l'intervalle de temps (tps2 - tps1)
MaxLaMenace 4:b00081eecde0 30 int a; //Variable correspondant au nombre de front montant
MaxLaMenace 4:b00081eecde0 31 double v; //Variable de stockage pour le calcul de la vitesse des roues
thibautm 3:f56ec086a122 32
MaxLaMenace 1:7d94c1b86ad6 33
MaxLaMenace 1:7d94c1b86ad6 34 // Definition des fonctions : moteur
MaxLaMenace 1:7d94c1b86ad6 35
MaxLaMenace 4:b00081eecde0 36 void front_montant() //Fonction qui s'effectuera lorsque la broche D8 verra un front montant
JulienB1 0:5535594ef331 37 {
MaxLaMenace 4:b00081eecde0 38 t2.start(); //On lance le timer
JulienB1 0:5535594ef331 39 }
JulienB1 0:5535594ef331 40
MaxLaMenace 4:b00081eecde0 41 void front_descendant() //Fonction qui s'effectuera lorsque la broche D8 verra un front descendant
JulienB1 0:5535594ef331 42 {
MaxLaMenace 4:b00081eecde0 43 t2.stop(); //On arrête le timer
MaxLaMenace 4:b00081eecde0 44 tps3=t2.read(); //On affecte à tps3 la valeur du timer (temps entre le front montant et le front descendant)
MaxLaMenace 4:b00081eecde0 45 dist=174.9*tps3; //On calcule la distance emetteur-objet et donc voiture-objet
MaxLaMenace 4:b00081eecde0 46 t2.reset(); //On réinitialise le timer à 0
MaxLaMenace 4:b00081eecde0 47 if (dist<= dist_securite) //On réduit petit à petit le rapport cyclique et par conséquent la vitesse du moteur jusqu'à respecter la distance minimale
MaxLaMenace 4:b00081eecde0 48 {rc = rc-rc/200;} //qu'il doit y avoir entre la voiture et de la voiture devant elle en fonction de la vitesse
MaxLaMenace 4:b00081eecde0 49 if (dist> dist_securite)
MaxLaMenace 4:b00081eecde0 50 {rc = rc+(rc+1)/200;} //Au contraire si on est au dessus de la distance de sécurité on va augmenter la vitesse de la voiture
MaxLaMenace 4:b00081eecde0 51 if (dist<=0.1) //On arrête le moteur quand la distance est trop petit
MaxLaMenace 4:b00081eecde0 52 {rc = 0;}
MaxLaMenace 4:b00081eecde0 53 moteur2.write(rc); //On applique le nouveau rapport cyclique au moteur et par conséquent la nouvelle vitesse
MaxLaMenace 4:b00081eecde0 54 }
JulienB1 2:8817ad0d0a78 55
MaxLaMenace 4:b00081eecde0 56 // Définition des fonctions : codeur incrémentale
MaxLaMenace 1:7d94c1b86ad6 57
MaxLaMenace 4:b00081eecde0 58 void vitesse()
MaxLaMenace 4:b00081eecde0 59 {
MaxLaMenace 4:b00081eecde0 60 if (a == 0) //On s'assure que l'on compte bien chaque front montant du codeur
MaxLaMenace 4:b00081eecde0 61 {tps1 = t1.read();} //On mesure le zéro pour le départ d'un tour de roue
MaxLaMenace 4:b00081eecde0 62 a++; //La fonction est une boucle d'interruption donc si elle s'active cela signifie qu'un front montant est apparue
MaxLaMenace 4:b00081eecde0 63 if (a == 8){ //Une fois le compteur de front montant arrivé à 8, on calcule la vitesse du véhicule
MaxLaMenace 4:b00081eecde0 64 tps2 = t1.read(); //Mesure du temps qui s'est écoulé depuis tps1
MaxLaMenace 4:b00081eecde0 65 dt = tps2 - tps1; //Calcul de l'intervalle de temps
MaxLaMenace 4:b00081eecde0 66 v = 0.0201056/dt; //Calcul de la vitesse (v=d/t) avec comme distance d : (8/25)*2*pi*R avec R = 4.5cm et car un tour correspond à 25 fronts montants
MaxLaMenace 4:b00081eecde0 67 a = 0; //Remise à zéro du compteur
MaxLaMenace 4:b00081eecde0 68 dist_securite = 6*v; //Critère de distance à respecter : 6 x la vitesse
MaxLaMenace 1:7d94c1b86ad6 69 }
MaxLaMenace 1:7d94c1b86ad6 70 }
MaxLaMenace 1:7d94c1b86ad6 71
thibautm 3:f56ec086a122 72
MaxLaMenace 4:b00081eecde0 73 // Début de la fonction principale
thibautm 3:f56ec086a122 74
JulienB1 0:5535594ef331 75 int main()
JulienB1 0:5535594ef331 76 {
MaxLaMenace 1:7d94c1b86ad6 77 // Initialisation Moteur
MaxLaMenace 1:7d94c1b86ad6 78 t2.reset();
MaxLaMenace 4:b00081eecde0 79 reception.rise(&front_montant); //On dit d'effectuer la fonction front_montant lorsque la broche de réception (D8) reçoit un front montant
MaxLaMenace 4:b00081eecde0 80 reception.fall(&front_descendant); //On dit d'effectuer la fonction front_descendant lorsque la broche de réception (D8) reçoit un front descendant
MaxLaMenace 4:b00081eecde0 81 moteur1.period_ms(10); //On définit la période du signal envoyé au moteur1
MaxLaMenace 4:b00081eecde0 82 moteur2.period_ms(10); //On définit la période du signal envoyé au moteur2
MaxLaMenace 4:b00081eecde0 83 moteur1.write(0); //On initialise le rapport cyclique du moteur1 à 0
MaxLaMenace 4:b00081eecde0 84 moteur2.write(0); //On initialise le rapport cyclique du moteur2 à 0
MaxLaMenace 4:b00081eecde0 85 pc.baud(9600); //On définit le débit d'information envoyé de la µchip au PC
thibautm 3:f56ec086a122 86
JulienB1 0:5535594ef331 87
MaxLaMenace 1:7d94c1b86ad6 88 // Initialisation Codeur
MaxLaMenace 4:b00081eecde0 89 a = 0; //Mise à zéro du compteur de front montant
MaxLaMenace 4:b00081eecde0 90 dt = 0; //Mise à zéro de l'intervalle de temps pour le comptage de front montant
MaxLaMenace 4:b00081eecde0 91 t1.start(); //Démarage du timer
MaxLaMenace 4:b00081eecde0 92 ComptIncr.rise(&vitesse); //Appel de la fonction vitesse à chaque front montant détecté sur la broche de réception (D7)
MaxLaMenace 1:7d94c1b86ad6 93
thibautm 3:f56ec086a122 94
MaxLaMenace 4:b00081eecde0 95 // Début de la boucle
JulienB1 0:5535594ef331 96 while(1)
JulienB1 0:5535594ef331 97 {
MaxLaMenace 1:7d94c1b86ad6 98 // Partie moteur
MaxLaMenace 4:b00081eecde0 99 Trig = 1; //On envoie à 1 à l'emetteur à ultrasons pour qu'il envoie ensuite une impulsion d'ultrason
MaxLaMenace 4:b00081eecde0 100
MaxLaMenace 4:b00081eecde0 101 //On affiche nos différents résultats sur Teraterm
MaxLaMenace 4:b00081eecde0 102 pc.printf("dist = %f \r\n", dist); //Distance avec le véhicule devant nous ou l'obstacle
MaxLaMenace 4:b00081eecde0 103 pc.printf("RC = %lf \r\n", rc); //Rapport cyclique appliqué au moteur
MaxLaMenace 4:b00081eecde0 104 pc.printf("v = %lf\n", v); //Vitesse du véhicule
JulienB1 2:8817ad0d0a78 105
thibautm 3:f56ec086a122 106 wait(0.001); //Il envoie l'impulsion pendant 1 ms
thibautm 3:f56ec086a122 107 Trig =0 ; //On arrête l'impulsion pendant 1 ms
JulienB1 0:5535594ef331 108 wait(0.001);
JulienB1 0:5535594ef331 109 }
JulienB1 0:5535594ef331 110 }