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

黄花深巷,

红叶低窗,

凄凉一片秋声。

豆雨声来,

中间夹带风声。

疏疏二十五点,

丽谯门、不锁更声。

故人远,

问谁摇玉佩,

檐底铃声。

彩角声吹月堕,

渐连营马动,

四起笳声。

闪烁邻灯,

灯前尚有砧声。

知他诉愁到晓,

碎哝哝、多少蛩声。

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

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

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

时间: 2024-10-10 03:05:08

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

ASO检索规则-热词覆盖如何来做?

ONE 关于ASO优化什么是检索规则?检索规则主要是按照APP中设置的应用标题.副标题.关键词.开发商名称,按照匹配度的大小和权重比例进行有效的检索显示的规则.通俗的来说,也就是大家经常谈到的热词覆盖.其中标题和副标题的权重最大,接着是关键词.所以大家也是很热衷于关键词优化和标题优化.什么是排名规则?排名规则是根据检索规则显示出的所有应用,计算在某一特定关键词下的搜索量.下载量.激活量.短期活跃.评论数等,综合以上元素按照由高到低,依次进行有效的排序规则.排名规则也是现在常用的优化方式,是现在市

(原创)cocos lua 热更新从零开始(一)最简单demo

开发环境:WIN7 + cocos2dx 3.10 lua版本 0.学习这篇内容的基础是你要会创建并运行一个cocos lua项目 1.热更新的思想所谓的热更新,就是在线更新代码和资源.热更新的过程首先,客户端向服务器发送请求,服务器告诉客户端,没更新啦,你是最新的啦,那就直接跳过喽.但如果是告诉你有更新,那就要告诉我哪些需要更新对吧,你可能需要更新的东西,放在一个文件里,一并发送给客户端,客户端拿到这个文件,就一个一个去向服务器要,最后把要更新的内容都下载到本地了. 2.热更新用到的类:Ass

【原创】Mac book pro入手后,需要做哪些才能开始开展自动化测试工作

2018国庆节,脑袋一热,入手了一台Mac book pro,从此掉坑到了这个异构的操作系统中,因为之前工作中接触了Windows.Linux.Unix等操作系统的诸多版本,基本的操作倒是不成问题,但将Windows上自己已经熟悉的自动化工具测试环境移植到Mac OS上,还是有些挑战的,先按流水账记录下自己的过程. 1. 升级操作系统版本到最新的小版本.因为自己的Mac books是2017年款,操作系统版本为10.13.4,根据提示升级到最新的10.13.6. 2. 学习使用Mac OS的快捷

[原创]MinHook测试与分析(x64下 E9,EB,CALL指令测试,且逆推测试微软热补丁)

依稀记得第一次接触Hook的概念是在周伟民先生的书中-><<多任务下的数据结构与算法>>,当时觉得Hook很奇妙,有机会要学习到,正好近段日子找来了MiniHook,就一起分享一下. 本篇文章是在x64下测试与分析jmp+offset类型的Hook,并且逆推测出热补丁的简单用法,MinHook它的中心就是覆盖重写并且可以复原.知道大概的思路后后让我们先来具体的实现MinHook再去做测试. 首先是堆的申请(申请PAGE_SIZE大小自动生长的堆),以下是实现与卸载 1 NTS

MinHook测试与分析(x86下 E8,E9,EB,CALL指令测试,且逆推测试微软热补丁)

依稀记得第一次接触Hook的概念是在周伟民先生的书中-><<多任务下的数据结构与算法>>,当时觉得Hook的本质就是拦截,就算到现在也是如此认为. 本篇文章是在x86下测试与分析跳转+offset类型的Hook,并且逆推测出热补丁的简单用法,MinHook它的中心就是覆盖重写并且可以复原.知道大概的思路后后让我们先来具体的实现MinHook再去做测试. 首先是堆的申请,这是必要也必须做的,对于微软函数HeapCreate()就不再赘述,以下是实现与卸载 1 NTSTATUS

9月mob(ShareSDK)活动预告,这个秋天很热

9月秋天来临,广州的天气依然很热,广州的活动氛围更热~ 先有GMGC B2B对接会在广州创新谷,再有上方网TFC全球移动游戏开发者大会来袭,游戏圈的火越烧越旺,成都GMGDC全球移动游戏开发者大会也在9月底凑热闹~ 已经升级为mob移动开发者服务平台的ShareSDK,自然不会错过这个热闹的9月.下面来预告一下这些火热的活动,mob约你来见! 活动预告一:2014创新中国秋季 活动名称:2014创新中国杭州总决赛 活动时间:2014年9月3-4日 活动规模:5000人以上 活动形式:展览+论坛

名词模块_季节天气

名词模块_季节天气 季节天气 释义 season 季节 autumn 秋天 spring 春天 winter 冬天 summer 夏天 weather 天气 wind 风 windy 有风的 cloud 云 cloudy 多云的 rain 雨,下雨 rainy 下雨的 typhoon 台风 snow 雪,下雪 snowy 下雪的 warm 温暖的 cool 凉爽的 cold 冷的 hot 热的 sunny 阳光的 wet 湿的 dry 干燥的 different 不同的 Weather in s

DB天气app冲刺第六天

更改计划 以前是准备完全自己写一个天气App 而且加上自己已经成功的做了一个安卓开发的小例子了,就感觉可以做的出来了.结果这五天证明自己一开始的思路就错了.所以上次跟别的同学问了一下.看了一下他们的方案.决定想从网上个找几个模板,然后自己按照自己的设计思路进行创作开发. 例子昨天已经找好了,而且我也已经自动忽略了昨天的的冲刺了.所以昨天就没有算作自己冲刺的一天. 更改计划如下 今天算作是自己重新冲刺的第一天.基本熟悉模板的各部分功能与作用,读懂各部分作者的代码. 第二三四天 按照自己的设计思路吧

DB天气app冲刺第十天

好了 这是第十天了,按照白板任务上的来说的话,今天没有完成,所以等一下还要继续看看今天能不能把他做完,今天出的问题在于我又自己调整了一下UI设计,因为发现以前的设计发面有重复,浪费了屏幕.所以还不如省下来安排一些其他的事情.导致今天没有做关于天气城市数据库的了解,等会应该会继续看一下数据库的建立的事情,找一下其他的天气APP的模板来看一下,今天做的主要还是UI的调整,但发现现在来说越调整越出错,感觉应该先放一下做其他方面的了,不然就困在里面了. 还有一个作业没有完成的就是老师流的每个组140字的