「BXY」掌控板 高中信息技术教程—防盗警报系统
一、实践情境人随着社会的不断发展、科学技术的进步,人们的生活水平也有了极大的提高,私有财产也在无形中慢慢增多,因此人们对家庭防盗系统提出新的要求。为此,在这节课上,我们将设计一个防盗警报系统,能够在家中闯入不速之客时报警提醒我们。
## 二、实践目标
本实践项目运用两块掌控板作为智能终端,结合红外线光电开关来实现人的检测和警报功能。
## 三、知识目标
1. 认识红外线光电开关;
2. 理解红外线光电开关的使用和接线方法,能根据连线图进行实物连接;
3. 掌握以掌控板为智能终端,通过BXY软件编写代码采集红外线光电开关反馈数据的方法;
4. 掌握以掌控板为智能终端,通过BXY软件编写代码实现两块主控板之间的数据传送.
## 四、实践准备
### 硬件清单
| ![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627884078143-image003.png)| ![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627884087352-image005.png)|![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627884096370-image007.png)|![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627884106968-image009.png)|
| --- | --- | --- | --- |
|[掌控板](https://www.dfrobot.com.cn/goods-1902.html)x1 |(https://www.dfrobot.com.cn/goods-1966.html)x1 |[红外线光电开关](https://www.dfrobot.com.cn/goods-1513.html) x1 | (https://www.dfrobot.com.cn/goods-2843.html)x1|
---
### 软件使用:(https://bxy.dfrobot.com.cn/)
#### 知识链接
- 红外线光电开关
> **简介**:红外线光电开关是一款通过红外测距的检测开关,检测障碍距离为0-2m,可通过调节螺母进行调节。模块抗干扰能力强,检测反应灵敏。它可以应用于很多方面,如电子门童、自动门、停车位检测等。红外线光电开关可用于各种应用场合,在使用红外线光电开关时,应注意环境条件,以使红外线光电开关能够正常可靠的工作。红外线光电开关在环境照度较高时,一般都能稳定工作。但应避免将传感器光轴正对太阳光、白炽灯等强光源。
![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627884129455-image007.png)
## 五、实践过程
在本项目中,我们将利用两块掌控板和红外线光电开关,分三步设计一个防盗报警系统。系统中,一块掌控板通过红外线光电传感器检测人并将数据发送出来,另一块掌控板接收数据并实现警报功能。
1. 实时检测红外数据
2. 发送数据
3. 接收数据
---
### 任务1:红外数据实时检测
#### 1、硬件搭建
**STEP1**:将一块掌控板插入I/O扩展板,注意正反
**STEP2**:按下图通过连接线将红外线光电开关接入扩展板。
![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627884146539-image011.png)
**STEP3**:通过USB连接线将掌控板接到计算机。
#### 2、软件编写
**STEP1**:软件设置
1、创建与保存项目文件
(1)启动BXY编程软件,选择主控类型“掌控板”。
(2)新建项目,保存并命名为“z5.1”。
**STEP2**:程序编写
```
from mpython import * # 导入mpython模块
import time
p8=MPythonPin(8,PinMode.IN) #将引脚(P8)设置为"PinMode.IN"模式
while True:
value=p8.read_digital() # 读取P8引脚的数字输入
oled.DispChar("Button_a:%d" %value,30,20) # 显示至oled上
oled.show() # 刷新
oled.fill(0) # 清屏
time.sleep(0.1)
```
#### 3、运行调试
**STEP1**:点击“烧录”上传程序并运行
观察掌控板,我们可以发现当红外线光电开关前有障碍物时,屏幕显示的值为0,而当开关前空无一物时,屏幕则显示数值1。
---
### 任务2:发送红外数据
在上个任务中,我们已经成功借助红外线光电开关来实现人的检测。当有人经过时,传感器的反馈值会由1变为0。但刚才我们仅仅是在软件终端显示了数据。接下来我们需要将数据发送出来,以便后续另一块掌控板接收数据并反馈。
#### 1、软件编写
**STEP1**:软件设置
1、创建与保存项目文件
(1)启动BXY编程软件,选择主控类型“掌控板”。
(2)新建项目,保存并命名为“z5.2”。
**STEP2**:程序编写
```
from mpython import *
import time
import radio
p8=MPythonPin(8,PinMode.IN)
# 实例化MPythonPin,将引脚(P8)设置为"PinMode.IN"模式
radio.on()
radio.config(channel = 7)
while True:
alarm=p8.read_digital()
if alarm == 0:
radio.send("Warning")
oled.DispChar("nonnono" ,30,20)
oled.show()
oled.fill(0)
else:
radio.send("Safe")
oled.DispChar("okokok" ,30,20)
oled.show()
oled.fill(0)
```
> 注:关于radio的介绍可见附录1
#### 2、运行调试
**STEP1**:点击“烧录”上传程序并运行
观察掌控板,我们可以发现当有人从红外线光电开关前经过时,屏幕显示“nonono”。当人离开后,屏幕则显示“okokok”
---
### 任务3:接收红外数据
在之前的任务中,我们已经利用红外线光电传感器实现了人的检测并将数据发送出来,接下来,我们还需使另一个掌控板接收数据并模拟警报功能。
#### 1、软件编写
**STEP1**:软件设置
1、创建与保存项目文件
(1)启动BXY编程软件,选择主控类型“掌控板”。
(2)新建项目,保存并命名为“z5.3”。
**STEP2**:程序编写
```
from mpython import *
import radio
import _thread
radio.on()
radio.config(channel=7) # radio通道设置
def rec_loop(): # radio接收循环
while True:
value=radio.receive() # radio 接收数据,返回msg
if value: # 当接收到数据时显示
oled.DispChar(value,30,20)
oled.show()
oled.fill(0)
_thread.start_new_thread(rec_loop, ())
```
#### 2、运行调试
**STEP1**:更换掌控板
**STEP2**:上传且运行程序,并使两块掌控板都通电
红外光电开关前无障碍物时,发射端掌控板屏幕显示okokok,接收端掌控板屏幕显示Safe。
![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627884285047-image013.png)
发射端红外光电开关前有障碍物时,发射端掌控板屏幕显示nonono,接收端掌控板屏幕显示Warning。
![](https://cdn.jsdelivr.net/gh/kikiyakiki/picture/2021-8-2/1627884368221-image015.png)
## 六、延伸拓展
拿出手中的红外线光电开关,测试当它前方距离多少时会触发?检测每次测试结果是否相同,想一想这是为什么呢?
---
## 附录
### 附录1:扩展阅读
- radio无线广播相关功能
> **简介**:radio 模块提供无线广播功能,支持13 频道(Channel),在相同的频道(Channel)内能接收到成员发出的广播消息,适合10米范围内的多板组网的通讯。
要使用此模块首先需要:
- import radio
> 函数
- radio.on()
> 开启无线功能
- radio.off()
> 关闭无线功能
- radio.config(channel)
> 配置无线参数
> channel (int): 无线通道,范围1~13
- radio.receive()
> 接收无线广播消息,消息以字符串形式返回。最大可接收250字节数据。如果没有接收到消息,则返回 None 。当 receive 内参数为 True ,即 receive(True) ,返回(msg,mac)的二元组。默认缺省 receive(False) ,即只返回msg。
- radio.send()
> 发送无线广播消息,发送数据类型为字符串。当发送成功后返回True,否则返回False。
页:
[1]