亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino Bingo Machine with DIY A4-Size 7-Segment Displays

组件和用品

钉板
宁波制胜 Handycraft2 板用于 7 段显示器和 1 用于记分板
× 3
砧板
用于记分板的塑料砧板灰色
× 1
数字 LED 灯条 5 m WS2811,带 5050 个 LED
许多供应商和品牌
× 1
5m/roll DC5V ws2812b 300led 可单独寻址 60leds/m 5050 RGB
许多供应商和制造商
× 1
音频线
用于计分板和7段显示器之间的连接
× 1
砧板半透明塑料
用于七段显示器的字体
× 2
砧板柔性灰色
用于记分板的封面
× 1
Arduino UNO
× 1
电阻 221 ohm
读取 220 欧姆
× 2
电容器
100 uF
× 2
大按钮开关
瞬间
× 1
小按钮(通用)
× 1
线性调节器 (7805)
× 1

必要的工具和机器

常用工具和测试设备
很多DIY项目所需的普通工具

关于这个项目

走在ACTION商店时,我发现了一个价格可以接受的数字LED旅行(包括12V电源适配器,甚至包括一个带红外遥控器的控制器)。我决定购买一个并开始与它们一起玩,目的是在我的情况下使用 Arduino Uno 控制 LED 灯条。

尽管在包装或 LED 灯条本身上没有指定任何地方,但很快我发现这是一种带三个 5050 LED 段的灯条,每 3 个 LED 有一个 WS2811 驱动器。

我将条带连接到 Arduino Uno,以使用 Adafruit NeoPixel 库和一些示例代码(如 RGBW strandtest)对其进行试验。

我开始进行一些头脑风暴,并产生了使用这些行程制作 A4 尺寸 7 段显示器的想法。如上所示,七部分条带可以完成这项工作,另外还有一个用于显示小数点。这使其有效地分为 8 个段,这些段仅由 Arduino 的一个输出引脚控制,并由 ACTION 包中已包含的 12 V 适配器供电。

但是,只有一个 7 段显示器可以做什么?

我决定制作其中的 2 个并将它们用于创建 宾果机 按下按钮后显示 1 到 75 之间的随机数。

第 1 步:制作 7 段显示

显示器的整个制作过程是一个很长的故事,我可以在单独的教程中进行描述。短版制作如下:

