使用伺服电机在机器人技术中很常见,以实现精确控制。在这里,在本教程中,我们将向您展示如何通过蓝牙连接将伺服电机与arduino uno和android设备无线使用。我们已经使用 arduino 控制了伺服,这次我们使用arduino 和蓝牙控制伺服电机。
所需材料
arduino uno
hc-05 或 hc-06 蓝牙模块
伺服电机
来自playstore的roboremo应用程序
面包板
连接线
hc-06 蓝牙模块
蓝牙可以在以下两种模式下运行:
命令模式
操作模式
在命令模式下,我们将能够配置蓝牙属性,例如蓝牙信号的名称,密码,操作波特率等。操作模式是我们能够在pic微控制器和蓝牙模块之间发送和接收数据的模式。因此,在本教程中,我们将只玩弄操作模式。命令模式将保留默认设置。设备名称将是hc-05(我正在使用hc-06),密码将是0000或1234,最重要的是,所有蓝牙模块的默认波特率为9600。
模块采用 5v 电源供电,信号引脚工作在 3.3v,因此模块本身存在一个 3.3v 稳压器。因此,我们不必担心。在六个引脚中,只有四个将在操作模式下使用。引脚连接表如下所示
s.no hc-05/hc-06 上的引脚 mcu 上的引脚名称 pic 中的引脚编号
1 vcc vdd 31圣针
2 vcc 格德 32德·针
3 德克萨斯 rc6/tx/ck 25千针
4 接收 rc7/rx/dt 26千针
5 州 数控 数控
6 英文(使能) 数控 数控
电路图
此arduino蓝牙伺服电机控制项目的电路图如下:
配置 roboremo 应用程序以控制伺服:
第 1 步:-从android play商店下载roboremo应用程序并将其安装在智能手机中。安装后,您将看到如图1所示的应用程序窗口,通过单击“菜单”按钮,您将看到如下所示的图2所示窗口:
第 2 步:-然后单击连接按钮,您将看到下面图3所示的窗口,然后您必须选择“蓝牙rfcomm”,然后您将能够将hc-06蓝牙模块与android应用程序“roboremo”连接。
第 3 步:-连接到hc-06蓝牙模块后,返回图2窗口,然后单击“编辑ui”以根据需要创建用户界面。
当单击“编辑ui”时,您将再次看到图1所示的窗口,然后单击屏幕上的任意位置,您将看到如图4所示的应用程序窗口,然后选择“按钮”以获取按钮结构。
第 4 步:-选择按钮后,您将在屏幕上看到一个按钮结构进行编辑。您可以调整结构的大小并将其移动到屏幕上的任意位置。现在,要设置通过蓝牙单击时发送的值,您有“设置按下操作”(如图 6 所示)并键入要从该特定按钮发送的值。就像,我们正在发送“1”通过按 roboremo android 应用程序中的“开始”按钮来旋转伺服。
您可以在后面给出的表格中检查所有值,单击不同的按钮发送。
第 5 步:-最后,我们有用户界面来使用智能手机控制伺服电机。
代码和说明
最后给出了通过蓝牙的arduino控制伺服电机的完整代码。
arduino具有伺服电机库,它处理所有与pwm相关的东西来旋转伺服器,您只需要输入要旋转的角度,并且有功能servo1.write(angle); 这会将伺服器旋转到所需的角度。
因此,这里我们首先定义伺服电机的库,软件串行库用于定义rx和tx引脚。
#include
#include
在下面的代码中,我们正在初始化 rx 和 tx 的 arduino 引脚,为伺服和其他东西定义变量。
servo myservo; int txd = 11; int rxd = 10; int servoposition; int servopos; int new1; softwareserial bluetooth(txd, rxd);
现在,将所有变量和组件设置为初始阶段。在这里,我们将伺服器连接到 9千arduino的引脚,并使伺服的初始位置为0度。串行和蓝牙通信的波特率也已设置为 9600。
void setup() {
int pos=0;
myservo.attach(9);
myservo.write(0);
serial.begin(9600); // start serial communication at 9600bps
bluetooth.begin(9600);
}
在空回路功能中,arduino将一直检查输入的值,并根据从智能手机接收的值旋转伺服。所有值都将使用串行通信接收。
如果值为 0,则伺服将旋转到 0 度。同样,如果我们从蓝牙应用程序发送 45、90、135 和 180,则伺服将分别旋转到 45、90、135 和 180 度角。
void loop() {
if (bluetooth.available()){
string value = bluetooth.readstring();
servoposition = value.toint();
if (value.toint() == 0){
serial.println(servoposition);
myservo.write(0);
}
if (value.toint() == 45){
serial.println(servoposition);
myservo.write(45);
}
if (value.toint() == 90){
serial.println(servoposition);
myservo.write(90);
}
if (value.toint() == 135){
serial.println(servoposition);
myservo.write(135);
}
if (value.toint() == 180){
serial.println(servoposition);
myservo.write(180);
}
如果我们通过按开始按钮发送值“1”,则伺服将连续旋转,直到按下停止按钮。在这里,我们在按下停止按钮时发送“2”,arduino 将读取该按钮,它将中断 while 循环并停止伺服。
while(value.toint()==1){
if (bluetooth.available())
{
value = bluetooth.readstring();
serial.println(value);
if (value.toint()==2)
{serial.println(yyy); break; }
}
servopos++;
delay(30);
serial.println(servopos);
myservo.write(servopos);
if (servopos ==180 )
{servopos=0;break;}
}
}
}
使用蓝牙的伺服电机控制工作:
在这个项目中,我们使用android应用程序“roboremo”控制伺服电机。在此应用程序的界面中,我们创建了 5 个按钮来控制伺服电机,如前所述。下表给出了每个按钮的工作:
s.no。 按钮名称 发送值 描述
1. 开始 1 此按钮用于开始将伺服从 0⁰ 旋转到 180⁰。
2. 停 2 此按钮用于随时停止舵机。
3. 0⁰ 0 此按钮用于将舵机旋转到 0⁰。
4. 90⁰ 90 此按钮用于将舵机旋转到 90⁰。
5. 180⁰ 180 此按钮用于将舵机旋转到 180⁰。
因此,通过按下android应用程序roboremo上的这些按钮,数据将通过智能手机的蓝牙发送到hc-06蓝牙模块。从hc-06模块数据由arduino接收,arduino以特定按钮的代码中定义的角度旋转伺服。我们还对角度 45 和 135 进行了编码,但由于 roboremo 应用程序的限制,您只能创建 5 个按钮,因此我们跳过了两个按钮。
因此,这就是您可以使用蓝牙将数据从智能手机发送到arduino以无线控制伺服的方法。
#include
#include
servo myservo;
int txd = 11;
int rxd = 10;
int servoposition;
int servopos;
int new1;
softwareserial bluetooth(txd, rxd);
void setup() {
int pos=0;
myservo.attach(9);
myservo.write(0);
serial.begin(9600); // start serial communication at 9600bps
bluetooth.begin(9600);
}
void loop() {
if (bluetooth.available())
{
string value = bluetooth.readstring();
servoposition = value.toint();
if (value.toint() == 0)
{
serial.println(servoposition);
myservo.write(0);
}
if (value.toint() == 45)
{
serial.println(servoposition);
myservo.write(45);
}
if (value.toint() == 90)
{
serial.println(servoposition);
myservo.write(90);
}
if (value.toint() == 135)
{
serial.println(servoposition);
myservo.write(135);
}
if (value.toint() == 180)
{
serial.println(servoposition);
myservo.write(180);
}
while(value.toint()==1){
if (bluetooth.available())
{
value = bluetooth.readstring();
serial.println(value);
if (value.toint()==2)
{serial.println(yyy); break; }
}
servopos++;
delay(30);
serial.println(servopos);
myservo.write(servopos);
if (servopos ==180 )
{servopos=0;break;}
}
}
}
中国移动率先在铁道大厦建设并开通了5G网络
宁德时代即将奔向新能源汽车产业更广阔的天地
使用CVS服务器提高OPNET模型开发配置的工作效率
如何实现高性能的锁相环(PLL)设计
关于5G对于人工智能的影响分析
如何使用Arduino的蓝牙控制伺服电机
一分钟告诉你各新材料行业的产业链结构图
“来雨或来晴”- 汽车抬头显示器必须每天工作
Linux Kernel 5.12合并窗口被迫延期的消息
高亮度LED照明的应用解决方案,LED driver
清华大学RUSH脑成像项目已升级到第二代
推动在智能制造中实现更高水平的灵活性、生产力和可持续性
关于Buck电路纹波控制的方式
干货:稳压器常见故障及排除方法
赛灵思28nm 超越一代的领先地位
使用单电源的运放交流放大电路(含同相和反相输入式)
小米note5最新消息:小米Note系列要直接出5小米Note5自带安卓7.1深度定制的MIUI
互联网巨头们相继入场,围绕云端AI芯片的暗战
国产芯片和进口芯片差距究竟有多远?芯片的国产化只能靠BAT了吗
永磁同步电机弱磁控制-表贴电机弱磁算法