Catégorie : Processing
Etude d’un accéléromètre 2D
Il s’agit de la remise en ligne d’un article que j’ai écrit en 2012.
La vidéo :
Le matériel et les logiciels utilisés :
Une carte Arduino Duemilanove.
Un shield avec plaque d’essais.
Des fils de diamètre 0,5 mm.
Un accéléromètre DE-ACCM2G de DimensionEngineering (construit autour de l’ADXL322).
Le logiciel Arduino.
Le logiciel Processing.
Etape 1 : L’accéléromètre et l’interfaçage avec la carte Arduino
La patte Vcc est à connecter à la borne 5V de la carte Arduino (au niveau de POWER). La patte Ground est à connecter à la borne Gnd de la carte Arduino (au niveau de POWER). La patte X output est à connecter à la borne analogique 1 par exemple (au niveau de ANALOG IN). La patte Y output est à connecter à la borne analogique 2 par exemple (au niveau de ANALOG IN).
Etape 2 : La programmation de la carte avec le logiciel Arduino
Sur GitHub
Etape 3 : L’interfaçage avec le logiciel Processing
Sur GitHub
Etape 4 : A l’écran
Remarques :
Le capteur étudié ici n’a pas une réponse linéaire quand il est utilisé en inclinomètre. J’ai donc décidé de découper la courbe de réponse en 18 morceaux (10° chacun) et de les approcher par des fonctions affines. Les animations à l’écran, visuellement très satisfaisantes, montrent que cette approche est pertinente.
Poussons l’étude un peu plus loin : Les deux courbes ci-dessus font penser à la représentation graphique de la fonction Arc sinus ; nous allons donc prendre le sinus de la variable degY (ou degX) afin d’essayer d’obtenir une droite :
Bingo ! Nous avons une belle fonction affine. Nous allons donc pouvoir calculer facilement des accélérations à partir des mesures reçues par le capteur. Reste à faire la même chose avec X et degX. Nous obtenons ainsi :
a(X) = (0,0067560184 * X – 3,4804161956) * g
a(Y) = (0,0067732268 * Y – 3,4058636402) * g
Etape 5 : En voiture
On embarque la carte Arduino et l’ordinateur dans une voiture, l’axe Y du capteur étant orienté dans le sens de la marche et le capteur posé à plat. Les données sont enregistrées en temps réel dans le fichier « données.txt » dans le répertoire du programme. En utilisant les fonctions affines déterminées ci dessus, nous pouvons calculer l’accélération de la voiture selon l’axe X ou Y du capteur.
Installer Processing 3 sous Debian 10
Les sites officiels : Processing et Debian
Dans la console :
Si le répertoire processing n’existe pas déjà, je le crée :
sudo mkdir /usr/share/processing
Je télécharge la version 64 bits (à adapter) :
cd Téléchargements
wget -c http://download.processing.org/processing-3.5.4-linux64.tgz
Je décompresse l’archive et l’installe à l’endroit voulu :
tar -zxvf processing-3.5.4-linux64.tgz
sudo mv processing-3.5.4 /usr/share/processing
Je télécharge l’icône processing et l’installe à l’endroit voulu :
wget http://entropie.org/3615/download/processing.png
sudo mv processing.png /usr/share/processing
Pour effacer une version précédente de Processing (x à adapter) :
sudo rm -rf /usr/share/processing/processing-3.x.x
Pour intégrer le programme au menu de Xfce, je crée un fichier processing-3.desktop dans le répertoire /usr/share/applications :
cd /usr/share/applications
sudo nano processing-3.desktop
[Desktop Entry]
Type=Application
Name=Processing 3
Comment=Un environnement de développement pour le langage Processing
Exec=/usr/share/processing/processing-3.5.4/processing
Icon=/usr/share/processing/processing.png
Terminal=false
Categories=Development;
Assemblage d’images avec Processing
Présentation :
Le programme ci-dessous permet d’assembler des images pour en créer une plus grande.
Le code Processing :
////////////////////////////////////////////////////////////////// /* Assemblage d'images Version de Processing utilisée : 3.5.2 Important : --------- Les noms des fichiers images à assembler sont ici du type : image-0001.png, image-0002.png, etc. http://3615.entropie.org */ ////////////////////////////////////////////////////////////////// // Paramètres à adapter String extension = ".png"; // Extension des images int largeurImage = 200; // Largeur d'une image int hauteurImage = 100; // Hauteur d'une image int nbImagesX = 3; // Nombre d'images à placer en largeur int nbImagesY = 2; // Nombre d'images à placer en hauteur int marge = 10; // Marge entre les images int couleurMarge = 0; // Couleur de la marge // Variables int width = largeurImage*nbImagesX + marge*(nbImagesX+1); int height = hauteurImage*nbImagesY + marge*(nbImagesY+1); int nbImages = nbImagesX * nbImagesY; // Nombre total d'images PImage img[ ]= new PImage[nbImages]; // Tableau d'images int indexImage = 0; // Position de l'image dans le tableau float x,y; // Coin supérieur gauche de l'image ////////////////////////////////////////////////////////////////// void settings() { size(width, height); } ////////////////////////////////////////////////////////////////// void setup() { for (int i=0; i<nbImages; i++) { // Le nom du fichier est composé de 4 chiffres + l'extension String nomFichier = "image-"+nf(i+1,4)+extension; img[i] = loadImage(nomFichier); } x = marge; y = marge; background(couleurMarge); } ////////////////////////////////////////////////////////////////// void draw() { if (indexImage < nbImages) { image(img[indexImage], x, y, largeurImage, hauteurImage); indexImage++; x = x + largeurImage + marge; if (x >= width) { x = marge; y = y + hauteurImage + marge; } } else { save("assemblage.png"); } } ////////////////////////////////////////////////////////////////// void keyPressed() { if (key == ESC) { exit(); } } //////////////////////////////////////////////////////////////////