Arduino , question Youtube , commande moteur 220V bistable avec minuteur

Aujourd’hui on va répondre à une question d’un abonné , Albert Bert 77ans , cool il n’y a pas d’âge pour l’aduino.

Il souhaiterait câbler un moteur 220V et automatiser le temps de rotation et inverser le sens de rotation.

Il n’a jamais codé et aimerai que je fasse un tuto pour son projet.

Et bien c’est ce que l’on va faire avec un petit bonus!

Capture Commentaire Albert Ligne

Tuto Youtube Moteur Bistable

 

#define PIN_BOUTON_AUTO  7
#define PIN_BOUTON_STOP  6
#define PIN_BOUTON_HORAIRE  5
#define PIN_BOUTON_ANTIHORAIRE  4
#define PIN_RELAIS_HORAIRE  3
#define PIN_RELAIS_ANTIHORAIRE  2
#define PIN_POT  A0

// potentiometre
int val = 0;
int tempsAdditionnel = 0;
// fin potentiometre

// variable qui gere le mode auto
bool modeAuto = 0 ;
int modeNumber = 0 ;

long temps = 0 ;
long tempsMax = 20000 ;// temps minimum en ms 20000 = 20secondes

void setup() {
  pinMode(PIN_BOUTON_AUTO, INPUT);
  pinMode(PIN_BOUTON_STOP, INPUT);
  pinMode(PIN_BOUTON_HORAIRE, INPUT);
  pinMode(PIN_BOUTON_ANTIHORAIRE, INPUT);
  pinMode(PIN_RELAIS_HORAIRE, OUTPUT);
  pinMode(PIN_RELAIS_ANTIHORAIRE, OUTPUT);
}

void loop() {

// potentiometre de temps
  val = analogRead(PIN_POT);      
  tempsAdditionnel = ( map(val, 0, 1023, 0, 21) * 1000 ); 

  if(digitalRead(PIN_BOUTON_AUTO) == HIGH){
    automatic();
  }
  if(digitalRead(PIN_BOUTON_STOP) == HIGH){
    modeAuto = 0 ;
    modeNumber = 0 ;
    stopMoteur();
  }
  if(digitalRead(PIN_BOUTON_HORAIRE) == HIGH){
    modeAuto = 0 ;
    modeNumber = 0 ;
    stopMoteur();
    sensHoraire();
    delay(500);
  }
  if(digitalRead(PIN_BOUTON_ANTIHORAIRE) == HIGH){
    modeAuto = 0 ;
    modeNumber = 0 ;
    stopMoteur();
    sensAntiHoraire();
    delay(500);
  }

// dans le mode automatique on passe dans cette condition de temps et d'étape
  if(modeAuto == 1){
    // controle du temps a l'etape 1 et 3
    if(modeNumber == 1 || modeNumber == 3 ){
      // si le temps est écoulé on appelle automatic qui va mettre un stop
      if(millis() > (temps + tempsMax + tempsAdditionnel)){
        automatic();        
      }
    }
  }

}

void sensHoraire(){
  digitalWrite(PIN_RELAIS_HORAIRE,HIGH);
  digitalWrite(PIN_RELAIS_ANTIHORAIRE,LOW);
}
void sensAntiHoraire(){
  digitalWrite(PIN_RELAIS_HORAIRE,LOW);
  digitalWrite(PIN_RELAIS_ANTIHORAIRE,HIGH);  
}

void automatic(){
  modeAuto = 1 ;
  modeNumber++;

  switch (modeNumber) {
    case 4:
      stopMoteur();
      modeNumber = 0;
    break;
    case 3:
      stopMoteur();
      temps = millis();
      sensAntiHoraire();
    break;
    case 2:
      stopMoteur();
    break;
    case 1:
      stopMoteur();
      temps = millis();
      sensHoraire();
    break;
    default :
      stopMoteur();
    break;
  }

}

void stopMoteur(){
  digitalWrite(PIN_RELAIS_HORAIRE,LOW);
  digitalWrite(PIN_RELAIS_ANTIHORAIRE,LOW);
  delay(1000);  
}

En matériel il nous faut :
– 1 Arduino
– 2 à 4 boutons (bouton poussoir industriel pour faire une belle boite)
– 2 à 4 résistances (1kΩ)
– 2 relais ( ou un module avec 2 relais )
– 1 potentiomètre 10kΩ ( option bonus)

Niveau câblage le pin 7 est relié a un côté du bouton (bouton automatique), on ajoute une résistance entre la masse et le pin 7, le pin 6 même principe que le pin 7 mais relié a un autre bouton (bouton stop).

