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

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1751
  • 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 »

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 507
    • 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

  • Sr. Member
  • ****
  • Messages: 477
    • 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 !

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
  • Sr. Member
  • *****
  • Messages: 363
  • 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: 1751
  • 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 »

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1751
  • 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 »

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