Aller au contenu

Borne de réservation

État initial

Notre borne de commande pour PPC a débuté son aventure à partir d’un parcmètre des années 2005 – 2010 désaffecté de l’aéroport de Bordeaux Mérignac. Ce parcmètre, autrefois utilisé pour gérer le stationnement des véhicules, a été démonté et récupéré en vue de donner vie à notre projet. À ce stade, la plupart des composants étaient séparés et prêts à être réassemblés pour créer une borne de commande adaptée aux besoins spécifiques de la commande des PPC. Nous avions notamment à notre disposition :

Écran VGA embarquéx1
Capteur RFID CSCv4x1
Imprimante thermique / magnétiquex1
Enceinte génériquex1
Bouton poussoirx1
Pavé numérique avec connecteur PS2x1
Unité centralex1
Liste des composants récupérés sur le parcmètre

Ces composants était tous d’origine. Malheureusement pour nous, même après avoir remonté tous les composant à leur place originelle, la borne n’était pas fonctionnelle pour autant. Probablement dû à un sabotage volontaire de l’ensemble du câblage de la borne. Il nous a donc fallu faire quelques modifications.

Modifications

1. Unité centrale

SSD avec interface SATAx1
Module WiFi USB (optionnel)x1
Barette de RAM DDR2 (optionnel)x1
Liste des composants nécessaires
  1. Remplacez la carte flash de 1 Go par un SSD de 64 Go pour augmenter la capacité de stockage.
  2. Ajoutez un module WIFI USB pour permettre une connexion sans fil.
  3. Installez Ubuntu Server 18.04, la dernière version prenant en charge les processeurs 32 bits.
  4. Mettez à niveau la RAM en installant 1 Go de RAM DDR3.
  5. Utilisez une Arduino pour interfacer le bouton poussoir d’origine avec l’unité centrale, en remplacement du hub USB défectueux.

La première étape de modification de notre borne de commande pour PPC a consisté à mettre à niveau l’unité centrale. Compte tenu de la technologie datant de 2005, le système d’exploitation était installé sur une carte flash de 1 Go, ce qui était trop limitant pour notre usage. Afin d’améliorer les performances et la capacité de stockage, nous avons équipé la machine d’un SSD de 64 Go et ajouté un module WIFI USB pour assurer une connexion sans fil.

Ensuite, nous avons choisi d’installer Ubuntu Server 18.04 sur la borne, car il s’agit de la dernière version d’Ubuntu Server prenant en charge les processeurs 32 bits, comme celui équipant notre unité centrale avec un processeur monocœur de 1 GHz.

Enfin, nous avons également procédé à une mise à niveau de la mémoire vive en remplaçant la RAM existante par une barrette de 1 Go de RAM DDR2, permettant ainsi une meilleure gestion des ressources et une performance accrue de notre borne de commande.

Écran

  1. Conservez l’écran d’origine, qui offre une résolution de 640×480 pixels et un taux de rafraîchissement de 67 Hz.
  2. Remplacez l’alimentation dédiée à l’écran, intégrée à l’unité centrale, par une alimentation externe similaire.
  3. Connectez la nouvelle alimentation externe aux dominos principaux du parcmètre pour assurer une compatibilité optimale.

Nous avons utilisé l’écran d’origine de notre borne qui offre une résolution de 640×480 pixels et un taux de rafraîchissement de 67 Hz. Lors des premiers tests, l’écran fonctionnait correctement. Cependant, nous avons rencontré un problème avec l’alimentation dédiée à l’écran, qui était intégrée à l’unité centrale. L’alimentation ayant rendu l’âme, nous avons décidé de la remplacer par une alimentation externe similaire.

Afin de garantir une compatibilité optimale avec le système existant, nous avons connecté cette nouvelle alimentation externe aux dominos principaux du parcmètre. Cette solution nous a permis de rétablir le bon fonctionnement de l’écran tout en assurant une source d’alimentation fiable et adaptée à nos besoins.

Son

Nous voulions pouvoir utiliser l’enceinte déjà présente dans le parcmètre. Cependant, le controleur audio présent à l’origine n’était plus disponible lorsque nous avons commencer nos travaux. Ainsi, il nous a fallu trouver un moyen de connecter simplement l’enceinte existante à l’unité centrale qui rappelons le, ne dispose pas de carte son.

Enceinte précédemment récupéréex1
Carte son JACK-USBx1
Prise jackx1
Amplificateur de récupérationx1
Liste des composants

Il vous faut donc connecter un câble jack à l’entrée de l’amplificateur et souder l’enceinte en sortie.

Branchez simplement la carte son à une des prise USB de l’unité centrale, connectez l’entrée de l’amplificateur via le câble jack précédemment soudé à la carte son et le tour est joué.

Coté software, il suffit simplement d’installer un serveur audio (PulseAudio par exemple) car il n’est pas présent par défaut. Enfin, pour que le son soit jouer, nous avons utilisé cvlc, l’interface en ligne de commande du player VLC.

Bouton-poussoir

