论文部分内容阅读
借助于温度传感器、风扇模块和几个LED灯,我们利用Arduino开发制作一个“高温监控仪”:当环境温度处于较适宜的温度范围时(比如28℃以下),绿色LED灯亮,风扇模块无动作;当温度有小幅度升高时(28℃以上、30℃以下),黄色LED灯发光进行预警,同时风扇模块低速转动进行风力降温,直至恢复正常;当温度较高时(30℃以上),红色LED灯发光进行报警,风扇模块高速转动进行风力快速降温……在整个过程中,屏幕每隔3秒钟就显示一次实时检测到的温度数据。
实验器材:Arduino UNO主板一个,DHT11温湿度传感器一个,风扇模块一个,绿色、黄色和红色LED灯各一支,面包板一块,各色杜邦线若干;对照设计好的电路接线图进行器材连接(如图1)。
首先,将Arduino的5V和GND通过杜邦线连接至面包板一侧的红色和蓝色线槽;接着,将绿色、黄色和红色LED灯的短腿(负极)均插接至蓝色线槽,长腿(正极)则分别插接至a列某行插孔中,再通过同种颜色的杜邦线将正极与Arduino的11号、12号和13号数字引脚相连;然后,将温度传感器和风扇模块的VCC端和GND端均通过杜邦线与面包板的红色、蓝色线槽连接,二者的信号端则分别插接至Arduino的2号和3号数字引脚;最后,通过数据线将Arduino与计算机USB接口连接,完成电路连接(如图2)。
在Arduino IDE中对DHT11温湿度传感器进行编程控制的前提是要安装DHT.h库,首先依次点击菜单“项目”-“加载库”-“管理库”项,在弹出的“库管理器”中以“DHT11”为关键词进行搜索,会出现一个名为“DHT sensor library(by Adafruit)”的库,显示支持DHT11(目前最新版本为1.4.2);接着,点击“安装”按钮(如图3),在弹出的提示窗口中点击“Install all”按钮进行下载和安装;结束后返回“加载库”中查看,底部“推荐的库”中就会显示有“DHT sensor library”项,说明安装成功。
首先导入DHT.h库:“#include <DHT.h>”,并且通过语句“DHT dht(2, DHT11);”对连接在2号数字引脚的温度传感器信号端进行初始化;然后定义Fan、GreenLED、YellowLED和RedLELD四个变量,对风扇模块(3号数字引脚)、绿色(11号)、黄色(12号)和红色(13号)LED灯进行引脚编号声明:“int Fan = 3;”“int GreenLED = 11;”“int YellowLED = 12;”和“int RedLED = 13;”;接下来,在setup()函数中先通过语句“Serial.begin(9600);”设置串口监视器的波特率,再通過语句“dht.begin();”开启DHT11温度传感器的数据通讯,最后通过pinMode()对风扇模块和三个LED灯的引脚模式均设置为输出模式:“pinMode(Fan, OUTPUT);”“pinMode(GreenLED, OUTPUT);”“pinMode(YellowLED, OUTPUT);”和“pinMode(RedLED, OUTPUT);”(如图4)。
在loop()函数中先定义浮点型变量Temperature,通过“float Temperature = dht.readTemperature();”语句实现对检测温度数据的读取,然后将该数据在串口监视器中输出:“Serial.print("当前温度为:");”“Serial.print(Temperature);”和“Serial.println("℃");”;接着,构建“if…else if…else…”三分支选择结构,对温度数据进行数值区间判断:如果温度在28℃以下——“if (Temperature <= 28.00)”,则控制绿色LED灯发光:“digitalWrite(GreenLED, HIGH);”;如果温度在28℃-30℃之间——“else if (Temperature > 28.00 && Temperature <= 30.00)”,则控制黄色LED灯发光、风扇低速转动:“digitalWrite(YellowLED,HIGH);”“analogWrite(Fan, 127);”;如果温度超过30℃,则控制红色LED发光、风扇高速转动:“digitalWrite(RedLED, HIGH);”“analogWrite(Fan, 255);”。 注意,DHT11温湿度传感器的数据采样频率不能太高,因此通过语句“delay(3000);”来实现3秒钟的延迟;最后,关闭LED灯和风扇模式:“digitalWrite(GreenLED, LOW);”“digitalWrite(YellowLED, LOW);”“digitalWrite(RedLED, LOW);”和“analogWrite(Fan, 0);”,完成程序的编写(如图5)。
将程序保存、编译、上传至Arduino,对“高温监控仪”进行三种不同环境温度情况的测试,串口显示器3秒钟就显示一次温度数据的实时检测值,同时还会触发不同颜色的LED灯或风扇模块产生对应的预设“动作”。
首先,通过语句“import time”和“from pinpong.board import Board,Pin,DHT11”导入time和pinpong库的相关内容,并且初始化Arduino uno开发板:“Board(“uno”).begin()”;接着,通过五个语句分别对DHT11温湿度传感器、风扇模块和三个LED灯的对应引脚进行声明,包括引脚号和输入或输出模式(注意风扇模块是PWM输出):“dht11 = DHT11(Pin(Pin.D2))”“Fan = Pin(Pin.D3, Pin.PWM)”“GreenLED = Pin(Pin.D11, Pin.OUT)”“YellowLED = Pin(Pin.D12, Pin.OUT)”和“RedLED = Pin(Pin.D13, Pin.OUT)”。
在“while True:”循环结构中,先建立变量Temperature并為其赋值:“Temperature = dht11.temp_c()”,即获取温度传感器的摄氏度数据,并且将它打印输出:“print('当前温度为: ',Temperature,'℃')”;然后再建立“if…elif…else…”三分支选择结构,对变量Temperature的数值进行判断,当检测的环境温度在28℃以下时:“if Temperature <= 28.00:”,绿色LED灯发光:“GreenLED.write_digital(1)”;当温度在28℃-30℃之间时:“elif (Temperature > 28.00 and Temperature <= 30.00):”,黄色LED灯发光、风扇模块中速转动:“YellowLED.write_digital(1)”“Fan.write_analog(127)”;当温度超过30℃时(else语句),红色LED灯发光、风扇模块高速转动:“RedLED.write_digital(1)”、“Fan.write_analog(255)”;最后,添加延迟3秒钟的“time.sleep()”语句,并且将三支LED灯和风扇模块均关闭:“GreenLED.write_digital(0)”“YellowLED.write_digital(0)”“RedLED.write_digital(0)”和“Fan.write_analog(0)”。
保存程序,按功能键F5运行,测试Arduino“高温监控仪”,效果与使用Arduino IDE代码编程的实现效果是完全一致的(如图6)。
首先,点击Mind+左下角的“扩展”项,将Arduino Uno主控板和DHT11/22温湿度传感器加载至主界面;接着,在“循环执行”中建立名为“温度”的变量,为其赋值为“读取引脚2'DHT1'温度(℃)”,并且在串口监视器中以9600的波特率进行字符串输出;然后建立“如果…那么执行…否则如果…那么执行…否则…”三分支选择结构,分别对变量“温度”的值进行数值区间判断:如果小于等于28℃,则“设置数字引脚11输出为高电平”(绿色LED灯发光);如果大于28℃且小于等于30℃,则“设置数字引脚12输出为高电平”(黄色LED灯发光)、“设置PWM引脚3输出127”(风扇模块中速转动);否则(即大于30℃时),执行“设置数字引脚13输出为高电平”(红色LED灯发光)、“设置PWM引脚3输出255”(风扇模块高速转动);最后,等待3秒钟,将三支LED均设置为低电平、风扇模块设置PWM值为0进行关闭操作。
将程序保存后点击“上传到设备”项,测试Arduino“高温监控仪”,同样也会实现每隔3秒钟检测一次环境温度的功能,并且对不同的温度数据进行开关对应颜色的LED灯及风扇模块不同转速的控制,与使用代码编程实现的效果是完全一致的(如图7)。
1.实验器材与电路连接
实验器材:Arduino UNO主板一个,DHT11温湿度传感器一个,风扇模块一个,绿色、黄色和红色LED灯各一支,面包板一块,各色杜邦线若干;对照设计好的电路接线图进行器材连接(如图1)。
首先,将Arduino的5V和GND通过杜邦线连接至面包板一侧的红色和蓝色线槽;接着,将绿色、黄色和红色LED灯的短腿(负极)均插接至蓝色线槽,长腿(正极)则分别插接至a列某行插孔中,再通过同种颜色的杜邦线将正极与Arduino的11号、12号和13号数字引脚相连;然后,将温度传感器和风扇模块的VCC端和GND端均通过杜邦线与面包板的红色、蓝色线槽连接,二者的信号端则分别插接至Arduino的2号和3号数字引脚;最后,通过数据线将Arduino与计算机USB接口连接,完成电路连接(如图2)。
2.Arduino IDE代码编程实现“高温监控仪”
在Arduino IDE中对DHT11温湿度传感器进行编程控制的前提是要安装DHT.h库,首先依次点击菜单“项目”-“加载库”-“管理库”项,在弹出的“库管理器”中以“DHT11”为关键词进行搜索,会出现一个名为“DHT sensor library(by Adafruit)”的库,显示支持DHT11(目前最新版本为1.4.2);接着,点击“安装”按钮(如图3),在弹出的提示窗口中点击“Install all”按钮进行下载和安装;结束后返回“加载库”中查看,底部“推荐的库”中就会显示有“DHT sensor library”项,说明安装成功。
首先导入DHT.h库:“#include <DHT.h>”,并且通过语句“DHT dht(2, DHT11);”对连接在2号数字引脚的温度传感器信号端进行初始化;然后定义Fan、GreenLED、YellowLED和RedLELD四个变量,对风扇模块(3号数字引脚)、绿色(11号)、黄色(12号)和红色(13号)LED灯进行引脚编号声明:“int Fan = 3;”“int GreenLED = 11;”“int YellowLED = 12;”和“int RedLED = 13;”;接下来,在setup()函数中先通过语句“Serial.begin(9600);”设置串口监视器的波特率,再通過语句“dht.begin();”开启DHT11温度传感器的数据通讯,最后通过pinMode()对风扇模块和三个LED灯的引脚模式均设置为输出模式:“pinMode(Fan, OUTPUT);”“pinMode(GreenLED, OUTPUT);”“pinMode(YellowLED, OUTPUT);”和“pinMode(RedLED, OUTPUT);”(如图4)。
在loop()函数中先定义浮点型变量Temperature,通过“float Temperature = dht.readTemperature();”语句实现对检测温度数据的读取,然后将该数据在串口监视器中输出:“Serial.print("当前温度为:");”“Serial.print(Temperature);”和“Serial.println("℃");”;接着,构建“if…else if…else…”三分支选择结构,对温度数据进行数值区间判断:如果温度在28℃以下——“if (Temperature <= 28.00)”,则控制绿色LED灯发光:“digitalWrite(GreenLED, HIGH);”;如果温度在28℃-30℃之间——“else if (Temperature > 28.00 && Temperature <= 30.00)”,则控制黄色LED灯发光、风扇低速转动:“digitalWrite(YellowLED,HIGH);”“analogWrite(Fan, 127);”;如果温度超过30℃,则控制红色LED发光、风扇高速转动:“digitalWrite(RedLED, HIGH);”“analogWrite(Fan, 255);”。 注意,DHT11温湿度传感器的数据采样频率不能太高,因此通过语句“delay(3000);”来实现3秒钟的延迟;最后,关闭LED灯和风扇模式:“digitalWrite(GreenLED, LOW);”“digitalWrite(YellowLED, LOW);”“digitalWrite(RedLED, LOW);”和“analogWrite(Fan, 0);”,完成程序的编写(如图5)。
将程序保存、编译、上传至Arduino,对“高温监控仪”进行三种不同环境温度情况的测试,串口显示器3秒钟就显示一次温度数据的实时检测值,同时还会触发不同颜色的LED灯或风扇模块产生对应的预设“动作”。
3.Python实现“高温监控仪”
首先,通过语句“import time”和“from pinpong.board import Board,Pin,DHT11”导入time和pinpong库的相关内容,并且初始化Arduino uno开发板:“Board(“uno”).begin()”;接着,通过五个语句分别对DHT11温湿度传感器、风扇模块和三个LED灯的对应引脚进行声明,包括引脚号和输入或输出模式(注意风扇模块是PWM输出):“dht11 = DHT11(Pin(Pin.D2))”“Fan = Pin(Pin.D3, Pin.PWM)”“GreenLED = Pin(Pin.D11, Pin.OUT)”“YellowLED = Pin(Pin.D12, Pin.OUT)”和“RedLED = Pin(Pin.D13, Pin.OUT)”。
在“while True:”循环结构中,先建立变量Temperature并為其赋值:“Temperature = dht11.temp_c()”,即获取温度传感器的摄氏度数据,并且将它打印输出:“print('当前温度为: ',Temperature,'℃')”;然后再建立“if…elif…else…”三分支选择结构,对变量Temperature的数值进行判断,当检测的环境温度在28℃以下时:“if Temperature <= 28.00:”,绿色LED灯发光:“GreenLED.write_digital(1)”;当温度在28℃-30℃之间时:“elif (Temperature > 28.00 and Temperature <= 30.00):”,黄色LED灯发光、风扇模块中速转动:“YellowLED.write_digital(1)”“Fan.write_analog(127)”;当温度超过30℃时(else语句),红色LED灯发光、风扇模块高速转动:“RedLED.write_digital(1)”、“Fan.write_analog(255)”;最后,添加延迟3秒钟的“time.sleep()”语句,并且将三支LED灯和风扇模块均关闭:“GreenLED.write_digital(0)”“YellowLED.write_digital(0)”“RedLED.write_digital(0)”和“Fan.write_analog(0)”。
保存程序,按功能键F5运行,测试Arduino“高温监控仪”,效果与使用Arduino IDE代码编程的实现效果是完全一致的(如图6)。
4.Mind+图形化编程实现“高温监控仪”
首先,点击Mind+左下角的“扩展”项,将Arduino Uno主控板和DHT11/22温湿度传感器加载至主界面;接着,在“循环执行”中建立名为“温度”的变量,为其赋值为“读取引脚2'DHT1'温度(℃)”,并且在串口监视器中以9600的波特率进行字符串输出;然后建立“如果…那么执行…否则如果…那么执行…否则…”三分支选择结构,分别对变量“温度”的值进行数值区间判断:如果小于等于28℃,则“设置数字引脚11输出为高电平”(绿色LED灯发光);如果大于28℃且小于等于30℃,则“设置数字引脚12输出为高电平”(黄色LED灯发光)、“设置PWM引脚3输出127”(风扇模块中速转动);否则(即大于30℃时),执行“设置数字引脚13输出为高电平”(红色LED灯发光)、“设置PWM引脚3输出255”(风扇模块高速转动);最后,等待3秒钟,将三支LED均设置为低电平、风扇模块设置PWM值为0进行关闭操作。
将程序保存后点击“上传到设备”项,测试Arduino“高温监控仪”,同样也会实现每隔3秒钟检测一次环境温度的功能,并且对不同的温度数据进行开关对应颜色的LED灯及风扇模块不同转速的控制,与使用代码编程实现的效果是完全一致的(如图7)。