8184浏览
查看: 8184|回复: 0
打印 上一主题 下一主题

[动态] 【比赛优秀作品】基于物联网的智能儿童音乐工作站

[复制链接]
本帖最后由 虚怀若谷 于 2024-4-29 13:56 编辑

【比赛优秀作品】基于物联网的智能儿童音乐工作站

作品来源:第五届全国青少年人工智能创新挑战赛——开源硬件创意智造专项赛

参赛学生:

  • 刘先恩 沈阳市苏家屯区城郊九年一贯制学校

  • 代一含 沈阳市苏家屯区城郊九年一贯制学校

原文链接:

https://contest.dfrobot.com.cn/tcwl2022/project/312643?p=dfrobot2022sh

1 创意灵感

我们通过观察发现:学龄段儿童对音乐类玩具很感兴趣,例如卡拉OK麦克风这一玩具在淘宝上的销量就很高,通过播放儿童歌曲,帮助学龄段儿童学习音乐,提高音乐感知能力,但现有的卡拉OK麦克风玩具的问题是:

  • 功能单一
  • 无法录音
  • 缺少亲子互动

所以我们决定利用物联网技术、人工智能技术对卡拉OK麦克风进行升级,从而制作一个包含儿歌与绘本、内置录音、且能够实现远程亲子互动功能的智能儿童音乐工作站,不仅为学龄段儿童提供娱乐性和趣味性,还能促进音乐和语言发展,增强自信心和表达能力,更能促进亲子互动与交流。

2 演示视频

https://www.bilibili.com/video/BV12M4y1L7SV/

3 功能简介

本作品为基于物联网的智能儿童音乐工作站,由三个部分组成,具体功能如下:

1.卡拉OK玩偶

通过行空板的板载麦克风,实现录制音频功能;

通过行空板与蓝牙音箱,点击屏幕能够播放儿童歌曲《花园里种花》《小兔子乖乖》、绘本《安徒生童话》、录制的音频;

通过模拟声音传感器制作一个模拟话筒,以便对儿童唱歌时的声音强度进行检测,将结果实时显示在行空板屏幕上;

通过按钮与彩色LED灯带,实现儿童与玩具的互动:按下黄色按钮后,麋鹿帽子上的灯带会有呼吸灯的效果,同时播放声音:“宝宝唱的真好”;

按下行空板A键时,屏幕显示歌曲剩余播放时间。

2.旋转音乐盒

通过舵机与按钮,握住麋鹿玩偶的左手,音乐盒上的圣诞老人会旋转,增加儿童玩具的趣味性。

3.亲子远程互动平台

通过EASYLOT物联网平台,家长可使用手机小程序远程查看儿童播放歌曲、绘本的时间及频率,随时随地掌握儿童的动态;

通过发送消息模块,家长可使用手机远程与儿童互动,促进亲子交流:

(1)输入play指令时,音箱播放“宝宝快来和小麋鹿一起玩呀”

(2)输入sleep指令时,音箱播放“宝宝该睡觉了”

4 作品功能分析与设计

步骤1 作品功能分析与设计

首先围绕着智能玩具主题进行讨论,归纳学龄段儿童玩具的种类,经过分析选择制作的智能玩具种类为音乐类;

接着提出现有的音乐类玩具存在的问题,根据问题确定解决方案,设计作品的功能。

【比赛优秀作品】基于物联网的智能儿童音乐工作站图1

步骤2 绘制结构草图与选择器材

在外观上,选择麋鹿玩偶做卡拉OK机的主要的外形,搭配音乐盒丰富作品功能;

根据产品清单,选择需要的硬件。

【比赛优秀作品】基于物联网的智能儿童音乐工作站图2

【比赛优秀作品】基于物联网的智能儿童音乐工作站图3

步骤3 设置物联网与连接蓝牙

登录EASYLOT物联网平台iot.dfrobot.com.cn,新建设备并命名:音乐工作站

【比赛优秀作品】基于物联网的智能儿童音乐工作站图4

由于学校的喇叭模块被借走,因此使用蓝牙音箱代替,使用MoBaxterm软件,依次输入以下指令进行连接:

  • ssh mailto:root@10.1.2.3
  • password:dfrobot
  • bluetoothctl
  • default-agent
  • power on
  • scan on
  • trust ( 蓝牙音箱MAC地址)
  • pair( 蓝牙音箱MAC地址)
  • connect( 蓝牙音箱MAC地址)

【比赛优秀作品】基于物联网的智能儿童音乐工作站图5

