智能地下车库环境监控系统设计与实现_第1页
智能地下车库环境监控系统设计与实现_第2页
智能地下车库环境监控系统设计与实现_第3页
智能地下车库环境监控系统设计与实现_第4页
智能地下车库环境监控系统设计与实现_第5页
已阅读5页,还剩49页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

-[15]。JAVA内置对多线程的支持,使得开发者能够轻松实现并发编程,处理多任务。同时JAVA语言通过垃圾回收器来管理内存,开发人员不需要手动释放内存,这有助于防止内存泄漏和简化了内存管理的复杂性。JAVA内置对多线程的支持,使得开发者能够轻松实现并发编程,处理多任务。此外,JAVA具有强大的安全性特性,包括沙箱安全模型和对代码的严格访问控制。这使得JAVA在开发网络应用和浏览器插件时更加安全。JAVA在网络平台上还拥有丰富的学习资源、工具和框架可用于帮助开发者解决问题。软件则选择使用AndroidStudio。AndroidStudio为开发者提供了丰富的工具和功能,使得应用程序的设计、开发、调试和发布变得更加高效和便捷。AndroidStudio支持使用JAVA、Kotlin等多种编程语言进行应用程序的开发,同时还拥有丰富的API和库,帮助开发者构建功能丰富的应用程序。AndroidStudio强大的构建和发布工具,可以帮助开发者生成APK文件、签名应用程序、进行测试和发布到GooglePlay等操作。同时,本系统使用阿里云平台,手机APP与阿里云平台连接,从阿里云平台上获取三元组信息,客户端信息和主题,然后将这些信息编入代码,如图4.2所示。图4.2三元组信息打开手机APP后,输入账号和密码,APP端与阿里云平台连接,随后APP会接收到阿里云平台下发的各项数据。4.2.1登录界面代码登录界面代码如下所示:这段代码实现了按钮(btn_login)的点击事件监听。btn_login.setOnClickListener(newView.OnClickListener()设置了登录按钮的点击事件监听器,当用户点击登录按钮时会执行其中的代码,从名为edit_name的文本框中获取用户输入的用户名,从名为edit_pwd的文本框获取用户输入的密码,然后将用户名和密码记录下来,调用check_user函数检查用户名和密码是否正确。如果返回值大于0,表示验证通过。验证通过会创建一个新的Intent对象,用于启动名为MainActivity的活动,并通过startAcivity方法启动该活动。如果验证未通过,则显示用户名或密码错误。btn_login.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){Stringname=edit_name.getText().toString();Stringpwd=edit_pwd.getText().toString();Log.d("Login","name:"+name+"pwd:"+pwd);if(check_user(name,pwd)>0){Intentintent=newIntent(loginactivity.this,MainActivity.class);startActivity(intent);}else{Toast.makeText(loginactivity.this.getApplicationContext(),"用户名或密码错误",Toast.LENGTH_SHORT).show();}}});4.2.2账户管理代码账户管理界面的代码如下所示:这段代码用于处理用户点击“注册”按钮(btn_enroll)时的操作,从三个文本框中分别获取用户输入的注册用户名(name)、密码(pwd)和管理员密码(adminpwd)。使用Log.d("Login","enrollname:"+name+"enrollpwd:"+pwd);将注册用户名和密码记录到调试日志中,以便调试和查看用户输入的内容。调用add_user(name,pwd,adminpwd);方法,将用户注册信息传递给add_user方法进行处理。最终效果如图4.3图4.4所示。btn_enroll.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){Stringname=edit_enrollname.getText().toString();Stringpwd=edit_enrollpwd.getText().toString();Stringadminpwd=edit_enrolladminpwd.getText().toString();Log.d("Login","enrollname:"+name+"enrollpwd:"+pwd);//添加add_user(name,pwd,adminpwd);}});图4.3登录界面图4.4账户管理4.2.3MQTT协议代码本系统通过MQTT协议进行数据传输。代码如下所示:mqtt_connect方法用于建立MQTT连接。首先检查mqttConnectOptions是否为null,如果为null,则记录一条日志并返回,这是为了确保MQTT连接选项已经设置。然后检查mqttAndroidClient是否已经连接,如果未连接,则尝试建立连接。在连接过程中通过日志记录用户名和密码,以便进行调试。使用mqttAndroidClient.connect();方法尝试建立MQTT连接。同时传入了一个实现了IMqttActionListener接口的匿名类,用于监听连接结果。在IMqttActionListener的onSuccess方法中,记录连接成功的日志,并订阅指定的主题(SUB_TOPIC),然后将连接成功的消息发送到前台页面。在IMqttActionListener的onFailure方法中,记录连接失败的日志,并将连接失败的消息发送到前台页面。在连接过程中,捕获可能出现的MqttException,并打印异常堆栈信息。voidmqtt_connect(){

/*Mqtt建连*/

if(mqttConnectOptions==null){

Log.i(TAG,"mqttConnectOptionsisnull");

return;

}

if(!(mqttAndroidClient.isConnected())){

try{

Log.i(TAG,"name:"+mqttConnectOptions.getUserName());

Log.i(TAG,"pwd:"+mqttConnectOptions.getPassword());

mqttAndroidClient.connect(mqttConnectOptions,null,newIMqttActionListener(){

@Override

publicvoidonSuccess(IMqttTokenasyncActionToken){

Log.i(TAG,"connectsucceed");

subscribeTopic(SUB_TOPIC);

sendmsg_to_activity("{\"mqtt\":"+"Connect_mqtt_success"+"}");//转发接收到的指令到前台页面

}

@Override

publicvoidonFailure(IMqttTokenasyncActionToken,Throwableexception){

Log.i(TAG,"connectfailed");

sendmsg_to_activity("{\"mqtt\":"+"Connect_mqtt_failed"+"}");//转发接收到的指令到前台页面

}

});

}catch(MqttExceptione){

e.printStackTrace();

}

}

}4.2.4摄像头代码摄像头功能可以实时拍摄现场的画面,并通过手机端APP进行远程查看。代码设计如下所示:首先定义一个静态方法getCameraInfoFromDevice,该方法接受两个参数:一个是EZDeviceInfo类型的对象deviceInfo,另一个是一个整型camera_index,表示摄像头的索引。代码检查deviceInfo是否为null,如果是null,表示没有设备信息可供处理,直接返回null。接下来,代码检查一系列条件:deviceInfo.getCameraNum()>0:确保设备至少有一个摄像头。deviceInfo.getCameraInfoList()!=null:确保摄像头信息列表不为null。deviceInfo.getCameraInfoList().size()>camera_index:确保摄像头索引在摄像头信息列表的有效范围内。如果所有条件都满足,代码将从摄像头信息列表中获取指定索引位置的摄像头信息EZCameraInfo并返回。如果任何一个条件不满足,或者输入参数为null,则返回null。总之该方法的目的是从设备信息中获取指定摄像头的信息。publicstaticEZCameraInfogetCameraInfoFromDevice(EZDeviceInfodeviceInfo,intcamera_index){

if(deviceInfo==null){

returnnull;

}

if(deviceInfo.getCameraNum()>0&&deviceInfo.getCameraInfoList()!=null&&deviceInfo.getCameraInfoList().size()>camera_index){

returndeviceInfo.getCameraInfoList().get(camera_index);

}

returnnull;

}

