构建一个遥控Arduino Air-Boat的教程

描述

  在这个项目中,我们将构建一个遥控 Arduino Air-Boat,可以使用433 MHz 射频无线电模块进行无线控制。我们将使用自制遥控器通过构建我们自己的 433 MHz 发射器和接收器模块来控制这艘船。对于远程控制设备或两个设备之间的通信,我们有很多选择,例如 IR、蓝牙、互联网、RF 等。与 IR 通信相比,无线电通信具有范围更广等优点,但它没有需要在发射器和接收器之间建立视线连接。此外,这些模块可以进行两种通信方式,这意味着它可以同时发送和接收。所以使用这个 433MHz 射频模块,让我们构建一个Arduino RC 船在本教程中。

  我们之前使用这些 433Mhz 射频模块构建了许多远程控制项目,用于控制像这种射频控制机器人这样的机器人,或者用于家庭自动化应用程序以使用射频控制家用电器。除了使用射频模块外,我们之前还构建了蓝牙控制的树莓派汽车和 DTMF手机控制的 Arduino 机器人。

  Arduino RC 船所需的组件

射频模块

  433MHz 发射器和接收器

  Arduino(任何 Arduino,以减小我使用 promini 的尺寸)

  HT12E 和 HT12D

  按钮 - 4Nos

  电阻器 - 1mega ohm, 47k ohm

  L293d 电机驱动器

  9V 电池(我使用的是 7.4 伏电池)- 2Nos

  7805调节器- 2Nos

  直流电机 - 2Nos

  电机叶片或螺旋桨(我使用的是自制螺旋桨)- 2Nos

  .1uf 电容器 - 2Nos

  普通PCB

  433MHz 射频发射器和接收器模块

射频模块

  这些类型的射频模块在制造商中非常受欢迎。因为它们的成本低且连接简单。这些模块最适合所有形式的短距离通信项目。这些模块是ASK(幅移键控)在 RF 模块中,幅移键控 (ASK) 是一种幅度调制形式,将数字数据表示为载波幅度的变化。在 ASK 系统中,二进制符号 1 通过在 T 秒的位持续时间内传输固定幅度载波和固定频率来表示。如果信号值为1,则传输载波信号;否则,将发送信号值 0。这意味着它们在传输逻辑“零”时通常不消耗功率。这种低功耗使它们在电池供电的项目中非常有用。

  433MHZ射频发射器

射频模块

  这种类型的模块非常小巧,带有 3 个引脚 VCC、地和数据。其他一些模块带有一个额外的天线引脚。发射模块的工作电压为3V-12V,该模块没有任何可调元件。该模块的主要优点之一是低电流消耗,它需要几乎为零的电流来发送零位。

  Arduino RC船用发射器框图

射频模块

  在上面的框图中,有四个按钮(控制按钮),这些按钮用于控制船的方向。我们有四个用于向前、向后、向左和向右。从按钮,我们得到控制船的逻辑,但不能直接连接到编码器,这就是我们使用 Arduino 的原因。你可能会想我为什么在这里使用 Arduino,只是因为我们需要同时拉下编码器的两个并行数据输入,以实现仅靠按钮无法实现的向后和向前运动。然后编码器将即将到来的并行数据编码为串行输出。然后我们可以在射频发射器的帮助下传输该串行数据。

  Arduino RC 遥控器(发射器)的电路图

射频模块

  在上面的电路中,您可以看到所有四个按钮的一侧都连接到 Arduino (D6-D9) 的四个数字引脚,其他四个都连接到地。也就是说,当我们按下按钮时,相应的数字引脚会变为逻辑低电平。HT12E编码器的四个并行输入连接到 Arduino (D2-D5) 的另外四个数字引脚。所以在Arduino的帮助下,我们可以决定编码器的输入。

  而说编码器HT12E是一个12位编码器和一个并行输入-串行输出编码器。在 12 位中,8 位是可用于控制多个接收器的地址位。引脚 A0-A7 是地址输入引脚。在这个项目中,我们只控制一个接收器,所以我们不想改变它的地址,所以我将所有地址引脚接地。如果你想用一个发射器控制不同的接收器,你可以在这里使用 DIP 开关。AD8-AD11 是控制位输入。这些输入将控制 HT12D 解码器的 D0-D3 输出。我们需要连接一个振荡器进行通信,振荡器频率应为 3KHz用于 5V 操作。那么 5V 的电阻值为 1.1MΩ。然后我将HT12E的输出连接到发射器模块。我们已经提到,Arduino 和 rf 发射器模块,这两个设备在 5V 高压下工作都会杀死它,所以为了避免这种情况,我添加了 7805,稳压器。现在我们可以连接 (Vcc) 6-12volt 任何类型的电池输入。

