Article Arduino de LR 798 (janvier 2014)

Toutes les discussions sur l'Arduino !

Modérateur : MOD

Avatar du membre
Arduino
Prolixe
Messages : 1698
Enregistré le : mer. 25 sept. 2013, 16:14

Article Arduino de LR 798 (janvier 2014)

Message par Arduino » dim. 22 déc. 2013, 12:42

Bonjour à tous les Arduineurs,

J'ouvre ce nouveau forum à la suite de la parution de mon troisième article sur Arduino, dans le N°798 de Loco-Revue (janvier 2014).

Finie l'approche théorique des modules Arduino, cette fois on entre bel et bien dans la pratique, et cette première réalisation (feux tricolores routiers) permettra aux débutants de réaliser une première animation pour leur réseau. :noel:

Et oui, il faut commencer simplement et bien acquérir les notions de base avant d'aller plus loin. :coeur1:

Ce forum est donc exclusivement prévu pour répondre aux questions que vous pourriez vous poser, suite à la lecture de cet article, mais il y a de la place prévue ailleurs pour ceux qui veulent commander des moteurs, essayer des shields, utiliser des bus de communication. Soyez gentils d'y penser pour que ce forum reste bien centré sur son sujet. :ange:

L'article de LR798 vous guidera pour le montage d'un feu tricolore de carrefour routier. Le montage électronique est très simple et vous pouvez le faire sur une breadboard (plaque qui permet de réaliser un montage sans faire de soudure). Les composants sont restreints (6 LED et 6 résistances de 150 ohms) et bon marché. Voici ce que cela donne :

Image

Le programme est donné dans la revue ; pour ce premier montage, je vous invite à le recopier par vous-même, afin de vous approprier le principe de fonctionnement qui est très simple. Attention, respecter bien la syntaxe : un point virgule n'est pas deux points, et une accolade n'est pas une parenthèse. Les commentaires vous permettront de comprendre chaque ligne de programme et vous n'êtes pas obligé de les recopier. :wink:

Une fois que le montage fonctionne sur la breadboard, il reste à le transférer sur votre réseau de façon propre et fiable ; vous trouverez quelques conseils pour cela dans l'article.

Je vous souhaite de prendre plaisir à ce montage.

Pour ceux qui pourraient trouver désuet d'utiliser un module Arduino pour commander de simples LED (Diode électro-luminescente), sachez qu'un montage peut en cacher un autre. Voici, pour vous en convaincre, une petite vidéo :



Je vous laisse cogiter à ce que vous venez de voir :roll: . Bien entendu, les solutions vous seront données dans un proche avenir ; ne démontez donc pas trop vite le montage expérimental du feu tricolore. :wink:

Christian
Fichiers joints
Feu tricolore.JPG

Avatar du membre
Pierre59
Papotier
Messages : 147
Enregistré le : dim. 07 mars 2010, 09:17
Echelle pratiquée : HO
Club : Lille Modélisme
Localisation : Villeneuve d'Ascq (59650)
Âge : 75

Re: Article Arduino de LR 798 (janvier 2014)

Message par Pierre59 » mar. 24 déc. 2013, 08:46

Bonjour

Pour les transistors de faible puissance j'utilise des MosFet BS170 , cela évite la résistance de base. J'utilise aussi des BS250 qui sont complémentaires.

Pierre

Avatar du membre
Arduino
Prolixe
Messages : 1698
Enregistré le : mer. 25 sept. 2013, 16:14

Re: Article Arduino de LR 798 (janvier 2014)

Message par Arduino » mer. 25 déc. 2013, 11:49

Bonjour Pierre,

Dans ce montage, il n'y a pas de transistors, juste des LED avec résistances de protection.

Avatar du membre
likiki
Causant
Messages : 296
Enregistré le : dim. 29 avr. 2012, 14:21
Echelle pratiquée : H0 3R
Prénom : Christian
Site Internet : http://passionnement.forumactif.org
Localisation : Corbeil Essonne
Âge : 51

Re: Article Arduino de LR 798 (janvier 2014)

Message par likiki » mer. 25 déc. 2013, 11:53

