Page 4 of 4

Re: Tour eiffel lumineuse

Posted: 07 Aug 2009, 18:31
by ythomas
Maintenant je sais : faire clignoter plusieurs leds, controler les leds avec un bouton poussoir ou avec un potentiomètre.....
Bref tout se passe pas mal.
Tous ces progrès sont réalisés à partir du site d'Arduino qui propose des tutoriels très complets.http://arduino.cc/en/Tutorial/HomePage
On dispose du schéma du montage ainsi que du code du programme. Il reste plus qu'à envoyer le programme ds le µC et le tour est joué!! Seul l'anglais peut consister un problème...
Une fois que l'on a compris le fonctionnement du programme, il devient très facile de l'adapter à ses besoins. Voici donc le programme que j'ai adapté pour ma tour eiffel :

/*
*
* http://www.arduino.cc/en/Tutorial/Blink
*/

int etage1a = 0; // LED connected to digital pin 0
int etage1b = 1; // LED connected to digital pin 1
int etage3a = 2; // LED connected to digital pin 2
int etage3b = 3; // LED connected to digital pin 3
int etage5a = 4; // LED connected to digital pin 4
int etage5b = 5; // LED connected to digital pin 5
int etage7a = 6; // LED connected to digital pin 6
int etage7b = 7; // LED connected to digital pin 7
int etage9a = 8; // LED connected to digital pin 8
int etage9b = 9; // LED connected to digital pin 9

void setup() // run once, when the sketch starts
{
pinMode(etage1a, OUTPUT); // sets the digital pin as output
pinMode(etage1b, OUTPUT); // sets the digital pin as output
pinMode(etage3a, OUTPUT); // sets the digital pin as output
pinMode(etage3b, OUTPUT); // sets the digital pin as output
pinMode(etage5a, OUTPUT); // sets the digital pin as output
pinMode(etage5b, OUTPUT); // sets the digital pin as output
pinMode(etage7a, OUTPUT); // sets the digital pin as output
pinMode(etage7b, OUTPUT); // sets the digital pin as output
pinMode(etage9a, OUTPUT); // sets the digital pin as output
pinMode(etage9b, OUTPUT); // sets the digital pin as output

}

void loop() // run over and over again
{
digitalWrite(etage1a, HIGH); // sets the LEDs on/off
digitalWrite(etage1b, LOW);
digitalWrite(etage3a, HIGH);
digitalWrite(etage3b, LOW);
digitalWrite(etage5a, LOW);
digitalWrite(etage5b, HIGH);
digitalWrite(etage7a, HIGH);
digitalWrite(etage7b, LOW);
digitalWrite(etage9a, LOW);
digitalWrite(etage9b, HIGH);
delay(100); // waits for a 100 Millisecond
digitalWrite(etage1a, LOW); // sets the LEDs on/off
digitalWrite(etage1b, HIGH);
digitalWrite(etage3a, LOW);
digitalWrite(etage3b, HIGH);
digitalWrite(etage5a, HIGH);
digitalWrite(etage5b, LOW);
digitalWrite(etage7a, LOW);
digitalWrite(etage7b, HIGH);
digitalWrite(etage9a, HIGH);
digitalWrite(etage9b, LOW);
delay(100); // waits for a second
}

Je me suis basé sur un programme existant. Il se décompose en Trois parties :
La déclaration des entrées sorties utilisées (ici les sorties 0 à 9) que j'ai renommé.
La déclaration des pattes 0à9 come étant des sorties.
Le programme de fonctionnement détaillant l'état de chaque pattes.....
Voici le programme original :
/*
* Blink
*
* The basic Arduino example. Turns on an LED on for one second,
* then off for one second, and so on... We use pin 13 because,
* depending on your Arduino board, it has either a built-in LED
* or a built-in resistor so that you need only an LED.
*
* http://www.arduino.cc/en/Tutorial/Blink
*/

