Mục lục:

Nhịp điệu tay: 6 bước
Nhịp điệu tay: 6 bước

Video: Nhịp điệu tay: 6 bước

Video: Nhịp điệu tay: 6 bước
Video: Vũ điệu 6 bước rửa tay đúng cách vui nhộn - Cùng Lifebuoy phòng chống virus Corona (2019-nCoV) 2024, Tháng mười một
Anonim
Nhịp điệu tay
Nhịp điệu tay

Cyberglove này là về việc thực hiện đúng vào thời điểm thích hợp.

Đèn đi từ cánh tay (khuỷu tay) đến bàn tay của bạn và khi đèn đến tay bạn, bạn phải ấn các ngón tay của mình vào tế bào quang điện mini.

Nếu bạn ấn tay vào tế bào quang điện mini vào đúng thời điểm đèn led sẽ chuyển sang màu xanh lục. Nếu không, đèn led sẽ chuyển sang màu đỏ.

Bước 1: Thu thập tài liệu

  • Một chiếc găng tay
  • Vải để làm cho găng tay dài hơn
  • Dải đèn LED WS2812B
  • Dây điện
  • Arduino
  • Photoell nhỏ

Bước 2: Tạo mạch

Tạo mạch
Tạo mạch
Tạo mạch
Tạo mạch

Đầu tiên kết nối dải led với arduino. Bạn có thể làm điều đó bằng cách kết nối + 5v với 5v trên arduino. Din phải được kết nối với A0 trên arduino và GND phải được kết nối với GND trên arduino.

Bạn cũng phải kết nối tế bào quang điện mini với arduino thông qua kết nối với dây 5v từ dải led và từ cùng một nguồn kết nối bằng dây với PIN 6 trên arduino. Mặt còn lại của tế bào quang điện mini phải được kết nối với dây GND từ dải đèn led

Bước 3: Thiết kế găng tay

Thiết kế găng tay
Thiết kế găng tay

Găng tay phải có kích thước phù hợp để lắp các dải đèn led. Các đèn led phải được căn chỉnh để tạo cảm giác thú vị hơn khi nhìn vào.

Đối với trò chơi này, bạn phải sử dụng cánh tay của mình và bạn muốn có thể di chuyển tự do. Điều này có thể được thực hiện bằng cách đeo arduino vào găng tay. Tôi đã sử dụng khóa dán làm dây buộc để gắn arduino vào găng tay. Sau đó, để thiết lập sự ổn định hơn, bạn có thể đặt một sợi dây xung quanh găng tay và xung quanh arduino.

Tế bào quang điện mini đã được may bên trong găng tay để nó sẽ ở đúng vị trí.

Cuối cùng bạn phải giấu dây đi để nó trông đẹp hơn. Điều đó có thể được thực hiện với vải sẽ được may trên đầu dây.

Bước 4: Hàn

Hàn
Hàn

Bây giờ bạn có thể làm cho các dây kết nối từ mạch điện trở nên an toàn bằng cách hàn.

Bước 5: Mã hóa

Mã hóa
Mã hóa
Mã hóa
Mã hóa
Mã hóa
Mã hóa

// Một chương trình kiểm tra dải NeoPixel cơ bản hàng ngày.

// CÁC PHƯƠNG PHÁP TỐT NHẤT CỦA NEOPIXEL cho hoạt động đáng tin cậy nhất: // - Thêm 1000 UF CAPACITOR giữa các kết nối + và - của dải NeoPixel. // - TỐI THIỂU CHIỀU DÀI DÂY giữa bo mạch vi điều khiển và pixel đầu tiên. // - DỮ LIỆU TRONG của dải NeoPixel phải đi qua KHÁNG SINH 300-500 OHM. // - TRÁNH kết nối NeoPixels trên MẠCH TRỰC TIẾP. Nếu bạn phải, LUÔN LUÔN // kết nối GROUND (-) trước, sau đó +, sau đó đến dữ liệu. // - Khi sử dụng vi điều khiển 3.3V với dải NeoPixel cấp nguồn 5V, // BỘ CHUYỂN ĐỔI CẤP LOGIC trên đường dữ liệu được KHUYẾN CÁO MẠNH MẼ. // (Bỏ qua những điều này có thể hoạt động tốt trên bàn làm việc của bạn nhưng có thể không thành công trong trường)

#include #ifdef _AVR_ #include // Bắt buộc đối với Adafruit Trinket 16 MHz #endif

// Chân nào trên Arduino được kết nối với NeoPixels? // Trên Trinket hoặc Gemma, chúng tôi khuyên bạn nên thay đổi điều này thành 1: #define LED_PIN 6

// Có bao nhiêu NeoPixel được gắn vào Arduino? #define LED_COUNT 60

