极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1772|回复: 0

小型双轮差速底盘机器人无线遥控功能的实现

[复制链接]
发表于 2023-8-28 12:54:55 | 显示全部楼层 |阅读模式
本帖最后由 机器谱 于 2023-8-28 12:54 编辑

1. 功能说明
       本文示例实现的功能为:利用 探索者Birdmen手柄扩展板【https://www.robotway.com/h-col-142.html】探索者NRF无线通信模块【https://www.robotway.com/h-col-141.html】 遥控R023样机小型双轮差速底盘做出前进、后退以及转向的动作。


2. 电子硬件
在这个示例中,我们采用了以下硬件,请大家参考:

主控板
Basra主控板(兼容Arduino Uno)‍ x2
扩展板
Bigfish2.1扩展板‍ x1
Birdmen手柄扩展板x1

通信
NRF无线通信模块 x2
电池
7.4V锂电池

3. 功能实现
       编程环境:Arduino 1.8.19

3.1下载固件
       分别下载master_.ino和slave_.ino到两个Basra主控板(软件解析:master_.ino为上位机程序,slave_.ino为下位机程序)。
       注意:先不要堆叠NRF无线通信模块,因为会占用串口,造成下载失败。
① 参考例程(master_.ino):
  1. /*------------------------------------------------------------------------------------

  2.   版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.

  3.            Distributed under MIT license.See file LICENSE for detail or copy at

  4.            https://opensource.org/licenses/MIT

  5.            by 机器谱 2023-07-21 https://www.robotway.com/

  6.   ------------------------------*/

  7. int _ABVAR_1_A0Value = 0 ;

  8. int _ABVAR_2_A1Value = 0 ;

  9. void ADGet();

  10. void SerialPrint();

  11. void setup()

  12. {

  13.   Serial.begin(9600);

  14. }

  15. void loop()

  16. {

  17.   ADGet();

  18.   SerialPrint();

  19.   delay( 100 );

  20. }

  21. void SerialPrint()

  22. {

  23.   if (( ( ( _ABVAR_1_A0Value ) == ( 0 ) ) && ( ( _ABVAR_2_A1Value ) == ( 1 ) ) ))

  24.   {

  25.     Serial.print("1");

  26.     Serial.println();

  27.   }

  28.   if (( ( ( _ABVAR_1_A0Value ) == ( 1 ) ) && ( ( _ABVAR_2_A1Value ) == ( 0 ) ) ))

  29.   {

  30.     Serial.print("2");

  31.     Serial.println();

  32.   }

  33.   if (( ( ( _ABVAR_1_A0Value ) == ( 1 ) ) && ( ( _ABVAR_2_A1Value ) == ( 1 ) ) ))

  34.   {

  35.     Serial.print("3");

  36.     Serial.println();

  37.   }

  38.   if (( ( ( _ABVAR_1_A0Value ) == ( 1 ) ) && ( ( _ABVAR_2_A1Value ) == ( 2 ) ) ))

  39.   {

  40.     Serial.print("4");

  41.     Serial.println();

  42.   }

  43.   if (( ( ( _ABVAR_1_A0Value ) == ( 2 ) ) && ( ( _ABVAR_2_A1Value ) == ( 1 ) ) ))

  44.   {

  45.     Serial.print("5");

  46.     Serial.println();

  47.   }

  48. }

  49. void ADGet()

  50. {

  51.   _ABVAR_1_A0Value = analogRead(14) ;

  52.   _ABVAR_2_A1Value = analogRead(15) ;

  53.   _ABVAR_1_A0Value = map ( _ABVAR_1_A0Value , 0 , 1024 , 0 , 3 )   ;

  54.   _ABVAR_2_A1Value = map ( _ABVAR_2_A1Value , 0 , 1024 , 0 , 3 )   ;

  55. }
复制代码

② 参考例程(slave_.ino):
  1. /*------------------------------------------------------------------------------------

  2.   版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.

  3.            Distributed under MIT license.See file LICENSE for detail or copy at

  4.            https://opensource.org/licenses/MIT

  5.            by 机器谱 2023-07-21 https://www.robotway.com/

  6.   ------------------------------*/

  7. int _ABVAR_1__data = 0 ;

  8. int _ABVAR_2__data_his = 0 ;

  9. int _ABVAR_3_0 = 0 ;

  10. void Right();

  11. void Select();

  12. void Left();

  13. void Stop();

  14. void Forward();

  15. void Back();

  16. void setup()

  17. {

  18.   Serial.begin(9600);

  19.   pinMode( 5 , OUTPUT);

  20.   pinMode( 6 , OUTPUT);

  21.   pinMode( 9 , OUTPUT);

  22.   pinMode( 10 , OUTPUT);

  23.   _ABVAR_1__data = 3 ;

  24.   _ABVAR_2__data_his = 3 ;

  25. }

  26. void loop()

  27. {

  28.   _ABVAR_1__data = Serial.parseInt() ;

  29.   if (( ( _ABVAR_1__data ) > ( 0 ) ))

  30.   {

  31.     Select();

  32.   }

  33.   else

  34.   {

  35.     _ABVAR_1__data = _ABVAR_2__data_his ;

  36.     Select();

  37.   }

  38.   _ABVAR_2__data_his = _ABVAR_1__data ;

  39.   _ABVAR_1__data = _ABVAR_3_0 ;

  40.   delay( 50 );

  41. }

  42. void Left()

  43. {

  44.   digitalWrite( 5 , LOW );

  45.   digitalWrite( 6 , HIGH );

  46.   digitalWrite( 9 , HIGH );

  47.   digitalWrite( 10 , LOW );

  48. }

  49. void Stop()

  50. {

  51.   digitalWrite( 5 , LOW );

  52.   digitalWrite( 6 , LOW );

  53.   digitalWrite( 9 , LOW );

  54.   digitalWrite( 10 , LOW );

  55. }

  56. void Back()

  57. {

  58.   digitalWrite( 5 , LOW );

  59.   digitalWrite( 6 , HIGH );

  60.   digitalWrite( 9 , LOW );

  61.   digitalWrite( 10 , HIGH );

  62. }

  63. void Forward()

  64. {

  65.   digitalWrite( 5 , HIGH );

  66.   digitalWrite( 6 , LOW );

  67.   digitalWrite( 9 , HIGH );

  68.   digitalWrite( 10 , LOW );

  69. }

  70. void Select()

  71. {

  72.   if (( ( _ABVAR_1__data ) == ( 1 ) ))

  73.   {

  74.     Forward();

  75.   }

  76.   if (( ( _ABVAR_1__data ) == ( 2 ) ))

  77.   {

  78.     Back();

  79.   }

  80.   if (( ( _ABVAR_1__data ) == ( 3 ) ))

  81.   {

  82.     Stop();

  83.   }

  84.   if (( ( _ABVAR_1__data ) == ( 4 ) ))

  85.   {

  86.     Left();

  87.   }

  88.   if (( ( _ABVAR_1__data ) == ( 5 ) ))

  89.   {

  90.     Right();

  91.   }

  92. }

  93. void Right()

  94. {

  95.   digitalWrite( 5 , HIGH );

  96.   digitalWrite( 6 , LOW );

  97.   digitalWrite( 9 , LOW );

  98.   digitalWrite( 10 , HIGH );

  99. }
复制代码

3.2 硬件连接
      ① 将Birdmen手柄扩展板堆叠到下载了master_.ino的Basra主控板上,然后堆叠上NRF无线通信模块。
      ② 将Bigfish扩展板堆叠到下载了slave_.ino的Basra主控板上,再堆叠上NRF无线通信模块。

      ③ 将小型双轮差速底盘的直流电机连到Bigfish扩展板的电机接口上。

      ④ 用master右侧的摇杆遥控slave,调整电机的接线,直到摇杆动作和小车动作匹配。

4. 资料下载
资料内容:程序源代码
资料下载地址:小型双轮差速底盘-无线遥控 https://www.robotway.com/h-col-113.html




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-2 04:07 , Processed in 0.044201 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表