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

Встряхивание кости Arduino

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

Arduino Nano R3
× 1
3 мм 8x8 точечная матрица MAX7219
× 1
Модуль переключателя наклона и цифровой интерфейс
× 1
Ползунковый переключатель
× 1
MT3608 DC 2A, повышающий модуль питания с 2–24 до 5 В / Повышающий преобразователь 9 В / 12 В / 28 В
× 1

Необходимые инструменты и машины

Паяльник (универсальный)
Пистолет для горячего клея (общий)

Приложения и онлайн-сервисы

IDE Arduino
Autodesk Fusion 360

Об этом проекте

Около года назад мой сын и Я построил электронные игральные кости с Arduino и несколько светодиодов. Это по-прежнему идеальный проект для новичков. В этом году мы многому научились, так что пришло время обновить информацию.

Игра в кости по-прежнему остается отличным стартовым проектом. Функция понятна всем, и в ней легко разбираться в различных областях:микроконтроллер, простая электроника и кодирование.

Версия 2.0

Игра в кости также прекрасна, чтобы сделать еще один шаг:связать другие области.

Сегодня есть готовые компоненты практически для всего. Лучше всего это видно при поиске стартового набора для Arduino или Raspberry Pi. Такие компоненты, как светодиоды, кнопки и датчики любого типа, встроены в печатную плату и, таким образом, могут быть подключены и использованы с помощью всего нескольких проводов к GPIO.

Простые, но достаточные 3D-принтеры доступны на ebay менее чем за 140 евро. С его помощью можно создавать практически все варианты кронштейнов, креплений или кожухов.

Есть еще ряд возможностей для развития собственных проектов. Примером этого являются наши новые игральные кости 2.0.

Датчики наклона

Совершенно иначе реализуем игральные кости. Внутри Arduino Nano работает из-за недостатка места. Есть еще выключатель, но нет кнопки. Нарезание кубиков осуществляется путем встряхивания всего куба.

Для этого используются датчики наклона или датчики вибрации. Они работают как кнопка. В стеклянной трубке движется шарик. Если он попадает в контакты подключения, цепь замыкается. Этот контакт, иногда очень короткий, используется для сигнала.

Движение металлического шара хорошо слышно, если встряхнуть датчик.

Обычно для датчика наклона решающее значение имеет монтажное положение. Предполагается, что сигнал будет подан в определенном угловом положении. В нашем случае это происходит путем встряхивания корпуса. Здесь ситуация не так важна, потому что при встряхивании в любую сторону срабатывает сигнал. На всякий случай мы используем в проекте два датчика, которые расположены со смещением на 90 ° друг к другу. Таким образом, мы всегда получаем надежный сигнал встряхивания.

Прерывания

Чтобы можно было распознать встряхивание, входные контакты датчиков наклона должны быть запрошены на эскизе. Однако, в зависимости от того, когда это произойдет вовремя и что еще должен делать эскиз, всегда есть вероятность, что одно или несколько событий останутся незамеченными.

Лучшее решение - использовать аппаратные прерывания. Это определяется функцией attachInterrupt. В качестве параметра указывается подпрограмма, которая должна вызываться по сигналу.

Arduino предоставляет два аппаратных прерывания:контакты D2 и D3.

Дисплей

Конечно, отображение изображения игральных костей снова может быть выполнено с помощью 7 отдельных светодиодов. Но и здесь интереснее использовать готовый компонент.

Для этого проекта мы выбрали светодиодную матрицу 8x8 с драйвером MAX7219. Он занимает очень мало места, стоит совсем немного денег и его легко кодировать.

В зависимости от того, где вы его покупаете, вам придется спаять и собрать отдельные части. Обычно это не проблема. Единственная ошибка, которую можно сделать - вставить светодиодную матрицу скрученной в гнезда.

Это показано на картинке выше. Здесь достаточно аккуратно вытащить матрицу из гнезд и повернуть на 180 °.

Немного физики

В результате светодиодная матрица не должна просто отображать изображение игральной кости. Он должен предложить некоторые шоу-эффекты. Шесть глаз-кубиков движутся по матрице:они отскакивают от краев и медленно теряют скорость.

Через два датчика наклона мы можем видеть, сколько было сделано встряхивания. Эту информацию мы даем кубикам глазами как «скорость» их движения.

Мы также используем аналогичный эффект при отображении результата игры в кости. Глаза перекатываются из случайного положения в правильное положение на изображении куба.

Источник питания

