“宝儿,去拉下窗帘吧~”

“我忙着呢,你去。”

“你离那边近,你去!”

“石头剪刀布,谁去!”

家中窗帘太多,费事费力;平时家中老人腿脚不便,开窗帘困难;想关闭窗帘,却因忙碌腾不开手; 家中有多个窗帘,费时费力!

“攻城狮”小王躺在床上深思:

如果安装电动窗帘,需要结合户型、门窗大小预留安装空间和电源接口,往往需要专业人员上门丈量确认是否符合改装要求,大大增加了安装成本。有没有不用拆?改?换?就能随心掌控家中窗帘的“神器”!

灵光一现,目前市场上出现的小型的窗帘机器人,能让普通窗帘秒变智能窗帘。何不自己动手 DIY 一个~

实现功能点

戳我,即可查看完整开发资料!

硬件方案介绍

利用涂鸦智能低功耗嵌入式 Bluetooth LE 模组作为控制单元和无线连接单元。通过照度传感器检测当前环境的光照强度,加速度传感器识别手动拽拉窗帘的状态以及电机带动窗帘运动来实现窗帘智能化开启和关闭。

1. 核心控制单元

涂鸦智能低功耗嵌入式 Bluetooth 模组基于 SoC 开发,能够实现 Bluetooth LE 直连,电机控制和传感器数据采集。

2.电源管理单元

选用 4000mHA 的可充电锂电池(3.7V)作为主供电源,在提供稳定运行保障的同时,无需另外再布电线,且当电量不足时,还可以拆卸充电。

3.照度传感器

可感应光照强度的器件主要有光敏电阻、光敏二极管和照度传感器芯片。光敏电阻和光敏二极管采集的是模拟量。光照传感器选择 TI 的 OPT3004 传感器芯片,可通过数字接口直接输出当前的光照强度值,适合在 App端实时显示光照强度值。

4.加速度传感器

ST 的 LIS2DW12 加速度传感器为 3 轴加速度传感器,能够比较在精准识别完成拉窗帘动作的水平方向上的力。

5.电机驱动

窗帘机器人的动力原理是通过转轮和窗帘导轨的摩擦力带电机器人和窗帘运动,需要比较大的扭矩而对运动速度要求没有很高。利用高速低扭矩通过齿轮减速增扭以后带动发动机,不仅能够产生很大的扭矩,而且功耗较小,符合窗帘机器人的动力需求。

窗帘机器人原理图:

窗帘机器人PCB图:

戳我,即可查看完整开发资料。

软件实现方案

窗帘机器人源代码已开源到 GitHub:

注:GitHub 具体地址通过关注“涂鸦开发者”,回复“窗帘”,即可获取哦~

下面一一对各功能的实现原理作简单说明:

1.功能实现:普通控制和百分比控制

普通控制和百分比控制都需要在已经知道窗帘长度的情况下进行。由于电机的转速是一定的,在测量窗帘长度的时候其实是测试从 0% 到 100% 需要多少时间,然后根据电机当前所处位置和要到达的位置来计算需要运行的时间,以此来实现控制窗帘机器人移动到指定位置。

实现方法:百分比控制在接收到app下发的DP点后先调用void curtain_percent_control(unsigned char current_position, unsigned char target_position) 函数使窗帘机器人向对应的方向运行,将需要运行的时间存入全局变量中,供停止任务函数使用。

void curtain_percent_control_stop_task(void)函数需要被一直执行,当检测到运行时间已达到的时候,停止电机运行,将当前位置存入到FLASH中,上报当前电机位置。

百分比控制部分代码示例:

```c voidcurtainpercentcontrol(unsignedchar current_position, unsignedchar targetposition){ unsignedlong totaltime;

2.功能实现:自动测量窗帘长度

自动测量窗帘长度实际上是测量窗帘杆子的长度,那么如何判断窗帘机器人是否到达终点是两端是测量的关键。控制电机运动的功能实现是通过获取测量得到的总时长来实现的。

判断窗帘机器人到达终点,在该硬件上有两种方法来判断:

一是通过测量电机驱动芯片中的 MOCUR 引脚,当电机堵转的时 MOCUR 引脚将会比正常运行时的电压高,通过判断该引脚电压是否发生变化可以知道电机是否发生堵转,从而确认是否到达终点。

二是通过三轴加速度传感器 lis2dw12 来判断是否到达终点。根据 lis2dw12 在硬件上的放置位置来看,判断窗帘机器人的运行状态主要依靠三轴加速度传感器中的x轴来判断。

下图为窗帘机器人在运行过程中三轴加速度传感器 x 轴的数据,静止状态基本无波动,启动后到到达终点前上下波动较大,在到达终点撞击的那一刻x轴数据明显的一个凸起的上升,到达终点后电机未停止运行可以看到x轴的数据比静止时平均要高,且数据上下浮动比运行过程中要较小。

通过上面的两种方式可以看到,使用电压比较的方式来判断是否到达终点相较于使用 lis2dw12 来判断来看是较为简单。但使用三轴加速度计 lis2dw12 可以清晰的知道当前电机处于何种运行状态。

3.功能实现:动作检测

通过观察波形可以知道,当你向某一方向拉窗帘时,总体来看虽呈波动状态,但最开始时的值与拉取的方向有关,所以该部分功能的实现是通过判断窗帘机器人被拉动后最开始的一部分数值来确定将要跑动的方向。

示例代码:

1)```c short xdatabuf[100] = {0}; unsignedint cleanxbufcount = 0; unsignedchar xdata_index = 0;

