資料介紹
描述
概述
無(wú)論是因?yàn)樗霉止值?、?a href='http://www.delux-kingway.cn/v/tag/107/' target='_blank' class='arckwlink_none'>手機(jī)太多,還是彎腰坐著盯著電腦看幾個(gè)小時(shí),我們大多數(shù)人都會(huì)時(shí)不時(shí)地處理脖子上的扭結(jié)。緩解頸部疼痛的最佳方法之一是按摩療法。因此,我們改造了傳統(tǒng)的頸部按摩器,讓它變得聰明,輕松消除壓力。
頸部放松按摩器結(jié)合了中國(guó)傳統(tǒng)理療中的多種按摩手法,采用低頻電脈沖技術(shù)模擬真人按摩。能促進(jìn)局部血液循環(huán),有效緩解頸部疲勞和肌肉緊張。由于我們已經(jīng)使這款按摩器支持物聯(lián)網(wǎng),因此我們只需一部手機(jī)即可控制它。
特征
- 五種模式:智能、放松、主動(dòng)、敲擊和刮擦。不同的模式讓您體驗(yàn)不同的按摩樂(lè)趣。
- 15級(jí)強(qiáng)度由弱到強(qiáng):您可以自由調(diào)節(jié)適合自己的強(qiáng)度。
- 三級(jí)溫度調(diào)節(jié):高、低、關(guān)。持續(xù)的熱按摩可以放松血管和頸部肌肉。
硬件
![pYYBAGNof1-AFuF2AACpjHWAGVE051.png](https://file.elecfans.com/web2/M00/78/9D/pYYBAGNof1-AFuF2AACpjHWAGVE051.png)
腳步
第 1 步:硬件設(shè)計(jì)
使用涂鴉智能或智能生活應(yīng)用程序實(shí)現(xiàn)遠(yuǎn)程控制,我們使用涂鴉的BTU 網(wǎng)絡(luò)模塊作為微控制器。
電路由BTU模塊、電池充電、語(yǔ)音播放、按鍵檢測(cè)、低頻脈沖電流輸出、加熱、溫度檢測(cè)等部分組成。
1.微控制器
![pYYBAGNof2SARPA4AAM9XBe8QyM624.png](https://file.elecfans.com/web2/M00/78/9D/pYYBAGNof2SARPA4AAM9XBe8QyM624.png)
?
![poYBAGNof2eAOt-rAALzh_FfYM0081.png](https://file.elecfans.com/web2/M00/78/0B/poYBAGNof2eAOt-rAALzh_FfYM0081.png)
?
2. 功能模塊
- NTC熱敏電阻(MF52B)
NTC熱敏電阻是環(huán)氧樹(shù)脂涂層的小尺寸,用于溫度測(cè)量。它具有電阻范圍廣、精度穩(wěn)定性和靈敏度高、響應(yīng)速度快等特點(diǎn)。對(duì)于熱敏電阻的參數(shù),我們使用:B=3950,R=10k。
?
![poYBAGNof2qANsVWAAAZsy4jOv4452.png](https://file.elecfans.com/web2/M00/78/0B/poYBAGNof2qANsVWAAAZsy4jOv4452.png)
?
- 溫度與電阻的關(guān)系
?
![pYYBAGNof3CAc4iBAAUgcjr7q7k403.png](https://file.elecfans.com/web2/M00/78/9D/pYYBAGNof3CAc4iBAAUgcjr7q7k403.png)
- 溫度檢測(cè)電路
?
![pYYBAGNof3KAIMtJAAAduF__51A240.png](https://file.elecfans.com/web2/M00/78/9D/pYYBAGNof3KAIMtJAAAduF__51A240.png)
模塊的 ADC 收集電壓并將其轉(zhuǎn)換為溫度值。然后,模塊相應(yīng)地調(diào)整溫度。
- 加熱絲
白線是發(fā)熱絲。
?
![pYYBAGNof3WATHL2AAAktQlmfig990.png](https://file.elecfans.com/web2/M00/78/9D/pYYBAGNof3WATHL2AAAktQlmfig990.png)
- 加熱回路
?
![poYBAGNof3eAakL5AAApAkKkTOM072.png](https://file.elecfans.com/web2/M00/78/0B/poYBAGNof3eAakL5AAApAkKkTOM072.png)
模塊上的P7輸出PWM波來(lái)調(diào)節(jié)電熱絲的溫度。當(dāng) P7 輸出低電平時(shí),加熱關(guān)閉。當(dāng) P7 以某個(gè)頻率輸出方波時(shí),發(fā)熱處于低水平。當(dāng) P7 輸出高電平時(shí),加熱處于高電平。
- 揚(yáng)聲器
?
![pYYBAGNof3qALh6DAAAWN6yffdc095.png](https://file.elecfans.com/web2/M00/78/9D/pYYBAGNof3qALh6DAAAWN6yffdc095.png)
- 語(yǔ)音控制電路
![poYBAGNof36AE5KGAABmKRMDbv8316.png](https://file.elecfans.com/web2/M00/78/0B/poYBAGNof36AE5KGAABmKRMDbv8316.png)
在單線串口模式下,BTU模塊可以通過(guò)DATA線控制和發(fā)送數(shù)據(jù)到語(yǔ)音芯片,進(jìn)行語(yǔ)音播放、停止、循環(huán)等。
- 電極墊
按摩器上有兩個(gè)不銹鋼電極墊。
?
![pYYBAGNof4CAd6JSAAA5n56qYSk792.png](https://file.elecfans.com/web2/M00/78/9D/pYYBAGNof4CAd6JSAAA5n56qYSk792.png)
?
![poYBAGNof4OAZ-rNAABqiHSZCQw393.png](https://file.elecfans.com/web2/M00/78/0B/poYBAGNof4OAZ-rNAABqiHSZCQw393.png)
低頻脈沖電流輸出
P24 和 P9 輸出的脈沖是對(duì)稱(chēng)的。這兩個(gè)引腳不能同時(shí)輸出高電平。
- 當(dāng)P24輸出高電平,P9輸出低電平時(shí),Q2導(dǎo)通,Q5截止。由于人體的阻抗,Q4、Q6、Q8 截止,Q3 處于飽和(導(dǎo)通狀態(tài))。
P17 輸出高電平。它輸出兩個(gè)低頻對(duì)稱(chēng)脈沖。
- 當(dāng)P24輸出低電平,P9輸出高電平時(shí),Q2截止,Q5導(dǎo)通。Q4、Q6 和 Q8 處于導(dǎo)通狀態(tài),Q3 處于截止?fàn)顟B(tài)。
P17 輸出低電平。它輸出兩個(gè)低頻對(duì)稱(chēng)脈沖。
?
P24 和 P9 輸出的脈沖是不對(duì)稱(chēng)的。PB5 和 PCO 都輸出高電平。
- 當(dāng) Q5、Q2 和 Q6 處于導(dǎo)通狀態(tài)時(shí),Q4 和 Q3 處于導(dǎo)通狀態(tài)。這樣,三極管可能會(huì)燒壞。
- S8050晶體管的開(kāi)/關(guān)取決于二極管D4正端的電壓,該電壓由通過(guò)二極管的電流決定。因此,我們可以提供過(guò)流保護(hù)。一旦通過(guò)二極管D4的電流超過(guò)10mA,D4的壓降就會(huì)超過(guò)0.7V,三極管Q2就會(huì)導(dǎo)通。
- 模塊上的P24和P9可以輸出不同頻率的脈沖信號(hào)(P24和P9輸出的脈沖是對(duì)稱(chēng)的),針對(duì)各種模式產(chǎn)生不同的波形。
二極管D4參數(shù)
- 電池
我們買(mǎi)了一塊700毫安的鋰聚合物電池,額定電壓為3.7V,充電電壓為4.2V。內(nèi)置保護(hù)電路,防止過(guò)充、過(guò)放、過(guò)流、短路。
?
![poYBAGNof4aAdr9-AAA0y-5FZCk806.png](https://file.elecfans.com/web2/M00/78/0B/poYBAGNof4aAdr9-AAA0y-5FZCk806.png)
尺寸:10 毫米(厚)x 23 毫米(寬)x 30 毫米(長(zhǎng))
?
![poYBAGNof4iAaxZ_AAC77XtDlxg867.png](https://file.elecfans.com/web2/M00/78/0B/poYBAGNof4iAaxZ_AAC77XtDlxg867.png)
電池充電器電路和升壓電路
- 電池充電器電路:XT2051是單節(jié)鋰離子電池的恒流恒壓充電器電路。該組件包括一個(gè)內(nèi)部功率晶體管,不需要外部電流檢測(cè)電阻器和阻塞二極管。XT2051 需要最少的外部元件并符合 USB 總線規(guī)范。它非常適合現(xiàn)場(chǎng)的便攜式應(yīng)用。
- 升壓電路原理:當(dāng)三極管MMBT5551導(dǎo)通時(shí),肖特基二極管D1處于反向偏置狀態(tài)。通過(guò)電感器 L1 到晶體管 Q1 的電流完成了一個(gè)電路。施加到升壓電感器的輸入電壓被轉(zhuǎn)換成磁能進(jìn)行存儲(chǔ)。當(dāng)三極管Q1關(guān)斷時(shí),肖特基二極管D1正向偏置,電感中的磁能轉(zhuǎn)化為電能。該電壓與輸入電壓一起為負(fù)載供電并為輸出電容器 C6 充電。需要幾個(gè)脈沖來(lái)提供足夠的能量來(lái)增加輸出電壓。
?
第 2 步:創(chuàng)建產(chǎn)品
本節(jié)介紹如何在涂鴉IoT平臺(tái)上創(chuàng)建智能頸椎按摩器。有關(guān)詳細(xì)信息,請(qǐng)參閱創(chuàng)建產(chǎn)品。
1.登錄涂鴉IoT平臺(tái)。
2.在標(biāo)準(zhǔn)類(lèi)別選項(xiàng)卡上,單擊運(yùn)動(dòng)與健康>運(yùn)動(dòng)與健康。填寫(xiě)產(chǎn)品信息并選擇藍(lán)牙作為協(xié)議。
![pYYBAGNof42AEltCAACLqE8oCg0142.png](https://file.elecfans.com/web2/M00/78/9D/pYYBAGNof42AEltCAACLqE8oCg0142.png)
3.點(diǎn)擊創(chuàng)建后,出現(xiàn)添加標(biāo)準(zhǔn)函數(shù)對(duì)話框。保留三個(gè)選定的所需功能。在自定義函數(shù)部分中,單擊添加并創(chuàng)建兩個(gè)函數(shù)。有關(guān)要設(shè)置的項(xiàng)目,請(qǐng)參見(jiàn)下面的屏幕截圖。
![poYBAGNof5CAaMS9AAEItdIVats167.png](https://file.elecfans.com/web2/M00/78/0B/poYBAGNof5CAaMS9AAEItdIVats167.png)
4.在設(shè)備面板步驟中,選擇DIY風(fēng)格面板。然后,進(jìn)入硬件開(kāi)發(fā),選擇涂鴉標(biāo)準(zhǔn)模塊 SDK和BT3L 藍(lán)牙模塊。單擊屏幕右側(cè)的獲取 10 個(gè)免費(fèi)許可證。您將在編碼中獲得 UUID、密鑰和 MAC 地址。
第 3 步:獲取 SDK 并設(shè)置 IDE
-
GitHub存儲(chǔ)庫(kù)將此存儲(chǔ)庫(kù)tuya_ble_sdk_Demo_Project_tlsr8253克隆到您的本地計(jì)算機(jī)并檢查
README.md
. - 設(shè)置IDE模塊上的芯片是TLSR825x,所以我們使用Telink IDE進(jìn)行開(kāi)發(fā)。轉(zhuǎn)到適用于 TLSR8 芯片的 IDE 并下載 IDE 并查看項(xiàng)目導(dǎo)入指南。
![poYBAGNof5OAA9HUAACuIaGZpsM149.png](https://file.elecfans.com/web2/M00/78/0B/poYBAGNof5OAA9HUAACuIaGZpsM149.png)
安裝 IDE 后,導(dǎo)入您的項(xiàng)目。
- 用項(xiàng)目開(kāi)發(fā)1.編輯產(chǎn)品ID。
![pYYBAGNof5mAAZ8YAAHRxDIhXos731.png](https://file.elecfans.com/web2/M00/78/9D/pYYBAGNof5mAAZ8YAAHRxDIhXos731.png)
2.編輯auth_key
、device_id
和mac
。
?
![poYBAGNof5yAIULDAAIkjvXXIVk068.png](https://file.elecfans.com/web2/M00/78/0B/poYBAGNof5yAIULDAAIkjvXXIVk068.png)
?
![poYBAGNof6CAHfFpAAIXDpWwptw205.png](https://file.elecfans.com/web2/M00/78/0B/poYBAGNof6CAHfFpAAIXDpWwptw205.png)
3.編譯代碼。
?
![pYYBAGNof6KARGHYAAHOnK8-eLY039.png](https://file.elecfans.com/web2/M00/78/9D/pYYBAGNof6KARGHYAAHOnK8-eLY039.png)
- 刷機(jī)工具(下載)
?
![pYYBAGNof6iAa9TpAAF4JkXG6Qc535.png](https://file.elecfans.com/web2/M00/78/9D/pYYBAGNof6iAa9TpAAF4JkXG6Qc535.png)
1.8258
選擇芯片類(lèi)型和EVK
下載模式。單擊文件并選擇bin
要下載到開(kāi)發(fā)板的文件,該文件位于tuya_ble_sdk_Demo_Project_tlsr8253\telink_kite_ble_sdk_v3.4.0_20190816\ble_sdk_multimode\8258_module\8258_module.bin
.
2.下載后點(diǎn)擊Reset運(yùn)行。
3.我們使用泰凌的作家。將板上的 SWM 接頭連接到寫(xiě)入器上的 SWM 接頭。
?
![poYBAGNof62AMdKYAAVnWCxL7JU017.png](https://file.elecfans.com/web2/M00/78/0B/poYBAGNof62AMdKYAAVnWCxL7JU017.png)
?
注意:日志打印的引腳默認(rèn)為TL_C2
,波特率為230400。由于我們沒(méi)有足夠的I/O,我們將日志打印的引腳改為TL_D3
。您可以在編輯后編譯代碼。配置文件位于tuya_ble_sdk_Demo_Project_tlsr8253\telink_kite_ble_sdk_v3.4.0_20190816\ble_sdk_multimode\vendor\8258_module\app_config.h
. 當(dāng) GPIO 讀高時(shí),它返回一個(gè)大于 1 的值,可能是 1、2 或 128。
在第 47 行:
#define DEBUG_INFO_TX_PIN GPIO_PC2
變成:
#define DEBUG_INFO_TX_PIN GPIO_PD3
第四步:軟件設(shè)計(jì)
電脈沖按摩器采用中國(guó)傳統(tǒng)物理療法的電脈沖模擬,可促進(jìn)血液循環(huán),放松局部肌肉,電極墊設(shè)計(jì)達(dá)到雙重按摩效果。
我們實(shí)現(xiàn)了五種脈沖模式:智能、放松、主動(dòng)、敲擊和刮擦。
脈沖模式
模式 時(shí)間間隔 放松模式 30 毫秒 主動(dòng)模式 20 毫秒 輕敲模式 40 毫秒 抓取模式 50 毫秒 智能模式 20 毫秒、30 毫秒、40 毫秒或 50 毫秒隨機(jī)生成。
- 原理圖,示意圖
P9 和 P24 控制三極管的開(kāi)/關(guān)以產(chǎn)生電脈沖并啟用不同的脈沖模式。
?
![poYBAGNof4OAZ-rNAABqiHSZCQw393.png](https://file.elecfans.com/web2/M00/78/0B/poYBAGNof4OAZ-rNAABqiHSZCQw393.png)
?
- 波形圖
P9 和 P24 輸出 PWM 信號(hào),正占空比為 26.5%,周期為 1 ms。注意這兩個(gè)引腳不能同時(shí)輸出高電平。否則三極管會(huì)燒壞。
以 30 ms 的間隔一次輸出四個(gè) PWM 波,以實(shí)現(xiàn)放松模式。
![pYYBAGNof7KAQ48uAAFga_QesqQ854.png](https://file.elecfans.com/web2/M00/78/9D/pYYBAGNof7KAQ48uAAFga_QesqQ854.png)
一個(gè)脈沖有四個(gè) PWM 波,如上圖所示。以 30 ms 的間隔產(chǎn)生脈沖。
![pYYBAGNof7aAWQzpAAFBuNsImOg538.png](https://file.elecfans.com/web2/M00/78/9D/pYYBAGNof7aAWQzpAAFBuNsImOg538.png)
- 模式實(shí)現(xiàn)
五種脈沖模式是通過(guò)改變脈沖間隔來(lái)實(shí)現(xiàn)的,如下表所示。
![pYYBAGNof7iAeeRVAAAqy_5ACcI137.png](https://file.elecfans.com/web2/M00/78/9D/pYYBAGNof7iAeeRVAAAqy_5ACcI137.png)
?
實(shí)現(xiàn)代碼
引腳初始化
void pattern_pin_init(void)
{
gpio_set_func(PATTERN_PIN_A, AS_PWM1_N);
gpio_set_func(PATTERN_PIN_B, AS_PWM5);
gpio_set_func(HEAT_PIN, AS_GPIO);
gpio_set_output_en(PATTERN_PIN_A, 1);
gpio_set_output_en(PATTERN_PIN_B, 1);
gpio_set_output_en(HEAT_PIN, 1);
gpio_write(PATTERN_PIN_A, 0);
gpio_write(PATTERN_PIN_B, 0);
// gpio_write(HEAT_PIN, 1);
//PWM0 1ms cycle 26.5% duty 1,000 Hz
pwm_set_mode(PWM1_ID, PWM_NORMAL_MODE);
pwm_set_clk(CLOCK_SYS_CLOCK_HZ, CLOCK_SYS_CLOCK_HZ);
pwm_set_phase(PWM1_ID, 0); // No phase at PWM beginning
pwm_set_cycle_and_duty(PWM1_ID, (u16) (1000 * CLOCK_SYS_CLOCK_1US), (u16) (0 * CLOCK_SYS_CLOCK_1US) );
pwm_polo_enable(PWM1_ID, 1); // Enable the PWM polarity
pwm_start(PWM1_ID);
// PWM5 1 ms cycle, 26.5% duty 1,000 Hz
pwm_set_mode(PWM5_ID, PWM_NORMAL_MODE);
pwm_set_clk(CLOCK_SYS_CLOCK_HZ, CLOCK_SYS_CLOCK_HZ);
pwm_set_phase(PWM5_ID, 0); // No phase at PWM beginning
pwm_set_cycle_and_duty(PWM5_ID, (u16) (1000 * CLOCK_SYS_CLOCK_1US), (u16) (265 * CLOCK_SYS_CLOCK_1US) );
}
GPIO_PC1 (PATTERN_PIN_A)
和電平調(diào)整引腳都GPIO_PC2 (BOOST_PIN)
使用 PWM 功能。管腳GPIO_PC1 (PATTERN_PIN_A)
只支持PWM_0
通道,所以GPIO_PC2 (BOOST_PIN)
使用PWM_0
通道。GPIO_PC1 (PATTERN_PIN_A)
使用AS_PWM1_N
通道,因此您只需要編輯pwm_polo_enable(PWM1_ID, 1)
即可更改 PWM 極性。
?
![poYBAGNof7uAKyIHAABzMqUtM2E925.png](https://file.elecfans.com/web2/M00/78/0B/poYBAGNof7uAKyIHAABzMqUtM2E925.png)
?
由于 PWM 波的數(shù)量和脈沖間隔是通過(guò)時(shí)間延遲來(lái)實(shí)現(xiàn)的,因此會(huì)產(chǎn)生誤差。程序運(yùn)行在裸機(jī)上,而不是 RTOS,所以這個(gè)函數(shù)必須while(1)
循環(huán)運(yùn)行。
void switching_pattern(unsigned char pat)
{
if (pat > 4) {
TUYA_APP_LOG_ERROR("*********No such model!!!**********");
}
switch (pat) {
case relieve:
pwm_start(PWM5_ID);
sleep_us(450); // Delay 480 μs to prevent the triode from being burned out.
pwm_set_cycle_and_duty(PWM1_ID, (u16) (1000 * CLOCK_SYS_CLOCK_1US), (u16) (265 * CLOCK_SYS_CLOCK_1US) );
sleep_us(5 * TIME_MS);
pwm_stop(PWM5_ID);
pwm_set_cycle_and_duty(PWM1_ID, (u16) (1000 * CLOCK_SYS_CLOCK_1US), (u16) (0 * CLOCK_SYS_CLOCK_1US) );
sleep_us(30 * TIME_MS);
break;
case vitality:
pwm_start(PWM5_ID);
sleep_us(450);
pwm_set_cycle_and_duty(PWM1_ID, (u16) (1000 * CLOCK_SYS_CLOCK_1US), (u16) (265 * CLOCK_SYS_CLOCK_1US) );
sleep_us(5 * TIME_MS);
pwm_stop(PWM5_ID);
pwm_set_cycle_and_duty(PWM1_ID, (u16) (1000 * CLOCK_SYS_CLOCK_1US), (u16) (0 * CLOCK_SYS_CLOCK_1US) );
sleep_us(20 * TIME_MS);
break;
case hammering:
pwm_start(PWM5_ID);
sleep_us(450);
pwm_set_cycle_and_duty(PWM1_ID, (u16) (1000 * CLOCK_SYS_CLOCK_1US), (u16) (265 * CLOCK_SYS_CLOCK_1US) );
sleep_us(5 * TIME_MS);
pwm_stop(PWM5_ID);
pwm_set_cycle_and_duty(PWM1_ID, (u16) (1000 * CLOCK_SYS_CLOCK_1US), (u16) (0 * CLOCK_SYS_CLOCK_1US) );
sleep_us(40 * TIME_MS);
break;
case scraping_therapy:
pwm_start(PWM5_ID);
sleep_us(450);
pwm_set_cycle_and_duty(PWM1_ID, (u16) (1000 * CLOCK_SYS_CLOCK_1US), (u16) (265 * CLOCK_SYS_CLOCK_1US) );
sleep_us(5 * TIME_MS);
pwm_stop(PWM5_ID);
pwm_set_cycle_and_duty(PWM1_ID, (u16) (1000 * CLOCK_SYS_CLOCK_1US), (u16) (0 * CLOCK_SYS_CLOCK_1US) );
sleep_us(50 * TIME_MS);
break;
case intelligent:
pwm_start(PWM5_ID);
sleep_us(450);
pwm_set_cycle_and_duty(PWM1_ID, (u16) (1000 * CLOCK_SYS_CLOCK_1US), (u16) (265 * CLOCK_SYS_CLOCK_1US) );
sleep_us(5 * TIME_MS);
pwm_stop(PWM5_ID);
pwm_set_cycle_and_duty(PWM1_ID, (u16) (1000 * CLOCK_SYS_CLOCK_1US), (u16) (0 * CLOCK_SYS_CLOCK_1US) );
sleep_us(((rand() % 4 + 2) * 10) * TIME_MS); // 20 ms, 30 ms, 40 ms, or 50 ms is generated randomly.
break;
default:
break;
}
return;
}
我們已經(jīng)實(shí)現(xiàn)了五種脈沖模式,接下來(lái)是語(yǔ)音提示、加熱和電平調(diào)節(jié)。
1.語(yǔ)音提示
WTN6是一款多功能單語(yǔ)音芯片,語(yǔ)音合成4位MCU。
?
![poYBAGNof76AGhi8AAD9fFd-L4M516.png](https://file.elecfans.com/web2/M00/78/0B/poYBAGNof76AGhi8AAD9fFd-L4M516.png)
- 工作電壓:2.8V至5.2V
- 在待機(jī)模式下,靜態(tài)電流小于 5 μA。
- 帶有內(nèi)置電阻器 (+/- 1%) 的精確嵌入式振蕩器。支持低電壓復(fù)位(LVR=1.8V)和看門(mén)狗復(fù)位。
- 高品質(zhì) 12 位 PWM 直接驅(qū)動(dòng) 8Ω 0.5W 揚(yáng)聲器或蜂鳴器。DAC轉(zhuǎn)換器的音頻輸出可以通過(guò)外部音頻放大器放大音量。
- 內(nèi)置看門(mén)狗。
- 串口控制方式:?jiǎn)尉€串口和兩線串口。最多可加載 224 條語(yǔ)音。
- 支持忙碌狀態(tài)下的輸出功能。
?
![pYYBAGNof8CAVzx8AABXtJVRtrc694.png](https://file.elecfans.com/web2/M00/78/9D/pYYBAGNof8CAVzx8AABXtJVRtrc694.png)
單線串行通訊
在單線串口模式下,BTU模塊可以通過(guò)DATA線控制和發(fā)送數(shù)據(jù)到語(yǔ)音芯片,進(jìn)行語(yǔ)音播放、停止、循環(huán)等。
引腳 描述 PA1 DATA PA2 BUSY 數(shù)據(jù)(十六進(jìn)制) 功能 00H 不播放音頻。01H 第一次音頻播放。02H 第二次音頻播放。…… …… DFH 第 222 段音頻播放。
- 引腳配置
![poYBAGNof8WAD3PcAAAMzeFN34g257.png](https://file.elecfans.com/web2/M00/78/0B/poYBAGNof8WAD3PcAAAMzeFN34g257.png)
- 單行音頻地址關(guān)聯(lián)
?
![pYYBAGNof8eAQY17AAAnL2Qr5Sk104.png](https://file.elecfans.com/web2/M00/78/9D/pYYBAGNof8eAQY17AAAnL2Qr5Sk104.png)
?
單線串口時(shí)序圖
將數(shù)據(jù)線拉低至 5ms,然后發(fā)送 8 位數(shù)據(jù),先低位,后高位。用高電平與低電平的比值來(lái)表示每個(gè)數(shù)據(jù)位的值。
?
![poYBAGNof8mAVuXvAAA2fc97RpA023.png](https://file.elecfans.com/web2/M00/78/0B/poYBAGNof8mAVuXvAAA2fc97RpA023.png)
?
![pYYBAGNof8yAODXeAAA4ykPlYF8383.png](https://file.elecfans.com/web2/M00/78/9D/pYYBAGNof8yAODXeAAA4ykPlYF8383.png)
?
實(shí)現(xiàn)代碼
- 引腳初始化
void voice_prompt_init(void)
{
gpio_set_func(WTN6_DATA_PIN | WTN6_BUSY_PIN, AS_GPIO);
gpio_set_input_en(WTN6_BUSY_PIN, 1);
gpio_set_output_en(WTN6_DATA_PIN, 1);
gpio_write(WTN6_BUSY_PIN, 0);
}
?
- 音頻播放
void voice_playing(uint8_t sb_data)
{
uint8_t s_data, j;
bool b_data;
s_data = sb_data;
gpio_write(WTN6_DATA_PIN, 0);
sleep_us(5000); // Delay 5 ms
b_data = s_data & 0X01;
for (j=0; j<8; j++) {
if (b_data == 1) {
gpio_write(WTN6_DATA_PIN, 1);
sleep_us(600); // Delay 600 μs
gpio_write(WTN6_DATA_PIN, 0);
sleep_us(200); // Delay 200 μs
} else {
gpio_write(WTN6_DATA_PIN, 1);
sleep_us(200); // Delay 200 μs
gpio_write(WTN6_DATA_PIN, 0);
sleep_us(600); // Delay 600 μs
}
s_data = s_data >> 1;
b_data = s_data & 0X01;
}
gpio_write(WTN6_DATA_PIN, 1);
}
指定參數(shù)voice_playing(0x01)
以播放離線音頻。
2:加熱
?
![poYBAGNof4OAZ-rNAABqiHSZCQw393.png](https://file.elecfans.com/web2/M00/78/0B/poYBAGNof4OAZ-rNAABqiHSZCQw393.png)
?
我們向上或向下拉 P7 來(lái)控制加熱的開(kāi)/關(guān)。頸部按摩器有一個(gè)內(nèi)置傳感器來(lái)檢測(cè)溫度。當(dāng)溫度超過(guò) 40°C 時(shí),將關(guān)閉加熱以避免過(guò)熱。
?
![poYBAGNof3eAakL5AAApAkKkTOM072.png](https://file.elecfans.com/web2/M00/78/0B/poYBAGNof3eAakL5AAApAkKkTOM072.png)
?
int switching_heat(unsigned char warm)
{
if (warm > 1) {
TUYA_APP_LOG_ERROR("*********No such model!!!**********");
}
// printf("wram%d massage_state.heat%d\r\n", warm, massage_state.heat);
switch (warm) {
case strong_heat:
TUYA_APP_LOG_INFO("**********strong_heat************");
gpio_write(HEAT_PIN, 1);
temperature_detection();
break;
case off_heat:
TUYA_APP_LOG_INFO("**********off_heat************");
gpio_write(HEAT_PIN, 0);
break;
default:
break;
}
return 0;
}
?
/*Temperature detection, which is called when heating feature is in high or low level.*/
int temperature_detection(void)
{
int Rntc = 0, Vcc = 0;
adc_channel_checkout(channel_x1);
Vcc = adc_sample_and_get_result(); // Unit: mV
Rntc = Vcc*R25 / (3300-Vcc);
TUYA_APP_LOG_INFO("Rntc_val=%dΩ", Rntc);
if (Rntc >= 5311) { // NTC resistance value is 5311Ω at 40°C.
TUYA_APP_LOG_WARNING("********High Temperature Warning!!!********");
gpio_write(HEAT_PIN, 0); // When the temperature exceeds 40°C, heating will be turned off.
}
return 0;
}
有關(guān) NTC 溫度如何與電阻相關(guān)的更多信息,請(qǐng)參閱溫度和電阻之間的關(guān)系。
3:強(qiáng)度調(diào)整
按摩器提供從弱到強(qiáng)的 15 級(jí)強(qiáng)度。我們使用升壓電路實(shí)現(xiàn)此功能。
?
![poYBAGNof4iAaxZ_AAC77XtDlxg867.png](https://file.elecfans.com/web2/M00/78/0B/poYBAGNof4iAaxZ_AAC77XtDlxg867.png)
?
我們可以改變 P8 輸出的 PWM 波的正占空比來(lái)提升電壓。下表列出了具體值。
?
![pYYBAGNof9iAGPjtAAAlYb2iVuE883.png](https://file.elecfans.com/web2/M00/78/9D/pYYBAGNof9iAGPjtAAAlYb2iVuE883.png)
強(qiáng)度通過(guò)按鈕調(diào)整。單按可增加等級(jí),雙按可降低等級(jí)。由于 SDK 配置,P8 在固件刷新后模塊復(fù)位時(shí)被拉高。因此,我們需要下拉P8。
void boost_init(void)
{
gpio_set_func(BOOST_PIN, AS_PWM0);
gpio_set_output_en(BOOST_PIN, 1);
// PWM0 1ms cycle
pwm_set_mode(PWM0_ID, PWM_NORMAL_MODE);
pwm_set_clk(CLOCK_SYS_CLOCK_HZ, BOOST_PWM_CLOCK_HZ); // When voltage is stepped up, the frequency of PWM is 16M / (968-1) ≈ 16.55 kHz.
pwm_set_phase(PWM0_ID, 0); // No phase at PWM beginning
pwm_set_cycle_and_duty(PWM0_ID, (u16) (1000 * CLOCK_SYS_CLOCK_1US), (u16) (0 * CLOCK_SYS_CLOCK_1US) );
pwm_start(PWM0_ID);
}
初始化后,您可以指定占空比的值來(lái)升壓。
void switching_gear(unsigned char gears)
{
if (gears > 15) {
TUYA_APP_LOG_ERROR("*********There is no such gear!!!**********");
}
switch (gears) {
case first_gear:
pwm_set_cycle_and_duty(PWM0_ID, (u16) (1000 * CLOCK_SYS_CLOCK_1US), (u16) (10 * CLOCK_SYS_CLOCK_1US) );
break;
case second_gear:
pwm_set_cycle_and_duty(PWM0_ID, (u16) (1000 * CLOCK_SYS_CLOCK_1US), (u16) (20 * CLOCK_SYS_CLOCK_1US) );
break;
case third_gear:
pwm_set_cycle_and_duty(PWM0_ID, (u16) (1000 * CLOCK_SYS_CLOCK_1US), (u16) (40 * CLOCK_SYS_CLOCK_1US) );
break;
case fourth_gear:
pwm_set_cycle_and_duty(PWM0_ID, (u16) (1000 * CLOCK_SYS_CLOCK_1US), (u16) (60 * CLOCK_SYS_CLOCK_1US) );
break;
case fifth_gear:
pwm_set_cycle_and_duty(PWM0_ID, (u16) (1000 * CLOCK_SYS_CLOCK_1US), (u16) (70 * CLOCK_SYS_CLOCK_1US) );
break;
case sixth_gear:
pwm_set_cycle_and_duty(PWM0_ID, (u16) (1000 * CLOCK_SYS_CLOCK_1US), (u16) (90 * CLOCK_SYS_CLOCK_1US) );
break;
case seventh_gear:
pwm_set_cycle_and_duty(PWM0_ID, (u16) (1000 * CLOCK_SYS_CLOCK_1US), (u16) (120 * CLOCK_SYS_CLOCK_1US) );
break;
case eighth_gear:
pwm_set_cycle_and_duty(PWM0_ID, (u16) (1000 * CLOCK_SYS_CLOCK_1US), (u16) (160 * CLOCK_SYS_CLOCK_1US) );
break;
case ninth_gear:
pwm_set_cycle_and_duty(PWM0_ID, (u16) (1000 * CLOCK_SYS_CLOCK_1US), (u16) (180 * CLOCK_SYS_CLOCK_1US) );
break;
case tenth_gear:
pwm_set_cycle_and_duty(PWM0_ID, (u16) (1000 * CLOCK_SYS_CLOCK_1US), (u16) (220 * CLOCK_SYS_CLOCK_1US) );
break;
case eleventh_gear:
pwm_set_cycle_and_duty(PWM0_ID, (u16) (1000 * CLOCK_SYS_CLOCK_1US), (u16) (240 * CLOCK_SYS_CLOCK_1US) );
break;
case twelfth_gear:
pwm_set_cycle_and_duty(PWM0_ID, (u16) (1000 * CLOCK_SYS_CLOCK_1US), (u16) (260 * CLOCK_SYS_CLOCK_1US) );
break;
case thirteenth_gear:
pwm_set_cycle_and_duty(PWM0_ID, (u16) (1000 * CLOCK_SYS_CLOCK_1US), (u16) (300 * CLOCK_SYS_CLOCK_1US) );
break;
case fourteenth_gear:
pwm_set_cycle_and_duty(PWM0_ID, (u16) (1000 * CLOCK_SYS_CLOCK_1US), (u16) (340 * CLOCK_SYS_CLOCK_1US) );
break;
case fifteenth_gear:
pwm_set_cycle_and_duty(PWM0_ID, (u16) (1000 * CLOCK_SYS_CLOCK_1US), (u16) (360 * CLOCK_SYS_CLOCK_1US) );
break;
case max_gear:
pwm_set_cycle_and_duty(PWM0_ID, (u16) (1000 * CLOCK_SYS_CLOCK_1US), (u16) (360 * CLOCK_SYS_CLOCK_1US) );
break;
default:
break;
}
}
4:斷電記憶
將設(shè)備掉電前的狀態(tài)數(shù)據(jù)寫(xiě)入可用的閃存中。當(dāng)設(shè)備再次上電時(shí)從閃存中讀取數(shù)據(jù)。這樣,設(shè)備上電后可以恢復(fù)到之前的狀態(tài)。
TLSR8253芯片的flash如下圖所示。
?
![poYBAGNof9uARR3xAABJoYPGEqA283.png](https://file.elecfans.com/web2/M00/78/0B/poYBAGNof9uARR3xAABJoYPGEqA283.png)
?
0x040000
to0x060000
是設(shè)備可以寫(xiě)入數(shù)據(jù)的未使用空間。
1.將狀態(tài)寫(xiě)入閃存。
/***********************************************************
* Function: write_massage_status_to_flash
* Input: none
* Output: none
* Return: none
* Notice: Write massager status to the flash memory.
***********************************************************/
void write_massage_status_to_flash(void)
{
Flash_Write_Buff[0] = massage_state.on_off;
Flash_Write_Buff[1] = massage_state.pattern;
Flash_Write_Buff[2] = massage_state.gear;
Flash_Write_Buff[3] = massage_state.heat;
flash_write_page(FLASH_ADDR, FLASH_BUFF_LEN, (unsigned char *)Flash_Write_Buff);
return;
}
2.從閃存中讀取狀態(tài)。
/***********************************************************
* Function: write_massage_status_to_flash
* Input: none
* Output: none
* Return: none
* Notice: Write massager status to the flash memory.
***********************************************************/
void write_massage_status_to_flash(void)
{
Flash_Write_Buff[0] = massage_state.on_off;
Flash_Write_Buff[1] = massage_state.pattern;
Flash_Write_Buff[2] = massage_state.gear;
Flash_Write_Buff[3] = massage_state.heat;
flash_write_page(FLASH_ADDR, FLASH_BUFF_LEN, (unsigned char *)Flash_Write_Buff);
return;
}/**********************************************************************
* Function: read_massage_status_to_flash
* Input: none
* Output: none
* Return: none
* Notice: Read the massager status data before power-off from the flash memory, and save it to the status struct.
**********************************************************************/
void read_massage_status_to_flash(void)
{
flash_read_page(FLASH_ADDR, FLASH_BUFF_LEN, (unsigned char *)Flash_Read_Buff);
// Store the data read from the flash memory into the struct.
massage_state.on_off = Flash_Read_Buff[0];
massage_state.pattern = Flash_Read_Buff[1];
massage_state.gear = Flash_Read_Buff[2];
massage_state.heat = Flash_Read_Buff[3];
return;
}
/***********************************************************
* Function: erase_massage_flash
* Input: none
* Output: none
* Return: none
* Notice: Restore defaults
***********************************************************/
void erase_massage_flash(void)
{
massage_state.on_off = OFF;
massage_state.pattern = relieve;
massage_state.gear = first_gear;
massage_state.heat = off_heat;
Flash_Write_Buff[0] = OFF;
Flash_Write_Buff[1] = relieve;
Flash_Write_Buff[2] = first_gear;
Flash_Write_Buff[3] = off_heat;
flash_write_page(FLASH_ADDR, FLASH_BUFF_LEN, (unsigned char *)Flash_Write_Buff);
return;
}
- 恢復(fù)默認(rèn)值。
/***********************************************************
* Function: erase_massage_flash
* Input: none
* Output: none
* Return: none
* Notice: Restore defaults
***********************************************************/
void erase_massage_flash(void)
{
massage_state.on_off = OFF;
massage_state.pattern = relieve;
massage_state.gear = first_gear;
massage_state.heat = off_heat;
Flash_Write_Buff[0] = OFF;
Flash_Write_Buff[1] = relieve;
Flash_Write_Buff[2] = first_gear;
Flash_Write_Buff[3] = off_heat;
flash_write_page(FLASH_ADDR, FLASH_BUFF_LEN, (unsigned char *)Flash_Write_Buff);
return;
}
5:云端控制
對(duì)于低功耗藍(lán)牙模塊,單個(gè)數(shù)據(jù)點(diǎn) (DP) 的所有數(shù)據(jù)都存儲(chǔ)在一個(gè)數(shù)組中。以 DP ID 104 為例。它的數(shù)組如下。
unsigned char mode_buf[] = {0x68, 0x04, 0x01, 0x00}; //{DP_ID, DP_type, DP_len, DP_data}
tuya_ble_dp_data_report(mode_buf, 4); // Data reporting function.
調(diào)用tuya_ble_dp_data_report(uint8_t *p_data,uint32_t len)
將單個(gè)DP的狀態(tài)數(shù)據(jù)上報(bào)到云端。
來(lái)自移動(dòng)應(yīng)用程序的控制命令存儲(chǔ)在數(shù)組中dp_data_array[255+3]
。您可以編寫(xiě)一個(gè)DP數(shù)據(jù)發(fā)送處理函數(shù),并dp_data_array[255+3]
作為參數(shù)傳遞給該函數(shù)tuya_cb_handler(tuya_ble_cb_evt_param_t* event)
,tuya_ble_demo.c
以實(shí)現(xiàn)從移動(dòng)應(yīng)用程序發(fā)送命令。
void app_dp_handle(uint8_t *dp_data)
{
printf("dp_data:%d %d %d %d\r\n", dp_data[0], dp_data[1], dp_data[2], dp_data[3]);
switch (dp_data[0]) {
case 0x66:
if (dp_data[3] == strong_heat) {
massage_state.heat = strong_heat;
} else {
massage_state.heat = off_heat;
}
printf("dp_data[3]:%d massage_state.heat:%d\r\n", dp_data[3], massage_state.heat);
if (!app_flag) {
switching_heat(massage_state.heat);
}
break;
case 0x67:
printf("dp_data[3]:%d \r\n", dp_data[3]);
switch (dp_data[3]) {
case first_gear:
massage_state.gear = first_gear;
if (!app_flag) {
switching_gear(massage_state.gear);
}
break;
case second_gear:
massage_state.gear = second_gear;
if (!app_flag) {
switching_gear(massage_state.gear);
}
break;
case third_gear:
massage_state.gear = third_gear;
if (!app_flag) {
switching_gear(massage_state.gear);
}
break;
case fourth_gear:
massage_state.gear = fourth_gear;
if (!app_flag) {
switching_gear(massage_state.gear);
}
break;
case fifth_gear:
massage_state.gear = fifth_gear;
if (!app_flag) {
switching_gear(massage_state.gear);
}
break;
case sixth_gear:
massage_state.gear = sixth_gear;
if (!app_flag) {
switching_gear(massage_state.gear);
}
break;
case seventh_gear:
massage_state.gear = seventh_gear;
if (!app_flag) {
switching_gear(massage_state.gear);
}
break;
case eighth_gear:
massage_state.gear = eighth_gear;
if (!app_flag) {
switching_gear(massage_state.gear);
}
break;
case ninth_gear:
massage_state.gear = ninth_gear;
if (!app_flag) {
switching_gear(massage_state.gear);
}
break;
case tenth_gear:
massage_state.gear = tenth_gear;
if (!app_flag) {
switching_gear(massage_state.gear);
}
break;
case eleventh_gear:
massage_state.gear = eleventh_gear;
if (!app_flag) {
switching_gear(massage_state.gear);
}
break;
case twelfth_gear:
massage_state.gear = twelfth_gear;
if (!app_flag) {
switching_gear(massage_state.gear);
}
break;
case thirteenth_gear:
massage_state.gear = thirteenth_gear;
if (!app_flag) {
switching_gear(massage_state.gear);
}
break;
case fourteenth_gear:
massage_state.gear = fourteenth_gear;
if (!app_flag) {
switching_gear(massage_state.gear);
}
break;
case fifteenth_gear:
massage_state.gear = fifteenth_gear;
if (!app_flag) {
switching_gear(massage_state.gear);
}
break;
case max_gear:
massage_state.gear = max_gear;
if (!app_flag) {
switching_gear(massage_state.gear);
}
break;
default:
break;
}
break;
case 0x68:
if (dp_data[3] == relieve) {
massage_state.pattern = relieve;
} else if (dp_data[3] == vitality) {
massage_state.pattern = vitality;
} else if (dp_data[3] == hammering) {
massage_state.pattern = hammering;
} else if (dp_data[3] == scraping_therapy) {
massage_state.pattern = scraping_therapy;
} else {
massage_state.pattern = intelligent;
}
break;
case 0x69:
if (dp_data[3] == ON) {
massage_state.on_off = ON;
rs2255_init();
voice_prompt_init();
pattern_pin_init();
app_flag = 0;
} else {
massage_state.on_off = OFF;
power_off_init();
app_flag = 1;
}
break;
default:
break;
}
}
第 5 步:設(shè)備控制
在手機(jī)上安裝涂鴉智能應(yīng)用或智能生活應(yīng)用。它們?cè)谝苿?dòng)應(yīng)用市場(chǎng)上可用。打開(kāi)應(yīng)用程序并單擊右上角的+圖標(biāo)以配對(duì)設(shè)備。設(shè)備連接后,您可以通過(guò)應(yīng)用程序?qū)ζ溥M(jìn)行控制。
概括
恭喜!您已成功設(shè)計(jì)出智能頸部按摩器的原型。
這款多功能物聯(lián)網(wǎng)按摩器與 TENS 技術(shù)相結(jié)合,有助于緩解頸部酸痛和疼痛。內(nèi)置NTC傳感器,采用先進(jìn)的精確恒溫控制技術(shù),可改善血液循環(huán),緩解疼痛、結(jié)節(jié)和肌肉緊張。基于這個(gè)項(xiàng)目,您可以探索更多很棒的功能!
涂鴉物聯(lián)網(wǎng)平臺(tái)提供便捷的物聯(lián)網(wǎng)開(kāi)發(fā)工具和服務(wù),旨在讓您的物聯(lián)網(wǎng)項(xiàng)目更輕松、更高效。查看并發(fā)現(xiàn)更多很棒的想法。
?
- 原型板電源連接器開(kāi)源分享
- 搖臂轉(zhuǎn)向架輪椅原型開(kāi)源硬件
- bm1387b原型v1開(kāi)源分享
- 原型板28針PIC開(kāi)源分享
- Arduino UNO的原型板開(kāi)源分享
- 智能家居控制系統(tǒng)方案開(kāi)源資料
- SBC 85 Pad per hole原型板開(kāi)源
- STM32原型機(jī)開(kāi)源
- 頭部按摩器電路 15次下載
- 原型板開(kāi)源項(xiàng)目
- 通用PCB原型板開(kāi)源項(xiàng)目
- zw7-40.5高原型35kv高壓真空斷路器廠家
- 開(kāi)源網(wǎng)絡(luò)協(xié)議分析器WireShark軟件下載 15次下載
- WIFI智能開(kāi)源電熱水器的原理圖和源代碼免費(fèi)下載 47次下載
- 電子按摩器電路及制作
- 智能頸部按摩儀拆解 392次閱讀
- fpga原型驗(yàn)證平臺(tái)與硬件仿真器的區(qū)別 1184次閱讀
- 按摩器按鍵與LED控制電路拆解分析 1457次閱讀
- 按摩椅顯示屏的EMC問(wèn)題整改方案 1637次閱讀
- 開(kāi)源激光雷達(dá)原型平臺(tái) 2624次閱讀
- 基于語(yǔ)音芯片的共享按摩椅設(shè)計(jì) 1532次閱讀
- 典型的按摩器數(shù)碼管顯示電路 4212次閱讀
- digilent開(kāi)源微控制器介紹 1653次閱讀
- firefly智能音樂(lè)按摩器 1816次閱讀
- 電動(dòng)按摩椅的使用好處及常見(jiàn)電路故障分析 9462次閱讀
- 電子按摩器的電路原理及常見(jiàn)故障和維修方法 3.9w次閱讀
- 適用于30V1A的按摩器電源方案芯片 5707次閱讀
- NASA的開(kāi)源軟件是什么?NASA的開(kāi)源軟件的詳細(xì)分析 7444次閱讀
- 在按摩椅中模擬人體手指的壓力傳感器 5158次閱讀
- 教您打造小型、控制精確的超舒適智能按摩椅 3366次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開(kāi)發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論