Во-первых, мы установили две кнопочные ячейки 3V CR2032 для экономии места. Поначалу это тоже выглядело неплохо. Ардуино и светодиодная матрица подыграли и все заработало. Однако через несколько минут работы кнопки-элементы выходят из строя.

Если вы выключаете Arduino после каждой игры в кости, вы можете использовать его таким образом. Это не идеально, поэтому лучше установить две батарейки ААА. Однако они доставляют только 3 В. Так что нам все еще нужен повышающий преобразователь, который поднимает напряжение до 5 В. Подключение по-прежнему осуществляется через вывод VIN Arduino.

Дизайн жилья

Оптимальный вариант подходящего жилья - это собственная разработка и изготовление с помощью 3D-печати. Есть много приложений для строительства. Для этого проекта мы использовали Autodesk Fusion 360. Он имеет отличные функции, а 3D-печать хорошо интегрирована с программным обеспечением Print Studio. Если вас интересует Autodesk Fusion 360, вы найдете некоторые предложения в статье блога "Параметрические корпуса" (только на немецком языке).

Наш корпус состоит из 3-х частей:

  • Верхний регистр
  • Нижний корпус с держателем батарейки для элементов AAA
  • Покрытие из оргстекла (не обязательно)

Светодиодная матрица выглядит еще лучше, если перед ней крышка из плексигласа молочного цвета. Это делает невозможным распознать выключенные светодиоды и изображение становится более четким.

Эскиз

Для управления светодиодной матрицей требуется библиотека LedControl. Если он еще не установлен, его можно загрузить с arduino.cc https://playground.arduino.cc/Main/LedControl.

