Mise à jour de la centrale Alpha 3

Je viens de mettre à jour la centrale Alpha 3. Elle est le 3ème prototype d’une centrale d’acquisition LIBRE à destination des enseignants de physique-chimie. Elle est actuellement conçue autour d’une carte Arduino Mega 2560 (par conséquent, entièrement reprogrammable par le port USB). Les périodes d’échantillonnages sont adaptées à des phénomèmes relativement lents : elles varient du dixième de seconde à l’heure. Un mode manuel (acquisition pas à pas) est également disponible. Les données (horodatées) sont enregistrées au format texte sur une carte SD. Elles se récupèrent par l’intermédiaire d’un câble USB connecté à un ordinateur sous Linux, Windows ou Mac OS X. Les données brutes sont ensuite facilement exploitables dans un tableur ou avec Python (format CSV). La centrale fonctionne sur batterie ou sur secteur. Elle peut être également alimentée par le port USB. Elle intègre un certain nombre de capteurs dont une boussole qui mesure l’azimut, le roulis et le tangage ; un baro-altimètre qui mesure la pression absolue, la pression relative et l’altitude ; enfin un accéléromètre qui mesure les accélérations suivant 2 axes actuellement. Les mesures renvoyées par la boussole font l’objet d’un traitement informatique en temps réel afin de compenser certaines erreurs de mesures liées à des perturbations électromagnétiques à l’intérieur du boîtier.

Code source sur GitHub

Clavier PS/2 et Arduino (sans bibliothèque dédiée)

Le montage :

Port PS/2
Broche 1 (data) => Broche 4 de l’Arduino
Broche 2 (non connecté)
Broche 3 => GND de l’Arduino
Broche 4 => 5V de l’Arduino
Broche 5 (clock) => Broche 3 de l’Arduino
Broche 6 (non connecté)

Le code Arduino :

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

const int DATA_PIN = 4;
const int CLOCK_PIN = 3;

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

void setup() {
  pinMode(DATA_PIN, INPUT);
  // C'est le clavier qui génère l'horloge de synchronisation
  pinMode(CLOCK_PIN, INPUT);
  Serial.begin(9600);
}

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

void loop() {
  Serial.println(dataRead(),HEX);
}

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

int dataRead() { // La trame est de 11 bits
/*
  Si la pression est maintenue, le code est envoyé environ toutes
  les 100 ms (make code). Quand la touche est relachée, le clavier
  envoie le code F0 suivi du code de la touche relachée (break
  code), sauf pour quelques touches particulières (voir le fichier
  PDF correspondant ci-dessous).
*/
  byte data = 0;
  while (digitalRead(DATA_PIN) && digitalRead(CLOCK_PIN));
  // 1 bit de start : La ligne de transmission des données est
  // passée au niveau bas et un signal d'horloge est engendré :
  while (digitalRead(CLOCK_PIN));
  while (!digitalRead(CLOCK_PIN));
  // 8 bits de données (bit de poids faible (LSB) en premier)
  for (int d=0; d<=7; d++) {
    // Les données sont valables sur le front descendant
    // du signal d'horloge
    while (digitalRead(CLOCK_PIN));
    data = data | digitalRead(DATA_PIN) << d;
    while (!digitalRead(CLOCK_PIN));
  }
  // 1 bit de parité
  while (digitalRead(CLOCK_PIN));                    
  while (!digitalRead(CLOCK_PIN));
  // 1 bit de stop
  while (digitalRead(CLOCK_PIN));                   
  while (!digitalRead(CLOCK_PIN));
  return data;
}

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

Les codes obtenus avec le programme Arduino ci-dessus :

Clavier PS/2 (fichier PDF)

Les circuits imprimés sont arrivés

Les circuits imprimés du shield 3615 pour Minitel et Arduino sont arrivés aujourd’hui. J’ai soudé les différents composants du shield : tout est fonctionnel. Pour ceux que ça intéresse, j’ai deux circuits imprimés de cette série en stock (sans les composants donc). Tarif unitaire : 16 € + les frais de port.