สารบัญ:

จังหวะมือ: 6 ขั้นตอน
จังหวะมือ: 6 ขั้นตอน

วีดีโอ: จังหวะมือ: 6 ขั้นตอน

วีดีโอ: จังหวะมือ: 6 ขั้นตอน
วีดีโอ: Brain Break ตอน 1 : 16 จังหวะ ภาษาไทย ป.1-ป.6 2024, กรกฎาคม
Anonim
จังหวะมือ
จังหวะมือ

ถุงมือไซเบอร์นี้เกี่ยวกับการเคลื่อนไหวที่ถูกต้องในเวลาที่เหมาะสม

ไฟจะเคลื่อนจากแขน (ข้อศอก) ไปที่มือ และเมื่อไฟมาถึงมือ คุณต้องกดนิ้วลงบนโฟโตเซลล์ขนาดเล็ก

หากคุณกดมือบนโฟโตเซลล์ขนาดเล็กในเวลาที่เหมาะสม ไฟ LED จะเปลี่ยนเป็นสีเขียว ถ้าไม่เช่นนั้น ไฟ LED จะเปลี่ยนเป็นสีแดง

ขั้นตอนที่ 1: รวบรวมวัสดุ

  • ถุงมือ
  • ผ้าทำให้ถุงมือยาวขึ้น
  • WS2812B แถบ LED
  • สายไฟ
  • Arduino
  • มินิโฟโต้เซล

ขั้นตอนที่ 2: การสร้างวงจร

ทำวงจร
ทำวงจร
ทำวงจร
ทำวงจร

ขั้นแรกให้เชื่อมต่อแถบ LED กับ Arduino คุณสามารถทำได้โดยเชื่อมต่อ +5v กับ 5v บน Arduino Din ต้องเชื่อมต่อกับ A0 บน Arduino และ GND ต้องเชื่อมต่อกับ GND บน Arduino

คุณต้องเชื่อมต่อโฟโตเซลล์ขนาดเล็กกับ Arduino ผ่านการเชื่อมต่อกับสาย 5v จากแถบไฟ LED และจากแหล่งเดียวกันที่เชื่อมต่อกับสายไปยัง PIN 6 บน Arduino อีกด้านหนึ่งของโฟโตเซลล์ขนาดเล็กจะต้องเชื่อมต่อกับสาย GND จากแถบนำ

ขั้นตอนที่ 3: การออกแบบถุงมือ

การออกแบบถุงมือ
การออกแบบถุงมือ

ถุงมือต้องมีขนาดที่เหมาะสมเพื่อให้พอดีกับแถบไฟ LED ต้องจัดแนวไฟ LED เพื่อให้ดูสนุกยิ่งขึ้น

สำหรับเกมนี้ คุณต้องใช้แขนของคุณและคุณต้องการจะเคลื่อนไหวได้อย่างอิสระ สิ่งนี้สามารถรับรู้ได้โดยการวาง Arduino ไว้บนถุงมือ ฉันใช้เวลโครเป็นตัวยึดเพื่อติด Arduino กับถุงมือ จากนั้นเพื่อให้มีเสถียรภาพมากขึ้น คุณสามารถพันเชือกไว้รอบๆ ถุงมือและรอบๆ Arduino

โฟโตเซลล์ขนาดเล็กถูกเย็บเข้าในถุงมือเพื่อให้เข้าที่

สุดท้ายคุณต้องซ่อนสายไฟเพื่อให้ดูดีขึ้น ที่สามารถทำได้ด้วยผ้าที่จะเย็บบนเส้นลวด

ขั้นตอนที่ 4: การบัดกรี

บัดกรี
บัดกรี

ตอนนี้คุณสามารถทำให้สายเชื่อมต่อจากวงจรปลอดภัยโดยการบัดกรี

ขั้นตอนที่ 5: การเข้ารหัส

การเข้ารหัส
การเข้ารหัส
การเข้ารหัส
การเข้ารหัส
การเข้ารหัส
การเข้ารหัส

// โปรแกรมทดสอบแถบ NeoPixel ขั้นพื้นฐานในชีวิตประจำวัน

