黃花深巷,
紅葉低窗,
凄涼一片秋聲。
豆雨聲來,
中間夾帶風聲。
疏疏二十五點,
麗譙門、不鎖更聲。
故人遠,
問誰搖玉佩,
檐底鈴聲。
彩角聲吹月墮,
漸連營馬動,
四起笳聲。
閃爍鄰燈,
燈前尚有砧聲。
知他訴愁到曉,
碎噥噥、多少蛩聲。
訴未了,把一半、分與雁聲。
一首短詩《聲聲慢 秋聲》獻與大家。蔣捷的這首短詩共96字,其中有十個“聲”字;其通過風聲、雨聲、更聲、鈴聲、笳聲、砧聲、蛩聲、雁聲來形容秋天的到來,頗有節奏感。
一直頗喜歡古典詩詞,怎奈天賦不佳,至今連完整的四言詩都木寫出來過……哎……不提傷心往事了……五音不全不能阻止我喜愛音樂,不能作詩亦不能阻止我愛詩噠!!記得小時候在鄉間,對四季的變化非常敏銳,樹枝張新芽了,知春來了;知了叫了,知夏來了,樹葉黃了,知秋來了;雪花飄了,知深冬了。如今,生活在鋼筋水泥之間,對季節的感覺淡漠了,似乎是麻木了,唯一觸發人知覺的只有溫度,冷了暖氣,熱了風扇/空調;對於季節的感受全然變了被遺棄的孩子,盡管它在冬天里猛力的哭號,也沒有多少人能聽見……向往古人感受季節的敏銳……
……
我這是說哪去了呢……哎……情不自禁啊……大家諒解……
話說,長沙天氣的熱是出了名的,四大火爐之一啊!只是今年天氣有點異常,只有在7月熱了一小段時間,后面一直是清涼氣爽的天!!!在這樣的天氣下,舒服地過了幾個月后(咱家席子都換成被子了),現在又突然變熱,大家都有點不適應,GF表現得尤為突出。坐一會就焦躁不安地站起來,說熱死了,熱死了,顯得燥熱難耐的樣子(她本身散熱面積就挺大,不知為啥比我還熱……)。好吧,那就開風扇吧,可沒吹多久,又說這風吹着不舒服,風大了點還冷。額……,這可是開得最小檔啊!為了讓GF乖乖的做在我旁邊陪我寫代碼(當然她可以用手機玩游戲),我試着用技術來解決這個問題……
學技術,去哪里,當然是山東藍翔啊,哈哈……開個玩笑,最近關於藍翔的段子還真不少,咱就不跟這個風了。 咱可是程序員,用一現有技術拼湊(高大上的說法是集成)就能解決問題好不。下面就說說我要做的智能風扇的功能吧:
1、 風速無級調節
2、 手機控制風扇開關及風速
3、 語音控制風扇開關及風速(能夠根據語義進行智能控制)
4、 通過檢測皮膚的溫濕度控制風扇開關及風速(手環啊)
要做的功能確定了,那就設計方案和准備材料吧。
硬件
1、風扇
7寸大號絲雨usb電風扇,用着好用就幫人家推薦下(塑料的,輕,便宜),這是我做人的原則
2、主控板
拿着師弟做的帶WiFi功能的Arduino板子,不給錢的,光線暗拍着不好看,其實做的還蠻精致的。
3、 控制接口電路
通過主控板pwm輸出控制電源給風扇供電,用萬用板焊接好后如下
3、 手機
如果配送這個手機的話,風扇應該會被扔掉,所以堅決不用這種檔次的手機。
3、 手環
聽說又要變天了,為了在天氣變涼前把風扇做出來,這個還是在第二版再做吧。
軟件
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用着什么反應,這個……
本想抽時間拍一個好玩一點的視頻,只是一直沒有抽出時間,很是抱歉! 上傳了最初拍的視頻, 大家手下留情哈!
歡迎轉載,請保留博客園原創連接。