Auteur Sujet: Un BV animé par ATtiny 85  (Lu 42989 fois)

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3050
  • 100% Arduino et N
    • Voir le profil
Un BV animé par ATtiny 85
« le: juin 11, 2017, 11:28:33 pm »
Bonjour à tous,

Je viens de finir (presque) la réalisation de ma gare sur la base du BV 3 portes "Saint Désert" d'Architecture et Passion.

C'est très agréable à construire, vu que les pièces sont prédécoupées au laser. J'ai voulu le faire aussi bien que possible.

Comme il y a les cloisons à l'intérieur, j'ai décidé d'intégrer un ATtiny85 pour gérer les éclairages des pièces avec un peu d'aléatoire.



Pour cela j'ai récupéré les leds cms d'un ruban et je les ai insérées dans le plafond du rez de chaussée :



Et j'ai installé un Digispark à l'étage supérieur :



Evidemment j'ai gardé la structure intérieure amovible pour reprogrammer l'ATtiny éventuellement.

Mon programme ne casse pas des briques, mais je me suis bien amusé :

/*
 * animation lumineuse de la gare de La Roche
 * basée sur un ATtiny85
 * 5 pins utilisées : 0 à 4
 * pin 0 = entrée clients, toujours allumée
 * pin 1 = bureau de vente, avec employé
 * pin 2 = salle d'attente, parfois éteinte
 * pin 3 = bureau, parfois allumé
 * pin 4 = etage, parfois allumé
 * pin 5 = entrée analogique pour faire de l'aléatoire
 * une temporisation de 10 secondes change l'état des leds
 *
 * Version 1.00 du 11 juin 2017 Dominique (Locoduino)
 */

 // constantes
 const int tempo1 = 5000;
 const int tempo2 = 10000;

 // variables
 byte leds = 0B00011111; // état des leds - - - 4 3 2 1 0
 unsigned long temps;
 byte randNumber;
 int tempo;
 
 
 void setup() {
  pinMode(0,OUTPUT); // entrée clients
  pinMode(1,OUTPUT); // bureau de vente
  pinMode(2,OUTPUT); // salle d'attente
  pinMode(3,OUTPUT); // bureau
  pinMode(4,OUTPUT); // etage
  temps = millis();
  tempo = tempo1;
  randomSeed(analogRead(5));
}
 
 
 void loop() {
  for (int i=0; i<5; i++) {
    digitalWrite(i, bitRead(leds, i));
  }

  if (millis() > temps+tempo) {
    temps = millis();
    if (tempo == tempo1) {
      tempo = tempo2;
    } else {
      tempo = tempo1;
    }
    randNumber = random(32);
    leds = randNumber | 0B00000011;
  }
}

Voici une petite video :



Amicalement
Dominique
« Modifié: juin 29, 2017, 11:31:41 am par Dominique »
Cordialement,
Dominique

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 813
    • Voir le profil
Re : Un BV animé par ATtiny 85
« Réponse #1 le: juin 12, 2017, 11:46:32 am »
Très sympathique projet !

DDEFF

  • Hero Member
  • *****
  • Messages: 760
    • Voir le profil
Re : Un BV animé par ATtiny 85
« Réponse #2 le: juin 12, 2017, 08:33:54 pm »
Simple et efficace.
Préparation FFMF ? Bonne idée !
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

TF53

  • Newbie
  • *
  • Messages: 47
    • Voir le profil
Re : Un BV animé par ATtiny 85
« Réponse #3 le: juin 13, 2017, 09:31:23 pm »
Tout simplement excellent!

Puis-je te faire une petite suggestion? Il serait peut être intéressant de rajouter un petit délais de transition entre l'extinction d'une pièce et l'allumage d'une autre (on fait rarement les deux exactement au même moment ;) )

Je vois 2 possibilités pour ce délais :
  • la première pièce s’éteint, le délais s'écoule, puis une autre pièce s'allume
  • la première pièce est toujours allumée. Une autre pièce s'allume, le délais s'écoule, puis la première pièce s'éteint


bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1109
  • HO avec DCC++
    • Voir le profil
Re : Un BV animé par ATtiny 85
« Réponse #4 le: juin 14, 2017, 06:50:44 am »
Sympathique animation qui met de la vie et participe à la magie d'un réseau miniature.

