Máy Arcade In Được (Printable Arcade machine)

Mô hình Printable Arcade machine dạng Plinko: thả puck từ trên xuống, nảy qua các chốt và rơi vào ô tính điểm. Kết hợp cơ khí đơn giản với Arduino và linh kiện điện tử, kèm hướng dẫn lắp ráp từng bước.

👁️
12
Lượt Xem
❤️
1
Lượt Thích
📥
0
Lượt Tải
Cập Nhật Jan 03, 2026
Chi tiết
Tải xuống
Bình Luận
Khoe bản in
Remix

Mô tả

Nội dung được dịch bằng AI
  • Giới thiệu

Máy arcade Plinko là một trò chơi vui, mang tính tương tác cao: người chơi thả một puck từ phía trên và xem nó nảy qua một bãi chốt (pegs) trước khi rơi vào ô tính điểm. Được thiết kế theo kiểu trải nghiệm arcade “tự tay làm”, máy này kết hợp cơ cấu cơ khí đơn giản với các linh kiện điện tử để theo dõi lượt chơi và tăng mức độ tương tác. Mô hình được lắp từ các bộ phận đã chia rõ ràng và có hướng dẫn từng bước cho quá trình lắp ráp, phù hợp để học tập, trình diễn hoặc giải trí.

  • Linh kiện điện
  1. Arduino R3 - hàng chính hãng hoặc bản sao (1 cái)

  2. 28BYJ-48 5V - motor kèm mạch điều khiển (1 cái)

  3. Digital Distance Sensor - (1 cái)

  4. LED diode 3mm - màu bất kỳ (3 cái)

  5. Buzzer - tuỳ chọn (1 cái)

  6. Jumper wires - dài 30cm hoặc hơn (M-M, M-F)

  • Phần tuỳ chọn
  1. Plexiglas - dày 3mm
  • Code cho Arduino

    #include "pitches.h"
    
    int melody[] = {
      NOTE_B4, NOTE_B5, NOTE_FS5, NOTE_DS5,
      NOTE_B5, NOTE_FS5, NOTE_DS5, NOTE_C5,
      NOTE_C6, NOTE_G6, NOTE_E6, NOTE_C6, NOTE_G6, NOTE_E6,
    };
    
    int durations[] = {
      16, 16, 16, 16,
      32, 16, 8, 16,
      16, 16, 16, 32, 16, 8,
    };
    
    const int in1 =  3;
    const int in2 =  0;
    const int in3 = 1;
    const int in4 = 2;
    
    int LED1 = 13;
    int LED2 = 11;
    int LED3 = 12;
    int BUZZER = 10;
    const int sensor = 4;
    bool sensorstatement = false;
    int counter = 0;
    
    int speed = 1;
    //
    
    void setup() {
      // put your setup code here, to run once:
      pinMode(in1, OUTPUT);
      pinMode(in2, OUTPUT);
      pinMode(in3, OUTPUT);
      pinMode(in4, OUTPUT);
    
      pinMode(LED1, OUTPUT);
      pinMode(LED2, OUTPUT);
      pinMode(LED3, OUTPUT);
      pinMode(BUZZER, OUTPUT);
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
         if (digitalRead(sensor) == false)
         {
          counter = counter + 1;
          delay(1000);
         }
         switch (counter){
          case 0:
            digitalWrite(LED1,LOW);
            digitalWrite(LED2,LOW);
            digitalWrite(LED3,LOW);
            break;
          case 1:
            digitalWrite(LED1,HIGH);
            digitalWrite(LED2,LOW);
            digitalWrite(LED3,LOW);
            break;
          case 2:
            digitalWrite(LED1,HIGH);
            digitalWrite(LED2,HIGH);
            digitalWrite(LED3,LOW);
            break;
          case 3:
            digitalWrite(LED1,HIGH);
            digitalWrite(LED2,HIGH);
            digitalWrite(LED3,HIGH);
            for(int i=0;i<512;i++){
            Rotationinthedirection();
            }
            int size = sizeof(durations) / sizeof(int);
               for (int note = 0; note < size; note++) {
                 //to calculate the note duration, take one second divided by the note type.
                 //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
                 int duration = 1000 / durations[note];
                 tone(BUZZER, melody[note], duration);
    
                 //to distinguish the notes, set a minimum time between them.
                 //the note's duration + 30% seems to work well:
                 int pauseBetweenNotes = duration * 1.30;
                    delay(pauseBetweenNotes);
    
              //stop the tone playing:
             noTone(BUZZER);
            }
            counter = 0;
            break;
    
        }
    }
    
    void Rotationinthedirection() {
      step1();
      step2();
      step3();
      step4();
      step5();
      step6();
      step7();
      step8();
    }
    void RotationAgainstDirection() {
      step8();
      step7();
      step6();
      step5();
      step4();
      step3();
      step2();
      step1();
    }
    // každý krok obsahuje výrobcem dané pořadí
    // pro správné spínání motoru a následnou
    // pauzu, kterou určujeme rychlost otáčení
    void step1(){
      digitalWrite(in1, HIGH);
      digitalWrite(in2, LOW);
      digitalWrite(in3, LOW);
      digitalWrite(in4, LOW);
      delay(speed);
    }
    void step2(){
      digitalWrite(in1, HIGH);
      digitalWrite(in2, HIGH);
      digitalWrite(in3, LOW);
      digitalWrite(in4, LOW);
      delay(speed);
    }
    void step3(){
      digitalWrite(in1, LOW);
      digitalWrite(in2, HIGH);
      digitalWrite(in3, LOW);
      digitalWrite(in4, LOW);
      delay(speed);
    }
    void step4(){
      digitalWrite(in1, LOW);
      digitalWrite(in2, HIGH);
      digitalWrite(in3, HIGH);
      digitalWrite(in4, LOW);
      delay(speed);
    }
    void step5(){
      digitalWrite(in1, LOW);
      digitalWrite(in2, LOW);
      digitalWrite(in3, HIGH);
      digitalWrite(in4, LOW);
      delay(speed);
    }
    void step6(){
      digitalWrite(in1, LOW);
      digitalWrite(in2, LOW);
      digitalWrite(in3, HIGH);
      digitalWrite(in4, HIGH);
      delay(speed);
    }
    void step7(){
      digitalWrite(in1, LOW);
      digitalWrite(in2, LOW);
      digitalWrite(in3, LOW);
      digitalWrite(in4, HIGH);
      delay(speed);
    }
    void step8(){
      digitalWrite(in1, HIGH);
      digitalWrite(in2, LOW);
      digitalWrite(in3, LOW);
      digitalWrite(in4, HIGH);
      delay(speed);
    }

Giấy phép

Tác phẩm này được cấp phép theo

Creative Commons — Attribution

CC-BY

Yêu cầu ghi công
Remix & phái sinh Được phép
Sử dụng thương mại Được phép

File mô hình

TẤT CẢ FILE MÔ HÌNH (20 Tập tin)
Đang tải files, vui lòng chờ...
Vui lòng đăng nhập để bình luận.

Chưa có bình luận nào. Hãy là người đầu tiên!

Vui lòng đăng nhập để khoe bản in của bạn.

Chưa có bản in nào được khoe. Hãy là người đầu tiên!

Remix (0)