射频模块

  构建 RC BOAT 发射器电路

  我将每个组件焊接在一个普通的 PCB 上。请记住,我们正在开展一个射频项目,因此存在很多不同类型干扰的机会,因此请尽可能紧密地连接所有组件。最好为 Arduino 和发射器模块使用母排针。此外,尝试将所有东西焊接在铜垫上,而不是使用额外的电线。最后,将一根小线连接到发射器模块,这将有助于增加总范围。在连接 Arduino 和发射器模块之前,请仔细检查 lm7805 输出的电压。

射频模块

  上图显示了完成的 RC 船发射器电路的顶视图,完成的 RC 船发射器电路的底视图如下所示。

射频模块

  构建 Arduino RC 船用发射器外壳

  遥控器需要一个体面的身体。这一步是关于你的想法,你可以用你的想法创建一个远程主体。我正在解释我是如何做到的。做遥控器的时候,我选择4mm的MDF板,你也可以选择胶合板、泡沫板或纸板,然后我从上面剪下两块,长10cm,宽5cm。然后我标记了按钮的位置。我将方向按钮放在左侧,将前进、后退按钮放在右侧。在工作表的另一面,我将按钮连接到主发射电路。请记住,普通按钮有 4 个引脚,每侧两个引脚。将一个引脚连接到 Arduino,另一个引脚连接到地。如果您对此感到困惑,请用万用表检查或查看数据表。

射频模块

  连接所有这些东西后,我将控制电路放在两个 MDF 板之间,并用一些长螺栓拧紧(如果需要,请参考下图)。再一次,创造一个好的身体完全取决于你的想法。

射频模块

  433Mhz 接收模块

射频模块

  这个接收器也非常小,带有 4 个引脚 VCC、接地,两个中间引脚是数据输出。该模块的工作电压为5v。与发射器模块一样,这也是一个低功耗模块。有些模块带有一个额外的天线引脚,但在我的情况下,它不存在。

  Arduino RC 船接收器的框图

射频模块

  上面的框图描述了射频接收器电路的工作原理。首先,我们可以使用射频接收模块接收发射的信号。该接收器的输出是串行数据。但是我们无法用这个串行数据控制任何东西,这就是我们将输出连接到解码器的原因。解码器将串行数据解码为我们原始的并行数据。在本节中,我们不需要任何微控制器,我们可以直接将输出连接到电机驱动器。

  Arduino RC船用接收器电路图

射频模块

  HT12D是一个 12 位解码器,它是一个串行输入并行输出解码器。 HT12D 的输入引脚将连接到具有串行输出的接收器。在 12 位中,8 位(A0-A7)是地址位,HT12D 将解码输入,只要它匹配其当前地址。D8-D11 是输出位。为了将该电路与发射器电路匹配,我将所有地址引脚接地。模块输出的数据为串行类型,解码器将此串行数据解码为原始并行数据,我们通过D8-D11输出。为了匹配振荡频率,应将 33-56k 电阻连接到振荡器引脚。第 17 脚的 LED 指示有效传输,只有在接收器连接到发射器后才会亮起。接收器的电压输入也是6-12伏。

射频模块

  为了控制电机,我使用了L293D IC,我选择了这个IC,因为它可以减小尺寸和重量,而且这个IC最适合控制两个方向的两个电机。L293D 有 16 个引脚,下图显示了引脚排列。

射频模块

射频模块

  1, 9 个引脚是启用引脚,我们将其连接到 5 V 以启用电机 1A、2A、3A 和 4A 是控制引脚。如果引脚 1A 变低,2A 变高,电机将向右转,如果 1A 变低,2A 变高,电机将向左转。所以我们将这些引脚连接到解码器的输出 ps。1Y、2Y、3Y 和 4Y 是电机连接引脚。Vcc2 为电机驱动电压引脚,如果您使用的是高压电机,则将此引脚连接到相应的电压源。

  搭建Arduino RC船的接收电路

  在构建接收器电路之前,您应该记住一些重要的事情。重要的是尺寸和重量,因为在构建电路后,我们需要将其固定在船上。因此,如果重量增加,则会影响浮力和运动。

  因此,与发射器电路一样,将每个组件焊接在一个小型通用 PCB 中,并尽量使用最少的电线。我将电机驱动器的引脚 8 连接到 5v,因为我使用的是 5V 电机。

射频模块

  建造遥控船

射频模块

  我尝试了不同的材料来建造船体。我用 thermocol 片材得到了更好的结果。所以我决定用thermocol建造身体。首先,我拿了一个 3cm 厚的 thermocol 片并将接收器电路放在上面,然后我在 thermocol 中标记了船的形状并切割。所以这就是我造船的方式,大家可以按照自己的想法来造。

  用于 Arduino 空气船的电机和螺旋桨

  体重再次很重要。所以选择正确的电机很重要,我选择了 5 伏、n20 型的普通直流电机,它体积小、重量轻。为避免射频干扰,应将 0.1uf 电容并联到电机输入端。

射频模块

  在螺旋桨的情况下,我用塑料片制作螺旋桨。您可以从商店购买螺旋桨,也可以自己制造,两者都可以正常工作。为了制造螺旋桨,首先,我拿了一块小塑料片,从上面切下两小块,然后在蜡烛热的帮助下弯曲这些小块。最后,我在电机的中心放了一个小孔,并固定在电机上。

射频模块

  Arduino RC 船的工作

  这艘船有两个马达让我们称它为左和右。如果电机也顺时针移动(螺旋桨的位置也取决于),螺旋桨会从前面吸入空气并从后面排出。这会产生向前的阻力。

  向前运动:如果左右电机都顺时针旋转,则向前运动

  向后运动:如果左右电机都逆时针旋转(即螺旋桨从后侧吸入空气,向前侧排气),则会向后运动

  向左移动:如果只有右电机旋转即船,只需从右侧拖动,船就会向左侧移动

  向右移动:如果只有左电机旋转,即船只从左侧得到阻力,这将使船向右移动。

  我们将电机驱动器的输入连接到解码器(D8-D11)的四个输出位。我们可以通过将 AD8-AD11 连接到遥控器中的按钮接地来控制这 4 个输出。例如,如果我们将 AD8 连接到将激活 D8 的接地。因此,我们可以使用这 4 个输出在两个方向上控制两个电机。但是我们不能只通过一个按钮来控制两个电机(我们需要它来进行前后运动),这就是我们使用 Arduino 的原因。在 Arduino 的帮助下,我们可以根据需要选择输入数据引脚。

遥控船的 Arduino 编程

这艘船的编程非常简单,因为我们只需要一些逻辑切换。我们可以用基本的 Arduino 功能实现一切。这个项目的完整程序可以在这个页面的底部找到。你的程序的解释如下

我们通过定义四个输入按钮和解码器输入引脚的整数来启动程序。

 

int f_button = 9; 
int b_button = 8; 
诠释 l_button = 7; 
int r_button = 6; 
诠释m1=2;
国际平方米=3;
诠释 m3=4; 
诠释 m4=5;

 

在设置部分,我定义了引脚模式。也就是说,按钮连接到数字引脚,因此这些引脚应该定义为输入,我们需要为解码器的输入获取输出,因此我们应该将这些引脚定义为输出。

 

   pinMode(f_button,INPUT_PULLUP);
  pinMode(b_button,INPUT_PULLUP);
  pinMode(l_button,INPUT_PULLUP);
  pinMode(r_button,INPUT_PULLUP);
  pinMode(m1,输出);
  pinMode(m2,输出);
  pinMode(m3,输出);
  pinMode(m4,输出);

 

接下来在主循环函数中,我们将使用 Arduino 的digitalread函数读取按钮状态。如果引脚状态变低,表示相应的引脚被按下,那么我们将执行如下条件 -

 

如果(数字读取(f_button)==LOW)

 

这意味着按下了前进按钮

 

{
   数字写入(m1,低);
   数字写入(m3,低);
   数字写入(平方米,高);
   数字写入(m4,高);
}

 

这将下拉编码器的 m1 和 m2,这将激活接收器侧的两个电机。同样,对于向后移动

 

{ 
   digitalWrite(m1, HIGH); 
   数字写入(m3,高);
   数字写入(平方米,低);
   数字写入(m4,低);
}

 

对于左移

 

{
   数字写入(m1,低);
   数字写入(m3,高);
   数字写入(平方米,高);
   数字写入(m4,高);
}

 

为了正确的运动

 

{ 
   digitalWrite(m1, HIGH); 
   数字写入(m3,低);
   数字写入(平方米,高);
   数字写入(m4,高);
}

 

  编译代码后,将其上传到您的 Arduino 板。

  故障排除:将船放在水面上,如果不尝试改变电机和螺旋桨的极性,请检查它是否正确移动。另外,尝试平衡体重。

射频模块

int f_button = 9;
int b_button = 8;
诠释 l_button = 7;
int r_button = 6;
诠释 m1 = 2;
诠释 m2 = 3;
诠释 m3 = 4;
诠释 m4 = 5;
无效设置(){
pinMode(f_button,INPUT_PULLUP);
pinMode(b_button,INPUT_PULLUP);
pinMode(l_button,INPUT_PULLUP);
pinMode(r_button,INPUT_PULLUP);
pinMode(m1,输出);
pinMode(m2,输出);
pinMode(m3,输出);
pinMode(m4,输出);
}
无效循环(){
如果(数字读取(f_button)==低)
{
数字写入(m1,低);
数字写入(m3,低);
数字写入(平方米,高);
数字写入(m4,高);
}
如果(数字读取(b_button)==低)
{
数字写入(平方米,低);
数字写入(m4,低);
数字写入(m1,高);
数字写入(m3,高);
}
如果(数字读取(l_button)==低)
{
数字写入(m1,低);
数字写入(平方米,高);
数字写入(m3,高);
数字写入(m4,高);
}
如果(数字读取(r_button)==低)
{
数字写入(m1,高);
数字写入(平方米,低);
数字写入(m3,高);
数字写入(m4,高);
}
}

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分