电子记分牌是任何体育比赛中任何人都可以拥有的最重要的小工具之一。使用常规方法的旧的手动计分板非常耗时且容易出错,因此在需要实时更改显示单元的地方,必须使用计算机化的计分板。这就是为什么在此项目中,我们将构建一个蓝牙控制的无线计分板,在其中我们可以仅使用android应用程序来更改板上的分数。该项目的大脑是Arduino Nano,在显示部分,我们将使用P10 LED矩阵实时远程显示得分。
P10 LED显示矩阵
一个P10 LED点阵显示是使现有的最好办法LED板为户外或室内使用。该面板在塑料外壳上安装了总共512个高亮度LED,以实现最佳显示效果。它还具有IP65防水等级,非常适合户外使用。这样,您可以通过以任意行和列结构组合任意数量的此类面板来制作大型LED标牌。
我们的模块尺寸为32 * 16,这意味着每行有32个LED,每列有16个LED。因此,每个LED招牌中共有512个LED。除此之外,它还具有IP65防水等级,可以由单个5V电源供电,具有非常宽的视角,亮度可以达到4500尼特。因此,您将可以在日光下清晰地看到它。以前,我们还将此P10显示器与Arduino一起使用来构建简单的LED板。
引脚说明的P10 LED矩阵:
该LED显示板使用10针邮件头进行输入和输出连接,在本节中,我们介绍了该模块的所有必需针脚。另外,您可以看到模块中间有一个外部5V连接器,用于将外部电源连接到电路板。
- 使能:此引脚用于通过向其提供PWM脉冲来控制LED面板的亮度。
- A,B:这些称为复用选择引脚。他们采用数字输入来选择任何多路复用行。
- 移位时钟(CLK),存储时钟(SCLK)和数据:这些是常规移位寄存器控制引脚。这里使用了移位寄存器74HC595。
将P10 LED显示模块连接到Arduino:
将P10矩阵显示 模块连接到Arduino是一个非常简单的过程,在我们的电路中,我们将Arduino的引脚9配置为使能引脚,引脚6配置为引脚A,引脚7配置为引脚B,引脚13是CLK,引脚8是SCLK,引脚11是数据,最后引脚GND是模块和Arduino的GND引脚,下面的完整表格清楚地说明了引脚配置。
P10 LED模组 |
Arduino UNO |
启用 |
9 |
一种 |
6 |
乙 |
7 |
时钟 |
13 |
时钟 |
8 |
数据 |
11 |
地线 |
地线 |
注意:将P10模块的电源端子连接到外部5V电源,因为512个LED会消耗大量功率。建议将5V,3 Amp直流电源连接到单个P10 LED模块。如果您打算连接更多号码模块,则相应地增加SMPS容量。
Arduino计分板所需的组件
由于这是一个非常简单的项目,因此组件要求非常通用,下面显示了所需组件的列表,您应该可以在本地的业余爱好商店中找到所有列出的材料。
- Arduino纳米
- P10 LED矩阵显示器
- 面包板
- 5V,3安培SMPS
- HC-05蓝牙模块
- 连接线
Arduino记分板电路图
Arduino LED计分板的原理图如下所示,因为该项目非常简单,我使用了流行的软件冲洗来开发原理图。
电路的工作非常简单,我们有一个Android应用程序和一个蓝牙模块,要与蓝牙模块成功通信,您必须将HC-05模块与android应用程序配对。连接后,我们可以发送要显示的字符串,发送完字符串后,Arduino将处理该字符串,并将其转换为内部数据74HC595移位电阻器可以理解的信号,然后再将数据发送至移位电阻,其准备显示。
Arduino记分板代码说明
成功完成硬件设置后,现在该对Arduino Nano进行编程了。该代码的逐步说明如下。另外,您可以在本教程的底部获得完整的Arduino Scoreboard代码。
首先,我们需要包括所有库。我们已经使用DMD.h库来控制P10 led显示器。您可以从给定的GitHub链接下载并包含它。之后,您需要包括 TimerOne.h库,该库将在我们的代码中用于中断编程。
这个库有很多可用的前端,我们在这个项目中使用了“ Arial_black_16 ”。
#包括
下一步,为我们的LED矩阵板定义行数和列数。在此项目中,我们仅使用了一个模块,因此ROW值和COLUMN值都可以定义为1。
#define ROW 1 #define COLUMN 1 #define FONT Arial_Black_16 DMD led_module(ROW,COLUMN);
之后,将定义代码中使用的所有变量。字符变量用于从Android App接收串行数据,两个整数值用于存储分数,并且定义了一个数组,该数组存储要在矩阵上显示的最终数据。
字符输入; 整数a = 0,b = 0; int标志= 0; 字符cstr1;
定义了一个函数scan_module(),该函数连续检查通过SPI从Arduino Nano传入的任何数据。如果是,则它将触发中断,以执行程序中用户定义的某些事件。
无效的scan_module() { led_module.scanDisplayBySPI(); }
在setup()内部,计时器被初始化,并且中断被附加到函数scan_module,前面已经讨论过。最初,使用功能清除屏幕(true)清除了屏幕,这意味着所有像素都定义为“关闭”。
在设置中,还使用功能Serial.begin(9600)启用了串行通信,其中9600是蓝牙通信的波特率。
void setup() { Serial.begin(9600); Timer1.initialize(2000); Timer1.attachInterrupt(scan_module); led_module.clearScreen(true); }
在这里,检查串行数据可用性,是否有来自Arduino的有效数据。从应用程序接收的数据存储在变量中。
if(Serial.available()> 0) { 标志= 0; 输入= Serial.read();
然后,将接收到的值与预定义变量进行比较。在这里,在Android应用程序中,采用了两个按钮来选择两个团队的得分。当按下按钮1时,字符“ a”被传输到Arduino,而当按下按钮2时,字符“ b”被传输到Arduino。因此,在此部分中,此数据是匹配的,如果匹配,则各个得分值将按代码所示递增。
if(输入=='a'&&标志== 0) { 标志= 1; a ++; } if if(输入=='b'&&标志== 0) { 标志= 1; b ++; } else;
然后,将接收到的数据转换为字符数组,因为P10矩阵功能只能显示字符数据类型。这就是为什么将所有变量都转换并连接为字符数组的原因。
(String(“ HOME:”)+ String(a)+ String(“-”)+ String(“ AWAY:”)+ String(b))。toCharArray(cstr1,50);
然后,要在模块中显示信息,请使用selection()函数选择字体。然后使用drawMarquee()函数在P10板上显示所需的信息。
led_module.selectFont(FONT); led_module.drawMarquee(cstr1,50,(32 * ROW),0);
最后,由于需要滚动显示消息,因此我编写了一段代码,以在一定时间段内将整个消息从右向左移动。
长的开始= millis(); 长时间的计时=开始; 布尔标志=假; while(!flag) { if((timing + 30)<millis()) { flag = led_module.stepMarquee(-1,0); timming = millis(); } }
这标志着我们编码过程的结束。现在可以上载了。
智能手机控制的计分板 -测试
将代码上传到Arduino之后,该测试项目了。在此之前,需要在我们的智能手机上安装android应用程序。您可以从给定的链接 下载P10计分板应用程序 。安装后,打开应用程序,主屏幕应如下图所示。
单击“扫描”按钮以通过App添加蓝牙模块。这将显示已配对的手机蓝牙设备列表。如果您之前尚未配对HC-05蓝牙模块,请使用手机的蓝牙设置配对该模块,然后执行此步骤。屏幕将如下所示:
然后,从列表中单击“ HC-05”,因为这是此处使用的蓝牙模块的名称。单击后,它将在屏幕上显示已连接。然后,我们可以进行计分板。
单击应用程序中所示的“主页”和“离开”之间的任何按钮。如果选择“主页”按钮,则“主页”的分数将在P10显示屏中增加。同样,如果选择“离开”按钮,则“离开”的分数将增加。下图显示了最终屏幕的外观。
我希望您喜欢该项目并学到了一些新的知识,如果您对该项目还有其他疑问,请在下面进行评论,或者在我们的论坛中提问。