L’Internet des Objets
16.2 Grove
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.
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 ( et masse) et deux fils de signal.
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
entre 3,3V et 5V.
Chaque connecteur grove fournit aussi 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.