int ledPin = 13; // LED connected to digital pin 13

void setup() // run once, when the sketch starts
{
pinMode(ledPin, OUTPUT); // sets the digital pin as output
}

void loop() // run over and over again
{
digitalWrite(ledPin, HIGH); // sets the LED on
delay(1000); // waits for a second
digitalWrite(ledPin, LOW); // sets the LED off
delay(1000); // waits for a second
}


Il y a moyen d'optimiser ce programme, mais celui ci marche très bien et je l'ai réalisé en moins de 3 heures d'utilisation.
Je continue les tutoriels et commence à intégrer des potentiomètres etc....
Bref, le système est très facile d'accès et permet d'envisager beaucoup de projets!!!

Re: Tour eiffel lumineuse

Posted: 07 Aug 2009, 19:18
by ced35
niquel tous sa

sa a l'air super simple a faire

est ce que tu avait des base déjà en électronique ou programmation ou pas du tout?

sa me tente de plus en plus ;)

Re: Tour eiffel lumineuse

Posted: 07 Aug 2009, 23:54
by freddy_krueger
bonsoir , je me posais la question suivante : n'auait il pas été plus judicieux de faire le scintillement de cette tour eiffel à partir d'une led et d'un "bouquet" de fibre optique ?
la fibre est tout meme beaucoup plus facile à installer dans les "recoins" , pratiquement invisible .
De plus avec une led clignotant rapidement , l'effet aurait pu etre saisissant non ?

à part çà , bravo pour ton travail , c'est tres beau

Re: Tour eiffel lumineuse

Posted: 08 Aug 2009, 11:40
by jC_Omega
oo c'est a la fois simple et bizarre pour un habituer au vrai language de programmation, il y a pas de fonction "main" pour la boucle pas de "while" ?

en C, ca ressemblerais plutôt à ça (juste pour faire clignoté une LED sur la patte RB0) (sur un PIC):

Code: Select all

void main()
{
TRISB = 0;  // configure le PORTB en sortie

while(1)
{
PORTBbits.RB0 = 1; // allume la led qui est sur la patte RB0
DelayMS(1000);   // tempo 1s
PORTBbits.RB0 = 1; // éteint la led qui est sur la patte RB0
DelayMS(1000);   // tempo 1s
}
}

Re: Tour eiffel lumineuse

Posted: 08 Aug 2009, 17:01
by ythomas
Pour répondre à Ced35 :
J'ai effectivement des notions en électricité, électronique, programmation, mais cela reste vraiment des notions. J'ai eu qqs cours de programmation en Java mais pas de quoi réaliser un programe. J'ai eu des cours d'électronique numérique et analogique. Bref, j'ai de bonnes bases.
Pour freddy_krueger :
C'est vrai que c'est plus simple d'avoir des leds qui clignotent déja ou alors utiliser de la fibre optique. L'utilisation du µC me permets par contre de faire vraiment ce que je veux avec mes leds (créer des animations etc...). Et puis ç'est un projet raisonnable qui me permet de me familiariser avec les µC.

Re: Tour eiffel lumineuse

Posted: 09 Aug 2009, 18:13
by Termi87
Beau boulot, continu ainsi. Moi toujours pas attaqué ma programmation de PIC ^^, pas le temps :( . Mais un jour :) . Il est vrai que le language est "bizarre" ^^

Re: Tour eiffel lumineuse

Posted: 10 Aug 2009, 12:57
by jC_Omega
Termi87 wrote:Beau boulot, continu ainsi. Moi toujours pas attaqué ma programmation de PIC ^^, pas le temps :( . Mais un jour :) . Il est vrai que le language est "bizarre" ^^
Dans le cas contraire je suis prêt a te racheter ton PICKIT 2 'classe' héhé

Re: Tour eiffel lumineuse

Posted: 10 Aug 2009, 21:17
by Termi87
^^, Attendons attendons ^^, j'ai même pas eu le temps de m'y pencher encore, sauf faire fonctionner 2 programmes intégrés...