Et merci pour le partage  8)

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3050
  • 100% Arduino et N
    • Voir le profil
Re : Un BV animé par ATtiny 85
« Réponse #5 le: juin 14, 2017, 08:24:44 am »
Merci pour la suggestion qui est excellente :

Citer
la première pièce s’éteint, le délais s'écoule, puis une autre pièce s'allume
la première pièce est toujours allumée. Une autre pièce s'allume, le délais s'écoule, puis la première pièce s'éteint

je vais le faire et le publier prochainement !
(voilà pourquoi j'ai gardé l'accès à la prise micro-USB)

Dominique
« Modifié: juin 15, 2017, 07:48:49 pm par Dominique »
Cordialement,
Dominique

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3050
  • 100% Arduino et N
    • Voir le profil
Re : Un BV animé par ATtiny 85
« Réponse #6 le: juin 15, 2017, 07:36:14 pm »
En suivant la suggestion de TF53, le programme nouveau devient :

/*
 * animation lumineuse de la gare de La Roche
 * basée sur un ATtiny85
 * 5 pins utilisées : 0 à 4
 * pin 0 = entrée clients, toujours allumée
 * pin 1 = bureau de vente, avec employé
 * pin 2 = salle d'attente, parfois éteinte
 * pin 3 = bureau, parfois allumé
 * pin 4 = etage, parfois allumé
 * pin 5 = entrée analogique pour faire de l'aléatoire
 * une temporisation de 10 secondes change l'état des leds
 *
 * Version 1.01 du 15 juin 2017 Dominique (Locoduino)
 */

 // constantes
 const int tempo1 = 5000;
 const int tempo2 = 10000;

 // variables
 byte leds = 0B00011111; // état des leds - - - 4 3 2 1 0
 unsigned long temps;
 byte randBit, randByte;
 int tempo;
 
 
 void setup() {
  pinMode(0,OUTPUT); // entrée clients
  pinMode(1,OUTPUT); // bureau de vente
  pinMode(2,OUTPUT); // salle d'attente
  pinMode(3,OUTPUT); // bureau
  pinMode(4,OUTPUT); // etage
  temps = millis();
  tempo = tempo1;
  randomSeed(analogRead(5));
}
 
 
 void loop() {
  for (int i=0; i<5; i++) {
    digitalWrite(i, bitRead(leds, i));
  }

  if (millis() > temps+tempo) {
    temps = millis();
    if (tempo == tempo1) {
      tempo = tempo2;
    } else {
      tempo = tempo1;
    }
    randBit = random(2,5); // donc 2 ou 3 ou 4
    randByte = 0;
    randByte = bitSet(randByte,randBit);
    leds = leds ^ randByte;
  }
}
 

Le croquis utilise 1602 octets (26%) de l'espace de stockage de programmes. Le maximum est de 6012 octets.
Les variables globales utilisent 24 octets de mémoire dynamique.

Il n'est pas surchargé l'ATtiny85 !

Les temps sont longs pour plus de naturel (tempo de 5 ou 10 secondes alternativement) et à chaque fois, on inverse un bit dans l'octet "leds", ce qui évite la simultanéité d'un allumage et d'une extinction.

La fenêtre rouge est celle où se trouve l'ATtiny, j'ai atténué la led avec un bout de papier.

Avez-vous remarqué le préposé SNCF derrière son comptoir au milieu ? On le voit à peine sur la première photo.



Amicalement
Dominique
« Modifié: juin 15, 2017, 07:50:18 pm par Dominique »
Cordialement,
Dominique

TF53

  • Newbie
  • *
  • Messages: 47
    • Voir le profil
Re : Un BV animé par ATtiny 85
« Réponse #7 le: juin 15, 2017, 09:01:35 pm »
Génial!

Citer
Avez-vous remarqué le préposé SNCF derrière son comptoir au milieu ? On le voit à peine sur la première photo.

C'est vrai qu'en photo / vidéo, c'est dur à voir. Enfin on voit un bonhomme, mais de là à dire ce qu'il fait...

Fantasio

  • Newbie
  • *
  • Messages: 40
    • Voir le profil