两种 A4 尺寸的显示器均采用传统方法和材料制成。使用激光切割机和 3D 打印机时,整个过程会有所不同,而且可能更简单。你在互联网上找到了很好的例子,例如YouTube (https://learn.adafruit.com/ninja-timer-giant-7-segment-display/overview),您甚至可以购买现成的。

我发现自己制作它们是一种挑战和乐趣..

对于 LED 灯条,我使用了 3 个 LED 的 16 个部分,每个部分都是从 ACTION 的 WS2811 LED 灯条上切下的。

这些段通过焊接线连接到条带的 +12V、GND 和 Do 和 Di。您可以在互联网上找到许多有关如何正确执行此操作的教程。

对于房屋,我使用了当地 ACTION 商店提供的现成且价格合理的 Peg Board。

外壳的新正面由宜家的白色半透明砧板材料制成。

使用模板从电路板顶部的涂漆层(黑色底漆)中切割出部分。

使用便宜的音频电缆(也来自 ACTION)将 7 段显示器通过 220 欧姆电阻器连接到 Arduino,只需 3 条线(12V、GND 和数据输入)。

我修改了外壳,以便轻松插入音频连接器。

第 2 步:制作记分板

我还决定创建一个记分牌显示器,显示生成的随机数,一个用于生成新数字的按钮和一个用于结束和开始新一轮的“宾果游戏按钮”。

记分板使用与外壳相同的 ACTION 钉板制成(如上所述)。盖板由深灰色砧板(同样来自 ACTION)制成,上面钻有孔。顶盖由宜家砧板制成。两层之间是照片纸上的印刷品和保护性透明箔。

在里面,贴在砧板背面的是 5 节 15 个 WS2812 LED,每节加上 3 * 8 个 LED 灯条部分,用于照亮“BINGO”这个词。

第 3 步:制作软件

使用 Arduino 和无焊面包板完成了对 LED 灯条和 7 段显示器进行编码和播放的初步实验。

一个大的瞬时按钮连接到 GND 和 Uno 的数字 IO 引脚 2。按下按钮开始生成新的随机数。在短暂的“灯光秀 1”之后,随机数显示在两个 7 段显示器上。

在七段显示器上创建数字所用的表格如下:

为了帮助构建 Arduino Sketch,我在 ClickCharts 的帮助下制作了一些简单的流程图,一个非商业用途的免费版本(一旦你习惯了一些固有的限制,就可以正常工作)

生成的数字存储在名为 SCORE[] 的数组中,该数组由 75 个位置组成,填充为“0”或“1”。如果生成的新数已经存在,则自动生成一个新的随机数。

新号码在记分牌上亮起(有 75 个号码),同时新号码显示在 7 段显示器上

记分牌一直显示生成的所有随机数,直到获得有效的宾果游戏为止。名为“BINGO”的按钮将以简短的“BingoLightShow”结束回合

此后SCORE数组清零,可以开始新一轮。

也可以通过拨动电源开关(断开 12V 电源)来启动新一轮,这将重置 Arduino 并重新启动程序。

第 4 步:电子产品

12V、2A充电器为整个宾果机供电。

Arduino 电源插孔上的 12V 输入已修改为启用电源切换(开 - 关)。

用于记分牌的 99 个 LED (75 + 24) 的 5 V 电源通过 7805 电压调节器(几乎可以处理 WS2812 LED 灯条汲取的电流)从 12V 输入电源获得;建议安装散热器或电源版本(在更新中,我可能会添加一个功率晶体管来处理主要由记分板内的 99 个 WS2812 LED 消耗的所需 5V 电源。我以这种方式为 Arduino 绘制了草图记分牌的电力需求适中。

Fritzing 图中的布局如下所示:

请注意,宾果记分板上的 7 段 LED 部分 (12V) 以及照亮数字 1 -75 的 LED 灯条均由来自 Uno 的同一个输出引脚 (6) 控制。

由 Pierre Pennings 开发和制作(2018 年 11 月)。

代码

  • BINGO_Machine_rev04.ino
BINGO_Machine_rev04.inoArduino
带有 Arduino Uno 和 2 个 A4 尺寸 7 段显示器和电子记分板的宾果机草图由 WS2811 LED 灯条制成的尺寸 7 段显示器由 12V 供电(3 个 LED 对和 1 个控制芯片)由 3 个 LED 组成的每个段仅用一个控制地址寻址每个显示器有 7 个段加上一个小数点 (DP) 数字在 2 个显示器上显示的数字从 1 到 75,就像在普通的宾果游戏中一样 一个瞬时按钮连接到 GND 和 ARDUINO UNO 的数字 IO 引脚 6 按下按钮开始生成新的随机数 短时间后“Light Show 1”随机数显示在两个 7 段显示器上 生成的数字也存储在名为 SCORE[] 的数组中,该数组由 75 个位置组成,填充为“0”或“1” 如果生成的新数字已经准备好存在,自动一个新的随机数ber 生成 包括 ARDUINO UNO 本身在内的所有电子设备都内置在一个单独的记分板显示器中 75 个数字由一个 WS2812B 控制器芯片点亮,每个芯片带有一个 SMD5050 LED(由 5 V 供电) 记分板显示所有生成的随机数,直到获得有效的 BINGO 一个名为“BINGO”的按钮将以简短的“BingoLightShow”结束回合 此后清除 SCORE 阵列并可以开始新回合 也可以通过切换电源开关(断开12V 电源),这将重置 ARDUINO 并重新启动程序 12V、2A 充电器为整个 BINGO 机器供电 ARDUINO 电源插孔上的 12 V 输入已修改为启用电源开关(开 - 关) 5 V 电源用于记分板的 99 个 LED (75 + 24) 通过 7805 稳压器(几乎可以处理 WS2812 LED 灯条吸收的电流)从 12V 输入电源获得;建议安装散热器或电源版本 此代码根据 GPL3+ 许可证获得许可。*/#include const int NewnumberButton =2; // 数字 IO 引脚 2 连接到具有常开触点的 Newnumber 按钮// 引脚 2 将被内置上拉电阻驱动以使其正常为高电平 // 开关会将引脚暂时拉到地。 // 在高 -> 低转换时按下按钮,程序将生成一个新的 Number.const int BingoButton =4; // 数字 IO 引脚 4 通过常开触点连接到 BINGO 按钮 // 引脚 4 将通过内置上拉电阻驱动使其常为高电平 // BINGO 按钮会将引脚拉到地/ / 在高 -> 低转换时按下 BINGO 按钮,Lightshow 将开始,此后程序将结束。const int LedPin =6; // 数字 IO 引脚 6 通过 220 欧姆电阻连接到 WS 2811 LED 灯条的数据输入 (DI)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 段显示器中的 LED //(两次两个显示器上的 8 段);数字 0 -7 用于 UNIT 编号// 数字 8 - 15 用于 TENS 编号(数字 7 和 15 是每个数字的 DP)// 用于在记分板显示器上显示数字并控制(WS2812)LED使用地址 16 到 99 // 24 个 LED 用于为字母 BINGO 提供背光,75 个 LED 用于记分板以显示生成的 BINGO 数字;// 所有 LED 将仅用一根电线控制!从 LED_PIN 6 // 事实上,通过两个 220 欧姆电阻器从同一个 LedPin 6 控制(并行)两种不同类型的 LED 灯条#define BRIGHTNESS 250 // 将 LED 的亮度设置为最大(255) Adafruit_NeoPixel strip =Adafruit_NeoPixel(NUM_LEDS, LedPin, NEO_GRB + NEO_KHZ800);/*二维数组,用NUMBER进行分段分配,每个NUMBER有自己的一列----- ---------------------------------- 8 0 13 9 5 1 14 6 12 10 4 2 11 15 3 7 Digit 2 Digit 1 Tens 单位 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,}, //segment 0 or 8 {1,1,1,1,1,0,0,1,1,1,}, //segment 1 or 9 {1 ,1,0,1,1,1,1,1,1,1,}, //segment 2 or 10 {1,0,1,1,0,1,1,0,1,1,}, //segment 3 or 11 {1,0,1,0,0,0,1,0,1,0,}, //segment 4 or 12 {1,0,0,0,1,1,1, 0,1,1,}, //segment 5 or 13 {0,0,1,1,1,1,1,0,1,1,}, //segment 6 or 14 {0,0,0, 0,0,0,0,0,0,0,}, //segment 7 or 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, 0, 0, 0, 020 250, 50, 200, 0, 100, 250, 50, 150, 0, 250, 0, 0};//////////////////////// /////////////////////// 后面的设置代码将在“开机”或 RESETvoid setup() { Serial.开始(9600); pinMode(LEDPin,输出); // 将 LedPin 6 初始化为输出: pinMode(NewnumberButton, INPUT_PULLUP); // 将按钮引脚 2 初始化为输入: pinMode(BingoButton, INPUT_PULLUP); // 将宾果按钮引脚 4 初始化为输入:strip.setBrightness(BRIGHTNESS); strip.begin(); // 将所有 LED 初始化为“关闭” strip.show(); for (int t =16; t <24; t++) { strip.setPixelColor(t, 0, 0, 250); // 开机后在记分板上用蓝色字符显示BINGO这个词strip.show(); // 注意 WS2812 LED 灯条的颜色顺序是 R,G,B } for (count =0; count <76; count++) { // 将数组中的所有数据 SCORE 设为 0(数组位置从 0 开始到 75;不使用零位) SCORE[count] =0; } /*for (int n =0; n <10; n++) // 此代码可用于测试两个 7 段显示器上 0 - 9 的所有数字(未测试 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);带.show(); Serial.print("["); Serial.print(n); Serial.print("]"); Serial.print("["); Serial.print(s); Serial.print("] =");Serial.print(z); Serial.print(" "); } 延迟(1500); Serial.println(); }*/}//////////////////////////////////////////// ///// 接下来的循环代码将重复运行,直到“断电”或 RESETvoid loop() { Newnumber =digitalRead(NewnumberButton); if (Newnumber ==LOW) // 不需要短延迟来消除按钮的弹跳效果,因为一开始 LOW 循环继续 { randomSeed(millis());做 { GENERATENEWNUMBER (75); // 在 1 到 75 之间生成一个 NW_NUMBER } // 如果 NW_NUMBER 已经存在:再次生成一个 NW_NUMBER while (NW_NUMBER ==SCORE[NW_NUMBER] * NW_NUMBER);得分[NW_NUMBER] =1; // 在数组中的 NW_NUMBER 位置放一个 1 NUMBER =NW_NUMBER; TENSNUMBER =int (NUMBER / 10); // 计算 NW_NUMBER 的十进制值和单位值 UNITNUMBER =NW_NUMBER - (10 * TENSNUMBER);清除显示();灯光秀 1 (4, 100); //启动lightshow1 CLEARDISPLAY(); //打印编号序列(); // 将生成的 NW_NUMBER 打印到串口监视器并显示 SCORE 数组 DISPLAYNUMBER (TENSNUMBER, UNITNUMBER) 的新内容;显示分数 (); } else { Bingo =digitalRead(BingoButton);如果(宾果游戏==低)延迟(3000); // 延迟 3 秒以消除弹跳效果和意外按下按钮,因为 if (Bingo ==LOW) { BINGOLIGHTSHOW (); for (count =0; count <76; count++) // 将数组 SCORE 中的所有数据重新归为 0,可以开始新的 BINGO 回合 { SCORE[count] =0; } } }////////////////// 循环结束////////////////////////// /////////////////////////////////////////////////// ///////////////////////////////// 以下遵循从loopvoid LIGHTSHOW1 ( int 持续时间, uint8_t 等待) {for (int t =16; t <24; t++) { strip.setPixelColor(t, 0, 0, 0); // 在设置时关闭带有蓝色字符的 BINGO Leds strip.show(); } for (int k =0; k

定制零件和外壳

tekening_gaten_patron_puntjes_xgW76A8Jmw.svg用作显示器正面的模板

示意图

bingo_sketch_66WRdQITE2.fzz

制造工艺

  1. 在家制作 DIY 作业书写机
  2. DIY 最简单的 IV9 Numitron 时钟与 Arduino
  3. DIY 电压表与 Arduino 和诺基亚 5110 显示器
  4. 带旋转编码器的DIY简易测量轮
  5. 带夏普 GP2Y1010AU0F 传感器的 DIY 空气质量监测仪
  6. 带 WS2812 LED 灯条的 DIY Arduino 1D 乒乓球游戏
  7. 数控机床
  8. HID-Compliant UPS with Arduino
  9. 使用 RFID 的 DIY 创意
  10. 带 Arduino 和蓝牙的智能咖啡机
  11. DIY 灵敏的 Arduino IB 金属探测器,具有辨别力
  12. DIY Arduino 高度测量机