// แนวทางปฏิบัติที่ดีที่สุดของ NEOPIXEL สำหรับการทำงานที่น่าเชื่อถือที่สุด: // - เพิ่มตัวเก็บประจุ 1000 uF ระหว่างการเชื่อมต่อ + และ - ของแถบ NeoPixel // - ลดความยาวสายไฟระหว่างบอร์ดไมโครคอนโทรลเลอร์กับพิกเซลแรก // - DATA-IN ของแถบ NeoPixel ควรผ่านตัวต้านทาน 300-500 OHM // - หลีกเลี่ยงการเชื่อมต่อ NeoPixels บนวงจรสด หากคุณต้องการ เสมอ // เชื่อมต่อ GROUND (-) ก่อน ตามด้วย + ตามด้วย data // - เมื่อใช้ไมโครคอนโทรลเลอร์ 3.3V กับแถบ NeoPixel ที่ใช้พลังงาน 5V // ขอแนะนำให้ใช้ตัวแปลงระดับลอจิกบนสายข้อมูล // (การข้ามสิ่งเหล่านี้อาจใช้ได้ดีบนโต๊ะทำงานของคุณ แต่อาจล้มเหลวในฟิลด์)

#include #ifdef _AVR_ #include // จำเป็นสำหรับ 16 MHz Adafruit Trinket #endif

// พินใดบน Arduino ที่เชื่อมต่อกับ NeoPixels // สำหรับ Trinket หรือ Gemma เราแนะนำให้เปลี่ยนเป็น 1: #define LED_PIN 6

// NeoPixels ต่อกับ Arduino จำนวนเท่าใด #define LED_COUNT 60

// ประกาศวัตถุแถบ NeoPixel ของเรา: แถบ Adafruit_NeoPixel (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); uint32_t สี = แถบสี (127, 127, 127); // สีขาว สำหรับบูลเริ่มต้น clickedCorrectly = false; // อาร์กิวเมนต์ 1 = จำนวนพิกเซลในแถบ NeoPixel // อาร์กิวเมนต์ 2 = หมายเลขพิน Arduino (ส่วนใหญ่ถูกต้อง) // อาร์กิวเมนต์ 3 = แฟล็กประเภทพิกเซล รวมกันตามต้องการ: // NEO_KHZ800 800 KHz bitstream (ผลิตภัณฑ์ NeoPixel ส่วนใหญ่ที่มี WS2812 LEDs) // NEO_KHZ400 400 KHz (คลาสสิก 'v1' (ไม่ใช่ v2) พิกเซล FLORA, ไดรเวอร์ WS2811) // NEO_GRB Pixels ต่อสายสำหรับ GRB bitstream (ผลิตภัณฑ์ NeoPixel ส่วนใหญ่) // NEO_RGB Pixels มีสายสำหรับ RGB bitstream (พิกเซล FLORA v1 ไม่ใช่ v2) // NEO_RGBW Pixels ต่อสายสำหรับ RGBW bitstream (ผลิตภัณฑ์ NeoPixel RGBW)

// ฟังก์ชัน setup() -- ทำงานหนึ่งครั้งเมื่อเริ่มต้น --------------------------------

การตั้งค่าเป็นโมฆะ () { // บรรทัดเหล่านี้รองรับ Adafruit Trinket 5V 16 MHz โดยเฉพาะ // บอร์ดอื่นๆ คุณสามารถลบส่วนนี้ออกได้ (แต่ไม่เป็นอันตรายหากปล่อยไว้): #ifdefined(_AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set(clock_div_1); #endif // END ของรหัสเฉพาะ Trinket

โหมดพิน (A0, INPUT); แถบ.begin(); // เริ่มต้นวัตถุแถบ NeoPixel (จำเป็น) strip.show(); // ปิดพิกเซลทั้งหมด ASAP strip.setBrightness(10); // ตั้งค่าความสว่างเป็นประมาณ 1/5 (สูงสุด = 255) }

// ฟังก์ชันลูป () - ทำงานซ้ำ ๆ ตราบใดที่บอร์ดเปิดอยู่ ---------------

วงเป็นโมฆะ () { clickedCorrectly = โรงละคร ChaseOne (สี); ถ้า (คลิกถูกต้อง) { สี = แถบสี (0, 255, 0); } อื่น ๆ { สี = แถบสี (255, 0, 0); } }

// ฟังก์ชั่นบางอย่างของเราเองสำหรับการสร้างเอฟเฟกต์ภาพเคลื่อนไหว -----------------

// ไฟไล่ตามสไตล์โรงละคร ส่งผ่านสี (ค่า 32 บิต // a la strip. Color(r, g, b) ตามที่กล่าวไว้ข้างต้น) และเวลาหน่วง (เป็น ms) // ระหว่างเฟรม bool theaterChaseOne (สี uint32_t) { บูลถูกต้อง = เท็จ; บูล clickedWrong = false; สำหรับ (ดัชนี int = 0; ดัชนี 800) { //value light sensor if (index < 16) {//2 leds before end จากนั้นคุณสามารถคลิก color = strip. Color (255, 0, 0); // ไฟ LED สีแดง clickedWrong = true; // คลิกผิดแล้วไฟ LED จะเปลี่ยนเป็นสีแดง } อย่างอื่นถ้า (!clickedWrong) {// ถ้าไม่ผิด color = strip. Color (0, 255, 0); //ไฟ LED สีเขียวถูกต้อง = true; // คลิกถูกต้องแล้วไฟ LED จะเปลี่ยนเป็นสีเขียว } } strip.clear(); strip.setPixelColor(17 - ดัชนี, สี); //แถวแรกไฟ led strip.setPixelColor(18 + ดัชนี, สี); //แถวที่สองไฟ led strip.setPixelColor(53 - ดัชนี, สี); //แถวที่สามไฟ led strip.show(); ล่าช้า (300); } กลับถูกต้อง; }

ขั้นตอนที่ 6: การเปลี่ยนแปลง

การเปลี่ยนแปลง
การเปลี่ยนแปลง
การเปลี่ยนแปลง
การเปลี่ยนแปลง
การเปลี่ยนแปลง
การเปลี่ยนแปลง

ฉันทำการเปลี่ยนแปลงบางอย่าง ประการแรกฉันซ่อน Arduino ดังนั้นมันจึงสะดวกกว่าที่จะใช้ "มือจังหวะ" และประการที่สองฉันเปลี่ยนรหัสเล็กน้อย ฉันเปลี่ยนรหัสเพื่อให้เมื่อคุณกดในเวลาที่เหมาะสม สีจะกลายเป็นสีเขียวและไฟ LED เคลื่อนที่เร็วขึ้น ด้วยการทำเช่นนั้น LED Swill จะเร็วขึ้น 10% จากเดิม ทำให้เกมนี้น่าสนใจยิ่งขึ้น

นี่คือลักษณะของรหัสในขณะนี้:

// โปรแกรมทดสอบแถบ NeoPixel ขั้นพื้นฐานในชีวิตประจำวัน // แนวทางปฏิบัติที่ดีที่สุดของ NEOPIXEL สำหรับการทำงานที่น่าเชื่อถือที่สุด: // - เพิ่มตัวเก็บประจุ 1000 uF ระหว่างการเชื่อมต่อ + และ - ของแถบ NeoPixel // - ลดความยาวสายไฟระหว่างบอร์ดไมโครคอนโทรลเลอร์กับพิกเซลแรก // - DATA-IN ของแถบ NeoPixel ควรผ่านตัวต้านทาน 300-500 OHM // - หลีกเลี่ยงการเชื่อมต่อ NeoPixels บนวงจรสด หากคุณต้องการ เสมอ // เชื่อมต่อ GROUND (-) ก่อน ตามด้วย + ตามด้วย data // - เมื่อใช้ไมโครคอนโทรลเลอร์ 3.3V กับแถบ NeoPixel ที่ใช้พลังงาน 5V // ขอแนะนำให้ใช้ตัวแปลงระดับลอจิกบนสายข้อมูล // (การข้ามสิ่งเหล่านี้อาจใช้ได้บนโต๊ะทำงานของคุณ แต่อาจล้มเหลวในฟิลด์) #include #ifdef _AVR_ #include // จำเป็นสำหรับ 16 MHz Adafruit Trinket #endif // ขาใดบน Arduino ที่เชื่อมต่อกับ NeoPixels // บน Trinket หรือ Gemma เราแนะนำให้เปลี่ยนเป็น 1: #define LED_PIN 6 // NeoPixels ต่อกับ Arduino จำนวนเท่าใด #define LED_COUNT 60 // ประกาศวัตถุแถบ NeoPixel ของเรา: แถบ Adafruit_NeoPixel (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); uint32_t สี = แถบสี (127, 127, 127); // สีขาว สำหรับบูลเริ่มต้น clickedCorrectly = false; ดัชนี int = 0; ช่วงเวลา int = 300; ผลลัพธ์ int = 0; นานก่อนหน้าที่ไม่ได้ลงนาม = millis(); // อาร์กิวเมนต์ 1 = จำนวนพิกเซลในแถบ NeoPixel // อาร์กิวเมนต์ 2 = หมายเลขพิน Arduino (ส่วนใหญ่ถูกต้อง) // อาร์กิวเมนต์ 3 = แฟล็กประเภทพิกเซล รวมกันตามต้องการ: // NEO_KHZ800 800 KHz bitstream (ผลิตภัณฑ์ NeoPixel ส่วนใหญ่ที่มี WS2812 LEDs) // NEO_KHZ400 400 KHz (คลาสสิก 'v1' (ไม่ใช่ v2) พิกเซล FLORA, ไดรเวอร์ WS2811) // NEO_GRB Pixels ต่อสายสำหรับ GRB bitstream (ผลิตภัณฑ์ NeoPixel ส่วนใหญ่) // NEO_RGB Pixels ต่อสายสำหรับ RGB bitstream (พิกเซล FLORA v1 ไม่ใช่ v2) // NEO_RGBW Pixels ถูกต่อสายสำหรับ RGBW bitstream (ผลิตภัณฑ์ NeoPixel RGBW) // ฟังก์ชัน setup() - ทำงานครั้งเดียวเมื่อเริ่มต้น -------------------- ------------ void setup() { // บรรทัดเหล่านี้รองรับ Adafruit Trinket 5V 16 MHz โดยเฉพาะ // บอร์ดอื่นๆ คุณสามารถลบส่วนนี้ออกได้ (แต่ไม่เป็นอันตรายหากปล่อยไว้): #ifdefined(_AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set(clock_div_1); #endif // END ของรหัสเฉพาะ Trinket Serial.begin(9600); ในขณะที่ (!Serial) {; // รอให้พอร์ตอนุกรมเชื่อมต่อ จำเป็นสำหรับพอร์ต USB ดั้งเดิมเท่านั้น } pinMode(A0, INPUT); แถบ.begin(); // เริ่มต้นวัตถุแถบ NeoPixel (จำเป็น) strip.show(); // ปิดพิกเซลทั้งหมด ASAP strip.setBrightness(10); // ตั้งค่าความสว่างเป็นประมาณ 1/5 (สูงสุด = 255) } // ฟังก์ชันลูป () - ทำงานซ้ำ ๆ ตราบใดที่บอร์ดเปิดอยู่ --------------- void loop() { currentMs ยาวที่ไม่ได้ลงนาม = มิลลิวินาที (); // รับค่า int เวลาปัจจุบัน = analogRead (A0); // การอ่านเซ็นเซอร์วัดแสงปัจจุบันถ้า (ค่า > 900 && ผล == 0) {// หากเซ็นเซอร์ถูกกดและยังไม่มีการบันทึกผลลัพธ์ ทริกเกอร์จะจับผลลัพธ์หาก (ดัชนี = ช่วงเวลา) { // ตรวจสอบว่ากระแสไฟ วนเกินช่วงเวลา PreviousMs = currentMs; // ตั้งค่าช่วงเวลาใหม่เป็นเวลาปัจจุบัน + ดัชนีช่วงเวลา += 1; // ตั้งค่าไฟ LED หนึ่งขั้นในลูปหาก (ดัชนี > 17) (// ทริกเกอร์จุดสิ้นสุดของดัชนีการจัดการลูป = 0; ถ้า (ผลลัพธ์ == 2) { // ในช่วงเวลาผลลัพธ์ที่ถูกต้อง = (int) สูงสุด ((ช่วง * 0.95), 50); // เร่งความเร็วขึ้น 10% ลดลงเป็นช่วง 50ms/ color = strip. Color(0, 255, 0); // ตั้งค่าไฟ LED เป็นสีเขียว } else if (ผลลัพธ์ == 1) { // ในช่วงเวลาผลลัพธ์ที่ไม่ถูกต้อง = 300; // รีเซ็ตช่วงสี = strip. Color(255, 0, 0); // ตั้งค่าไฟ LED เป็นสีแดง } อื่น ๆ { // ไม่มีผลลัพธ์ที่จับ color = strip. Color (255, 0, 0); // ตั้งค่าไฟ LED เป็นสีแดง } ผลลัพธ์ = 0; // รีเซ็ตผลลัพธ์สำหรับลูปถัดไป } theatreChaseOne(สี, ดัชนี); // เปิดไฟ LED เพื่อแสดงผล } } // ฟังก์ชั่นบางอย่างของเราเองสำหรับการสร้างเอฟเฟกต์ภาพเคลื่อนไหว ----------------- // ไฟไล่ตามสไตล์โรงละคร ส่งผ่านสี (ค่า 32 บิต // a la strip. Color(r, g, b) ตามที่กล่าวไว้ข้างต้น) และเวลาหน่วง (เป็น ms) // ระหว่างเฟรม เป็นโมฆะ theaterChaseOne (สี uint32_t, ดัชนี int) { strip.clear (); strip.setPixelColor(17 - ดัชนี, สี); //แถวแรกไฟ led strip.setPixelColor(18 + ดัชนี, สี); //แถวที่สองไฟ led strip.setPixelColor(53 - ดัชนี, สี); //แถวที่สามไฟ led strip.show(); }

แนะนำ: