Nouvelles:

25/06/2023 : Mise à jour du forum. En cas de bug, merci de contacter le Grand Sachem

Menu principal

Clignotement feux de PN

Démarré par Attiny, 18 Février 2021 à 12:34:39

« précédent - suivant »

0 Membres et 1 Invité sur ce sujet

Attiny

Bonjour à tous

Sur un autre forum, un modéliste souhaitait une petite animation pour son réseau consistant à commander le clignotement de deux feux de PN pendant une durée définie suite à l'appui d'un bouton-poussoir.
J'ai étudié sa demande et utilisé un ATtiny85 pour la réalisation. 
Je pense que certains d'entre vous pourraient être intéressés par ce montage et par le code.

Comme je l'indiquai précédemment la commande est manuelle mais rien n'empêche de remplacer le bouton-poussoir par un capteur, (ILS, capteur à effet HALL, capteur IR...). La détection se fait par l'envoi d'une masse sur la broche 7 de l'Attiny.
Les feux sont des leds et pour simuler l'inertie des ampoules j'ai utilisé la bibliothèque lightDimmer (téléchargeable ici:https://github.com/Locoduino/LightDimmer).
Je voulais également que la durée du clignotement commence dès que le bouton-poussoir est sollicité et soit indépendante de la durée de l'appui. Pour ce faire j'ai utilisé une autre bibliothèque : simpleBouton (téléchargeable ici https://forum.arduino.cc/index.php?topic=375232.0.

Voici mon code qui est facilement transposable sur d'autres cartes (UNO, NANO....), la seule contrainte est que les sorties utilisées soient des PWM.


/* attiny clignotement PN
* 15/02/2021
* commande de clignotement de 2 feux PN pendant une durée fixe
* la temporisation commence dès la fermeture du BP
* utilisation de la bibliothèque LightDimmer
* lien: https://github.com/Locoduino/LightDimmer
* utilisation de la bibliothèque simplebouton
* lien: https://forum.arduino.cc/index.php?topic=375232.0
*
*      Brochage ATiny85
*        =|1  U  8|= VCC
*        =|2     7|= 2 BP--GND
*        =|3     6|= 1 LED2--R--GND
*    GND =|4     5|= 0 LED1--R--GND
*
*/

const byte pin_bouton = 2;           // Numéro de la pin du bouton pour l'ATtiny
int tempoActive = 0;                 // État d'activation de la tempo
unsigned long temporisation = 25000; //valeur de la temporisation en ms
unsigned long tempoDepart = 0;

#include "simpleBouton.h"
simpleBouton bouton(pin_bouton);
#include <LightDimmer.h>
LightDimmer ledPN1;
LightDimmer ledPN2;

void setup() {
ledPN1.begin(0,HIGH);// la led1 est branchée sur la pin 0 (PWM)
ledPN2.begin(1,HIGH);// la led2 est branchée sur la pin 1 (PWM)
pinMode(pin_bouton, INPUT_PULLUP);
int tempoActive =1;
}

void loop(){
  bouton.actualiser();
  LightDimmer::update();   
  if (bouton.vientDEtreEnfonce())// Si le bouton est appuyé
  {
    ledPN1.startBlink(); // la led1 commence son clignotement
    ledPN2.startBlink(); // la led2 commence son clignotement
    tempoActive = 1;     // la temporisation est activée
    tempoDepart = millis();
  }

  // Si la temporisation est active,
  if (tempoActive)
  {     
    // Et si il s'est écoulé 25 secondes,
    if (( millis() - tempoDepart) >= temporisation )
    {
      ledPN1.stopBlink();//on arrête le clignotement de la LED1
      ledPN1.off();
      ledPN2.stopBlink();//on arrête le clignotement de la LED2
      ledPN2.off();
      tempoActive = 0;
    }
  }
}


Amusez vous bien

Attiny

Pour ceux qui voudraient tenter l'aventure avec un ATtiny85,  la platine sans la puce.

nohabdiesel

Je n'y comprends rien, pour moi, c'est du chinois, mais je te félicite et si je vivais en Europe, je t'en aurais commandé un, parce que je trouve l'idée intéressante surtout pour un pn situé sur une zone de manoeuvres ou dans une zone industrielle. Comme dans la réalité, ils sont commandés manuellement par le personnel du train. :AA
Jean-François
Wallon sous les tropiques    https://sites.google.com/view/letraindemaurice/accueil

Attiny

#3
@nohabdiesel

Tu as raison le langage utilisé est bien une langue étrangère (ou plutôt une écriture) et comme telle il faut apprendre son vocabulaire et sa grammaire pour construire ses phrases correctement afin que le microprocesseur comprenne et obéisse aux ordres qu'on lui donne. 
Mais honnêtement ce n'est pas si compliqué...Et on arrive à produire des choses vraiment intéressantes avec peu de composants et donc un cout faible.  :D
Le microprocesseur étant reprogrammable un très grand nombre de fois, on peut modifier le programmable sans aucun problème et obtenir exactement ce l'on souhaite.
Le code que j'ai mis en ligne est ainsi le résultat d'au moins cinq essais avant j'en sois satisfait.

A l'instar de Philippe Blondé je vous proposerai dans l'avenir d'autres montages.

Bonne continuation


Ph Blondé

C'est tout l'intérêt de ce petit circuit (l'ATtiny 85) : réaliser des animations sans prendre de place  :)
On peut faire des bêtes clignotants à vitesse variable, des flash, des braséros et même commander un servomoteur.
Merci Attiny  :D :D
Philippe Blondé
Un 59 dans le 22