设为首页收藏本站

[项目] 用Arduino来看看快递的暴力程度!

果壳实验室 发表于 2015-2-4 19:45:27 | 显示全部楼层 [复制链接]
46 18926
本帖最后由 果壳实验室 于 2015-2-4 19:48 编辑

前些日子,玉溪同学为了试着打开快递大叔的内心世界(啧啧。。。详情请点击)而DIY了暴力快递测试设备,取得众多网友的热烈反响,遂在经过千万场内心戏之后,开始了下一次更完备的暴力测试计划。(截至发帖,玉溪同学已经远在美帝,这次把他都供出来了,希望美帝能确保他人身安全!( ´ ▽ ` )ノ ……至少小编我很安全,嗯!)

由于果壳实验室的小伙伴DFRobot对快递大叔内心世界也颇感兴趣(误,这句划掉),由于果壳实验室的小伙伴DFRobot对这项拯救人类世界的计划颇为感兴趣,决定与果壳试验一起进行项目,于是,我们这项搞机计划便轰轰烈烈开始啦!

本次测试区域仍选择在北京市内,快递路线大致为朝阳区到海淀区。因此我们的设备功能需求是:能够测量包裹撞击时加速度的强度,并将数值连同撞击时间记录在SD卡内。考虑到北京市内快递一般能实现次日达,因此我们将设备续航时间设定在24小时。

综合了功能和设备小型化的需求,我们最终选择的设备构成包括:DFRduino nano+BMA220加速度传感器+MiscroSD 模块+DS1307时间模块,同时采用一块3.7V 2000MA的锂电池+直流升压模块(输出5V)给设备供电。

gpsq2ERiCjQ7-FpjW1pTjPWaWjXfMmNiZwM3iMf8IQUABgAAewQAAEpQ.jpg

DFRduino nano

sGAe1zzGMejq_7LIPxK1OSxa7ucB_tklkOaiSys_UGmAAgAA4AEAAEpQ.jpg

BMA220加速度传感器

rjJF1UM_PzZlcfbS3m1TyXnRtue-GdXl_gGIzfkFZGegDwAAuAsAAEpQ.jpg

MiscroSD 模块

aamfNtaZyury9LxpeAXzQIQikdJB7iOyq9Ec4m1azy6gDwAAuAsAAEpQ-2.jpg

DS1307时间模块



u76V8aoLpzlQnK1oo3auvU5hOgRZmqAyXD4N46HIBdagDwAAuAsAAEpQ.jpg

3.7V 2000MA的锂电池与直流升压模块

选好器材之后,果壳实验室与@DFRobot 就开始愉快地撸起来了……ˊ_>ˋ

首先把这些器材用杜邦线连接起来。铛铛铛~瞬间就接好了……

chI-wsso0jH6fmcgMkBm6L8A57FYcCBzxHUEUchTKjAgCgAAkAcAAEpQ-2.jpg

喔喔,好像节奏快了一点点……再贴张连接图吧!

未标题-1.jpg

接着,给RTC设置时间。将DS1307RTC的例程SetTime烧写入Arduino中,打开串口监视器,看到Arduino返回的时间数据为当前时间,时间设置完成!

rZRG_NT6ytHhdLw0o_mtyIweXi2caUpyxQdERUIDkTLoAwAAsAQAAEpQ.jpg

然后开始写代码,点击一下upload,哇,好了!(怎么可能一次就好!写代码……改代码……写代码……改代码……写代码……改代码……写代码……upload,再改……这个过程我们就略过吧!)

2aqh14kTo8szNtdsnFIno-4iS1RUADDPq3SSe5wFEcroAwAAsAQAAEpQ.jpg

终于,设备调试完了(ˊ_>ˋ这回真的好了) 。

kvncut800IUQ2ka1UyWOBGU84wyzlgMv3gjqv_XKXwEgCgAAkAcAAEpQ.jpg

MbgT17P91UqjVdr974hSeFyGZY_pwLcBaE9WA9bwKd4gCgAAkAcAAEpQ.jpg

装上电池后用信封包起来,装进盒子里。

iCl6H3OJnQ8F0yYfYlo9_7JOmhVhBQw_bGBzJhgXuFogCgAAkAcAAEpQ-2.jpg

然后就愉快地让内心世界丰富的快递大叔来把快递取走了!

磕磕碰碰,中间遇到其他事情,好几天才完成了包裹寄出和回收任务,然后就开始处理数据了……(别说了,这是最痛苦难受地好不好),然后,就出结果啦……来看看快递大叔的心情……

试验1.jpg

试验2.jpg

试验3.jpg

试验4.jpg

试验5.jpg

其实快递的磕磕碰碰,汽车在快加速,或者急刹车的过程,产生的加速度也记录在设备上了。因此我们试着做一个比较好的比较,让同事带着设备走回家。 从公司到家,来回大约十三公里的路途,主要靠走路和地铁。我们获得的数据如下:

试验6.jpg

这个实验样本产生了11个数据点,对照时间,基本上是地铁加速减速产生的加速度,加速度大小主要在5~6m/s^2。

在我们试验的几个快递样本上,超过15m/s^2的加速度出现次数不少,也有几次超过20m/s^2,甚至达到27m/s^2。快递大叔的心情……啧啧……

实验至此,快递大叔的心情大家也看了,想说的道理其实大家也都懂,易碎的该包严实,贵重的要买保险……喔不,公司的同事说了,如果万一快递大叔明天心情不好了,你们几个就去给同事收发快递吧……别说了,让我先去厕所哭会……


等等……要代码?再此之前记得先安装一下RTC的库喔!


  1. <font color="rgb(51, 51, 51)"><font face="Arial, Helvetica, sans-serif">#include <Wire.h>
  2. #include <math.h>
  3. #include <SD.h>
  4. #include <DS1307RTC.h>
  5. #include <Time.h>
  6. #include <Wire.h>


  7. byte Version[3];
  8. int8_t x_data;
  9. int8_t y_data;
  10. int8_t z_data;
  11. byte range=0x03;
  12. float divi=16;
  13. float x,y,z;

  14. File myFile;

  15. void setup()
  16. {
  17.   Serial.begin(9600);
  18.   Wire.begin();
  19.   Wire.beginTransmission(0x0A); // address of the accelerometer
  20.   // range settings
  21.   Wire.write(0x22); //register address
  22.   Wire.write(range); //can be set at"0x00""0x01""0x02""0x03", refer to Datashhet on wiki
  23.   // low pass filter
  24.   Wire.write(0x20); //register address
  25.   Wire.write(0x05); //can be set at"0x05""0x04"......"0x01""0x00", refer to Datashhet on wiki
  26.   Wire.endTransmission();
  27.   
  28.   Serial.println("Initialization SD card...");
  29.   pinMode(10,OUTPUT);

  30.     if (!SD.begin(4)) {
  31.     Serial.println("initialization failed!");
  32.     return;
  33.   }
  34.   Serial.println("initialization done.");
  35.   
  36.   
  37.   
  38. }
  39.    
  40. void AccelerometerInit()// get accelerated
  41. {
  42.   Wire.beginTransmission(0x0A); // address of the accelerometer
  43.   // reset the accelerometer
  44.   Wire.write(0x04); // Y data
  45.   Wire.endTransmission();
  46.   Wire.requestFrom(0x0A,1);    // request 6 bytes from slave device #2
  47.   while(Wire.available())    // slave may send less than requested
  48.   {
  49.     Version[0] = Wire.read(); // receive a byte as characte
  50.   }
  51.   x_data=(int8_t)Version[0]>>2;
  52.    
  53.   Wire.beginTransmission(0x0A); // address of the accelerometer
  54.   // reset the accelerometer
  55.   Wire.write(0x06); // Y data
  56.   Wire.endTransmission();
  57.   Wire.requestFrom(0x0A,1);    // request 6 bytes from slave device #2
  58.   while(Wire.available())    // slave may send less than requested
  59.   {
  60.     Version[1] = Wire.read(); // receive a byte as characte
  61.   }
  62.   y_data=(int8_t)Version[1]>>2;
  63.    
  64.   Wire.beginTransmission(0x0A); // address of the accelerometer
  65.   // reset the accelerometer
  66.   Wire.write(0x08); // Y data
  67.   Wire.endTransmission();
  68.   Wire.requestFrom(0x0A,1);    // request 6 bytes from slave device #2
  69.    while(Wire.available())    // slave may send less than requested
  70.   {
  71.     Version[2] = Wire.read(); // receive a byte as characte
  72.   }
  73.    z_data=(int8_t)Version[2]>>2;
  74.    
  75.    x=(float)x_data/divi;
  76.    y=(float)y_data/divi;
  77.    z=(float)z_data/divi;
  78.    Serial.print("X=");  
  79.    Serial.print(x);         // print the character
  80.    Serial.print("  ");
  81.    Serial.print("Y=");  
  82.    Serial.print(y);         // print the character
  83.    Serial.print("  ");
  84.    Serial.print("Z=");           // print the character
  85.    Serial.print(z);  
  86. }
  87.    
  88. void loop()
  89. { double accelerated_speed;
  90.   switch(range)  //change the data dealing method based on the range u've set
  91.   {
  92.   case 0x00:divi=16;  break;
  93.   case 0x01:divi=8;  break;
  94.   case 0x02:divi=4;  break;
  95.   case 0x03:divi=2;  break;
  96.   default: Serial.println("range setting is Wrong,range:from 0to 3.Please check!");while(1);
  97.   }
  98.   AccelerometerInit();
  99.   accelerated_speed=sqrt(x*x+y*y+z*z);
  100.   Serial.print("accelerated_speed=");
  101.   Serial.println(accelerated_speed);
  102.   if(accelerated_speed>=1)
  103.   {
  104.     //get time
  105.      tmElements_t tm;
  106.      RTC.read(tm);
  107.     //write data
  108.       myFile = SD.open("test.txt", FILE_WRITE);
  109.        if (myFile) {
  110.       Serial.print("Writing to test.txt...");
  111.       //recoder time and data
  112.       myFile.print("accelerated_speed=");
  113.       myFile.print(accelerated_speed);
  114.       myFile.print("    ");
  115.       myFile.print("time=");
  116.       myFile.print(tm.Hour);//
  117.       myFile.print(':');
  118.       myFile.print(tm.Minute);//
  119.       myFile.print(':');
  120.       myFile.print(tm.Second);//
  121.       myFile.print(':');
  122.       myFile.print(", Date (D/M/Y) = ");
  123.       myFile.print(tm.Day);
  124.       myFile.write('/');
  125.       myFile.print(tm.Month);
  126.       myFile.write('/');
  127.       myFile.print(tmYear);
  128.       // close the file:
  129.       myFile.close();
  130.       
  131. Serial.println("done.");
  132.   } else {
  133.     // if the file didn't open, print an error:
  134.     Serial.println("error opening test.txt");
  135.   }
  136.       
  137.   }
  138.   delay(100);
  139.   
  140. }
  141. void print2digits(int number) {
  142.   if (number >= 0 && number < 10) {
  143.     Serial.write('0');
  144.   }
  145.   Serial.print(number);
  146. }
  147. </font></font>
复制代码







iCl6H3OJnQ8F0yYfYlo9_7JOmhVhBQw_bGBzJhgXuFogCgAAkAcAAEpQ.jpg
kvncut800IUQ2ka1UyWOBGU84wyzlgMv3gjqv_XKXwEgCgAAkAcAAEpQ.jpg
MbgT17P91UqjVdr974hSeFyGZY_pwLcBaE9WA9bwKd4gCgAAkAcAAEpQ.jpg
发表于 2015-11-12 11:51:54 | 显示全部楼层
↓ ↓ ↓ 看这里 看这里 ↓ ↓ ↓
广告时间,想自己DIY一个小伙伴看这里啦~ 项目用到的硬件我们打包放心愿单啦!
http://www.dfrobot.com.cn/wishlist.php

回复 支持 反对

使用道具 举报

发表于 2015-11-12 12:00:36 | 显示全部楼层
Ash 发表于 2015-11-12 11:51
↓ ↓ ↓ 看这里 看这里 ↓ ↓ ↓
广告时间,想自己DIY一个小伙伴看这里啦~ 项目用到的硬件我们打包放心愿 ...

还差一个直流升压模块~可以某宝购买~其他只需要一键购买~~~
回复 支持 反对

使用道具 举报

发表于 2015-2-5 20:05:05 | 显示全部楼层
图标很清晰,数据更好。最基本的可以做中值平均,看看这个快递的平均指数如何,再进行极值分析,看看谁家瞬间暴力指数最高。再高级一点可以做特征值比对,将标准运输,上下电梯的加速度做特征拟合,过滤掉常见特征以后,可以反应出运输过程中驾驶员的驾驶习惯,分拣员的手势,快递员的暴力指数。

加上陀螺仪后,分析维度更多,通过对物品的roll,pitch,yaw的均值,可以看出物品做了多少次托马斯回旋和自由体操。再来进行一个快递奥运版。
回复 支持 2 反对 0

使用道具 举报

发表于 2015-2-4 22:24:21 | 显示全部楼层
Rockets 发表于 2015-2-4 21:49
不错啊,感觉后面的数据分析很有意思。
用电子的方法来记录运输的过程很有意思,并且图形化数据,是个有意 ...

一点一点画出来的{:3_41:}

点评

这是……偶遇熟人的节奏?  发表于 2015-12-11 08:21
Ash
哈哈哈哈哈 ( ̄▽ ̄")  发表于 2015-2-5 10:30
回复 支持 1 反对 0

使用道具 举报

发表于 2015-2-4 20:42:50 | 显示全部楼层
牛叉,顶一个。也学习了
回复 支持 反对

使用道具 举报

发表于 2015-2-4 20:58:28 来自手机 | 显示全部楼层
٩۹(๑•̀ω•́ ๑)۶ 想看SF的~
回复 支持 反对

使用道具 举报

发表于 2015-2-4 21:16:01 | 显示全部楼层
Ash 发表于 2015-2-4 20:58
٩۹(๑•̀ω•́ ๑)۶ 想看SF的~

+1         
回复 支持 反对

使用道具 举报

发表于 2015-2-4 21:43:39 | 显示全部楼层
这个项目应用 在好久前看过,做个快递暴力程度大探究吧。来个数据分析。 也是很好的Arduino 应用哦
回复 支持 反对

使用道具 举报

发表于 2015-2-4 21:49:20 | 显示全部楼层
不错啊,感觉后面的数据分析很有意思。
用电子的方法来记录运输的过程很有意思,并且图形化数据,是个有意思的玩法。
其实可以在各种领域来跨界使用。
有点像神秘旅客的感觉。
回复 支持 反对

使用道具 举报

发表于 2015-2-5 02:21:33 | 显示全部楼层
前天看到欢迎新用户 过客实验室 就知道要出大事 嘻嘻
回复 支持 反对

使用道具 举报

发表于 2015-2-5 09:49:05 | 显示全部楼层

啊,画出来的啊,你们好厉害!!!
回复 支持 反对

使用道具 举报

发表于 2015-2-5 09:50:37 | 显示全部楼层

欢迎果壳实验室玩出更多的花样来,我们拭目以待啊。
最近百度不是做了个自行车吗?
你们要不要也copy一下?
回复 支持 反对

使用道具 举报

发表于 2015-2-5 10:31:32 | 显示全部楼层
cj2q 发表于 2015-2-5 02:21
前天看到欢迎新用户 过客实验室 就知道要出大事 嘻嘻

耶嘿  被发现了 (⊙o⊙)  眼尖哦~
回复 支持 反对

使用道具 举报

发表于 2015-2-5 11:12:10 | 显示全部楼层
Ash 发表于 2015-2-4 20:58
٩۹(๑•̀ω•́ ๑)۶ 想看SF的~

我也是:D
回复 支持 反对

使用道具 举报

发表于 2015-2-5 11:17:47 | 显示全部楼层
有趣的实验!
回复 支持 反对

使用道具 举报

发表于 2015-2-5 11:25:54 | 显示全部楼层
超有趣的实验
回复 支持 反对

使用道具 举报

发表于 2015-2-6 10:20:44 | 显示全部楼层
有意思~
回复 支持 反对

使用道具 举报

发表于 2015-2-6 13:13:06 | 显示全部楼层
学习了,拜读
回复 支持 反对

使用道具 举报

发表于 2015-2-6 15:52:32 | 显示全部楼层
有饼状图吗?
回复 支持 反对

使用道具 举报

发表于 2015-2-6 18:44:09 | 显示全部楼层
Ricky 发表于 2015-2-5 20:05
图标很清晰,数据更好。最基本的可以做中值平均,看看这个快递的平均指数如何,再进行极值分析,看看谁家瞬 ...

这方案碉堡了啊,就是好贵 (*/ω\*)
回复 支持 反对

使用道具 举报

发表于 2015-2-6 23:19:15 | 显示全部楼层
有我亲自设计的MicroSD卡槽,看着好情切啊~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则 允许回帖同步到新浪微博  

  • 见习技师
  • 260
  • 1

楼主的其它帖子

推荐阅读

精华导读




公司简介| 联系我们| 小黑屋| 加入我们| 微博| 优酷| 英文网站| DF创客社区 ( 沪ICP备09038501号-4  
友情链接| 硬创邦| 花生壳社区| 模友之吧| 电子发烧友社区| 创客星球| 云汉电子社区| 电子工程网| 与非网| Arduino中文社区| 南极熊3D打印网| OneNET|

上海智位机器人有限公司  沪ICP备09038501号-4   

Powered by Discuz! X3.1

Licensed Comsenz Inc.

返回顶部 返回列表