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

2016-05-292.1万
精华项目
AI 快速预览详细 收起
本文介绍了一个基于Arduino Leonardo和DS18B20温度传感器的数据记录仪项目。该项目通过模拟键盘协议,自动将传感器数据记录到Excel中,适用于物理实验和数据采集。材料清单包括DFRobot Leonardo、Screw shield V3接线柱扩展板和DS18B20数字温度传感器。实验任务是研究一杯开水冷却至室温的温度变化曲线。通过提供的代码,用户可以轻松实现数据自动记录功能。
LZ是物理实验迷。前段时间躺在床上开脑洞的时候,想到一个东西
https://mc.dfrobot.com.cn/thread-14877-1-1.html

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

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



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

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





材料清单


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



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



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


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

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


模拟键盘、自动填写Excel的数据记录仪图7模拟键盘、自动填写Excel的数据记录仪图5模拟键盘、自动填写Excel的数据记录仪图6模拟键盘、自动填写Excel的数据记录仪图8

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

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

还不错吧






送上代码,供大家参考~
  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
效果如下
模拟键盘、自动填写Excel的数据记录仪图1


关键词:Arduino Leonardo 模拟键盘 DS18B20 数据采集器

IMG_20160529_140417.jpg (288.82 KB, 下载次数: 5768)

Arduino Leonardo · 自动填写Excel的数据记录仪_image_3.webp

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(9)
极目楚天舒
极目楚天舒
请问楼主代码是怎么用的?尴尬:(
极目楚天舒
极目楚天舒
楼主,请问是有DFRobot Leonardo这块板就能自动收集数据了吗?还需不需要对其进行调试?
jqt
jqt
DFRduino UNO R3也可以做这个实验吧
jqt
jqt回复virtualwiz
很期待楼主的教程
virtualwiz
virtualwiz
作者
回复jqt
很遗憾,正常情况下UNO是不行的,因为模拟键盘用到了Leonardo芯片的USB通信这一功能,而UNO虽然有USB口,但是是转换成UART串口进行通信的。
当然如果你是高级玩家,手上有AVR ISP工具,而且使用的是正品DFRobot UNO,也是可以用特殊方法实现这一功能的。过段时间我会写个教程
dsweiliang
dsweiliang
感谢分享
svw
svw
楼主可以开2个Excel窗口,一个输入数据,一个画图表。图表的数据范围事先定义好(比如1到400链接到数据窗口),然后打开你这程序。就会看到图表随着数据输入,自动再画,更好玩!
virtualwiz
virtualwiz
作者
回复svw
对哦这样好玩:lol,我试试
qq815076543322
qq815076543322
好牛掰啊 的项目 每个都是精品
微笑的rockets
微笑的rockets
其实有个技巧,在excel中,文本文件,如果用英文半角逗号结尾,保存为csv文件,就可以在excel中以表格形式表示。
大家可以试试。
virtualwiz
virtualwiz
作者
回复微笑的rockets
这样数据记录到SD卡就好处理多了,谢谢Rockets分享
Ash1
Ash1
想起来以前上学做社会科学实验,要录几百份问卷,要是做个图像识别的,加上自动翻页的,再加上自动记录到Excel中的功能,省事儿好多呀~
而且貌似很多兼职都是做这个的,这是要发了呀
virtualwiz
virtualwiz
作者
回复Ash1
批改试卷,扫描答题卡就是这样哒:lol
svw
svw回复Ash1
图像识别是瓶颈,貌似要强大的计算能力和算法。否则上海拍牌验证码分分钟被破解了。
gada888
gada888
很实用的技巧
- 没有更多了 -