使用Arduino的DTMF控制的机器人

原文地址: https://circuitdigest.com/microcontroller-projects/dtmf-controlled-robot-using-arduino

使用Arduino的DTMF控制的机器人

ARDUINO的

经过**萨达姆** 2015年8月11日62
在这里插入图片描述
目前,几乎所有人都熟悉机器人。机器人在人类生活中扮演着非常重要的角色。机器人是一种机器,它减少了工业,建筑等繁重工作中的人力,并使生活变得轻松。我们在这里的下一个机器人是移动机器人或DTMF控制的机器人。DTMF控制的机器人运行在拨号音中存在的移动DTMF技术上。DTMF代表双音多频。我们使用一些频率来创建DTMF音调。简而言之,通过添加或混合两个或多个频率来生成DTMF音调。这些频率如下:
在这里插入图片描述

在给定的图中,我们可以看到两组不同的频率。当一个较高的频率和一个较低的频率混合时,就会创建一个音调,并且该音调我们称为“ 双音调多频”

所需组件

  • Arduino UNO
  • 直流马达
  • 手机
  • DTMF解码器模块
  • 马达驱动器L293D
  • 9伏电池
  • 电池接头
  • 辅助线
  • 带轮机器人底盘
  • 连接线

什么是DTMF?

DTMF是一种双音多频解码器模块,它具有MT8870 DTMF解码器IC,该IC将DTMF音调信号解码为数字音频,这对于数字音频来说是可以接受的。在这里,需要使用辅助线将DTMF模块连接到电话。
在这里插入图片描述

使用Arduino的DTMF控制机器人的框图

在这里插入图片描述

**远程部分:**此部分的主要组件是DTMF。在这里,我们通过使用辅助线连接到DTMF解码器IC即MT8870,从手机中获得了一种音调,该MT8870将音调解码为4位数字信号。

控制部分: Arduino UNO用于控制机器人的整个过程。Arduino读取DTMF解码器发送的命令,并与定义代码或模式进行比较。如果命令匹配,则arduino将相应的命令发送到驱动程序部分。

**驱动器部分:**驱动器部分包括电动机驱动器和两个直流电动机。电动机驱动器用于驱动电动机,因为arduino无法为电动机提供足够的电压和电流。因此,我们添加了一个电动机驱动器电路,以为电动机获得足够的电压和电流。通过从arduino电动机驱动器收集命令,根据命令驱动电动机。

电路图和工作说明

在这里插入图片描述

基于Arduino的DTMF控制机器人的电路图与我们的其他机器人非常相似,例如PC控制机器人线路跟随器手势控制机器人等等。在此,将一个电机驱动器连接到arduino,以驱动机器人。电动机驱动器的输入引脚2、7、10和15分别连接到arduino数字引脚6、5、4和3。在这里,我们使用了两个直流电动机来驱动机器人,其中一个电动机连接在电动机驱动器3和6的输出引脚上,另一电动机连接在11和14上。一个9伏电池也用于为电动机驱动器供电。与该电路相连的DTMF解码器和此解码器使用辅助线插入到手机中,以接收命令或DTMF音。DTMF解码器引脚D0-D3直接与Arduino的引脚号19、18、17、16连接。两个9伏电池用于为电路供电,其中一个用于为电动机供电,并连接到电动机驱动器IC引脚号8。另一个电池用于连接其余电路。

DTMF控制机器人的工作

DTMF控制的机器人由一些通过手机发送的命令来运行。我们在这里使用手机的DTMF功能。在这里,我们已经使用手机来显示项目的工作。一种是用户手机,我们将其称为“远程电话”,另一种是通过辅助线与机器人电路相连的手机。我们将此手机称为“接收器电话”。

首先,我们使用远程电话拨打电话来接听电话,然后通过手动或自动应答方式参加通话。现在,这是由手机控制此DTMF控制的机器人的方式:

当我们通过远程电话按“ 2”时,机器人开始向前移动,并继续向前移动,直到出现下一个命令。
在这里插入图片描述
当我们通过远程电话按“ 8”时,机器人将更改其状态并开始向后移动,直到出现其他命令。
在这里插入图片描述

当我们按“ 4”时,机器人左转直到下一个命令被取消。
在这里插入图片描述
当我们按“ 6”时,机器人向右转。
在这里插入图片描述
对于停止机器人,我们通过“ 5”。
在这里插入图片描述

编程说明

首先,在程序中我们定义了电机的输出引脚和DTMF解码器输出的输入引脚,如Arduino的INPUT一样。
在这里插入图片描述

然后在设置中将电动机引脚设置为OUTPUT,将DTMF解码器输出引脚设置为INPUT。
在这里插入图片描述
之后,我们读取DTMF解码器的输出,然后使用“ if”语句与定义的值进行比较并执行相对操作。
在这里插入图片描述

DTMF控制的机器人具有以下五个条件:
在这里插入图片描述
我们根据上表条件编写程序。

代码

#define m11 3
#define m12 4
#define m21 5
#define m22 6

#define D0 19
#define D1 18
#define D2 17
#define D3 16

void forward()
{
   digitalWrite(m11, HIGH);
   digitalWrite(m12, LOW);
   digitalWrite(m21, HIGH);
   digitalWrite(m22, LOW);
}

void backward()
{
   digitalWrite(m11, LOW);
   digitalWrite(m12, HIGH);
   digitalWrite(m21, LOW);
   digitalWrite(m22, HIGH); 
}

void left()
{
   digitalWrite(m11, HIGH);
   digitalWrite(m12, LOW);
   digitalWrite(m21, LOW);
   digitalWrite(m22, LOW);
}

void right()
{
   digitalWrite(m11, LOW);
   digitalWrite(m12, LOW);
   digitalWrite(m21, HIGH);
   digitalWrite(m22, LOW);
}

void Stop()
{
   digitalWrite(m11, LOW);
   digitalWrite(m12, LOW);
   digitalWrite(m21, LOW);
   digitalWrite(m22, LOW);
}

void setup() 
{
  pinMode(D0, INPUT);
  pinMode(D1, INPUT);
  pinMode(D2, INPUT);
  pinMode(D3, INPUT);

  pinMode(m11, OUTPUT);
  pinMode(m12, OUTPUT);
  pinMode(m21, OUTPUT);
  pinMode(m22, OUTPUT);
}

void loop() 
{

  int temp1=digitalRead(D0);
  int temp2=digitalRead(D1);
  int temp3=digitalRead(D2);
  int temp4=digitalRead(D3);
 
  if(temp1==0 && temp2==1 && temp3==0 && temp4==0)
  forward();

  else if(temp1==0 && temp2==0 && temp3==1 && temp4==0)
  left();

  else if(temp1==0 && temp2==1 && temp3==1 && temp4==0)
  right();

  else if(temp1==0 && temp2==0 && temp3==0 && temp4==1)
  backward();

   else if(temp1==1 && temp2==0 && temp3==1 && temp4==0)
  Stop();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值