Redstone Délai très long avec peu de repeaters !

Lavazur

Bucheron
19 Juillet 2011
113
5
13
:mobpig:
Hello Minecraftiens !

Vous avez toujours rêvé de faire un labyrinthe qui explose au bout d'une demi-heure si le joueur n'a pas réussi à trouver la sortie et à désamorcer la bombe ? Vous avez toujours rêvé d'enfermer des joueurs dans des arènes pleines de mobs pendant 15 min puis de les laisser ressortir (s'ils ont survécu )?

Le plus simple ? Faire une chaine de repeaters suffisament longue pour que l'impulsion que l'on donne au départ mette le temps qu'il faut pour arriver au bout avant de déclencher les événements souhaités.

Le problême? 10 minutes par exemple c'est 600 secondes et donc une chaîne de 1500 repeaters a 0.4 secondes , ca fait beaucoup, beaucoup trop...

Heureusement il y a les maths, et par exemple avec une quarantaine de repeaters je peux vous faire un délai de plus de 15 minutes.

Le principe ? Faire circuler une impulsion simultanément dans plusieurs boucles de longueurs différentes.
Les impulsions vont mettre des temps différents pour faire un tour et revenir au point de départ, mais au bout d'un certain temps les impulsions arriveront TOUTES en meme temps au point de départ. On peut exploiter ca avec une porte ET qui n'enverra un signal que si toutes les impulsions sont au point de départ.

Si l'on prend une boucle avec 2 repeaters et une autre avec 4 , quand l'impulsion de la première boucle aura fait deux tours, l'impulsion dans la seconde boucle aura fait exactement un tour, donc elle seront revenues au point de départ en même temps. La porte ET enverra un signal au bout de deux tours de la premieres boucle donc comme si on avait alignés 4 repeaters. Pas très impressionnant, on a utilisé 6 repeaters pour créer un délai équivalent à 4 repeaters alignés . Prenont un autre exemple : une boucle de longueur 10 et un autre de longueur 11, les impulsions n'arriveront en meme temps au point de départ qu'au bout de 11 tours sur la boucle de longueur 10, ce qui équivaut avec 21 repeaters à aligner 10*11=110 repeaters ! Le gain en ressource est deja impressionant !

Encore plus impressionnant : avec 5 boucles: une de 2 , une de 3 ,une de 5 ,une de 7 et une de 11 repeaters, donc 28 reapeaters au total , on peut faire un délai équivalent à 2*3*5*7*11=2310 repeaters donc environ 15 minutes de délai .

Tout cela repose sur des notions de mathématiques de base (niveau terminale cela dit) : les nombres premiers et les multiples (notamment le ppcm, le plus petit multiple commun).

C'est important de comprendre comment cela marche pour pouvoir réaliser des délais dont on maîtrise la longueurs .

Exemple si vous faites deux boucles : une de 10 et une de 20 repeaters, l'équivalent en repeaters alignés est de ... 20 , autant dire que ca sert à rien ...

Une petite vidéo pour vous expliquer succinctement ca (en 1080 HD wohoo !) :

:water: Une proposition de réalisation technique:



La première chose nécessaire au bon fonctionnement du systême c'est de créer une impulsion dont la durée est indépendante du signal qu'on applique pour activer le systême (qu'on appuie sur un bouton, qu'on marche quelques secondes sur une plaque de pression ,etc)

On peut utiliser une mémoire pour cela (orange) , des qu'elle recoit un signal en entrée( rose), elle s'active et délivre un courant constant vers une générateur d'impulsion (vert), deux branches, une reliée à un inverseur (I1) et l'autre reliée à un repeater ces deux branches sont ensuite reliées à un meme inverseur (I2). La torche de I2 ne s'allumera que pendant les 0,2 secondes (le repeater sur l'image n'est pas bien réglé, il devrait être à 0,4 secondes) ou I1 ne délivrera pas de courant car alimenté par la mémoire et que le repeater n'a pas encore transmis le signal.

Cette impulsion sera envoyée aux boucles (jaune).



Les boucles, c'est plutôt simple , vous faites des chaînes de repeaters que vous rebouclez sur elles mêmes vous mettez tous les repeaters à 0,4 secondes. Ensuite il faut relier le débuts de la chaîne avec le générateur d'impulsion (jaune) (en mettant un repeater pour forcer les impulsions à rester dans les boucles)

Il faut ensuite relier ces boucles à une porte ET (orange), c'est encore plus simple:
vous reliez chaque fin de chaîne à un inverseur. Vous reliez ensuite tous ces inverseurs à un même dernier inverseur (IF). La torche de ce dernier ne s'allumera que si elle ne reçoit aucun courant donc que si les autres inverseurs reçoivent en même temps du courant.

Attention il est important de placer correctement les entrées de la porte ET, il faut qu'il y ait le même nombre de répéteurs juste après l'entrée de la ET (c'est à dire entre l'entrée de la ET et le début de la boucle (la ou on injecte l'impulsion)) pour toutes les boucles (4 sur l'image).

Suivant ce que vous voulez faire vous pouvez uniquement relier la torche du dernier inverseur (orange) à votre actionneur , il s'actionnera périodiquement ( on peut imaginer faire une horloge par exemple).
Vous pouvez aussi relier cette torche à la mémoire pour la remettre à zéro (violet):
Si vous reliez un actionneur à la mémoire, il s'activera au moment ou vous activerez le systême et se désactivera quand la mémoire se remettra à zéro.

Si vous voulez que le système se remette a zéro, il faut donc remettre à zéro la mémoire, et "retirer" les impulsions qui tournent dans les boucles, pour cela il suffit de relier un piston à la mémoire (bleu) , ce piston pousse un bloc qui vient fermer la boucle et permet à l'impulsion de circuler, quand le piston collant se rétracte, la boucle est ouverte et l'impulsion ne peut plus passer et disparaît.

:water: Comment bien choisir les longueurs des boucles ?

Répondons tout d'abord à cette question: J'ai une boucle (B1) de longueur L1 et une autre (B2) de longueur L2, quelle sera le délai crée ou encore la longueur équivalente d'une seule chaîne de repeaters ?

L1 et L2 sont évidemment des entiers naturels ( 1,2 ,3, 50, 1500, etc )

Supposons L2 plus grand que L1
Quand l'impulsion (I1) dans B1 aura fini son premier tour, il restera L2-L1 repeaters à franchir à l'impulsion (I2) dans B2 . Ainsi à chaque tour I2 accumulera L2-L1 repeaters à franchir de retard : Au bout de K tours de I1 , I2 aura K*(L2-L1) à franchir pour finir son K-ième tour.

Exemple: L1=10 L2=13 K=5
au bout de K=5 tours, I2 aura K*(L2-L1)=5*(13-10)=15 repeaters de retard, c'est à dire qu'il reste à I2 15 repeaters à franchir pour finir son 5-ème tour.

Qu'arrive t'il si le retard accumulé par I2 vaut exactement la longueur de la boucle qu'elle parcoure, B2 ? Et bien les deux impulsions sont toutes les deux revenues en positions de départ, on dira qu'elles sont en phase (pas très correct m'enfin bon), au début de leur boucles respectives. A combien de tour dans B1 et dans B2 cela correspond t'il ?

Et bien cela se réduit a résoudre l'équation:
L1*K1=L2*K2 ou K1 et K2 sont des entiers naturels,
Il faut trouver des valeurs de K1 et K2 qui marchent, ces valeurs correspondent respectivement aux nombres de tours que devront faire I1 et I2 avant de se retrouver en phase.

Il y a une infinité de solutions vous l'aurez compris, si les impulsions se retrouvent en phase au bout de dix tours, dix tours plus tard elle seront de nouveau en phase. Ce qui nous importe c'est de trouver le nombre de tours qui correspond à la premiere fois ou les impulsions se retrouvent en phase. C'est à dire le nombre minimal de tour qu'il faut à l'une et à l'autre pour être en phase. il trouver la solution ou K1 et K2 sont minimums.

K1*L1 est un multiple de L1, puisque divisible par L1
De meme K2*L2 est un multiple de L2.
On veut K1 et K2 minimum donc K1*L1=K2*L2 minimum, c'est donc qu'on cherche le plus petit multiple commum (ppcm) à L1 et L2.

Pour trouver le ppcm il suffit de décomposer L1 et L2 en facteurs premier et de former le nombre dont les facteurs premiers seront ceux de L1 et L2 réunies et mis à la puissance la plus grande parmis les puissances des facteurs correspondant de L1 et L2.
Pour obtenir le nombre de tours K1 et K2 il suffit simplement de diviser le ppcm par respectivement L1 et L2

Bon un exemple pour rendre les choses claires:
si L1=60=2*2*3*5
L2=45=5*3*3
Les facteurs premiers de L1 et L2 réunies sont 2,3 et 5
2 est présent deux fois dans L1, 0 fois dans L2, il sera donc présent deux fois dans le ppcm
3 est présent une fois dans L1 et deux fois dans L2, il sera donc présent deux fois dans le ppcm
5 est présent une fois dans L1 et une fois dans L2, il sera présent une fois dans le ppcm

d'ou ppcm=2*2*3*3*5=180

K1*L1=ppcm d'ou K1=180/60=3 tours
K2*L2=ppcm d'ou K2=180/45=4 tours

Le délai obtenu avec ces deux boucles est simplement K1*L1 ou K2*L2 fois le temps que met l'impulsion à passer un repeater 0,4 seconde
c'est à dire ppcm*0,4, dans l'exemple 180*0,4=88 secondes
Le nombre de repeaters alignés équivalent est juste le ppcm=180,
on a donc ici une gain de 180-60-45=75 repeaters.

Voila vous avez la méthode pour trouver le délai crée à partir de longueur de 2 boucles données.
Pour plus de 2 boucles (i boucles), c'est le meme principe on a une équation du type:
K1*L1=K2*L2=K3*L3=..=Ki*Li

Il faut trouver K1,K2, K3,.. minimum c'est à dire trouver le ppcm à L1,L2,L3 ... Li

Le plus utile reste à venir , c'est à dire comment construire les boucles adéquates et de longueurs minimales pour avoir un délai souhaité.

Comme on l'a vu le délai est simplement égal au ppcm*0,4, il suffit donc de trouver des longueurs de boucles telles que leur ppcm soit égal au délai divisé par 0,4.

Exemple: je souhaite un délai de 60 secondes: ppcm =60/0,4=150=2*3*5*5

Et bien je peux choisir de faire un systeme de deux boucles: L1=2*3=6 repeaters et L2=5*5=25 repeaters
Le ppcm de L1 et L2 est bien 2*3*5*5=150

Donc ici avec seulement 31 repeaters on peut faire un équivalent en délai d'une chaine de 150 repeaters !

On aurait pu prendre L1=12 et L2=75, car le ppcm est le même, mais c'est évidemment moins intéressant puisqu'on utilise plus de repeaters.

Pour utiliser un minimum de repeaters, il faut utiliser un maximum de boucles et dont les longueurs sont premieres entre elles, c'est à dire qu'elles n'ont aucun facteurs premier en commun.

Dans l'exemple, la solution qui demande le moins de repeaters est de faire trois boucles, une de 2 , une de 3 et une de 5*5, mais on ne gagne qu'un repeater par rapport à ce que je vous ai proposé précedemment.

Mais par exemple si on souhaite un délai de 756 secondes, ppcm=756/0,4=1890=2*3*3*3*5*7

On peut faire deux boucles une de 2*3*3*3=54 et une de 5*7=35 , on utilise 99 repeaters
Ou faire quatres boucles une de 2, une de 3*3*3=27, une de 5 et une de 7 on utilise 41 repeaters et c'est vraiment le minimum qu'on puisse faire . (contre 1890 sans boucles)

Voila vous savez désormais réaliser des systêmes à boucles qui permettent de faire de très long délai.

:water: Les petits problèmes d'un tel systême :

Certains délai demandent malgré tout un nombre important de repeaters, et notamment un temps remarquable que celui de dix minutes, une journée dans minecraft.

10min=600 secondes=1500 repeaters= 2*2*3*5*5*5

Le mieux que vous puissez faire c'est trois boucles, une de 4, une de 3 et une de ... 125 repeaters , ca fait beaucoup moins que 1500 mais c'est tout de même important , ca prend de la place.

Une solution c'est de regarder des nombres proches de 1500, pour obtenir des longueurs de boucles plus petites, mais vous n'aurez pas exactement 600 secondes, si vous faites une horloge, celle-ci prendra du retard petit à petit .(un peu comme une vraie horloge en fait ^^)

:water: Un exemple de circuit !
Vous pouvez tester un exemple sur ce simulateur redstone dont voici le lien:
http://mordritch.com/mc_rss/#1592

Il y a 4 boucles, de longueur 2,3,5 et 7, on a donc un délai de 2*3*5*7*0,4=84 secondes

Appuyez sur le bouton (en bas à droite) et le systême se lance, 85 secondes plus tard, le piston du bas s'active ! (Vous pouvez chronométrer ca marche à la perfection !)

N'hésitez pas à vous inspirer de ce modèle, vous avez juste à changer les longueurs de boucles pour avoir a peu près n'importe quel délai !

Et voici pour finir une application de l'utilisation des boucles: Une tour-horloge qui affiche l'heure à trois heures près.

Il est donc approximativement 3 heures sur la photo ^^.


Et 9 heures ici.
--
Lavazur
 

Lavazur

Bucheron
19 Juillet 2011
113
5
13
Oui, je vais essayer de faire un tuto vidéo, j'ai l'impression que c'est ce que tout le monde fait ici.


Une premiere et petite vidéo sans commentaire pour montrer que ca marche. c'est le systême qui est en image dans le sujet.
http://www.youtube.com/watch?v=N-LjrKcihe4&feature=player_embedded

Excusez Clint Eastwood qui parle de ses films derriere ...
 

Lavazur

Bucheron
19 Juillet 2011
113
5
13
Salut les gens, pour tester ma "théorie" des boucles j'ai réalisé un systême à 4 boucles ( de longueurs 5,7,9 et 11) qui réalise en théorie un délai de 23 minutes. Et bien ca marche ! Le seul hic, ca réalise en fait un délai de 30 minutes, c'est à cause des portes inverseuses qui rajoutent des petits délai qui s'accumulent à chaque tour .

[attachment=1343]

Ca m'a pris 5 minutes à réaliser ! Facile comme tout ^^

Je vous ponds un tuto écrit , et un tuto vidéo aussi rapidement que possible.

Edit: J'ai reglé le problême des délais supplémentaires, très simplement d'ailleurs.
 

Wyvern

Administrateur panda
31 Octobre 2010
4 172
279
242
28
J'y avais déjà pensé il y a longtemps quand on utilisait encore les NotNot gates au lieu des repeaters qui n'existaient pas encore :D
Ensuite, j'y ai plus repensé et j'ai oublié. :-p

Faudrait faire une vidéo !
 

SkyZ

Architecte en herbe
2 Mai 2011
45
0
70
Vraiment bonne idée, par contre j'ai mieux compris avec le texte qu'avec la vidéo ^^
je vais tester tout ça, sa à l'air vraiment très pratique
 

Nairolf

If in doubt, flat out.
26 Avril 2011
2 849
220
212
31
Comme quoi les maths sont important pour Minecraft. Sinon j'ai déjà fait un système similaire mais sans trop calculé.
 

Lavazur

Bucheron
19 Juillet 2011
113
5
13
Salut ! Comme vous pouvez le voir j'ai rajouté les explications du système, les grands traits de la réalisation technique et puis la partie mathématique pour pouvoir calculer les bonnes longueurs de boucle à prendre.

Dites moi ce que vous en pensez.

Je suis aussi en train d'uploader une petite vidéo explicative !
Consultez ma chaîne:
http://www.youtube.com/user/SebHiromi33?feature=mhee
Elle devrait être dispo d'ici quelques heures. Je rajouterai un lien direct as soon as possible !

See u guys
 

MiningBad

Bucheron
8 Février 2011
296
15
13
RE: [Tuto] Délai très long avec peu de repeaters !

Nickel, le grand principe est expliqué en quelques lignes puis il y a tous les détails qu'on veut derrière.

Très bonne astuce :ok: