电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
机械传动结构温度计,颠覆你的想象
分 享
扫描二维码分享
机械传动结构温度计,颠覆你的想象
DIY
arduino
创客作品
7566396fd9acf5af
关注
发布时间: 2019-07-11
丨
阅读: 2725
先上一张完成品图 ![](https://cf03.ickimg.com/bbsimages/201907/fede0270ad84e95618f1d453a84b9c23.jpg) # 正文 无意中观察到家里面使用的温度计 ![](https://cf03.ickimg.com/bbsimages/201907/34572fa9a1b94686b02edb5d2f79ecf2.jpg) 这种外观的温度计是我传统意义上对温度计的理解。而现在的厂商设计的温度计未免太没新意,用一块LED显示屏就草草了事,方方正正外观也是十分古板,与家庭氛围不和。我于是想到用传统的温度计外观,结合一些机械结构来显示温度,用同步带齿轮来传达温度的变化,成为家中的一个亮点。 ## 结构: 首先是选择材料,我之前在亚克力和椴木板上徘徊,不知道用那种材料好,但是观察过一些家庭的装修之后,发现木饰面占据了大多数,我还是觉得使用椴木层板比较好。 ![](https://cf03.ickimg.com/bbsimages/201907/9abcae8a7605650abac9474a108d82bf.jpg) 更加吻合现代的风格,并且木板更易于加工,给后面的工序也带来了便利。对于温度的显示,我想用类似3D打印机的原理,使用步进电机驱动同步带,同步带带动指针在表盘上移动,这样做保证了指针的稳定和指示温度的精确。也曾想过使用丝杆加滑台来驱动,但是由于丝杆滑台价格高昂,最终放弃。 ![](https://cf03.ickimg.com/bbsimages/201907/805817c2ac4ee40eab7ea502d7f4f086.jpg) 接着就是对于电机以及驱动部件的选择,市面上常见的步进电机就是42步进电机,其常常被使用在各种机器人或者3D打印机上,稳定性非常有保障,但是缺点是体积过于庞大,不适合温度计使用,最后经过一番挑选,选用了28BYJ48这款减速步进电机。 ![](https://cf03.ickimg.com/bbsimages/201907/48e92f3667f95b9a5155810c8ef35621.jpg) 这款步进电机体积小巧,工作电流小,使用ULN2003芯片即可驱动,价格也比42步进电机便宜,并且含有减速装置,在扭矩方面也有了保障。输出轴也是5MM的D形轴,可以兼容市面上常见的同步轮。在传动系统的选择上,使用3D打印机常用的标准件即可,我使用了16齿的GT2同步轮作为驱动轮,驱动同步带转动,从动轮方面就比较简单了,用两颗轴承即可,这样做既简单也便宜,没必要花钱去购买惰轮。同步带的松紧决定了指针的指示是否精确,于是我增加了一个张紧弹簧来保证同步带时刻都是张紧状态。 ![](https://cf03.ickimg.com/bbsimages/201907/cef1ca96349318a58a237a2b3dd14050.jpg) 指针的做法就比较多变了,我使用了一个回形针来指示温度,回形针可以牢固的夹在同步带上,不易晃动。 ## 电路: 单片机选择方面,我选择的是ArduinoUno ![](https://cf03.ickimg.com/bbsimages/201907/b51f6d30fadab3adefe25d623bab7aa1.jpg) 因为ArduinUno支持很多开源库以及传感器,所以编写程序起来也是十分简单,易于操作,相比较其他单片机需要了解各种复杂的寄存器起来,ArduinoUno只需要简单的语句即可实现很多功能。单片机性能方面,ArduinoUno所搭载的Atmega328单片机的资源也足够使用,并且有RISC精简指令集的加持,ArduinoUno足够胜任本项目。 选择好单片机之后,其他元件的选择就简单了许多,温度测量方面使用了DHT11温湿度传感器,它可以测量环境的温湿度,单总线传输数据的方式更加节省端口资源,得益于Arduino的开源环境,使用它也是十分容易,只需要一个函数即可获取温湿度信息,是制作温度计的不二之选。 步进电机的驱动模块使用ULN2003大功率达林顿晶体管阵列模块,此模块很易于找到并且价格低廉,搭配我选择的步进电机是不二之选。板载4路led指示灯可以清楚的观察到各相的工作状态。 ![](https://cf03.ickimg.com/bbsimages/201907/fb5fbdb7b4467b1c6d12f8abf58c30d2.jpg) 这里再次感谢Arduino的开源环境,各路大神早已为我们写好了此驱动模块的函数库,我们只需要调用即可。这里是设计好的电路图: ![](https://cf03.ickimg.com/bbsimages/201907/3a7f5bd328191accf1d56a9b0adc5843.jpg) 完成的结构设计以及元件之后,接下来就是设计木板的图纸了,经过一小会忙活,设计好图纸,发送给厂家切割,几天后,收到了切好的木板:![](https://cf03.ickimg.com/bbsimages/201907/9abd04ffa128f4d8daaafe387e4a98ca.jpg) 接下来就是安装了,将各个元件悉数安装到对应位置,并将线路接好: ![](https://cf03.ickimg.com/bbsimages/201907/f4ed9d891a4ea27c18fe6455de3191ff.jpg) ![](https://cf03.ickimg.com/bbsimages/201907/6af9fa9f3e987cb3dd9f10977da30716.jpg) ![](https://cf03.ickimg.com/bbsimages/201907/2601fb1d88c8869b3dc903afa2bec521.jpg) ![](https://cf03.ickimg.com/bbsimages/201907/9d22f3feb801c33280246a2a0bfe2f14.jpg) ![](https://cf03.ickimg.com/bbsimages/201907/e2ea929ba698aa18c31be7f0eb3021f3.jpg) ## 程序 ```cpp //首先我们需要引入头文件,没有这些头文件,在编程中一些函数就无法调用。 #include <dht11.h> //引用dht11温湿度传感器库文件,使得下面可以调用相关参数 #include <stepper.h> ///引用步进电机驱动库文件,使得下面可以调用相关参数 //接着依据电路图,我们来定义元件的接口。 #define DHT11PIN 6 //dht11温湿度传感器的数据输出接在ArduinoUno的6号数字引脚 Stepper myStepper(stepsPerRevolution,2,3,4,5); //步进电机驱动的输入信号接在ArduinoUno的2,3,4,5号数字引脚 dht11 DHT11; //实例化DHT11对象,便于后面读取温度使用 //接下来定义一些变量,来存储温度数据或者步进电机的位置信息 int stepsPerRevolution = 128; //步进电机每次转动步数 int temlast=0; //temlast代表上一次读取到的温度数据 int chk,tem; //chk代表读取到的温湿度数据,tem代表读取到的温度数据 //接下来就是初始化程序,里面包含了初始化温度传感器以及各个变量的代码。 void setup() { Serial.begin(9600); //设置串口波特率 pinMode(DHT11PIN,OUTPUT); //定义温湿度传感器的端口为输出 myStepper.setSpeed(50); //设置步进电机速度为50r/min delay(1000); chk = DHT11.read(DHT11PIN); //读取温湿度的值赋给chk tem=DHT11.temperature; //从DHT11对象中将温度数据分离出来 temlast=tem; //将温度值赋给存储上一次测量温度值的变量,以便接下来的比较 } //接下来就是主要循环程序,对于控制步进电机转动的方法,我使用了比较的方法,将上一次测量的温度存储起来,与当前测量的温度值比较,根据比较大小来控制步进电机转动方向,具体实现代码如下。 void loop() { chk = DHT11.read(DHT11PIN); //读取温湿度的值赋chk tem=DHT11.temperature; //从DHT11对象中将温度数据分离出来 delay(100); Serial.print("Tempeature:"); //串口打印出Tempeature: Serial.println(tem); //打印温度结果 if(tem-temlast&gt;=1) //如果当前测量温度的结果大于等于上一次测量的温度值1度 { myStepper.step(stepsPerRevolution); //步进电机正向转动 Serial.println("add"); //串口打印增加 temlast=tem; //更新上一次测量的温度值 } else if(tem-temlast&lt;=-1) //如果当前测量温度的结果小于等于上一次测量的温度值1度 { myStepper.step(-stepsPerRevolution); //步进电机反向转动 Serial.println("less"); //串口打印减小 temlast = tem; //更新上一次测量的温度值 } delay(500); //延时500ms } ``` 连接电脑,烧写代码到ArduinoUno中,打开串口监视器,根据屏幕上显示的温度数值。![](https://cf03.ickimg.com/bbsimages/201907/e76a1779ed77e67e155059124d35f102.jpg) 来调整回形针指针的位置以及张紧弹簧的位置。调整好之后,一件富有科技与艺术的温度计就做成了,有问题的朋友欢迎在留言。 ![](https://cf03.ickimg.com/bbsimages/201907/07489841e049f6571d29e11078c86603.jpg)</stepper.h></dht11.h>
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
0
)
7566396fd9acf5af
擅长:消费电子 智能硬件
关注
评论
(2)
登录后可评论,请
登录
或
注册
DLGG创客DIY
282
天前...
哪找的厂家切割?多少钱?
0
回复
发布
yoyojacky
回复
DLGG创客DIY
276
天前...
到处都能切,找个淘宝店分分钟搞定了
0
回复
发布
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交