(原创)天气又转热了,我给她做了个智能小风扇

简介: 黄花深巷, 红叶低窗, 凄凉一片秋声。 豆雨声来, 中间夹带风声。 疏疏二十五点, 丽谯门、不锁更声。 故人远, 问谁摇玉佩, 檐底铃声。 彩角声吹月堕, 渐连营马动, 四起笳声。

黄花深巷,

红叶低窗,

凄凉一片秋声。

豆雨声来,

中间夹带风声。

疏疏二十五点,

丽谯门、不锁更声。

故人远,

问谁摇玉佩,

檐底铃声。

彩角声吹月堕,

渐连营马动,

四起笳声。

闪烁邻灯,

灯前尚有砧声。

知他诉愁到晓,

碎哝哝、多少蛩声。

诉未了,把一半、分与雁声。

一首短诗《声声慢 秋声》献与大家。蒋捷的这首短诗共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用着什么反应,这个……

 

本想抽时间拍一个好玩一点的视频,只是一直没有抽出时间,很是抱歉! 上传了最初拍的视频, 大家手下留情哈!

 

 

 欢迎转载,请保留博客园原创连接。

目录
相关文章
|
数据采集 前端开发
河北稳控科技便携式钻孔测斜仪数据采集仪如何使用
主界面包含了若干程序的快捷方式,通过双击快捷方式可以启动对应的程序(软件),通过鼠标右键(手写笔长按)桌面空白区域可弹出桌面菜单调用。桌面快捷方式中,【我的设备】和【WIN5/612X】两个最为常用。 【我的设备】快捷方式:打开系统资源管理器,可访问设备内部、外部存储器,完成文件浏览、复制、粘贴、删除等文件操作。
河北稳控科技便携式钻孔测斜仪数据采集仪如何使用
|
传感器 数据采集
河北稳控科技便携式钻孔测斜仪数据采集仪的使用方法
开机前,请将测斜探头连接到采集仪传感器接口上。禁止开机后带电插拔探头。按下电源开关按钮,电源指示灯亮(按钮外环),主设备通电,屏幕启动,操作系统启动完成后,若设置了测斜程序自动启动则进入测斜仪程序主界面,否则进入操作系统桌面。
河北稳控科技便携式钻孔测斜仪数据采集仪的使用方法
|
传感器 存储
河北稳控科技多功能手持VH501TC采集仪如何连接传感器与读数
振弦传感器和温度传感器(NTC)均为无源传感,不需要连接电源线。 根据前述“设备组成和接口定义” 用对应颜色的鳄鱼夹分别连接振弦传感器线圈和温度传感器两端即可。传感器连接后,屏幕自动显示实时的测量结果。一般情况下,设备配套传感测线为一根 4 芯线,红黑线连接振弦线圈,另外两根连接温度传感器。
河北稳控科技多功能手持VH501TC采集仪如何连接传感器与读数
河北稳控科技MLX90640 红外热成像仪测温模块开发笔记(四)
如前“开发笔记(一)”所说,MLX90640 可能存在不超过 4 个像素的损坏或者不良像素,在温度计算过程完成后,这些不良像素点会得到错误的温度数据,对于处理这些不良数据 MLX 也给出了推荐方法和具体的函数。(其实就是找相邻的正常的温度数据取平均来代替不良数据)
河北稳控科技MLX90640 红外热成像仪测温模块开发笔记(四)
|
移动开发 小程序 物联网
1小时打造HaaS版小小蛮驴智能车
1小时打造HaaS版小小蛮驴智能车
1小时打造HaaS版小小蛮驴智能车
|
传感器 人机交互 芯片
智能车随手记:蓝多多关于智能车竞赛的碎碎念
智能车随手记:蓝多多关于智能车竞赛的碎碎念
硬件新品一周简报:加意Duux迷你空净、MAG P90磁动枪、Instrument 1智能乐器和“食光机+WIFI侠”
这一周,各式硬件新品的逐一登场让人应接不暇。笔者就为大家精选了本周国内外较为关注的硬件新品众筹和发布资讯。
353 0
硬件新品一周简报:加意Duux迷你空净、MAG P90磁动枪、Instrument 1智能乐器和“食光机+WIFI侠”
|
传感器 iOS开发
用耳朵“打字”!这个设备能监测耳部肌肉运动,让瘫痪患者正常打字交流
用耳朵“打字”!这个设备能监测耳部肌肉运动,让瘫痪患者正常打字交流
145 0
|
监控 安全 5G
北理工开发5G无人配送车,支持人脸识别和体温检测,已部署中关村校区
北理工开发5G无人配送车,支持人脸识别和体温检测,已部署中关村校区
170 0