太熱了!程式猿給女朋友做了個智慧小風扇

alljoyn物聯網發表於2015-08-16

黃花深巷,

紅葉低窗,

淒涼一片秋聲。

豆雨聲來,

中間夾帶風聲。

疏疏二十五點,

麗譙門、不鎖更聲。

故人遠,

問誰搖玉佩,

簷底鈴聲。

彩角聲吹月墮,

漸連營馬動,

四起笳聲。

閃爍鄰燈,

燈前尚有砧聲。

知他訴愁到曉,

碎噥噥、多少蛩聲。

訴未了,把一半、分與雁聲。

一首短詩《聲聲慢 秋聲》獻與大家。蔣捷的這首短詩共96字,其中有十個“聲”字;其通過風聲、雨聲、更聲、鈴聲、笳聲、砧聲、蛩聲、雁聲來形容秋天的到來,頗有節奏感。

一直頗喜歡古典詩詞,怎奈天賦不佳,至今連完整的四言詩都木寫出來過……哎……不提傷心往事了……五音不全不能阻止我喜愛音樂,不能作詩亦不能阻止我愛詩噠!!記得小時候在鄉間,對四季的變化非常敏銳,樹枝張新芽了,知春來了;知了叫了,知夏來了,樹葉黃了,知秋來了;雪花飄了,知深冬了。如今,生活在鋼筋水泥之間,對季節的感覺淡漠了,似乎是麻木了,唯一觸發人知覺的只有溫度,冷了暖氣,熱了風扇/空調;對於季節的感受全然變了被遺棄的孩子,儘管它在冬天裡猛力的哭號,也沒有多少人能聽見……嚮往古人感受季節的敏銳……

……

我這是說哪去了呢……哎……情不自禁啊……大家諒解……

話說,長沙天氣的熱是出了名的,四大火爐之一啊!只是今年天氣有點異常,只有在7月熱了一小段時間,後面一直是清涼氣爽的天!!!在這樣的天氣下,舒服地過了幾個月後(我們家席子都換成被子了),現在又突然變熱,大家都有點不適應,GF表現得尤為突出。坐一會就焦躁不安地站起來,說熱死了,熱死了,顯得燥熱難耐的樣子(她本身散熱面積就挺大,不知為啥比我還熱……)。好吧,那就開風扇吧,可沒吹多久,又說這風吹著不舒服,風大了點還冷。額……,這可是開得最小檔啊!為了讓GF乖乖的做在我旁邊陪我寫程式碼(當然她可以用手機玩遊戲),我試著用技術來解決這個問題……

學技術,去哪裡,當然是山東藍翔啊,哈哈……開個玩笑,最近關於藍翔的段子還真不少,我們就不跟這個風了。 我們可是程式設計師,用一現有技術拼湊(高大上的說法是整合)就能解決問題好不。下面就說說我要做的智慧風扇的功能吧:

1、風速無級調節

2、手機控制風扇開關及風速

3、語音控制風扇開關及風速(能夠根據語義進行智慧控制)

4、通過檢測皮膚的溫溼度控制風扇開關及風速(手環啊)

要做的功能確定了,那就設計方案和準備材料吧。

硬體

1、風扇

7寸大號絲雨usb電風扇,用著好用就幫人家推薦下(塑料的,輕,便宜),這是我做人的原則

2、主控板

拿著師弟做的帶WiFi功能的Arduino板子,不給錢的,光線暗拍著不好看,其實做的還蠻精緻的。

3、控制介面電路

通過主控板pwm輸出控制電源給風扇供電,用萬用板焊接好後如下

4、手機

如果配送這個手機的話,風扇應該會被扔掉,所以堅決不用這種檔次的手機。

5、手環

聽說又要變天了,為了在天氣變涼前把風扇做出來,這個還是在第二版再做吧。

軟體

1、Arduino IDE程式設計

是的,控制端的程式我就是用arduino寫的,你們就盡情的鄙視我吧。

而且關於pwm調節只要這麼一條語句就實現了哦。

analogWrite( 7 , hp*25 );

2、Alljoyn通訊

用Alljoyn完全是為了裝逼,可以對別人吹牛說,我的風扇裡用了最先進的物聯網技術,其實用tcp通訊就能實現。

主控板端Alljoyn介面程式碼:

static const char* const testInterface[] = {

“org.alljoyn.sample.ledcontroller”,

“?Flash msec<u”,

“?On”,

“?Off”,

NULL

};

3、科大飛訊語音引擎

大家用著都說好,我試了下,果然不錯!科大飛訊,中國人都用它。

語音識別關鍵部分程式碼:

private InitListener mInitListener = new InitListener() {

 

@Override

public void onInit(int code) {

Log.d(TAG, “SpeechRecognizer init() code = ” + code);

if (code == ErrorCode.SUCCESS) {

findViewById(R.id.isr_recognize).setEnabled(true);

}

}

};

 

 

/**

* 構建語法監聽器。

*/

private GrammarListener grammarListener = new GrammarListener() {

@Override

public void onBuildFinish(String grammarId, SpeechError error) {

if(error == null){

String grammarID = new String(grammarId);

Editor editor = mSharedPreferences.edit();

if(!TextUtils.isEmpty(grammarId))

editor.putString(KEY_GRAMMAR_ABNF_ID, grammarID);

editor.commit();

showTip(“語法構建成功:” + grammarId);

}else{

showTip(“語法構建失敗,錯誤碼:” + error.getErrorCode());

}

}

};

 

/**

* 識別監聽器。

*/

private RecognizerListener mRecognizerListener = new RecognizerListener() {

 

@Override

public void onVolumeChanged(int volume) {

showTip(“當前正在說話,音量大小:” + volume);

}

 

@Override

public void onResult(final RecognizerResult result, boolean isLast) {

runOnUiThread(new Runnable() {

@Override

public void run() {

if (null != result) {

Log.d(TAG, “recognizer result:” + result.getResultString());

String text = “”;

if(mEngineType.equals(SpeechConstant.TYPE_CLOUD))

{

//解析雲端結果

text = JsonParser.parseGrammarResult(result.getResultString());

}else {

//解析本地結果

text = XmlParser.parseNluResult(result.getResultString());

}

// 顯示

//((EditText)findViewById(R.id.isr_text)).setText(text);

 

//分析識別結果

Boolean analyzeRelult = analyzeWords(text);

 

//傳送控制指令

if(analyzeRelult)

{

controlFan(mWindLevel);

}

 

 

} else {

Log.d(TAG, “recognizer result : null”);

}

SystemClock.sleep(100);

//下一次語音識別

Button recognizeButton = (Button)findViewById(R.id.isr_recognize);

 

recognizeButton.performClick();

}

});

 

}

 

@Override

public void onEndOfSpeech() {

showTip(“結束說話”);

 

}

 

@Override

public void onBeginOfSpeech() {

showTip(“開始說話”);

}

 

@Override

public void onError(SpeechError error) {

showTip(“onError Code:” + error.getErrorCode());

SystemClock.sleep(100);

//下一次語音識別

Button recognizeButton = (Button)findViewById(R.id.isr_recognize);

 

recognizeButton.performClick();

}

 

@Override

public void onEvent(int eventType, int arg1, int agr2, String msg) {

}

};

4、Android

做出來手機軟體介面是這樣的

結果

我最初想做出來的智慧風扇應該是這樣的:

但事實上做出來卻是這樣的:

至於具體功能怎麼樣,至於GF用著什麼反應,這個……看下面的視訊

相關文章