Auteur Sujet: MODIFICATION ET COMMANDE PLAQUE TOURNANTE ATLAS  (Lu 16929 fois)

LAIGUILLEUR

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
MODIFICATION ET COMMANDE PLAQUE TOURNANTE ATLAS
« le: août 09, 2018, 10:10:35 am »
Telecommande Pont tournant ATLAS (1 à 8 voies) avec Arduino uno et shield motor

Nomenclature :

Pont tournant ATLAS modifié (avec moteur bipolaire d'origine)
 
1 Arduino Uno

1 Shield Motor
 
1 télécommande (utilisation des touches numériques 1 à 8)
 
8 TLE4905L( capteurs magnétiques «  Effet hall ») :http://pdf.datasheetcatalog.com/datasheets/270/318493_DS.pdf
 
8 diodes LED (jaune ou verte) (position de voie)
1 Capteur infrarouge pour détection télécommande :     SFH5110 OU AX 1838HS
 
9 Résistances 10k (R1 à R8 et R17)
8 Résistances 1k (R9 à R15)
8 Résistances 3.3k (R18 à R25)

Description, détails :

Chacun des 8 TLE 4905 L ( capteurs magnétiques «  Effet hall ») sont collés sur l’emplacement correspondant à la voie1 à voie 8 sur le plateau fixe du pont tournant, l’aimant qui active la voie est collé sur le plateau tournant du pont. (voir photo)
A la mise en route, du 5v et 12v, le positionnement du pont est indiqué par la LED correspondante.
L’appui sur une touche numérique de la télécommande indique la voie de destination.
Le déplacement du pont est dans les 2 sens 1 .. vers ..8 ; 8… vers …1
Le positionnement est précis.
Exemple : a la mise en route si voie 3 = LED voie 3 allumée
Si appui sur touche 8 avance du pont vers voie 8 = LED voie 3,4,5,6,7 clignotent, arrêt précis sur voie 8 = LED voie 8 allumée .
Si LED voie 8 allumée, appui sur touche 5 retour du pont vers voie 5 led = voie 8,7,6 clignotent, arrêt précis sur voie 5 = LED voie 5allumée. Ainsi de suite …..

Programme : (Arduino1.8.5)

// 08/10/2017 v10
// Commander un pont TOURNANT avec une telecommande IR
#include <IRremote.h>
// Broche pour le detecteur infra rouge
int IR = 9; // capteur IR en broche 9
// Broches utilisees
int ledV1 = A4; // led pont en voie 1 broche 0
int ledV2 = A3; // led pont en voie 2 broche 1
int ledV3 =  2; // led pont en voie 3 broche 2
int ledV4 =  3; // led pont en voie 4 broche 3
int ledV5 =  4; // led pont en voie 5 broche 4
int ledV6 =  5; // led pont en voie 6 broche 5
int ledV7 =  6; // led pont en voie 7 broche 6
int ledV8 =  7; // led pont en voie 8 broche 7
// Broches le CIRCUIT MOTEUR (shield Motor)
const int vitesseMotB = 11; // sortie pour vitesse
const int sensMotB = 13; // sorties pour commander le sens
const int freinMotB = 8; // FREIN
int POS = A5; // détection de la position du pont broche A5
int VD; // valeur de la voie de destination = Touche actionn�e
int VP; // valeur de la voie de depart du pont
int Mvt; // Valeur du r�sultat de la comparaison entre voie de depart et voie de destination
int VL; // valeur de la tension lue par l'entree analogique (position du pont A5)
int Vit = 0 ;  // vitesse du moteur du pont ici 240 sur 255 au maxi

IRrecv RCEP(IR);
decode_results RIR;

void setup()
{
  // Serial.begin(9600);
  RCEP.enableIRIn(); // Commencement de la reception
  // mise en memoire position du pont avant commande
  Pospont() ;

  // Determination des sorties
  pinMode(ledV1, OUTPUT);
  pinMode(ledV2, OUTPUT);
  pinMode(ledV3, OUTPUT);
  pinMode(ledV4, OUTPUT);
  pinMode(ledV5, OUTPUT);
  pinMode(ledV6, OUTPUT);
  pinMode(ledV7, OUTPUT);
  pinMode(ledV8, OUTPUT);
  pinMode(vitesseMotB, OUTPUT);
  pinMode(sensMotB, OUTPUT);
  pinMode(freinMotB, OUTPUT);
}
void loop()
{
  digitalWrite(freinMotB, LOW);
  // lecture de la valeur de la tension sur l'entree analogique
  VL = analogRead(POS) ;

  // Appel position du pont
 Pospont() ;

  // Eteindre toutes les leds et allumer la led qui correspond à la position du pont
  switch (VP) // allumer led de la position du pont lors de la premiere mise sous tension VP
  {
    case 1: digitalWrite (ledV1, 1); break ;
    case 2: digitalWrite (ledV2, 1); break ;
    case 3: digitalWrite (ledV3, 1); break ;
    case 4: digitalWrite (ledV4, 1); break ;
    case 5: digitalWrite (ledV5, 1); break ;
    case 6: digitalWrite (ledV6, 1); break ;
    case 7: digitalWrite (ledV7, 1); break ;
    case 8: digitalWrite (ledV8, 1); break ;
  }
  // lecture de la touche appuyee sur la telecommande
  if (RCEP.decode(&RIR))
  {
    // Traduction de touche telecommande IR en N° de voie destination VD
    if (RIR.value == 16582903)  {
      VD = 1 ;
    }
    if (RIR.value == 16615543)  {
      VD = 2 ;
    }
    if (RIR.value == 16599223)  {
      VD = 3 ;
    }
    if (RIR.value == 16591063)  {
      VD = 4 ;
    }
    if (RIR.value == 16623703)  {
      VD = 5 ;
    }
    if (RIR.value == 16607383)  {
      VD = 6 ;
    }
    if (RIR.value == 16586983)  {
      VD = 7 ;
    }
    if (RIR.value == 16619623)  {
      VD = 8 ;
    }
    delay (50);
    switch (VD) // allumer la led de destination et clignotement des leds de passage de voie
    {
      case 1:
        digitalWrite(ledV1, 1);
        digitalWrite(ledV2, 0);
        digitalWrite(ledV3, 0);
        digitalWrite(ledV4, 0);
        digitalWrite(ledV5, 0);
        digitalWrite(ledV6, 0);
        digitalWrite(ledV7, 0);
        digitalWrite(ledV8, 0);
        delay(1000);
        break ;
      case 2:
        digitalWrite(ledV1, 0);
        digitalWrite(ledV2, 1);
        digitalWrite(ledV3, 0);
        digitalWrite(ledV4, 0);
        digitalWrite(ledV5, 0);
        digitalWrite(ledV6, 0);
        digitalWrite(ledV7, 0);
        digitalWrite(ledV8, 0);
        delay(1000);
        break ;
      case 3:
        digitalWrite(ledV1, 0);
        digitalWrite(ledV2, 0);
        digitalWrite(ledV3, 1);
        digitalWrite(ledV4, 0);
        digitalWrite(ledV5, 0);
        digitalWrite(ledV6, 0);
        digitalWrite(ledV7, 0);
        digitalWrite(ledV8, 0);
        delay(1000);
        break ;
      case 4:
        digitalWrite(ledV1, 0);
        digitalWrite(ledV2, 0);
        digitalWrite(ledV3, 0);
        digitalWrite(ledV4, 1);
        digitalWrite(ledV5, 0);
        digitalWrite(ledV6, 0);
        digitalWrite(ledV7, 0);
        digitalWrite(ledV8, 0);
        delay(1000);
        break ;
      case 5:
        digitalWrite(ledV1, 0);
        digitalWrite(ledV2, 0);
        digitalWrite(ledV3, 0);
        digitalWrite(ledV4, 0);
        digitalWrite(ledV5, 1);
        digitalWrite(ledV6, 0);
        digitalWrite(ledV7, 0);
        digitalWrite(ledV8, 0);
        delay(1000);
        break ;
      case 6:
        digitalWrite(ledV1, 0);
        digitalWrite(ledV2, 0);
        digitalWrite(ledV3, 0);
        digitalWrite(ledV4, 0);
        digitalWrite(ledV5, 0);
        digitalWrite(ledV6, 1);
        digitalWrite(ledV7, 0);
        digitalWrite(ledV8, 0);
        delay(1000);
        break ;
      case 7:
        digitalWrite(ledV1, 0);
        digitalWrite(ledV2, 0);
        digitalWrite(ledV3, 0);
        digitalWrite(ledV4, 0);
        digitalWrite(ledV5, 0);
        digitalWrite(ledV6, 0);
        digitalWrite(ledV7, 1);
        digitalWrite(ledV8, 0);
        delay(1000);
        break ;
      case 8:
        digitalWrite(ledV1, 0);
        digitalWrite(ledV2, 0);
        digitalWrite(ledV3, 0);
        digitalWrite(ledV4, 0);
        digitalWrite(ledV5, 0);
        digitalWrite(ledV6, 0);
        digitalWrite(ledV7, 0);
        digitalWrite(ledV8, 1);
        delay(1000);
        break ;
    } 
    // Comparer la voie de depart et la voie de destination Mvt
    Mvt = VD - VP ;

    if (Mvt == 0) // Arreter le pont
    {
      digitalWrite(vitesseMotB, LOW); // à l'arret
      delay (400); // on attend 400 milisecondes avant de couper l'alimenation du pont
      // pour arret nickel en face de la voie de destination
      digitalWrite(sensMotB, LOW); // arret du moteur
      digitalWrite(freinMotB, LOW);

      RCEP.resume(); // Reception de la prochaine valeur
    }

    if (Mvt > 0) // Faire avancer le pont
    {
      // sens de rotation 1 : rotation inverse du sens 2
      digitalWrite(sensMotB, LOW); // 1 indique niveau haut ou HIGH
      digitalWrite(vitesseMotB, HIGH);
    }
 delay(50);
    if (Mvt < 0) // Faire reculer le pont
    {
      // sens de rotation 2 : rotation inverse du sens 1
      digitalWrite(sensMotB, HIGH);
      digitalWrite(freinMotB, LOW);
      digitalWrite(vitesseMotB, HIGH);
    }
  }
}

 void Pospont()   // Mise en memoire des constantes des positions du pont VP
 // tension VL determinee par le chainage des valeurs de resistance voir schema
{
  if (VL > 990 && VL <= 1000 )   {
    VP = 1 ;
  }
  if (VL > 970 && VL <= 980 )    {
    VP = 2 ;
  }
  if (VL > 930 && VL <= 950 )    {
    VP = 3 ;
  }
  if (VL > 850 && VL <= 890 )    {
    VP = 4 ;
  }
  if (VL > 700 && VL <= 800 )    {
    VP = 5 ;
  }
  if (VL > 590 && VL <= 650 )    {
    VP = 6 ;
  }
  if (VL > 350 && VL <= 380 )    {
    VP = 7 ;
  }
  if (VL > 100 && VL <= 110 )    {
    VP = 8 ;
  }TROU
}                                 

 

                                
PERCAGE (8 trous) pour emplacements TLE4905L collés

1   AIMANT pastille  2ou 3 mm epais collé                   

8 TLE4905L (achetés sur ebay ou autres fonctionnement OK)

Montage sur circuit imprimé : avec le logiciel de CI lochmaster 3.0 ou 4.0
 
« Modifié: août 09, 2018, 08:58:10 pm par Dominique »

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3045
  • 100% Arduino et N
    • Voir le profil
Re : MODIFICATION ET COMMANDE PLAQUE TOURNANTE ATLAS
« Réponse #1 le: août 09, 2018, 09:04:02 pm »
Bonjour LAIGUILLEUR,

Ton truc est surement super mais trop difficile à lire : j'ai donc refait la mise en page en utilisant les attributs mis à ta disposition (les petits icônes au dessus du texte, il faut s'en servir si tu veux que les autres modélistes te lisent) et j'ai supprimé les doublons (une bonne moitié de ton texte) ceci pour passer du mode "brouillon" à quelque chose de plus sympathique.

J'espère ne pas avoir introduit de bêtises donc je te demande de le relire attentivement et de corriger ce qui doit l'être en cliquant sur le lien "Modifier"

Bien entendu ce serait bien que tu ajoutes un schéma complet fait avec un logiciel adéquate selon ton système d'exploitation et exporté en jpeg, puis inséré en cliquant sur le lien "Fichiers joints" en dessous de ton texte quand tu es en mode "Modification".

Indiques bien aussi l'échelle de ton réseau !

Merci d'avance et bon projet.

Dominique
« Modifié: août 09, 2018, 09:09:33 pm par Dominique »
Cordialement,
Dominique

LAIGUILLEUR

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Re : MODIFICATION ET COMMANDE PLAQUE TOURNANTE ATLAS
« Réponse #2 le: août 10, 2018, 03:54:57 pm »
Merci Dominique, d'avoir rectifié le texte que j'avais toutefois vérifié en prévisualisant.
J'ai un réseau à l'échelle N, ce montage peut être adapté à d'autres echelles (ho,z ....)la plaque tournante Atlas existe en HO je pense chez Daliplumes sur Google.Peut être adapté à d'autres modèle de plaque tournante ou rotonde.
Je mettrais prochainement les images et schémas.