无论是漫长的高速公路还是医生的前门,我们到处都有指示牌,以向我们提供信息。但是这些标牌通常很无聊,无法根据我们的兴趣不时进行配置。因此,在此项目中,我们将使用8 * 8矩阵显示器构建一个蓝牙控制的标牌。该项目的独特功能是其android应用程序,该应用程序允许用户从手机单独控制所有64个LED。这使用户可以轻松创建自定义设计并将其显示在LED显示屏上,听起来很有趣吧!!所以我们开始吧…
所需材料:
- Arduino Pro迷你版
- MAX7219
- HC-05蓝牙模块
- 8 * 8 LED矩阵显示器
- 20k电阻
- DC桶式千斤顶
电路原理图:
该蓝牙控制的LED板使用EasyEDA应用程序构建的电路图。我们将使用相同的原理图从中开发PCB并使用EasyEDA进行制造。
电路非常简单。整个项目由12V适配器供电,该适配器直接提供给Arduino开发板的Raw引脚。然后将该原始电压调节至+ 5V,该电压将提供给蓝牙模块和MAX7219 IC。蓝牙模块的Tx和Rx引脚连接到Arduino的D11和D10以启用串行连接。
数字引脚D5至D7连接至MAX7219 IC,以通过SPI通信发送和接收数据。MAX7219的ISET引脚通过一个20k电阻上拉至高电平。
对于这个项目,我制造了一块PCB,您可以获取PCB的设计文件并使用该文件,或者在面包板上构建电路。但是,由于其复杂性,建议您购买8x8显示模块或使用PCB
8x8矩阵是非常有用的显示模块,可用于许多很酷的项目:
- 用Raspberry Pi控制8x8 LED矩阵
- 使用Arduino在8x8 LED矩阵上滚动文本显示
- 使用Arduino的8x8 LED矩阵
- 8x8 LED矩阵与AVR微控制器的接口
使用处理来创建Android应用程序:
在开始对Arduino进行编程之前,我们应该知道我们将从手机接收的数据类型进行响应。因此,让我们看一下如何创建Android应用程序以及如何在智能手机上使用它来控制8x8 LED矩阵。
使用Processing软件创建了该项目的Android应用程序。它是一个开源开发应用程序,可以轻松下载并用于使用Arduino或其他微控制器开发有趣的项目,因为它可以开发android应用程序和系统应用程序。我们已经使用“处理”完成了一些项目,您可以通过单击以下链接来检出它们。
- DIY FM广播使用处理
- 使用Arduino的虚拟现实/手势控制
- 使用Arduino的私人聊天室。
- 使用处理APP和超声波传感器的Arduino雷达系统
- 使用Arduino进行实时人脸检测和跟踪
- 使用Arduino和处理的DIY车速表
- 使用Arduino加速度计进行乒乓游戏
- 使用Arduino的Biped机器人
- DIY Arduino热成像相机
回到主题,对我来说不可能解释android应用程序的完整代码,因此您必须自己学习处理过程,然后查看代码以了解其工作方式。因此,对于愿意跳过学习过程的人们,可以从下面的链接下载android应用程序
- 下载Android应用程序
以下是我们的Android应用程序的界面:
APK文件可以直接安装在任何android应用程序上,并且可以像其他任何应用程序一样启动。但是,请确保您的HC-05蓝牙设备被命名为“ HC-05”,因为只有这样它才能工作。
了解处理代码:
有兴趣知道屏幕后面发生的事情的人可以阅读更多,其他人可以跳到下一个标题。基本上,Android应用程序在启动期间连接到名为“ HC-05”的蓝牙设备,并以圆圈的形式显示一组64个LED。然后,当用户按下圆圈时,圆圈变成红色,圆圈编号通过蓝牙发送给Arduino,在收到圆圈编号后,Arduino会打开LED。让我们看一下Processing程序的重要内容,以更好地理解。可以从下面的链接下载Android应用程序的完整代码。
- Android应用程序的处理代码
我们使用类和对象来显示64个LED,以便我们可以轻松地寻址每个LED。如下面的代码所示,我们使用一个 for 循环使用数组从1迭代到64。这是因为每个LED都有自己的X位置,Y位置和颜色值,我们可以轻松更改它们。
//将所有leds 浸入(int i = 1; i <= 64; i ++) led_array.display(); //所有led显示的 类为Led { float X_Pos; 浮动Y_Pos; 颜色 // CONSTRUTOR Led(float tempx,float tempy,color tempc){ X_Pos = tempx; Y_Pos = tempy; 颜色= tempc; } void display() { fill(colour); 椭圆(X_Pos,Y_Pos,led_dia,led_dia); } }
LED以与显示顺序相同的顺序加载到屏幕上。每个LED的距离等于其直径,因此我们可以轻松地区分用户当前选择的LED。如以下程序所示,我们创建一个数组,其中每个元素都保存LED的X,Y位置和颜色的信息。
void load_leds(){ led_array =新的Led; int a = 1; 对于(int j = 0; j <= 7; j ++){ float y = height / 6 + j *(led_dia * 1.5); 对于(int i = 0; i <= 7; i ++) { float x =(width / 6)+ i *(led_dia * 1.5); // fill(255); // ellipse(x,y,led_dia,led_dia); led_array =新的Led(x,y,color(255,255,255)); a ++; } } }
该程序的主要步骤是检查用户是否按下了任何LED,如果是,我们必须更改LED的颜色并通过蓝牙发送LED编号。从现在起,我们可以轻松地确定每个LED的位置和颜色,只需将用户按下的X,Y值与LED的X,Y值进行比较即可。如果这些值相互合并,则我们将更改LED的状态,并通过蓝牙发送该数字,如下所示。
//检查是否将鼠标悬停在led上//如果是,则发送 (int i = 1; i <= 64; i ++) 的led编号{ if((mouseX <(led_array.X_Pos + led_dia / 2))&&(mouseX>( led_array.X_Pos-led_dia / 2))&&(mouseY <(led_array.Y_Pos + led_dia / 2))&&(mouseY>(led_array.Y_Pos-led_dia / 2)))) {led_array =新的Led(led_array.X_Pos,led_array。 Y_Pos,led_color); 字节数据= {byte(i)}; bt.broadcast(data); } }
除此之外,该程序还可以通过关闭所有LED来重置整个LED,并且您还可以使LED变成红色(ON)或白色(OFF),因此我们也有一个切换按钮。显示切换按钮,并等待输入。如果按下,将采取相应的措施。执行此操作的代码如下所示,该函数在draw循环内调用。
void load_buttons() { rectMode(CENTER); textAlign(CENTER,CENTER); noStroke(); 填充(#1BF2D4); rect(宽度/ 2-宽度/ 4,高度/1.3,宽度/ 4,高度/ 12);填充(0); text(“ Reset”,width / 2-width / 4,height / 1.3); // 如果是(red == true) {fill(#080F89); rect(宽度/ 2 +宽度/ 4,高度/1.3,宽度/ 4,高度/ 12);填充(255,0,0); text(“ RED”,width / 2 + width / 4,height / 1.3);} // 如果(红色== false) {fill(#080F89); rect(宽度/ 2 +宽度/ 4,高度/1.3,宽度/ 4,高度/ 12);填充(255); text(“ WHITE”,width / 2 + width / 4,height / 1.3);} //按钮2 } void read_buttons() { if(mousePressed && click_flag == true) { color_val = get(mouseX,mouseY); click_flag = false; if(color_val ==-14945580) { 字节数据= {0}; bt.broadcast(data); println(“ RESET”); load_leds(); //加载所有led的位置和颜色 } if(color_val ==-16248951){字节数据= {100}; bt.broadcast(data); 如果(红色==真)红色=假; 否则,如果(red == false)red = true; println(“ TOGGLE”); } color_val = 0; } }
编程Arduino:
屏幕底部给出了此蓝牙控制的无线开发板项目的完整Arduino程序;您可以直接使用它并将其上传到您的板上。程序中的重要内容如下。
所述蓝牙模块被连接到销10和11,因此我们必须使用软件序列,以使这些引脚串行通信,然后我们可以监听来自这些引脚的数据。我们从蓝牙模块获取数据,并将其保存在名为 入库 的变量中。如果入站值为“ 0”,我们将使用以下代码关闭所有LED
如果(BT.available()) { 传入= BT.read(); Serial.println(传入); 如果(incoming == 0) m.clear(); //清除显示
使用入站值,我们必须确定用户按下了手机上的哪个LED,并确定天气会打开或关闭该LED。因此,我们检查该值是否等于100。如果该值为10,则意味着用户已要求切换LED的颜色。因此,我们将变量切换为红色,以了解应该打开还是关闭LED。
否则if(传入== 100)//检查是否应该打开或关闭LED { if(red == true) red = false; 否则(red == false) red = true; Serial.print(“ RED:”); Serial.println(红色); }
最后,如果该值小于65,则表示用户已按下LED。基于1到64之间的数字,我们必须确定用户按下了哪个LED。要切换该LED,我们需要该LED的行和列的值,该值分别计算并存储在变量X和Y中,并显示在下面的代码中。最后,根据变量red的值,我们根据用户要求打开或关闭LED
否则如果(传入<= 64) {//计算,其中为ONロ关闭LED 肘= TRUE; Y =传入/ 8; X =传入-(Y * 8); if(incoming%8 == 0) {X = 8; Y-= 1;} Serial.println(X-1); Serial.println(Y); if(red == true) m.setDot((X-1),(Y),true); // 如果(red == false) m.setDot((X-1),(Y),false); // LED熄灭 }
使用EasyEDA的电路和PCB设计:
为了设计这种 蓝牙控制矩阵显示器,我们选择了名为EasyEDA的在线EDA工具。我以前使用过EasyEDA多次,发现它使用起来非常方便,因为它具有良好的外观集合并且是开源的。设计完PCB之后,我们可以通过低成本的PCB制造服务订购PCB样品。他们还提供元件采购服务,其中有大量的电子元件库存,用户可以与PCB订单一起订购所需的元件。
在设计电路和PCB时,您还可以公开电路和PCB设计,以便其他用户可以复制或编辑它们,并从您的工作中受益,我们还公开了该电路的整个电路和PCB布局,请检查下面的链接:
easyeda.com/circuitdigest/8x8-led-matrix-display-control-with-bluetooth
您可以 通过选择“层”窗口中的层来 查看PCB的任何层(顶层,底层,顶层丝绸,底层丝绸等)。
您还可以使用 EasyEDA中的“照片查看”按钮查看PCB以及制造后的 外观:
在线计算和订购样品:
完成此蓝牙控制矩阵PCB的设计后,您可以通过JLCPCB.com订购PCB。要从JLCPCB订购PCB,您需要Gerber File。要下载PCB的Gerber文件,只需单击EasyEDA编辑器页面中的Fabrication Output按钮,然后从EasyEDA PCB订购页面下载。
现在转到JLCPCB.com并单击立即报价或按钮,然后可以选择要订购的PCB数量,所需的铜层数,PCB厚度,铜重量以及甚至是PCB颜色,例如快照如下图所示:
选择所有选项后,单击“保存到购物车”,然后您将转到上载您从EasyEDA下载的Gerber文件的页面。上传您的Gerber文件,然后单击“保存到购物车”。最后,单击“安全地结帐”以完成您的订单,然后几天后您将得到PCB。他们以极低的成本(2美元)制造PCB。他们的构建时间也非常短,DHL交付3-5天的时间为48小时,基本上,您将在订购一周后获得PCB。
订购几天的PCB后,我得到了包装良好的PCB样品,如下图所示。
在获得这些零件之后,我将所有必需的组件焊接到了PCB上。
在我的PCB中,我为8 * 8显示模块选择了错误的占位面积,这是一个直截了当的错误,因此,我不得不使用一块Perf板来安装显示器,如图所示。但是,现在占用的空间是PCB中的更新,您可以订购更正后的PCB,并轻松安装显示模块。
蓝牙标牌显示屏的工作方式:
通过获取PCB或在面包板上进行连接来准备好硬件后,请使用页面末尾提供的Arduino程序并将其上传到Arduino板。该Android应用APK文件也上方,用它和你的首选Android设备上安装应用程序。
接通硬件电源,并在手机上搜索HC-05设备名称以与其配对。密码默认为1234。之后,打开我们刚刚安装的应用程序。应用程序应在屏幕顶部显示“ connected to HC-05 ”,然后您将能够触摸屏幕上的LED并注意到板上的相同LED也被打开了。
您还可以通过按“重置”按钮关闭所有LED,并通过按“切换”按钮决定打开或关闭特定的LED。默认情况下,您按下的任何一个LED都会打开。该项目的完整工作可以在下面的视频中找到。如果您无法使用它,请使用下面的评论框,或在我们的论坛上写信以获得更多技术帮助。希望您理解该教程并喜欢构建它。