图4.5摄像头画面4.2.5数据库代码数据库详细设计流程:1依据系统功能需求,确定使用数据库类型及部署位置。2依据数据采集种类,确定数据表个数及数据表名称。3在单个数据表中,除具体数值类型外,同时保存带有时间戳的数据秒数信息,详细记录数据的采集时间及数值,为系统运行提供详实的数据记录。数据库代码设计如下所示:用Sql语句新建了用户信息,温度,湿度,一氧化碳,水位,烟雾等信息的表。在userinfo表里有三个主要字段,分别是id、名字和密码,这个表里可以存放不同的用户信息。在其余表里同样是三个主要字段,分别为对应id的信息和数据。每个表用id字段进行关联,可以从不同的表里存储用户的数据。除了userinfo表以外,其余表里的info字段用来记录采集数据的时间,value字段用来存储采集的数值。例如温度表里的info是用来记录每一次采集温度值的时间,value记录的是每次采集的温度值。publicvoidonCreate(SQLiteDatabasedb){

//TODOAuto-generatedmethodstub

Stringsql_message="createtableIFNOTEXISTSuserinfo(idINTEGERPRIMARYKEY,namevarchar(32),pwdvarchar(32))";

db.execSQL(sql_message);

sql_message="createtableIFNOTEXISTStemperature(idINTEGERPRIMARYKEY,infovarchar(128),valint)";

db.execSQL(sql_message);

sql_message="createtableIFNOTEXISTShumidity(idINTEGERPRIMARYKEY,infovarchar(128),valint)";

db.execSQL(sql_message);

sql_message="createtableIFNOTEXISTSco(idINTEGERPRIMARYKEY,infovarchar(128),valint)";

db.execSQL(sql_message);

sql_message="createtableIFNOTEXISTSno2(idINTEGERPRIMARYKEY,infovarchar(128),valint)";

db.execSQL(sql_message);

sql_message="createtableIFNOTEXISTSnh3(idINTEGERPRIMARYKEY,infovarchar(128),valint)";

db.execSQL(sql_message);

sql_message="createtableIFNOTEXISTSwl(idINTEGERPRIMARYKEY,infovarchar(128),valint)";

db.execSQL(sql_message);

sql_message="createtableIFNOTEXISTSmist(idINTEGERPRIMARYKEY,infovarchar(128),valint)";

db.execSQL(sql_message);

Log.i("MySQLite","createdbtable");

}数据库E-R图如图4.6所示。图4.6E-R图5系统测试5.1软件测试5.1.1系统登录首先打开手机APP以后出现登录界面。如图5.1所示,分别在用户名输入admin,密码输入123456以后点击登录按钮,即可进入手机APP主界面,结果如图5.2所示。图5.1登录界面图5.2手机APP主界面错误案例:当输入未注册的账号名称和密码时,手机APP端的登录界面会显示用户名或密码错误,结果如图5.3所示。图5.3用户名或密码错误5.1.2查询数据首先登录手机APP进入系统主界面,由于电路板未通电的原因,各项数据处于等待上传的状态,结果如图5.4所示。图5.SEQ图\*ARABIC4数据等待上传将板子通上电以后等待一段时间,各传感器所采集到的数据会显示到手机APP端的主界面中,如图5.5所示。图SEQ图\*ARABIC5.5数据显示5.1.3摄像头监控实时视频监控按钮在手机APP主界面的最下方,点击该按钮即可查看摄像头实时拍摄的画面,如图5.6所示。图5.6视频监控按钮摄像头实时拍摄的画面会显示在这个页面中,同时可以开启或关闭声音。如果要返回主界面点击下方的状态监测按钮即可,如图5.7所示。图5.7摄像头监控画面5.1.4历史数据各类传感器监测的每一项数据都可以查看历史记录,点击历史记录按钮即可进行查看。如图5.8所示,烟雾浓度此时为31,而在之前的时间段数值有着不同的变化。图5.8历史记录5.1.5手动自动模式切换通常系统默认为自动模式,如图5.9所示,此时湿度超过了用户设定的阈值,系统自动开启排风操作。点击手动模式旁的按键,即可切换为手动模式,如图5.10所示。图5.9自动模式 图5.10手动模式5.2硬件测试5.2.1温湿度传感器测试在无干扰的情况下,显示屏可以看到温湿度传感器所采集到的温度数值为17.8,湿度为50.6,如图5.11所示。然后将手放在温湿度传感器上过几秒种,可以看到温湿度数值会产生变化。结果如图5.12所示,温度上升为19.8,湿度上升为99.9。图5.11温湿度初值图5.12温湿度数值变化5.2.2烟雾传感器测试通过显示屏可以看到烟雾传感器最初采集的数值为4,如图5.13所示。将纸巾点燃后,用燃烧的纸巾所产生的烟雾对MQ-2烟雾传感器进行干扰。如图5.14所示,此时烟雾浓度上升为32。图5.13烟雾初始值图5.14烟雾数值变化5.2.3气体传感器测试显示屏上可以看到气体传感器采集的一氧化碳初值为20,如图5.15所示。此时使用打火机放气模拟排放尾气对MICS-6814气体传感器模块进行干扰,如图5.16所示,一氧化碳浓度数值变为80。图5.15一氧化碳初值图5.16一氧化碳数值变化5.2.4水位传感器测试显示屏上水位传感器所采集的水位初始值为0,如图5.17所示。然后将HX710传感器上的水管放入装满水的杯子里,就可以看到水位数值产生了变化。如图5.18所示,水位数值变为16。图5.17水位初值图5.18水位数值变化5.3联合测试5.3.1温湿度监测用手指触碰温湿度传感器,使温湿度产生变化,此时手机APP的温湿度数值超过设定阈值的时候数值变红,同时触发小风扇的运行,开启通风操作,结果如图5.19所示。图5.19温湿度监测5.3.2烟雾浓度监测将纸巾点燃产生烟雾,用烟雾对传感器进行测试,此时烟雾浓度超过了设定阈值,数值变成红色,并发出蜂鸣器报警,结果如图5.20所示。图5.20烟雾浓度监测5.3.3一氧化碳浓度监测用打火机排放气体模拟排放尾气操作,对传感器进行干扰,此时一氧化碳浓度超过了设定阈值,一氧化碳数值变红,并开启小风扇进行通风操作,如图5.21所示。图5.21一氧化碳浓度监测5.3.4水位监测将水位传感器上的水管放到装满水的杯子里,测量水位信息,当水位深度超过设定阈值的时候,水位数值变红色,同时开启水泵模拟排水操作,如图5.22所示。图5.22水位监测

