
Todos os anos, em 31 de dezembro, eu, fantasiada de Papai Noel, e minha esposa, no papel de Donzela de Neve, viajo pela cidade para meus amigos com parabéns. Como o Ano Novo está chegando, decidi verificar se está tudo pronto para mim e tirei minha equipe de funcionários do porão. Para minha surpresa, depois de ficar no porão por um ano, ele trabalhou bem até agora! Sua bateria ainda está de alguma forma carregada! A equipe não é muito brilhante, mas brilha. É claro que preciso recarregar e estou vendo um LED parar de funcionar, mas isso é corrigível - vamos consertar.
Fiz essa equipe em 2012 e, desde então, ela me serviu fielmente. A coisa é bastante simples, mas muito eficaz, especialmente as crianças se alegram com isso. Ele é quase como uma espada Jedi - apenas um cajado, e para o verdadeiro Papai Noel - isso é uma coisa necessária. Decidi escrever sobre ele aqui no Habré - de repente alguém se inspirará na idéia e fará isso por si mesmo no Ano Novo, ainda há tempo.
Para formar uma equipe, você precisará de:
- um pedaço de tubo de água de plástico de 1,3 metros;
- um pouco de autocolante brilhante para decoração;
- um pedaço de cabo de rede UTP-5 ou qualquer outro cabo adequado;
- LEDs azuis, pelo menos 24 peças;
- bateria
- botão liga / desliga;
- qualquer pequeno microcontrolador ou placa FPGA que possua algo que você possa programar;
- um grande brinquedo de bola de árvore de Natal que pode ser dividido ao meio para que a placa e a bateria possam ficar escondidas.
As peças necessárias são visíveis nesta foto:

O dispositivo da equipe é muito simples. Não há nada especialmente para escrever. Pegamos um cano de água de plástico branco e fazemos vários furos na mesma distância de 200 mm. Eu tenho 6 buracos.
Dissolvemos o cabo UTP-5 em vários pares trançados. São necessários seis pares de fios. Nós os lançamos nos buracos e saímos através de uma extremidade do tubo, para onde estará a bola mágica do cajado. Onde pares de fios entram nos orifícios do tubo, nós os limpamos e enrolamos firmemente ao redor do tubo a uma certa distância um do outro. Nós soldamos. Para o "barramento" resultante em um círculo da solda do bastão em paralelo 4 LEDs azuis:

Na parte superior do tubo, você precisa fazer um furo maior e colar o botão liga / desliga do painel de controle:

Eu tenho o cachecol de Mars rover como painel de controle. Aqui está o FPGA do Altera MAX II, e como a placa foi originalmente projetada para conectar motores de brinquedo de baixa potência, as saídas de chip na placa são combinadas em 10 peças para fornecer mais corrente. Existem apenas 6 dessas saídas combinadas na placa - esses são os "sinais" da placa f0, f1, f2, f3, f4, f5. Para que eu possa alimentar diretamente os LEDs a partir dessas conclusões, sem medo de queimar a saída do FPGA. Também na própria placa existem 8 LEDs amarelos - eles também podem ser acesos. Se a bola na parte superior do bastão for translúcida, isso também adicionará um efeito visual.
Se você usa o Arduino, por exemplo, em uma equipe, pode ser necessário soldar um pequeno cachecol com chaves de transistor para controlar muitos LEDs, pois é melhor não tirar mais do que 10-15mA de um pino do microcontrolador, mas precisamos de muito mais para os LEDs.
A placa precisa ser atualizada com o programa de controle. A idéia é que, quando você pressiona o botão na pauta, o quadro liga e imediatamente começa a acender as luzes na pauta. Então quem tem que fantasia. Primeiro acendo todos os LEDs da primeira linha à sexta e depois apago as voltas da sexta para a primeira.
O código HDL da Verilog provavelmente explica melhor o que quero dizer:
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
Este não é um módulo de nível superior, é um módulo effect.v No módulo superior, duas frequências de clock de clk ~ 40Hz são alimentadas aqui - essa frequência determina a velocidade do efeito e a segunda frequência mclk ~ 320Hz, oito vezes maior. O sinal mclk modula adicionalmente as saídas novamente, para que elas nem sempre estejam acesas, para que os LEDs não brilhem tanto e o chip não aqueça.
Não sei se preciso memorizar este artigo. Mas, por precaução, escreverei que o código Verilog acima pode ser totalmente simulado usando este testbench:
`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
Como exatamente a simulação dos projetos pode ser lida, por exemplo,
aqui .
Bem, de acordo com os resultados da simulação, você pode obter estes diagramas de tempo dos sinais:

Se você planeja fazer esse projeto no Arduin - isso também é possível. Eu realmente não sou um grande conhecedor da Arduina, mas parece-me que o código pode ser algo como isto:
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); } }
O resultado deve ser algo como isto:
Apesar do projeto como um todo ser muito simples, os espectadores e os transeuntes casuais no dia 31 de dezembro estão invariavelmente satisfeitos. Especialmente quando você sai do carro em uma roupa de Papai Noel em uma rua com neve, você sobe para um transeunte casual e ilumina o caminho com uma equipe de funcionários e apresenta um pato mandarim.