回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【创客大作战之暖冬行动】能说就不做 简单

头像 kylinpoet 2020.11.30 1026 0

标题:【主题征集】+标题;

项目介绍:项目背景和灵感;

功能介绍:项目有哪些功能,用途是什么;

作品演示:模拟应用场景功能演示(文字+图片+视频);

制作过程:项目制作的过程、步骤,以及在此过程中发现的问题 (文字+图片+视频);

总结:作品的完成度、可改善的空间;

资源:代码+源文件。

步骤1 项目介绍

南方的冬天和北方的冬天,是个永远的梗。但不管北方的冬天怎么样,南方的冬天是真得冷。暖冬计划怎么能少了给予第三次生命的被窝呢(第二次是空调),躲进被窝成一桶,管它厕所和开门。。。但人有三急,厕所总是要上的,不过如果不想离开被窝去开门的话,动口不动手还是做的到的。于是就有了今天的项目。

project-image

步骤2 功能介绍

因为手头上正好有个小度智能音箱,所以准备将自动开关门和它联合起来,通过MQTT进行连接。这样不但可以进行语音识别控制开关门,也可以通过其它使用MQTT协议的控制端进行控制,万物互联是全新的概念,现在有的防盗门已经加入了物联网,如果没有的话通过一个简单的芯片也是可以手动改造的。

不过在本项目中,为了防止被妻子吊起来打,只是用瓦楞纸做了个模型。望君见谅。

project-image

步骤3 作品演示

步骤4 制作过程

材料清单

  • 掌控板 X1
  • 掌控板扩展板 X1
  • 180度舵机 X1
  • 热熔胶枪 X1
  • 瓦楞纸若干 X1

用瓦楞纸简单搭个造型,手工画个窗,再开个门。。。

手残党,表示过程不表。。。

project-image

手头设备比较简陋,所以直接用瓦楞纸做了个连杆结构。。。

直接切个纸片当做门。

本来是设想门是左右推动的,但怕过程不流畅。于是做成了上下推动想借用重力使效果明显点,但其实还是左右好点。不过既然胶枪也打了,也就算了。

project-image

PS:每次参加DF的活动,就是自我升级的一个过程。从原来的纯软件党,现在慢慢加上瓦楞纸了,再过段时间估计要上3D打印了。(虽然比较手残)不过话说回来连杆的制作确实是个技术活。第一次弄还没有什么思路就直接上胶了,下次该好好核计核计。

 

掌控板使用实时模式,加入MQTT网络服务进行通讯。

project-image
代码
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的使用。

 

 

评论

user-avatar