Pierre a mis ce messages sur deux sujets différent (et il colle bien avec l'autre sujet :siffle: ).

Ce doit être une erreur. :mdr2:
Cordialement,

Christian.

Avatar du membre
Pierre59
Papotier
Messages : 147
Enregistré le : dim. 07 mars 2010, 09:17
Echelle pratiquée : HO
Club : Lille Modélisme
Localisation : Villeneuve d'Ascq (59650)
Âge : 75

Re: Article Arduino de LR 798 (janvier 2014)

Message par Pierre59 » mer. 25 déc. 2013, 11:58

Arduino a écrit :Bonjour Pierre,

Dans ce montage, il n'y a pas de transistors, juste des LED avec résistances de protection.
Bonjour

Dans l'article Loco Revue il y a bien il y a bien un transistor dans la figure 2 ???

Pierre

Avatar du membre
Arduino
Prolixe
Messages : 1698
Enregistré le : mer. 25 sept. 2013, 16:14

Re: Article Arduino de LR 798 (janvier 2014)

Message par Arduino » mer. 25 déc. 2013, 22:15

Oui, tu as raison. Je croyais que tu parlais du montage sur la photo ci dessus.

Des MOSFet, pourquoi pas ? Aucune objection de ma part.

Lgperrin m'a déjà convaincu du bien fondé de ces transistors. Mettre surtout ce qu'on a sous la main.

Maurienne54
Messages : 28
Enregistré le : lun. 04 oct. 2010, 19:39
Echelle pratiquée : HO
Âge : 59

Re: Article Arduino de LR 798 (janvier 2014)

Message par Maurienne54 » ven. 27 déc. 2013, 21:14

Bonjour à tous
Dans la rubrique Vérifier/Compiler, le résultat laisse apparaitre une erreur :
'void' does not name a type
sketch_dec25a:10: error: 'Void' does not name a type
sketch_dec25a:26: error: 'Void' does not name a type
et la ligne "const byte AiR=6;" est en surbrillance.
Etant un débutant confirmé, quelqu'un pourrait-il me mettre sur la voie.
Merci

Avatar du membre
Arduino
Prolixe
Messages : 1698
Enregistré le : mer. 25 sept. 2013, 16:14

Re: Article Arduino de LR 798 (janvier 2014)

Message par Arduino » ven. 27 déc. 2013, 23:30

Bonjour Maurienne54,

Etant l'auteur de l'article, je vais tenter de vous aider.

Tout d'abord, le programme publié dans l'article, souffre un peu d'un problème de police de caractères et de mise en page. La première chose à faire est donc de vérifier votre programme qui doit ressembler à cela :
/*
Ce programme fait fonctionner des feux tricolores.
Six LED (vertes, oranges et rouge) sont reliées aux sorties 4 à 9
Les sorties 4 à 6 forment le feu A1
Les sorties 7 à 9 forment le feu B1
*/

// Initialisation des variables
const byte A1V = 4 ;
const byte A1O = 5 ;
const byte A1R = 6 ;
const byte B1V = 7 ;
const byte B1O = 8 ;
const byte B1R = 9 ;

// Initialisation des lignes 4 à 9 en sortie
void setup () {
  pinMode (A1V, OUTPUT) ;
  pinMode (A1O, OUTPUT) ;
  pinMode (A1R, OUTPUT) ;
  pinMode (B1V, OUTPUT) ;
  pinMode (B1O, OUTPUT) ;
  pinMode (B1R, OUTPUT) ;
}

// Fonction loop
void loop () {
  // Extinction de toutes les LED au départ
  digitalWrite (A1V, LOW) ;
  digitalWrite (A1O, LOW) ;
  digitalWrite (A1R, LOW) ;
  digitalWrite (B1V, LOW) ;
  digitalWrite (B1O, LOW) ;
  digitalWrite (B1R, LOW) ;

  // Allumage de A1V et B1R
  digitalWrite (A1V, HIGH) ;
  digitalWrite (B1R, HIGH) ;
  
  // Début de cycle
  
  // Concerne le feu A1
  delay (30000) ; // Feu vert A1V pendant 30 secondes
  digitalWrite (A1V, LOW) ; // Extinction de A1V
  digitalWrite (A1O, HIGH) ; // et allumage de A1O
  delay (5000) ; //durée 5 secondes
  digitalWrite (A1O, LOW) ; // Extinction de A1O
  digitalWrite (A1R, HIGH) ; // et allumage de A1R
  delay (2000) ; // Temporisation du chauffard !
  
  // Concerne l'autre feu B1
  digitalWrite (B1R, LOW) ; // Extinction de B1R
  digitalWrite (B1V, HIGH) ; // et allumage de B1V
  delay (30000) ; // Feu vert B1V pendant 30 secondes
  digitalWrite (B1V, LOW) ; // Extinction de B1V
  digitalWrite (B1O, HIGH) ; // et allumage de B1O
  delay (5000) ; // durée 5 secondes
  digitalWrite (B1O, LOW) ; // Extinction de B1O
  digitalWrite (B1R, HIGH) ; // et allumage de B1R
  delay (2000) ; // Temporisation du chauffard !
  digitalWrite (A1V, HIGH) ; // On est revenu au point de départ
  
  // Feu A1 vert et feu B1 rouge : le cycle peut recommencer
}

  
C'est un peu long :roll: , mais ce programme fonctionne tel quel (à condition de brancher les LED sur les sorties 4 à 9, comme indiqué dans l'article).

