基于单片机和蓝牙通讯的简易钢琴控制装置设计

news2025/3/4 17:03:03

摘要:本文设计了一个基于单片机和蓝牙通讯的简易钢琴演奏控制装置,在 Proteus 中设计绘制了系统电路原理图,在 Keil 中编写了单片机控制程序并导入 Proteus电路原理图中进行了软、硬件交互仿真,设置了手机蓝牙串口调试的键盘设置及地面站各项参数。通过电路焊接、组装和调试,实现了两种演奏模式,即基于蓝牙通讯的手机 APP 演奏模式和红外感应手动即时演奏模式。

【关键词】 简易钢琴 单片机 蓝牙通讯 红外感应

1 引言

智能机器人是一个集多功能于一体的控制系统,而音乐机器人是通过研发者写入控制程序,能够实现自动演奏音乐的一类仿真机器。本设计以单片机为控制核心,通过驱动步进电机和电磁铁实现 2-3 种敲击木琴的演奏模式,即基于传感器的手动即时演奏、基于蓝牙通讯的手机 APP 的片段演奏、基于单片机的整曲演奏。

2 装置硬件设计

简易钢琴装置的设计需要单片机、步进电机、步进电机驱动、红外传感器模块、蓝牙模块、开关电源、限位开关、电磁铁、继电器模块、小木槌和木琴等器件。简易钢琴的硬件控制框图如图 1 所示。

2.1 简易钢琴装置器件的选择

1 )根据简易钢琴装置控制系统小巧轻便的特点,考虑到系统控制功能的实现情况,选择 STC89C52RC 单片机作为装置的主控芯片。
2 )电机主要用来带动木锤作平行于琴键的定位运动,需要能准确启、停,且要求运行平稳。本设计根据这些要求选择步进电机42BYG 进行驱动,选用 TB6600 步进电机驱动器,实现正反转控制和速度控制。
3 )电磁铁在本装置中用来控制木锤的上下敲击动作,选择 Makeblock 公司的一款电磁铁;另外还给电磁铁配备了继电器模块实现单片机对电磁铁的控制。
4 )手指检测传感器用来检测到手指落下的位置并能发送给单片机从而驱动木锤敲击实际的键盘,要具有一定的抗干扰能力和较高的灵敏度,选择 7 组红外单向反射式传感器,有效距离 2cm-30cm 可满足设计所需,可通过基于单片机和蓝牙通讯的简易钢琴控制装置设计。
本文设计了一个基于单片机和蓝牙通讯的简易钢琴演奏控制装置,在 Proteus 中设计绘制了系统电路原理图,在 Keil 中编写了单片机控制程序并导入 Proteus电路原理图中进行了软、硬件交互仿真,设置了手机蓝牙串口调试的键盘设置及地面站各项参数。通过电路焊接、组装和调试,实现了两种演奏模式,即基于蓝牙通讯的手机 APP 演奏模式和红外感应手动即时演奏模式。
调整电位器旋钮改变检测距离。
5 )根据要求要实现通过手机虚拟键盘弹奏钢琴并由蓝牙模块发送给单片机,从而控制钢琴自动演奏。选择一款常用的 HC-05 蓝牙模块作为地面通讯站。

2.2 系统电路原理图

根据系统硬件框图和所选择的器件,在Proteus 中将步进电机、步进电机驱动、电磁铁、继电器、红外传感器、蓝牙模块、限位开关等分别与单片机连接,绘出系统整体电路原理图如图 2 所示。其中单片机的 TXD RXD与串行模拟终端连接,以进行蓝牙通讯仿真调试。

3 装置软件设计

3.1 蓝牙串口参数设置

通过蓝牙串口助手可以连接蓝牙串口模块进行通信,实现手机串口连接。如图 3 为蓝牙串口助手的主界面图,在这里可以进行模式的选择,和蓝牙模式的控制,在使用这些按键的时候首先要对地面站进行设置,地面站会发送十六进制的数给单片机以完成操作。如图 4为蓝牙通讯地面站设置图。

3.2 单片机程序设计

本设计主要是完成了一个初始化,两个子程序,三种控制。如图 5 为系统的主流程图。系统初始化主要包括定时器初始化,计数器初始化,变量初始化,中断初始化。蓝牙通讯控制程序:主要完成手机与蓝牙的通讯连接,并可以用手机选择控制方式和演奏。红外感应随动控制程序是先初始化,然后跟随手指敲击键盘,系统完成演奏。

Keil 软件中对程序流程图对单片机进行了程序编写和编译,并导入 Proteus 中进行了软、硬件交互仿真,完全实现了系统功能。

4 系统组装

