(原创)天气又转热了,我给她做了个智能小风扇
黄花深巷,
红叶低窗,
凄凉一片秋声。
豆雨声来,
中间夹带风声。
疏疏二十五点,
丽谯门、不锁更声。
故人远,
问谁摇玉佩,
檐底铃声。
彩角声吹月堕,
渐连营马动,
四起笳声。
闪烁邻灯,
灯前尚有砧声。
知他诉愁到晓,
碎哝哝、多少蛩声。
诉未了,把一半、分与雁声。
一首短诗《声声慢 秋声》献与大家。蒋捷的这首短诗共96字,其中有十个“声”字;其通过风声、雨声、更声、铃声、笳声、砧声、蛩声、雁声来形容秋天的到来,颇有节奏感。
一直颇喜欢古典诗词,怎奈天赋不佳,至今连完整的四言诗都木写出来过……哎……不提伤心往事了……五音不全不能阻止我喜爱音乐,不能作诗亦不能阻止我爱诗哒!!记得小时候在乡间,对四季的变化非常敏锐,树枝张新芽了,知春来了;知了叫了,知夏来了,树叶黄了,知秋来了;雪花飘了,知深冬了。如今,生活在钢筋水泥之间,对季节的感觉淡漠了,似乎是麻木了,唯一触发人知觉的只有温度,冷了暖气,热了风扇/空调;对于季节的感受全然变了被遗弃的孩子,尽管它在冬天里猛力的哭号,也没有多少人能听见……向往古人感受季节的敏锐……
……
我这是说哪去了呢……哎……情不自禁啊……大家谅解……
话说,长沙天气的热是出了名的,四大火炉之一啊!只是今年天气有点异常,只有在7月热了一小段时间,后面一直是清凉气爽的天!!!在这样的天气下,舒服地过了几个月后(咱家席子都换成被子了),现在又突然变热,大家都有点不适应,GF表现得尤为突出。坐一会就焦躁不安地站起来,说热死了,热死了,显得燥热难耐的样子(她本身散热面积就挺大,不知为啥比我还热……)。好吧,那就开风扇吧,可没吹多久,又说这风吹着不舒服,风大了点还冷。额……,这可是开得最小档啊!为了让GF乖乖的做在我旁边陪我写代码(当然她可以用手机玩游戏),我试着用技术来解决这个问题……
学技术,去哪里,当然是山东蓝翔啊,哈哈……开个玩笑,最近关于蓝翔的段子还真不少,咱就不跟这个风了。 咱可是程序员,用一现有技术拼凑(高大上的说法是集成)就能解决问题好不。下面就说说我要做的智能风扇的功能吧:
1、 风速无级调节
2、 手机控制风扇开关及风速
3、 语音控制风扇开关及风速(能够根据语义进行智能控制)
4、 通过检测皮肤的温湿度控制风扇开关及风速(手环啊)
要做的功能确定了,那就设计方案和准备材料吧。
硬件
1、风扇
7寸大号丝雨usb电风扇,用着好用就帮人家推荐下(塑料的,轻,便宜),这是我做人的原则
2、主控板
拿着师弟做的带WiFi功能的Arduino板子,不给钱的,光线暗拍着不好看,其实做的还蛮精致的。
3、 控制接口电路
通过主控板pwm输出控制电源给风扇供电,用万用板焊接好后如下
3、 手机
如果配送这个手机的话,风扇应该会被扔掉,所以坚决不用这种档次的手机。
3、 手环
听说又要变天了,为了在天气变凉前把风扇做出来,这个还是在第二版再做吧。
软件
1、 Arduino IDE编程
是的,控制端的程序我就是用arduino写的,你们就尽情的鄙视我吧。
而且关于pwm调节只要这么一条语句就实现了哦。
1 | analogWrite( 7 , hp*25 ); |
2、 Alljoyn通信
用Alljoyn完全是为了装逼,可以对别人吹牛说,我的风扇里用了最先进的物联网技术,其实用tcp通信就能实现。
主控板端Alljoyn接口代码:
1 2 3 4 5 6 7 | static const char * const testInterface[] = { "org.alljoyn.sample.ledcontroller" , "?Flash msec<u" , "?On" , "?Off" , NULL }; |
3、 科大飞讯语音引擎
大家用着都说好,我试了下,果然不错!科大飞讯,中国人都用它。
语音识别关键部分代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | 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用着什么反应,这个……
本想抽时间拍一个好玩一点的视频,只是一直没有抽出时间,很是抱歉! 上传了最初拍的视频, 大家手下留情哈!
欢迎转载,请保留博客园原创连接。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)