26/06/12 : Je modifie mon post pour offrir un petit tutoriel aux débutants, sachant que j'ai eu beaucoup de
mal à trouver les ressources à mes débuts. Donc voici plus de détails sur le matériels, library et scripts.
Si vous souhaitez vous lancer dans ce type de projet, sachez que l'utilisation du langage de base arduino est relativement simple. Il suffit d'un peu de réflexion et une bonne dose de patience
Donc partons d'un robot de base comme le miens ( pour le moment ) qui avance et évite les obstacles.
Pour le materiels voici les caractéristiques :
-Arduino romeo ( j'utilise une ancienne version de la carte mais la base reste la même )
J'ai préféré la carte Roméo car elle intégre de base un controlleur de moteur ( une prise de tête en moins lol )
-Châssis 4WD DFrobot fournit avec 4 moteurs et un support 6 piles
Je ne donnerais pas d'information supplémentaires au sujet du chassis sachant qu'il existe une multitude de ressource à son sujet, sachez juste qu'il est livré en kit à monter et souder donc prévoyez un bon moment de calme pour le montage
-2X capteurs infra-rouges
Une fois le chassis monté, carte fixée, reliez l'alimentation générale et les moteurs aux borniers ( motor power IN et motor 1, 2 DC ) en respectant les polarités ( GND=- / M_win=+ ) pour ce type de montage l'alimentation du chassis suffira à alimenter la carte, mais par la suite, il vous faudra une alimentation à part ( dans ce cas, pensez a retiré le jumper "power in selection jumper" ).
Ensuite, reliez les capteurs infra-rouge aux I/O digital 2 et 3 ( Evitez les I/O digitale 0 et 1 qui servent pour la communication de la carte )
![](http://data.imagup.com/10/1155357351.1 pinout Diagrampng)
Voilà vous avez votre robot il ne manque plus qu'a lui dire quoi faire, voici le script de base permettant au robot d'éviter les murs et obstacles après c'est à vous de le modifié suivant les capteurs et autre que vous ajouterez...
/declaration moteur/
int E1 = 5; //moteur 1 controle de vitesse
int E2 = 6; //moteur 2 controle de vitesse
int M1 = 4; //moteur 1 controle de direction
int M2 = 7; //moteur 2 controle de direction
int moveMotor = 0;
/**********//declaration capteurs IRs/
const int Infrared_left = 2; //Sensor IR gauche
const int Infrared_right = 3; //Sensor IR droite
int Infrared_left_state = 0; //declaration de variable
int Infrared_right_state = 0; //declaration de variable
/**********/void stopper(void) //Stop
{
digitalWrite(E1,LOW);
digitalWrite(E2,LOW);
}
void advance(char b) //le robot avance
{
analogWrite (E1,b);
digitalWrite(M1,HIGH);
analogWrite (E2,b);
digitalWrite(M2,HIGH);
}
void back_off (char b) //le robot recule
{
analogWrite (E1,b);
digitalWrite(M1,LOW);
analogWrite (E2,b);
digitalWrite(M2,LOW);
}
void turn_L (char a) //Tourne a gauche
{
analogWrite (E1,a);
digitalWrite(M1,HIGH);
analogWrite (E2,a);
digitalWrite(M2,LOW);
}
void turn_R (char a) //Tourne a droite
{
analogWrite (E1,a);
digitalWrite(M1,LOW);
analogWrite (E2,a);
digitalWrite(M2,HIGH);
}
void setup(void)
{
//console serial facultative
int i;
for(i=6;i<=9;i++)
pinMode(i, OUTPUT);
Serial.begin(9600);// Initialisation des pins en input
pinMode(Infrared_left, INPUT);
pinMode(Infrared_right, INPUT);}
void loop(void)
{
// Lecture de l'états des IR
Infrared_left_state = digitalRead(Infrared_left);
Infrared_right_state = digitalRead(Infrared_right);// Si le gauche detecte quelque chose le robot tourne a droite
if (Infrared_left_state == LOW) {
turn_R(255);
}
else {
stopper();
}// Si le droite detecte quelque chose le robot tourne a gauche
if (Infrared_right_state == LOW) {
turn_L(255);
}
else {
stopper();
}//si les 2 capteurs IRs detecte en même temps le robot recule puis tourne
if (Infrared_left_state == LOW && Infrared_right_state == LOW) {
back_off(255);
delay(2000);
turn_L(255);
delay(2000);
}
else {
stopper();
}//sinon le robot avance
if (Infrared_left_state == HIGH && Infrared_right_state == HIGH) {
advance(255);
}
else {
stopper();}
}
Voici en supplément une petite vidéo démonstrative de mon robot perso