Bonjour ou bonsoir à tout le monde, je suis nouveau sur Arduino et en ce moment je fais un projet sur une voiture automate suiveur de ligne. Comme je débute (pas beaucoup de connaissances niveau programmation) j'ai essayé de faire quelque chose sur le logiciel Arduino. Le voici :
/*
Programme voiture automate
La voiture suit une ligne, quand elle rencontre un obstacle (qui est détecté par un capteur ultrason)
celle-ci la contourne automatiquement. Il n'y a qu'un type d'obstacle.
J'ai deux capteurs de lignes, mais je ne sais pas comment faire pour que la voiture suive correctement les lignes.
La voiture ne peut pas reculer, on actionne le moteur à l'aide d'un transistor (c'est un moteur à courant continu)
Pour changer de direction, on fait passer plus ou moins de courant dans une bobine, ça fait bouger l'aimant qui est rélié à la direction
(d'ailleurs je sais changer le sens du courant avec le pont en H mais pas changer l'intensité du courant...). on peut néanmoins gérer l'intensité du courant. On fait les mesures avec les courants qui sortent d'Arduino.
*//constantes définissant par la suite les broches/
//En entrée
const boolean PIN_CAPTEUR_LIGNEG = 1;
const boolean PIN_CAPTEUR_LIGNED = 2;
const float PIN_CAPTEUR_ULTRASON = A1;
const boolean PIN_BOUTON_ONOFF = 4;//En sortie
const boolean PIN_MOTEUR = 5;
const boolean PIN_PNP1 = 6;
const boolean PIN_PNP2 = 7;
const boolean PIN_NPN1 = 8;
const boolean PIN_NPN2 = 9;// Constantes diverses du programme
//Vitesse du moteur
const int VITESSE_DU_MOTEUR_VIRAGE = 100;//tempo tourner
const int TEMPO_TOURNER = 100;//seuil de détection d'un obstacle
const float SEUIL_OBSTACLE = 200;//Variables globales
boolean valeurcapteurligneg;
boolean valeurcapteurligned;
float valeurcapteurultrason;
boolean onoff;// Fonction permettant de contourner l'obstacle
void Contourner()
{
Arretmoteur();
Moteurauralenti();
Tourneradroite();
delay(TEMPO_TOURNER);
Arretmoteur();
Tourneragauche();
Arretmoteur();
Tourneradroite();
}//Fonction arret moteur
void Arretmoteur() // on bloque le transistor
{
int PIN_MOTEUR = 0;
int PIN_PNP1 = 0;
int PIN_PNP2 = 0;
int PIN_NPN1 = 0;
int PIN_NPN2 = 0;
}//Fonction moteurauralenti
void Moteurauralenti() // on fait une modulation temporelle sur le transistor pour abaisser la tension aux bornes du moteur
{
int PIN_MOTEUR = 1;
int PIN_PNP1 = 0;
int PIN_PNP2 = 0;
int PIN_NPN1 = 0;
int PIN_NPN2 = 0;
}// Fonction permettant de tourner à droite
void Tourneradroite() // nécessite un pont en H (pour gérer la vitesse et la direction
// on agit sur le sens et l'intensité du courant qui passe dans une bobine)
{
int PIN_MOTEUR = 1;
int PIN_PNP1 = 0;
int PIN_PNP2 = 1;
int PIN_NPN1 = 1;
int PIN_NPN2 = 0;
}// Fonction permettant de tourner à gauche
void Tourneragauche() // nécessite un pont en H (pour gérer la vitesse et la direction
// on agit sur le sens et l'intensité du courant qui passe dans une bobine)
{
int PIN_MOTEUR = 1;
int PIN_PNP1 = 1;
int PIN_PNP2 = 0;
int PIN_NPN1 = 0;
int PIN_NPN2 = 1;
}//Fonction avancer tout droit
void Avancertoutdroit() // on sature le transistor
{
int PIN_MOTEUR = 1;
int PIN_PNP1 = 1;
int PIN_PNP2 = 1;
int PIN_NPN1 = 1;
int PIN_NPN2 = 1;
}// Fonction permettant de suivre la ligne
void Avancerligne(){
int PIN_CAPTEUR_LIGNEG = HIGH;if (1 == digitalRead (valeurcapteurligneg)) // si le capteur de gauche se met en état HIGH le robot doit se déplacer vers la droite
{while (1 == valeurcapteurligned)
{
void Tourneradroite();
int PIN_MOTEUR = 1;
int PIN_PNP1 = 0;
int PIN_PNP2 = 1;
int PIN_NPN1 = 1;
int PIN_NPN2 = 0;
}}
if (1 == digitalRead (valeurcapteurligned)) // si le capteur de droite se met en état HIGH le robot doit se déplacer vers la gauche
{
while (1 == valeurcapteurligneg)
{
void Tourneragauche();
int PIN_MOTEUR = 1;
int PIN_PNP1 = 1;
int PIN_PNP2 = 0;
int PIN_NPN1 = 0;
int PIN_NPN2 = 1;
}}
else Avancertoutdroit();
int PIN_MOTEUR = 1;
int PIN_PNP1 = 1;
int PIN_PNP2 = 1;
int PIN_NPN1 = 1;
int PIN_NPN2 = 1;}
// Fonction appelée une fois au démarrage
void setup()
{
// Initialiser le sens des broches
// En entrées
pinMode(PIN_CAPTEUR_LIGNEG, INPUT);
pinMode(PIN_CAPTEUR_LIGNED, INPUT);
pinMode(PIN_CAPTEUR_ULTRASON, INPUT);
pinMode(PIN_BOUTON_ONOFF, INPUT);// En sorties
pinMode(PIN_MOTEUR, OUTPUT);
pinMode(PIN_PNP1, OUTPUT);
pinMode(PIN_PNP2, OUTPUT);
pinMode(PIN_NPN1, OUTPUT);
pinMode(PIN_NPN2, OUTPUT);
}// Fonction appelée périodiquement
void loop()
{onoff = digitalRead(PIN_BOUTON_ONOFF);
valeurcapteurligneg = digitalRead(PIN_CAPTEUR_LIGNEG);
valeurcapteurligned = digitalRead(PIN_CAPTEUR_LIGNED);
valeurcapteurultrason = analogRead(PIN_CAPTEUR_ULTRASON);if( onoff == false )
{
// Le return fait quitter la fonction loop()
return;
}// tant que le capteur d'obstacle ne détecte pas un obstacle à moins d'une certaine distance on a au choix:
while(valeurcapteurultrason<SEUIL_OBSTACLE)
{
Avancerligne();
}
if (valeurcapteurultrason>=SEUIL_OBSTACLE)
{
Contourner();
}
}