Contrôleur multifonctionnel élaboré autour du ESP32 DEVKIT V1 DOIT (4 de 4)

La programmation

Opération du relais, lecture du détecteur de rayon laser et du bouton de déclenchement du relais

Le transistor qui contrôle le relais est relié sur le GPIO 32
   #define pinDeclencheur 32

 Le détecteur de rayon laser est relié sur le GPIO 13
    #define pinDetecteurLaser 13

 Un interrupteur à action momentanée est relié sur le GPIO 25. Le contact se ferme en appuyant sur le bouton, il s’ouvre lorsqu’il est relâché.
    #define pinBoutonDeclencheur 25

 La variable «etatDetecteurLaser» de type booléenne est définie. Nous y garderons l’état du détecteur laser (1 vrai ou 0 faux) 
   boolean etatDetecteurLaser;

 La variable «etatBtnDeclencheur» de type booléenne est définie. Nous y garderons l’état du bouton déclencheur (1 vrai ou 0 faux) 
    boolean etatBtnDeclencheur;

 La variable «delaiDeReaction» de type entière est définie. Nous y garderons un nombre qui servira pour décaler l’enclenchement du relais par rapport à la détection d’un signal de déclenchement
    int delaiDeReaction = 0;

 La variable «tempsRelaisActif» de type entière est définie. Nous y garderons un nombre qui servira pour établir la durée d’activation du relais
    int tempsRelaisActif = 1000; // Durée d’activation du relais en milliseconde

 La variable «delaiAvantRetour» de type entière est définie. Nous y garderons un nombre qui servira pour établir le délai avant de retourner suivre l’état des détecteurs. Pour le déclenchement d’appareil photo ce délai doit être plus grand que le temps d’exposition.
    int delaiAvantRetour = 1000; // Délai en milliseconde avant de retourner suivre l’état des détecteurs

setup()

 Définition du GPIO 32 en sortie
     pinMode(pinDeclencheur, OUTPUT );

 Mets la sortie GPIO 32 à BAS
    digitalWrite(pinDeclencheur, LOW);

 Définition du GPIO 13 en entrée digitale
     pinMode(pinDetecteurLaser, INPUT);

 Définition du GPIO 25 en entrée digitale et activation de la résistance interne de pull-up sur le 3.3 volts.
     pinMode(pinBoutonDeclencheur, INPUT_PULLUP);

loop()

 Transfert l’état du détecteur laser dans la variable «etatDetecteurLaser»
     etatDetecteurLaser = digitalRead(pinDetecteurLaser);

 Transfert l’état du bouton déclencheur dans la variable «etatBtnDeclencheur»
     etatBtnDeclencheur = digitalRead(pinBoutonDeclencheur);

 Si l’état du détecteur laser est 0 (faisceau coupé) exécute la fonction de déclenchement du relais
    if (!etatDetecteurLaser) {;  // si l’état du détecteur est 0 (faisceau coupé)
        declencheRelais();

    }

 Si l’état du bouton est 0 (interrupteur enfoncé) exécute la fonction de déclenchement du relais
    if (!etatBtnDeclencheur) {; // si l’état du bouton est 0 (enfoncé)
        declencheRelais();

    }

Fonction

Fonction «declencheRelais». Le relais est déclenché, attente de X seconde, le relais est relâché, attente de X seconde avant de retourner voir l’état des détecteurs.
    void declencheRelais(){
       
digitalWrite( pinDeclencheur, HIGH); // Déclenche le relais 
        delay(tempsRelaisActif); // Attente en milliseconde 
        digitalWrite( pinDeclencheur, LOW); // Relâche le relais
        delay(delaiAvantRetour); // Attente en milliseconde
    }

Le circuit en action

Montage de tests

Declencheur Appareil_Photo_01 :

https://github.com/rcepmorel/Declencheur-Appareil_Photo_01

/*DÉCLENCHEUR D'APPAREIL PHOTO ET DE FLASHS
* 
* Auteur : Richard Morel
*     2018-11-09
* 
* Modification
*     2018-11-17
*     - Mesure du voltage d'entrée
*     - Ajout du clignotement de la DEL bleue
*       Relié sur la broche D33
*    2018-11-30
*     - Ajout du déclencheur de relais
*       Relié sur le GPIO 32
*     - Ajout du détecteur du rayon laser pour déclencher le relais
*       sur la coupure du faisceau
*       Relié sur la GPIO 13
*     - Ajout d'un interrupteur pour déclencher le relais
*       Relié sur la GPIO 25
*     - La DEL bleue suit l'état du détecteur laser
*/

const int DELBLEUE = 33; // DEL bleue reliée au GPIO33

#include <driver/adc.h>   
//ADC1_CHANNEL_7 D35 35

float VoltMesure = 0;
float vpeDvValmx_0DB = 1.1/4095; // 12 bits de résolution
float vvpeDvValmx_2_5DB = 1.5/4095;
float vpeDvValmx_6DB = 2.0/4095;
float vpeDvValmx_11DB = 3.9/4095;

