Un robot est constitué de quatre composantes principales: les moteurs pour le faire bouger, la mécanique pour sa structure, les capteurs pour le faire réagir à son environnement et le programme pour relier et gérer ces composants et, ainsi, créer la fonctionnalité désirée.

Les capteurs jouent un rôle important lorsqu’on veut donner au robot un certain niveau d’autonomie. Nous allons donc voir comment les utiliser.

 

Présentation des capteurs

Un capteur sert à mesurer une variable physique (vitesse, angle, température, etc.). Il existe de nombreux capteurs certains passifs d’autres actifs (nécessite d’être alimenté électriquement). Nous allons voir le cas d’un capteur de luminosité dans cet exemple mais ce tutoriel peut s’appliquer à d’autres types.

Voici une liste de capteurs pour lequel s’applique ce tutoriel:

Passif:

  • photorésistance (capteur de luminosité)
  • capteur de vibrations (ou tilt)
  • bouton poussoir

Actif:

  • capteur infrarouge
  • capteur ultrasons

 

Schéma de connexion

Les capteurs peuvent avoir des montages différents surtout en fonction du nombre de connections nécessaires. Généralement, les capteurs ont deux ou trois pins de connections voire plus (capteur d’image). Le capteur est relié à Vin/GND et une ou plusieurs voies analogiques de la carte Arduino. Dans le cas des capteurs passifs, pour créer la troisième voie une résistance doit être rajouter afin de lire la tension à ses bornes.

pushbutton scheme

infrared sensor scheme

Code de base pour la lecture de capteur

Selon le type, les capteurs peuvent renvoyer deux types d’informations sous forme d’une tension électrique: un état (haut ou bas) ou une valeur discrète.

Pour la lecture d’un état, la fonction à connaitre est digitalRead(). Elle renvoie un état haut (HIGH) ou bas (LOW), image de la tension lue sur la borne digital de l’Arduino (numérotées 0,1,2,etc.).

/*Read digital state*/
// Constants
#define DELAY 500 // Delay between two measurements in ms

// Parameters
const int sensorPin = 2; // Pin connected to sensor

//Variables
int sensorState; // state from the sensor

void setup(void) {
  Serial.begin(9600);
  pinMode(sensorPin,INPUT);
}

void loop(void) {
  sensorState = digitalRead(sensorPin);
 
  if (sensorState == HIGH) {
     Serial.print(F("Sensor state is HIGH "));
  } else {
     Serial.print(F("Sensor state is LOW "));
  }
  delay(DELAY);
}

 

Pour lire une valeur discrète, la fonction à connaitre est analogRead(). Elle renvoie une valeur comprise entre 0 et 1023, image de la tension lue sur la borne analogique de l’Arduino (numérotées A0,A1,A2,etc.).

/*Read analog signal*/
// Constants
#define DELAY 500 // Delay between two measurements in ms

// Parameters
const int sensorPin = A0; // Pin connected to sensor

//Variables
int sensorVal; // Analog value from the sensor

void setup(void) {
  Serial.begin(9600);
}

void loop(void) {
  sensorVal = analogRead(sensorPin);
  Serial.print(F("Sensor reading = "));
  Serial.println(sensorVal); // the analog reading
  delay(DELAY);
}

 

Utilisation

Mesure de température et d’humidité avec le capteur DHT11

Mesure de température avec le capteur LM35

Mesure de distance avec le capteur HC-SR04

Mesure de luminosité avec une photorésistance