2)voidautopowertask(void){ short xaxisdata = 0; unsignedchar i = 0; unsignedchar opencount = 0, closecount = 0;

4.功能实现:光照强度显示

检测光照强度的传感器使用的是 opt3004,通过 IIC 协议,通过读取 opt3004 的 result 寄存器获取当前的光照值。

示例代码:

1、```c

2、define I2CCLKSPEED 200000

3、short lsbsizetab[] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048};

4、unsignedcharopt3004init(void){ unsignedchar deviceiddatabuf[2] = {0}; unsignedchar manufactureriddata_buf[2] = {0};

5.面板 UI

App 面板使用可以涂鸦 IoT 平台提供的公版单开帘面板。

让家中普通窗帘秒变智慧窗帘,你可远程控制开关,还能根据光照强度自动开启关闭,为家人送去便捷生活~其实并不难!各位发烧友们动起来啦~

- END -

加入我们,一起秒变智能窗帘叭!

不是吧!你还在手动拉窗帘?相关推荐

  1. 【懒人必备】智能窗帘机器人,告别手动拉窗帘——硬件设计篇

    简介:智能窗帘机器人方案,无需专业人员上门安装,使普通窗帘秒变智能窗帘. 概述 随着智能家居的深入拓展,智能窗帘凭借成熟的技术和产品,逐步成为了智能家居家庭中的标配,在家装智能化市场有很高的应用价值. ...

  2. 【懒人必备】智能窗帘机器人,告别手动拉窗帘——软件功能实现篇

    简介:智能窗帘机器人方案,无需专业人员上门安装,使普通窗帘秒变智能窗帘. 本demo的GitHub仓库链接

  3. python 获取用户ip_Python爬虫教程:你还在苦苦拉票吗?刷票小程序案例原理剖析!...

    你还在苦苦拉票吗? 前言 剖析投票原理 处理思路 具体实战 主要流程 具体细节python 代码实例python 具体细节java 代码实现java 总结 点击此处,获取海量Python学习资料! 前 ...

  4. 都9012年了,你还在手动部署代码吗(二)

    前言 在写完基于 Webhooks 的"第一篇<都9012年了,你还在手动部署代码吗>"之后,有同学评论到"至少你得用个 docker 啊"&quo ...

  5. 床帘机器人_“拉窗帘”机器人惊现中国,而未来中国机器人的发展,绝不止这些...

    原标题:"拉窗帘"机器人惊现中国,而未来中国机器人的发展,绝不止这些 " 2013年中国成为了全球最大的工业机器人市场 文/傅国庆 第一台工业机器人在1959年由美国人率 ...

  6. html5 拉窗帘 效果,jQuery和CSS3超酷3D拉窗帘式滚动导航特效

    这是一款效果炫酷的jQuery和CSS3 3D拉窗帘式导航特效.该特效使用CSS transformations 和 jQuery使两块"窗帘"沿Z轴方向模拟被拉开的效果. HTM ...

  7. excel修改列名_听说你还在手动合并Excel,看看这个吧!?

    Excel合并的应用场景 工作中,常常遇到将多个Excel进行合并的任务.例如,将各位参会人员的报名表合并成一张总的参会人员表,或是将不同客户的需求明细合并为一种总表. 常规的做法是新建一个空白的Ex ...

  8. 微信小程序禁止刷新之后苹果端还可以下拉的问题

    一.问题描述 最近在做一个小程序项目,需要禁止下拉刷新,于是在page.json里面添加了这段话 "enablePullDownRefresh":false 全局关闭下拉刷新,这段 ...

  9. 还在手动启动neo4j?快来使用bat批处理自动启动neo4j,之后也不用配置环境了(社区版)

    还在手动启动neo4j?快来使用bat批处理自动启动,之后不用配置环境了(社区版) 1 start_neo4j.bat 总共创建两个bat一个 开启 start,一个关闭 stop [1]在neo4j ...

最新文章

  1. sony service tel
  2. 白话Elasticsearch68-ES生产集群部署重要的操作系统设置
  3. 操蛋的linux改mysql密码(1054和1819错误)
  4. jsonpath的用法
  5. VTK:循环收缩用法实战
  6. 字符串左旋问题及判断一个字符串是否由另一个字符串左旋得到
  7. MapReduce的API介绍
  8. iOS开发之oc(二十)--Foundation(5)NSDictionary
  9. Android如何使用WebView访问https的网站
  10. 判断服务是否开启,应用是否安装,并安装应用
  11. I.MX6 CAAM
  12. python闭包有什么作用_闭包在实际开发中有什么用?
  13. python3.7帮助文档,文档说明 · Python3.7.3官方文档 简体中文 · 看云
  14. 安卓版无线投屏服务器,无线乐播app最新版安卓版
  15. highcharts 开发笔记
  16. u盘 安装win11 提示找不到 install.wim 文件 解决方法
  17. Java实现内存分配算法 FF(首次适应算法) BF(最佳适应算法)
  18. 计算机c程序题孔融让梨,幼儿园大班语言游戏教案《孔融让梨》含PPT课件.doc
  19. 多年Excel使用经验汇总
  20. Firefox 48 beta和E10S发布

热门文章

  1. 【Python爬虫项目实战二】Chatgpt还原验证算法-解密某宝伪知网数据接口
  2. EPICS IOC Shell
  3. Ubuntu强制修改root密码
  4. python羊车门问题_羊车门问题简析
  5. 精选免费论文翻译工具
  6. 输入一个整数判断它是奇数还是偶数
  7. 字节跳动疯狂挖人,校招平均年薪30万,我还有机会吗?
  8. 为什么苹果的官网看上去这么美
  9. C++字符串转换(stoi;stol;stoul;stoll;stoull;stof;stod;stold)
  10. 微信小程序 —— 图片自适应后去掉底部的白边