Nous souhaitions pouvoir réutiliser le bouton-poussoir déjà présent sur le parcmètre, pour le fonctionnement de l’interface, celui-ci émulera un clavier appuyant sur la touche « Entrée ».

Carte Arduino basée sur microcontrôleur 32u4 ou SAMDx1
Bouton-poussoir récupéré précédemmentx1
Liste des composants

Le montage à réaliser est en soi très simple, il suffit de brancher directement le bouton-poussoir à l’Arduino :

Il faut par la suite téléverser le code suivant sur la carte et le tour est joué:

#include <Keyboard.h> // The main library for sending keystrokes.

const int buttonPin = 2;     // the number of the pushbutton pin

void setup()
{
    pinMode(ledPin, OUTPUT);
    pinMode(buttonPin, INPUT_PULLUP);
}

void loop()
{
  if(!digitalRead(buttonPin)){
    digitalWrite(ledPin, !digitalRead(buttonPin));
    Keyboard.press(KEY_RETURN);  
    delay(100);
    Keyboard.releaseAll();
    delay(400);
  }
}

Lecteur RFID

Le lecteur CSCv4 d’origine du parcmètre fonctionnant sur une base de matériel et de logiciel tous deux propriétaires (lien FCC), nous avons dû le remplacer par un capteur Arduino MFRC522, qui se chargera de remplacer le capteur propriétaire.

Le programme suivant permet de lire l’UID d’une carte Mifare et de communiquer celui-ci par connexion USB série:

/*
  Uses https://github.com/miguelbalboa/rfid
*/

#include <SPI.h>
#include <MFRC522.h>
#include <stdio.h>

MFRC522 lecteur(10, 9);

int UID[7];

void setup() {
  Serial.begin(9600);

  while (!Serial);

  for (int i = 0; i < 7; i++) {
    UID[i] = 0xff;
  }

  SPI.begin();
  lecteur.PCD_Init();
}

void loop() {
  if (!lecteur.PICC_IsNewCardPresent() || !lecteur.PICC_ReadCardSerial()) {
    return;
  }

  bool isCardDifferent = false;
  for (int i = 0; i < 7; i++) {
    if (UID[i] != lecteur.uid.uidByte[i]) {
      isCardDifferent = true;
      break;
    }
  }

  if (isCardDifferent) {
    for (int i = 0; i < 7; i++) {
      char buffer[2] = {0};
      UID[i] = lecteur.uid.uidByte[i];
      sprintf(buffer, "%02X", UID[i]);
      Serial.print(buffer);
    }
    Serial.println("");
  }

  delay(1);
}

Le montage électronique à réaliser est quand à lui le suivant:

La lecture des données depuis Ubuntu est possible en utilisant le port série qui sera attribué à votre Arduino. Par défaut ce devrait être /dev/ttyACM0, faites bien attention à ce que votre utilisateur courant puisse lire dessus.

Vous pouvez retirer le cache en acrylique du capteur RFID qui est déjà présent sur le parcmètre à l’aide d’un décapeur thermique puis le remplacer par le suivant, découpable à la laser sur du MDF 3mm:

Si vous le souhaitez, vous pouvez aussi monter l’Arduino Uno directement sur le capteur à l’aide de la structure suivante, imprimable en 3D (attention, dû à la faible précision des imprimante 3D à filament, un coup supplémentaire de perceuse peut être nécessaire):

Vous devriez être en mesure de monter l’arduino de la manière suivante (dans notre cas nous avons utilisé des boulons et écrous trouvés sur les capteurs RFID d’origine):

Interface

Pour l’interface utilisateur, nous souhaitions pouvoir utiliser des technologies récentes, nous avons donc utilisé Tauri (https://tauri.app/fr/), une alternative à Electron se basant sur la webview du système au lieu du moteur Chromium, et qui fonctionne sur une base de Rust. Le dépôt GitHub du projet est trouvable ici.

La compilation directe sur le parcmètre est extrêmement lente à cause de la configuration matérielle de celui-ci qui est très faible, nous avons donc choisi de créer une image Docker qui nous permet de faire de la cross-compilation de manière simple (Dockerfile). Vous pouvez paramétrer le serveur LDAP qui sera interrogé dans le fichier interface/src-tauri/src/main.rs.

Pour compiler, il faut donc exécuter les commandes suivantes:

$ docker build . -f ./Dockerfile -t interface:ubuntu18.04
$ docker run -it -v .:/src -w /src interface:ubuntu18.04
$ chown -R root .
$ npm run tauri dev -- --target i686-unknown-linux-gnu

Une fois la compilation terminée, un paquet .deb sera disponible à l’emplacement src-tauri/target/i686-unknown-linux-gnu/release/bundle/deb/interface_0.0.0_i386.deb et sera installable sur la parcmètre avec la commande suivante:

sudo dpkg -i ./interface_0.0.0_i386.deb

L’interface est donc démarrable avec la commande suivante:

sudo xinit /usr/bin/interface

Conclusion

C’est tout pour ce tutoriel, nous espérons que vous vous amuserez autant que nous dans la réalisation de votre borne de réservation !