arduino蓝牙避障履带小车

您所在的位置:网站首页 遥控履带车玩具图片 arduino蓝牙避障履带小车

arduino蓝牙避障履带小车

2023-06-16 12:44| 来源: 网络整理| 查看: 265

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录 前言一、成品图二、材料二、功能介绍及实现方法0.引用的库1.模式选择2. 蓝牙控制3.自动避障功能4.半自动避障功能控制端的制作小车图片 总结

前言

菜鸡博主在网上冲浪的时候发现开源smars小车,此小车外形呆萌,可玩性高,于是便产生了做一辆避障小车的想法。。。

一、成品图

小车俯视图

二、材料

SMARS开源模型:https://www.thingiverse.com/thing:2662828 N20电机 6v 150转 * 2 HC-05蓝牙模块 * 1 无源蜂鸣器 * 1 hcsr04超声波模块 * 1 12v锂电池包 * 1 12v to 5v 降压模块 * 1 arduino uno板 * 1 l293d盾板 * 1 开关* 1 杜邦线若干

二、功能介绍及实现方法

小车共含有3个模式: 1.蓝牙控制 2.自动避障 3.半自动避障

(还能播放音乐)

0.引用的库 #include #include #include #include 1.模式选择 void loop() { if(BT.available()) { i = (char)BT.read(); if(i == 'a') { mode = 1; } if(i == 'c') { mode = 0; } if(i == 'h') { mode = 2; } if(mode == 0) { avoid_mode(); //自动避障模式 } if(mode == 1) { control_mode(i); //蓝牙控制模式 } if(mode == 2) { half_avoid_mode(i); //半自动避障模式 } } } 2. 蓝牙控制

主要的控制代码如下:

电机驱动部分👇(以向前为例)

void runf(int times) { motor1.run(RELEASE); motor2.run(RELEASE); motor1.setSpeed(100); motor2.setSpeed(100); motor1.run(BACKWARD); motor2.run(FORWARD); delay(times); }

蓝牙控制部分👇

void control_mode(char i) { switch(i) { case 'f': runf(500); //向前 break; case 'l': runl(500); //向左 break; case 'b': runb(500); //向后 break; case 'r': runr(500); //向右 break; case 's': beep(2,100); //喇叭 break; case 'm': musicplay(); //播放音乐 break; } stoprun(); //停车 }

原理很简单,这里就不过多叙述了,嘿嘿

3.自动避障功能

代码如下(示例): 因为机械结构的问题,这里采用了随机数来决定避障方向的方式 当超声波检测距离大于10cm的时候则小车向前行驶 当超声波检测距离小于10cm的时候则由随机数决定小车向左还是向右行驶

void avoid_mode() { distance= ultrasonic.read(); if(distance >10) { distance = ultrasonic.read(); runf(100); delay(100); } if(distance runl(1500); distance = ultrasonic.read(); delay(100); } while(distance distance= ultrasonic.read(); if(distance > 10) { distance = ultrasonic.read(); runf(100); delay(100); } if(distance if(i == 'i') { runlhs04(); break; } if(i == 'o') { runrhs04(); break; } } } }

电机在半自动模式收到指令后转弯的代码👇 原理是转弯直到小车正前方的距离符合预设值(此处为30cm)

void runrhs04() { motor1.run(RELEASE); motor2.run(RELEASE); motor1.setSpeed(200); motor2.setSpeed(100); motor1.run(BACKWARD); motor2.run(BACKWARD); while(distance = ultrasonic.read()) { if(distance > 30) { stoprun(); break; } motor1.run(BACKWARD); motor2.run(BACKWARD); delay(1000); } } 控制端的制作

因为博主目前还比较菜,所以采用了appinventor来制作控制端 效果图如下👇 在这里插入图片描述 appinventor实现逻辑如下👇 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

小车图片

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

总结

如上所述,小车还是挺好玩的嘿嘿,如有做的不够完善的地方,烦请各位大佬多多指教!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3