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