Formations à l'informatique et à l'électronique

Auteur : SD
Créé le : 28-01-2015

Arduino - Carte mémoire

Utilisation d'une carte mémoire

Photo carte micro SD

La carte Ethernet Shield est équipée d'un lecteur de carte microSD comme celles que l'on peut trouver dans certains téléphones. Beaucoup d'autres shields disposent également d'un lecteur de carte mémoire. Quel que soit le shield, l'accès à la carte mémoire se fait de la même manière.

Ci-dessous un extrait du schéma du shield Ethernet où l'on peut voir le connecteur de la carte mémoire.

La carte se connecte sur un bus SPI (Serial Peripheral Interface) à 4 fils (hors alimentation) :

L'EDI Arduino inclut une bibliothèque SD qui rend le fonctionnement du bus SPI transparent.

Importation de la bibliothèque SD dans EDI Arduino

Enregistrement de données sur la carte mémoire

Vous devez avoir une carte Arduino UNO avec le Shield Ethernet. Une carte mémoire insérée dans le connecteur du Shield Ethernet. La carte mémoire doit être formatée en FAT16 ou FAT32 (pas de NTFS). Le nom du fichier ne doit pas faire plus de 8 caractères (hors extension).

Comme souvent, nous allons partir d'un exemple fournit par l'EDI Arduino. Ouvrir le fichier exemple "Datalogger" (Fichier => Exemples => SD).

Ce programme initialise la carte SD puis enregistre dans un fichier texte ("datalog.txt") le résultat des conversions analogiques / numériques des entrées analogiques 0 à 2. Les valeurs sont séparées par des virgules. L'opération est répétée en boucle. Nous pouvons suivre le déroulement du programme grâce aux informations affichées dans la console.

Attention : Il y a une petite erreur dans le programme ligne 43, remplacer pinMode(10, OUTPUT); par pinMode(chipSelect, OUTPUT);

Photo carte Arduino Uno avec Shields Ethernet et Danger

Débrancher la carte Arduino UNO et ajouter la carte Danger Shield par-dessus le Shield Ethernet (voir photo ci-contre).

Nous allons maintenant apporter quelques modifications à ce programme.

Première modification

à partir du schéma de la carte Danger Shield, modifier le programme de manière à enregistrer les résultats des mesures de la luminosité et de la température.

Deuxième modification

L'enregistrement se fait en boucle à la vitesse maximale à laquelle le microprocesseur peut aller (voir vitesse de défilement dans la console). Afin d'avoir une idée du temps écoulé entre deux mesures, nous allons ajouter une information temporelle dans chaque ligne enregistrée dans le fichier texte :

Temps, Luminosité, Température

Pour obtenir l'information "Temps", utiliser la fonction : micros()

Combien de microsecondes (en moyenne) séparent deux mesures successives ?

Par rapport à la capacité du type unsigned long, au bout de combien temps la valeur renvoyée par la fonction micros() va revenir à 0 ?

Troisième modification

L'enregistrement devra maintenant se faire toutes les secondes...

Lecture d'un fichier présent sur la carte

Ouvrir le fichier exemple "ReadWrite" (Fichier => Exemples => SD).

Téléverser le programme, observer son fonctionnement (moniteur série + lecture du code).

Exécuter le programme plusieurs fois de suite (appuyer simplement sur le bouton reset du Shield Ethernet). Que constate-on au niveau du fichier "test.txt" ?

Première modification

En faisant une compilation des exemples "Datalogger", "ReadWrite" et des travaux réalisés dans l'activité "Serveur Web", faire un programme qui reprend exactement la même chose que Datalogger (version 3ème modification) et qui affiche le fichier dans un navigateur WEB si on se connecte sur l'adresse IP du Shield Ehernet.

Remarque : Nous avons ici un fichier texte et non pas du HTML. Pour qu'il soit interprété ainsi par le navigateur (et non pas comme un fichier HTML), il faut dans l'en-tête http définir le "Content-Type" à "text/plain" au lieu de "text/html". Si on omet cette modification, le navigateur interprète alors le fichier comme un fichier HTML et les sauts de ligne sont alors ignorés.

Source : http://en.wikipedia.org/wiki/MIME_type#Type_text

Deuxième modification

Au lieu d'afficher le fichier "brut", nous allons afficher la courbe de température sous la forme d'un graphique :

Capture d'écran page web avec graphique générée par arduino

à partir des informations ci-dessous, recréer la même page WEB à partir des résultats des mesures stockés dans le fichier texte de la carte mémoire.

Pour faciliter la création du graphique, nous allons utiliser une bibliothèque Javascript de Google comme dans le TP Serveur WEB.

Pour coder les lettres accentuées en Javascript : http://www.designvegetal.com/gadrat/c/caracteres/iso-8859-1.html#codeoct

Pour faciliter le travail, vous disposez de 2 fichiers à placer à la racine de votre carte mémoire :

Vous disposez également d'une fonction void EnvoieFichier(EthernetClient client, char* tNomFichier) :

void EnvoieFichier(EthernetClient client, char* tNomFichier)
{
File leFichier = SD.open(tNomFichier);

if (leFichier) {
while (leFichier.available()) {
char c = leFichier.read();
client.print(c);
}
leFichier.close();
}
else {
Serial.print("error opening ");
Serial.println(tNomFichier);
}
}

Cette fonction permet d'envoyer un fichier présent à la racine de la carte mémoire à un client WEB. Elle s'utilise ainsi :

EnvoieFichier(client, "endhead.htm");

Articles connexes

Premiers pas avec Arduino UNO
Arduino - Capteur de température 1-Wire DS18S20
Arduino - Capteur à ultrasons SRF-05
Arduino - Ports, CAN et Console
Arduino - Serveur Web
Arduino - GPS et Serveur WEB

Vous avez apprécié cet article ? Partagez le !

Article connexe : Arduino - Serveur Web