标题:【主题征集】+标题;
项目介绍:项目背景和灵感;
功能介绍:项目有哪些功能,用途是什么;
作品演示:模拟应用场景功能演示(文字+图片+视频);
制作过程:项目制作的过程、步骤,以及在此过程中发现的问题 (文字+图片+视频);
总结:作品的完成度、可改善的空间;
资源:代码+源文件。
步骤1 项目介绍
南方的冬天和北方的冬天,是个永远的梗。但不管北方的冬天怎么样,南方的冬天是真得冷。暖冬计划怎么能少了给予第三次生命的被窝呢(第二次是空调),躲进被窝成一桶,管它厕所和开门。。。但人有三急,厕所总是要上的,不过如果不想离开被窝去开门的话,动口不动手还是做的到的。于是就有了今天的项目。
步骤2 功能介绍
因为手头上正好有个小度智能音箱,所以准备将自动开关门和它联合起来,通过MQTT进行连接。这样不但可以进行语音识别控制开关门,也可以通过其它使用MQTT协议的控制端进行控制,万物互联是全新的概念,现在有的防盗门已经加入了物联网,如果没有的话通过一个简单的芯片也是可以手动改造的。
不过在本项目中,为了防止被妻子吊起来打,只是用瓦楞纸做了个模型。望君见谅。
步骤3 作品演示
步骤4 制作过程
材料清单
- 掌控板 X1
- 掌控板扩展板 X1
- 180度舵机 X1
- 热熔胶枪 X1
- 瓦楞纸若干 X1
用瓦楞纸简单搭个造型,手工画个窗,再开个门。。。
手残党,表示过程不表。。。
手头设备比较简陋,所以直接用瓦楞纸做了个连杆结构。。。
直接切个纸片当做门。
本来是设想门是左右推动的,但怕过程不流畅。于是做成了上下推动想借用重力使效果明显点,但其实还是左右好点。不过既然胶枪也打了,也就算了。
PS:每次参加DF的活动,就是自我升级的一个过程。从原来的纯软件党,现在慢慢加上瓦楞纸了,再过段时间估计要上3D打印了。(虽然比较手残)不过话说回来连杆的制作确实是个技术活。第一次弄还没有什么思路就直接上胶了,下次该好好核计核计。
掌控板使用实时模式,加入MQTT网络服务进行通讯。
from dueros.Bot import Bot
from dueros.card.TextCard import TextCard
import paho.mqtt.client as mqtt
HOST = "iot.dfrobot.com.cn"
PORT = 1883
client_id = "kylin_dueros"
Topic = ''
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe(Topic) # 订阅消息
def on_message(client, userdata, msg):
print("主题:"+msg.topic+" 消息:"+str(msg.payload.decode('utf-8')))
def on_subscribe(client, userdata, mid, granted_qos):
print("On Subscribed: qos = %d" % granted_qos)
def on_disconnect(client, userdata, rc):
if rc != 0:
print("Unexpected disconnection %s" % rc)
client = mqtt.Client(client_id)
client.username_pw_set('', '')
client.on_connect = on_connect
client.on_subscribe = on_subscribe
client.on_disconnect = on_disconnect
client.on_message = on_message
client.connect(HOST, PORT, 600)
client.loop_start()
class Bot(Bot):
def launchRequest(self):
'''
打开调用名
'''
self.wait_answer()
output = '欢迎进入暖冬计划被窝服务中心'
card = TextCard(output)
return {
'card': card,
'outputSpeech': output
}
def slot_easy_relay_func(self):
'''
获取数字槽位值处理
'''
print('slot_df_func ================')
# client.connect(HOST, PORT, 600)
value = self.get_slots('dict_light')
print(value)
if '开门' in value:
self.ask('dict_light')
client.publish(Topic, '1')
return {
'outputSpeech': '已为您开门'
}
elif '关门' in value:
self.ask('dict_light')
client.publish(Topic, '0')
return {
'outputSpeech': '已为您关门'
}
elif '退出功能' in value:
return {
'outputSpeech': '欢迎再来'
}
def ended(self):
return {
'outputSpeech': '欢迎再来'
}
步骤5 总结
因为时间的关系,做得比较粗糙。其实可以加上装饰的。比如说,
1. 可以加个LED灯珠, 显示开关门的效果。
2.如果大家仔细看视频的话,会发现开门和关门的口令,我是用:叮当和悟空表示的。。。其原因是小度音箱默认用“开门”,“关门”控制直接接入的物联网设备,并且优先级高于SDK接入的设备(我估计可以改,但我不知道),所以只好出此下策。
3.为了演示方便我直接用了实时模式来实现物联效果,实际操作过程中,可脱离上位机直接写入掌控板,这样的演示效果会好点。
4.控制开关门的连杆还可以做得更顺滑点。
5.本项目给予本人最大的帮助有两点:a. 开始向"造物"进化‘;b. 更熟悉了百度技能中心python SDK的使用。
评论