/* * piloter deux moteurs à courant continu à distance * Auteurs : TAKTAK Rami, AZAIZ Malek, KHITOUS Hamza & TOUJANI Adem */ #include "mbed.h" #include //moteur à gauche = ROUE 1 PwmOut moteur1(D8); // controle de la roue 1 DigitalOut moteur1_direction(D6); // sens de rotation de la roue 1 //moteur à droite = ROUE 2 PwmOut moteur2(D9); // controle de la roue 2 DigitalOut moteur2_direction(D3); // sens de rotation de la roue 2 Serial pc(USBTX, USBRX); // affichage sur ordinateur Serial carte1(PC_10, PC_11); // affichage sur ordinateur /* *-------------------------------------------------------------------------------------------------------------------------------------------------------------- *PILOTAGE DES MOTEURS: */ void marche_arriere(float rc){ moteur1_direction = 0 ; moteur2_direction = 1 ; moteur1.write(rc); moteur2.write(rc); wait(1) ; moteur1.write(0); moteur2.write(0); } void marche_avant(float rc){ moteur1_direction = 1 ; moteur2_direction = 0 ; moteur1.write(rc); moteur2.write(rc); wait(1) ; moteur1.write(0); moteur2.write(0); } void turn_R(float rc) //( tourner de 90° à droite pour une consigne de 30 rad/s) { moteur1_direction = 1; moteur1.write(rc); moteur2.write(0); moteur2_direction = 1; wait(0.14); // disance de l'arc = pi/2 * R(=25cm , rayon de la roue) moteur1.write(0); } void turn_L(float rc) //( tourner de 90° à gauche pour une consigne de 30 rad/s) { moteur1_direction = 1; moteur2_direction = 0; moteur1.write(0); moteur2.write(rc); wait(0.14); // disance de l'arc = pi/2 *R(=25cm , rayon de la roue) moteur2.write(0); } /* *------------------------------------------------------------------------------------------------------------------------------------------------------------- * TRANSMISSION: */ /// Transmission : #include "mbed.h" #include Serial carte2(PC_10, PC_11); //Serial pc(USBTX, USBRX); int j; char commande1[]="A"; char commande2[]="D"; char commande3[]="R"; char commande4[]="G"; //float chaine_to_float(char chaine[] ) ; int main() { carte2.baud(19200); while(1) { for(j=0;j %lf \r\n",consigne); // affichage de la consigne //pc.printf("v1 => %lf \r\n",v1); // affichage de vitesse angulaire actuelle du moteur 1 //pc.printf("rc1 => %lf \r\n\n",Kp * erreur + KiTe *Ierreur); // affichage de la commande appliquée au moteur 1 } /* *------------------------------------------------------------------------------------------------------------------------------------------------------------- * DEMONSTRATION: */ // fonction qui traduit la lettre reçuie en une commande à applioquer au robot void marche( char direction, float rc ){ if (direction=='F'){ // F = forward marche_avant(rc);} if (direction=='B'){ // B = backward marche_avant(rc);} if (direction=='R'){ // R = right turn_R(rc);} if (direction=='L'){ // L = left turn_L(rc);} } int main() { double rc; char data ; rc =0.35; carte1.baud(19200); moteur1.period_ms(10); moteur2.period_ms(10); while(1) { if (carte1.readable()) { data=carte1.getc(); // récupération de la lettre de commande marche(data, rc ) ; // commande associée à la lettre reçue pc.putc(data); // affiche sur tera term la lettre reçue } } }