// valeur réelle diviser par VoltMesure lorsque calibrationDiviseurTSN égal à 1
float calibrationDiviseurTSN = 7.99/8.70;     

// valeur réelle diviser par VoltMesure lorsque calibrationDiviseurTsn égal à 1
float calibrationDiviseurTsnTrtPolyn = 7.99/8.07; 

#define pinDeclencheur 32        // Déclenche le relais ( Relais contact NO )
#define pinDetecteurLaser 13     // Détecte une MALT à l'entrée D13
#define pinBoutonDeclencheur 25  // Détecte une MALT à l'entrée D25

boolean etatDetecteurLaser; 
boolean etatBtnDeclencheur; 

int delaiDeReaction = 0;
int tempsRelaisActif = 1000; // Durée d'activation du relais en milliseconde
int delaiAvantRetour = 1000; // Délai en milliseconde avant de retourner suivre l'état des détecteurs

// ----------------------------------------------------------------------------- 
// FONCTION  FONCTION   FONCTION    FONCTION    FONCTION    FONCTION    FONCTION
// ----------------------------------------------------------------------------- 

void declencheRelais(){
  digitalWrite(pinDeclencheur, HIGH);  // Déclenche le relais
  delay(tempsRelaisActif); // Attente en milliseconde 
  digitalWrite(pinDeclencheur, LOW);   // Relâche le relais
  delay(delaiAvantRetour); // Attente en milliseconde                    
}

// ----------------------------------------------------------------------------- 
// SETUP   SETUP   SETUP   SETUP   SETUP   SETUP   SETUP   SETUP   SETUP
// ----------------------------------------------------------------------------- 
void setup() {
  Serial.begin(9600);
  
  pinMode(DELBLEUE, OUTPUT);

  pinMode(pinDeclencheur, OUTPUT );
  digitalWrite(pinDeclencheur, LOW);

  pinMode(pinDetecteurLaser, INPUT);
  pinMode(pinBoutonDeclencheur, INPUT_PULLUP);   // active la résistance de pull-up interne sur le +3v

  
  // ***** Configuration pour faire des mesures sur D35 (voltage de la source d'alimentation) ******
  adc1_config_width(ADC_WIDTH_BIT_12); // Définie la résolution (0 à 4095)
  

  adc1_config_channel_atten(ADC1_CHANNEL_7,ADC_ATTEN_DB_11); //Le voltage maximum au GPIO est de 3.3V

  Serial.println("PRÊT");
}

// ----------------------------------------------------------------------------- 
// LOOP     LOOP     LOOP     LOOP     LOOP     LOOP     LOOP     LOOP     LOOP 
// ----------------------------------------------------------------------------- 
void loop() {
  etatDetecteurLaser = digitalRead(pinDetecteurLaser);
  etatBtnDeclencheur = digitalRead(pinBoutonDeclencheur);
  digitalWrite(DELBLEUE, etatDetecteurLaser); 

  if (!etatDetecteurLaser){; // si l'état du détecteur est 0 (faisceau coupé)
    delay(delaiDeReaction); // délai avant d'activer le relais (en milliseconde)
    //delayMicroseconds(delaiDeReaction); // délai avant d'activer le relais (en microseconde)
    declencheRelais();
  }
  
  if (!etatBtnDeclencheur){; // si l'état du bouton est 0
    declencheRelais();
  }

 
  // Méthode de G6EJD  (applicable si l'atténuation est 11dB et la résolution est 12 bits)
  float reading = analogRead(35);
  float VoltAlimCtrlReduitTrtPolyn = -0.000000000000016 * pow(reading,4) + 0.000000000118171 * pow(reading,3)- 0.000000301211691 * pow(reading,2)+ 0.001109019271794 * reading + 0.034143524634089;
  float VoltMesureTrtPolyn = VoltAlimCtrlReduitTrtPolyn*122/22; // Diviseur de tension 100K, 22K
  VoltMesureTrtPolyn = VoltMesureTrtPolyn*calibrationDiviseurTsnTrtPolyn; // correction due aux valeurs imprécises du diviseur de tension
  
 // Serial.print(reading);Serial.print(" DigitalValueVoltAlimCtrl ");Serial.print(VoltAlimCtrlReduitTrtPolyn);Serial.print(" VoltAlimCtrlReduit  ");
 // Serial.print(VoltMesureTrtPolyn);Serial.println(" VoltMesure"); 
 // Serial.println(" "); 

  Serial.print(etatDetecteurLaser);
  Serial.print(" État détecteur Laser,");
  Serial.print(etatBtnDeclencheur);
  Serial.print(" État Interrupteur,");
  Serial.print(VoltMesureTrtPolyn);
  Serial.println(" Voltage d'alimentation,");

  
}

<-Contrôleur multifonctionnel élaboré autour du ESP32 DEVKIT V1 DOIT (3 de 4)        L’interface Web du déclencheur de relais ->