(原創)天氣又轉熱了,我給她做了個智能小風扇


黃花深巷,

紅葉低窗,

凄涼一片秋聲。

豆雨聲來,

中間夾帶風聲。

疏疏二十五點,

麗譙門、不鎖更聲。

故人遠,

問誰搖玉佩,

檐底鈴聲。

彩角聲吹月墮,

漸連營馬動,

四起笳聲。

閃爍鄰燈,

燈前尚有砧聲。

知他訴愁到曉,

碎噥噥、多少蛩聲。

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

一首短詩《聲聲慢 秋聲》獻與大家。蔣捷的這首短詩共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用着什么反應,這個……

 

本想抽時間拍一個好玩一點的視頻,只是一直沒有抽出時間,很是抱歉! 上傳了最初拍的視頻, 大家手下留情哈!

 

 

 歡迎轉載,請保留博客園原創連接。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM