如何使用Arduino和Android蓝牙模块控制伺服电机

伺服电机广泛用​​于机器人技术中以进行精确控制。任何人–好吧,几乎任何人–具有带有蓝牙连接功能的移动设备。在本教程中,您将找到如何使用Arduino UNO和Android设备通过蓝牙连接无线控制伺服电机。最后,您将获得更多的连接,使事情变得更加轻松,并通过触摸屏控制伺服电机。

在本文中,我将向您介绍与HC-06蓝牙模块,Arduino UNO和SG90伺服电机的蓝牙连接。此外,您需要本教程的其他资源,例如具有蓝牙功能的Android智能手机以及将命令从智能手机发送到Bluetooth模块的应用程序。

在教程的第一部分,我将向您展示如何将HC-06蓝牙模块连接到Arduino。在第二部分中,您可以找到要在HC-06蓝牙模块的AT命令模式下输入的源代码。在这里你’ll设置设备名称,密码和HC-06模块的波特率。最后,在最后一部分中,您将看到如何设置Android应用程序以及如何对Arduino进行编程,只需按一下按钮即可转动伺服电机。

要求

连接正确的部分,并使它们彼此交流。这是该项目的计划。如果您已经拥有以下所有或部分内容,那么您很幸运。整个项目将不花任何费用,或者花费几美元,以防您只购买缺少的零件。否则,您必须花费数十美元购买伺服电机,蓝牙模块,开发板和其他一些配件。为了清楚地了解成本,在此项目中使用的每个零件和配件的右侧是一个在线商店的链接。以下是部分:

  • 1个Arduino UNO(亚马孙) –蓝牙模块几乎与任何Arduino模型兼容,但本教程中的所有代码和原理图均适用于UNO。
  • 1 X HC-06(亚马孙) –这是一个从属蓝牙模块,非常易于与Arduino通过串行通信使用。
  • 1 X SG90伺服电机(亚马孙) –这可能是DIY社区中最受欢迎的伺服电机。
  • 7 X公对公跳线(亚马孙)。
  • 1 X面包板(亚马孙)。
  • 1 X And​​roid智能手机(亚马孙)。

设置硬件

在本节中,我将向您展示如何连接Arduino UNO和HC-06蓝牙模块。

要使用HC-06模块,只需将VCC引脚连接到Arduino上的3.3V输出,将GND引脚连接到任何Arduino GND引脚,然后将蓝牙模块的TX引脚连接到Arduino UNO的引脚10和RX引脚蓝牙连接到Arduino的引脚11。

对于伺服电机,将棕色线连接至任何Arduino GND引脚,将红色线从SG90伺服器连接至Arduino的5V输出,将橙色线从伺服电机连接至Arduino的数字引脚9。

如何使用Arduino UNO和HC-06蓝牙模块设置SG90伺服电机

阅读更多→

RC Snow Plough Robot:最佳做法和范例

在过去的5年中,对扫雪机器人的兴趣激增,这在很大程度上要归功于机器人领域的爱好者。在这篇鼓舞人心的文章中,我介绍了除雪机器人的最重要部分,以使您的工作更轻松,并使您专注于更重要的事情:构建除雪机器人。

扫雪机器人的设计种类繁多。有些项目会采用非常专业的方法(例如 开源除雪机器人),而其他人则具有更古怪的设计(例如 RC旋雪犁)。但是设计除雪机器人的最佳方法是什么?有哪些组件和零件使扫雪机对用户更具功能性?请仔细阅读,找出答案。

1.构建强大的模块化平台

该平台’s的设计对于任何扫雪机器人的成功至关重要。您需要确保移动机器人能够打扫房屋’通过坚固的底盘和牵引系统的人行道,不会失去抓地力,也不会徒劳地旋转。

耐用的结构

大多数制造商没有时间,倾斜度和专用空间来焊接金属底盘。应该考虑的所有其他因素都可以提供坚固性和足够的简单性,以使用简单的工具进行构建。

各种铝质通道和型材连接器是构建适用于扫雪机器人的复杂刚性结构的最佳选择。
铝制导轨,立方体和托架,T型螺母和螺钉,外壳
附件和附件可为户外任务提供持久的平台。

这个 在该项目中,设计人员使用铝制导轨来构建适用于割草机和扫雪机器人的底盘。

铝制模块化组件示例:

阅读更多→

