以arduino为下位机,控制加热器和传感器。将读取的传感器数据上传到上位机。上位机是安装了ros的电脑或树莓派,通过获取到温度的变化情况控制加热器。
0.代码
github:https://github.com/zhangjiali1201/temp_control
arduino_exercise是感热灯的代码。
arduino_ntc是ros_arduino_bridge对应的下位机代码。
1.前言
使用ros开源包ros_arduino_bridge进行ros和arduino之间的通信。关于ros_arduino_arduino相关的实验,见之前的博客ros_arduino_bridge控制舵机。
使用热敏电阻的热敏灯实验,见之前的博客arduino学习笔记6 感热灯。
2.传感器
将热敏电阻用于测温控温装置是很常见的用法。热敏电阻本身范畴也比较大,从狭义上的热敏电阻NTC PTC,热电偶TC到薄膜电阻RTD等都算。
我手头也没有多少可用的元器件,只有好久以前买arduino组件的时候附带的两个负温度系数热敏电阻,具体型号不可考,也没有附带应用文档。
NTC热敏电阻会随着温度升高而减小电阻。
3.加热器
加热器暂时无可用器件,待定。暂时以输出1代表加热,输出0表示停止加热。
4.下位机代码
按常理,下位机部分代码应该根据传感器的技术手册所标明的控制方式编写和获取数据。
这里缺少参考,就只简单的获取一下数据。接线方式和传感器控制部分代码与之前的博客arduino学习笔记6 感热灯相同。
下位机代码比较简单,主要就是三部分,主程序、传感器和串口通信。具体见代码,不复杂。
5.上位机代码
首先下载一下ros_arduino_bridge,并切换到对应的分支,我这里系统用的是kinetic,所以切换到kinetic-devel.
$ git clone https://github.com/hbrobotics/ros_arduino_bridge.git
$ git checkout kinetic-devel
检查一下分支。
zjl@zjl-X550ZE:~/temp_control/ros_arduino_bridge$ git branch
indigo-devel
* kinetic-devel
然后是修改主节点node.py(ros_arduino_bridge/ros_arduino_python/nodes)
在八十行左右添加一个获取温度的服务。
# A service to get temperature
rospy.Service('~getTemperature', GetTemperature, self.GetTemperatureHandler)
440行左右添加:
def GetTemperatureHandler(self, req):
value = self.controller.get_temperature()
return GetTemperatureResponse(value)
修改驱动代码arduino_driver.py(ros_arduino_bridge/ros_arduino_python/src/ros_arduino_python)
340行左右增加:
def get_teperature(self): #获取温度传感器的结果
return self.execute_ack('t')
380行左右:
rospy.loginfo("Now print temperature sensors value:")
values = myArduino.get_temperature()
distances = np.array([values[0]])
rospy.loginf(distances)
创建srv文件
---
float32 temp