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

Бинго-машина Arduino с 7-сегментными дисплеями формата A4, сделанными своими руками

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

Доска для колышков
Сделано Ningbo Wins Handycraft:2 доски для 7-сегментных дисплеев и 1 для табло оценок
× 3
разделочная доска
серая пластиковая разделочная доска для табло
× 1
Цифровая светодиодная лента WS2811 5 м с 5050 светодиодами
многие производители и бренды
× 1
5 м / рулон DC5V ws2812b 300led с индивидуальной адресацией 60 светодиодов / м 5050 RGB
многие поставщики и производители
× 1
Аудиокабель
для соединения между Табло оценок и 7-сегментным дисплеем
× 1
Разделочная доска из полупрозрачного пластика
для шрифтов 7-сегментных дисплеев
× 2
Разделочная доска гибкая серая
для обложки Таблицы результатов
× 1
Arduino UNO
× 1
Резистор 221 Ом
читать 220 Ом
× 2
конденсаторы
100 мкФ
× 2
большой кнопочный переключатель
мгновенно
× 1
маленькая кнопка (общая)
× 1
Линейный регулятор (7805)
× 1

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

Общие инструменты и испытательное оборудование
обычные инструменты, необходимые для многих проектов DIY

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

Прогуливаясь по магазину ACTION, я обнаружил цифровую светодиодную подсветку по приемлемой цене (включая адаптер питания 12 В и даже контроллер с ИК-пультом дистанционного управления). Я решил купить одну и начал экспериментировать с ними, чтобы управлять светодиодной лентой с помощью Arduino Uno в моем случае.

Хотя нигде не указано ни на упаковке, ни на самой светодиодной ленте, вскоре я обнаружил, что это тип ленты с сегментами из трех светодиодов 5050 с одним драйвером WS2811 на 3 светодиода.

Я подключил полоску к Arduino Uno, чтобы поэкспериментировать с ней, используя библиотеку Adafruit NeoPixel и некоторый пример кода, например RGBW strandtest.

Я начал проводить мозговой штурм и пришел к идее использовать эти поездки для создания 7-сегментного дисплея формата A4. Семь участков полосы, как показано выше, будут выполнять эту работу плюс один дополнительный для десятичной точки на дисплее. Таким образом, получается 8 сегментов, которыми можно будет управлять только с одного выходного вывода Arduino и запитывать их от адаптера 12 В, уже содержащегося в пакете ACTION.

Но что вы можете сделать с одним 7-сегментным дисплеем?

Я решил сделать 2 из них и использовать их для создания машины для бинго . отображение случайных чисел от 1 до 75 после нажатия кнопки.

Шаг 1. Создание 7-сегментных дисплеев

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

