仓库保安机器人
我今年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根胶棒啊.......
{:7_218:}
程序部分
这个机器人的代码有3部分。Arduino发射基础车体部分:
#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);
}
}
里面需要注意的是,我的传感器都连接到模拟端口,敏感阈值还是我自己测出来的,可能有偏差。
因为我手上没有LCD,只能用RGB灯来代替:黄色是着火,紫色是一氧化碳或丁烷,绿色是漏水。
水泵和风扇接的是L298N,如果转向反了,调换一下两根线的位置。
Arduino 接收端的代码:
void setup()
{
Serial.begin(38400);
}
void loop()
{
char val;
val=Serial.read();
if(val!=-1)
{
Serial.print(val);
}
}
这块arduino要用USB接在电脑上,通过串口查看数据。
EV3程序,我用的是官方的图形化编程,上附件。
拓展设想:增加巡线功能,设计一条固定的线路,最短又能够探测到所有的隐患点,机器人沿这条路线巡查最经济又最高效。还可以结合人工智能,在机器人第一次全面探测完仓库地形后自动生成前面描述的路线。另外增加人体感应乃至人脸识别,可以增加防盗功能。加上I2C LCD屏幕,使观察数据更加简便。加上Micro SD模块,实时记录事故情况。还可以加上物联网而不是简单的蓝牙传输,这样更直观。用miniQ小车车体代替EV3,实现Arduino的全控制。
演示视频:https://www.bilibili.com/video/av98206784/最后是获得了温州市创客大赛一等奖。
最后还有几个资料。
谢谢大家,请多多指正!
通讯方式结合很棒,简单又实用,给人一种新的思路 {:5_172:} Forgotten 发表于 2020-3-24 09:17
通讯方式结合很棒,简单又实用,给人一种新的思路
谢谢,其实也是没办法的办法。 项目很棒啊,看到一句--还是要买大牌的呀!{:7_219:} wangyirun 发表于 2020-3-24 09:02
我今年12岁,第一次发项目帖,只是自学了2个月,大佬们勿喷。2019年科技节,我做了我的第一个Arduino项目: ...
要不是我没钱,我也可以…… 白吃白给 发表于 2020-3-24 10:07
要不是我没钱,我也可以……
总共花了300元 wangyirun 发表于 2020-3-24 09:02
我今年12岁,第一次发项目帖,只是自学了2个月,大佬们勿喷。2019年科技节,我做了我的第一个Arduino项目: ...
巧了,我也12岁,交个朋友 白吃白给 发表于 2020-3-24 02:14
巧了,我也12岁,交个朋友
真巧,我13岁
青少年都在社区里了 rzyzzxw 发表于 2020-3-24 10:03
项目很棒啊,看到一句--还是要买大牌的呀!
必须顶一下DFRobot的质量,杠杠滴 Vibranium 发表于 2020-3-24 10:19
青少年都在社区里了
给社区注入新的活力 真好,自叹不如啊 交个朋友,我13了 帅猫 发表于 2020-3-24 16:10
交个朋友,我13了
好呀,原来社区里这么多创客高手呀 仓库安保机器人 图片有些不清晰。 20060606 发表于 2020-8-4 08:54
图片有些不清晰。
有几个图片是从视频里截图的,有一点模糊
(哈哈,你是盯上我评论了吗)
交个朋友,我11了 DFS1w2cb8o8 发表于 2020-8-6 21:16
交个朋友,我11了
真的?我好像认识你 teu 发表于 2020-9-27 23:16
真的?我好像认识你
对,我认识你
页:
[1]