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();
  }
}

//////////////////////////////////////////////////////////////////

SD2IEC pour Commodore 64

Vendeur : https://www.ebay.fr/usr/despegatop
Mode d’emploi : Commodore SD2IEC user guide

Après avoir formaté sur mon PC la carte SD (8 Go) en FAT32, je l’insère dans le boitier SD2IEC, j’allume le C64 et je tape :
10 PRINT « HELLO WORLD »
SAVE « HELLO »,8
Le programme est alors sauvegardé directement sur la carte SD.
Pour vérifier que tout a bien fonctionné, je charge la liste des fichiers de la carte dans la mémoire de l’ordinateur :
LOAD « $ »,8
J’affiche cette liste :
LIST
Le programme « HELLO » apparaît bien.
Je vide la mémoire de l’ordinateur :
NEW
Je charge le programme à partir de la carte SD :
LOAD « HELLO »,8
J’affiche le listing du programme :
LIST
Je l’exécute :
RUN

Retour de la carte SD sur le PC avec un éditeur hexadécimal => 24 octets :

Commodore 64 : Guide de référence du programmeur

Tweeter avec un Minitel

Le matériel à mettre en oeuvre : Le minitel, le câble DIN-USB, une Arduino Uno, le shield 3615, un Raspberry Pi.

On crée un compte Twitter puis une application Twitter depuis cette adresse : https://apps.twitter.com.

On règle les permissions.

On récupère les clés qui sont dans les 4 zones rouges. Elles seront utilisées ultérieurement dans le fichier Python minitel.py.

Le programme minitel.py utilise Twython.
Il faut donc installer (sudo apt-get install) :
pour Python 2.7 : python-twython / python-oauth / python-oauth2client / python-oauthlib / python-requests-oauthlib
pour Python 3 : python3-twython / python3-oauth / python3-oauth2client / python3-oauthlib / python3-requests-oauthlib

Pour que le programme minitel.py se lance dès qu’on allume le Raspberry Pi, on ajoute la ligne suivante dans le fichier /etc/rc.local :
su -l pi -c "python /home/pi/3615/minitel.py &"

Dans le fichier /boot/cmdline.txt , il faut enlever « console=ttyAMA0,115200 ».

Enfin, pour pouvoir tweeter, le Raspberry Pi doit être à l’heure sinon on a en retour le message « Twitter API returned a 401 (Unauthorized), Timestamp out of bounds. ». J’ai donc ajouté une horloge temps réel sur le Raspberry Pi : http://www.nagashur.com/wiki/doku.php?id=raspberry_pi:ds3231_rtc_horloge

Pour consulter l’heure et la date contenue dans le module :

sudo hwclock

Pour mettre à l’heure le Raspberry Pi manuellement :

sudo date -s "2017-06-18 17:10"
sudo hwclock -w

Pour ce qui concerne l’interface Minitel gérée par l’Arduino, le programme qui utilise Minitel1B_Soft est ici.

Enfin, il reste à relier le shield 3615 au Raspberry Pi :
TX0′ du shield > RXD du Raspberry Pi (broche 10)
RX0′ du shield > TXD du Raspberry Pi (broche 8)
GND du shield > GND du Raspberry Pi (broche 6)

Fabrication du câble Minitel-Shield

Se procurer le matériel suivant :

  • Minitel 1B avec une prise péri-informatique disposant d’une sortie alimentation sur la broche 5 (type Cu5 / Cu; / Cu< / Bu0 et suivants).
  • Cordon USB A mâle – USB B mâle.
  • Fiche Din mâle 5 contacts à 45° avec collier serre-câble.
  • Gaine thermorétractable transparente 1,2 mm avant retreint.

Le principe : On coupe le connecteur USB B du cordon et on le remplace par la fiche Din.

Pour tout comprendre, partons de la documentation du Minitel :

Les numéros de broches sont positionnés de la même manière pour la fiche DIN mâle vue côté soudures.

Concernant le connecteur USB A, nous avons :

Etant donnés les choix faits au niveau du shield 3615 :
D- vers broche 8 de l’Arduino
D+ vers broche 9 de l’Arduino

Etant donnée la ligne de code suivante dans les exemples de la bibliothèque Minitel1B_Soft :
Minitel minitel(8, 9); // RX, TX

Il faudra souder, pour avoir un câble croisé :

  • Le fil vert à la broche 1 de la fiche DIN
  • Le fil noir à la broche 2 de la fiche DIN
  • Le fil rouge à la broche 5 de la fiche DIN
  • Le fil blanc à la broche 3 de la fiche DIN

Résolution du problème lié à la bibliothèque SD (Arduino 1.0.5) sur l’ATmega1284P

Pour utiliser la bibliothèque SD standard avec l’ATmega1284P, il faut modifier le fichier Sd2PinMap.h que l’on trouve dans le répertoire du logiciel Arduino à cette adresse (sur ma Debian 8) :
/usr/share/arduino/libraries/SD/utility/Sd2PinMap.h :
On tapera dans la console : sudo geany sd2PinMap.h (pour éditer le fichier en mode administrateur)