以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)
在80行左右增加一个获取温度的服务。
# 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