Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - Fantasio

Pages: 1 [2] 3
16
Vos projets / Re : Re : Re : Un BV animé par ATtiny 85
« 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


17
Vos projets / Re : Impulsion temporisée avec Attiny 85
« le: octobre 10, 2020, 11:17:01 pm »
... Je serais curieux de voir un code qui se compile bien avec ça.

Essaye celui ci testé sur UNO avec l'IDE 1.8.10:
int x = 1;
int y = 2;


void setup()
{
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop()
{
 if (x == 1 and y == 2)
  {
    digitalWrite(LED_BUILTIN, HIGH);
    delay (1000);

La LED clignote bien ;D

18
Vos projets / Re : Impulsion temporisée avec Attiny 85
« le: octobre 09, 2020, 05:21:18 pm »
@Antoine

Suite à ta réponse:
  if (etatMonostable and (millis() - debut_tempo >= tempo))
 ...
Tu utilises "and" et pas "&&" pour l'instruction "et logique" (comme le précise le langage Arduino), et cela ne provoque aucune erreur retournée par l'IDE. Donc "and" est valide.

Ma question est la suivante: D'autres instructions de ce type seraient elles alors compatibles avec le langage de l'Arduino?

19
Vos projets / Re : Impulsion temporisée avec Attiny 85
« le: octobre 09, 2020, 03:23:39 pm »
...et à Thierry également :)

20
Vos projets / Re : Impulsion temporisée avec Attiny 85
« le: octobre 09, 2020, 03:21:54 pm »
Merci Antoine pour ton aide.

Je suis honteux de n'avoir pas pensé à cela. Comme quoi, moi aussi, j'ai encore beaucoup à apprendre!
C'est aussi tout le bénéfice d'être inscrit sur ce forum...

Bonne continuation à toi

21
Vos projets / Re : Impulsion temporisée avec Attiny 85
« le: octobre 09, 2020, 02:26:38 pm »
Bonjour Yann

Content que ce programme te convienne.

Travaillant souvent sur les Attiny85, effectivement pour les constantes, en particulier pour les pins, je préfère utiliser byte pour économiser de la mémoire.

Pour "if(etatmonostable) c'est exactement ça!

Concernant la simplification, étant encore débutant, je pense que quelqu'un de plus expérimenté pourrait te faire...

Bonne continuation

22
Vos projets / Re : Impulsion temporisée avec Attiny 85
« le: octobre 08, 2020, 05:30:13 pm »
Bonjour Yann

J'ai repris ton programme et modifié en insérant la partie monostable.
Il fonctionne sur Arduino et compatible avec un Attiny85.
Quelques points importants:
-la commande se fait par l'arrivée d'une masse sur la pin3
-la durée de l'état haut de la sortie en pin2 peut être modifiée si besoin.  (int dureePulse = 2000; )

const byte TRIMMER = A2;                 // Potentiometer connected to ADC2
const byte LED = 2;                      // LED connected to I/O pin 2
const byte BUTTON = 3;                   // pushbutton connected to I/O pin 3
 
unsigned long tempo ;                 // This value is set by the trimer
unsigned long debut_tempo;
int dureePulse = 2000;                // durée allumage LED a modifier si besoin
byte dernier_appui;
byte etatMonostable;
                 

void setup()
{
  pinMode(LED, OUTPUT);                 // Sets the digital pin as output
  pinMode(BUTTON, INPUT_PULLUP);        // Sets the digital pin as input
  byte dernier_appui = digitalRead(BUTTON); // au démarrage =1
}
void loop()
{
  byte appui = digitalRead(BUTTON);         // au démarrage =1
  tempo = analogRead(TRIMMER) * 5;        // (5V=1024) * 5 -> 5V=5120ms
   
  if (!appui)                               // si il est appuyé alors appui = 0 et !appui =1
  {             
   
    if (appui != dernier_appui)         //
    { 
      etatMonostable = 1;   
      debut_tempo = millis();
    }
  }
  dernier_appui = appui;
  if (etatMonostable)
  {
    if (millis() - debut_tempo >= tempo)
    {
      digitalWrite(LED, HIGH);
      delay (dureePulse);
      digitalWrite(LED, LOW);
      etatMonostable = 0;     
    }
  }
}

Bonne continuation
 

23
Vos projets / Re : Impulsion temporisée avec Attiny 85
« le: octobre 07, 2020, 09:18:33 pm »
La code du monostable était destiné à un Arduino Uno. Je le présentais juste à titre d'exemple et il doit être adapté pour un Attiny85. ;)

24
Vos projets / Re : Impulsion temporisée avec Attiny 85
« le: octobre 07, 2020, 02:47:37 pm »
Je viens de retrouver ce code qui commande un monostable redéclenchable, éventuellement si tu veux t'en inspirer...const byte led = 13;
const byte button = 2;
unsigned long interval = 10000;
unsigned long startTime;
byte lastPress;


void setup()
{
  pinMode(led, OUTPUT);
  pinMode(button, INPUT_PULLUP);
  Serial.begin (9600);
}


void loop()
{
  byte pressed = digitalRead(button);
  Serial.print("pressed = ");
  Serial.println(pressed);
  if (pressed)
  {
    if (pressed != lastPress)
    {
      digitalWrite(led, HIGH);
      startTime = millis();
    }
  }
  lastPress = pressed;
  if (digitalRead(led))
  {
    if (millis() - startTime >= interval)

    {
      digitalWrite(led, LOW);
    }
  }
}

Bonne continuation

25
Vos projets / Re : Impulsion temporisée avec Attiny 85
« le: octobre 07, 2020, 02:29:45 pm »
Bonjour Yann

1)Ce que je comprends de ton diagramme:
- quand le signal d'entrée passe du niveau LOW au niveau HIGH:
      - mise en route d'un monostable rédéclenchable dont la valeur est ajustée par le potentiomètre
      - lorsque le monostable revient au repos, changement de l'état de la sortie pendant la durée d'une tempo

2)Le programme pourrait s'organiser ainsi:
-définir les broches :
   signal capteur
   commande relais
   curseur potentiomètre
