FoxBoard

Dans le cadre de notre avant-projet, nous évoluons avec une FoxBoard G20. Cette dernière est un mini-système d’exploitation Linux. Celà lui permet d’être un système embarqué économique pour des petites applications.

Domaines d’utilisation

Cette platine est principalement destinée à des applications liées au développement de mini-serveurs web, proxy, routeur, firewall et autres systèmes embarqués.

Description technique brève

  • Processeur 400 MHz
  • 2 ports USB 2.0
  • Un port série

Description technique de la carte

  • 28 ports Entrées/Sorties
  • 4 entrées de conversion
  • Sortie PWM
  • etc…
  • Alimentation 5V par un adaptateur secteur ou un Port USB

Prix

166,24€ TTC ( 139.00€ HT)

Suite à l’arrivée de nos nouveaux outils, notamment les nouvelles cartes Arduino, les LEDs RVB et le détecteur de mouvement. L’idée nous est alors venue, pour prendre en main notre matériel, de faire une application très simple : une détection d’intrus.

Principe de détection

Notre cellule détecte un mouvement sous forme de 1 et une absence de mouvement sous forme de 0. Dans un premier temps, nous utilisons directement cette donnée pour illuminer une LED RVB. Lorsque des mouvements sont détectés, une couleur rouge apparait de manière progressive. Dès que la couleur rouge est à son maximum, une couleur bleu s’y additionne, formant une couleur violette indiquant qu’un seuil a été atteint. Lorsque plus aucun mouvement n’est détecté, la LED devient verte (la couleur est aussi intense que ce qu’était la rouge lors du dernier mouvement détecté) et s’éteint progressivement.

Détection d’intrus sans-fils

Pour poursuivre notre application et prendre en main le protocole sans-fils XBee, nous avons conçu un détecteur d’intrus sans-fils. C’est-à-dire que le détecteur de mouvement est placé sur une Arduino à un endroit alors que la diode de signalement est placée sur une autre Arduino quelques mètre plus loin. Le protocole ZigBee est utilisé pour transmettre l’état du capteur au système de signalement, une transmission est faite toute les 50ms. L’autre Arduino récupère cette valeur et suit la même procédure que précédemment.

Réseau à 3 Arduino

Nous avons décidé d’augmenter la difficulté de notre application nous avons ajouté une 3ème carte Arduino dans le réseau XBee. Cette dernière réutilise l’écran GDM-2004-D pour afficher l’état du détecteur d’intrus. Lorsque des mouvements sont détectés, il affiche “Présence suspectée” et, dès que la LED d’état devient bleue, il affiche “Alerte intrusion”. Pour communiquer les données, chaque donnée est précédée de l’identifiant de l’Arduino émettrice.

La communication sans-fil par Xbee est donc efficace et passe même à travers les murs, mais dans un rayon d’une trentaine de mètre.

L’écran OLED ne se programmant et ne se comprenant pas assez vite, nous avons décidé de commencer à essayer de programmer les nouveaux composants offerts ce jour-ci.

Pour comprendre le fonctionnement et la programmation d’une LED RGB, nous avons simplement décidé en utilisant une platine Arduino d’allumer une LED de différentes couleurs de manière successive.

Toutes les secondes, la LED s’allume d’une couleur différente allant du rouge au violet, puis s’éteint durant une seconde avant de reprendre la même série.

Ce programme basique (des attentes d’une seconde et des affichages de différentes couleurs sur la LED) nous a permis d’appréhender et de découvrir le paramétrage des couleurs et leur changement en sortie par la LED.

Les images suivantes sont extraites du même programme et une vidéo du défilement des LED est disponible.

LED RGB émettant une couleur bleue

LED RGB émettant une couleur bleue

LED RGV émettant une couleur violette

LED RGV émettant une couleur violette

