Préparation de l'atelier "Prof en Fac"

Atelier monté par C. Simon et T. Briant dans le cadre des journées organisées par L. Tortech.

Début : 23/02/2017 Echéance : 10/03/2017

Faire une séance initiation arduino + montage spectromètre visible. On s'inspire du spectro réalisé en A.R.E. en 2015, et on utilisera peut-être des méthodes tirées de Public Labs.

Faire un proto avec un bout de CD avec un moteur pas-à-pas. Le moteur pas-à-pas est moins “boîte noire” que le servo.

Notre choix se porte sur un moteur pas-à-pas unipolaire avec réducteur chez Hackspark 28BYJ-48-5. Driver fourni, ensemble à 8€.

TB fait le couplage moteur/support réseau diffractant. CS suit les recettes pour faire un réseau à partir de CD/DVD.

Question : vaut-il mieux du bois mat (mais pas noir), ou du plexi noir brillant ?

Est-ce que chaque participant doit repartir avec son appareil ? → CS voit avec LT le budget.

Choix des fixations : impression 3D plutôt que découpeuse laser (faire un sondage pendant l'atelier pour savoir quels lycées sont équipés de quelles machines).

TB va faire le design des pièces supports à imprimer en 3D. - LED - photodiode - plateau - porte cuve → CS demande à Emilie si elle a des cuves.

Trouver des substances à tester en solution, dans la gamme 500-800 nm…

Choisir comment exploiter les spectres sur ordinateurs après récupération depuis l'Arduino : carte SD ? à travers Serial Monitor ? Script python ? Processing ?

Prototype

On réalise un essai sur banc :

D'après cet essai, on définit les cotes dans un doc SVG. On annote les emplacements pour faciliter l'assemblage et alléger la rédaction du livret.

Ensuite, on réalise le capot avec le plug-in Tabbed Box Maker d'Inkscape. Pour du plywood 3 mm, avec les réglages Trotec standards, un kerf de 300 μm s'avère un peu juste, et la boîte doit être assemblée au maillet. L'ensemble planche+cloison+capot tient sur une planche.

Voici une photo du spectromètre en cours d'assemblage.

On constate quelques défauts/oublis : fente mal alignée ; pas de passe-fil entre le compartiment de la LED, et le compartiment détecteur.

Reste à faire : fente à la découpeuse vinyle.

Première modification de code pour tenter d'améliorer l'acquisition : on introduit des demi-pas du moteur.

Le signal obtenu avec la photo-diode est vraiment trop faible : à la lumière du jour, la valeur lue au pied de la photo-diode est de 0, pour pratiquement 1000 dans l'obscurité totale. Lors du balayage du spectre, bruit autour de 980. (pour 1024== 5V, et 0== 0V). Décision prise de passer à un photo-transistor, qui ne changera rien à la construction, sera indolore sur le prix, mais offrira un facteur de 100.

En attendant, tentative avec un LM358AN. (on ne souhaite pas pour la version finale conserver d'ampli : la séance est trop courte, et on ne veut pas disperser l'attention sur des problèmes divers - et puis au final, il faudra bien l’utiliser avec les élèves…). Essais faits avec du BBT (virage jaune/bleu à pH=6,0-7,6), et du rouge de phénol (pH=6,4-8,0 jaune/rouge) dans des solutions eau/NaOH/HCl préparées au jugé.

A gauche, le spectre de la solution bleue, à droit le spectre de la solution rouge. (la ligne bleue, c'est le pas du moteur)

  • les phototransistors n'ont pas été commandés… Essai avec un transistor P2N2222.
  • fabrication du support de cuve.
  • redécoupe de CD, plus propre : il faut absolument que le bord de coupe soit radial, car sinon, le spectre est diffracté “en biais” : “l'arc-en-ciel” est projeté en diagonale, ce qui complique gravement le réglage sur le récepteur.
  • l'ensemble LED-récepteur est aligné à 40 mm du support de base (il faut ajuster la hauteur de fente là-dessus). La bonne largeur de fente est 3 mm.

Le nouveau fichier pour la découpe est ici.

Le temps de découpe est de 3 min 37 s, le temps de gravure de 2 min environ. Le temps d'assemblage, en délicatesse au maillet est d'environ 15 min.

const int M1=2;
const int M2=3;
const int M3=4;
const int M4=5;
const int LED=13;
int resolution = 2;
int NPAS=80;
int timeDelay=10;
 
float angle;
 
int pos=0;
 
void setup() {
 
  Serial.begin(115200);
 
  pinMode(M1,OUTPUT);
  pinMode(M2,OUTPUT);
  pinMode(M3,OUTPUT);
  pinMode(M4,OUTPUT);
  pinMode(LED,OUTPUT);
 
  angle=0;
 
  tourne(1000);
 
  tourne(-650);
}
 
void loop() {
 
  for(int i=0;i<NPAS;i++){
    tourne(resolution);
    angle+=resolution * 2*PI / 64;
 
 
    digitalWrite(LED,HIGH);
    delay(100);
    int value = analogRead(A0);
    delay(30);
 
    //value=512-value;
 
    Serial.print(angle);
    Serial.print("  ");
    Serial.println(value);
 
  }
 
  tourne(-NPAS*resolution);
 
  angle=0;
  delay(1000);
  Serial.println("Restart");
 
}
 
void tourne(int n){ // tourne de n séquences
 
 
 
  for(int i=0; i<abs(n);i++){
     if (n>0){pos++; if (pos>7) pos=0;}
     if (n<0) {pos--; if (pos<0) pos=7;}
 
 
    if(pos==0) {digitalWrite(M1,HIGH);digitalWrite(M2,LOW);digitalWrite(M3,LOW);digitalWrite(M4,LOW);}
    if(pos==1) {digitalWrite(M1,HIGH);digitalWrite(M2,HIGH);digitalWrite(M3,LOW);digitalWrite(M4,LOW);}
    if(pos==2) {digitalWrite(M1,LOW);digitalWrite(M2,HIGH);digitalWrite(M3,LOW);digitalWrite(M4,LOW);}
    if(pos==3) {digitalWrite(M1,LOW);digitalWrite(M2,HIGH);digitalWrite(M3,HIGH);digitalWrite(M4,LOW);}
    if(pos==4) {digitalWrite(M1,LOW);digitalWrite(M2,LOW);digitalWrite(M3,HIGH);digitalWrite(M4,LOW);}
    if(pos==5) {digitalWrite(M1,LOW);digitalWrite(M2,LOW);digitalWrite(M3,HIGH);digitalWrite(M4,HIGH);}
    if(pos==6) {digitalWrite(M1,LOW);digitalWrite(M2,LOW);digitalWrite(M3,LOW);digitalWrite(M4,HIGH);}
    if(pos==7) {digitalWrite(M1,HIGH);digitalWrite(M2,LOW);digitalWrite(M3,LOW);digitalWrite(M4,HIGH);}
    delay(timeDelay);
 
  }
    //digitalWrite(M1,LOW);digitalWrite(M2,LOW);digitalWrite(M3,LOW);digitalWrite(M4,LOW);
 
 
  }