本装置将木琴固定在最前端,对应木槌的位置放置轨道,轨道上有步进电机(四条线接步进电机驱动器),电磁铁(两条线:一条线接开关电源 COM ,一条线接继电器 COM ),限位开关(上端口接 +5V ,下端口接 P1.3 );接着固定 7 个红外传感器( VCC +5V 母线,GND 接地线, OUT 分别连接 P0.0-P0.6 ),继电器(输入:DC+ 接开关电源 +20V DC- 接地,IN 接 P1.2 ;输出: COM 接电磁铁);然后是开关电源(输入 220V ,输出 20V ),步进电机驱动器(输DIR+,ENA+,Pul+ +5V ,DIR-接 P1.1 控制正反转, Pul- P1.0 控制速度,输出:分别接步进电机的四条线),最后固定单片机开发板,把蓝牙模块连接上去(RXD接P3.1 TXD P3.0 VCC +5V GND 接地)。如图 6 所示为简易钢琴装置调试图。

5 系统调试

5.1 装置调试

首先测得琴键之间的距离,计算出一个脉冲运转的距离为 0.002cm 。接着根据同相相阻的原理,确定步进电机的接线。然后从限位开关的三个端口选出两个端口接入电路,电机反转直到机械手臂碰到限位开关停止,说明是正确的接法。最后用电源给继电器供电,发现继电器动作,但是电磁铁无法正常吸合,后来改用 +12V 供电,电磁铁才能正常吸合。

5.2 程序调试

在编写蓝牙控制程序的时候计算波特率,把 11.0593Mhz 误 作 12Mhz 的, 这 样 再 利 用51 波特率设置软件计算出计数器初始值设置是错误的,造成了敲击时候的混乱。在敲击程序里面,设置延时敲击,系统通过提高电机速度、延时敲击来平衡音符之间时间间隔。由实际情况定义电动机移动一格子需要的脉冲,取1210 个脉冲每一格。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2309580.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

React Native从入门到进阶详解

React Native知识框架从入门到进阶的问题。首先需要结合我搜索到的资料来整理出结构化的内容。证据中有多本书籍和文章,可能会涉及不同的章节和重点,需要仔细梳理。 首先,根据邱鹏源的《React Native精解与实战》将知识分为入门和进阶两大部分…

STL——list的介绍和模拟实现

前言 本篇博客我们将要开始介绍list这个容器,list是带头双向循环链表,STL标准模板库中实现了list这样方便我们去使用,那么本篇博客我们将脱下list的神秘外衣,介绍它的使用以及模拟实现。 list的介绍 list的底层是带头双向循环链…

go前后端开源项目go-admin,本地启动

https://github.com/go-admin-team/go-admin 教程 1.拉取项目 git clone https://github.com/go-admin-team/go-admin.git 2.更新整理依赖 go mod tidy会整理依赖,下载缺少的包,移除不用的,并更新go.sum。 # 更新整理依赖 go mod tidy 3.编…

go 分布式redis锁的实现方式

go 语言以高并发著称。那么在实际的项目中 经常会用到锁的情况。比如说秒杀抢购等等场景。下面主要介绍 redis 布式锁实现的两种高并发抢购场景。其实 高并发 和 分布式锁 是一个互斥的两个状态: 方式一 setNX: 使用 redis自带的API setNX 来实现。能解决…

深入理解递归:从原理到C++实践

什么是递归? 递归(Recursion)是编程中一种强大的技术,其核心思想是:函数直接或间接地调用自身。如同俄罗斯套娃一般,每个函数调用都会解开问题的一个层级,直到达到基础条件。 递归三要素&…

MyBatis-Plus 入门详解:从零搭建高效持久层

一、MyBatis-Plus 简介 MyBatis-Plus(简称 MP)是 MyBatis 的增强工具,在保留 MyBatis 原生功能的基础上,提供了全自动化的 CRUD 操作、强大的分页插件、代码生成器等功能,显著减少开发工作量。与原生 MyBatis 相比&…

阿里云物联网获取设备属性api接口:QueryDevicePropertyData

阿里云物联网接口:QueryDevicePropertyData 说明:调用该接口查询指定设备或数字孪生节点,在指定时间段内,单个属性的数据 比如提取上传到物联网的温度数据 api文档:QueryDevicePropertyData_物联网平台_API文档-阿里…

歌曲分类和流行度预测

1. 项目介绍 本项目从kaggle平台上下载了数据集,该数据集包含了3万多首来自Spotify API 的歌曲,共有23个特征。首先对数据集进行预处理,如重复行、缺失值、标准化处理等。再对预处理后的数据进行探索性分析,观察各变量的分布情况&…

不重启mysql情况下排查慢SQL

