«Ce qui est choquant, c'est que les logiciels non-libres viennent d'une industrie sans conscience et qui est prête à espionner les gens dès qu'elle en a l'occasion.» Richard Stallman

Les Tutos d'Enzo #01 Escalier Lumineux

Retrouvez sur cette page tous les tutos d' Enzo Image
Avatar de l’utilisateur
miaouss
Messages : 10
Inscription : 09 juil. 2018, 22:23

Les Tutos d'Enzo #01 Escalier Lumineux

Message par miaouss » 18 déc. 2018, 00:12

https://video-cdg2-1.xx.fbcdn.net/v/t42 ... e=5C18BB7A

Hello tout le monde, pour celles et ceux qui ont kiffé mon escalier avec les petites lumières,
je vous livre tout ça gratis pour le refaire chez vous, ça peut fonctionner également pour une allée.

>>> 10€ de matos « site d’enchères bien connues »

........./\0/\
.....= ( ' .' ) =
...... ( '')_( '')
...................

Tout d'abord, une p'tite explication vite fait pour ceux qui veulent juste le reproduire sans trop savoir le pourquoi du comment,
puis après j’approfondirai dans les détails pour les plus téméraires, histoire que vous puissiez y apporter votre petit grain pour le personnaliser.


La carte à programmer s’appelle Arduino, il en existe plusieurs sortes, grosse, petite, toute petite petite.
Pour les tests j'ai pris une Arduino Uno, pour mon projet j'ai pris 3 Arduino Mini.
Ces cartes se programment par l'intermédiaire d'un logiciel "gratuit" à cette adresse :
https://www.arduino.cc/en/Main/Software

Les cartes se branchent en USB (sauf la Mini qui est toute petite et donc n'a pas de port USB pour être la plus petite possible, il faut un adaptateur USB),

Code : Tout sélectionner

voir FTDI: https://www.youtube.com/watch?v=XVvkyiqBL_k
Le logiciel utilise le langage de programmation "C" "C++", non ne partez pas toute suite, 8-)
je vous donne le code que j'ai pondu, pas besoin d'apprendre le langage, je l'ai fait pour vous, hihi ! Un copier, coller suffit.
Mais il y a quand même 2, 3 bases pour piger sur ce qu'il y a faire.

Récap :
  • 2 capteurs de présence nommés « PIR », (capteur infrarouge qui détecte le rayonnement du corps humain, du chat ou du poulet).
  • Pour une seule carte, Max 6 Leds + résistant 250 ohms (250 ohms pour les Leds blanches, pour les autres couleurs ce n'est pas la même valeur, il faut appliquer la loi d'ohms U = R x I, tout ça tout ça. bref Google.com)

Code : Tout sélectionner

Voir: https://www.youtube.com/watch?v=FTyBRLTpyJc
  • Les capteurs PIRs sont des entrées d’info pour la carte et les Leds sont branchées sur des sorties.
Ce que fait le programme :
Je capte une présence sur le PIR en bas de l'escalier.... J'allume la 1ere Led en bas... puis la seconde... puis la 3eme..? etc… A la 6 eme... une pause de quelques secondes.... puis j’éteins la 1er... puis la 2..... 3.... etc. Puis la boucle s'arrête et attend l’info du PIR 1 ou du PIR 2.
Si c'est le capteur PIR 2 (celui en haut de l'escalier), le programme s'exécute exactement de la même façon, mais à l’inverse, en commençant par la 6eme... 5eme etc…

Pour ceux qui veulent en savoir plus :
La carte possède 6 entrées et 13 sorties dont 6 PWM,
mais c'est quoi ça PWM?


