Arduino : getting started

Exemple d'utilisation

Un mini robot en Lego

Dans l'idée de présenter une application utilisant l'ensemble des entrées et sorties d'Arduino, nous allons tenter ici de faire avancer un robot (en Lego). Le principe étant que le robot avance si on positionne une source lumineuse de forte intensité devant lui. Le robot est très simple, c'est un montage ayant deux chenilles pour avancer ou reculer. J'ai choisi pour cela d'utiliser des composants Lego disponibles sur le marché : des moteurs 9V et un capteur de lumière, on peut voir les photos ci-dessous.

motor_lego sensor_lego

Afin de pouvoir contrôler les deux moteurs dont nous avons besoin, il est nécessaire d'ajouter un shield moteur. En effet, la puissance fournit en sortie d'un Arduino ne permet pas de les alimenter. Un shield moteur est un circuit à pont en H qui va permettre grâce aux sorties PWM de contrôler deux moteurs à courant continue : direction et vitesse.

Les broches utilisées dans cette application pour contrôler les moteurs et le capteur sont les suivantes :

En fonction de l'état que l'on va positionner sur les broches 12 et 13, les moteurs vont soit tourner dans un sens, soit dans l'autre. Le schéma de cablage du capteur va être le suivant :

schema_lego

Nous allons utiliser la broche A0 comme entrée pour récuperer la valeur du capteur de lumiére. Ce capteur est en fait une résistance dont la valeur va varier en fonction de l'intensité lumineuse à laquelle il est exposé. Ici, plus l'intensité sera forte, plus la résistance va diminuer et plus la différence de potentiel entre A0 et GND sera grande. Il suffit alors de tester cette valeur et de fixer un seuil qui enclenchera les moteurs. Le code ci-dessous permet de faire ce petit robot très simple et qui avance lorsque on approche une source lumineuse devant lui. Le seuil est ici fixe, ce qui est une mauvaise idée si la lumière ambiante change, une meilleure approche serait de calibrer le seuil lors de la mise sous tension de l'Arduino.

const int motorLeft = 3;
const int motorRight = 11;

const int leftDir = 12;
const int rightDir = 13;

int go = 200; // vitesse de pulsation pour les sorties PWM
int brake = 0;

void setup(){
  Serial.begin(9600);
  pinMode(leftDir, OUTPUT);
  pinMode(rightDir, OUTPUT); 
}

void loop()  {
  //Go forward
  digitalWrite(leftDir,HIGH);
  digitalWrite(rightDir,HIGH);
  
  int sensValue = analogRead(A0); // on lit la valeur du capteur de lumière
  if(sensValue > 450){ // seuil de luminosité
    analogWrite(motorLeft, go);
    analogWrite(motorRight, go);
  }else{
    analogWrite(motorLeft, brake);
    analogWrite(motorRight, brake);
  }
  delay(100); 
}