Mise à jour le 29/12/2019 :Dans cette rubrique , la foire aux questions , nous traitons d’un grand nombre de questions génériques traitant des différents problèmes rencontrés en robotique .
Archives par étiquette : GROVE
Mise à jour le 15/02/2020 – Rubrique traitant du module led RGB 8 mm Grove , en particulier sur Arduino méga et nano . Nous traitons des 2 versions 104030006 / 104020048
***
Mise à jour le 30/03/2016
Ce module « Grove » intègre un capteur spécialisé de type PAJ7620U2, lequel est capable de reconnaître jusqu’à 9 mouvements de la main : vers le haut, vers le bas, vers la droite, vers la gauche, etc… (sur une distance entre 5 à 15 cm).
Information technique
Interface: compatible Grove
Alimentation: 5 Vcc
Distance de détection: 5 à 15 mm
Température de service: -40°C à 85°C
Lumière ambiance max: < 100k Lux
Deux modes de fonctionnement:
– mode normal: 60°/s à 600°/s
– mode jeu: 60°/s à 1200°/s
Dimensions: 20 x 20 mm
Poids: 8g
Protocole: I2C
Référence Seeedstudio: 101020083
Voir la vidéo de présentation du produit -> affichage
Raccordement de la carte de détection de geste référence 101020083 sur la carte interface Mega Shield. »attention à bien se connecter sur un bus I2C«
Une bibliothèque est disponible pour vous aider à commencer à utiliser rapidement le capteur avec Arduino,
- Télécharger la bibliothèque se trouvant en fichier zip à partir du github Gesture_PAJ7620
- Décompressez le fichier téléchargé dans le répertoire Arduino … / Arduino / bibliothèques.
- Renommez le dossier « Gesture » dézippé (ou: « Gesture_PAJ7620 »)
- Démarrez l’IDE Arduino (ou redémarrer si elle est ouverte).
Dans le programme des le départ , Initialiser le PAJ7620 du capteur de mouvement
Exemple :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// // // void setup() // Un programme Arduino doit impérativement contenir cette fonction . // Elle ne sera exécuter une seule fois au démarrage du microcontroleur // Elle sert à configurer globalement les entrées sorties // etc… ( void setup ) { paj7620Init();//initialisation du capteur de mouvement } |
Ce code d’initialisation doit être ajoutée à chaque programme utilisant ce matériel
Lecture des données du registre du PAJ7620 sur le port I2C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
// // // // //Traduit par Redohm void loop() { uint8_t data = 0; // lecture Bank_0_Reg_0x43/0x44 pour le resultat du geste paj7620ReadReg(0x43, 1, &data); // Lorsque les différents gestes sont détectés,les différents data // data seront données par paj7620ReadReg (0x43, 1, et données). if (data == GES_UP_FLAG) // lorsque le geste est détecté le registre sera = GES_UP_FLAG digitalWrite(4, HIGH); // Met un niveau logique haut a la pin 4 la LED s'allume if (data == GES_DOWN_FLAG) // Lorsque le geste est détecté le registre sera = GES_DOWN_FLAG digitalWrite(4, LOW); // Met un niveau logique bas a la pin 4 la LED s’éteint } |
Exemple de programme : Lorsque vous vous déplacez la main , le voyant rouge sera allumé, sinon la LED rouge sera éteinte.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
// // // // #include <Wire.h> //Cette bibliothèque vous permet de communiquer avec des périphériques I2C #include "paj7620.h" void setup() // Un programme Arduino doit impérativement contenir cette fonction . // Elle ne sera exécuter une seule fois au démarrage du microcontroleur // Elle sert à configurer globalement les entrées sorties // etc… ( void setup ) { paj7620Init(); } void loop() { uint8_t data = 0; // lecture Bank_0_Reg_0x43/0x44 pour le resultat du geste paj7620ReadReg(0x43, 1, &data); // Lorsque les différents gestes sont détectés,les différents data // data seront données par paj7620ReadReg (0x43, 1, et données). if (data == GES_UP_FLAG) // lorsque le geste est détecté le registre sera = GES_UP_FLAG digitalWrite(4, HIGH); // Met un niveau logique haut a la pin 4 la LED s'allume if (data == GES_DOWN_FLAG) // Lorsque le geste est détecté le registre sera = GES_DOWN_FLAG digitalWrite(4, LOW); // Met un niveau logique bas a la pin 4 la LED s’éteint } |
Traduction du document : http://www.seeedstudio.com/wiki/Grove_-_Gesture_v1.0
Table de définition des différents gestes |
||||
Geste | Register Data | Adresse registre |
Si oui | Si non |
En haut « Up » | data==GES_UP_FLAG | 0x43 | Geste détecté | Geste non détecté |
Vers le bas « Down » | data==GES_DOWN_FLAG | 0x43 | Geste détecté | Geste non détecté |
Vers la gauche « Left » | data==GES_LEFT_FLAG | 0x43 | Geste détecté | Geste non détecté |
Vers la droite « Right » | data==GES_RIGHT_FLAG | 0x43 | Geste détecté | Geste non détecté |
Vers l’avant « Forward » | data==GES_FORWARD_FLAG | 0x43 | Geste détecté | Geste non détecté |
Vers l’arriere « Backward » | data==GES_BACKWARD_FLAG | 0x43 | Geste détecté | Geste non détecté |
Dans le sens horaire »Clockwise » | data==GES_CLOCKWISE_FLAG | 0x43 | Geste détecté | Geste non détecté |
Dans le sens anti-horaire « Count Clockwise » | data==GES_COUNT_CLOCKWISE_FLAG | 0x43 | Geste détecté | Geste non détecté |
« Wave » | data==GES_WAVE_FLAG | 0x43 | Geste détecté | Geste non détecté |
***
Ce module de connexion Grove permet d’accéder aux 4 broches du connecteurs Grove sur un bornier à vis pour le raccordement de capteurs ou d’actionneurs divers sur le Grove Base Shield.
***
Mise à jour le 06/06/2015
Ce module infrarouge compatible Grove utilise un capteur RFR359F pour détecter une distance prédéfinie et changer d’état. Le réglage de la distance de référence est facilité par un potentiomètre de réglage et une led.
.
Mise à jour le 31/05/2017 : Dans cet article, nous allons voir comment envoyer des ordres depuis un pc vers un arduino au travers de la communication RF de deux xbee.
.
Schéma de principe pour le module Xbee
Dans ce schéma, on peut distinguer deux parties :
L’émetteur : il est constitué d’un PC, d’un arduino et d’un shield xbee.
Le récepteur : il est constitué d’un arduino et d’un shield xbee voir description . Il est également relié à une les et un bouton poussoir par le biais d’un shield Grove méga (mais vous pouvez adapter avec votre matériel sans problème).
Dans notre article, nous allons voir comment allumer une LED à distance mais aussi comment recevoir une information provenant du récepteur au travers d’un bouton poussoir.
Partie récepteur
Il faut donc préparer l’arduino pour qu’une led et un bouton poussoir y soient connectés. Il faut également solidariser le tout avec un shield xbee. Dans notre exemple nous avons placé la LED sur le pin D12 et le bouton sur le pin D2. Nous avons également branché le module xbee sur le port série hardware n°1 (par le biais d’un câblage et non en enfichant le shield sur l’arduino, cela permet de libérer le port COM de base qui sert également à la programmation de l’arduino et évite ainsi de devoir bouger les jumpers sans arrêt).
Au niveau programmation, nous allons coder une partie qui va permettre d’effectuer deux actions :
1) On va lire les données provenant du shield xbee pour voir si nous avons reçu un ordre et transmettre cet ordre à la LED (allumer ou éteindre)
2) On va envoyer l’état du bouton, si celui ci a changé, au PC.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
//On place le bouton sur le pin D2 const int buttonPin = 2; //Onb place la LED sur le pin D12 const int ledPin = 12; //Variable permettant de connaitre le dernier état du bouton int lastState = LOW; void setup() { //On initialise le port COM xbee Serial1.begin(9600); //On initialise la LED pinMode(ledPin, OUTPUT); //On initialise le bouton pinMode(buttonPin, INPUT); } void loop() { // RECEPTION D'UN ORDRE String lastOrdre = ""; while(Serial1.available()) { //On récupère le caractère char lastchar = Serial1.read(); //Si celui ci est un # on s'arrete là, l'ordre est complet if(lastchar == '#') { break; } //Sinon on concatene avec le reste de l'ordre lastOrdre += lastchar; } //Si la taille de l'ordre est > à 0 if(lastOrdre.length() > 0) { //Si l'ordre est ALLUMER if(lastOrdre == "ALLUMER") { //On passe la led à l'état haut (on l'allume) digitalWrite(ledPin, HIGH); } //Si l'ordre est d'éteindre if(lastOrdre == "ETEINDRE") { //On passe la led à l'état bas, on l'éteint digitalWrite(ledPin, LOW); } } delay(50); //EMISSION D'UN ORDRE //On récupère l'état actuel du bouton int currentState = digitalRead(buttonPin); //Si l'etat actuel du bouton est différent de celui qu'on avait enregistré la derniere fois, //on sait qu'on doit déclencher un nouvel ordre (on a changé d'état) if(currentState != lastState) { //Tout d'abord, on enregistre le nouvel état lastState = currentState; //Si l'état est haut if(lastState == HIGH) { //On demande l'allumage au PC Serial1.write("ALLUMER#"); } //Si l'état est bas if(lastState == LOW) { //On demande l'extinction au PC Serial1.write("ETEINDRE#"); } } } |
Partie émetteur – Arduino
La partie émetteur est la plus basique au niveau branchements : Nous avons juste branché un shield xbee par le biais de câbles (comme pour le récepteur) sur le port Série hardware n°1 et nous avons relié l’arduino au port USB.
Le programme de la partie émetteur est très simple, c’est une sorte de routeur. Il va recevoir les ordres du pc qu’il transmet au récepteur et il reçoit des ordres du récepteur qu’il transmet au pc. On utilise donc deux canaux série : le canal série Arduino/PC et le canal série Arduino/xbee.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
void setup() { //On initialise le port Serie Arduino / PC Serial.begin(9600); //On initialise le port Serie Arduino / Xbee Serial1.begin(9600); } void loop() { // RECEPTION D'UN ORDRE PROVENANT DE L'ARDUINO String lastOrdre = ""; while(Serial1.available()) { //On récupère chaque caractere provenant du module xbee char lastchar = Serial1.read(); //On concatene le caractère au reste de l'ordre lastOrdre += lastchar; //Si le caractère reçu est un #, on s'arrete là, fin de l'ordre. if(lastchar == '#') { break; } } //Si la taille de l'ordre est supérieur à 0 if(lastOrdre.length() > 0) { //On le renvoie directement vers le PC Serial.println(lastOrdre); } delay(50); // RECEPTION D'UN ORDRE PROVENANT DU PC lastOrdre = ""; while(Serial.available()) { //On récupère chaque caractère provenant du PC char lastchar = Serial.read(); //On concatene le caractère au reste de l'ordre lastOrdre += lastchar; //Si le dernier caractère était un #, on s'arrete là if(lastchar == '#') { break; } } if(lastOrdre.length() > 0) { //On transmet l'ordre à l'autre arduino via le shield Xbee Serial1.print(lastOrdre); } } |
Partie émetteur – PC
La partie émetteur PC est assez similaire à la partie récepteur : il va lire les ordres reçus (état du bouton poussoir) et envoyer des ordres (allumer ou éteindre la led).
Dans notre exemple, nous utilisons un bouton nommé « LED » pour allumer ou éteindre la LED. Si on reste appuyé sur le bouton, la LED reste allumée. Si on relâche, elle s’éteint.
En revanche, tant qu’on reste appuyé sur le bouton poussoir, la case à cocher reste cochée, si on relâche le bouton poussoir, la case à cocher se décoche.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'Au chargement du programme, on ouvre le port COM 3 SerialPort1.PortName = "COM3" SerialPort1.Open() End Sub Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing 'A la fermeture de fenetre, on ferme le port COM et on détruit le composant SerialPort1 SerialPort1.Close() SerialPort1.Dispose() End Sub 'Evenement reçu lorsqu'on presse le clic souris sur le bouton "LED" Private Sub btnLed_MouseDown(sender As Object, e As MouseEventArgs) Handles btnLed.MouseDown 'On envoie l'ordre d'allumer la LED SerialPort1.Write("ALLUMER#") End Sub 'Evenement reçu lorsqu'on relache le clic souris du bouton "LED" Private Sub btnLed_MouseUp(sender As Object, e As MouseEventArgs) Handles btnLed.MouseUp 'On envoie l'ordre d'éteindre la led SerialPort1.Write("ETEINDRE#") End Sub 'Evenement reçu lorsqu'on reçoit des données sur le port COM provenant de l'arduino Private Sub SerialPort1_DataReceived(sender As Object, e As IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived 'On lit la ligne de données provenant de l'arduino Dim valeurDepuisArduino As String = SerialPort1.ReadLine().ToString() 'On traite l'information SetValeur(valeurDepuisArduino.Substring(0, valeurDepuisArduino.Length - 2)) End Sub 'Méthode déléguée. Cela permet de réaliser la mise à jour de l'interface graphique alors que l'on provient d'un autre 'thread que celui de l'interface (opération interdite en direct) Delegate Sub SetTextCallback(valeur As String) 'Fonction permettant de gérer l'appel par délégué Private Sub SetValeur(valeur As String) 'On regarde si on a besoin de passer par un délégué ou non If Me.InvokeRequired Then 'Si oui, on invoque le délégué en transmettant la valeur Dim d As New SetTextCallback(AddressOf SetValeur) Me.BeginInvoke(d, New Object() {valeur}) Else 'Si non, on demande à mettre à jour l'affichage directement MettreAJourAffichage(valeur) End If End Sub 'Fonction permettant de gérer l'affichage. On lui passe en paramètre la valeur reçue depuis l'arduino Private Sub MettreAJourAffichage(valeur As String) If valeur = "ETEINDRE" Then 'Si la valeur reçue est "ETEINDRE" on décoche la case à cocher chkBouton.Checked = False ElseIf valeur = "ALLUMER" Then 'Si la valeur reçue est "ALLUMER" on coche la case à cocher chkBouton.Checked = True End If End Sub End Class |
Téléchargements
Télécharger => Émetteur PC.
Télécharger => Émetteur – Arduino.
Télécharger => Récepteur Arduino.
***
Mise à jour le 21/03/2015
La bibliothèque Gris OLED fournit des interfaces logicielles complètes pour utiliser les fonctions du pilote SSD1327Z avec un afficheur Grove OLED 96×96 gris
A savoir :
Pour démarrer le programme chargé d’abord la bibliothèque Wire.h .Cette bibliothèque vous permet de communiquer avec des périphériques I2C. (Pour la procédure d’installation cliquez ici )
Fonction | Définition de la fonction |
SeeedGrayOled.init (); | Initialise l’affichage |
SeeedGrayOled.clearDisplay (); | Efface tout l’écran. Devrait être utilisé avant de commencer un nouveau départ ou après la désactivation du défilement. Cette fonction positionne le curseur sur le coin supérieur gauche. |
SeeedGrayOled.setNormalDisplay (); | Définir affichage en mode normal (en mode non inverse) |
SeeedGrayOled.setContrastLevel (127); | Définir l’affichage et le rapport de contraste à demi-niveau(c.-à 256/2 -1). |
SeeedGrayOled.setInverseDisplay (); | Placer l’affichage en mode inverse |
SeeedGrayOled.setHorizontalMode (); | Définir le mode d’affichage en mode horizontal |
SeeedGrayOled.setVerticalMode (); | Définir le mode d’affichage en mode vertical |
SeeedGrayOled.setTextXY (0,0); | Placez le curseur à 0e ligne de texte, la colonne de texte 0e |
SeeedGrayOled.putChar (‘S’); | Affiche le caractère S .Afficher un caractère à l’écran à partir de l’adresse pointeur réglé par setTextXY (X, Y). Cette fonction est utilisée en interne par PutString (). |
SeeedGrayOled.putString (“Bonjour tout le monde!”); | Affiche la chaîne de caractères . |
SeeedGrayOled.putNumber (-56,123); | Affiche le numéro de -56123 .Le nombre peut être char, int ou long en type de données. Il prend également en charge le signe |
SeeedGrayOled.drawBitmap (SeeedLogo, 96 * 96/8); | Dessine une image binaire (96 pixels * 96 pixels / 8) octets |
SeeedGrayOled.setHorizontalScrollProperties (Scroll_Left, 72,95,0,47, Scroll_5Frames); | Définit les propriétés du défilement horizontal |
SeeedGrayOled.activateScroll (); | Activer défilement. |
SeeedGrayOled.deactivateScroll () | Désactiver le défilement. |
Télécharger la Bibliothèque LCD_Display
***
Mise à jour le 27/03/2017 : Le module Grove SEN10752P est un module pour Arduino permettant de recevoir des trames GPS aux normes NMEA. Seeedstudio propose quelques exemples d’utilisation sur leur site.