Re : Un BV animé par ATtiny 85
« Réponse #8 le: février 02, 2020, 04:16:46 pm »
Juste un message de remerciement vers Dominique sans oublier la contribution de TF53..

J'ai utilisé votre programme au profit de mon club de train et de ses adhérents.
A ce jour de nombreux bâtiments sur nos réseaux HO et N sont désormais éclairés de cette façon et ceci grâce à vous.

L'étape suivante sera le passage à l'attiny84 et j'adapterai le programme en conséquence.

Locoduino propose des montages parfois complexes et ambitieux, mais les petits de ce genre sont également appréciés.

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3050
  • 100% Arduino et N
    • Voir le profil
Re : Un BV animé par ATtiny 85
« Réponse #9 le: février 04, 2020, 09:49:54 am »
merci pour le compliment : content d'être partagé  ;D

Dominique
Cordialement,
Dominique

lambda95t3

  • Newbie
  • *
  • Messages: 10
    • Voir le profil
Re : Un BV animé par ATtiny 85
« Réponse #10 le: mars 30, 2020, 03:45:37 pm »
Bonjour,
mon club était confronté au même problème et je commençais à me creuser la tête sur la base d'un Uno et des enseignements aléatoires  ;) de Locoduino (formidable site!).
Et voilà que je trouve votre exemple très simple. Je vais donc le mettre en œuvre avec joie, étant très paresseux de nature.
Mille mercis pour le partage. En plus, ça me permet de découvrir des instructions peu familières pour moi.

Souris verte

  • Newbie
  • *
  • Messages: 40
  • HO, DCC, Arduino...
    • Voir le profil
Re : Un BV animé par ATtiny 85
« Réponse #11 le: mars 30, 2020, 10:24:31 pm »
Bonsoir,

Avec WS2812 + Attiny85, il est possible d’augmenter le nombre de pièces éclairées tout en utilisant que 3 pattes (5v, gnd, 0).
Bibliothèque NeoPixel

Bon confinement 😷
Yannick

Pyk35

  • Full Member
  • ***
  • Messages: 110
    • Voir le profil
Re : Re : Un BV animé par ATtiny 85
« Réponse #12 le: mars 31, 2020, 04:08:31 pm »
Avec WS2812 + Attiny85, il est possible d’augmenter le nombre de pièces éclairées tout en utilisant que 3 pattes (5v, gnd, 0).
Bibliothèque NeoPixel

Je suis convaincu que c'est comme ça qu'il faut faire. L'intérêt est qu'avec une seule sortie on pilote un nombre dingue de LED et comme elles sont multicouleurs, tu peux avoir des effets soit de couleur et même des émulations de feu de cheminée ou de TV en fonctionnement.
La WE2812 est une solution d'avenir pour nos modules et surtout tellement simple.
Reste à faire si ce n'est déjà fait la classe qui va bien pour piloter ces LED par le CAN ;)

Pour info, j'en acheté 100, détachables, pour 7€ : https://www.aliexpress.com/item/32451310377.html?spm=a2g0o.cart.0.0.56f83c008BkgaL&mp=1
A+
Cédric

Pierre34

  • Newbie
  • *
  • Messages: 28
    • Voir le profil
Re : Un BV animé par ATtiny 85
« Réponse #13 le: avril 15, 2021, 07:22:23 pm »
Bonjour Dominique

Je suis admiratif devant votre exemple.
J'essaie de le mettre en oeuvre.

Je présume que malgré son port l'ATTINY85 se programme comme le montre la série ATtiny45.
Dans ce cas j'ai un pb. Lors de la compilation du programme Arduino ISP de la rubrique exemple j'ai une erreur de compilation dés la ligne 136 #define SERIAL Serial. L'IDE me retourne Serail was not declared in the scope. Et là je ne comprends pas ce que je peux faire.

Merci pour vos lumières

Bien cordialement
Pierre

Pierre34

  • Newbie
  • *
  • Messages: 28
    • Voir le profil
Re : Un BV animé par ATtiny 85
« Réponse #14 le: avril 15, 2021, 08:12:41 pm »
Euréka.
En cherchant sur internet j'ai trouvé. La toute première étape celle qui transforme l'arduino en programmateur doit se faire en Arduino UNO ISP et non pas arduino as ISP. et là le programme compile et la suite se passe bien.

Ouf