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 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