LOCODUINO

Parlons Arduino => Vos projets => Discussion démarrée par: Dominique le juin 11, 2017, 11:28:33 pm

Titre: Un BV animé par ATtiny 85
Posté par: Dominique 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.

(http://www.locoduino.org/IMG/jpg/bv3.jpg)

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 :

(http://www.locoduino.org/IMG/jpg/bv2.jpg)

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

(http://www.locoduino.org/IMG/jpg/bv1.jpg)

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 :
https://vimeo.com/221774869 (https://vimeo.com/221774869)


Amicalement
Dominique
Titre: Re : Un BV animé par ATtiny 85
Posté par: Thierry le juin 12, 2017, 11:46:32 am
Très sympathique projet !
Titre: Re : Un BV animé par ATtiny 85
Posté par: DDEFF le juin 12, 2017, 08:33:54 pm
Simple et efficace.
Préparation FFMF ? Bonne idée !
Titre: Re : Un BV animé par ATtiny 85
Posté par: TF53 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 :

Titre: Re : Un BV animé par ATtiny 85
Posté par: bobyAndCo 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)
Titre: Re : Un BV animé par ATtiny 85
Posté par: Dominique 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
Titre: Re : Un BV animé par ATtiny 85
Posté par: Dominique 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.

https://vimeo.com/221774869 (https://vimeo.com/221774869)

Amicalement
Dominique
Titre: Re : Un BV animé par ATtiny 85
Posté par: TF53 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...
Titre: Re : Un BV animé par ATtiny 85
Posté par: Fantasio 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.
Titre: Re : Un BV animé par ATtiny 85
Posté par: Dominique le février 04, 2020, 09:49:54 am
merci pour le compliment : content d'être partagé  ;D

Dominique
Titre: Re : Un BV animé par ATtiny 85
Posté par: lambda95t3 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.
Titre: Re : Un BV animé par ATtiny 85
Posté par: Souris verte 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
Titre: Re : Re : Un BV animé par ATtiny 85
Posté par: Pyk35 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
Titre: Re : Un BV animé par ATtiny 85
Posté par: Pierre34 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
Titre: Re : Un BV animé par ATtiny 85
Posté par: Pierre34 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
Titre: Re : Un BV animé par ATtiny 85
Posté par: Dominique le avril 15, 2021, 10:01:17 pm
On a écrit un article exprès sur cette programmation des Digispark :

https://www.locoduino.org/spip.php?article285 (https://www.locoduino.org/spip.php?article285)
Titre: Re : Un BV animé par ATtiny 85
Posté par: Pierre34 le avril 23, 2021, 02:07:45 pm
Merci beaucoup pour la réponse et le lien.

Votre site contient tellement d'informations que le plus difficile est de trouver les bons mots pour une recherche.
J'avoue  que je passe du temps à ouvrir tous les fils de conversation et si je ne note pas le nom du fil je ne retrouve que très difficilement l'information.

Je cherchais ATtiny 85 je ne risquais pas de trouver effectivement.

Bravo pour votre site
Bien cordialement

Pierre
Titre: Re : Un BV animé par ATtiny 85
Posté par: Dominique le avril 23, 2021, 08:30:32 pm
Bravo, vous avez trouvé ce qu’il vous faut.

Si vous voulez faire un guide de recherches dans le site, vous serez le bienvenu  ;D
Titre: Re : Re : Re : Un BV animé par ATtiny 85
Posté par: Fantasio le mai 09, 2021, 11:47:55 am
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.
...

Bonjour à tous

Je partage cette conviction. Dans le monde réel l'éclairage des pièces des bâtiments n'est pas uniforme. Les Leds WS2812 sont en effet une solution que je voulais essayé depuis quelques années.
Je vous propose ma petite contribution à base d'un ATtiny85 pour les commander. (La mise au point s'est faite avec un Nano).

Quelques précisions:
Mon code a pour base celui développé par Dominique et le maximum de pièces est fixé à 8.
Le principe retenu: 1 pièce 1 couleur (facilement modifiable en jouant sur les valeurs de rouge de vert et de bleu).

D'autre part n'ayant de ruban Neopixel j'ai utilisé un module de 8 Leds WS2812 RGB.
/* attiny anim batiment neopixel1
   08/05/2021
   Fantasio
   Couleur personnalisée pour chacune des 8 pièces max
   Après une temporisation de 10 ou 20 secondes l'état des leds change
   D'après Version 1.01 du 15 juin 2017 Dominique (Locoduino)
     lien:  http://forum.locoduino.org/index.php?topic=336.0
     lien:  https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-use
   Attiny85 8MHz
   Testé avec Module ruban de 8 LED WS2812 5050 RVB
     lien:  https://www.vs-elec.fr/fr/leds/2051-module-ruban-de-led-ws2812-5050-rvb-pour-arduino-3665662013330.html
   Utilisation de la bibliothèque Adafruit_NeoPixel
     lien:  https://github.com/adafruit/Adafruit_NeoPixel
     lien:  https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-use

       Brochage Attiny85
          =|1  U  8|= +5V
          =|2     7|= 2 PIN--=|DIN Module 8 Leds|
          =|3     6|=       
      GND =|4     5|=             
                             
*/

// constantes
const int tempo1 = 10000; // 10s
const int tempo2 = 20000; // 20s

// variables
byte etatPixels = 0B11111111;       // état des leds donc au démarrage tout est allumé
unsigned long tempsActuel;
byte bitAleatoire;                  // le bit est choisi de manière aléatoire
byte octetAleatoire;
int tempo;                          // prend alternativement la valeur de 10 ou 20S

#include <Adafruit_NeoPixel.h>
#define PIN 2          // pin de l'Attiny85 connectée au DIN du module NeoPixel
#define NOMBREPIXELS 8 // nombre de Leds sur le module

Adafruit_NeoPixel bande(NOMBREPIXELS, PIN, NEO_GRB + NEO_KHZ800);
// pour chaque couleur: (rouge , vert , bleu ) de 0 à 255
uint32_t eteint = bande.Color( 0, 0, 0 );// on définit la couleur eteint
uint32_t blanc = bande.Color( 255, 255, 255 ); // on définit les différentes couleurs
uint32_t couleur1 = bande.Color( 255, 255, 100 );
uint32_t couleur2 = bande.Color( 125, 100 , 50 );
uint32_t couleur3 = bande.Color( 80, 90, 150 );
uint32_t couleur4 = bande.Color( 90, 140, 70 );

// attribution d'une couleur pour chaque pièce
uint32_t couleurPiece[NOMBREPIXELS] = {blanc, couleur1, couleur2, couleur3, couleur4, couleur1, couleur2, couleur3};

void setup() {
  bande.begin(); // pour préparer la broche de données pour la sortie NeoPixel
  bande.show();  // aucune couleur n'a encore été définie,tous les NeoPixels à un état initial «off»
  tempsActuel = millis();
  tempo = tempo1;
  randomSeed(analogRead(0));
//  bande.setBrightness (20); // (option) réglage luminosité globale (255 max)
}

void loop() {
  for (int i = 0; i < NOMBREPIXELS; i++) {    // pour chaque pixel si etat pixel = 1 alors la led s'allume
    if ((bitRead(etatPixels, i)) == 1) {
      bande.setPixelColor(i, couleurPiece[i]);// avec sa couleur pralablement choisie
    }
    else {                                   
      bande.setPixelColor(i, eteint);         // sinon la led s'éteint
    }
  }
  bande.show();                             // allumage des leds fct des états et des couleurs
  if (millis() > tempsActuel + tempo) {     // alternance de tempo 10S et 20S
    tempsActuel = millis();
    if (tempo == tempo1) {
      tempo = tempo2;
    }
    else {
      tempo = tempo1;
    }

    bitAleatoire = random(0, NOMBREPIXELS + 1);            // affiche un nombre aléatoire entre 0 et 8
    octetAleatoire = 0;                                    // remise à 0 de l'octet
    octetAleatoire = bitSet(octetAleatoire, bitAleatoire); // octetAleatoire = 00000001;00000010;00000100;00001000;00010000;00100000;01000000;10000000
    etatPixels = etatPixels ^ octetAleatoire;              // ou exclusif. le bit dans etatPixels est à 0 si concordance et à 1 si différence
  }
}

Bonne continuation à vous tous

Titre: Re : Un BV animé par ATtiny 85
Posté par: Ludo5687 le mai 12, 2021, 02:42:55 pm
Bonjour Fantasio,
pourriez-vous partager le plan de branchement et voir même photos et/ou vidéos de votre réalisation?
Titre: Re : Re : Un BV animé par ATtiny 85
Posté par: msport le mai 12, 2021, 09:05:30 pm
... le plan de branchement ...
bonjour,
moi je l'ai trouvé dans le sketch ...

       Brochage Attiny85
              =|1  U  8|= +5V
              =|2     7|= 2 PIN--=|DIN Module 8 Leds|
              =|3     6|=       
      GND =|4     5|=       

Et le branchement du module 8 LED sur internet.
Titre: Re : Re : Un BV animé par ATtiny 85
Posté par: msport le mai 12, 2021, 09:21:14 pm
... photos et/ou vidéos ...

pour quelques euros, quelques jours de patience et un minimum d'efforts, rien de tel que se rendre compte par soi-même du résultat en réalisant le montage !

Et bien sur de le partager sur Locoduino  :)
Titre: Re : Re : Un BV animé par ATtiny 85
Posté par: msport le mai 12, 2021, 09:24:01 pm
Bonjour Fantasio,

Et on peut même remercier Fantasio pour sa contribution.
Titre: Re : Un BV animé par ATtiny 85
Posté par: Fantasio le mai 12, 2021, 09:45:34 pm
J'essaye en principe d'être précis dans mon code concernant le raccordement des pins de l'Attiny85. et msport l'a effectivement trouvé. ;)

Je n'ai pas mis de résistance entre la pin2 et la Din du module, mais c'est une précaution qui peut s'avérer utile quand le nombre de Leds est important comme sur les bandes de plusieurs mètres. Ce qui n'est pas le cas de mon montage
Un point important est la consommation du module. Chaque Led peut consommer jusqu'à 60mA donc pour un module comme celui que j'utilise, on pourrait arriver à environ 500mA.

Si des photos sont nécessaires pour une meilleure compréhension, pas de problème., mais soyez patients. Je profite comme beaucoup d'entre nous de la liberté de circuler et de ce fait je ne suis pas actuellement dans mon domicile
Pour les vidéos, rien n'est impossible mais soyez vraiment très patients...