Encore une nouvelle fournée de matériel pour notre avant-projet ! Cette fois-ci, nous pouvons désormais capter des informations de l’extérieur (grâce à un détecteur de mouvements) et les transmettre (grâce à des XBee).

Détecteur de mouvements passif à infrarouge

Simple et facile à utiliser, le détecteur de mouvement s’alimente en connectant les broches 5V (Vcc) et 0V (GND). De ce fait, il n’y a plus qu’à lire sur l’une des deux sorties du détecteur (il en possède deux qui sont connectées entre-elles). Lorsque la sortie est à 1 (soit 5V) le détecteur indique qu’un mouvement est capté dans son champ d’action. A contrario, lorsqu’elle est à 0, aucun mouvement n’est capté.

Détecteur de mouvements passif à infrarouges

Détecteur de mouvements passif à infrarouges

Carte XBee avec adaptateur pour Arduino

Nous avons reçu des cartes de communication XBee directement installés sur des adaptateurs pour Arduino. Ces cartes de communication sans fils sont très simple à utiliser car elles se contrôlent par la liaison série. Sa portée est de 30 mètres en intérieur (90 mètre en zone dégagée) et travaille à environ 115 Kbits/s. L’adaptateur permet de choisir, via un jumper, si la carte est en mode normale ou en mode externe. Ce dernier mode permet de lire et d’écrire sur le réseau sans-fil XBee directement depuis un ordinateur.

Carte XBee avec son adaptateur pour Arduino

Carte XBee avec son adaptateur pour Arduino

Nous avons, en outre, reçu quelques LEDs RVB de deux type : diffusante et directionnelle. Il ne nous reste plus qu’à nous mettre au boulot pour effacer nos difficultés sur l’écran OLED.

Après avoir tant bien que mal réussi à changer le fond d’écran (background) de l’écran tactile OLED. Nous avons essayé de passer à une étape supérieure : l’écriture d’un texte (quelconque, mais programmé) sur l’écran.

Après avoir cherché comment faire dans la documentation technique (datasheet) de l’écran. Nous avons souhaité élargir nos idées en prenant exemple sur des bibliothèques pré-existantes et disponibles au téléchargement sur Internet. Nous avons trouvé une bibliothèque qui nous a permis d’écrire du texte dans le sens de la largeur de l’écran. (voir images du “hello world”).

Hello World avec l'écran OLED tactile

Hello World avec l'écran OLED tactile

Hello World avec l'écran OLED tactile (2)

Hello World avec l'écran OLED tactile (2)

Nous aurions pu être encore plus heureux si toutes les fonctions programmées dans la bibliothèque fonctionnaient correctement dans le cadre de notre utilisation. L’affichage de formes géométriques variées et diverses s’est retrouvé impossible à réaliser pour des raisons encore inconnues.

Pour la prochaine fois, il va falloir améliorer ces fonctions et probablement essayer d’en implanter d’autres.

Après la programmation simple mais efficace de l’écran LCD. Nous avons décidés de passer à un niveau technologique supérieur en essayant la programmation d’un écran OLED tactile.

Nous avons d’abord du rechercher la “datasheet” de l’écran pour en extraire les informations utiles pour nos besoins d’affichages (principalement, le fond d’écran pour débuter). Une recherche supplémentaire approfondie sur Internet, nous a permis de trouver des exemples nous permettant de changer la couleur de fond de l’écran tactile.

Cette manipulation n’est pas exceptionnelle en elle même. Cependant elle marque notre première commande effectuée sur cet écran de plus de 65000 couleurs. Même si on n’utilise qu’un monochrome, c’est un début qui pourrait présager des nouveautés et des avancées futures.

Les prochaines évolutions pourront être de changer la couleur dès qu’il y a un contact avec l’écran ou d’afficher du texte en plus de ces différentes formes.

Suite au rendez-vous avec notre responsable d’avant projet, nous avons reçu du nouveau matériel. Deux nouveaux écrans OLED viennent d’arriver suivis par un servo moteur et une caméra CMUcam 3.

L’écran µOLED 128-GMD1

Très petit, cet écran est composé de 128 x 128 pixels, pouvant afficher plus de 65 000 couleurs. Il mesure 1,5 pouce de diagonale et sa surface d’affichage est de 729 mm² (27 mm x 27 mm). Il se connecte et se contrôle via une interface USB et peut accueillir une carte micro-SD.

µOLED 128-GMD1

Image de l'écran µOLED 128-GMD1

l’écran µOLED 32028-PMD3 tactile

Plus large que le précédent, il est composé de 240 x 320 pixels, et peut aussi afficher plus de 65 000 couleurs. Il mesure 2,83 pouces de diagonale et sa  surface d’affichage est de 2436,5 mm² (42,3 mm x 57,6 mm). Il peut se connecter soit en USB, soit en mode parallèle et peut aussi accueillir une carte micro-SD.

µOLED 32028-PMD3 tactile

Image de l'écran µOLED 32028-PMD3 tactile

Le servo moteur FUTABA FP S148

Ce servo moteur, petit (40,4 x 19,8 x 36 mm) et robuste, est idéal pour les application embarquées. Il possède un couple de 32 N.cm en travaillant sur une tension de 5V et peut tourner à une vitesse de 250°/s. Il est, en plus, extrêmement bon marché.

Servo moteur FUTABA FP S148

Image du servo moteur FUTABA FP S148

La caméra CMUcam 3

La CMUcam 3 est une caméra entièrement programmable en C grâce à une bibliothèque open source. Le capteur possède une résolution de 352×288 en couleurs RGB. Elle peut en plus faire du traitement d’image, piloter un servo moteur pour suivre un cible ou enregistre des images sur carte micro-SD au format JPG.

CMUcam3

Image de la caméra CMUcam3

Du travail en perspective….

Redéfinition du sujet

Nous nous plaçons dans le cadre de l’intelligence ambiente pour rendre un lieu plus interactif ! Notre projet a pour but de rendre une pièce, un stand ou tout autre lieu relativement restreint adaptable, réactif et autonome.

Lorsqu’un nouvel appareil (compatible) apparait dans le champ d’action du réseau, il s’identifie en donnant sa fonction (capteur ou actionneur) et ses caractéristiques (options de commandes, signaux délivrés, etc…). Dès lors, l’utilisateur peut contrôler ce nouvel appareil via l’interface du réseau, sans aucune intervention de sa part !

Notre objectif est donc de créer un mini réseau d’appareils contrôlable par une interface sans-fil et tactile. Dans un premier temps nous contrôleront le réseau par le serveur mais par la suite l’utilisateur se verra doté de l’interface tactile sans-fil. Tous les actionneurs et capteurs entrant dans notre réseau devront passer par le même protocole de communication sans-fil

Ce que nous allons utiliser

  • Une foxboard connectée au réseau pour communiquer avec un serveur. Cette foxboard sera le point central de notre mini-réseau sans-fil.
  • 4 à 5 arduino pour les différents appareils
    • La première servira pour l’interface sans-fil tactile
    • Les autres serviront pour gérer les actionneurs et les capteurs en liaison liaison avec la fox board
  • Quelques actionneurs et capteurs :
    • Un écran OLED tactile (déjà en notre possession)
    • Un accéléromètre
    • Quelques LEDs
    • Un capteur de présence
    • Un servo moteur ou un mini robot
    • Une caméra
  • Autres matériels :
    • Des cartes Xbee (1 par arduino + 1 pour la foxboard)

Nouveau cahier des charges

Notre travail devra donc répondre aux contraintes suivantes :

  • Utilisation d’un protocole unique pour tous les éléments du réseau sans-fil
  • Identification du nouvel objet communicant dès la détection d’un mini-réseau compatible
  • Compatibilité totale de tout nouvel appareil, quelque soit ses objectifs, tant qu’il utilise notre protocole
  • Compatibilité totale de l’interface de contrôle avec n’importe quel type d’appareil compatible avec le réseau
  • Indépendance totale du système, aucune intervention pour ajouter ou retirer un objet du réseau

