- 硬件底盘+驱动+电池 蓝牙APP控制全向轮智能小车PS2遥控麦克纳姆轮底盘万向轮避障小车 颜色分类:全套底盘(含手柄电控电池套件) 该套件物件齐全,仅需要替换主控,就能实现功能。 且麦克纳姆轮底盘操控灵活,方便室内运行。
- 主控: 潘多拉IoT Board物联网开发板
- 软件:RT-Thread 3.1.3
到官网下下载 RT-Thread 3.1.3,env。 安装好 IAR 和 MDK。
指定了编译工具使用 iar,并设置了 iar 安装路径, 按照自己电脑的实际路径 设置,iar 安装路径是 D:\Program Files (x86)\IAR Systems\Embedded Workbench 8.1 将路径设置为: r'D:\Program Files (x86)\IAR Systems\Embedded Workbench 8.1' 或者: 'D:/Program Files (x86)/IAR Systems/Embedded Workbench 8.1', 即使用‘/’时不用在路径前加‘r’ ,使用‘\’时需要在路径前加‘r’。 设置好 iar 路径后,右键打开 evn 的 cmd 命令行窗口,将工作目录切换到 \rt-thread\bsp\stm32\stm32l475-atk-pandora 目录,输 入 scons –j4 命令,即可开始构建编译工程。 构建工程用命令: scons --target=iar
硬件来了,期间隔了一个智能车竞赛,还有一个机器人培训。结束后,装车,如图:
为了测试和对比,留了arduino主控板,在旁边安装了 IoT_Board。
移植红外遥控部分程序,由于 drv_gpio更新,导致引脚号更换,查错一天后,将红外接收引脚由原来的 36 更换为 17 后正常。 原来 36 是 管脚号,现在的 17 意思是B1, 即如果
A0 - 0
A1 - 1
...
A15 - 15
B0 - 16
B1 - 17
...
C0 - 32
C1 - 33
...
以此类推。 红外接收引脚修改如图:
程序代码编写 与 红外接收数据 关系:
#define left 0x22
#define down 0xA8
#define right 0xC2
#define left_up 0xA2
#define right_up 0xE2
#define left_down 0xE0
#define right_down 0x90
#define stop1 0x02
#define stop2 0x98
#define stop3 0x18
#define stop4 0x38
#define turn_left_up 0x68
#define turn_left_mid 0x30
#define turn_left_down 0x10
#define turn_left 0x42
#define turn_right_up 0xB0
#define turn_right_mid 0x7A
#define turn_right_down 0x5A
#define turn_right 0x52
在 env 中配置后,重新生成工程。 在 main.c 中添加显示代码:
void lcd_dis(void)
{
/* 清屏 */
lcd_clear(WHITE);
/* 显示 RT-Thread logo */
lcd_show_image(0, 0, 240, 69, image_rttlogo);
/* 设置背景色和前景色 */
lcd_set_color(WHITE, BLACK);
/* 在 LCD 上显示字符 */
lcd_show_string(10, 69, 16, "Hello, RT-Thread!");
lcd_show_string(10, 69+16, 24, "RT-Thread");
lcd_set_color(WHITE, BRED);
lcd_show_string(10, 69+16+24, 32, "RT-Thread");
/* 在 LCD 上画线 */
lcd_set_color(WHITE, BLUE);
lcd_draw_line(0, 69+16+24+32, 240, 69+16+24+32);
/* 在 LCD 上画一个同心圆 */
lcd_draw_point(120, 194);
for (int i = 0; i < 46; i += 4)
{
lcd_draw_circle(120, 194, i);
}
}
后面,在对应的按键代码处添加 :
case left_down:
function_left_down(speed);
lcd_show_string(10, 69+16+24, 32, "left_down ");
break;
目前第一阶段遥控功能完成,基于 IoT_Board 上的红外遥控器,实现麦轮小车 的多向运行。
后期 打算用 手柄遥控 、网络远程控制 、声音控制 。
根据 IoT_Board 的例程 16_iot_wifi_manager 进行移植。 打开 wifi 硬件,如图
更新工程后,编译出错,对比工程后发现,缺省 port 文件夹。 如图。 添加后,更新正常。 主程序添加 wifi 代码。就是例程 16_iot_wifi_manager 主程序。
int wifi_init(void)
{
int result = RT_EOK;
struct rt_wlan_info info;
struct rt_wlan_scan_result *scan_result;
/* 等待 500 ms 以便 wifi 完成初始化 */
rt_hw_wlan_wait_init_done(500);
/* 扫描热点 */
LOG_D("start to scan ap ...");
...
...
return 0;
}
主程序添加 启动 telnet 服务:
telnet_server();
将控制小车运动的函数导出到msh中。
void motor_ctl (int argc, char** argv)
{
rt_uint32_t speed;
speed = strtoul(argv[1], NULL, 0);
function_turn_left_mid(speed);
function_turn_right_mid(speed);
function_turn_left_down(speed);
function_turn_right_down(speed);
}
MSH_CMD_EXPORT(motor_ctl, motor control sample e.g. motor_ctl 100 );
telenet 远程 控制,先连接 wifi : 192.168.0.118, 连接成功后,输入命令 “help”查看。 最后输入 组合命令 “motor_ctl 100”,以速度 100 左转、右转 、左前转、右前转 。再输入命令, “motor_ctl 300” “motor_ctl 500” 提高速度运行。
如图
添加标志位: X-高速 0x58 Flag_sudu=2 Y-低速 0x59 Flag_sudu=1 Z-刹车 0x5A Flag_Qian=0,Flag_Hou=0,Flag_Left=0,Flag_Right=0; A-前 0x41 E-后 0x45 FGH-左 0x46 0x47 0x48 BCD-右 0x42 0x43 0x44
接收参数起始:0x7B (0x30-0x38) 0x3A{(序号 0-8):
接收参数结束:0x7D }
(Receive[3]==0x50) PID_Send=1; //获取设备参数
(Receive[3]==0x57) Flash_Send=1; //掉电保存参数
(Receive[1]!=0x23) //更新PID参数
Receive[0] Receive[2] 有何用处?
用于console 的串口:
(uart1) the device name for console
蓝牙串口接收:
-
uart2 - PA2 PA3
-
GBC_KEY PE1
-
GBC_KEY PE0
新建立一个电机控制线程。