Personnel pour le Père Noël



Chaque année, le 31 décembre, moi, en costume de père Noël, et ma femme, dans le rôle de la fille des neiges, conduisons la ville en voiture avec mes félicitations. Comme la nouvelle année arrive bientôt, j'ai décidé de vérifier si tout était prêt pour moi et j'ai sorti mon personnel de longue date du sous-sol. À ma grande surprise, après avoir passé un an au sous-sol, il a bien fonctionné même maintenant! Sa batterie est toujours en quelque sorte chargée! Le personnel n'est pas très lumineux, mais ça brille. Bien sûr, je vais devoir me recharger et je regarde une LED cesser de fonctionner, mais c'est réparable - nous allons le réparer.

J'ai fait ce personnel en 2012, et depuis lors, il m'a fidèlement servi. La chose est assez simple, mais très efficace, surtout les enfants s'en réjouissent. Il est presque comme une épée Jedi - seulement un bâton, et pour le vrai Père Noël - c'est une chose nécessaire. J'ai décidé d'écrire à son sujet ici sur Habré - tout à coup quelqu'un sera inspiré par l'idée et le fera pour lui d'ici le Nouvel An, il est encore temps.

Pour faire un personnel, vous aurez besoin de:

  • un morceau de tuyau d'eau en plastique de 1,3 mètre;
  • un peu d'autocollant brillant pour la décoration;
  • un morceau de câble réseau UTP-5 ou tout autre câble approprié;
  • LED bleues, au moins 24 pièces;
  • batterie
  • bouton d'alimentation;
  • tout petit microcontrôleur ou carte FPGA qui a quelque chose que vous pouvez programmer;
  • un grand jouet boule-arbre de Noël qui peut être divisé en deux afin que la planche et la batterie puissent y être cachées.

Les pièces nécessaires sont visibles sur cette photo:



L'appareil du personnel est très simple. Il n'y a surtout rien à écrire. Nous prenons une conduite d'eau en plastique blanc et forons plusieurs trous à la même distance de 200 mm. J'ai 6 trous.

Nous dissolvons le câble UTP-5 en plusieurs paires torsadées. Six paires de fils sont nécessaires. Nous les lançons dans les trous et sortons par une extrémité du tuyau, là où sera la boule magique du bâton. Lorsque des paires de fils entrent dans les trous du tuyau, nous les nettoyons et enroulons étroitement autour du tuyau à une certaine distance les uns des autres. Nous soudons. Au "bus" résultant dans un cercle de la soudure du personnel en parallèle 4 LED bleues:



En haut du tuyau, vous devez percer un trou plus grand et y coller le bouton d'alimentation de la carte de contrôle:



J'ai l'écharpe Mars rover comme panneau de contrôle. Voici le FPGA d'Altera MAX II, et puisque la carte était à l'origine destinée à connecter des moteurs jouets à faible puissance, les sorties de puce sur la carte sont combinées en 10 pièces pour donner plus de courant. Il n'y a que 6 de ces broches combinées sur la carte - ce sont les «signaux» de la carte f0, f1, f2, f3, f4, f5. Je peux donc alimenter directement les LED à partir de ces conclusions sans craindre de brûler la sortie du FPGA. Sur la carte elle-même, il y a 8 LED jaunes - elles peuvent également être allumées. Si la balle sur le dessus de la portée est translucide, cela ajoutera également un effet visuel.

Si vous utilisez Arduino, par exemple, dans un bâton, vous devrez peut-être souder une petite écharpe avec des touches de transistor pour contrôler de nombreuses LED, car il vaut mieux ne pas prendre plus de 10-15mA d'une broche du microcontrôleur, mais nous avons besoin de beaucoup plus pour les LED.

La carte doit clignoter avec le programme de contrôle. L'idée est que lorsque vous appuyez sur le bouton de la portée, le tableau s'allume et il commence immédiatement à allumer les lumières de la portée. Alors qui a quel fantasme. J'allume d'abord tour à tour toutes les LED de la première rangée à la sixième, puis j'éteins les virages de la sixième à la première.

