EVE 发表于 2021-8-2 15:54:45

「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]
查看完整版本: 「BXY」掌控板 高中信息技术教程—防盗警报系统