重型机器人12/24 / 32V直流电动机驱动器指南

重型机器人和所有类型的DC电动机提供的驱动器种类繁多。在本文中,我列出了用于12/24 / 32V有刷直流电动机的电动机驱动器列表。

1. DimensionEngineering

尺寸工程’s 马达驱动器对正在建造重型远程控制机器人的爱好者具有很好的吸引力。但是,并不是只有很多业余爱好者能充分利用这些强大的电机驱动器的所有优势。研究任何尺寸工程’的电动机驱动器,您可以使用它们通过模拟电压,无线电控制,串行和分组串行控制两个直流电动机。

所有这些电机驱动器均经过过电流和热保护设计,这意味着您’绝不会因意外失速或控制两个大电动机而损坏其中之一。另外,有一个再生系统,只要它收到减速或反转直流电动机的命令,就会为机器人的电池充电。

这些电机驱动器中的任何一个都具有简单的界面设计,您只需插入即插即用,’请根据需要设置开关。而且,这些仅需单个引脚即可进行控制。

比较简单的方法是使用任何与微控制器兼容的模拟或数字传感器将信息发送到Sabertooth电动机驱动器。用于控制它们的微控制器的顶部是Arduino。很容易理解,为什么众多业余爱好者通过Arduino使用电机驱动器。您有启发,库和Arduino代码以及远程控制机器人说明的出色示例。

尺寸工程’s motor drivers –剑齿双12A / 25A / 32A / 60A–适用于45Kg(100lbs)至450 Kg(1000lbs)之间的移动机器人,电动汽车或小型摩托车。 阅读更多→

24V有刷直流电动机的电动机驱动器

在全地形机器人上获得良好经验的关键是用于控制高扭矩直流电动机的电动机驱动器。在本文中,我研究了适用于24V有刷直流电动机的最佳电动机驱动器。该选择基于机器人规范,该规范随着有关 如何为全地形机器人选择24V直流电动机.

什么意思 最好的 给我的机器人?最佳的高电流电动机驱动器必须至少满足两个条件。第一个条件是与Arduino和Raspberry Pi等开发板的兼容性。第二个与将来的计划有关。由于预算有限,因此两个版本的机器人都必须使用相同的电机驱动器:远程控制和自主控制。

在列出大电流电机驱动器之前,让’从重要的理论事物开始。

电机控制器和电机驱动器之间的区别

为了清楚了解电动机控制器和电动机驱动器之间的区别,我’我将对两者进行简短概述。

无论您使用的是电动机控制器还是电动机驱动器,它们都能够控制直流电动机的速度和方向。区别在于板载微控制器或缺少它。

电机控制器是带有微控制器的电机驱动器。电机驱动器没有微控制器,因此必须由其他设备(如Arduino或Raspberry Pi)控制,以控制电机的速度和方向。否则,您可以使用设计用于产生PWM和控制电动机方向的电动机控制器。 阅读更多→

当直流电动机需要24V运行时,如何为全地形机器人选择电池

这是我计划使用四轮驱动机器人应对复杂地形的问题之一。而且由于没有电能,我的机器人只是一件简单的家具,因此在本文中,我必须找到技术和电池价格之间的最佳报告,以使我的机器人能够正常运行1.5个小时。

此外,为简化机器人的电源系统,我将使用两节12V电池。我不会为每种类型的组件使用标称电压不同的多个电池,因为它们的电压范围可能会有所不同。一世’保持一切尽可能简单。

我知道仅使用一个标称电压有优点也有缺点。优势之一是我可以只用一个电池充电器同时为电池充电。第二个优点是平台重量轻。鉴于机器人将在室外工作,因此重量轻可能是牵引的优势。较轻的机器人需要较少的功率,因此我需要较小的电池才能获得更长的运行时间。

缺点是,由于某些电子设备通常在与执行器和传感器不同的电压下工作,因此我不得不使用许多稳压器。 阅读更多→

如何为全地形机器人平台选择24V直流电动机

我想构建一个能够处理困难地形的4W机器人平台。第一步是列出可能的直流电动机,这些直流电动机能够将机器人推到沙子,泥泞,岩石,森林,草坪或其他任何我想驱动的地方。

在本文中,我的目标是找到直流电动机的转矩和RPM的理论值。另外,我列出了可用于该项目的直流电动机的列表。我知道,通过试验和错误,很难轻松地为特定应用匹配电动机。而且,购买和测试许多直流电动机的必要性很低,给我带来了额外的成本。因此,我必须根据功能要求确定最佳的直流电动机规格。

