Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Arduino-лабиринт для шарика: картонная настольная игра с джойстиком

Компоненты и материалы

Идея и дизайн

Классическая игра «Лабиринт» (BRIO, 1946): наклоняем поле, водим шарик к финишу, не уронив в дыры. Здесь поле наклоняют два сервопривода по осям X и Y, управляемые джойстиком. Корпус и лабиринт — из картона, собираются за час.

Чертежи и раскрой (см. раздел CAD)

  1. Основание: квадрат 20×20 см.
  2. Боковые стенки: 2 трапеции 14×16 см. В одной — прямоугольное окно под серво X, в другой — отверстие 3 мм под вал.
  3. Внутренние ребры: 4 планки 14×4 см. В одной — окно под серво Y, в другой — отверстие под вал.
  4. Поле лабиринта: 12×12 см (напечатать шаблон, наклеить на картон, вырезать стены 1.5×12 см и наклеить по контуру).
  5. Рычаги: серво-рога приклеены к планкам с отверстиями под валы.

Схема подключения

Скетч

Библиотека Servo.h. Джойстик считывается через map(0..1023 → 0..12), мёртвая зона ±3. Сервы сглаженно поворачиваются на ±20° от центра (90°). Задержка 100×(7-значение) даёт плавность.

#include 
Servo myServoX, myServoY;
int ServoXPin=8, ServoYPin=9;
int ServoXHome=90, ServoYHome=90;
int ServoXPos=103, ServoYPos=135; // стартовые углы (подстроить под сборку)
int XAxlePin=A0, YAxlePin=A1;
int range=12, center=range/2, threshold=range/4;

void setup() {
  myServoX.attach(ServoXPin); myServoY.attach(ServoYPin);
  myServoX.write(ServoXHome); myServoY.write(ServoYHome);
  Serial.begin(9600);
}

int readAxis(int pin) {
  int reading = analogRead(pin);
  reading = map(reading, 0, 1023, 0, range);
  int distance = reading - center;
  if (abs(distance) < threshold) distance = 0;
  return distance;
}

void loop() {
  int x = readAxis(XAxlePin);
  int y = readAxis(YAxlePin);
  if (x > 0) { ServoXPos++; myServoX.write(ServoXPos); delay(100*(7-x)); }
  if (x < 0) { ServoXPos--; myServoX.write(ServoXPos); delay(100*(7+x)); }
  if (y > 0) { ServoYPos++; myServoY.write(ServoYPos); delay(100*(7-y)); }
  if (y < 0) { ServoYPos--; myServoY.write(ServoYPos); delay(100*(7+y)); }
  // Лимиты ±20°
  ServoXPos = constrain(ServoXPos, ServoXHome-20, ServoXHome+20);
  ServoYPos = constrain(ServoYPos, ServoYHome-20, ServoYHome+20);
  delay(10);
}

Идеи для улучшения

Производственный процесс

  1. TinyML-детектор языка на Arduino Nano 33 BLE Sense с Edge Impulse
  2. Создание игры в реальном времени на Arduino Nano с гироскопом MPU-6050 и OLED-дисплеем
  3. Цифровые кости на Arduino: генератор случайных чисел с LCD-дисплеем и кнопкой
  4. Строим Iron Man на Arduino: компоненты, сенсоры и пошаговый гайд
  5. Find Me: Умный поисковик вещей на Arduino и Bluetooth
  6. DIY-контроллер увлажнителя на Arduino с реле: безопасная работа с высоким напряжением
  7. Измерение расстояния в реальном времени: Ардуино-сонар с визуализацией в Processing
  8. MobBob: Самостоятельная сборка Arduino-робота под управлением Android-смартфона
  9. Сборка аудиореактивной настольной лампы на Arduino Nano
  10. NeoPixel Matrix Pong на Arduino Nano: неоновая игра Pong на матрице 15×10