// Khai báo đối tượng dải NeoPixel của chúng ta: dải Adafruit_NeoPixel (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); uint32_t color = strip. Color (127, 127, 127); // Màu trắng, đối với bool mặc định clickCorrectly = false; // Đối số 1 = Số pixel trong dải NeoPixel // Đối số 2 = Số chân Arduino (hầu hết đều hợp lệ) // Đối số 3 = Cờ loại pixel, thêm lại với nhau nếu cần: // Dòng bit NEO_KHZ800 800 KHz (hầu hết các sản phẩm NeoPixel w / Đèn LED WS2812) // NEO_KHZ400 400 KHz (pixel FLORA cổ điển 'v1' (không phải v2), trình điều khiển WS2811) // Điểm ảnh NEO_GRB được nối dây cho dòng bit GRB (hầu hết các sản phẩm NeoPixel) // Điểm ảnh NEO_RGB được nối dây cho dòng bit RGB (điểm ảnh FLORA v1, không phải v2) // Điểm ảnh NEO_RGBW được kết nối với dòng bit RGBW (sản phẩm NeoPixel RGBW)

// hàm setup () - chạy một lần khi khởi động --------------------------------

void setup () {// Những dòng này đặc biệt để hỗ trợ Adafruit Trinket 5V 16 MHz. // Bất kỳ bo mạch nào khác, bạn có thể loại bỏ phần này (nhưng không có hại gì khi bỏ nó): #if define (_ AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // KẾT THÚC của mã dành riêng cho Trinket.

pinMode (A0, INPUT); dải.begin (); // BAN ĐẦU đối tượng dải NeoPixel (BẮT BUỘC) dải.show (); // TẮT tất cả các pixel ASAP strip.setBrightness (10); // Đặt BRIGHTNESS thành khoảng 1/5 (max = 255)}

// hàm loop () - chạy liên tục miễn là trên bảng ---------------

void loop () {clickCorrectly = TheaterChaseOne (color); if (clickCorrectly) {color = strip. Color (0, 255, 0); } else {color = strip. Color (255, 0, 0); }}

// Một số chức năng của riêng chúng tôi để tạo hiệu ứng động -----------------

// Đèn đuổi theo phong cách rạp hát. Truyền một màu (giá trị 32-bit, // a la strip. Color (r, g, b) như đã đề cập ở trên) và thời gian trễ (tính bằng ms) // giữa các khung hình. bool TheaterChaseOne (uint32_t color) {bool đúng = false; bool clickWrong = false; for (int index = 0; index 800) {// giá trị cảm biến ánh sáng if (index <16) {// 2 led trước khi kết thúc thì bạn có thể nhấp vào color = strip. Color (255, 0, 0); // led màu đỏ được clickWrong = true; // nhấp nhầm thì led chuyển sang màu đỏ} else if (! clickWrong) {// nếu không nhầm color = strip. Color (0, 255, 0); // đèn led màu xanh đúng = true; // bấm đúng thì đèn led chuyển sang màu xanh lục}} strip.clear (); dải.setPixelColor (17 - chỉ số, màu sắc); // đèn led hàng đầu tiên dải.setPixelColor (18 + index, color); // đèn led hàng thứ hai dải.setPixelColor (53 - chỉ mục, màu); // đèn led hàng thứ ba dải.show (); chậm trễ (300); } trả về đúng; }

Bước 6: Thay đổi

Những thay đổi
Những thay đổi
Những thay đổi
Những thay đổi
Những thay đổi
Những thay đổi

Tôi đã thực hiện một số thay đổi. Đầu tiên, tôi đã ẩn arduino để sử dụng "Rythm hand" sẽ thoải mái hơn và thứ hai, tôi đã thay đổi mã một chút. Tôi đã thay đổi mã để khi bạn nhấn vào đúng thời điểm, màu sẽ chuyển sang màu xanh lục và đèn LED di chuyển nhanh hơn. Bằng cách đó, đèn LED Swill trở nên nhanh hơn 10% so với trước đây. Điều này làm cho trò chơi thú vị hơn

Đây là cách mã hiện tại:

// Một chương trình kiểm tra dải NeoPixel cơ bản hàng ngày. // CÁC PHƯƠNG PHÁP TỐT NHẤT CỦA NEOPIXEL cho hoạt động đáng tin cậy nhất: // - Thêm 1000 UF CAPACITOR giữa các kết nối + và - của dải NeoPixel. // - TỐI THIỂU CHIỀU DÀI DÂY giữa bo mạch vi điều khiển và pixel đầu tiên. // - DỮ LIỆU VÀO của dải NeoPixel phải đi qua KHÁNG SINH 300-500 OHM. // - TRÁNH kết nối NeoPixels trên MẠCH TRỰC TIẾP. Nếu bạn phải, LUÔN LUÔN // kết nối GROUND (-) trước, sau đó +, sau đó đến dữ liệu. // - Khi sử dụng vi điều khiển 3.3V với dải NeoPixel cấp nguồn 5V, // BỘ CHUYỂN ĐỔI CẤP LOGIC trên đường dữ liệu được KHUYẾN CÁO MẠNH MẼ. // (Bỏ qua những điều này có thể hoạt động tốt trên bàn làm việc của bạn nhưng có thể không thành công trong trường) #include #ifdef _AVR_ #include // Bắt buộc đối với Adafruit Trinket 16 MHz #endif // Chân nào trên Arduino được kết nối với NeoPixels? // Trên Trinket hoặc Gemma, chúng tôi khuyên bạn nên thay đổi điều này thành 1: #define LED_PIN 6 // Có bao nhiêu NeoPixels được gắn vào Arduino? #define LED_COUNT 60 // Khai báo đối tượng dải NeoPixel của chúng tôi: dải Adafruit_NeoPixel (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); uint32_t color = strip. Color (127, 127, 127); // Màu trắng, đối với bool mặc định clickCorrectly = false; int index = 0; int khoảng = 300; int kết quả = 0; unsigned long beforeMs = millis (); // Đối số 1 = Số pixel trong dải NeoPixel // Đối số 2 = Số chân Arduino (hầu hết đều hợp lệ) // Đối số 3 = Cờ loại pixel, thêm lại với nhau nếu cần: // Dòng bit NEO_KHZ800 800 KHz (hầu hết các sản phẩm NeoPixel w / Đèn LED WS2812) // NEO_KHZ400 400 KHz (pixel FLORA cổ điển 'v1' (không phải v2), trình điều khiển WS2811) // Điểm ảnh NEO_GRB được nối dây cho dòng bit GRB (hầu hết các sản phẩm NeoPixel) // Điểm ảnh NEO_RGB được nối dây cho dòng bit RGB (điểm ảnh FLORA v1, không phải v2) // Điểm ảnh NEO_RGBW được kết nối với dòng bit RGBW (sản phẩm NeoPixel RGBW) // chức năng setup () - chạy một lần khi khởi động -------------------- ------------ void setup () {// Những dòng này đặc biệt để hỗ trợ Adafruit Trinket 5V 16 MHz. // Bất kỳ bo mạch nào khác, bạn có thể loại bỏ phần này (nhưng không có hại gì khi bỏ nó): #if define (_ AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // KẾT THÚC của mã dành riêng cho Trinket. Serial.begin (9600); while (! nối tiếp) {; // đợi cổng nối tiếp kết nối. Chỉ cần cho cổng USB gốc} pinMode (A0, INPUT); dải.begin (); // BAN ĐẦU đối tượng dải NeoPixel (BẮT BUỘC) dải.show (); // TẮT tất cả các pixel ASAP strip.setBrightness (10); // Đặt BRIGHTNESS thành khoảng 1/5 (max = 255)} // hàm loop () - chạy nhiều lần miễn là trên bảng --------------- void loop () {unsigned long currentMs = millis (); // Lấy thời gian hiện tại int value = analogRead (A0); // Đọc cảm biến ánh sáng hiện tại if (value> 900 && result == 0) {// Nếu cảm biến được nhấn và chưa ghi kết quả nào, hãy kích hoạt chụp kết quả if (index = khoảng) {// Kiểm tra xem hiện tại vòng lặp vượt quá khoảng trước đóMs = currentMs; // Đặt khoảng thời gian mới thành thời gian hiện tại + chỉ số khoảng thời gian + = 1; // Đặt các led thêm một bước trong vòng lặp if (index> 17) {// Kích hoạt kết thúc xử lý vòng lặp index = 0; if (result == 2) {// Trên một khoảng kết quả đúng = (int) max ((khoảng * 0.95), 50); // Tăng tốc 10%, giảm xuống khoảng 50ms / color = strip. Color (0, 255, 0); // Đặt đèn led thành màu xanh lục} else if (result == 1) {// Trên khoảng kết quả không chính xác = 300; // Đặt lại khoảng màu = dải. Color (255, 0, 0); // Đặt đèn led thành màu đỏ} else {// Không bắt được kết quả nào color = strip. Color (255, 0, 0); // Đặt các led thành red} result = 0; // Đặt lại kết quả cho vòng lặp tiếp theo} TheaterChaseOne (color, index); // Bật đèn led hiển thị. }} // Một số chức năng của riêng chúng tôi để tạo hiệu ứng động ----------------- // Đèn đuổi theo phong cách rạp hát. Truyền một màu (giá trị 32-bit, // a la strip. Color (r, g, b) như đã đề cập ở trên) và thời gian trễ (tính bằng ms) // giữa các khung hình. void TheaterChaseOne (uint32_t color, int index) {strip.clear (); dải.setPixelColor (17 - chỉ số, màu sắc); // đèn led hàng đầu tiên dải.setPixelColor (18 + index, color); // đèn led hàng thứ hai dải.setPixelColor (53 - chỉ mục, màu); // đèn led hàng thứ ba dải.show (); }

Đề xuất: