黃花深巷,
紅葉低窗,
凄涼一片秋聲。
豆雨聲來,
中間夾帶風聲。
疏疏二十五點,
麗谯門、不鎖更聲。
故人遠,
問誰搖玉佩,
檐底鈴聲。
彩角聲吹月堕,
漸連營馬動,
四起笳聲。
閃爍鄰燈,
燈前尚有砧聲。
知他訴愁到曉,
碎哝哝、多少蛩聲。
訴未了,把一半、分與雁聲。
一首短詩《聲聲慢 秋聲》獻與大家。蔣捷的這首短詩共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用着什麼反應,這個……
本想抽時間拍一個好玩一點的視訊,隻是一直沒有抽出時間,很是抱歉! 上傳了最初拍的視訊, 大家手下留情哈!
歡迎轉載,請保留部落格園原創連接配接。