Le code Verilog HDL expliquera probablement mieux ce que je veux dire:

module effect( input wire clk, input wire mclk, output wire [7:0]leds, output wire f0, output wire f1, output wire f2, output wire f3, output wire f4, output wire f5 ); reg [3:0]cnt; reg [5:0]bits; initial begin bits= 6'h00; cnt = 4'h0; end always @(posedge clk) if(cnt==11) cnt<=0; else cnt <= cnt + 1'b1; always @* begin case(cnt) 4'h0: bits = 6'b000001; 4'h1: bits = 6'b000011; 4'h2: bits = 6'b000111; 4'h3: bits = 6'b001111; 4'h4: bits = 6'b011111; 4'h5: bits = 6'b111111; 4'h6: bits = 6'b011111; 4'h7: bits = 6'b001111; 4'h8: bits = 6'b000111; 4'h9: bits = 6'b000011; 4'ha: bits = 6'b000001; default: bits = 6'b000000; endcase end assign f0 = bits[0] & mclk; assign f1 = bits[1] & mclk; assign f2 = bits[2] & mclk; assign f3 = bits[3] & mclk; assign f4 = bits[4] & mclk; assign f5 = bits[5] & mclk; assign leds = {bits[5],bits[5],bits[4],bits[3],bits[2],bits[1],bits[0],bits[0]}; endmodule 

Ce n'est pas un module de niveau supérieur, c'est un module effect.v. À partir du module supérieur, deux fréquences d'horloge de clk ~ 40Hz sont fournies ici - cette fréquence détermine la vitesse de l'effet et la deuxième fréquence mclk ~ 320Hz, huit fois plus élevée. Le signal mclk module en outre les sorties à nouveau, de sorte qu'elles ne sont pas toujours allumées, de sorte que les LED ne brillent pas si fort et que la puce ne chauffe pas.

Je ne sais pas si je dois mémoriser cet article. Mais juste au cas où, j'écrirai que le code Verilog ci-dessus peut être entièrement simulé en utilisant ce banc de test:

 `timescale 1ms / 1us module tb; reg clock = 1'b0; always #10 clock = ~clock; reg [3:0]counter=0; always @(posedge clock) counter <= counter+1; wire [7:0]wleds; wire wf0,wf1,wf2,wf3,wf4,wf5; effect inst( .clk( counter[2] ), .mclk( clock ), .leds( wleds ), .f0( wf0 ), .f1( wf1 ), .f2( wf2 ), .f3( wf3 ), .f4( wf4 ), .f5( wf5 ) ); initial begin $dumpfile("out.vcd"); $dumpvars(0,tb); #10000; $finish(); end endmodule 

Comment est exactement la simulation des projets peut être lu, par exemple, ici .

Eh bien, selon les résultats de la simulation, vous pouvez obtenir ces chronogrammes de signaux:



Si vous prévoyez de faire ce projet sur Arduin - c'est également possible. Je ne suis vraiment pas un grand connaisseur d'Arduina, mais il me semble que le code peut ressembler à ceci:

 int start_pin = 2; int end_pin = 8; void setup() { for (int i = start_pin; i< end_pin; i++ ) pinMode(i, OUTPUT); } void loop() { for (int i = start_pin; i< end_pin; i++ ) { digitalWrite(i, HIGH); delay(250); } for (int i = start_pin; i< end_pin; i++ ) { digitalWrite(i, LOW); delay(250); } } 

Le résultat devrait être quelque chose comme ceci:


Malgré le fait que le projet dans son ensemble soit très simple, les spectateurs et passants occasionnels du 31 décembre sont toujours ravis. Surtout quand vous sortez de la voiture en costume de Père Noël dans une rue enneigée, vous vous approchez d'un passant aléatoire et illuminez le chemin avec un staff, vous donnez un canard mandarin.

Source: https://habr.com/ru/post/fr479404/


All Articles