Petit point pour un peu parler du matériel fraîchement découvert.

Arduino Duemilanove

Cette carte est la première que nous avons pris en main. Nous avons tout d’abord découvert son compilateur qui permet de programmer la carte directement en C via une connexion USB. Grâce à celui-ci et aux exemples fournis, nous avons pu rapidement travailler sur la communication série via le port USB (en mode série). Même si l’application n’était pas très complexe (simple répétition de ce qui lui a été transmis), elle nous a permis de vérifier le fonctionnement de tous les outils de développement.

Nous avons ensuite tenté d’afficher un message via un écran à cristaux liquides.

Écran GDM-2004-D de Xiamen Ocular

Cet Écran LCD est composé de 4 lignes de 20 caractères. Nous avons, grâce à la documentation technique, conçu un montage électronique pour permettre au micro-processeur de la Arduino d’envoyer des informations vers l’écran. Mis à part un problème de contraste, nous avons facilement pu afficher une ligne de test grâce à l’API d’affichage du compilateur.

Photo du montage "Arduino - GDM-2004-D"

Photo du montage "Arduino - GDM-2004-D"

Nous avons ensuite voulu afficher plusieurs lignes mais des problème dans l’API ont été mis en évidence. En effet, si l’on tente d’écrire plus de 20 caractères sur la première ligne, au lieu d’écrire sur la deuxième ligne on se retrouve sur la troisième. Il va donc nous falloir créer une sur-couche à l’API pour la rendre plus compatible avec le matériel.

Affaire à suivre …

Arduino alpha est le logiciel gratuit conçu par la société arduino afin de connecter la carte arduino et l’utilisateur de PC.

Fenêtre générale du programme arduino alpha 0018

Le logiciel arduino alpha 0018 est équipé d’une interface de menus, d’une interface textuelle pour écrire des commandes et d’une barre de compilation/exécution (en bas) qui informe l’utilisateur de la progression et des éventuelles erreurs relatives au programme ou à l’envoi du programme vers une platine arduino.

Extrait de code compilable pour l’arduino

Cet exemple sert à allumer puis éteindre une LED située sur la broche 13 toutes les secondes. Ce programme est basé sur le langage C amélioré pour l’exploitation de la platine. Les fonctions dédiées totalement à certains actionneurs ou capteurs de l’arduino préenregistrées et le langage objet (séparation de commandes par l’opérande point (.) ). Nous avons donc à faire à un langage avancé mais inspiré du langage C.

Barre de compilation/exécution

Cette barre définit les principales procédures relatives à la communication PC-arduino. Les onglets sont définis de cette manière (de gauche à droite) :

  1. Compilation du code écrit dans la fenêtre de commande
  2. Arrêt de la compilation (peut être utile dans certains cas de programmes longs)
  3. Créer un nouveau programme
  4. Charge un programme existant
  5. Sauvegarde le programme ouvert
  6. Envoie le programme vers la platine arduino
  7. Ouvre la fenêtre de communication avec le port Série

Ecran de commande de la liaison série

La platine arduino permet une liaison série bidirectionnelle. La barre du haut permet d’envoyer des données vers l’arduino tandis que l’écran du dessous montre les messages reçus depuis la platine. La fenêtre permet aussi de définir la vitesse de transfert, même si elle doit être indiquée dans les programmes pour l’arduino.

Menu des exemples fournis par le constructeur

Afin de familiariser les utilisateurs à son environnement et sa technologie, Arduino a mis en place une bibliothèque d’exemples qui permet d’avoir des exemples de base sur certaines fonctions, certains capteurs ou certains actionneurs. Ces exemples sont simplistes et variés. Ce qu’il faut pour une initiation au système.