步骤4 收集音频素材与编程环境部署

1.收集素材

在网站中下载儿童歌曲与绘本的mp3音频文件(http://www.goodkejian.com/erge.htm

使用Text To Speech 网站(https://www.text-to-speech.cn/),制作互动语音,如:宝宝唱的真好等

使用在线转换音频文件 (https://www.aconvert.com/cn/audio/)网站,转换音频格式为wav格式

下载麋鹿图片作为行空板屏幕背景和logo图标

【比赛优秀作品】基于物联网的智能儿童音乐工作站图6

2.编程环境部署

添加行空板、MQTT、舵机等扩展库,连接远程终端

【比赛优秀作品】基于物联网的智能儿童音乐工作站图7

步骤5

连接硬件与编写程序

1.连接硬件

将灯带、按钮、声音传感器等硬件与行空板相连接,将舵机、按钮与Arduino Nano主控板相连接,并记录对应的引脚;

通过焊接和接线,将2.54mm杜邦头 转换为PH2.0接口,同时增加线的长度。

【比赛优秀作品】基于物联网的智能儿童音乐工作站图8

【比赛优秀作品】基于物联网的智能儿童音乐工作站图9

【比赛优秀作品】基于物联网的智能儿童音乐工作站图10

2.编写程序

程序分为2部分,第一部分为卡拉OK玩偶,使用的是行空板、按钮、灯带、声音传感器,在Mind+软件python模式下使用图形化模块编写,第二部分为音乐盒,使用的是Arduino Nano主控板、按钮、舵机,在Mind+软件上传模式下使用图形化模块编写

【比赛优秀作品】基于物联网的智能儿童音乐工作站图11

【比赛优秀作品】基于物联网的智能儿童音乐工作站图12

【比赛优秀作品】基于物联网的智能儿童音乐工作站图13

步骤6

组装音乐工作站与调试系统

1.组装音乐工作站

将行空板通过螺丝与圆形木板、方形木板固定,通过魔术贴将木板粘贴到玩偶上,布置灯带位置

【比赛优秀作品】基于物联网的智能儿童音乐工作站图14

【比赛优秀作品】基于物联网的智能儿童音乐工作站图15

2.调试系统

运行程序,通过远程桌面查看行空板的屏幕显示,测试程序功能,通过物联网平台测试远程互动功能

【比赛优秀作品】基于物联网的智能儿童音乐工作站图16

【比赛优秀作品】基于物联网的智能儿童音乐工作站图17

硬件清单

五、软件源代码

1.图形化编程源程序文件(音乐盒部分)

下载附件智能儿童音乐工作站-2 旋转音乐盒.zip

2.python代码(卡拉OK玩偶部分)

注:由于图形化编程源文件为150M无法上传,故用python代码展示,图形化编程可见步骤5中的截图(具体代码也可在原文中下载)


[table]
[tr][td]#  -*- coding: UTF-8 -*-[/td][/tr]
[tr][td]
[/td][td] [/td][/tr]
[tr][td]
[/td][td]# MindPlus[/td][/tr]
[tr][td]
[/td][td]# Python[/td][/tr]
[tr][td]
[/td][td][b]from pinpong.extension.unihiker [b]import *[/td][/tr]
[tr][td]
[/td][td][b]from pinpong.board [b]import Board,Pin[/td][/tr]
[tr][td]
[/td][td][b]from unihiker [b]import Audio[/td][/tr]
[tr][td]
[/td][td][b]from unihiker [b]import GUI[/td][/tr]
[tr][td]
[/td][td][b]import siot[/td][/tr]
[tr][td]
[/td][td][b]import time[/td][/tr]
[tr][td]
[/td][td] [/td][/tr]
[tr][td]
[/td][td]# 事件回调函数[/td][/tr]
[tr][td]
[/td][td]def on_message_callback(client, userdata, msg):[/td][/tr]
[tr][td]
[/td][td]    # 订阅到音乐工作站[/td][/tr]
[tr][td]
[/td][td]    [b]if (msg.topic == "PwgwpquVR"):[/td][/tr]
[tr][td]
[/td][td]        print("dingyueok")[/td][/tr]
[tr][td]
[/td][td]        [b]if (msg.payload.decode() == "sleep"):[/td][/tr]
[tr][td]
[/td][td]            # 播放宝宝该睡觉了[/td][/tr]
[tr][td]
[/td][td]            u_audio.start_play("sleep.wav")[/td][/tr]
[tr][td]
[/td][td]            print("sleep")[/td][/tr]
[tr][td]
[/td][td]        [b]if (msg.payload.decode() == "play"):[/td][/tr]
[tr][td]
[/td][td]            # 播放快来和小麋鹿一起玩呀[/td][/tr]
[tr][td]
[/td][td]            u_audio.start_play("playgame.wav")[/td][/tr]
[tr][td]
[/td][td]            print("playgame")[/td][/tr]
[tr][td]
[/td][td]def button_click5():[/td][/tr]
[tr][td]
[/td][td]    [b]global BoFangBiaoZhi[/td][/tr]
[tr][td]
[/td][td]    [b]if (BoFangBiaoZhi == 1):[/td][/tr]
[tr][td]
[/td][td]        u_audio.stop_play()[/td][/tr]
[tr][td]
[/td][td]    thread5=u_gui.start_thread(u_thread5_function)[/td][/tr]
[tr][td]
[/td][td]def u_thread5_function():[/td][/tr]
[tr][td]
[/td][td]    [b]global BoFangBiaoZhi[/td][/tr]
[tr][td]
[/td][td]    bofang.config(image="zanting2.png")[/td][/tr]
[tr][td]
[/td][td]    song.config(text="正在播放:安徒生童话")[/td][/tr]
[tr][td]
[/td][td]    u_audio.start_play("4安徒生童话.wav")[/td][/tr]
[tr][td]
[/td][td]    siot.publish(topic="PwgwpquVR", data="你的孩子播放了绘本:安徒生童话")[/td][/tr]
[tr][td]
[/td][td]    BoFangBiaoZhi = 1[/td][/tr]
[tr][td]
[/td][td]    u_audio.record("record.wav",30)[/td][/tr]
[tr][td]
[/td][td]    u_audio.stop_play()[/td][/tr]
[tr][td]
[/td][td]    BoFangBiaoZhi = 0[/td][/tr]
[tr][td]
[/td][td]    # 绘本播放结束,[/td][/tr]
[tr][td]
[/td][td]    # 图片⏸变为▶[/td][/tr]
[tr][td]
[/td][td]    bofang.config(image="kaishi2.png")[/td][/tr]
[tr][td]
[/td][td]def button_click2():[/td][/tr]
[tr][td]
[/td][td]    [b]global BoFangBiaoZhi[/td][/tr]
[tr][td]
[/td][td]    [b]if (BoFangBiaoZhi == 1):[/td][/tr]
[tr][td]
[/td][td]        u_audio.stop_play()[/td][/tr]
[tr][td]
[/td][td]    thread2=u_gui.start_thread(u_thread2_function)[/td][/tr]
[tr][td]
[/td][td]def u_thread2_function():[/td][/tr]
[tr][td]
[/td][td]    [b]global BoFangBiaoZhi[/td][/tr]
[tr][td]
[/td][td]    bofang.config(image="zanting2.png")[/td][/tr]
[tr][td]
[/td][td]    song.config(text="正在播放:花园里种花")[/td][/tr]
[tr][td]
[/td][td]    u_audio.start_play("5花园里种花.wav")[/td][/tr]
[tr][td]
[/td][td]    # 向物联网平台的音乐工作站模块发送消息[/td][/tr]
[tr][td]
[/td][td]    siot.publish(topic="PwgwpquVR", data="你的孩子播放了儿歌:花园里种花")[/td][/tr]
[tr][td]
[/td][td]    BoFangBiaoZhi = 1[/td][/tr]
[tr][td]
[/td][td]    u_audio.record("record.wav",30)[/td][/tr]
[tr][td]
[/td][td]    u_audio.stop_play()[/td][/tr]
[tr][td]
[/td][td]    BoFangBiaoZhi = 0[/td][/tr]
[tr][td]
[/td][td]    bofang.config(image="kaishi2.png")[/td][/tr]
[tr][td]
[/td][td]def button_click1():[/td][/tr]
[tr][td]
[/td][td]    [b]global BoFangBiaoZhi[/td][/tr]
[tr][td]
[/td][td]    [b]if (BoFangBiaoZhi == 1):[/td][/tr]
[tr][td]
[/td][td]        u_audio.stop_play()[/td][/tr]
[tr][td]
[/td][td]    thread1=u_gui.start_thread(u_thread1_function)[/td][/tr]
[tr][td]
[/td][td]def u_thread1_function():[/td][/tr]
[tr][td]
[/td][td]    [b]global BoFangBiaoZhi[/td][/tr]
[tr][td]
[/td][td]    bofang.config(image="zanting2.png")[/td][/tr]
[tr][td]
[/td][td]    song.config(text="正在播放:小兔子乖乖")[/td][/tr]
[tr][td]
[/td][td]    u_audio.start_play("1小兔子乖乖.wav")[/td][/tr]
[tr][td]
[/td][td]    siot.publish(topic="PwgwpquVR", data="你的孩子播放了儿歌:小兔子乖乖")[/td][/tr]
[tr][td]
[/td][td]    BoFangBiaoZhi = 1[/td][/tr]
[tr][td]
[/td][td]    u_audio.record("record.wav",30)[/td][/tr]
[tr][td]
[/td][td]    u_audio.stop_play()[/td][/tr]
[tr][td]
[/td][td]    BoFangBiaoZhi = 0[/td][/tr]
[tr][td]
[/td][td]    bofang.config(image="kaishi2.png")[/td][/tr]
[tr][td]
[/td][td]def button_click3():[/td][/tr]
[tr][td]
[/td][td]    [b]global BoFangBiaoZhi[/td][/tr]
[tr][td]
[/td][td]    BoFangBiaoZhi = 1[/td][/tr]
[tr][td]
[/td][td]    u_audio.start_play("record.wav")[/td][/tr]
[tr][td]
[/td][td]    bofang.config(image="zanting2.png")[/td][/tr]
[tr][td]
[/td][td]def button_click4():[/td][/tr]
[tr][td]
[/td][td]    [b]global BoFangBiaoZhi[/td][/tr]
[tr][td]
[/td][td]    BoFangBiaoZhi = 0[/td][/tr]
[tr][td]
[/td][td]    u_audio.pause_play()[/td][/tr]
[tr][td]
[/td][td]    bofang.config(image="kaishi2.png")[/td][/tr]
[tr][td]
[/td][td]def on_buttona_click_callback():[/td][/tr]
[tr][td]
[/td][td]    # 按下A键时,显示歌曲/绘本剩余播放时间[/td][/tr]
[tr][td]
[/td][td]    tip.config(text=(str((str("剩余时间:") + str(round((u_audio.play_time_remain() / 60),2)))) + str("分钟")))[/td][/tr]
[tr][td]
[/td][td] [/td][/tr]
[tr][td]
[/td][td] [/td][/tr]
[tr][td]
[/td][td]u_audio = Audio()[/td][/tr]
[tr][td]
[/td][td]siot.init(client_id="",server="iot.dfrobot.com.cn",port=1883,user="QnpUu1-4R",password="w7pUXJ-VRz")[/td][/tr]
[tr][td]
[/td][td]u_gui=GUI()[/td][/tr]
[tr][td]
[/td][td]Board().begin()[/td][/tr]
[tr][td]
[/td][td]siot.set_callback(on_message_callback)[/td][/tr]
[tr][td]
[/td][td]siot.connect()[/td][/tr]
[tr][td]
[/td][td]siot.loop()[/td][/tr]
[tr][td]
[/td][td]p_p22_analog=Pin(Pin.P22, Pin.ANALOG)[/td][/tr]
[tr][td]
[/td][td]p_p24_in=Pin(Pin.P24, Pin.IN)[/td][/tr]
[tr][td]
[/td][td]p_p23_pwm=Pin(Pin.P23, Pin.PWM)[/td][/tr]
[tr][td]
[/td][td]u_gui.on_a_click(on_buttona_click_callback)[/td][/tr]
[tr][td]
[/td][td]# 连接EASY LOT物联网平台[/td][/tr]
[tr][td]
[/td][td]siot.getsubscribe(topic="PwgwpquVR")[/td][/tr]
[tr][td]
[/td][td]siot.publish(topic="PwgwpquVR", data="连接成功")[/td][/tr]
[tr][td]
[/td][td]BoFangBiaoZhi = 0[/td][/tr]
[tr][td]
[/td][td]# 设置行空板屏幕显示:文字、图片、下划线等[/td][/tr]
[tr][td]
[/td][td]bg=u_gui.draw_image(image="lu.png",x=123,y=110)[/td][/tr]
[tr][td]
[/td][td]yinliang=u_gui.draw_text(text=" ",x=160,y=10,font_size=11, color="#663300")[/td][/tr]
[tr][td]
[/td][td]icon=u_gui.draw_image(image="lulogo.png",x=8,y=5)[/td][/tr]
[tr][td]
[/td][td]icon.config(w=20)[/td][/tr]
[tr][td]
[/td][td]text=u_gui.draw_text(text="菜单",x=30,y=5,font_size=14, color="#CC0000")[/td][/tr]
[tr][td]
[/td][td]l1=u_gui.draw_line(x0=2,y0=66,x1=239,y1=66,width=1,color="#663300")[/td][/tr]
[tr][td]
[/td][td]l2=u_gui.draw_line(x0=2,y0=102,x1=239,y1=102,width=1,color="#663300")[/td][/tr]
[tr][td]
[/td][td]l3=u_gui.draw_line(x0=2,y0=138,x1=239,y1=138,width=1,color="#663300")[/td][/tr]
[tr][td]
[/td][td]huiben1=u_gui.draw_text(text="绘本:安徒生童话",x=3,y=40,font_size=14, color="#663300")[/td][/tr]
[tr][td]
[/td][td]huiben1.config(onclick=button_click5)[/td][/tr]
[tr][td]
[/td][td]music1=u_gui.draw_text(text="儿歌:小兔子乖乖",x=3,y=75,font_size=14, color="#663300")[/td][/tr]
[tr][td]
[/td][td]music1.config(onclick=button_click1)[/td][/tr]
[tr][td]
[/td][td]music2=u_gui.draw_text(text="儿歌:花园里种花",x=3,y=107,font_size=14, color="#663300")[/td][/tr]
[tr][td]
[/td][td]music2.config(onclick=button_click2)[/td][/tr]
[tr][td]
[/td][td]song=u_gui.draw_text(text="",x=75,y=170,font_size=10, color="#990000")[/td][/tr]
[tr][td]
[/td][td]song.config(origin="center")[/td][/tr]
[tr][td]
[/td][td]tip=u_gui.draw_text(text="快和小麋鹿一起玩耍吧",x=50,y=300,font_size=11, color="#990000")[/td][/tr]
[tr][td]
[/td][td]bofang=u_gui.draw_image(image="kaishi2.png",x=45,y=180)[/td][/tr]
[tr][td]
[/td][td]bofang.config(w=70)[/td][/tr]
[tr][td]
[/td][td]PLAY=u_gui.add_button(text="播放",x=30,y=260,w=60,h=30,onclick=button_click3)[/td][/tr]
[tr][td]
[/td][td]PAUSE=u_gui.add_button(text="暂停",x=150,y=260,w=60,h=30,onclick=button_click4)[/td][/tr]
[tr][td]
[/td][td] [/td][/tr]
[tr][td]
[/td][td][b]while True:[/td][/tr]
[tr][td]
[/td][td]    # 读取声音传感器音量[/td][/tr]
[tr][td]
[/td][td]    yinliang.config(text=(str("音量:") + str(p_p22_analog.read_analog())))[/td][/tr]
[tr][td]
[/td][td]    # 按下按钮[/td][/tr]
[tr][td]
[/td][td]    [b]if (p_p24_in.read_digital()==True):[/td][/tr]
[tr][td]
[/td][td]        [b]while [b]not (([b]not (p_p24_in.read_digital()==True))):[/td][/tr]
[tr][td]
[/td][td]            [b]pass[/td][/tr]
[tr][td]
[/td][td]        # 实现呼吸灯效果[/td][/tr]
[tr][td]
[/td][td]        print("按下")[/td][/tr]
[tr][td]
[/td][td]        Deng = 0[/td][/tr]
[tr][td]
[/td][td]        [b]while [b]not ((Deng >= 255)):[/td][/tr]
[tr][td]
[/td][td]            Deng = (Deng + 1)[/td][/tr]
[tr][td]
[/td][td]            p_p23_pwm.write_analog(Deng)[/td][/tr]
[tr][td]
[/td][td]            time.sleep(0.01)[/td][/tr]
[tr][td]
[/td][td]        [b]while [b]not ((Deng <= 0)):[/td][/tr]
[tr][td]
[/td][td]            Deng = (Deng - 1)[/td][/tr]
[tr][td]
[/td][td]            p_p23_pwm.write_analog(Deng)[/td][/tr]
[tr][td]
[/td][td]            time.sleep(0.01)[/td][/tr]
[tr][td]
[/td][td]        # 播放:宝宝唱的真好[/td][/tr]
[tr][td]
[/td][td]        u_audio.play("good.wav")[/td][/tr]
[/table]

6 作品图片

【比赛优秀作品】基于物联网的智能儿童音乐工作站图18

【比赛优秀作品】基于物联网的智能儿童音乐工作站图19

往期推荐




















您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail