Índice:

Mão Rítmica: 6 Passos
Mão Rítmica: 6 Passos
Anonim
Mão Rítmica
Mão Rítmica

Esta cyberglove trata de fazer o movimento certo no momento certo.

As luzes vão do seu braço (cotovelo) para a sua mão e quando as luzes chegam à sua mão você tem que pressionar os dedos na mini fotocélula.

Se você pressionar a mão na mini fotocélula no momento certo, os leds ficam verdes. Caso contrário, os leds ficam vermelhos.

Etapa 1: coletar materiais

  • Uma luva
  • Tecido para deixar a luva mais longa
  • WS2812B tira LED
  • Fios
  • Arduino
  • Mini photosell

Etapa 2: fazer circuitos

Fazendo circuitos
Fazendo circuitos
Fazendo circuitos
Fazendo circuitos

Primeiro conecte a faixa de led ao arduino. Você pode fazer isso conectando o + 5v ao 5v no arduino. O Din deve ser conectado a A0 no arduino e o GND deve ser conectado ao GND no arduino.

Você também deve conectar a mini fotocélula ao arduino conectando-se ao fio 5v da faixa de led e da mesma fonte conectando-se com um fio ao PIN 6 no arduino. O outro lado da mini fotocélula deve ser conectado ao fio GND da tira de led

Etapa 3: projetando a luva

Desenhar a luva
Desenhar a luva

A luva deve ter o tamanho certo para caber nas faixas de led. Os leds devem ser alinhados para serem mais agradáveis de olhar.

Para este jogo, você deve usar o braço e deseja mover-se livremente. Isso pode ser realizado colocando o arduino na luva. Usei velcro como fecho para prender o arduino na luva. Então, para estabelecer mais estabilidade, você pode colocar uma corda ao redor da luva e ao redor do arduino.

A mini fotocélula foi costurada dentro da luva para ficar no lugar.

Por último, você tem que esconder os fios para que pareça melhor. Isso pode ser feito com tecido que será costurado em cima dos fios.

Etapa 4: Solda

De solda
De solda

Agora você pode tornar os fios de conexão do circuito seguros por meio de solda.

Etapa 5: codificação

Codificação
Codificação
Codificação
Codificação
Codificação
Codificação

// Um programa básico de teste de tira NeoPixel para o dia a dia.

// MELHORES PRÁTICAS DO NEOPIXEL para uma operação mais confiável: // - Adicione 1000 uF CAPACITOR entre as conexões + e - das tiras NeoPixel. // - MINIMIZE O COMPRIMENTO DA FIAÇÃO entre a placa do microcontrolador e o primeiro pixel. // - O DATA-IN da tira NeoPixel deve passar por um RESISTOR de 300-500 OHM. // - EVITE conectar NeoPixels em um CIRCUITO AO VIVO. Se for necessário, SEMPRE // conecte GROUND (-) primeiro, depois + e depois os dados. // - Ao usar um microcontrolador de 3,3 V com uma faixa NeoPixel alimentada por 5 V, // um CONVERSOR DE NÍVEL LÓGICO na linha de dados é FORTEMENTE RECOMENDADO. // (Ignorá-los pode funcionar bem em sua bancada de trabalho, mas pode falhar em campo)

#include #ifdef _AVR_ #include // Obrigatório para berloques Adafruit de 16 MHz #endif

// Qual pino do Arduino está conectado aos NeoPixels? // Em um Trinket ou Gemma, sugerimos alterá-lo para 1: #define LED_PIN 6

// Quantos NeoPixels estão anexados ao Arduino? #define LED_COUNT 60

// Declara nosso objeto de tira NeoPixel: tira Adafruit_NeoPixel (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); uint32_t color = strip. Color (127, 127, 127); // Cor branca, para bool padrão clickedCorrectly = false; // Argumento 1 = Número de pixels na faixa NeoPixel // Argumento 2 = número do pino Arduino (a maioria são válidos) // Argumento 3 = Sinalizadores de tipo de pixel, somados conforme necessário: // NEO_KHZ800 800 KHz bitstream (a maioria dos produtos NeoPixel com WS2812 LEDs) // NEO_KHZ400 400 KHz (clássico 'v1' (não v2) pixels FLORA, drivers WS2811) // NEO_GRB Pixels são conectados para GRB bitstream (a maioria dos produtos NeoPixel) // NEO_RGB Pixels são conectados para bitstream (v1 FLORA pixels, não v2) // NEO_RGBW Pixels são conectados para bitstream RGBW (produtos NeoPixel RGBW)

// função setup () - executa uma vez na inicialização --------------------------------

void setup () {// Estas linhas são especificamente para suportar o Adafruit Trinket 5V 16 MHz. // Qualquer outra placa, você pode remover esta parte (mas não há problema em deixá-la): #if defined (_ AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // FIM do código específico do Trinket.

pinMode (A0, INPUT); strip.begin (); // INITIALIZE NeoPixel strip object (REQUIRED) strip.show (); // DESLIGA todos os pixels o mais rápido possível strip.setBrightness (10); // Defina o BRILHO para cerca de 1/5 (máx = 255)}

// função loop () - executa repetidamente enquanto a placa estiver ligada ---------------

void loop () {clickedCorrectly = theaterChaseOne (cor); if (clicadoCorretamente) {color = strip. Color (0, 255, 0); } else {color = strip. Color (255, 0, 0); }}

// Algumas funções próprias para criar efeitos animados -----------------

// Luzes de perseguição no estilo letreiro de teatro. Passe uma cor (valor de 32 bits, // a la strip. Color (r, g, b) conforme mencionado acima) e um tempo de atraso (em ms) // entre os quadros. bool theaterChaseOne (uint32_t color) {bool correct = false; bool clickedWrong = false; for (int index = 0; index 800) {// valor do sensor de luz if (index <16) {// 2 leds antes do fim, então você pode clicar em color = strip. Color (255, 0, 0); // leds de cor vermelha clickedWrong = true; // clica errado e depois os leds ficam vermelhos} else if (! clickedWrong) {// se não estiver errado color = strip. Color (0, 255, 0); // leds de cor verde correct = true; // clica em correto e depois os leds ficam verdes}} strip.clear (); strip.setPixelColor (17 - índice, cor); // luzes led da primeira linha strip.setPixelColor (18 + index, color); // luzes led da segunda linha strip.setPixelColor (53 - index, color); // luzes led da terceira linha strip.show (); atraso (300); } retornar correto; }

Etapa 6: Mudanças

Alterar
Alterar
Alterar
Alterar
Alterar
Alterar

Eu fiz algumas mudanças. Em primeiro lugar, escondi o arduino para que fosse mais confortável usar a "mão Rythm" e, em segundo lugar, mudei um pouco o código. Mudei o código para que quando você pressionar no momento certo a cor fique verde e os LEDs se movam mais rápido. Ao fazer isso, o LED Swill torna-se 10% mais rápido do que antes. Isso torna o jogo mais interessante

É assim que o código é agora:

// Um programa básico de teste de tira NeoPixel para o dia a dia. // MELHORES PRÁTICAS DO NEOPIXEL para uma operação mais confiável: // - Adicione 1000 uF CAPACITOR entre as conexões + e - das tiras NeoPixel. // - MINIMIZE O COMPRIMENTO DA FIAÇÃO entre a placa do microcontrolador e o primeiro pixel. // - O DATA-IN da tira NeoPixel deve passar por um RESISTOR de 300-500 OHM. // - EVITE conectar NeoPixels em um CIRCUITO AO VIVO. Se for necessário, SEMPRE // conecte GROUND (-) primeiro, depois + e depois os dados. // - Ao usar um microcontrolador de 3,3 V com uma faixa NeoPixel alimentada por 5 V, // um CONVERSOR DE NÍVEL LÓGICO na linha de dados é FORTEMENTE RECOMENDADO. // (Ignorar isso pode funcionar bem em sua bancada, mas pode falhar no campo) #include #ifdef _AVR_ #include // Requerido para Adafruit Trinket de 16 MHz #endif // Qual pino do Arduino está conectado aos NeoPixels? // Em um Trinket ou Gemma, sugerimos alterá-lo para 1: #define LED_PIN 6 // Quantos NeoPixels estão anexados ao Arduino? #define LED_COUNT 60 // Declare nosso objeto de tira NeoPixel: tira Adafruit_NeoPixel (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); uint32_t color = strip. Color (127, 127, 127); // Cor branca, para bool padrão clickedCorrectly = false; índice interno = 0; intervalo interno = 300; resultado int = 0; anteriorMs longo sem sinal = millis (); // Argumento 1 = Número de pixels na faixa NeoPixel // Argumento 2 = número do pino Arduino (a maioria são válidos) // Argumento 3 = Sinalizadores de tipo de pixel, somados conforme necessário: // NEO_KHZ800 800 KHz bitstream (a maioria dos produtos NeoPixel com WS2812 LEDs) // NEO_KHZ400 400 KHz (clássico 'v1' (não v2) pixels FLORA, drivers WS2811) // NEO_GRB Pixels são conectados para GRB bitstream (a maioria dos produtos NeoPixel) // NEO_RGB Pixels são conectados para bitstream (v1 FLORA pixels, não v2) // NEO_RGBW Pixels são conectados para bitstream RGBW (produtos NeoPixel RGBW) // função setup () - executa uma vez na inicialização -------------------- ------------ void setup () {// Estas linhas são especificamente para suportar o Adafruit Trinket 5V 16 MHz. // Qualquer outra placa, você pode remover esta parte (mas não há problema em deixá-la): #if defined (_ AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // FIM do código específico do Trinket. Serial.begin (9600); while (! Serial) {; // aguarde a conexão da porta serial. Necessário apenas para porta USB nativa} pinMode (A0, INPUT); strip.begin (); // INITIALIZE NeoPixel strip object (REQUIRED) strip.show (); // DESLIGA todos os pixels o mais rápido possível strip.setBrightness (10); // Defina BRIGHTNESS para cerca de 1/5 (max = 255)} // função loop () - executa repetidamente enquanto a placa estiver ligada --------------- void loop () {currentMs longo sem sinal = millis (); // Obtendo a hora atual int value = analogRead (A0); // Lendo o sensor de luz atual if (value> 900 && result == 0) {// Se o sensor for pressionado e nenhum resultado foi registrado ainda, acione a captura do resultado if (index = interval) {// Verifique se o atual o loop excede o intervalo previousMs = currentMs; // Define o novo intervalo para a hora atual + índice de intervalo + = 1; // Defina os leds um passo adiante no loop if (index> 17) {// Dispara o fim do loop de manipulação index = 0; if (resultado == 2) {// Em um intervalo de resultado correto = (int) max ((intervalo * 0,95), 50); // Acelera em 10%, até intervalo de 50ms / color = strip. Color (0, 255, 0); // Defina os leds como verdes} else if (result == 1) {// Em um intervalo de resultado incorreto = 300; // Reinicia o intervalo color = strip. Color (255, 0, 0); // Defina os leds para vermelho} else {// Em nenhum resultado capturado color = strip. Color (255, 0, 0); // Defina os leds para vermelho} result = 0; // Reinicia o resultado para o próximo loop} theaterChaseOne (color, index); // Acenda os leds para exibição. }} // Algumas funções próprias para criar efeitos animados ----------------- // Luzes de perseguição no estilo letreiro de teatro. Passe uma cor (valor de 32 bits, // a la strip. Color (r, g, b) conforme mencionado acima) e um tempo de atraso (em ms) // entre os quadros. void theaterChaseOne (uint32_t color, int index) {strip.clear (); strip.setPixelColor (17 - índice, cor); // luzes led da primeira linha strip.setPixelColor (18 + index, color); // luzes led da segunda linha strip.setPixelColor (53 - index, color); // luzes led da terceira linha strip.show (); }

Recomendado: