极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 135791|回复: 45

糊涂塔克学习笔记02 Arduino+Labview (下)

[复制链接]
发表于 2012-6-26 11:16:52 | 显示全部楼层 |阅读模式
本帖最后由 Muller_r 于 2012-6-26 11:26 编辑

大家好,上次我们学习了用Labview为Arduino开发的Interface开发简单的温度计,这次我来教大家用另外一种方法来开发温度计,这次我们使用Arduino控制DS18b20来读取温度。

这个方法相比较之前讲的Labview Interface for Arduino 的方法优点是:可以控制的传感器更多,主要是通过控制串口来控制Arduino;小缺点是:相比较Interface的方法稍微复杂一些。

关于Labview和Arduino之间的互动开发,大家也可以去参考一下宜昌城老张的博客
http://www.eefocus.com/zhang700309/blog/cate_5113_0.html

言归正传,对于还没有安装好Labview程序和相关插件的请参考我之前的帖子中第一部分:准备
糊涂塔克学习笔记02 Arduino+Labview(上)

好的,现在我们假设已经把相关的程序和插件都安装好了,现在我们要正式开始做温度计。

一、原理介绍

这次我们需要用到的函数叫VISA函数,VISA函数是Labview里主要用于处理串口通信的函数,也就是说我们可以通过VISA函数和Arduino通信,这样我们就可以用Labview给串口传指令,然后通过VISA把这个指令传给Arduino,Arduino再根据之前自己编好的程序驱动相关的传感器。大家可以发现,这样一来相比较Labview Interface for Arduino 的那个方法,用VISA串口通信的方法的扩展性要高得多。

二、Labview 编程

1. 让我们先打开Labview2011,点击 新建VI


2. 选择程序框图,为了方便编程我们把程序框图最大化,在最上面的菜单栏里我们点开 查看-->函数面板,找到
VISA配置串口,这个函数在 仪器I/O-->VISA-->高级VISA-->总线/接口配置-->串口-->VISA配置串口


找到后我们把它拖到程序框图里。

3. 然后我们再找一个函数:VISA读取,这个函数在 仪器I/O-->VISA-->VISA读取


同样我们把它拖到程序框图里。

4. 接着我们开始开始给这两个函数添加控件,我们先来看看这两个函数的介绍


我们可以看到这个函数主要是用来初始化串口的,需要设置的参数里比较重要的是三个:
(1)VISA资源名称,这个主要是用来设置哪个COM口的。
(2)波特率(9600),这个是设置和Arduino通信的频率,一般默认是9600。
(3)数据比特(8),这个是设定的变量的位数,一般只是传输一些简单的数据或者指令的话,设到8位就够用了。

其他的一些控件参数我们并不一定会用到,不设也可以



这个函数主要的功能是读取从Arduino那里发过来的数据,并显示到前面板上去,这里我们同样要设置三个控件参数:
(1)VISA资源名称,这个和前一个函数的VISA资源名称相连,里面设置的还是COM口
(2)字节总数,参考前一个函数中的数据比特,我们把字节总数也设到8
(3)读取缓冲区,这个其实是一个输出控件,把读取到的值显示出来,注意这里显示的格式是字符串

OK,现在我们通过即时帮助知道了这两个函数是怎么定义的了,我们开始给他们添加控件和参数,添加的方法同样在
糊涂塔克学习笔记02 Arduino+Labview(上)里有详细描述。