Tout le monde sait qu'un ordinateur fonctionne en binaire, 0 ou 1, le yin --> le yang, femme --> homme, intello --> con.
Les sorties normales de cette carte (sauf le PWM) ne peuvent être que de 0 ou de 1, donc soit 0V (Led éteinte) soit 5V (Led allumée "avec une résistance bien sûr).
Cette carte fonctionnera toujours sur ces valeurs de 0v 5v.
Et donc la PWM est non pas binaire mais « analogique » c’est dire qu'elle peut renvoyer 2,486V ou 3v ou 4,88v, ce que l'on souhaite entre 0v et 5v.
Mais elle n'est pas exactement et purement analogique, car dans le code "C" pour l’Arduino, les valeurs vont de 0 à 255, dont 0 = 0v et 255 = 5v. ex : 128 sera égale à 2,5 v.
Les PWM sont les sorties N° 3 ; 5 ; 6 ; 9 ; 10 ; et 11 notées sur la carte.
De ce fait, les Leds peuvent être allumées et éteinte progressivement.
Chose qui se passe dans mon projet, ce qui est plus doux pour l'oeil.
Les PWM servent également pour la vitesse d'un moteur électrique pour faire varier la vitesse de rotation par ex.
Les entrées analogiques fonctionnent de la même façon, mais de 0 à 1023 (1024 bits ça vous parle non ? Oui le "0" compte, on a donc bien 1024 valeurs).
Bon pour le moment je ne vais pas parler du code, car là c'est une autre paire de manches encore.
J'espère que c'est plus clair pour tout le monde avec ces quelques explications.
Là où j'ai poussé le truc et qui est indispensable pour tous les escaliers, c'est qu'en général, à part si vous êtes très grand,

"ho pi j'en ai mare de te vouvoyer", donc à par si t’es un géant, tu as sûrement plus de 6 marches sur ton escalier. Mais nous sommes limités à 6 PWM par carte Arduino…
Comment faire...
J'ai trouvé un petit algorithme qui permet plus ou moins de mettre en réseau plusieurs cartes ensemble avec exactement le même code "C" pour toutes les cartes qui y seront raccordées, afin d'augmenter les nombres de Leds.
Même si t’es un gros riche avec 25 étages de x marches par étage chez toi, mon truc fonctionnera toujours si tu rajoutes des cartes Arduino (2€ la Mini), enfin bon si t’es un gros riche, tu m’appelles, je te le ferai. :lol: :ugeek:

Autre avantage, les Leds consomme de l'énergie et la petite puce sur la carte ne pourrait pas fournir assez d’Alice pour 100 Leds.
J'ai fait 3 petits schémas de branchement pour une, deux ou trois cartes dans tous les cas il n'y a toujours que 2 PIR (en début et fin de ligne).
A savoir,
La carte Arduino fonctionne en 5v, donc l'alimentation se fera généralement par le port USB dont les normes sont 5v 500mA voir 700mA, genre chargeur de tel Impec pour les projets.
Si toutefois ton alimentation se fait par une ou plusieurs piles, il faudra se méfier, et de respecter cette valeur de 5V, (la carte Arduino Uno a un Jack pour l'alimentation en plus de son port USB pour y brancher directement du 6v à 12v.
Je ne suis pas sûr mais je crois que le port « VIN » des cartes correspondent au + de cette de 6 à 12 v, le - est GND)
edit par steflin "ou le port Raw sur pro mini"

Bon on y va…
Achète trois cartes Arduino pour 18 marches ou moins, télécharge le logiciel,
choisi ton port USB dans le logiciel où sera branchée ta carte,
informe le logiciel du type de carte que tu utilises, micro, nano, uno, méga, mini ou autres.

Dans la fenêtre qui est ouverte avec le code, efface le code prérempli et copie et colle le mien :

#####Vous trouverez le code tout en bas de cet article#####

clique sur téléverser…. la petite carte met quelques secondes à charger le code.
Répète l'opération sur toutes les cartes à programmer, c'est le même code pour toute, c'est fait pour.

Regarde et branche comme sur le schéma que je t'ai fait pour une, deux ou trois cartes, si tu en as plus, prend en exemple le schéma où il y en a 3 car ce sera le même branchement.
Pour info le PIR 1 a 3 broches, + - et l'info qui déclenchera le système à la broche 2 de la carte (voir plan), qui allume donc les leds une à une et le code contient une info qui dit que quand la 6 ème led est allumée,
il envoie un signal (qui est le même que le signal du PIR, d'où le fait que le code est identique pour toutes les cartes) à la seconde carte sur la broche 2, qui allume à son tour ses Leds puis renvoie à son tour le signal qui déclenche la 3 eme carte et ainsi de suite (fil orange)
Le PIR 2 est branché sur la dernière carte, le programme se déroule de la même façon à l'inverse et communique par le fil vert.
L'alimentation générale doit être commune pour toutes les cartes.
Bien respecter les numéros des sorties et entrées de la carte.

Si tu dois avoir un nombre de Leds différent de 6, 12, 18, pour 1, 2 ,ou 3 cartes, par exemple si tu as 14 Leds à mettre.
Prend 3 cartes, donc 3 x 6 sorties PWM, il faudra centrer les sorties:
C’est-à-dire 18 (sorties total PWM) - 14 (besoin en Leds) = 4 (les sorties à ne pas brancher) / 2 (à répartir en début et fin de ligne) c’est à dire, ne pas brancher les sorties 1 et 2 (numérotées 3 & 5 sur la 1er carte) et les deux dernières sur la 3 eme carte (numérotées 10 & 11).
Pour que le programme ne soit pas perturbé par cette variable,là où les cartes entre la 1er et dernière carte, doivent obligatoirement avoir leur 6 sortie PWM occupées par les 6 Leds.
Ce système peut fonctionner pour tout autre système d’éclairage que des Leds, mais il sera nécessaire d’utiliser des transistors des puissances pour ne pas griller la microcontrôleur.
Mais ça c’est une autre histoire. :ugeek:

Juste pour info, tout ce système peut fonctionner qu’avec une seule carte Arduino grâce au système Adafuit led (dont chaque led est dotée d’un microscopique microcontrôleur qui commande la led pour une communication binaire et même les changements de couleurs). Mon code n’est pas valable pour du Adafruit, je n’ai pas encore ce niveau-là.

Je n’expliquerai le code que si on me le demande, car trop long à expliquer.
Et pour les E*****s qui souhaitent profiter du code pour le monétiser, je l’ai déjà protégé officiellement et baptisé ΔπΣ ;-).
Pour t'amuser un peu, les lignes de code que tu peux modifier sont (modifie simplement le chiffre) :


…………
VitesseFad = 20; // « 20 » est vitesse à laquelle la led va s’allumer progressivement.
VitesseFadMultiplicateur = 15; // « 15 » est un multiplicateur de la vitesse du Fad, il doit etre un multiple 255 (255 / 15 = 17, nombre entier ok)
TempsResteAllum = 4000; // « 4000 » est le temps pendent lequel les 6 led vont rester allumées, en millisecondes donc 4 s
voir le code complet plus bas sur les 1er lignes de code après « void setup () »
........./\0/\ Posey Brow
.....= ( ' .' ) =
...... ( '')_( '')
...................

Merci à l'autodidacte. Creusez-vous la tête, Internet n'est pas que du côté obscure.
-« Fais-le, ou ne le fais pas, mais il n'y a pas d'essais ! » A dit Maître Yoda.


https://m.facebook.com/photo.php?fbid=1 ... =726%2C635

https://www.facebook.com/photo.php?fbid ... =845%2C624

https://www.facebook.com/photo.php?fbid ... 1205%2C593

https://www.facebook.com/photo.php?fbid ... 1901%2C957

https://www.facebook.com/photo.php?fbid ... 860%2C1035

https://www.facebook.com/photo.php?fbid ... =727%2C233

https://www.facebook.com/photo.php?fbid ... =763%2C235

https://www.facebook.com/photo.php?fbid ... =778%2C227

https://www.facebook.com/photo.php?fbid ... =787%2C238

https://www.facebook.com/photo.php?fbid ... =776%2C163

https://www.facebook.com/photo.php?fbid ... =783%2C242


https://www.arduino.cc/en/Main/Software site officiel des carte Arduino

http://www.techmania.fr/BlocklyDuino/ Site pour programmer simplement pour l’Arduino (il faudra forcément des bonnes bases en « C »)

https://circuits.io/ Site pour construire des schémas électroniques

https://www.youtube.com/channel/UCVqx3v ... cVg2nmegYA Un bon Youtubeur qui pèse dans le domaine.

https://www.facebook.com/10000935990461 ... 532258594/

https://www.facebook.com/photo.php?fbid ... pLx03BCfrb

https://www.facebook.com/photo.php?fbid ... bVvzJSJBV-

https://www.facebook.com/photo.php?fbid ... 9s10PZbD5U

https://www.facebook.com/photo.php?fbid ... pItjb_bnjq

https://www.facebook.com/photo.php?fbid ... =322%2C600

Code : Tout sélectionner

int Pir1Stat;
int Pir2stat;
int Led1;
int VitesseFadMultiplicateur;
int Led2;
int Led6;
int Led3;
int Led5;
int VitesseFad;
int Led4;
int TempsResteAllum;

void setup() {
	Pir1Stat = 0;
	Pir2stat = 0;
	Led1 = 0;
	Led2 = 0;
	Led3 = 0;
	Led4 = 0;
	Led5 = 0;
	Led6 = 0;
	VitesseFad = 20;
	VitesseFadMultiplicateur = 15; //doit etre un multuple 255
	TempsResteAllum = 4000;

	pinMode(2, INPUT);
	pinMode(3, OUTPUT);
	pinMode(5, OUTPUT);
	pinMode(6, OUTPUT);
	pinMode(9, OUTPUT);
	pinMode(10, OUTPUT);
	pinMode(11, OUTPUT);
	pinMode(13, OUTPUT);
	pinMode(7, INPUT);
	pinMode(12, OUTPUT);
	}
	
void loop() {
	if (digitalRead(2) == 1) {
		Pir1Stat = Pir1Stat + 1;
		for (Led1 = 0; Led1 <= 255; Led1=Led1+VitesseFadMultiplicateur) {
		analogWrite(3, Led1);
		delay(VitesseFad);
		}
	for (Led2 = 0; Led2 <= 255; Led2=Led2+VitesseFadMultiplicateur) {
		analogWrite(5, Led2);
		delay(VitesseFad);
		}
	for (Led3 = 0; Led3 <= 255; Led3=Led3+VitesseFadMultiplicateur) {
		analogWrite(6, Led3);
		delay(VitesseFad);
		}
	for (Led4 = 0; Led4 <= 255; Led4=Led4+VitesseFadMultiplicateur) {
		analogWrite(10, Led4);
		delay(VitesseFad);
		}
	digitalWrite(13, HIGH);
	for (Led5 = 0; Led5 <= 255; Led5=Led5+VitesseFadMultiplicateur) {
		analogWrite(9, Led5);
		delay(VitesseFad);
		}
	for (Led6 = 0; Led6 <= 255; Led6=Led6+VitesseFadMultiplicateur) {
		analogWrite(11, Led6);
		delay(VitesseFad);
		}
	//digitalWrite(13, HIGH);
	delay(TempsResteAllum);
	digitalWrite(13, LOW);
	for (Led1 = 255; Led1 >= 0; Led1=Led1-VitesseFadMultiplicateur) {
		analogWrite(3, Led1);
		delay(VitesseFad);
		}
	for (Led2 = 255; Led2 >= 0; Led2=Led2-VitesseFadMultiplicateur) {
		analogWrite(5, Led2);
		delay(VitesseFad);
		}
	for (Led3 = 255; Led3 >= 0; Led3=Led3-VitesseFadMultiplicateur) {
		analogWrite(6, Led3);
		delay(VitesseFad);
		}
	for (Led4 = 255; Led4 >= 0; Led4=Led4-VitesseFadMultiplicateur) {
		analogWrite(10, Led4);
		delay(VitesseFad);
		}
	for (Led5 = 255; Led5 >= 0; Led5=Led5-VitesseFadMultiplicateur) {
		analogWrite(9, Led5);
		delay(VitesseFad);
		}
	for (Led6 = 255; Led6 >= 0; Led6=Led6-VitesseFadMultiplicateur) {
		analogWrite(11, Led6);
		delay(VitesseFad);
		}		
	delay(4000);
	Pir1Stat = Pir1Stat == 0;
	} else {
		if (digitalRead(7) == 1) {
			Pir2stat = Pir2stat + 1;
			for (Led6 = 0; Led6 <= 255; Led6=Led6+VitesseFadMultiplicateur) {
				analogWrite(11, Led6);
				delay(VitesseFad);
				}
			for (Led5 = 0; Led5 <= 255; Led5=Led5+VitesseFadMultiplicateur) {
				analogWrite(9, Led5);
				delay(VitesseFad);
				}
			for (Led4 = 0; Led4 <= 255; Led4=Led4+VitesseFadMultiplicateur) {
				analogWrite(10, Led4);
				delay(VitesseFad);
				}
			for (Led3 = 0; Led3 <= 255; Led3=Led3+VitesseFadMultiplicateur) {
				analogWrite(6, Led3);
				delay(VitesseFad);
				}
			digitalWrite(12, HIGH);
			for (Led2 = 0; Led2 <= 255; Led2=Led2+VitesseFadMultiplicateur) {
				analogWrite(5, Led2);
				delay(VitesseFad);
				}
			for (Led1 = 0; Led1 <= 255; Led1=Led1+VitesseFadMultiplicateur) {
				analogWrite(3, Led1);
				delay(VitesseFad);
				}
			// digitalWrite(12, HIGH);
			delay(TempsResteAllum);
			digitalWrite(12, LOW);
			for (Led6 = 255; Led6 >= 0; Led6=Led6-VitesseFadMultiplicateur) {
				analogWrite(11, Led6);
				delay(VitesseFad);
				}
			for (Led5 = 255; Led5 >= 0; Led5=Led5-VitesseFadMultiplicateur) {
				analogWrite(9, Led5);
				delay(VitesseFad);
				}
			for (Led4 = 255; Led4 >= 0; Led4=Led4-VitesseFadMultiplicateur) {
				analogWrite(10, Led4);
				delay(VitesseFad);
				}
			for (Led3 = 255; Led3 >= 0; Led3=Led3-VitesseFadMultiplicateur) {
				analogWrite(6, Led3);
				delay(VitesseFad);
				}
			for (Led2 = 255; Led2 >= 0; Led2=Led2-VitesseFadMultiplicateur) {
				analogWrite(5, Led2);
				delay(VitesseFad);
				}	
			for (Led1 = 255; Led1 >= 0; Led1=Led1-VitesseFadMultiplicateur) {
				analogWrite(3, Led1);
				delay(VitesseFad);
				}			
			delay(4000);
			Pir2stat = Pir2stat == 0;
			}
		}
	}
Miaouss Image
Avatar de l’utilisateur
ricola
Messages : 685
Inscription : 01 juil. 2018, 23:11

Re: Les Tutos d'Enzo #01 Escalier Lumineux

Message par ricola » 18 déc. 2018, 07:59

Super détaillé.

Je me suis permis de "reformater" ton post pour le rendre plus lisible.
En effet, les liens FB doivent apparemment être placer dans les balises url :

Code : Tout sélectionner

[url] ton lien facebook [/url]
J'espère que tu ne m'en voudra pas :)
Le monde se compose en 10 catégories : ceux qui comprennent le binaire et les autres :lol:
Répondre