直流电动机(图像源)

直流电动机(图片来源)

让’使移动平台的功能要求有所提高。该机器人应能够通过由皮带或轴连接到车轮的四个直流电动机驱动,爬升到20度的坡度,提供的电压= 24伏,车轮的直径= 0.35m,并且能够达到最大速度10公里/小时(6.2英里/小时)。广义上讲,这些是机器人的功能要求。 阅读更多→

我建造了这个自主机器人来检测和避免障碍。包括代码。

这是一个简单的自主机器人,能够检测并避免障碍物。我使用便宜的4WD机器人平台(您可以使用任何一种 这些平台),一个Arduino UNO($ 18.59 on 亚马孙)和便宜的HC-SR04传感器(2件装,价格$ 2.83起 亚马孙)。

机器人被编程为向前行驶,直到检测到障碍物为止。然后,它左右旋转传感器。比较超声传感器返回的值并做出决定。

这是Arduino代码:

C ++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
/ **
* @文件        Arduino UNO自主机器人
* @作者      卡林·德拉戈斯(Calin Dragos)for inrobotics.com
* @版本      V1.0
* @日期         13.10.2016
* @说明  这是能够检测并避开障碍物的自主机器人的Arduino草图
* /
 
#包括<AFMotor.h>
#包括<Servo.h>
#包括<NewPing.h>
 
伺服 Myservo;
 
整型 ENABLE_A = 6;
整型 PIN_A1 = 3;
整型 PIN_A2 = 2;
 
整型 ENABLE_B = 11;
整型 PIN_B1 = 5;
整型 PIN_B2 = 4;
 
整型 SENSOR_DISTANCE;
整型 LEFT_SENSOR_DISTANCE;
整型 RIGHT_SENSOR_DISTANCE;
整型 SNZ_DISTANCE_L;
整型 SNZ_DISTANCE_R;
整型 LFT_SNZ_DIS;
整型 RGT_SNZ_DIS;
 