-définir la durée de l'impulsion de sortie

dans le setup
  définir les broches en entrée et en sortie

dans la loop
  lire la tension au curseur du potentiomètre et en calculer la valeur de la tempo du momonostable
  selon l'état du capteur déclencher le monostable
  la fin du monostable changer l'état de la sortie commande relais durant la valeur de l'impulsion

Voila en gros ce que j'envisagerai...
     

26
Vos projets / Re : Animations lumineuses avec ATtiny et commandées en DCC
« le: septembre 14, 2020, 04:49:00 pm »
C'est parfait.

Tu abordes deux sujets qui ont ma prédilection: les animations (lumineuses ou autres...) et l'Attiny85.
Que demander de plus?
Si j'osais: la commande de servomoteur par l' Attiny85. A ce jour je n'ai pas trouvé La meilleure solution.
Et ce n'est pas faute d'avoir essayé de nombreuses bibliothèques.

Bonne continuation à tous

27
Vos projets / Re : Barrette éclairage détecte mouvement
« le: mai 17, 2020, 04:02:00 pm »
Bonjour à tous,

Effectivement vous avez raison, le capteur auquel je pensais n'est pas suffisamment sensible pour le projet de Jembi...
Un accéléromètre serait l'une des meilleures solutions. j'ai trouvé, sur le site de mon fournisseur favori, celui ci basé sur un ADXL335.

https://wiki.seeedstudio.com/Grove-3-Axis_Analog_Accelerometer/

Qu'en pensez vous?

Au sujet du petit programme que précédemment je vous proposais , il se comporte comme un monostable redéclenchable. Il y avait longtemps que j'en cherchais un pour activer des animations  :)

Bonne continuation et merci pour vos conseils


28
Vos projets / Re : Barrette éclairage détecte mouvement
« le: mai 12, 2020, 01:18:44 am »
Bonsoir à tous

Je pense avoir trouver un petit programme qui pourrait convenir à jembi.

Mes connaissances en programmation m'obligent à vous préciser que je n'en suis pas l'auteur et je remercie ce dernier.

Je l'ai testé avec un UNO et adapté pour un attiny85. En plus d'une alim 5V, il nécessite un capteur de vibration, par exemple de ce type:

https://www.gotronic.fr/art-capteur-de-vibrations-haute-sensibilite-sw18010p-22186.htm

Voici le code /* monostable redeclenchable
 *  à l'arret le capteur est ouvert,
 *     la pin2 est à la masse via la résistance,la led est éteinte.
 *  lorsque le train roule le capteur se ferme , la led s'allume.
 *  si le train s'arrete la led reste allumée durant la tempo.   
 *     
 *     
 *             ATTINY85        VCC
 *                                      |
 *         5 =|1  U  8|= VCC  Capteur
 *         3 =|2     7|= 2------|   
 *         4 =|3     6|= 1      |
 *       GND =|4     5|= 0      R (10-100K)
 *                              |
 *                             GND
 */


const byte led = 3;
const byte capteur = 2;
unsigned long interval = 10000; //valeur en ms à adapter selon besoin
unsigned long startTime;
byte lastPress;


void setup()
{
  pinMode(led, OUTPUT);
  pinMode(capteur, INPUT);
}


void loop()
{
  byte pressed = digitalRead(capteur);
  if (pressed)
  {
    if (pressed != lastPress)
    {
      digitalWrite(led, HIGH);
      startTime = millis();
    }
  }
  lastPress = pressed;
  if (digitalRead(led))
  {
    if (millis() - startTime >= interval)
    {
      digitalWrite(led, LOW);
    }
  }
}

En espérant qu'il pourra intéresser d'autres membres du forum....

Fantasio


29
Vos projets / Re : Barrette éclairage détecte mouvement
« le: mai 09, 2020, 06:58:40 pm »
Bonjour Jembi

Une solution pourrait être d'utiliser un capteur de vibration associé à un attiny85 par exemple...
Les rails en DCC fournissent l'alimentation en permanence, dès que le train bouge le capteur envoie un signal à l'attiny et ce dernier alimente les led tant que le capteur envoie régulièrement un signal.
Le train à l'arrêt, absence de signal, l'attiny coupe l'alimentation des led...

Bien sûr c'est un premier jet....

30
Bonjour DDEFF

Je découvre juste cet article et plus particulièrement le site TrainSpotter.

Leur détecteur infrarouge est génial et il me confirme que l'utilisation des attiny est parfaitement adaptée aux montages simples. Leur détecteur est facilement reproductible même sans utiliser des composants cms.

Encore merci

Fantasio

Pages: 1 [2] 3