/*attiny aiguillage KATO BP V2
07/03/2025
Dominique Hudry
Commande d'un aiguillage KATO par un BP avec affichage de la voie sélectionnée.
Le BP de commande peut être remplacé par tout capteur délivrant une masse lorsqu'il y a détection,
au repos sa sortie doit être au niveau +5V.
l'étage de puissance est un L293D, La bobine de l'aiguillage KATO est branchée entre Output1 et Output2.
Le changement de position se produit uniquement lors du front descendant de la sortie du capteur.
A la mise sous tension le montage positionne l'aiguillage dans la position Directe.
liens: https://wokwi.com/projects/424788394778888193
https://wiki.mchobby.be/index.php?title=Pont-H_L293D
https://forum.arduino.cc/t/partage-boutons-poussoirs/361656
compatible avec ATtiny25
Brochage Attiny85
=|1 U 8|= VCC
CdeInput2 <--3 =|2 7|= 2--> LedVoieDeviee
CdeInput1 <--4 =|3 6|= 1--> LedVoieDirecte
GND =|4 5|= 0<-- BPcommande--GND
Brochage L293D
+5V--Enable1 =|1 U 16|= +5V
CdeInput1--Input1 =|2 15|= Input4
Output1 =|3 14|= Output4
GND =|4 13|= GND
GND =|5 12|= GND
Output2 =|6 11|= Output3
CdeInput2--Input2 =|7 10|= Input3
+V aiguilles--VS =|8 9|= Enable2--+5V
La bobine de l'aiguillage KATO est branchée entre Output1 et Output2
input1 input2 action
LOW LOW aucun changement
HIGH LOW position Directe
LOW HIGH position Déviée
HIGH HIGH aucun changement
*/
#include "simpleBouton.h"
const byte BPcommande = 0;
const byte LedVoieDirecte = 1;
const byte LedVoieDeviee = 2;
const byte CdeInput1 = 4;
const byte CdeInput2 = 3;
const int dureeImpulsion = 20;
simpleBouton bouton(BPcommande);
bool variableEtat = true;
void setup() {
pinMode(CdeInput1, OUTPUT);
pinMode(CdeInput2, OUTPUT);
pinMode(LedVoieDirecte, OUTPUT);
pinMode(LedVoieDeviee, OUTPUT);
commandePosition(CdeInput1, LedVoieDirecte, LedVoieDeviee); // Commande de l'aiguillage en position Directe
}
void loop() {
bouton.actualiser();
if (bouton.vientDEtreEnfonce()) {
variableEtat = !variableEtat; // Inversion de la variable
if (variableEtat) {
commandePosition(CdeInput1, LedVoieDirecte, LedVoieDeviee); // Commande de l'aiguillage en position Directe
} else {
commandePosition(CdeInput2, LedVoieDeviee, LedVoieDirecte); // Commande en position Déviée
}
}
}
void commandePosition(byte cdeInput, byte ledAllumee, byte ledEteinte) {
digitalWrite(ledEteinte, LOW); // Effacement de la position précédente
digitalWrite(cdeInput, HIGH); // Impulsion envoyée au L293D
delay(dureeImpulsion);
digitalWrite(cdeInput, LOW);
digitalWrite(ledAllumee, HIGH); // La nouvelle position de l'aiguillage est visualisée
}
tiny:PB5
tiny:PB3
tiny:PB4
tiny:GND
tiny:PB0
tiny:PB1
tiny:PB2
tiny:VCC
led1:A
led1:C
r1:1
r1:2
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
led2:A
led2:C
r2:1
r2:2
gnd3:GND
led3:A
led3:C
r3:1
r3:2
gnd1:GND
led4:A
led4:C
r4:1
r4:2