#定义TRIG_PIN 7
#定义ECHO_PIN 8
#定义MIN_DISTANCE 40
#定义MAX_DISTANCE 200
#定义间隔200
 
 
新平 声纳(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
  
虚空 设定() {
  
   序列号.开始(9600);
  
  //直流电动机的引脚模式
   pinMode (ENABLE_A, 输出值);
   pinMode (PIN_A1, 输出值);
   pinMode (PIN_A2, 输出值);
 
   pinMode (ENABLE_B, 输出值);
   pinMode (PIN_B1, 输出值);
   pinMode (PIN_B2, 输出值);
 
   //超声波传感器的引脚模式
   pinMode(TRIG_PIN, 输出值);
   pinMode(ECHO_PIN, 输入);
 
   //用于伺服电机
   Myservo.连接(9);
 
  //将超声波传感器设置为居中  
   传感器中心();
      
  //停止电动机
   stopMotors();  
}
 
 
虚空 循环() {
    
    SENSOR_DISTANCE=sensorDistance();
    序列号.打印(“前传感器距离为:”);
    序列号.打印(SENSOR_DISTANCE);
 
    如果(SENSOR_DISTANCE >= MIN_DISTANCE || SENSOR_DISTANCE== 0)
      {
      前进();
      序列号.打印(“前进”);
        }
      其他 {
        
      //停止电动机
      stopMotors();
 
      LFT_SNZ_DIS=向左转();
      RGT_SNZ_DIS=在右边();
 
          如果(LFT_SNZ_DIS >= MIN_DISTANCE && LFT_SNZ_DIS >= RGT_SNZ_DIS)
           {
            整型 NEW_SNZ_DIS_LFT;
             //尝试三次以逃脱
             对于(整型 i=1;i<=3;i++){
              往左走();
              序列号.打印(“往左走”);
              延迟(300);
              //停止电动机
              stopMotors();
               NEW_SNZ_DIS_LFT=sensorDistance();
               如果(NEW_SNZ_DIS_LFT >=MIN_DISTANCE)
                  {
                打破;
                }
              
             }
              传感器中心();
              
          }
            其他 如果(RGT_SNZ_DIS >= MIN_DISTANCE && RGT_SNZ_DIS >= LFT_SNZ_DIS)
            {
             整型 NEW_SNZ_DIS_RGT;
             //尝试三次以逃脱  
             对于(整型 j=1;j<=3;j++){
              向右走();
              序列号.打印(“向右走”);
              延迟(300);
              //停止电动机
              stopMotors();
              NEW_SNZ_DIS_RGT=sensorDistance();
              如果(NEW_SNZ_DIS_RGT >=MIN_DISTANCE)
                  {
                打破;
                }
              
             }
              传感器中心();
          }
         其他
            {
              向后走();
              序列号.打印(“后退”);
              延迟(500);      
              //停止电动机
              stopMotors();
              传感器中心();
            }
      }
 
}
 
 
虚空 stopMotors(){
  AnalogWrite (ENABLE_A, 0);
  AnalogWrite (ENABLE_B, 0);
  digitalWrite (PIN_A1, );
  digitalWrite (PIN_A2, );
  digitalWrite (PIN_B1, );
  digitalWrite (PIN_B2, );
  }
整型 sensorDistance(){
  整型 距离;
  整型 我们 = 声纳.ping();
  距离 = 我们 / US_ROUNDTRIP_CM;
  如果(距离 !=0){
  返回 距离;
  延迟(300);
    }
  }
 
虚空 前进(){
  AnalogWrite (ENABLE_A, 255);
  digitalWrite (PIN_A1, );
  digitalWrite (PIN_A2, );
  AnalogWrite (ENABLE_B, 255);
  digitalWrite (PIN_B1, );
  digitalWrite (PIN_B2, );
  }
 
虚空 向后走(){
  AnalogWrite (ENABLE_A, 180);
  digitalWrite (PIN_A1, );
  digitalWrite (PIN_A2, );
  AnalogWrite (ENABLE_B, 180);
  digitalWrite (PIN_B1, );
  digitalWrite (PIN_B2, );
  }
 
 
虚空 往左走(){
  AnalogWrite (ENABLE_A, 180);
  digitalWrite (PIN_A1, );
  digitalWrite (PIN_A2, );
  AnalogWrite (ENABLE_B, 180);
  digitalWrite (PIN_B1, );
  digitalWrite (PIN_B2, );
}
 
 
虚空 向右走(){
  AnalogWrite (ENABLE_A, 180);
  digitalWrite (PIN_A1, );
  digitalWrite (PIN_A2, );
  AnalogWrite (ENABLE_B, 180);
  digitalWrite (PIN_B1, );
  digitalWrite (PIN_B2, );
}
 
虚空 传感器中心(){
  Myservo.(90);
  延迟(500);
}
虚空 turnSensorLeft(){
  Myservo.(120);
  延迟(500);
}
 
虚空 turnSensorRight(){
  Myservo.(60);
  延迟(500);
}
整型 leftSensorDistance(){
    整型 LEFT_SENSOR_DISTANCE;
    LEFT_SENSOR_DISTANCE=sensorDistance();
    返回 LEFT_SENSOR_DISTANCE;
  }
 
整型 rightSensorDistance(){
    整型 RIGHT_SENSOR_DISTANCE;
    RIGHT_SENSOR_DISTANCE=sensorDistance();
    返回 RIGHT_SENSOR_DISTANCE;
  }
    
整型 向左转(){
    整型 LEFT_SENSOR_DISTANCE;
    turnSensorLeft();
    LEFT_SENSOR_DISTANCE=leftSensorDistance();
    序列号.打印(“左传感器距离为:”);
    序列号.打印(LEFT_SENSOR_DISTANCE);
    返回 LEFT_SENSOR_DISTANCE;
}  
 
整型 在右边(){
    整型 RIGHT_SENSOR_DISTANCE;
    turnSensorRight();
    RIGHT_SENSOR_DISTANCE=rightSensorDistance();
    序列号.打印(“右传感器距离为:”);
    序列号.打印(RIGHT_SENSOR_DISTANCE);
    返回 RIGHT_SENSOR_DISTANCE;
}  

这就是机器人在我的厨房中自主导航的方式:

解决问题和提高HC-SR04性能的8个教程

有一段时间(不是很久以前),您已经花了几十美元购买了能够引导DIY机器人的传感器。现在,平均售价下降到只有几美元,HC-SR04超声波传感器就是最好的例子。

这款超声波传感器的购买价格低至1.5美元 亚马孙 如果您购买一包两个。该传感器可在3-4m距离内对硬障碍物提供相当准确的测量。

不幸的是,传感器返回错误结果。这些错误的结果可以用一种或另一种方式处理。因此,下面您将探索八个教程,这些教程可解决最常见的问题或改善HC-SR04传感器的功能。

HC-SR04传感器用于检测障碍物(图像源)

HC-SR04传感器用于检测障碍物(图片来源)


阅读更多→

迷你坦克机器人的Arduino回顾

免责声明:这篇评论由我自己决定。 最好的 给我发了 Keyestudio TS–50迷你蓝牙坦克机器人智能车套件 进行此评论,但否则我将无法获得任何补偿。

兼容Arduino的机器人坦克并不难建造。您可以找到大量的项目,向您展示如何从头开始构建一个项目。但是,如果您只想和一个人玩怎么办?减少切割电线,切割胶合板,建立轨道等的工作量更少。好吧,迷你机器人油箱套件是完美的解决方案。您只需组装组件并编写代码。然后,只需播放,仅此而已!

这款用于Arduino的迷你坦克机器人非常简单,不需要电子学和编程方面的知识即可使用。该套件包括传感器,电子设备,电池,机箱和将零件和部件组合在一起的附件。目前,该套件的价格为 $66 在GearBest上(该套件有46%的折扣)。

我喜欢建造自主且不受远程控制的机器人。该套件可以处理两种模式:自主控制和无线控制。 HC-SR04超声波传感器可以在轨道改变方向时检测到障碍物。蓝牙模块可用于通过智能手机或平板电脑控制机器人。

因为我组装并测试了机器人油箱,所以在下面您可以阅读我对它的看法。首先,让’s从我喜欢的东西开始,我不喜欢’就像在这个移动平台上一样。

不能忘记:我在第二次尝试中油炸了Arduino UNO克隆。在安装USB电缆时,保持电池连接状态时,我只是在炸板。幸运的是,我用Arduino UNO取代了它,机器人运行得非常完美。

阅读更多→

5种便宜的室内机器人本地化方法:BLE信标,AprilTags,WiFi SubPos,NFC和RFID

寻找一种便宜的方法来精确地将移动机器人准确地放置在房间中是当前的巨大挑战。我们都知道,用于导航和定位的最便宜,最简单和最有用的解决方案是GPS系统。但是,当您在房屋或建筑物内使用GPS传感器时,各种各样的障碍和干扰使GPS设备很难在室内正常工作。鉴于此,我们必须忘记供室内使用的GPS导航系统,并尝试其他方法。

电机编码器或步进电机不在本主题之内。它没有’对我而言,这是我的工作,因为我的机器人车轮可以高速滑动,而对于步进电机,我需要知道开始位置。一种 激光雷达 或一个 Hagisonic StarGazer机器人定位系统 由于价格高昂,这个话题也被排除在外。这些类型的传感器可提高测量精度,但成本较高。因此,我必须找到一种便宜,高效且准确的方法来将机器人精确定位在一个区域内。

出于好奇,我做了一些研究,发现了五种在房间和大型室内空间工作的方法。本文探讨的所有方法都可以定位从随机点开始向目标移动的机器人。

这些是方法:

  1. BLE信标
  2. 四月标签
  3. WiFi SubPos
  4. NFC(近场通信)
  5. RFID(射频识别)

1. BLE信标

XY Find XY2第二代蓝牙项目查找器,适用于iOS和Android

XY Find XY2第二代蓝牙项目查找器,适用于iOS和Android

BLE信标是一种小型设备,具有各种形状,可以安装在墙壁,桌子等上。这些设备是专门为室内场所设计的。机器人可以检测到BLE信标信号,并在两个以上的信标范围内计算其位置并估算位置。信标可以一次充电就可以运行多年,这是其在其他本地化系统面前的优势之一。

至少从理论上讲,使用BLE信标计算室内位置应该更加容易。机器人会在短距离内接收微小的静态数据。首先,蓝牙接收器必须识别信标。标识由一个长且唯一的字符串(称为UUID)以及两个0至99999的数字值组成,用于信标的主要和次要数字组合。然后是用于计算位置的数据。

数据包以n毫秒的间隔发送。例如,间隔值可以是350ms。幸运的是,可以为所有信标调整此间隔。如果您选择的间隔比默认间隔短,则可以更快地找到信标,但是电池寿命会缩短。 阅读更多→