L’Internet des Objets

L’Internet des Objets

16.2 Grove

Page précédente Page suivante

Introduction grove

 
ATTENTION! un interrupteur permet de sélectionner le 5V ou 3,3V. Certains montages ne fonctionnent pas, ou mal en 3,3V. Certains vont brûler en 5V !

Ce document décrit la prise en main de l’Arduino Uno équipé du shield Grove. Le shéma descriptif de l’Uno est présenté dans la figure 16.2. Après ajout du shield grove, il est difficile de lire les éléments sur l’Arduino.

(image)

Fig. 16.2 : Le plan de l’arduino uno

Pour ajouter le shield Grove, c’est facile. Il faut néanmoins être précautionneux pour éviter de tordre une broche. Le shield est présenté dans la figure 16.3. Le shield connecte certaines broches de l’Arduino aux connecteurs grove. Les connecteurs groves sont des connecteurs à quatre fils : Deux fils d’energie (\( V_{\mbox {cc}} \) et masse) et deux fils de signal.

(image)

Fig. 16.3 : Le Shield Grove.

Il est équipé de connecteurs avec détrompeurs.

A

quatre connecteurs Analogiques chacun présente le connecteur analogique de même numéro et son successeur ;

D

7 connecteurs numériques avec le connecteur de même numéro et le suivant ;

I2C

un bus I2C avec quatre connecteur sur le bus ;

UART

un port série ;

bouton reset
Diode

étiquetée power ;

Interrupteur

Permet de choisir \( V_{\mbox {cc}} \) entre 3,3V et 5V.

Chaque connecteur grove fournit aussi \( V_{\mbox {cc}} \) et la masse.

16.2.1 Le starter kit

La boîte starter grove présente quelques connecteurs groves. Nous passons en revue les exemples.

16.2.1.1 Température

http://wiki.seeed.cc/Grove-Temperature_Sensor_V1.2/

La sonde de température Doit être allimentée en 5V malgré la mention contraire dans le wiki. La résistance varie selon la température. Un pont de résistances permet d’obtenir une tension dépendant de la résistance. La température est alors déduite en utilisant une formule mathématique. Après quelques instants, la température affichée se stabilise. Un thermomètre témoin affiche la même température au dixième de degré.

Il faut brancher la sonde sur un port analogique, ici A0.

Listing 16.1 : Température

#include <math.h>

const int B = 4275; // B value of the thermistor
const int R0 = 100000; // R0 = 100k
const int pinTempSensor = 0;
       // Grove - Temperature Sensor connect to A0

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

void loop()
{
  int a = analogRead(pinTempSensor);

    float R = (1023.0/a)-1.0;
    R = R0*R;

    float temperature = 1.0/(log(R/R0)/B+1/298.15)-273.15;
                  // convert to temperature via datasheet

    Serial.print("temperature␣=␣");
    Serial.println(temperature);

    delay(10000);
}
16.2.1.2 LCD RGB Backlight

http ://wiki.seeed.cc/Grove-LCD_RGB_Backlight/

C’est l’afficheur LCD avec une diode RGB permettant de changer la couleur de l’éclairage. Il doit être alimenté en 5V, sinon la diode fonctionne mais pas l’afficheur. L’afficheur fonctionne sur le bus I2C. Comme c’est un bus, les quatres connecteurs sont indépendants.

Il faut commencer par télécharger la librairie permettant de gérer l’écran, Grove_LCD_RGB_Backlight-master et l’installer dans le répertoire Sketchbook.

https ://github.com/Seeed-Studio/Grove_LCD_RGB_Backlight/archive/master.zip

Il y a quelques exemples montrant les fonctionnalités de l’écran sur le dépôt git :

https ://github.com/Seeed-Studio/Grove_LCD_RGB_Backlight

Listing 16.2 : Écran LCD

#include <Wire.h>
#include "rgb_lcd.h"

rgb_lcd lcd;

void setup()
{
    // set up the LCD's number of columns and rows:
    lcd.begin(16, 2);

    // Print a message to the LCD.
    lcd.print("hello,␣world!");
    delay(10000);
}

void loop()
{
    // Turn off the blinking cursor:
    lcd.noBlink();
    delay(3000);
    // Turn on the blinking cursor:
    lcd.blink();
    delay(3000);
}
16.2.1.3 Bouton

http ://wiki.seeed.cc/Grove-Button/

Le bouton peut être enfoncé ou relaché. Il est connecté à une interface numérique (ici, 7). L’alimentation devrait ne pas être importante.

Listing 16.3 : Bouton

const int buttonPin = 7; // la broche qui relie le bouton
int buttonState = 0; // Etat du bouton

void setup() {
    // initialize the LED pin as an output:
    Serial.begin(9600);
    // initialize the pushbutton pin as an input:
    pinMode(buttonPin, INPUT);
}

