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.


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 :- pin 3 : contrôle du moteur de gauche (PWM)
- pin 11 : contrôle du moteur de droite< (PWM)
- pin 12 : direction du moteur de gauche (Digital)
- pin 13 : direction du moteur de droite (Digital).
- pin A0 : valeur du capteur de lumière (Analog)
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 :

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); }