5. 定义完控件参数后,我们照例给函数加一个While循环(编程-->结构-->While循环)和简易错误处理器(编程-->对话框与用户界面-->简易错误处理器


6. 现在我们把VISA资源线(粉红色)和错误线(土黄色)连接起来


7. 这样Labview端的程序就编写完了,其实还是挺简单的,那让我们来看看前面板


我们可以看到,用户可以输入哪个COM口还有通信的比特率,温度显示的结果用数值显示出来

8. 如果我们想给这个小仪器加一些小功能,用曲线来显示温度的话我们可以加一个画图函数,这里需要注意的是VISA读取这个函数输出的是一个字符串,如果我们想作图我们需要一个字符串转数值的函数,然后再用一个作图函数画出曲线,具体的程序就是这样的


9. 最后我们把前面板美化一下就大功告成了


三、Arduino部分
1. 硬件,我们需要一块Arduino开发板,没有型号要求,一块DS18b20温度传感器芯片(购自奥松机器人)
   

接线方面 5V GND PIN12

2. 程序
  1. #include <DallasTemperature.h>

  2. DallasTemperature tempSensor;

  3. void setup(void) {
  4.   Serial.begin(9600);
  5.   tempSensor.begin(12); // DS18B20接在数字I/O第12号引脚上
  6. }

  7. void loop(void) {
  8.     // 检查温度传感器是否正常工作
  9.     switch(tempSensor.isValid())
  10.     {
  11.         case 1:
  12.             Serial.println("Invalid CRC");
  13.             tempSensor.reset(); // 重置温度传感器
  14.             return;
  15.         case 2:
  16.             Serial.println("Not a valid device");
  17.             tempSensor.reset(); // 重置温度传感器
  18.             return;
  19.     }

  20.   // 从DS18B20读取温度值
  21.   Serial.print(tempSensor.getTemperature());
  22.   Serial.print("C");
  23.   Serial.println();
  24. }
复制代码
四、小结

到此 糊涂塔克的Arduino+Labview的学习笔记就到此结束了,仔细看一下的话其实发现做一个小设备其实还是不难的,特别是学会了VISA函数后,就发现用Labview控制Arduino和以前用Serior Monitor控制Arduino是一样的。希望这个教程能帮助初学者快速入门。谢谢大家~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2012-6-26 11:39:32 | 显示全部楼层
不错!Arduino是电子积木,Labview是软件积木!
回复 支持 反对

使用道具 举报

发表于 2012-6-26 12:14:35 | 显示全部楼层
直接上visa   更通用啊  功能更多
回复 支持 反对

使用道具 举报

发表于 2012-6-26 21:14:26 | 显示全部楼层
咋回事,温度没有显示出来。
回复 支持 反对

使用道具 举报

发表于 2012-6-27 00:05:01 | 显示全部楼层
。。。你那个模块是数字的???我只有个热敏电阻。。。。也是三只脚的。不过是模拟的。。。。偶晕,可以用么??
回复 支持 反对

使用道具 举报

发表于 2012-6-27 08:04:49 | 显示全部楼层
要么就是感觉不一样,我反而觉得类C的语言类的反而简单和直接!LabView这么多菜单看得我头晕那。。。。。。不过功能看上去确实也很强很强!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-6-27 08:49:32 | 显示全部楼层
宜昌城老张 发表于 2012-6-26 21:14
咋回事,温度没有显示出来。

啊?是不是比特率不对(刚才发现教程里前面板上的比特率没调,应该是9600)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-6-27 08:51:18 | 显示全部楼层
darkorigin 发表于 2012-6-27 00:05
。。。你那个模块是数字的???我只有个热敏电阻。。。。也是三只脚的。不过是模拟的。。。。偶晕,可以用么? ...

热敏电阻的话原理也是一样的,你用Arduino把热敏电阻的温度结果读出来,发送到串口,Labview去读串口显示温度
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-6-27 08:52:40 | 显示全部楼层
拾瑞 发表于 2012-6-27 08:04
要么就是感觉不一样,我反而觉得类C的语言类的反而简单和直接!LabView这么多菜单看得我头晕那。。。。。。不 ...

怎么说呢,其实对我们开发者来说,直接控制Arduino当然效率更高,用Labview其实主要的作用是做一个用户界面,是给别人看的
回复 支持 反对

使用道具 举报

发表于 2012-6-27 09:01:38 | 显示全部楼层
Muller_r 发表于 2012-6-27 08:52
怎么说呢,其实对我们开发者来说,直接控制Arduino当然效率更高,用Labview其实主要的作用是做一个用户界 ...

人机交互界面不仅给别人看,而且也给自己操作带来方便。单纯地搞Arduino电子趣味实验,空间不大,还是要逐渐地向它的外延扩展。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-6-27 09:10:23 | 显示全部楼层
宜昌城老张 发表于 2012-6-27 09:01
人机交互界面不仅给别人看,而且也给自己操作带来方便。单纯地搞Arduino电子趣味实验,空间不大,还是要逐 ...

嗯,说得有道理,可能我现在Labview学得还不熟,以后熟练了应该就觉得很方便了
回复 支持 反对

使用道具 举报

发表于 2012-6-27 11:07:04 | 显示全部楼层
久违了Labview,大学毕设是做这个,到现在有块10年没摸过了,哈哈
回复 支持 反对

使用道具 举报

发表于 2012-6-27 12:39:42 | 显示全部楼层
简单易懂,支持原创!
回复 支持 反对

使用道具 举报

发表于 2012-7-1 23:30:19 | 显示全部楼层
Muller_r 发表于 2012-6-27 08:51
热敏电阻的话原理也是一样的,你用Arduino把热敏电阻的温度结果读出来,发送到串口,Labview去读串口显示 ...

难道是我理解错?
Labview是包含单片机软件的吧。。。如果是带的,那么读取的代码就是自带的。不太好弄吧?呵呵
如果自己写单片机代码,那么会不会导致上位机通讯异常。。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-2 10:21:20 | 显示全部楼层
darkorigin 发表于 2012-7-1 23:30
难道是我理解错?
Labview是包含单片机软件的吧。。。如果是带的,那么读取的代码就是自带的。不太好弄吧 ...

呃...你是想用Labview Interface for Arduino做还是用VISA做?
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-25 12:58 , Processed in 0.042278 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表