设为首页收藏本站

模拟键盘、自动填写Excel的数据记录仪

virtualwiz 发表于 2016-5-29 23:28:22 | 显示全部楼层 [复制链接]
15 3938
LZ是物理实验迷。前段时间躺在床上开脑洞的时候,想到一个东西
http://www.dfrobot.com.cn/community/thread-14877-1-1.html

观测各种物理现象的时候经常要测一些数据。用Arduino+传感器这一组合是个非常不错的方法。
  • 比大多数商品Data Logger便宜很多
  • 比仪表+手抄的方法方便很多

然而以前,如果需要记录数据,LZ常用两种方法
  • 串口+Labview,用上位机程序记录数据
  • 数据保存到SD卡中,测完后再读出处理



于是LZ就做了这么个东西,通过传感器测得数据,自动记录到Excel中,用的是Leonardo的模拟键盘协议。

CM160528-223723002.gif





材料清单


下面LZ做的这个实验超级简单,任务是研究一杯开水冷却至室温的温度变化曲线。



IMG_20160529_140422.jpg IMG_20160529_140440.jpg IMG_20160529_142645.jpg



  • 将Leonardo接好传感器。按照DS18B20手册上的说明,DS18B20的数据线是开漏输出的,需要与VCC之间接一个较强的上拉(2K欧姆)。
  • 下载LZ提供的代码。
  • 电脑上打开Excel,选中A1单元格(LZ实测Windows自带的记事本也可以~如果你想保存成纯文本的)
  • USB连上板子,数据收集开始
CM160529-143257001.gif


大约20分钟后,水也基本上冷却啦~直接拔掉Leonardo停止收集数据

然后就可以画图咯~~Excel大家肯定都会用吧~
LZ没有购买微软的Excel,用的是开源免费的LibreOffice Calc代替。当然功能是类似的


3.PNG 1.PNG 2.PNG f.PNG

曲线好像画得不太好,LZ正好没玩过瘾。重新采集了一次

捕获.PNG

还不错吧






送上代码,供大家参考~

  1. #include <Keyboard.h>
  2. #include <OneWire.h>

  3. #define NUMBER_OF_SENSORS 1
  4. #define PREHEAT_TIME 3000

  5. #define StatusLED 13
  6. OneWire  ds(A0);

  7. unsigned int Sample_Number = 1;
  8. float Sample_Value[NUMBER_OF_SENSORS];

  9. void Sensor_Init()
  10. {
  11.   pinMode(A0, INPUT);
  12. }

  13. void Take_Sample()
  14. {
  15.   byte i;
  16.   byte present = 0;
  17.   byte type_s;
  18.   byte data[12];
  19.   byte addr[8];
  20.   float celsius, fahrenheit;
  21.   ds.search(addr);
  22.   type_s = 0;
  23.   ds.reset();
  24.   ds.select(addr);
  25.   ds.write(0x44, 1);        // start conversion, with parasite power on at the end

  26.   delay(1000);     // maybe 750ms is enough, maybe not
  27.   // we might do a ds.depower() here, but the reset will take care of it.

  28.   present = ds.reset();
  29.   ds.select(addr);
  30.   ds.write(0xBE);         // Read Scratchpad

  31.   for ( i = 0; i < 9; i++) {           // we need 9 bytes
  32.     data[i] = ds.read();
  33.   }

  34.   unsigned int raw = (data[1] << 8) | data[0];
  35.   if (type_s) {
  36.     raw = raw << 3; // 9 bit resolution default
  37.     if (data[7] == 0x10) {
  38.       // count remain gives full 12 bit resolution
  39.       raw = (raw & 0xFFF0) + 12 - data[6];
  40.     }
  41.   } else {
  42.     byte cfg = (data[4] & 0x60);
  43.     if (cfg == 0x00) raw = raw << 3;  // 9 bit resolution, 93.75 ms
  44.     else if (cfg == 0x20) raw = raw << 2; // 10 bit res, 187.5 ms
  45.     else if (cfg == 0x40) raw = raw << 1; // 11 bit res, 375 ms
  46.     // default is 12 bit resolution, 750 ms conversion time
  47.   }
  48.   celsius = (float)raw / 16.0;
  49.   fahrenheit = celsius * 1.8 + 32.0;
  50.   Sample_Value[0] = celsius;
  51. }

  52. void setup()
  53. {
  54.   Sensor_Init();
  55.   Keyboard.begin();
  56.   delay(PREHEAT_TIME);
  57. }

  58. void loop()
  59. {
  60.   digitalWrite(StatusLED, HIGH);
  61.   Take_Sample();
  62.   digitalWrite(StatusLED, LOW);
  63.   Keyboard.print(Sample_Number);
  64.   for (char cyc = 0; cyc < NUMBER_OF_SENSORS; cyc++)
  65.   {
  66.     Keyboard.print("\t");
  67.     Keyboard.print(Sample_Value[cyc]);
  68.   }
  69.   Keyboard.print("\n");
  70.   Sample_Number += 1;
  71. }