Затем мы делаем другие определения переменных. Сначала мы определяем, как на матрице отображаются глазки игральных костей. Глазок состоит из 4-х светодиодных точек. В массиве левый верхний угол указан как координата X / Y (-1 означает за пределами дисплея).

  int DicePic [8] [6] [2] ={… {// 1:{4,4}, // 1. Пункт {-1, -1}, // 2. Пункт {-1, -1}, // 3. Пункт {-1, -1}, // 4. Пункт {-1, -1}, // 5. Пункт {-1, -1} // 6. Пункт}, {// 2:{2,2}, // 1. Пункт {6,6}, // 2. Пункт {-1, -1}, // 3. Пункт {-1, -1}, // 4. Пункт {-1, -1}, // 5. Пункт {-1, -1} // 6. Punkt},…  

Конечно, здесь возможно все. Дайте волю своему воображению. Это не всегда должно быть типичное изображение глаза.

Другие примечания вы найдете прямо в коде.

Сборка

Ставим нашу Ардуино на розетку, как своего рода щит. Аналогичным образом подключаются пять контактов светодиодной матрицы. Если Arduino находится по центру, лучше всего использовать пространство. Поэтому лучше всего использовать контакты 5, 6, 7 для CS, CLK и DIN для матрицы. Здесь должны быть подключены только точки пайки. Подключение к 5V и GND осуществляется через небольшую перемычку.

Два датчика наклона также подключаем короткими проводами. Они подключены к контактам 2 и 3, а также к 5V и GND.

Теперь все можно собрать. Оргстекло сначала фиксируется горячим клеем. Так же поступаем и со светодиодной матрицей. Достаточно небольшого количества горячего клея.

Далее устанавливается двухпозиционный выключатель, фиксируется горячим клеем и подключается к соответствующим проводам.

Монтаж источника питания

Немного переделан блок питания. В зависимости от того, какие опции и компоненты у вас есть, контакты для плюса и минуса могут быть подогнаны соответствующим образом.

Мы используем пружины и штифты от использованного батарейного отсека. Чтобы прикрепить к нижней части корпуса, мы снова используем провода и немного горячего клея.

Повышающий преобразователь лучше всего настраивать на прибл. 5В перед установкой. Для этого необходимо немного покрутить сопротивление.

Затем соединяются верхний и нижний регистры. Из-за посадки на 0,1 мм достаточно соединения без дополнительной фиксации. И они все еще могут открыться снова для замены батареи.

И тогда все готово!

Игра в кости 2.0 может начаться!

Что вам нужно

  • Arduino Nano (или ESP8266)
  • 2 датчика наклона (со встроенными резисторами)
  • Светодиодная матрица 8x8 с микросхемой MAX7219, SPC
  • Блок розеток
  • Переключатель включения / выключения
  • Печатная плата
  • 2 батарейки AAA

Дополнительная информация

Если вы хотите узнать больше, посетите наш сайт techpluscode.de/arduino-wuerfel-2-0.

Извините, этот расширенный блог доступен только на немецком языке;-)

Код

  • wuerfel8x8.ino
wuerfel8x8.ino Arduino
Код для встряхивания кости
 / * Blog-Artikel:Schttel-Wrfel mit LED Matrix und Bewegungssimulation https://techpluscode.de/schuettel-wuerfel-mit-led-matrix-und-bewegungssimulation/tech Angpluscode.deCopyielsky 2019 * /// Bibliothek fr die Ansteuerung der 8x8 LED-Matrix einbinden // Включить библиотеку для светодиодной матрицы 8x8 # include "LedControl.h" int PinTiltX =2; // Вывод датчика наклона Xint PinTiltY =3; // Вывод датчика наклона Y // Выводы светодиодной матрицы // Выводы светодиодной матрицы int PinCLK =7; int PinCS =6; int PinDIN =5; LedControl lc =LedControl (PinDIN, PinCLK, PinCS, 1); // Координаты Wrfelaugen в светодиодной матрице // Координаты точек игральной кости в светодиодной матрице int DicePic [8] [ 6] [2] ={{// исходная матрица и начальное положение:{9,9}, // 1. Пункт {9,8}, // 2. Пункт {9,7}, // 3. Пункт {9,6}, // 4. Пункт {9,5}, // 5. Пункт {9,4} // 6. Пункт}, {// 1:{4,4}, // 1. Пункт {-1, -1}, // 2. Пункт {-1, -1}, // 3. Пункт {-1, -1}, // 4. Пункт {-1, -1}, // 5. Пункт {-1, -1} // 6. Пункт}, {// 2:{2,2}, // 1. Пункт {6,6}, // 2. Пункт {-1, -1}, // 3. Пункт {-1, -1}, // 4. Пункт {-1, -1}, // 5. Пункт {-1, -1} // 6. Пункт}, {// 3:{2,6}, // 1. Пункт {6,2}, // 2. Пункт {4,4}, // 3. Пункт {-1, -1}, // 4. Пункт {-1, -1}, // 5. Пункт {-1, -1} // 6. Пункт}, {// 4:{2,2}, // 1. Пункт {2,6}, // 2. Пункт {6,2}, // 3. Пункт {6,6}, // 4. Пункт {-1, -1}, // 5. Пункт {-1, -1} // 6. Пункт}, {// 5:{2,2}, // 1. Пункт {2,6}, // 2. Пункт {6,2}, // 3. Пункт {6,6}, // 4. Пункт {4,4}, // 5. Пункт {-1, -1} // 6. Пункт}, {// 6:{2,1}, // 1. Пункт {2,4}, // 2. Пункт {2,7}, // 3. Пункт {6,1}, // 4. Пункт {6,4}, // 5. Пункт {6,7} // 6. Пункт}, {// Начало:{-1, -1}, // 1. Пункт {-1, -1}, // 2. Пункт {-1, -1}, // 3. Пункт {-1, -1}, // 4. Пункт {-1, -1}, // 5. Пункт {-1, -1} // 6. Punkt}}; // Variablen der Wrfelaugen:Position, Richtung, Geschwindigkeit fr X und Y // Переменные кости:позиция, направление, скорость для X и Yfloat DiceXpos [6]; float DiceXdir [6]; изменчивый байт DiceXspeed [ 6]; float DiceYpos [6]; float DiceYdir [6]; изменчивый байт DiceYspeed [6]; int DiceValue; длинная временная метка без знака; режим байта; int volatile shakes; int ShakesPerSecond; int step; void InterruptChecks () {// Schttel -Anzahl zhlen // Счетчик встряхивает shakes =shakes + 1; //Serial.println (millis ()); timestamp =millis ();} void SetSpeedX () {if (Mode ==0) {// all Wrfel in X beschleunigen // Ускорение игры в X for (int i =0; i <6; i ++) {if (DiceXspeed [i] <255) {DiceXspeed [i] =DiceXspeed [i] +5;}}} InterruptChecks ();} void SetSpeedY () {if (Mode ==0) {// все Wrfel в Y beschleunigen / / Ускорение игры в Y для (int i =0; i <6; i ++) {if (DiceYspeed [i] <255) {DiceYspeed [i] =DiceYspeed [i] +5;}}} InterruptChecks (); } void ShowLed (int x, int y, bool onoff) {// LED nur anzeigen, wenn im sichtbaren Bereich // показывать только, когда x / y в матрице if ((x <8) and (y <8) and ( x> =0) и (y> =0)) {lc.setLed (0, x, y, onoff); }} void ShowDot (int x, int y, bool onoff) {// Wrfel-Auge anzeigen oder ausblenden // Показать или скрыть точку игры в кости ShowLed (x-1, y-1, onoff); ShowLed (x, y-1, onoff); ShowLed (x-1, y, onoff); ShowLed (x, y, onoff);} void ShowDicePic (int value) {// Wurf anzeigen // Показать diceboolean done; // все точки из текущей позиции Position aus zur Zielposition von DiceValue bewegen // перемещаем все точки из текущей позиции в пункт назначения DiceValue for (int i =0; i <6; i ++) {DiceXspeed [i] =100; DiceYspeed [i] =100; // Werte fr X berechnen // Расчет значений x DiceXdir [i] =0; if (int (DiceXpos [i])> DicePic [значение] [i] [0]) {DiceXdir [i] =- 1;} else if (int (DiceXpos [i])  DicePic [значение] [i] [1]) {DiceYdir [i] =- 1;} else if (int (DiceYpos [i])  7) {pos =7; dir =dir * (- 1); } если (pos <1) {pos =1; dir =dir * (- 1); }} // Geschwindigkeit wird pro Schritt langsamer // Скорость уменьшается с каждым шагом if (sp>
 0) {sp =sp-1;}} void MoveDots () {// All Wrfel einen Schritt weiter bewegen // перемещаем кубики на один шаг далее for (int i =0; i <6; i ++) {// neue Coordinaten berechnen // вычисление новых координат DoStep (DiceXpos [i], DiceXdir [i], DiceXspeed [i], true); DoStep (DiceYpos [i], DiceYdir [i], DiceYspeed [i], true); } // Wrfel-Augen anzeigen // показать кубики lc.clearDisplay (0); for (int i =0; i <6; i ++) {ShowDot (int (DiceXpos [i]), int (DiceYpos [i]), true); }} void setup () {// MAX7219 запущен в режиме энергосбережения, // er muss aufgeweckt werden. // MAX7219 находится в режиме энергосбережения при запуске, // мы должны сделать пробуждение lc.shutdown (0, false); // Helligkeit auf einen Mittelwert // Установите среднюю яркость lc.setIntensity (0, 8); // und Display lschen // и очищаем дисплей lc.clearDisplay (0); randomSeed (analogRead (0)); DiceValue =0; для (int я =0; я <6; я ++) {DiceXpos [я] =DicePic [7] [я] [0]; DiceYpos [i] =DicePic [7] [i] [1]; DiceXdir [i] =random (3) -1; DiceYdir [i] =random (3) -1; DiceXspeed [i] =случайный (126) +120; DiceYspeed [i] =random (126) +120; } // Выводы einstellen // Настройка выводов pinMode (PinTiltX, INPUT_PULLUP); pinMode (PinTiltY, INPUT_PULLUP); attachInterrupt (digitalPinToInterrupt (PinTiltX), SetSpeedX, ИЗМЕНИТЬ); attachInterrupt (digitalPinToInterrupt (PinTiltY), SetSpeedY, CHANGE); lc.clearDisplay (0); отметка времени =миллис (); Mode =1; ShowDicePic (6); задержка (1000); lc.clearDisplay (0); Mode =0; Serial.begin (9600); шаг =0; встряхивает =0;} void loop () {задержка (50); шаг =шаг + 1; if (step>
 20) {// 1 сек ist vorbei // 1 сек больше, чем step =0; ShakesPerSecond =встряхивает; качает =0; } если (Mode ==0) {MoveDots (); if (millis () - timestamp>
 2000) {// seit 2 sek kein Schtteln mehr // нет тряски с 2 секунд Mode =1; DiceValue =random (6) +1; ShowDicePic (DiceValue); }} if (ShakesPerSecond> 5) {// Es wird wieder geschttelt // снова встряхивание Mode =0; }} 

Изготовленные на заказ детали и корпуса

Схема

Это мой набросок для схемы.

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

  1. Игральные кости
  2. Переключатель / светодиодная панель с Arduino для FS2020
  3. Цифровые игральные кости Arduino
  4. Arduino Spybot
  5. FlickMote
  6. Самодельный телевизор B-Gone
  7. Основные часы
  8. Игра Arduino Nano Tetris на самодельной матрице 16x8
  9. Найди меня
  10. Arduino Power