查状态 mysql> show variables like %slow_query_log%; 开启慢日志 mysql> set global slow_query_logON; 设置1s超时 mysql> set global long_query_time1; 如果想更小,可以设置0.5 查看慢SQL的日志 cat /var/lib/mysql/localhost-slow.log &…

27、Java 反射机制

15-1 Java 反射机制概述 Reflection(反射)是被视为动态语言的关键 动态语言:在运行时代码可以根据某些条件改变自身结构。如 C#\JavaScript\PHP 静态语言:运行时结构不可变的语言。如 Java\C\C 问题:通过直接new的方…

Android 端侧运行 LLM 框架 MNN 及其应用

MNN Chat Android App - 基于 MNN 引擎的智能聊天应用 一、MNN 框架简介与工作原理1.1 什么是 MNN?1.2 MNN 的工作原理 二、MNN Chat Android App2.1 MNN Chat 的功能2.2 MNN Chat 的优势2.3 MNN Chat Android App 的使用 三、总结 随着移动端人工智能需求的日益增长…

FPGA学习(一) —— 四位全加器

FPGA学习(一) —— 四位全加器 文章目录 FPGA学习(一) —— 四位全加器一、半加器1、半加器的真值表2、Verilog代码实现3、RTL原理图4、波形仿真 二、一位全加器1、一位全加器真值表2、Verilog代码实现3、RTL原理图4、波形仿真 三…

PHP:IDEA开发工具配置XDebug,断点调试

文章目录 一、php.ini配置二、IDEA配置 一、php.ini配置 [xdebug] zend_extension"F:\wamp64\bin\php\php7.4.0\ext\php_xdebug-2.8.0-7.4-vc15-x86_64.dll" xdebug.remote_enable on xdebug.remote_host 127.0.0.1 xdebug.remote_port 9001 xdebug.idekey"…

LINUX网络基础 - 网络编程套接字,UDP与TCP

目录 前言 一. 端口号的认识 1.1 端口号的作用 二. 初识TCP协议和UDP协议 2.1 TCP协议 TCP的特点 使用场景 2.2 UDP协议 UDP的特点 使用场景 2.3 TCP与UDP的对比 2.4 思考 2.5 总结 三. 网络字节序 3.1 网络字节序的介绍 3.2 网络字节序思考 四. socket接口 …

QT实现单个控制点在曲线上的贝塞尔曲线

最终效果: 一共三个文件 main.cpp #include <QApplication> #include "SplineBoard.h" int main(int argc,char** argv) {QApplication a(argc, argv);SplineBoard b;b.setWindowTitle("标准的贝塞尔曲线");b.show();SplineBoard b2(0.0001);b2.sh…

Linux基础开发工具(vim编译器,yum与apt软件安装)

Linux 下载安装软件的方案 源代码安装-》》》非常麻烦与复杂一步错步步错 rmp包安装 -》》》只是安装没有对应的库与依赖相当于只是一个外壳 包管理器进行安装-》》 yum / apt(本篇重点讲解) 1.什么是软件包和软件包管理器 就好⽐ "App" 和 "应⽤商店"…

神经网络 - 激活函数(Maxout 单元)

一、Maxout 单元 Maxout 单元是一种特殊的激活函数&#xff0c;用于神经网络中&#xff0c;其主要思想是通过多个线性变换的最大值来作为神经元的输出&#xff0c;从而提高模型的表达能力和鲁棒性。 1. 数学定义 假设输入为 x&#xff0c;Maxout 单元会计算 k 个线性变换&am…

nginx+keepalived负载均衡及高可用

1 项目背景 keepalived除了能够管理LVS软件外&#xff0c;还可以作为其他服务的高可用解决方案软件。采用nginxkeepalived&#xff0c;它是一个高性能的服务器高可用或者热备解决方案&#xff0c;Keepalived主要来防止服务器单点故障的发生问题&#xff0c;可以通过其与Nginx的…

VirtualBox虚拟机转VM虚拟机

前言&#xff1a;部分靶机只适用于VirtualBox&#xff0c;VM打不开VirtualBox的文件&#xff0c;所以需要进行转换 前置条件&#xff1a;本机已经下载VM和VirtualBox 第一步&#xff1a;文件转换 找到VirtualBox.exe所在位置&#xff0c;启动cmd窗口 文件转换的命令&#xf…

使用DeepSeek+KIMI生成高质量PPT

一、使用DeepSeek DeepSeek官网&#xff1a;DeepSeek 点击“开始对话”&#xff0c;进入交互页面。 在上图中&#xff0c;输入问题&#xff0c;即可获取AI生成的结果。 基础模型&#xff08;V3&#xff09;&#xff1a;通用模型&#xff08;2024.12&#xff09;&#xff0c;高…