Оба дисплея формата A4 были изготовлены с использованием обычных средств и материалов. При использовании лазерных резаков и 3D-принтеров весь процесс будет другим и, возможно, проще. В Интернете можно найти довольно хорошие примеры, например YouTube (https://learn.adafruit.com/ninja-timer-giant-7-segment-display/overview), и вы даже можете купить их в готовом виде.

Мне было нелегко и весело сделать их самому ...

Для светодиодных лент я использовал 16 секций по 3 светодиода в каждой, вырезанных из светодиодной ленты WS2811 производства ACTION.

Эти сегменты подключаются при помощи пайки проводов к клеммам + 12V, GND, Do и Di лент. в Интернете можно найти множество руководств о том, как это сделать правильно.

В качестве жилья я использовал доступную и доступную по цене Peg Board из местного магазина ACTION.

Новые фасады корпуса выполнены из белого полупрозрачного материала разделочной доски от IKEA.

Шаблон был использован для вырезания сегментов из окрашенного слоя поверх досок (черная грунтовка).

Дешевый аудиокабель (также от ACTION) использовался для подключения 7_сегментных дисплеев всего с 3 проводами (12 В, GND и Data in) к Arduino через резистор 220 Ом.

Я изменил корпус, чтобы можно было легко подключить аудиоразъем.

Шаг 2. Создание табло

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

Табло сделано с использованием того же колышка ACTION, что и корпус (описано выше). Крышка сделана из темно-серой разделочной доски (опять же от ACTION) с просверленными отверстиями, как показано выше. Верхняя крышка сделана из разделочной доски IKEA. Между двумя слоями находится печать на фотобумаге и защитная прозрачная пленка.

Внутри, к задней части разделочной доски, приклеены 5 секций по 15 светодиодов WS2812 каждая плюс 3 * 8 секций светодиодных лент для подсветки слова «BINGO».

Шаг 3. Создание программного обеспечения

Первоначальные эксперименты с кодированием и воспроизведением светодиодной ленты и 7-сегментных дисплеев проводились с использованием Arduino и беспаечной макетной платы.

Большая кнопка мгновенного действия подключена к GND и к выводу 2 цифрового ввода-вывода Uno. Нажатие на кнопку запускает генерацию нового случайного числа. После короткого «Светового шоу 1» случайное число отображается на двух 7-сегментных дисплеях.

Таблица, используемая для создания чисел на 7-сегментных дисплеях, выглядит следующим образом:

Чтобы помочь структурировать Arduino Sketch, я сделал несколько простых блок-схем с помощью ClickCharts, бесплатной версии для некоммерческого использования (отлично работает, если вы привыкнете к некоторым внутренним ограничениям)

Сгенерированное число сохраняется в массиве SCORE [], состоящем из 75 позиций, заполненных либо «0», либо «1». Если сгенерированное новое число уже существует, автоматически создается новое случайное число.

Новый номер высвечивается на табло (с 75 числами), и в то же время новый номер отображается на 7-сегментных дисплеях

Табло показывает все сгенерированные случайные числа до тех пор, пока не будет получено действительное бинго. Кнопка «BINGO» завершит раунд коротким «BingoLightShow»

После этого массив SCORE очищается, и можно начинать новый раунд.

Новый раунд также можно запустить, переключив выключатель питания (отключив питание 12 В), который перезапустит Arduino и перезапустит программу.

Шаг 4. Электроника

Зарядное устройство 12 В, 2 А обеспечивает питание всей бинго-машины.

Вход 12 В на разъеме питания Arduino был изменен для включения и выключения питания.

Питание 5 В для 99 светодиодов (75 + 24), используемых для табло, получается из входного питания 12 В с помощью регулятора напряжения 7805 (который может почти справляться с током, потребляемым светодиодной лентой WS2812); рекомендуется установка радиатора или силовой версии (в обновлении я, вероятно, добавлю силовой транзистор, чтобы справиться с необходимой мощностью 5 В, потребляемой в основном 99 светодиодами WS2812 внутри табло. Я сделал эскиз для Arduino таким образом что энергопотребление табло умеренное.

Схема на диаграмме Фритцинга выглядит следующим образом:

Обратите внимание, что как 7-сегментные светодиодные секции (12 В), так и светодиодные ленты, освещающие числа 1–75 на табло Бинго, управляются одним и тем же выходным контактом (6) Uno.

Разработано и произведено Пьером Пеннингсом (ноябрь 2018 г.).

Код

  • BINGO_Machine_rev04.ino
BINGO_Machine_rev04.ino Arduino
Эскиз для машины BINGO с Arduino Uno и 2 7-сегментных дисплеев формата A4 с электронной доской
 / * Это код для машины Bingo, разработанной и произведенной Пьером Пеннингсом (ноябрь 2018 г.) В машине используются 2 ЦИФРЫ большого размера A4 7-сегментные дисплеи размера, изготовленные из светодиодной ленты WS2811 с ​​питанием от 12 В (пары из 3 светодиодов с 1 управляющей микросхемой). Каждый сегмент, состоящий из 3 светодиодов, имеет только один адрес управления. Каждый дисплей имеет 7 сегментов плюс десятичная точка (DP). на двух дисплеях отображаются значения от 1 до 75, как в обычной игре BINGO. Нажатие кнопки мгновенного действия подключается к GND и цифровому выводу 6 ввода-вывода ARDUINO UNO. Нажатие кнопки запускает генерацию нового случайного числа. «Световое шоу 1» - случайное число отображается на двух 7-сегментных дисплеях. Сгенерированный номер также сохраняется в массиве под названием SCORE [], состоящем из 75 позиций, заполненных либо «0», либо «1». существует, автоматически новое случайное число Бер генерируется Вся электроника, включая сам ARDUINO UNO, была построена на отдельном дисплее табло для оценок. 75 номеров подсвечиваются одним чипом контроллера WS2812B с одним светодиодом SMD5050 каждый (с питанием от 5 В). достигнут действительный BINGO. Нажатие кнопки «BINGO» завершит раунд коротким «BingoLightShow». После этого массив SCORE очищается, и можно начинать новый раунд. Новый раунд также можно запустить, переключив переключатель питания (отключив Питание 12 В), который перезапустит ARDUINO и перезапустит программу. Зарядное устройство 12 В, 2 А обеспечивает питание всей машины BINGO. Вход 12 В на разъеме питания ARDUINO был изменен, чтобы обеспечить переключение питания (включение - выключение) Питание 5 В. для 99 светодиодов (75 + 24), используемых для Score Board, получается от входной мощности 12 В с помощью регулятора напряжения 7805 (который может почти справляться с током, потребляемым светодиодной лентой WS2812); рекомендуется установка радиатора или усиленной версии. Этот код находится под лицензией GPL3 +. * / # include  const int NewnumberButton =2; // Вывод 2 цифрового ввода-вывода подключен к кнопке Newnumber с нормально разомкнутым контактом // Вывод 2 будет управляться с помощью встроенного подтягивающего резистора, чтобы сделать его нормально ВЫСОКИМ // Переключатель на мгновение потянет вывод на землю. // При переходе от высокого к низкому, нажав кнопку, программа сгенерирует New Number.const int BingoButton =4; // Вывод 4 цифрового ввода-вывода подключен к кнопке BINGO с нормально разомкнутым контактом // Вывод 4 будет управляться с помощью встроенного подтягивающего резистора, чтобы сделать его нормально ВЫСОКИМ // Кнопка BINGO подтянет контакт к земле / / При переходе от высокого к низкому, нажав кнопку BINGO, запустится Lightshow и после этого программа завершится. Const int LedPin =6; // Вывод 6 цифрового ввода-вывода, подключенный к входу данных (DI) светодиодных лент WS 2811 через резистор 220 Ом int Newnumber =1; int Bingo =1; int SCORE [76]; int count =0; long randNumber; int NUMBER =0; int NW_NUMBER =0; int TENSNUMBER =0; int UNITNUMBER =0; #define NUM_LEDS 99 // первые 16 используются для управления (WS 2811) светодиодами в 2-значных 7-сегментных дисплеях // (два раза 8 сегментов на двух дисплеях); числа 0-7 предназначены для номера БЛОКА // Числа 8-15 предназначены для числа ДЕСЯТКИ (числа 7 и 15 являются DP каждой ЦИФРЫ) // для отображения чисел на дисплее табло оценок и управления светодиодами (WS2812) используются адреса от 16 до 99 // 24 светодиода используются для подсветки букв BINGO и 75 для табло для отображения сгенерированных номеров BINGO; // все светодиоды будут управляться только одним проводом! from LED_PIN 6 // на самом деле два разных типа светодиодных лент управляются (в parralel) с одного и того же LedPin 6 через два резистора 220 Ом # define BRIGHTNESS 250 // устанавливает яркость светодиодов на максимум (255) Adafruit_NeoPixel strip =Adafruit_NeoPixel (NUM_LEDS, LedPin, NEO_GRB + NEO_KHZ800); / * 2-мерный массив с ЧИСЛО для распределения сегментов, каждый НОМЕР имеет свой столбец ------------------ ---------------------------------- 8 0 13 9 5 1 14 6 12 10 4 2 11 15 3 7 Цифра 2 Цифра 1 Десятки Единицы 7 и 15 представляют десятичные точки (DP) * /// 0 1 2 3 4 5 6 7 8 9 байт SEGMENTarray [8] [10] ={{1,0,1,1,0 , 1,1,1,1,1,}, // сегмент 0 или 8 {1,1,1,1,1,0,0,1,1,1,}, // сегмент 1 или 9 {1 , 1,0,1,1,1,1,1,1,1,}, // сегмент 2 или 10 {1,0,1,1,0,1,1,0,1,1,}, // сегмент 3 или 11 {1,0,1,0,0,0,1,0,1,0,}, // сегмент 4 или 12 {1,0,0,0,1,1,1, 0,1,1,}, // сегмент 5 или 13 {0,0,1,1,1,1,1,0,1,1,}, // сегмент 6 или 14 {0,0,0, 0,0,0,0,0,0,0,}, // сегмент 7 или 15}; byte color_scheme [] ={50, 100, 200, 100, 150, 250, 150, 200, 50, 200, 250, 100, 250, 50, 150, 0, 100, 200, 50, 150, 250, 100, 200, 0, 150, 250, 50, 200, 0, 100, 250, 50, 200, 0, 100, 250, 50, 150, 0, 250, 0, 0}; ///////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// begin (9600); pinMode (LedPin, ВЫХОД); // инициализируем LedPin 6 как выход:pinMode (NewnumberButton, INPUT_PULLUP); // инициализируем контакт 2 кнопки как вход:pinMode (BingoButton, INPUT_PULLUP); // инициализируем контакт 4 бингобутона как input:strip.setBrightness (BRIGHTNESS); strip.begin (); // Инициализируем все светодиоды в положение "выключено" strip.show (); для (int t =16; t <24; t ++) {strip.setPixelColor (t, 0, 0, 250); // После включения питания отобразить слово BINGO на табло с синими символами strip.show (); // обратите внимание, что порядок цветов светодиодной ленты WS2812 - R, G, B} for (count =0; count <76; count ++) {// помещаем все данные в массив SCORE в 0 (позиции массива начинаются с 0 до 75, нулевая позиция не используется) SCORE [count] =0; } / * for (int n =0; n <10; n ++) // этот код можно использовать для тестирования всех чисел от 0 до 9 на двух 7-сегментных дисплеях (2 DP не тестируются) {for ( int s =0; s <8; s ++) {int z =SEGMENTarray [s] [n]; int i =0 + s; int j =8 + s; strip.setPixelColor (i, z * 250, 0, z * 50); strip.setPixelColor (j, z * 250, 0, z * 50); strip.show (); Serial.print ("["); Serial.print (n); Serial.print ("]"); Serial.print ("["); Серийный. Отпечаток (ы); Serial.print ("] ="); Serial.print (z); Serial.print (""); } задержка (1500); Serial.println (); } * /} ////////////////////////////////////////////// ///// код цикла, который следует за ним, будет повторяться до тех пор, пока "Power Off" или не будет RESETvoid loop () {Newnumber =digitalRead (NewnumberButton); if (Newnumber ==LOW) // нет необходимости в короткой задержке для устранения эффекта отскока кнопки, потому что сначала LOW цикл продолжается {randomSeed (millis ()); сделать {GENERATENEWNUMBER (75); // генерируем NW_NUMBER в диапазоне от 1 до 75} // если NW_NUMBER уже существует:снова генерируем NW_NUMBER while (NW_NUMBER ==SCORE [NW_NUMBER] * NW_NUMBER); ОЦЕНКА [NW_NUMBER] =1; // помещаем 1 в массив в позиции NW_NUMBER NUMBER =NW_NUMBER; ДЕСЯТКИ ЧИСЛО =целое (ЧИСЛО / 10); // вычисляем десятичное значение NW_NUMBER и единичное значение UNITNUMBER =NW_NUMBER - (10 * TENSNUMBER); CLEARDISPLAY (); LIGHTSHOW1 (4, 100); // запускаем lightshow1 CLEARDISPLAY (); // ЧИСЛО ПЕЧАТИ (); // выводим сгенерированный NW_NUMBER на монитор последовательного порта и показываем новое содержимое массива SCORE DISPLAYNUMBER (TENSNUMBER, UNITNUMBER); DISPLAYSCORE (); } else {Bingo =digitalRead (BingoButton); if (Bingo ==LOW) задержка (3000); // задержка в 3 секунды для устранения эффекта отскока и случайного нажатия кнопки, потому что if (Bingo ==LOW) {BINGOLIGHTSHOW (); for (count =0; count <76; count ++) // вернуть все данные в массив SCORE к 0, и можно будет начать новый раунд BINGO {SCORE [count] =0; }}}} ////////////////// КОНЕЦ ПЕТЛИ ///////////////////////// /////////////////////////////////// /////////////// //////////////////////////////////// Далее следуют конкретные функции, которые вызываются из циклаvoid LIGHTSHOW1 ( int duration, uint8_t wait) {для (int t =16; t <24; t ++) {strip.setPixelColor (t, 0, 0, 0); // выключаем светодиоды BINGO с синими символами в соответствии с настройкой strip.show (); } for (int k =0; k  

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

tekening_gaten_patroon_puntjes_xgW76A8Jmw.svg Для использования в качестве шаблона для фасадов дисплеев

Схема

bingo_sketch_66WRdQITE2.fzz

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

  1. Сделайте машинку для письма домашнего задания дома
  2. Самодельные простейшие часы Numitron IV9 с Arduino
  3. DIY вольтметр с Arduino и дисплеем Nokia 5110
  4. Простое измерительное колесо с поворотным энкодером, сделанное своими руками
  5. Монитор качества воздуха своими руками с датчиком Sharp GP2Y1010AU0F
  6. DIY Arduino 1D Pong Game со светодиодной лентой WS2812
  7. Станок с ЧПУ
  8. HID-совместимый ИБП с Arduino
  9. Идея DIY с RFID
  10. Умная кофемашина с Arduino и Bluetooth