结论智能地下车库环境监控系统可以提高车库的安全性,通过监测车库内部的环境状况,及时发现并应对潜在的安全隐患,例如火灾、烟雾、泄露气体等,为车主提供更安全、舒适的停车环境。这种系统可以帮助车库管理人员实时监控车库的运行状态和环境情况,有助于优化车位管理、设备维护以及紧急情况处理等工作,从而提高管理效率。还可以收集大量的车库运行数据,通过数据分析和挖掘,为车库管理者提供决策支持,帮助其更好地优化车库运营管理。本系统介绍了基于现代科技应用的对未来地下车库环境的管理系统。使用STM32F103C8T6单片机作为主控芯片,AIR7244G模块与各类传感器作为地下车库环境监测的模块,可以实时的对地下车库温湿度,烟雾浓度,一氧化碳浓度,水位深度进行测量。此外,还设计了手机APP端,可以与各类传感器以及摄像头等硬件设备实行联动,在手机上对这些数据设定阈值,远程查看所采集的实时数据与历史数据,并根据具体情况可以作出相应的控制,从而避免火灾,淹水等事件发生对车辆及人员构成伤害,对空气质量能够实施有效监督与控制。通过这些技术保障地下车库的环境安全,构建出一个智能地下车库环境监控系统的有效体系,为人们带来了更多的安全性与便利性。综上所述,智能地下车库环境监控系统能够提升车库的安全保障、管理效率和用户体验,同时也有助于节省人力资源和数据驱动的决策。因此,本系统对于车库管理和运营具有重要意义,并且在实际应用中能够带来积极的效益和价值。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论