复制代码

还有一个版本,用来同时采集多路数据。程序中采集的是A0~A5通道模拟电压,编程的时候考虑了移植其他传感器,便于改写。
Data2Excel_v0_1.zip (1.79 KB, 下载次数: 18)
IMG_20160529_140417.jpg
发表于 2016-5-30 13:47:47 | 显示全部楼层
很实用的技巧
回复 支持 反对

使用道具 举报

发表于 2016-5-30 17:51:48 | 显示全部楼层
想起来以前上学做社会科学实验,要录几百份问卷,要是做个图像识别的,加上自动翻页的,再加上自动记录到Excel中的功能,省事儿好多呀~

而且貌似很多兼职都是做这个的,这是要发了呀
回复 支持 反对

使用道具 举报

发表于 2016-5-30 19:54:55 | 显示全部楼层
其实有个技巧,在excel中,文本文件,如果用英文半角逗号结尾,保存为csv文件,就可以在excel中以表格形式表示。
大家可以试试。
回复 支持 反对

使用道具 举报

发表于 2016-5-31 08:47:57 | 显示全部楼层
好牛掰啊 的项目 每个都是精品
回复 支持 反对

使用道具 举报

发表于 2016-6-1 06:58:41 | 显示全部楼层
Ash 发表于 2016-5-30 17:51
想起来以前上学做社会科学实验,要录几百份问卷,要是做个图像识别的,加上自动翻页的,再加上自动记录到Ex ...

图像识别是瓶颈,貌似要强大的计算能力和算法。否则上海拍牌验证码分分钟被破解了。
回复 支持 反对

使用道具 举报

发表于 2016-6-1 07:05:57 | 显示全部楼层
楼主可以开2个Excel窗口,一个输入数据,一个画图表。图表的数据范围事先定义好(比如1到400链接到数据窗口),然后打开你这程序。就会看到图表随着数据输入,自动再画,更好玩!
回复 支持 反对

使用道具 举报

发表于 2016-6-3 09:18:35 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

发表于 2016-6-3 12:56:29 | 显示全部楼层
Rockets 发表于 2016-5-30 19:54
其实有个技巧,在excel中,文本文件,如果用英文半角逗号结尾,保存为csv文件,就可以在excel中以表格形式 ...


这样数据记录到SD卡就好处理多了,谢谢Rockets分享

捕获.PNG
回复 支持 反对

使用道具 举报

发表于 2016-6-3 12:57:40 | 显示全部楼层
Ash 发表于 2016-5-30 17:51
想起来以前上学做社会科学实验,要录几百份问卷,要是做个图像识别的,加上自动翻页的,再加上自动记录到Ex ...

批改试卷,扫描答题卡就是这样哒
回复 支持 反对

使用道具 举报

发表于 2016-6-3 12:58:10 | 显示全部楼层
svw 发表于 2016-6-1 07:05
楼主可以开2个Excel窗口,一个输入数据,一个画图表。图表的数据范围事先定义好(比如1到400链接到数据窗口 ...

对哦这样好玩,我试试
回复 支持 反对

使用道具 举报

发表于 2016-6-4 17:14:46 | 显示全部楼层
DFRduino UNO R3也可以做这个实验吧
回复 支持 反对

使用道具 举报

发表于 2016-6-4 20:42:03 | 显示全部楼层
jqt 发表于 2016-6-4 17:14
DFRduino UNO R3也可以做这个实验吧

很遗憾,正常情况下UNO是不行的,因为模拟键盘用到了Leonardo芯片的USB通信这一功能,而UNO虽然有USB口,但是是转换成UART串口进行通信的。

当然如果你是高级玩家,手上有AVR ISP工具,而且使用的是正品DFRobot UNO,也是可以用特殊方法实现这一功能的。过段时间我会写个教程
回复 支持 反对

使用道具 举报

发表于 2016-6-5 17:05:30 | 显示全部楼层
virtualwiz 发表于 2016-6-4 20:42
很遗憾,正常情况下UNO是不行的,因为模拟键盘用到了Leonardo芯片的USB通信这一功能,而UNO虽然有USB口, ...

很期待楼主的教程
回复 支持 反对

使用道具 举报

发表于 2017-4-11 15:09:17 | 显示全部楼层
楼主,请问是有DFRobot Leonardo这块板就能自动收集数据了吗?还需不需要对其进行调试?
回复 支持 反对

使用道具 举报

发表于 2017-4-12 21:22:28 | 显示全部楼层
请问楼主代码是怎么用的?尴尬
回复 支持 反对

使用道具 举报

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

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

  • 版主
  • 3206
  • 54
  • 蘑菇人勋章

    蘑菇人勋章

  • 活跃会员

    活跃会员

  • 版主限定

    版主限定

推荐阅读

精华导读




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

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

Powered by Discuz! X3.1

Licensed Comsenz Inc.

返回顶部 返回列表