Personal für den Weihnachtsmann



Jedes Jahr am 31. Dezember fahre ich im Kostüm des Weihnachtsmanns und meiner Frau in der Rolle der Schneewittchens mit Glückwünschen zu meinen Freunden durch die Stadt. Da das neue Jahr bald kommt, entschloss ich mich zu prüfen, ob ich alles für ihn bereit habe, und holte mein abgenutztes Personal aus dem Keller. Zu meiner Überraschung hat er, nachdem er ein Jahr im Keller gelegen hatte, auch jetzt noch richtig gearbeitet! Sein Akku ist noch irgendwie aufgeladen! Das Personal ist nicht sehr hell, aber es leuchtet. Natürlich muss ich aufladen und sehe zu, dass eine LED nicht mehr funktioniert, aber das ist reparabel - wir werden es beheben.

Ich habe dieses Personal im Jahr 2012 gemacht, und seitdem hat es mir treu gedient. Die Sache ist ganz einfach, aber sehr effektiv, vor allem die Kinder freuen sich darüber. Er ist fast wie ein Jedi-Schwert - nur ein Stab, und für den echten Weihnachtsmann ist das eine notwendige Sache. Ich habe mich entschlossen, hier auf Habré über ihn zu schreiben - plötzlich wird sich jemand von der Idee inspirieren lassen und dies bis zum neuen Jahr selbst machen, es ist noch Zeit.

Um einen Stab zu machen, benötigen Sie:

  • ein Stück Plastikwasserleitung 1,3 Meter;
  • ein wenig glänzend selbstklebend zur Dekoration;
  • ein Stück UTP-5-Netzwerkkabel oder ein anderes geeignetes Kabel;
  • blaue LEDs, mindestens 24 Stück;
  • Batterie
  • Ein- / Ausschalter;
  • jeder kleine Mikrocontroller oder jede FPGA-Karte, die etwas enthält, das Sie programmieren können;
  • Ein großes Ball-Weihnachtsbaumspielzeug, das in zwei Hälften geteilt werden kann, sodass sowohl das Brett als auch der Akku darin versteckt werden können.

Die notwendigen Teile sind auf diesem Foto zu sehen:



Das Gerät des Personals ist sehr einfach. Es gibt vor allem nichts zu schreiben. Wir nehmen eine weiße Kunststoffwasserleitung und bohren mehrere Löcher im gleichen Abstand von 200 mm. Ich habe 6 Löcher.

Wir lösen das UTP-5-Kabel in mehrere verdrillte Paare auf. Es werden sechs Adernpaare benötigt. Wir schleudern sie in die Löcher und geben sie durch ein Ende der Leitung ab, wo sich die magische Kugel des Stabes befinden wird. Wo Paare von Drähten in die Löcher des Rohrs gehen, reinigen wir sie und wickeln sie in einem gewissen Abstand fest um das Rohr. Wir löten. An den entstehenden "Bus" im Stabkreis löten parallel 4 blaue LEDs:



Oben in der Leitung müssen Sie ein größeres Loch bohren und dort den Netzschalter der Steuerplatine einfügen:



Ich habe den Mars-Rover-Schal als Steuerplatine. Hier steht der FPGA Altera MAX II, und da das Board ursprünglich zum Anschluss von Spielzeugmotoren mit geringer Leistung gedacht war, sind die Chip-Ausgänge auf dem Board in 10 Teilen zusammengefasst, um ein wenig mehr Strom zu liefern. Es gibt nur 6 solcher kombinierten Pins auf der Platine - dies sind die "Signale" der Platine f0, f1, f2, f3, f4, f5. So kann ich die LEDs aus diesen Schlussfolgerungen direkt mit Strom versorgen, ohne befürchten zu müssen, den Ausgang des FPGA zu verbrennen. Auch auf der Platine selbst befinden sich 8 gelbe LEDs - diese können auch gezündet werden. Wenn der Ball oben auf dem Stab durchscheinend ist, sorgt dies auch für einen visuellen Effekt.

Wenn Sie Arduino zum Beispiel in einem Stab verwenden, müssen Sie möglicherweise einen kleinen Schal mit Transistortasten löten, um viele LEDs zu steuern, da es besser ist, nicht mehr als 10-15 mA von einem Pin des Mikrocontrollers abzunehmen, aber wir brauchen viel mehr für LEDs.

Die Karte muss mit dem Steuerprogramm geflasht werden. Die Idee ist, dass, wenn Sie den Knopf auf dem Stab drücken, das Brett sich einschaltet und es sofort anfängt, die Lichter auf dem Stab anzuzünden. Wer hat dann welche Fantasie. Ich zünde der Reihe nach alle LEDs von der ersten bis zur sechsten Reihe an und schalte dann die Kurven von der sechsten bis zur ersten Reihe aus.

Verilog HDL-Code wird wahrscheinlich besser erklären, was ich meine:

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 

Hierbei handelt es sich nicht um ein Top-Level-Modul, sondern um ein effect.v-Modul Vom Top-Modul werden hier zwei Taktfrequenzen von clk ~ 40Hz geliefert - diese Frequenz bestimmt die Geschwindigkeit des Effekts und die zweite Frequenz mclk ~ 320Hz, achtmal höher. Das mclk-Signal moduliert zusätzlich die Ausgänge wieder, so dass diese nicht immer eingeschaltet sind, die LEDs nicht so hell leuchten und sich der Chip nicht erwärmt.

Ich weiß nicht, ob ich mir diesen Artikel merken muss. Aber nur für den Fall, ich schreibe, dass der obige Verilog-Code mit dieser Testbench vollständig simuliert werden kann:

 `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 

Wie genau die Simulation von Projekten ist, können Sie beispielsweise hier nachlesen.

Nun, gemäß den Ergebnissen der Simulation können Sie diese Zeitdiagramme von Signalen erhalten:



Wenn Sie dieses Projekt auf Arduin durchführen möchten, ist dies ebenfalls möglich. Ich bin wirklich kein großer Kenner von Arduina, aber es scheint mir, dass der Code ungefähr so ​​aussieht:

 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); } } 

Das Ergebnis sollte ungefähr so ​​aussehen:


Trotz der Tatsache, dass das Projekt insgesamt sehr einfach ist, sind die Zuschauer und zufälligen Passanten am 31. Dezember ausnahmslos begeistert. Besonders wenn Sie in einem Anzug von Santa Claus auf einer verschneiten Straße aus dem Auto steigen, nähern Sie sich einem zufälligen Passanten und beleuchten mit einem Stab den Weg, Sie geben eine Mandarinenente.

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


All Articles