Gruber Hans | Spectrophotomètre à LED
Ce montage est un peu plus ambitieux que les précédents. Cette fois le but est de fabriquer un spectrophotomètre (ou spectromètre, en encore "spectro" pour les intimes) simple fonctionnant avec une LED 3 couleurs, et utilisable avec une vraie interface (certes basique, mais pouvant facilement être développée).
Basiquement un spectromètre mesure la quantité de lumière qui traverse un échantillon. Ce type d'analyse s'applique à des domaines très variés.
Avec une mesure spectromètrique on peut par exemple connaitre le vieillissement d'un vin, le degré de maturation d'une bière, connaitre la quantité de caféine dans le café ou une boisson énergisante, doser les nitrates de l'eau de son aquarium ou mesurer un développement bactérien...
Pour le commun des mortels il faut reconnaitre que ce n'est pas très utile, mais le but est surtout de montrer un exemple d'application plus complète. par ailleurs il n'existait aucune réalisation de spectro amateur en français jusqu'à maintenant, et les réalisations en anglais que j'ai pu trouver sont surtout des bidouilles, contrairement à ce montage capable d'une assez bonne précision grâce au traitement du signal (et pour peu que la réalisation soit soignée).
Principe
Bien que le montage soit basique la précision obtenue est relativement bonne (aussi bonne que certains petits spectro du commerce à 1000 euros), ceci grâce à l'utilisation du TSL235R : http://www.alldatasheet.com/datash [...] L235R.html
La source (ou plutôt les sources) de lumière est constituée d'une LED RGB. On va d'abord mesurer la "ligne de base", c'est à dire la quantité de lumière reçue lorsque qu'il n'y a rien à mesurer en allumant alternativement les 3 couleurs de la LED, puis on va mesurer la quantité de lumière transmise à travers l'échantillon, et enfin calculer le pourcentage pour chaque couleur.
Le programme
Cette fois j'ai rédigé le programme en utilisant des sous routines. Une sous routine est en quelque sorte une "super instruction". En appelant l'instruction "mesure" on exécute en fait un programme dans le programme. Cette solution permet d'avoir des programmes plus clairs.
Attention : Les sous routines ne fonctionneront qu'avec la mise à jour du firmware.
Code :
- 10 initialisation
- 20 Cls
- 30 menu
- Sub instructions
- 'ce programme permet de realiser un spectro
- 'effectuant une mesure sur 3 longueurs d'onde
- 'la sortie du TSL235R est
- 'connectee A5 (pin13) mode 3 pour frequencemetre
- 'A0 = R = pin1 ; A1 = G = pin2 A2 = B = Pin3
- 'mode 8 pour sortie TOR
- End Sub
- Sub initialisation
- SetPin 13,3
- SetPin 1,8
- SetPin 2,8
- SetPin 3,8
- End Sub
- Sub menu
- 'affiche le menu des choix possibles
- Print @(1,280) "1:Ligne de base 2:Mesure"
- Print @(1,300) "Quelles action voulez vous effectuer ";
- Input action
- If bas= 0 And action <> 1 Then
- Print @(1,320) "Faire la ligne de base avant de commencer"
- Pause (2000)
- GoTo 20
- EndIf
- If action = 1 Then
- phase$="ligne"
- mesure (rouge, vert, bleu, zero, phase$)
- bas = zero
- hautr = rouge - bas
- hautv = vert - bas
- hautb = bleu - bas
- GoTo 20
- EndIf
- If action = 2 Then
- phase$="mesure"
- mesure(rouge, vert, bleu, zero, phase$)
- Cls
- transr = ((rouge - bas) / hautr)*100
- transv = ((vert - bas) / hautv)*100
- transb = ((bleu - bas) / hautb)*100
- resultat (transr, transv, transb)
- EndIf
- GoTo 20
- End Sub
- Sub resultat (transr, transv, transb)
- 'trace tableau absorbance
- Print @(0,0)"2"
- Print @(0,100)"1"
- Print @(0,200)"0"
- For t = 0 To 200 Step 10
- Pixel(20,t)= 1
- Next t
- For i = 50 To 200 Step 50
- For t = 20 To 170 Step 10
- Pixel(t,i)= 1
- Next t
- Next i
- Print @(20,210)"B:468nm V:520nm R:625nm B:468nm V:520nm R:625nm"
- Print
- Print" Resultats en absorbance Resultats en transmittance"
- 'calcul points
- If transr < 1 Then transr = 1
- If transv < 1 Then transv = 1
- If transb < 1 Then transb = 1
- yr = 200 - (Log(100/transr)*36.792)
- yv = 200 - (Log(100/transv)*36.792)
- yb = 200 - (Log(100/transb)*36.792)
- 'trace courbe
- Line(20,yb)-(95,yv)
- Line(95,yv)-(170,yr)
- 'trace tableau transmittance
- Print @(200,0)"100%"
- Print @(200,100)"50%"
- Print @(200,200)"0%"
- For t = 0 To 200 Step 10
- Pixel(220,t)= 1
- Next t
- For i = 50 To 200 Step 50
- For t = 220 To 370 Step 10
- Pixel(t,i)= 1
- Next t
- Next i
- 'calcul points
- yr = 200 - (transr*2)
- yv = 200 - (transv*2)
- yb = 200 - (transb*2)
- 'trace courbe
- Line(220,yb)-(295,yv)
- Line(295,yv)-(370,yr)
- 'affichage valeurs
- Print @(0,280)"T rouge : ";transr;" %"
- Print "T vert : ";transv;" %"
- Print "T bleu : ";transb;" %"
- Print
- Print "Sauvegarder les resultats (o/n)";
- Input choix$
- If choix$ = "o" Then
- Print "Nom de l'echantillon : ";
- Input nom$
- Open "analyses.txt" For append As #1
- Print #1, nom$;" ";transr;" ";transv;" ";transb
- Close #1
- EndIf
- End Sub
- Sub mesure (hautr, hautv, hautb, zero, phase$)
- If phase$ = "ligne" Then
- Print @(1,330)" ... ligne de base en cours, veuillez patienter"
- Else
- Print @(1,330)" ... mesure en cours, veuillez patienter"
- EndIf
- Pin(1) = 1
- For t = 1 To 2
- Pause(1000)
- rouge = Pin(13)
- Next t
- Pin(1)=0
- Pin(2) = 1
- For t = 1 To 2
- Pause(1000)
- vert = Pin(13)
- Next t
- Pin(2)=0
- Pin(3) = 1
- For t = 1 To 2
- Pause(1000)
- bleu = Pin(13)
- Next t
- Pin(3) = 0
- If phase$ = "ligne" Then
- For t = 1 To 2
- Pause(1000)
- zero = Pin(13)
- Next t
- EndIf
- End Sub
|
Par habitude je fais toujours une structure avec des numéros de lignes, à partir de laquelle j'appelle les sous routines, mais ce n'est pas une obligation.
Pour résumer : Un menu s'affiche. Si l'application vient de se lancer la ligne de base doit obligatoirement être effectuée. Une fois qu'elle est faite on peut effectuer une mesure.
A la fin de cette mesure on affiche 2 tableaux indiquant la courbe d'absorbance (ça c’est plus pour ceux qui connaissent les spectro) et de transmittance (le pourcentage qui traverse l'échantillon), ainsi que les valeurs numériques de transmittance.
On a la possibilité d'enregistrer les résultats dans un fichier texte (on ne sauve que les valeurs numériques affichées).
Quand la ligne de base à été effectuée on peut lancer autant de mesures que l'on veux.
Schéma et "assemblage"
Le schéma est très simple :
La cathode de la LED est reliée à GND
L’électrode rouge est reliée à la PIN 1 (A0) avec une résistance de 330 ohms
Le vert est relié à la PIN2 (A1) avec une résistance de 330
Le bleu à la PIN3 (A2) avec une résistance de 330
La sortie du TSL235R est relié à la PIN13 (A5), le TSL étant alimenté en 3.3V.
Attention: Ne pas oublier les résistances de limitation, sous peine de détruire votre carte.
En ce qui concerne l'assemblage du spectro lui même :
L'échantillon est placé dans une cuve carrée ou rectangulaire. On peut se faire une cuve pas trop mauvaise avec une boite de TIC TAC. Il faut mesurer à travers la partie la moins épaisse.
Les mesures et la ligne de base doivent se faire dans l’obscurité, donc soit vous attendez qu'il fasse nuit, soit vous posez une boite qui coupe bien la lumière sur la LED, le TSL et la cuve.
Une petite photo pour illustrer ça ; on peut voir le TSL par transparence. Ici je faisais une mesure sur du vinaigre.
Quelques essais
Une capture d'écran de l'application (sur une mesure effectuée sur de la lotion dentaire diluée 10 fois) :
Cette lotion dentaire est colorée avec du rouge allura (red 40, ou E129). Pour comparaison voici la courbe d'absorbance réelle:
On retrouve sensiblement le même profil (il faut quand même réaliser que notre courbe n'a que 3 points...). Les valeurs ne sont pas tout à fait identique car bien sur elles dépendent de la dilution. Voici un tableau de calibration (valeur d'absorbance à 520nm en fonction de la concentration) :
En effectuant une autre dilution par 20 je trouve une absorbance de 0.37 à 520nm, je peux donc dire grossièrement que ma lotion contient environ 6 * 20 = 120ppm de colorant.
C'est tout de même assez fort, pour un simple montage à base de led vous ne trouvez pas ?
Ici j'ai mesuré un de mes filtres pour la photo, un Hoya 85B :
Et pour comparaison la courbe de transmittance données constructeur:
Les valeurs sont très proches.
Améliorations
Le principal reproche que l'on puisse faire à ce spectromètre est le peu de points mesurés. Une amélioration peut consister à ajouter d'autres longueurs d'ondes, en ajoutant en plus de LED RVB une led jaune, orange, jaune/verte, IR et UV. Message édité par Gruber Hans le 26-08-2012 à 08:22:31
|