Petit robot.

Voici quelques codes.

Pour le capteur à ultrason.

/*
   Utilisation du detecteur à ultrasons HC-SR04.
   Alimentation 5v
   
   la fonction pulseIn(broche, niveau) lit la durée d'une impulsion sur la broche. 
   si niveau égale HIGH, cette fonction attend que la broche passe à HAUT,
   et commence alors le chronométrage, attend que la broche repasse au niveau BAS
   et stoppe alors le chronométrage.
   L'instruction renvoie la durée de l'impulsion en microsecondes ( 1 millions de microsecondes par secondes).
   L'instruction s'arrête et renvoie 0 si aucune impulsion n'est survenue dans un temps spécifié. 
   
*/
const int trig_pin = 13;   // définition de la broche digitale n°13 pour le trig du capteur.
const int echo_pin = 12;   // définition de la broche digitale n°12 pour l'echo du capteur.
const int led_rouge = 10;  // définition de la broche digitale n°10 pour la LED rouge.
const int led_verte = 11;  // définition de la broche digitale n°11 pour la LED verte.

void setup()                   //fonction d'initialisation de la carte
{
   Serial.begin(9600);         // initialisation de la liaison série (9600 bit par seconde)
   pinMode(trig_pin, OUTPUT);  // initialisation de la broche trig du capteur en sortie (pour envoyer le signel).
   pinMode(echo_pin, INPUT);   // initialisation de la broche echo du capteur en entrée (pour capter le signal retour).
   pinMode(led_rouge, OUTPUT); // initialisation des broches LED en sortie.
   pinMode(led_verte, OUTPUT);
}

void loop()                    //fonction principale
{
  long duree, distance;                // définition des variables.
  digitalWrite(trig_pin, LOW);         // Le capteur n'envoye pas d'ultrason.
  delayMicroseconds(2);                // pause de 2 micro secondes
  digitalWrite(trig_pin, HIGH);        // Le capteur envoye des ultrasons.
  delayMicroseconds(10);               // pause de 10 micro secondes
  digitalWrite(trig_pin, LOW);         // Le capteur n'envoye pas d'ultrason.
  duree = pulseIn(echo_pin, HIGH);     // Chronomètre le temps (en micro secondes) pour que la broche passe à HIGH. losqu'elle reçoit le signal emis par trig_pin.
  distance = (duree/2)/29.1;           // Calcul de la distance (1 aller-retour, on divise par 2; la vitesse du son ).
  if (distance < 4)                    // Si la distance est inférieure à 4 cm.
  {
    digitalWrite(led_rouge, HIGH);     // LED rouge allumée, LED verte éteinte.
    digitalWrite(led_verte, LOW);
  }
  else                                 // Sinon c'est le contraire.
  {
    digitalWrite(led_rouge, LOW);
    digitalWrite(led_verte, HIGH);
  }
  if (distance >= 200 || distance <= 0) // Si la distance dépasse 200 cm affichage série.
  {
    Serial.println("Hors mesure du capteur");
  }
  else
  {
    Serial.print(distance);             // Sinon affichage de la distance en cm.
    Serial.println(" cm");
  }
  delay(100);
}

Pour le robot.

/*
  Robot - Test des 2 moteurs et du pont de puissance L293D

*/

int motor1_enablePin = 11; //pwm
int motor1_in1Pin = 13;
int motor1_in2Pin = 12;
 
int motor2_enablePin = 10; //pwm
int motor2_in1Pin = 8;
int motor2_in2Pin = 7;
 
void setup()
{
  //on initialise les pins du moteur 1
  pinMode(motor1_in1Pin, OUTPUT);
  pinMode(motor1_in2Pin, OUTPUT);
  pinMode(motor1_enablePin, OUTPUT);
 
  //on initialise les pins du moteur 2
  pinMode(motor2_in1Pin, OUTPUT);
  pinMode(motor2_in2Pin, OUTPUT);
  pinMode(motor2_enablePin, OUTPUT);
 
}
 
void loop()
{
 
  SetMotor2(175, true);
  SetMotor1(255, false);
 
}
 
//Fonction qui set le moteur1
void SetMotor1(int speed, boolean reverse)
{
  analogWrite(motor1_enablePin, speed);
  digitalWrite(motor1_in1Pin, ! reverse);
  digitalWrite(motor1_in2Pin, reverse);
}
 
//Fonction qui set le moteur2
void SetMotor2(int speed, boolean reverse)
{
  analogWrite(motor2_enablePin, speed);
  digitalWrite(motor2_in1Pin, ! reverse);
  digitalWrite(motor2_in2Pin, reverse);
}

Laisser un commentaire