不是吧!你還在手動(dòng)拉窗簾?
“寶兒,去拉下窗簾吧~”
“我忙著呢,你去?!?/p>
“你離那邊近,你去!”
“石頭剪刀布,誰去!”
家中窗簾太多,費(fèi)事費(fèi)力;平時(shí)家中老人腿腳不便,開窗簾困難;想關(guān)閉窗簾,卻因忙碌騰不開手; 家中有多個(gè)窗簾,費(fèi)時(shí)費(fèi)力!
“攻城獅”小王躺在床上深思:
如果安裝電動(dòng)窗簾,需要結(jié)合戶型、門窗大小預(yù)留安裝空間和電源接口,往往需要專業(yè)人員上門丈量確認(rèn)是否符合改裝要求,大大增加了安裝成本。有沒有不用拆?改?換?就能隨心掌控家中窗簾的“神器”!
靈光一現(xiàn),目前市場上出現(xiàn)的小型的窗簾機(jī)器人,能讓普通窗簾秒變智能窗簾。何不自己動(dòng)手 DIY 一個(gè)~
實(shí)現(xiàn)功能點(diǎn)
戳我,即可查看完整開發(fā)資料!
硬件方案介紹
利用涂鴉智能低功耗嵌入式 Bluetooth LE 模組作為控制單元和無線連接單元。通過照度傳感器檢測當(dāng)前環(huán)境的光照強(qiáng)度,加速度傳感器識(shí)別手動(dòng)拽拉窗簾的狀態(tài)以及電機(jī)帶動(dòng)窗簾運(yùn)動(dòng)來實(shí)現(xiàn)窗簾智能化開啟和關(guān)閉。
1. 核心控制單元
涂鴉智能低功耗嵌入式 Bluetooth 模組基于 SoC 開發(fā),能夠?qū)崿F(xiàn) Bluetooth LE 直連,電機(jī)控制和傳感器數(shù)據(jù)采集。
2.電源管理單元選用 4000mHA 的可充電鋰電池(3.7V)作為主供電源,在提供穩(wěn)定運(yùn)行保障的同時(shí),無需另外再布電線,且當(dāng)電量不足時(shí),還可以拆卸充電。
3.照度傳感器可感應(yīng)光照強(qiáng)度的器件主要有光敏電阻、光敏二極管和照度傳感器芯片。光敏電阻和光敏二極管采集的是模擬量。光照傳感器選擇 TI 的 OPT3004 傳感器芯片,可通過數(shù)字接口直接輸出當(dāng)前的光照強(qiáng)度值,適合在 App端實(shí)時(shí)顯示光照強(qiáng)度值。
4.加速度傳感器ST 的 LIS2DW12 加速度傳感器為 3 軸加速度傳感器,能夠比較在精準(zhǔn)識(shí)別完成拉窗簾動(dòng)作的水平方向上的力。
5.電機(jī)驅(qū)動(dòng)窗簾機(jī)器人的動(dòng)力原理是通過轉(zhuǎn)輪和窗簾導(dǎo)軌的摩擦力帶電機(jī)器人和窗簾運(yùn)動(dòng),需要比較大的扭矩而對(duì)運(yùn)動(dòng)速度要求沒有很高。利用高速低扭矩通過齒輪減速增扭以后帶動(dòng)發(fā)動(dòng)機(jī),不僅能夠產(chǎn)生很大的扭矩,而且功耗較小,符合窗簾機(jī)器人的動(dòng)力需求。
窗簾機(jī)器人原理圖:
窗簾機(jī)器人PCB圖:
戳我,即可查看完整開發(fā)資料。
軟件實(shí)現(xiàn)方案
窗簾機(jī)器人源代碼已開源到 GitHub:
注:GitHub 具體地址通過關(guān)注“涂鴉開發(fā)者”,回復(fù)“窗簾”,即可獲取哦~
下面一一對(duì)各功能的實(shí)現(xiàn)原理作簡單說明:
普通控制和百分比控制都需要在已經(jīng)知道窗簾長度的情況下進(jìn)行。由于電機(jī)的轉(zhuǎn)速是一定的,在測量窗簾長度的時(shí)候其實(shí)是測試從 0% 到 100% 需要多少時(shí)間,然后根據(jù)電機(jī)當(dāng)前所處位置和要到達(dá)的位置來計(jì)算需要運(yùn)行的時(shí)間,以此來實(shí)現(xiàn)控制窗簾機(jī)器人移動(dòng)到指定位置。
實(shí)現(xiàn)方法:百分比控制在接收到app下發(fā)的DP點(diǎn)后先調(diào)用void curtain_percent_control(unsigned char current_position, unsigned char target_position) 函數(shù)使窗簾機(jī)器人向?qū)?yīng)的方向運(yùn)行,將需要運(yùn)行的時(shí)間存入全局變量中,供停止任務(wù)函數(shù)使用。
void curtain_percent_control_stop_task(void)函數(shù)需要被一直執(zhí)行,當(dāng)檢測到運(yùn)行時(shí)間已達(dá)到的時(shí)候,停止電機(jī)運(yùn)行,將當(dāng)前位置存入到FLASH中,上報(bào)當(dāng)前電機(jī)位置。
百分比控制部分代碼示例:
```c voidcurtainpercentcontrol(unsignedchar current_position, unsignedchar targetposition){ unsignedlong totaltime;
自動(dòng)測量窗簾長度實(shí)際上是測量窗簾桿子的長度,那么如何判斷窗簾機(jī)器人是否到達(dá)終點(diǎn)是兩端是測量的關(guān)鍵??刂齐姍C(jī)運(yùn)動(dòng)的功能實(shí)現(xiàn)是通過獲取測量得到的總時(shí)長來實(shí)現(xiàn)的。
判斷窗簾機(jī)器人到達(dá)終點(diǎn),在該硬件上有兩種方法來判斷:
一是通過測量電機(jī)驅(qū)動(dòng)芯片中的 MOCUR 引腳,當(dāng)電機(jī)堵轉(zhuǎn)的時(shí) MOCUR 引腳將會(huì)比正常運(yùn)行時(shí)的電壓高,通過判斷該引腳電壓是否發(fā)生變化可以知道電機(jī)是否發(fā)生堵轉(zhuǎn),從而確認(rèn)是否到達(dá)終點(diǎn)。
二是通過三軸加速度傳感器 lis2dw12 來判斷是否到達(dá)終點(diǎn)。根據(jù) lis2dw12 在硬件上的放置位置來看,判斷窗簾機(jī)器人的運(yùn)行狀態(tài)主要依靠三軸加速度傳感器中的x軸來判斷。
下圖為窗簾機(jī)器人在運(yùn)行過程中三軸加速度傳感器 x 軸的數(shù)據(jù),靜止?fàn)顟B(tài)基本無波動(dòng),啟動(dòng)后到到達(dá)終點(diǎn)前上下波動(dòng)較大,在到達(dá)終點(diǎn)撞擊的那一刻x軸數(shù)據(jù)明顯的一個(gè)凸起的上升,到達(dá)終點(diǎn)后電機(jī)未停止運(yùn)行可以看到x軸的數(shù)據(jù)比靜止時(shí)平均要高,且數(shù)據(jù)上下浮動(dòng)比運(yùn)行過程中要較小。
通過上面的兩種方式可以看到,使用電壓比較的方式來判斷是否到達(dá)終點(diǎn)相較于使用 lis2dw12 來判斷來看是較為簡單。但使用三軸加速度計(jì) lis2dw12 可以清晰的知道當(dāng)前電機(jī)處于何種運(yùn)行狀態(tài)。
通過觀察波形可以知道,當(dāng)你向某一方向拉窗簾時(shí),總體來看雖呈波動(dòng)狀態(tài),但最開始時(shí)的值與拉取的方向有關(guān),所以該部分功能的實(shí)現(xiàn)是通過判斷窗簾機(jī)器人被拉動(dòng)后最開始的一部分?jǐn)?shù)值來確定將要跑動(dòng)的方向。
示例代碼:
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;
檢測光照強(qiáng)度的傳感器使用的是 opt3004,通過 IIC 協(xié)議,通過讀取 opt3004 的 result 寄存器獲取當(dāng)前的光照值。
示例代碼:
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};
App 面板使用可以涂鴉 IoT 平臺(tái)提供的公版單開簾面板。
讓家中普通窗簾秒變智慧窗簾,你可遠(yuǎn)程控制開關(guān),還能根據(jù)光照強(qiáng)度自動(dòng)開啟關(guān)閉,為家人送去便捷生活~其實(shí)并不難!各位發(fā)燒友們動(dòng)起來啦~
- END -
一起秒變智能窗簾,戳我!
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。