void loop(){
    // read the state of the pushbutton value:
    buttonState = digitalRead(buttonPin);
    Serial.print("Bouton␣=␣");
    Serial.println(buttonState);

    // check if the pushbutton is pressed.
    // if it is, the buttonState is HIGH:
    if (buttonState == HIGH) {
      // bouton libre
    }
    else {
      // bouton bas
    }
}
16.2.1.4 Relais

http ://wiki.seeed.cc/Grove-Relay/

Le Relais doit être alimenté en 5V. Certaines versions acceptent le 3,3V. Une diode sur la carte indique si le relais est fermé. Le courant traversé doit être inférieur à 5A, 230V alternatif, 30V continu.

Le fonctionnement du relais peut être utilisé dans la boucle du code du bouton. Le relais est fermé quand le bouton est appuyé et s’ouvre quand le bouton est relaché.

Listing 16.4 : Relais

void setup()
{
  pinMode(7, INPUT); // le bouton
  pinMode(4, OUTPUT); // le relais
}

void loop()
{
  if (digitalRead(7)==HIGH)
  { // bouton libre
    digitalWrite(4, HIGH);
    delay(100);
  }
  if (digitalRead(7)==LOW)
  { // bouton bas
    digitalWrite(4, LOW);
    delay(100);
  }
}

16.2.1.5 Buzzer

Le buzzer fonctionne de la même manière que le relais. Il doit être alimenté entre 4 et 8V. Il peut fonctionner en 3,3V.

16.2.1.6 Sound Sensor

http ://wiki.seeed.cc/Grove-Sound_Sensor/

16.2.1.7 Touch Sensor

http ://wiki.seeed.cc/Grove-Touch_Sensor/

La tension d’alimentation est entre 2 et 5V. Il se branche sur un connecteur numérique.

16.2.1.8 LED
16.2.1.9 Light Sensor
16.2.1.10 Rotary Angle Sensor

http ://wiki.seeed.cc/Grove-Rotary_Angle_Sensor/

Il doit être alimenté en 5V. La valeur lue est comprise entre 0 et 1023.

16.2.1.11 Servo moteur

http ://wiki.seeed.cc/Grove-Servo/

Le servo moteur est alimenté en 5V.

Attention : il faut éviter de bloquer le moteur en coinçant, par exemple, les pales de l’hélice.

La librairie de contrôle du servo est à :

https ://www.arduino.cc/en/Reference/Servo

16.2.2 Démonstration

Activer le 5V sur l’interrupteur de tension.

Connecter l’écran à un port I2C.

Brancher, sur les connecteurs analogiques :

A0

la sonde de température ;

A1

le potentiomètre rotatif ;

A2

le détecteur de son ;

A3

le détecteur de luminosité.

Brancher les connecteurs numériques :

D2

détecteur de toucher ;

D3

buzzer ;

D4

relais ;

D5

servo moteur ;

D6

diode.

16.2.2.1 Température

Calcul de la température, affichage sur l’écran lcd, affichage sur la liaison avec le PC, si la température dépasse la valeur max, l’écran passe au rouge,sinon, il reste vert.

16.2.2.2 LCD RGB Backlight

L’écran change de couleur selon le contexte : vert si la température est inférieure à max, rouge sinon. Quand le bouton est enfoncé, la composante bleue est ajoutée.

La valeur de l’éclairage est commandée par le potentiomètre.

L’écran affiche :

  • 1.

    • T, puis la température,

    • L ou T selon le toucher,

    • volume sonore,

    • luminosité ;

  • 2. BTn Off ou On,

  • 3. Ang : et sa valeur.

16.2.2.3 Bouton

on lit sa valeur et on affiche Btn sur le LCD.

16.2.2.4 Enfoncé
  • 1. On envoie bouton haut vers le PC ;

  • 2. on ajoute du bleu ;

  • 3. on affiche On sur le LCD ;

  • 4. On active le relais ;

  • 5. Le moteur fait un aller-retour.

16.2.2.5 Relaché
16.2.2.6 Relais
16.2.2.7 Sound Sensor
16.2.2.8 Touche
  • 1. Affiche T sur le LCD ;

  • 2. active le buzzer ;

  • 3. allume la diode, selon le potentiomètre.

16.2.2.9 Touche pas
  • 1. Affiche L sur le LCD ;

  • 2. éteint le buzzer ;

  • 3. éteint la diode.

16.2.2.10 Touch Sensor
16.2.2.11 LED

La longue patte de la diode doit aller vers le ”+”. On utilise la modulation de largeur pour changer sa luminosité.

16.2.2.12 Light Sensor
16.2.2.13 Rotary Angle Sensor
16.2.2.14 Servo moteur

Le moteur doit faire un aller retoure. Le code d’exemple de sweep peut être utilisé. Les positions 0 et 1 ne laissent pas le moteur inactif. À la fin, il faut donc laisser une valeur différente, 2 par exemple.

Page précédente Page suivante