Bonjour à tous !
je fabrique en ce moment un appareil qui est un triple spectromètres tout pas en un ( spectrophotomètre, spectromètre uv-vis et spectromètre raman )
mais je me heurte à un problème !
en effet j'ai un miroir qui doit tourner grâce à un moteur pas à pas, et en même temps je doit effectuer une lecture de la valeur d'une photodiode de type OPT101 sur la quelle est focalisé le faisceau diffracté émit par une led de puissance ( 30 watt en 6 volts ) et par un miroir de type "gratting" ( miroir de diffraction )
la partie électronique optique et mécanique ne pose pas trop de problème mais je me heurte à un autre problème plus ennuyeux : en effet suivant ce que je code j'ai soit le moteur qui tourne soit la valeur de la photodiode mais jamais les deux en même temps !!
j'ai essayé plusieurs combinaison, et je ne trouve pas la solution !!
j'ai réussis en câblant deux arduino mega, mais par un soucis de simplification, j'ai opté sur un seul arduino, mega et là çà ne fonctionne pas !!
est ce que c'est possible d'effectuer deux actions en même temps ( lecture de la valeur de la photodiode et mise en route du moteur pas à pas ) ?? Ou suis je condamné à utiliser deux arduino donc deux programmes ( un pour le déplacement du miroir et l'autre pour la lecture de la photodiode ) ?? ( je suis "obligé" d'utiliser un mega car j'ai monté un écran 3.5 pouces dessus et sinon je pense rajouter un nano juste pour le déplacement du miroir si je n'ai pas le choix )
je vous montre le programme que j'ai fait, et qui n'est pas fini mais peut être j’oublie un truc ??
merci de votre future aide !!
[code]
// programme pour photodiode opt101 pour spectromètre
// avec écran lcd tft 3.5 pouces
#include <TFT_HX8357.h> // Hardware-specific library
TFT_HX8357 tft = TFT_HX8357();
const float opt101Pin = A0; // capteur photodiode type opt101
float opt101Value = 0;
const int enaPin = 4; // enable du driver de moteur pas à pas
int enaState = 0;
#include <Stepper.h>
const int stepsPerRevolution = 200; // change this to fit the number of steps per revolution
Stepper myStepper(stepsPerRevolution, 5, 6);
const int ledPin = 2; // relais led
int ledState = 0;
const int marchePin= 7; // interupteur de mise en route
int marcheState = 0;
const int relais1Pin = 3; // relais principale pour !mise en route
int relais1State = 0;
void setup() {
Serial.begin(9600); // initialisation port série
pinMode(enaPin,OUTPUT);
pinMode(marchePin,INPUT_PULLUP);
pinMode(ledPin,OUTPUT);
pinMode(relais1Pin,OUTPUT);
tft.begin();
tft.setRotation(1);
tft.fillScreen(TFT_BLACK);
tft.setTextSize(2);
}
void loop() {
marcheState = digitalRead(marchePin);
if (marcheState == HIGH){
digitalWrite ( enaState, HIGH ); // mise en route du moteur
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setCursor(80, 20);
tft.print("spectrometre optique diy");
tft.drawRect(0, 0, 480, 120, TFT_RED);
tft.setTextColor(TFT_BLUE,TFT_BLACK);
tft.drawString("valeur photodiode",60, 60, 2);
opt101Value = analogRead(opt101Pin);
float tension = opt101Value * (5.0 / 1023.0);
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setCursor(320, 70);
tft.print(tension);
Serial.print("valeur photodiode = "); // message de la valeur de la photodiode
Serial.println(tension); // lecture valeur photodiode
digitalWrite(relais1Pin,LOW);
digitalWrite(ledPin,LOW);
} else {
digitalWrite ( enaState, HIGH); // mise en route du moteur
digitalWrite(relais1Pin,HIGH); // relais marche
digitalWrite( ledPin,HIGH);
myStepper.setSpeed(10); // réglage vitesse moteur pas à pas lent (déplacement du gratting )
Serial.println("clockwise"); // tourne dans un sens
myStepper.step(500); // effectue 500 pas ( 1/16 de pas x 500 )
myStepper.setSpeed(100); // vitesse rapide
Serial.println("counterclockwise"); // moteur tourne dans l'autre sens
myStepper.step(-500); // effectue 500 pas ( 1/16 de pas x 500 )
}
}
[/code]