Si on souhaite ajouter les 2 boutons suivant, 1 va gérer le sens horaire et l’autre l’anti-horaire pin 5 et pin 4. On oublie pas de câbler l’autre côté des boutons au 5 Volt.

 

Le pin 3 va être relié à un côté du relais et le pin 2 au deuxième relais; l’autre côté du relais toujours coté bobine est relié à la masse.

ATTENTION ! ne pas brancher un relais nu directement sur l’arduino comme sur le schéma, il faut rajouter une diode de rappel (flyback) ou diode tvs ou circuit Snubber ( résistance + condensateur), normalement aucun souci avec les modules relais pour arduino ( déjà protégés)

 

En bonus j’ai rajouté un potentiomètre pour pouvoir régler la vitesse du mode automatique ( minuterie ) donc pour le branchement sur un coté le 5 Volt de l’autre la masse et au milieu on se connecte a la borne A0 de l’arduino.

 

Niveau motorisation 220V pour changer le sens du moteur Albert Bert va s’en charger car je n’ai pas le moteur sous les yeux mais il ma dit qu’avec 2 relais pour lui c’était bon !

 

Au niveau du code , j’ai toutes mes variables définies avec #define , mes variable de potentiomètre, variables pour le mode automatique et mes variables de temps , tempsMax est le temps avant que le moteur s’arrête en mode auto ( le temps est exprimé en ms ).

Si je souhaite jouer avec le potentiomètre je peux mettre un tempsMax de 10 secondes (10000) et régler la valeur en tournant le potentiomètre

 

Partie setup , je défini mes boutons en INPUT et mes relais en OUTPUT

Dans la boucle je récupère la valeur du potentiomètre avec analogRead et je calcule le temps additionnel pour le mode automatique ( si je commente la ligne temps additionnel je désactive la fonction du potentiomètre ce qui donne

//tempsAdditionnel = ( map(val, 0, 1023, 0, 21) * 1000 );

 

Ici je rajoute entre 0s et 20 secondes a mon temps (0,21).

 

Je vais maintenant passer en revue tous les boutons, si mon bouton automatique est activé alors je lance la fonction automatic.

Si j’appuie sur le bouton stop je coupe le mode automatique, je repart au début du mode automatique et j’arrête les moteurs avec la fonction stopMoteur.

J’ai mes boutons horaire et antihoraire ou je remet le modeAuto à 0 et le mode automatisé au début, j’arrête les moteurs au cas ou et j’appelle la fonction associé suivant le sens voulu.

J’ai maintenant une condition pour stopper le mode automatique, si je suis en mode auto et que ma séquence de mode automatique est 1 ou 3 et que le temps est écoulé alors je lance la fonction automatic qui va faire passer à l’étape suivante.

Ici le mode automatique à besoin que j’appuie sur le bouton automatique pour que mon moteur reparte dans l’autre sens.

Si je souhaite que le moteur change de sens automatiquement sans avoir à appuyer sur le bouton je rajoute un appel à la fonction automatic ( automatic(); ) et la indéfiniment mon moteur va tourner dans un sens , puis dans l’autre!

Je suis sorti de ma boucle loop, et j’ai mes fonctions pour le moteur avec le sensHoraire et le sensAntiHoraire , j’active un relais , j’éteins l’autre.

Puis ma fonction automatic, je met le modeAuto a 1 et j’incrémente l’étape du mode automatique.

 

J’ai un switch qui va aiguiller l’étape du mode automatique :

  • la case par défaut  est l’arrêt des moteurs
  • la case 1 arrête le moteur si il est en route, enregistre le temps de repère et lance le sensHoraire
  • la case 2 un stopMoteur
  • la case 3 comme la case 1 mais dans le sens anti horaire
  • la case 4 un stop.

Et ma dernière fonction stopMoteur qui arrête les relais et met un temps de pause après.

Voici le code arduino à télécharger : Tuto Moteur Bistable

Voila Albert Bert j’espère vous avoir répondu et que vous allez pouvoir réaliser ce montage sur votre moteur. N’oubliez pas de m’envoyer une petite photo de votre montage fini !

J’espère que ce tuto va aussi servir à pas mal de bricoleurs et n’oubliez pas à faire un retour sur vos montages.

N’hésitez pas à poser vos questions sur les réseaux sociaux de la chaîne instagramtwitter , facebook ,youtube ; si vous ne comprenez pas certaines parties du tutoriel n’hésitez pas , me dire ce que vous aimeriez que je crée pour en faire des vidéos tutoriel  et à partager les projets que vous aimeriez créer etc…

Comme toujours allez sur la page de C’est quoi Retro et Geek pour connaître tout ce que je recherche à faire sur la chaîne.

Merci les RetroGeeker et RetroGeekeuse