大家好,又见面了,我是你们的朋友全栈君。
自从之前做了个智能插排后,近期事忙,也就没时间搞新东西(其实是懒),最近突发奇想,要不搞个智能窗帘算了,上某宝搜了一下,这玩意还挺贵,后来想想,算了,不如自己开发一个算了,顺便练练手,以后连上我之前开发的控制端,还可以统一控制。
好事多磨,由于手头工具材料有限,很多部件根本没有现成的可以用,只能自己想办法弄,真羡慕那些创客工作室,可以自己3D打印需要的部件,这样更能做出满意的作品,牢骚不说了,有条件要上,没条件自己创造条件也一样要上~~~~
先来说说用到的零件
首先是装窗帘用的铝材滑轨、滑轮、安装码之类的,这个直接在某宝淘就好,也不是很贵,一般商家都会配一套现成的给你。然后是线材,一些杜邦线,还需要一些长点的细线,用来进行模块控制,我直接用手头上有的跳线用的细线,太细了,容易断,可以用其它的细电线。这里主要是用于实验和方案研究,所以为方便编程和调试,我这里使用的控制板是某宝买的那种小黄板,上面已经焊接了电源和一些led灯,并引出了gpio接口。还有就是电机控制模块,我这里用的是以前智能小车上的L298N。还有就是需要一些亚克力板、同步带、同步轮、18650电池盒、还有就是小车用的那种黄色电机以及M3的螺丝螺母,还有就是手头需要一些必备的工具,小电钻、电烙铁之类的,下面是一些材料的照片。
一、硬件部分
首先是硬件组装,之前有考虑过小体积的N20减速电机来做动力,后来看了一下同步轮的尺寸,轴径差太远,不好组装,所以用了智能小车的那个黄色电机,接上12V的供电,扭力杠杠的,带动窗帘应该问题不大。其实硬件部分也没啥科技含量,主要的问题在于很多部件没有现成的,需要自己动手做,手头只有亚克力板,凑合用了,由于没有方便的切割工具,切割这种厚的亚克力手都快磨烂了。下面是电机固定的一些亚克力部件。
电机跟同步轮同步带的固定基本上就靠亚克力板和螺丝,窗帘两端需要装两个带柄的触控开关,用于停止电机,一开始手头没有,用了两个废鼠标上面的拆下来的微动开关,由于触点太小,实验失败。后来还是乖乖淘宝淘了几个换上了,用哥两好(AB胶)和亚克力固定,如下图。
上面的是失败的,下面的是后来重新买的。还有一个比较难的部件就是动力滑轮,就是跟随同步带推拉窗帘的,这个部件设计了好久,测试了好几个方案效果都不好,一开始用亚克力板黏上滑轮做了一个,因为轨道尺寸不大,使用起来不是太顺畅,后来经过几次反复改造,最终直接用绳子绑上完事了,如果有3D打印的条件就好了,打印一个部件B格会高很多,反正凑合着用吧。
上面两张是一开始的方案,不过不太好用,后来直接用下面的方式拿绳子绑上固定了,这绳子是不是有点眼熟,没错就是绑粽子用的,机械部分,大概就是这样了,也没啥好说的,这里主要来说说控制部分。
控制部分的思路是使用ESP8266模块通过TCP协议接收电脑传输过来的指令,控制L298N来操纵电机的正反转来达到打开关闭窗帘的功能,微控开关主要是告知控制端窗帘是否已经打开关闭完毕,当窗帘到轨道两端后,停止电机。
这里只用到了L298N的两路中的一路,通过控制IN1、IN2的高低电平来控制电机的正反转。ESP8266主要用到四个GPIO口,GPIO3、GPIO4接微控开关,接受停止信号,GPIO12、GPIO13接L298N的IN1、IN2,根据控制指令输出高低电平,电路图如下。
灵魂画手的图大家凑合看吧,电路也是很简单,先凑合用,以后将电源重新设计一下。以下是实物图。
控制电路部分也就这样了,因为本身客户端功能也比较简单,主要也就是接受指令执行GPIO控制,就没有再使用单片机进行逻辑处理了,直接使用esp8266的mcu控制,然后剩下的就是代码部分了。
二、软件部分
这里软件部分就不提供完整的代码了,就将其中用到的一些要点跟大伙提一下,里面用到的代码其实也不复杂,自己上官网或者百度一下,里面涉及到的大部分代码都能找到。
首先是说说网络控制部分,我这里用的是TCP协议进行通信,服务端用的是有人科技有限公司的串口转网络调试助手,8266客户端配置好连接的服务器IP地址和服务端口后,通过TCP协议与服务端连接,服务端发送指令控制8266的GPIO的高低电平,然后通过L298N模块对电机进行控制。
里面主要涉及到的技术内容包括网络的配置及连接(可参考乐鑫官网的案例代码)、8266GPIO的输出及输入状态的获取技术(可参考本人之前整理的《关于ESP8266 GPIO中断使用的总结》文章,里面涉及到了这方面的内容)、定时器的使用(乐鑫官网网络连接代码里面涉及到了这一部分内容,并结合官方的SDK开发文档)、L298N的控制(没啥好说的,度娘很多资料)
这里说一下软件开发中遇到的一些问题,由于本人连接网络部分参考了官方的案例代码,代码中使用了定时器来获取连接,本来微动开关控制部分打算用中断来实现的,测试发现单独使用中断没有问题,但是集成到我的代码里面后,一直没法正常工作,不知道是不是跟里面的定时器有冲突,后来也改用了定时检测的方式来做,虽然做法不是太优雅,但是也算实现了功能,日后再做测试改进,其它的就真的没啥了,倒是双手割亚克力板割得痛不欲生。
有兴趣的朋友也可以加入企鹅群(254267969)一起学习讨论。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/152465.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...