太热了,程序员给女朋友做了个智能小风扇

源:alljoyn

链接:www.cnblogs.com/alljoyn/p/3999122.html


演示视频↓↓↓


黄花深巷,

红叶低窗,

凄凉一片秋声。

豆雨声来,

中间夹带风声。

疏疏二十五点,

丽谯门、不锁更声。

故人远,

问谁摇玉佩,

檐底铃声。

彩角声吹月堕,

渐连营马动,

四起笳声。

闪烁邻灯,

灯前尚有砧声。

知他诉愁到晓,

碎哝哝、多少蛩声。

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


一首短诗《声声慢 秋声》献与大家。蒋捷的这首短诗共96字,其中有十个“声”字;其通过风声、雨声、更声、铃声、笳声、砧声、蛩声、雁声来形容秋天的到来,颇有节奏感。


一直颇喜欢古典诗词,怎奈天赋不佳,至今连完整的四言诗都木写出来过……哎……不提伤心往事了……五音不全不能阻止我喜爱音乐,不能作诗亦不能阻止我爱诗哒!!记得小时候在乡间,对四季的变化非常敏锐,树枝张新芽了,知春来了;知了叫了,知夏来了,树叶黄了,知秋来了;雪花飘了,知深冬了。如今,生活在钢筋水泥之间,对季节的感觉淡漠了,似乎是麻木了,唯一触发人知觉的只有温度,冷了暖气,热了风扇/空调;对于季节的感受全然变了被遗弃的孩子,尽管它在冬天里猛力的哭号,也没有多少人能听见……向往古人感受季节的敏锐……


……


我这是说哪去了呢……哎……情不自禁啊……大家谅解……


话说,长沙天气的热是出了名的,四大火炉之一啊!只是今年天气有点异常,只有在7月热了一小段时间,后面一直是清凉气爽的天!!!在这样的天气下,舒服地过了几个月后(咱家席子都换成被子了),现在又突然变热,大家都有点不适应,GF表现得尤为突出。坐一会就焦躁不安地站起来,说热死了,热死了,显得燥热难耐的样子(她本身散热面积就挺大,不知为啥比我还热……)。好吧,那就开风扇吧,可没吹多久,又说这风吹着不舒服,风大了点还冷。额……,这可是开得最小档啊!为了让GF乖乖的做在我旁边陪我写代码(当然她可以用手机玩游戏),我试着用技术来解决这个问题……


学技术,去哪里,当然是山东蓝翔啊,哈哈……开个玩笑,最近关于蓝翔的段子还真不少,咱就不跟这个风了。 咱可是程序员,用一现有技术拼凑(高大上的说法是集成)就能解决问题好不。下面就说说我要做的智能风扇的功能吧:


1、风速无级调节


2、手机控制风扇开关及风速


3、语音控制风扇开关及风速(能够根据语义进行智能控制)


4、通过检测皮肤的温湿度控制风扇开关及风速(手环啊)


要做的功能确定了,那就设计方案和准备材料吧。


硬件



1、风扇


7寸大号丝雨usb电风扇,用着好用就帮人家推荐下(塑料的,轻,便宜),这是我做人的原则


2、主控板



拿着师弟做的带WiFi功能的Arduino板子,不给钱的,光线暗拍着不好看,其实做的还蛮精致的。



3、控制接口电路


通过主控板pwm输出控制电源给风扇供电,用万用板焊接好后如下



4、手机



如果配送这个手机的话,风扇应该会被扔掉,所以坚决不用这种档次的手机。


5、手环


听说又要变天了,为了在天气变凉前把风扇做出来,这个还是在第二版再做吧。


软件



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);

}

对市场上各种产品进行仔细对比后,他发现能把单片机做得最好的都是模拟电路技术很强的公司,当时就有ST和飞利浦(后来分离出NXP)公司。ST做的是自己的内核,飞利浦做的是8051内核,而中国的单片机教学也是以8051为基础的,两者非常契合。但是飞利浦当时对中国市场并不重视,产品定价高,没有样品,连交货也难。

}

};



/**

* 构建语法监听器。

*/

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用着什么反应,这个……妹子提示演示视频见文章顶部。

> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >

单片机应用经常会用到液晶显示或者LED点阵屏,是用点阵的方式显示的,要显示汉字或字符的时候会用到字模,字模就是字在点阵上显示时对应的编码。以字模的方式存储图形或者文字,每一个点都需要一个bit位来存储,该位为0代表该像素点不显示,为1代表显示。这样,一个字节就可以存储8个像素点的显示情况。???一般采用宋体小四号的字符来做显示,这样一个英文字符刚好占8*16个像素;而汉字需要两倍,即16

生成海报
点赞 0

Abin

我还没有学会写个人说明!

相关推荐

基于8051单片机实现电子时钟+数字秒表设计

概述 电子时钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显 示直观、无机械传动装置等优点,因而得到广泛应用。随着人们生活环境的不断改善和美化,在许

MDK5(keil5)编译按钮不见?

1.大部分是第一种情况 整个组件工具栏都不见了 解决办法: 2.小部分是组件工具栏没有编译按钮 解决办法: 参考: KEIL4 上面那个编译的工具栏怎么不见了 Keil工具栏详细说明