Après avoir rectifié les petites différences (parfois dues à une simple erreur de frappe comme on en fait tous), cela devrait fonctionner. Vérifier bien surtout les points-virgules en fin de ligne (on les oublie souvent) et la structure des fonctions void setup () { } et void loop () { }.

Les accolades { ou } ne sont pas des crochets et sont obtenues par la combinaison des touches "Alt Gr" et touche 4 ou + du clavier alphabétique (pas numérique).

Vérifiez également que vous avez écrit void et non pas Void (vu ce que vous avez reporté comme message d'erreurs).

Si vous recopiez bien ce qui est plus haut, cela devrait fonctionner du premier coup. :wink:

Christian

Maurienne54
Messages : 28
Enregistré le : lun. 04 oct. 2010, 19:39
Echelle pratiquée : HO
Âge : 59

Re: Article Arduino de LR 798 (janvier 2014)

Message par Maurienne54 » sam. 28 déc. 2013, 09:22

Bonjour Christian

Grace à votre message, l'erreur a été très rapidement corrigée.
C'est 'Void' à la place de 'void' qui en était la cause.
Un grand merci à vous et à tous les contributeurs qui apportent leurs connaissances aux ignorants comme moi.
Meilleurs vœux à tous
Philippe

Avatar du membre
Arduino
Prolixe
Messages : 1698
Enregistré le : mer. 25 sept. 2013, 16:14

Re: Article Arduino de LR 798 (janvier 2014)

Message par Arduino » sam. 28 déc. 2013, 11:23

Un chenillard à partir du montage publié dans Loco-Revue 798

Afin de vous démontrer l’avantage de l’électronique programmable sur l’électronique câblée, je vous propose de garder le même montage électronique et de changer le programme afin de changer complètement le comportement de l’ensemble.

Nous allons donc écrire un programme qui fera flasher chacune des LED les unes après les autres, afin de reproduire un chenillard utilisé pour signaler des travaux routiers. Dans un premier temps, changez les 6 LED des feux tricolores pour 6 LED jaunes ou oranges (ce sera plus crédible). Le montage que vous obtenez est celui-ci :

Image

Voici maintenant le programme à reproduire avec l'environnement de développement d'Arduino :
/*
Ce programme réalise un chenillard.
Il fait flasher successivement six LED oranges reliées aux sorties 4 à 9
Puis il réalise une pause de 500 millisecondes avant de recommencer
*/

// Initialisation des lignes 4 à 9 en sortie
void setup () {
  pinMode (4, OUTPUT) ;
  pinMode (5, OUTPUT) ;
  pinMode (6, OUTPUT) ;
  pinMode (7, OUTPUT) ;
  pinMode (8, OUTPUT) ;
  pinMode (9, OUTPUT) ;
}

// Fonction loop
void loop () {
  // Extinction de toutes les LED au départ du programme
  for (byte i = 4 ; i <= 9 ; i++) {
    digitalWrite (i, LOW) ; // éteint la LED reliée à la broche i
  }
  
  // Boucle pour faire flasher les LED
  for (byte i = 4 ; i <= 9 ; i++) {
    digitalWrite (i, HIGH) ; // allume la LED sur broche i
    delay (50) ; // durée du flash 50 millisecondes
    digitalWrite (i, LOW) ; // éteint la LED
  }
  
  // délai de 500 millisecondes
  delay (500) ;
  
  // Recommence la séquence
}

  
Vérifiez ce programme et téléversez le dans votre module Arduino ; vous obtenez un chenillard qui se comporte comme dans la vidéo postée plus haut


:idea: :arrow: :arrow: :arrow:

Il y a six LED à faire flasher les unes à la suite des autres. On peut bien-sûr écrire six fois de suite les instructions adéquates pour cela, mais il est plus intelligent de recourir à une boucle qui sera parcourue six fois.

La boucle for utilise une variable d’incrémentation (un compteur) et est très souple d’emploi :

for (initialisation ; condition ; incrément)
{
instructions exécutées dans la boucle
}

Le compteur est i et désigne le numéro de broche sur laquelle est connectée la LED. i va donc de 4 à 9 (dans ce montage).
i est donc initialisé à 4 (initialisation)
i doit rester inférieur ou égal à 9 (condition)
i augmente de 1 à chaque fois que la boucle est parcourue (incrément i++)
On peut aussi faire des boucles où le compteur, initialisé à une valeur forte, est décrémenté jusqu'à une valeur faible.

Chaque fois que la boucle est parcourue, on allume une LED pendant 50 ms, et ce n'est jamais la même LED (avantage de la boucle).

Nous aurions aussi pu utiliser une boucle dans la fonction setup pour initialiser les broches 4 à 9 en sortie ; je vous laisse le faire comme exercice.

Une prochaine fois, nous parlerons de l'enseigne lumineuse, visible dans la vidéo. :wink:

Christian
Fichiers joints
Chenillard.jpg
Chenillard.jpg (48.87 Kio) Vu 35541 fois
Modifié en dernier par Arduino le sam. 28 déc. 2013, 11:34, modifié 2 fois.

Avatar du membre
Arduino
Prolixe
Messages : 1698
Enregistré le : mer. 25 sept. 2013, 16:14

Re: Article Arduino de LR 798 (janvier 2014)

Message par Arduino » sam. 28 déc. 2013, 11:28

Maurienne54 a écrit :Bonjour Christian

Grace à votre message, l'erreur a été très rapidement corrigée.
C'est 'Void' à la place de 'void' qui en était la cause.
Un grand merci à vous et à tous les contributeurs qui apportent leurs connaissances aux ignorants comme moi.
Meilleurs vœux à tous
Philippe
Bonjour Philippe,

L'important est que cela finisse par fonctionner, et ce forum est une véritable aide car il y a toujours quelqu'un qui peut renseigner.

Et il n'y a pas d'ignorants, seulement des gens qui n'ont pas encore appris ! :wink:

Et pour apprendre, le mieux est de pratiquer ; le petit exercice ci-dessus devrait vous plaire car c'est le montage publié dans Loco-Revue et il n'y a que le programme à changer.

Christian

Avatar du membre
Ramboman
Disert
Messages : 423
Enregistré le : lun. 23 oct. 2006, 17:13
Echelle pratiquée : LGB
Localisation : Waterloo, Belgique
Âge : 74

Re: Article Arduino de LR 798 (janvier 2014)

Message par Ramboman » sam. 28 déc. 2013, 12:11

:applause:

eric_p
Disert
Messages : 404
Enregistré le : lun. 21 sept. 2009, 10:15
Prénom : eric
Localisation : Sèvres (92)
Âge : 48

Re: Article Arduino de LR 798 (janvier 2014)

Message par eric_p » sam. 28 déc. 2013, 17:46

Merci pour toutes ces explications sur l'Arduino. En lisant le code du LR798, je constate que l'extinction de toutes les leds s'effectue au début de la boucle. N'est-il pas plus logique de le faire lors de l'initialisation ?

Avatar du membre
Ramboman
Disert
Messages : 423
Enregistré le : lun. 23 oct. 2006, 17:13
Echelle pratiquée : LGB
Localisation : Waterloo, Belgique
Âge : 74

Re: Article Arduino de LR 798 (janvier 2014)

Message par Ramboman » sam. 28 déc. 2013, 17:57

eric_p a écrit :Merci pour toutes ces explications sur l'Arduino. En lisant le code du LR798, je constate que l'extinction de toutes les leds s'effectue au début de la boucle. N'est-il pas plus logique de le faire lors de l'initialisation ?
Il me semble aussi...

Avatar du membre
Arduino
Prolixe
Messages : 1698
Enregistré le : mer. 25 sept. 2013, 16:14

Re: Article Arduino de LR 798 (janvier 2014)

Message par Arduino » sam. 28 déc. 2013, 18:04

Bonjour eric_p,

Votre remarque est tout à fait juste ; en fait, plusieurs solutions existent et je vous invite à les essayer pour vous rendre compte que le montage fonctionne toujours.

Je voulais partir d'une situation nette et pour cela, je commence par éteindre les LED au début du programme. La rapidité à laquelle cela se fait est sans conséquence sur un effet visuel. J'aurais donc pu les éteindre à la fin de la boucle loop, cela aurait été pareil.

j'aurais également pu les éteindre dans la fonction setup, fonction exécutée une fois et une seule, car à la fin de la loop, on se retrouve comme au début avec A1V et B1R allumés. Néanmoins, je préfère le faire dans la fonction loop (au début ou à la fin) car je trouve qu'il vaut mieux refaire périodiquement cette opération (vu le peu de temps que cela prend) pour pallier le problème éventuel de parasites (électromagnétiques) qui pourraient entrainer un dysfonctionnement passager du microcontrôleur.

J'espère avoir répondu à votre question et je reste à votre disposition pour vous renseigner à nouveau.

Christian

Répondre