Re: Tour eiffel lumineuse

Posted: 10 Aug 2009, 21:22
by ythomas
Je continue à ma familiariser avec le module arduino. Après avoir compris comment utiliser une cellule photoélectrique ainsi qu'un potentiomètre, je me suis recadré vers mon projet. (autre tutoriel : http://www.ladyada.net/learn/arduino/index.html )
Je veux faire clignoter des leds sur une tour eiffel. Il y aura plusieurs modes :
Le premier : Toutes les leds allumés (OK)
Le second : Faire clignoter aléatoirement les leds (OK voir programme posté précédemment)
Le troisième : Faire clignoter les leds par étage de façon à donner une impression de mouvement. C'est à cette partie que j'ai consacré un peu de mon temps.
En effet, j'ai programmé SEUL cette animation en intégrant tout ce que j'ai pu voir dans les différents tutoriels. Et ça marche!!!!!
J'arrive à faire clignoter 4 Leds en suivant montant puis en descendant. Tout ça en un minimum de programme.

Tout ça pour dire que c'est encore plus accessible que je ne le pensais. Dans tous les langages de programmation que j'ai pu tester, je n'ai jamais réussi à créer qqc qui marche. Arduino me permet donc d'écrire des programmes qui fonctionnent!!!! : D
J'aurais tendance à dire que le langage est très basique et pour programmer de l'allumage extinction de leds, c'est génial. Pour aller plus loin...Je ne sais pas!
Je poste le programme pour ceux que ça intéresse :


int etage[] = { 0, 1, 2, 3 }; // Désignation des sorties
int nombredesortie = 4; // Nombre total de sortie ou leds car il y a autant de sortie que de leds
int timer1 = 0; // un timer
int timer2 = 1000; // un autre
int bornebasse = 0; //valeur utilisée dans mes boucles
int bornehaute = 1;



void setup() {
int sortie; // Variable
for (int sortie = 0; sortie < nombredesortie; sortie++) {
pinMode(etage[sortie], OUTPUT); // Facon rapide de désigner les pins comme des sorties
}
}

void loop() { //Il y a deux boucles while. Une pour la montée et une autre pour la descente

while (bornebasse != 4) { // Boucle qui allume une à une les leds afin de gravir ma tour eiffel...
for (int sortie = 0; sortie < nombredesortie; sortie++) { // J'éteins à chaque fois toutes les leds
digitalWrite(etage[sortie], LOW);
delay(timer1); } // Voici le timer de 10ms qui n'est pas indispensable mais qui pourra être réutiliser à l'avenir avec un capteur ou autre...
for (int sortie = bornebasse; sortie < bornehaute; sortie++) { // Je demande d'allumer les sorties comprises entre les bornes hautes et basses
digitalWrite(etage[sortie], HIGH);
delay(timer2);} // Un délai plus long permet de donner un meilleur rendu
bornebasse++ ; // Incrémentation des bornes
bornehaute++;}
delay(timer1);
while (bornehaute != 0) {
for (int sortie = 0; sortie < nombredesortie; sortie++) {

digitalWrite(etage[sortie], LOW);
delay(timer1); }
for (int sortie = bornebasse; sortie < bornehaute; sortie++) {

digitalWrite(etage[sortie], HIGH);
delay(timer2);}
bornebasse--;
bornehaute--;}

//J'utilise cette programmation car chaque étage de ma tour eiffel comporte 2 sorties. L'idée d'intervalle est alors un peu plus justifiée
//Cette version sert à vérifier que ça marche sur ma plaque d'essai

}

Re: Tour eiffel lumineuse

Posted: 10 Aug 2009, 22:22
by jC_Omega
ca prend forme :)


attention par contre de ne pas mettre plus de 2 led de brancher sur une sortie du µC... après ca crame... faut regarder les limite dans la donc du ATMEGA