8123| 19
|
[项目] 仓库保安机器人 |
我今年12岁,第一次发项目帖,只是自学了2个月,大佬们勿喷。2019年科技节,我做了我的第一个Arduino项目:仓库保安机器人。设计初衷:天津“812”瑞海危险品仓库**事故,造成165人遇难,直接经济损失人民币68亿元。对此我一直深感痛心。在自学EV3和C语言后,我制作了“仓库安保机器人”,它采用了EV3和Arduino互联的设计,可以从多方面检测仓库的安全性,并做出相应措施。 演示过程:首先,演示它的行走和避障功能。正常情况下,它沿直线行走。当遇到障碍物时,他会转弯。超声波传感器和触动传感器都有这个功能。接着,动态演示它的灭火功能。当他检测到火焰时,Arduino和VE3联动,驱动声光报警,并且喷水,直至警报解除。然后,静态演示它的防毒气功能。我用可燃气体对准传感器。他就会驱动声光报警,开启风扇,降低毒气浓度。最后,演示它的防潮功能。我们用水滴到传感器板上,代表仓库里的湿度升高。它驱动声光报警,开启风扇,提高增发速率。有警报时,还会通过蓝牙模块传输出去。 主要部件:它由EV3和Arduino搭建而成,EV3方面用了一个EV3程序块,2个大型电机,1个超声波传感器,1个颜色传感器,2个触动传感器。Arduino方面用了2个主板,1个舵机,1个火焰传感器,1个一氧化碳传感器,1个雨滴传感器,2个蓝牙模块和数个配件组成。 工作原理: 它采用了EV3和Arduino互联的设计,EV3负责驱动和避障,Arduino负责检测及报警,它会收集分析火焰、毒气和水滴传感器回传的数据,通过声光报警、扇风或喷水,第一时间保证仓库的安全。 严格来说,它是一个arduino与乐高EV3合成的项目。我以前做了两个乐高项目,感觉乐高的传感器太少,于是买了一套Arduino套件。“Arduino产品线弥补了乐高产品电子模块的不足,并且成本低廉易于获取。但Arduino再强大,也只是一块控制板,虽可快速实现逻辑编程及设备控制,却无法实现机械传动及结构搭建,无法做出完整的产品,而这正是乐高的长处。” 大家可以看到,机器人的移动基座用的是EV3,而检测报警系统用的是Arduino。那,这两个系统怎么互联呢? 搜了一下,Bricktronics是可以以arduino为主控,控制EV3的电机与传感器的。 但某宝上要卖90元,而且仅控制两个电机就要占用一排数字口,用UNO的我就没有IO接口了。 但换个角度想想,arduino向EV3传输的只是“有紧急情况”或“没有紧急情况”,又看看EV3套装里,还剩下一个颜色传感器。 它可以检测反射光强度,于是我在舵机上绑了一个白色色块。 当没有紧急情况时,色块置于颜色传感器下面,反射度约为75%。 当有紧急情况时,舵机把色块转到旁边去,反射度约为20%。 没有紧急情况 紧急情况 (我的机子已经被我弟给拆了,这是截图来的,不太清晰) 所以,剩下的计算都可以在EV3中完成。 创新要点:结合EV3和Arduino的优点,探索两个体系间的功能对接,实现工作转换;自学语言编写程序,实现机器人的多功能。 特需说明:仓库需求一般为防潮,但防潮功能不便演示,所以本作品用水滴传感器代替湿度传感器。 要注意的是,两块蓝牙模块还要进行AT配置,将移动机器人上的作为主机,连接电脑的是从机。 制作过程:因为我制作中没有拍照,只能文字表达了。 1、用EV3机器人45544套装搭建出,增加超声波模块; 2、用梁加高,放置Arduino主板; 3、在超声波传感器上方安装火焰传感器; 4、在主板右边安装MQ-2气敏传感器; 5、在气敏传感器下面安装舵机和颜色传感器; 6、在车体左右两边安装触碰传感器; 7、在车体左边安装水分传感器; 8、在主板前方用2个长方形梁加长; 9、在第一块梁上安装红绿LED灯和RGB灯; 10、在第二块梁上安装风扇和蜂鸣器; 11、在主板后方安装电池仓; 12、在水分传感器后方安装水箱; 13、在第二块梁左边连接水管; 14、在主板旁边装上L298N微型驱动板; 15、整理线路,加固各个连接点。 制作注意点: 1、水箱我用的是一个塑料罐,里面装上水泵在上面打孔,连接出水管,容量320ml,但使用时不能装满,不然车体会侧翻还要打一个小进气孔,保持内外压平衡。 2、我起先的雨滴传感器是这样的,有检测板和转接板2块: 买了3个,但用不久都进水了,估计是检测板质地比较疏松,水渗进去了。 然后又买了DF的水分传感器,非常好用,只是要注意,水不能滴到PH2.0接口上。 所以,还是要买大牌的呀! 3、因为我没有3D打印机,和一些铜柱尼龙柱等固定件,所以这个项目中的所有连接点我都用热熔胶。这样会使稳定性有所下降。 花了我30根胶棒啊....... 程序部分 这个机器人的代码有3部分。Arduino发射基础车体部分: [mw_shl_code=applescript,false]#include <Servo.h> Servo myservo; #define co A1 #define rain A2 #define fire A0 #define servo 3 #define r A3 #define g A4 #define b A5 #define buzzer 2 #define fan1 6 #define fan2 7 #define bump1 8 #define bump2 9 #define rl 5 #define gl 4 void setup() { Serial.begin(9600); pinMode(co,INPUT); pinMode(rain,INPUT); pinMode(fire,INPUT); myservo.attach(servo); pinMode(r,OUTPUT); pinMode(g,OUTPUT); pinMode(b,OUTPUT); pinMode(5,OUTPUT); pinMode(4,OUTPUT); pinMode(buzzer,OUTPUT); pinMode(fan1,OUTPUT); pinMode(fan2,OUTPUT); pinMode(bump1,OUTPUT); pinMode(bump2,OUTPUT); } int i,m,s=0,v; void soundbuzzer() { digitalWrite(buzzer,HIGH); delay(2000); digitalWrite(buzzer,LOW); } void blinkyellow() { analogWrite(r,255); analogWrite(g,191); delay(500); analogWrite(r,0); analogWrite(g,0); } void blinkgreen() { analogWrite(g,255); delay(500); analogWrite(g,0); } void blinkpurpul() { analogWrite(r,191); analogWrite(b,255); delay(500); analogWrite(r,0); analogWrite(b,0); } void Error() { digitalWrite(rl,HIGH); delay(2500); digitalWrite(rl,LOW); } void safe() { digitalWrite(gl,HIGH); delay(500); digitalWrite(gl,LOW); delay(500); digitalWrite(gl,HIGH); delay(1500); digitalWrite(gl,LOW); } void wind() { digitalWrite(fan1,HIGH); digitalWrite(fan2,LOW); delay(3750); digitalWrite(fan1,LOW); digitalWrite(fan2,LOW); } void water() { digitalWrite(bump1,HIGH); digitalWrite(bump2,LOW); delay(4000); digitalWrite(bump1,LOW); digitalWrite(bump2,LOW); } void loop() { if(analogRead(fire)<45) { Serial.print("Error:Fire/"); Serial.println(analogRead(fire)); myservo.write(-90); water(); blinkyellow(); Error(); soundbuzzer(); m=1; s+=1; } if(m=1&&analogRead(fire)>=50) { m=0; myservo.write(90); } if(analogRead(co)>600) { Serial.print("Error:Co/"); Serial.println(analogRead(co)); myservo.write(-90); wind(); blinkpurpul(); Error(); soundbuzzer(); m=1; s+=1; } if(m=1&&analogRead(co)<350) { m=0; myservo.write(90); } if(analogRead(rain)>=870) { Serial.print("Error:Rain/"); Serial.println(analogRead(rain)); myservo.write(-90); wind(); blinkgreen(); Error(); soundbuzzer(); m=1; s+=1; } if(m=1&&analogRead(rain)<200) { m=0; myservo.write(90); } v=Serial.read(); if (v!=-1) { if(v=='?') { if(m==1) Serial.println("Error;"); else { Serial.println("Safe;"); safe(); } } if(v=='x'||v=='X') Serial.println(s); } }[/mw_shl_code] 里面需要注意的是,我的传感器都连接到模拟端口,敏感阈值还是我自己测出来的,可能有偏差。 因为我手上没有LCD,只能用RGB灯来代替:黄色是着火,紫色是一氧化碳或丁烷,绿色是漏水。 水泵和风扇接的是L298N,如果转向反了,调换一下两根线的位置。 Arduino 接收端的代码: [mw_shl_code=applescript,false]void setup() { Serial.begin(38400); } void loop() { char val; val=Serial.read(); if(val!=-1) { Serial.print(val); } }[/mw_shl_code] 这块arduino要用USB接在电脑上,通过串口查看数据。 EV3程序,我用的是官方的图形化编程,上附件。 拓展设想:增加巡线功能,设计一条固定的线路,最短又能够探测到所有的隐患点,机器人沿这条路线巡查最经济又最高效。还可以结合人工智能,在机器人第一次全面探测完仓库地形后自动生成前面描述的路线。另外增加人体感应乃至人脸识别,可以增加防盗功能。加上I2C LCD屏幕,使观察数据更加简便。加上Micro SD模块,实时记录事故情况。还可以加上物联网而不是简单的蓝牙传输,这样更直观。用miniQ小车车体代替EV3,实现Arduino的全控制。 最后是获得了温州市创客大赛一等奖。 最后还有几个资料。 谢谢大家,请多多指正! 仓库保安机器人EV3程序.rar仓库保安机器人创作分享与简介.rar仓库安保机器人图片与程序.rar |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed