LinuxÉdu

Arduino et enseignement, 3 juillet 2012 : compte-rendu

Le but de la journée était de tester différentes solutions d’utilisation pédagogique des cartes Arduino ainsi que ces application à la robotique.

Nous avons travaillé sur Physical etoys, Scratch for Arduino et la programmation en C des cartes avec des exemples de projets.

Physical etoys

Cette image Squeak remplace maintenant squeakbot. Physical etoys est développé par le GIRA qui est un laboratoire de recherche Argentin. Il est soutenu largement par le gouvernement dans le cadre d’un plan d’équipement massif des écoles du pays en cartes Arduino adaptée : Duinobot

Il y a trois types de connexion : via firmata pour le moment, en mode direct et à terme, on pourra télécharger sur la carte le code compilé ce qui permettra de l’utiliser sans cable USB.

Il n’y a pas possibilité d’accéder à l’équivalent en C du code généré par Physical etoys. Ce qui est normal vu que firmata est avant tout un protocole de communication avec son langage propre.

S4A : Scratch for Arduino

S4A est un projet du Citilab à Barcelone. Il est basé sur le logiciel Scratch développé par le MIT. Ce programme est très facile à prendre en main. On peut l’utiliser du primaire jusqu’au lycée : des élèves du début du collège ont réussi sans grandes difficultés à programmer des jeux de très bon niveau et Scratch est aussi utilisé en lycée pour l’initiation à l’algorithmique.

Scratch for Arduino

Il y a quelques limitations : nombre de pin utilisables (2 pins digital et 6 analog, les autres sont attribuées d’office aux moteurs), deux servos moteurs maximum et deux moteurs à courant continu. Il existe un patch permettant d’augmenter ce nombre (voir site S4A).

Le numéro des pin ne semble pas correspondre à des pins PWM. Par exemple, les pins 8 et 12 de la carte sont affectés en dur à des moteurs or ces pins là ce ne sont pas nativement PWM.

Un très bon logiciel dans le cadre d’un club et d’une approche de la robotique ou de l’algorithmique. Plus simple à prendre en main que Physical etoys.

Code C

Mur de LED Linuxedu

walldemo_002 par depiotique


walldemo_003 par depiotique

/*
programme de test des cartes "I2C PWM Driver"
pour Arduino équipé de "l'IC Power Protoshield"

Voici la numérotation des sorties de la carte "I2C PWM Driver" :
et les registres de programmation correspondants (pour chaque colonne):

----------------------------        -----------------------
N°:  19     17    15    13    11     9    7     5     3     1
N°:  20     18    16    14    12    10    8     6     4     2
registre:        0x13  0x12  0x11  0x10        0x17  0x16  0x15  0x14

les leds 9 et 19 sont à la masse (0V)
les leds 10 et 20 délivrent + 5V

Après réglage du Setup (voir "void Setup" ci-dessous),
Une commande en sortie d'intensité variable sur une des leds
(1 à 8, 11 à 18) se programme avec le code :

Wire.beginTransmission(address);
Wire.send( reg);
Wire.send( data);
Wire.endTransmission();
où "reg" est l'adresse en hexa du registre
(colonne dans le tableau ci-dessus) ,
par exemple "0x11" si on veut commander la sortie 13

et où "data" indique avec deux chiffres en hexa,
l'intensité que l'on veut délivrer sur chacune des deux leds
du registre (0 pour le maxi à f pour le minimum), la place de ces
deux chiffres correspond aux numéros de leds croissants
de droite à gauche.

par exemple : un data "0xf0" commandé sur le registre "0x11"
donnera l'intensité maxi sur la led 13 et l'intensité mini
sur la led 14.
ou : un data "0x0f" commandé sur le registre "0x11" donnera
l'intensité mini sur la led 13 et l'intensité maxi sur la led 14.

Ce code est écrit pour l'IDE 100

L'allumage et l'extinction massif "par barrette entière" sont
utilisables pour void toutEteindre(); et void feuPatate();

L'alphabet est disponible à l'aide d'un rudimentaire
"void pour chaque lettre".

Prise en charge des temps d'allumage et d'extinction
des lettres intégrés dans la fonction de chaque caractère,
pour simplifier au maximum l'écriture du loop.

Attribution d'un tempo dédié à chaque nature d'intervalle de temps.

*/

#include

void SendToMax(byte address, byte reg, byte data);

byte Max7313_Address = 0x10;    // la valeur de la variable "Max7313_Address" est celle qui a été choisie en plaçant les 3 ponts de soudure sur la carte "I2C PWM Driver".
byte Max7313_Address_1 = 0x11;  / barettes 3 et 4 ( gérée par le Driver2 )
byte Max7313_Address_2 = 0x12;  // barettes 5 et 6 ( gérée par le Driver3 )
byte Max7313_Address_3 = 0x13;  // barettes 7 et 8 ( gérée par le Driver4 )

int intensity = 0xff;

int tempo1 = 300;         // durée d'apparition du caractère
int tempo2 = 100;         // durée d'extinction s'écoulant entre deux caractères

Suite dans le fichier joint ci-dessous

Vous pouvez télécharger ici le code C du walldemo

Merci à Jérome pour tout ce travail et cette démonstration.

Simulation de balise de détresse (type Argos)

Ce système permet de représenter le fonctionnement d’un système de signal de détresse (type Argos). Il est développé par Planète Sciences Midi Pyrénées. Dans la réalite, la balise Argos envoie un signal au satellite qui le transmet à la station de collecte de données CLS.

Ici la balise est modélisée par une source de lumière qui envoie le signal à un ensemble de capteurs (8 photorésistances) qui représente le satellite :

Suivant le capteur déclenché, un message de détresse est envoyé à la station de collecte (le central Argos : CLS qui est basé à Ramonville). La communication entre le satellite et la station de collecte(son modèles) se fait avec un émetteur RF434 sur une Arduino Mini qui communique avec une carte Arduino équipée d’un récepteur :

Recepteur RF

et le logiciel de la base de collecte des données qui reçoit le signal de détresse :

Robotique : pilotage de servomoteurs

On utilise la librairie Servo. Cette librairie permet à une carte Arduino de contrôler les servomoteurs de modélisme. Les servomoteurs intègrent un mécanisme et un axe qui peut-être contrôlé précisément. Les servomoteurs standards permettent de positionner l’axe à différents angles, habituellement entre 0 et 180 degrès (ces servomoteurs permettent de maintenir l’axe à une position précise). Les servomoteurs à rotation continue permettent des rotations de l’axe à différentes vitesses.

Station météo et surveillance de température.

Sur le wiki de linuxedu, vous trouverez une page dédiée à la réalisation d’une base de station météo. Elle permet avec une carte Arduino et un shield Ethernet de réaliser un serveur web de mesure de température. Le capteur est un LM35 et cette mini station peut tout à fait évoluer pour accueillir d’autres types de capteur (pression, humidité…).

Un projet transversal avec une SEGPA horticulture et des classes de technologies collège est envisagé. Le but étant de monitorer à distance la température à l’intérieur d’une serre, on peut y rajouter d’autres capteurs ainsi qu’une webcam. Il est aussi envisageable d’accéder à ces données via l’ENT de l’établissement.

2 comments for “Arduino et enseignement, 3 juillet 2012 : compte-rendu

  1. 11 septembre 2012 at 8 h 11 min

    Sujet visiblement bien écrit, c’est encourageant a notre epoque de voir des gens capables de structurer aussi bien un article sur leur site. Bravo a toi.

    • admin
      22 septembre 2012 at 21 h 58 min

      Merci ! 🙂