论文部分内容阅读
水火无情,为了能对“水情”“火情”的意外情况及时报警,我们借助雨水传感器和火焰传感器,利用Arduino开发制作一个“水火警报仪”系统——LED灯发光、蜂鸣器发声和屏幕显示警报信息。
实验器材:Arduino UNO主板一个,雨水传感器一个,火焰传感器一个,红色LED灯一支,低电平触发蜂鸣器一个,面包板一块,各色杜邦线若干。
首先,将Arduino的5V和GND通过杜邦线连接至面包板;接着,将雨水传感器和火焰传感器的VCC和GND端均插接至面包板(与Arduino的5V和GND相连),二者的DO数字输出端则分别插接至Arduino的7号和8号数字引脚;然后,将蜂鸣器的VCC和GND端同样也插接至面包板,它的I/O信号端插接至12号数字引脚;最后,将LED灯长腿插入13号、短腿插入相邻的GND引脚,再通过数据线将Arduino与计算机USB接口连接(如图1)。
值得一提的是,雨水传感器和火焰传感器的数字输出信号均为“反逻辑”结果——当雨水传感器的感应板上没有水滴时,数字输出信号是高电平“1”;而当检测到有水滴时,则输出低电平“0”。另外蜂鸣器上如果标有“低电平触发”字样时,其工作模式与此类似,只有使用低电平“0”去触发时才会发声。
首先进行变量的定义:语句“int Beep = 12;”和“int led = 13;”分别对应蜂鸣器和LED灯的引脚编号,语句“int WaterSensorPin = 7;”和“int FireSensor
Pin = 8;”则分别对应雨水传感器和火焰传感器的引脚编号;接着,在setup()函数中对它们进行引脚模式的声明,蜂鸣器和LED灯是输出模式——“pinMode(Beep,OUTPUT);”“pinMode(led,OUTPUT);”,两个传感器是输入模式——“pinMode(WaterSensorPin,INPUT);”“pinMode(FireSensor
Pin,INPUT);”;然后,再通过语句“Serial.begin(9600);”设置串口监视器的波特率(如图2)。
在loop()函数中,先定义WaterSensorValue和FireSensorValue两个变量,通过“int WaterSensor
Value = digitalRead(WaterSensorPin);”和“int FireSensorValue = digitalRead(FireSensor
Pin);”两个语句,实现分别读取雨水传感器和火焰传感器数字信号;接着,构建“if……else……”双分支选择结构,判断雨水传感器和火焰传感器所检测的信号是否为低电平:“WaterSensorValue == LOW or FireSensorValue == LOW”,其中有一个成立(或同时成立)的话,则进行“亮灯、发声、屏显”三种形式的报警——语句“digitalWrite(led,HIGH);”控制LED灯,语句“digitalWrite(Beep,LOW);”控制蜂鸣器(注意是低电平触发),语句“Serial.println(“警报——水火无情,火速检查!”);”是向串口监视器输出提示信息;否则,则通过类似的三个语句来实现“熄灯、无声、屏显”——“digitalWrite(led,LOW);”“digitalWrite(Beep,HIGH);”和“Serial.println(“情况正常,请保持!”);”;最后,添加迟延0.5秒钟的语句“delay(500);”(单位是毫秒),避免死机。完成程序的编写(如图3)。
保存程序并编译、上传至Arduino,打开串口监视器后对“水火警报仪”进行测试:在没有“水情”“火情”的正常情况下,LED灯不亮、蜂鸣器不响,屏幕显示“情况正常,请保持!”;当在雨水传感器的感应板上滴水滴时(或用湿纸巾接触),LED灯发光、蜂鸣器发声,屏幕显示“警报——水火无情,火速检查!”;或者使用打火机靠近火焰传感器进行“打火”测试,同样也会触发警报(如图4)。
使用Python同样可以控制Arduino实现“水火警报仪”。首先,通过语句“import time”和“from pinpong.board import Board,Pin”导入time和pinpong库,并且初始化Arduino uno开发板:“Board(“uno”).begin()”;接着,通过语句“Beep = Pin(Pin.D12, Pin.OUT)”和“led = Pin(Pin.D13, Pin.OUT)”,声明蜂鸣器和LED灯分别插接在Arduino的12和13号数字引脚,并且均为数字输出端;类似地,语句“WaterSensor = Pin(Pin.D7, Pin.IN)”和“FireSensor = Pin(Pin.D8, Pin.IN)”,则是对雨水传感器和火焰傳感器进行声明,分别接插在7号和8号数字引脚,且均为数字输入端。
在“while True:”循环结构中,先建立Water_Sensor_Value和Fire_Sensor_Value两个变量,通过赋值语句“Water_Sensor_Value = WaterSensor.read_digital()”和“Fire_Sensor_
Value = FireSensor.read_digital()”,实现读取雨水传感器和火焰传感器所检测到的数字信号功能;然后再建立“if……else……”双分支选择结构,通过对条件表达式“Water_Sensor_Value == 0 or Fire_Sensor_Value == 0”进行逻辑值的判断,条件成立,说明有“水情”或“火情”,则执行“亮灯、发声、屏显”动作——“led.write_digital(1)”“Beep.write_digital(0)”和“print(‘警报——水火无情,火速检查!’)”;条件不成立的话(else分支),则执行“熄灯、无声、屏显”动作——“led.write_digital(0)”“Beep.write_digital(1)”和“print(‘情况正常,请保持!’)”;最后,添加延迟0.5秒钟语句“time.sleep(0.5)”(如图5)。
程序保存后再按功能键F5运行程序,测试Arduino“水火警报仪”,功能与IDE代码编程完全一致(如图6)。
首先,点击Mind+左下角的“扩展”项,将Arduino Uno主控板加载至主界面,注意不要加载其中的水分传感器和火焰传感器,因为该积木块默认封装的数据读取模式是模拟方式,不符合我们的需求。接着,建立“如果……那么执行……否则……”双分支选择结构,先对插接在7号和8号数字引脚的雨水传感器、火焰传感器进行数字信号的读取,再进行逻辑“或”运算判断;条件成立的话,设置数字引脚13输出为高电平——LED灯发光,设置数字引脚12输出为低电平——蜂鸣器发声,串口字符串输出“警报——水火无情,火速检查!”;条件不成立,则对应熄灭LED灯、蜂鸣器不发声和输出显示“情况正常,请保持!”的操作;最后,添加“等待0.5秒”时间延迟积木模块(如图7)。
保存程序后再点击“上传到设备”项,测试Arduino“水火警报仪”,同样也会实现對“水情”和“火情”的检测报警功能。
1.实验器材与电路连接
实验器材:Arduino UNO主板一个,雨水传感器一个,火焰传感器一个,红色LED灯一支,低电平触发蜂鸣器一个,面包板一块,各色杜邦线若干。
首先,将Arduino的5V和GND通过杜邦线连接至面包板;接着,将雨水传感器和火焰传感器的VCC和GND端均插接至面包板(与Arduino的5V和GND相连),二者的DO数字输出端则分别插接至Arduino的7号和8号数字引脚;然后,将蜂鸣器的VCC和GND端同样也插接至面包板,它的I/O信号端插接至12号数字引脚;最后,将LED灯长腿插入13号、短腿插入相邻的GND引脚,再通过数据线将Arduino与计算机USB接口连接(如图1)。
值得一提的是,雨水传感器和火焰传感器的数字输出信号均为“反逻辑”结果——当雨水传感器的感应板上没有水滴时,数字输出信号是高电平“1”;而当检测到有水滴时,则输出低电平“0”。另外蜂鸣器上如果标有“低电平触发”字样时,其工作模式与此类似,只有使用低电平“0”去触发时才会发声。
2.Arduino IDE代码编程实现“水火警报仪”
首先进行变量的定义:语句“int Beep = 12;”和“int led = 13;”分别对应蜂鸣器和LED灯的引脚编号,语句“int WaterSensorPin = 7;”和“int FireSensor
Pin = 8;”则分别对应雨水传感器和火焰传感器的引脚编号;接着,在setup()函数中对它们进行引脚模式的声明,蜂鸣器和LED灯是输出模式——“pinMode(Beep,OUTPUT);”“pinMode(led,OUTPUT);”,两个传感器是输入模式——“pinMode(WaterSensorPin,INPUT);”“pinMode(FireSensor
Pin,INPUT);”;然后,再通过语句“Serial.begin(9600);”设置串口监视器的波特率(如图2)。
在loop()函数中,先定义WaterSensorValue和FireSensorValue两个变量,通过“int WaterSensor
Value = digitalRead(WaterSensorPin);”和“int FireSensorValue = digitalRead(FireSensor
Pin);”两个语句,实现分别读取雨水传感器和火焰传感器数字信号;接着,构建“if……else……”双分支选择结构,判断雨水传感器和火焰传感器所检测的信号是否为低电平:“WaterSensorValue == LOW or FireSensorValue == LOW”,其中有一个成立(或同时成立)的话,则进行“亮灯、发声、屏显”三种形式的报警——语句“digitalWrite(led,HIGH);”控制LED灯,语句“digitalWrite(Beep,LOW);”控制蜂鸣器(注意是低电平触发),语句“Serial.println(“警报——水火无情,火速检查!”);”是向串口监视器输出提示信息;否则,则通过类似的三个语句来实现“熄灯、无声、屏显”——“digitalWrite(led,LOW);”“digitalWrite(Beep,HIGH);”和“Serial.println(“情况正常,请保持!”);”;最后,添加迟延0.5秒钟的语句“delay(500);”(单位是毫秒),避免死机。完成程序的编写(如图3)。
保存程序并编译、上传至Arduino,打开串口监视器后对“水火警报仪”进行测试:在没有“水情”“火情”的正常情况下,LED灯不亮、蜂鸣器不响,屏幕显示“情况正常,请保持!”;当在雨水传感器的感应板上滴水滴时(或用湿纸巾接触),LED灯发光、蜂鸣器发声,屏幕显示“警报——水火无情,火速检查!”;或者使用打火机靠近火焰传感器进行“打火”测试,同样也会触发警报(如图4)。
3.Python代码编程实现“水火警报仪”
使用Python同样可以控制Arduino实现“水火警报仪”。首先,通过语句“import time”和“from pinpong.board import Board,Pin”导入time和pinpong库,并且初始化Arduino uno开发板:“Board(“uno”).begin()”;接着,通过语句“Beep = Pin(Pin.D12, Pin.OUT)”和“led = Pin(Pin.D13, Pin.OUT)”,声明蜂鸣器和LED灯分别插接在Arduino的12和13号数字引脚,并且均为数字输出端;类似地,语句“WaterSensor = Pin(Pin.D7, Pin.IN)”和“FireSensor = Pin(Pin.D8, Pin.IN)”,则是对雨水传感器和火焰傳感器进行声明,分别接插在7号和8号数字引脚,且均为数字输入端。
在“while True:”循环结构中,先建立Water_Sensor_Value和Fire_Sensor_Value两个变量,通过赋值语句“Water_Sensor_Value = WaterSensor.read_digital()”和“Fire_Sensor_
Value = FireSensor.read_digital()”,实现读取雨水传感器和火焰传感器所检测到的数字信号功能;然后再建立“if……else……”双分支选择结构,通过对条件表达式“Water_Sensor_Value == 0 or Fire_Sensor_Value == 0”进行逻辑值的判断,条件成立,说明有“水情”或“火情”,则执行“亮灯、发声、屏显”动作——“led.write_digital(1)”“Beep.write_digital(0)”和“print(‘警报——水火无情,火速检查!’)”;条件不成立的话(else分支),则执行“熄灯、无声、屏显”动作——“led.write_digital(0)”“Beep.write_digital(1)”和“print(‘情况正常,请保持!’)”;最后,添加延迟0.5秒钟语句“time.sleep(0.5)”(如图5)。
程序保存后再按功能键F5运行程序,测试Arduino“水火警报仪”,功能与IDE代码编程完全一致(如图6)。
4.Mind+图形化编程实现“水火警报仪”
首先,点击Mind+左下角的“扩展”项,将Arduino Uno主控板加载至主界面,注意不要加载其中的水分传感器和火焰传感器,因为该积木块默认封装的数据读取模式是模拟方式,不符合我们的需求。接着,建立“如果……那么执行……否则……”双分支选择结构,先对插接在7号和8号数字引脚的雨水传感器、火焰传感器进行数字信号的读取,再进行逻辑“或”运算判断;条件成立的话,设置数字引脚13输出为高电平——LED灯发光,设置数字引脚12输出为低电平——蜂鸣器发声,串口字符串输出“警报——水火无情,火速检查!”;条件不成立,则对应熄灭LED灯、蜂鸣器不发声和输出显示“情况正常,请保持!”的操作;最后,添加“等待0.5秒”时间延迟积木模块(如图7)。
保存程序后再点击“上传到设备”项,测试Arduino“水火警报仪”,同样也会实现對“水情”和“火情”的检测报警功能。