Arduino智能小车随笔(一)

Arduino智能小车随笔(一)

看到小孩的各种STEM课程很火,收费又老贵,就想着不如自己和小孩一起学着做个arduino智能小车,即能让女儿学点编程,又能省了智商税,一举两得。然而到了后面女儿基本上只帮我接线,arduBlock实在无法支持她和我完成这个小目标。最后就是我做她玩>__<

目标:
做一个小车:
基本功能(已基本实现):

  1. 可遥控
  2. 可自(sui)主(ji)移动
  3. 可调速
  4. 会避障(不会撞墙)
  5. 会探测前方悬空(不会跳楼)
    进阶功能(计划中):
  6. 会知道各个轮子转速
    • 探测轮子卡壳
    • 保持四轮匀速
    • 控制转弯角度
      高级功能(在热情熄灭前不知道能不能开始):
  7. 视觉识别+跟踪

硬件方面(只实现基本功能):
智能小车车架+编码电机+电池组
Arduino mega 一块 (uno主要考虑中断口不够难以测速)
L298N两块 (一块可以驱动两个电机)
某宝电源模块一个(提供多个电源针口,3路直接输出,3路5V输出,3路3V输出)
超声波测距HC-SR04四个
蓝牙HC-06模块一个,用于遥控
亚克力板
杜邦线

基本功能

智能小车首先得有个底盘,摆着要么不做要做就做个霸气的,先去某宝淘了个看起来很NB的底盘+电机+电池,花了600大洋,就冲着这不明觉厉的麦轮四驱和悬挂,值了 (某方机器人,广告费免了)
在这里插入图片描述

这个底盘跟了四个编码电机,每个电机两个霍尔输出可用于测速,可用于进阶中的测速和实现相关功能。板上空间目测也够大,能够放很多智(dian)能(zi)元(wan)件(ju)。

车架到手之后,迅速搭好。麦轮放了X型,可以通过调整电机方向来达到不同的运动状态。麦轮好处明显,往哪个方向运动都行,但有个问题是轮子的受力方向也比普通轮子多。尤其是运动导致轮子受水平方向向外的力较大时,减速电机输出轴和联轴器的连接如果不够牢固,轮子容易飞脱。这个问题还在解决中。另外麦轮不同方向运动所需的转速不同,实测我这个电机pwm 120时,前进后退都正常,左右位移就很困难,要差不多180的时候才顺畅。

电池用铜柱和两片车架的副翼固定住,放在了底盘下面,把充电线绕到了车屁股上,突然觉得很有赛车的感觉哈。
在这里插入图片描述

arduino mega用铜柱固定在车架上,在上方也用铜柱架起来,以后可以在顶上放块亚克力板,继续堆个树莓派搞视觉识别。

在这里插入图片描述

L298N的放置花了好久才想好。如果水平放置的话,占空间太大,而且需要四根铜柱固定,放两个基本上这车上就没位置放别的了。最后发现散热片上有个m3螺丝和螺纹孔,就换了个16mm的m3螺丝,把它垂直固定在了板上。

在这里插入图片描述

电源模块没有固定孔,没啥好的固定方法,只好弄了那种宝宝防撞条的双面贴纸(很厚的)贴在下面。自行裁剪了一小块亚克力板,用铜柱架起来,用来粘电源模块。自己加工螺丝孔的精度真是惨不忍睹。

在这里插入图片描述
这个车架前后左右都有一个副翼,用了塑料束带把超声波模块HC-SR04固定在上面。蓝牙直接插在了后副翼的孔里。

在这里插入图片描述

至此各个元件的位置基本固定了。然后就是用杜邦线连起来,深深地感受到了集成电路的必要性。在基本功能和进阶功能完成后,我要把线扎起来,用洞洞板焊起来 =.=。

基本功能程序篇

L298N来控制电机的原理:用使能端连pwm调速,两个逻辑输入控制旋转方向,就可实现各个电机转向和速度的控制。这个小车由于四轮驱动和麦轮运动状态的多样性,导致编程时容易混乱,用有意义的常量名来代替实际端口和运动状态是个比较好的做法。顺便鄙视下arduino的IDE。除了关键词变色其他代码补全啥的全都没有,简直是对21世纪编程环境的侮辱。。。

定义各路端口(使能端用pwm端口):

// Define motor control pins
int LEFT_FRONT_MOTOR_ENABLE = 9;
int LEFT_FRONT_MOTOR_IN1 = 26;
int LEFT_FRONT_MOTOR_IN2 = 27;
int LEFT_REAR_MOTOR_ENABLE = 8;
int LEFT_REAR_MOTOR_IN1 = 24;
int LEFT_REAR_MOTOR_IN2 = 25;
int RIGHT_FRONT_MOTOR_ENABLE = 10;
int RIGHT_FRONT_MOTOR_IN1 = 28;
int RIGHT_FRONT_MOTOR_IN2 = 29;
int RIGHT_REAR_MOTOR_ENABLE = 11;
int RIGHT_REAR_MOTOR_IN1 = 30;
int RIGHT_REAR_MOTOR_IN2 = 31;

定义电机转动方向:

// Define motor rotate direction
int MOTOR_ROTATE_FORWARD = 1;
int MOTOR_ROTATE_BACKWARD = -1;
int MOTOR_ROTATE_STOP = 0;

定义小车运动状态:

// Define Car State
int CAR_MOVE_STOP = -1;
int CAR_MOVE_FORWARD = 0;
int CAR_MOVE_RIGHT = 1;
int CAR_MOVE_BACKWARD = 2;
int CAR_MOVE_LEFT = 3;
int CAR_TURN_LEF
  • 8
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Arduino可以通过使用光电开关或者霍尔传感器来测量转速。 一种方法是使用光电开关来测量转速。光电开关一般由发光二极管和光敏三极管组成。将发光二极管置于转轴附近,并且使其照向光敏三极管。当转轴旋转时,其中的透光窗口会不断遮挡和释放光线,从而产生一个周期性的光信号。通过接入光敏三极管的数字引脚,Arduino可以感知到光信号的变化,并计算转轴旋转的频率和转速。 另一种方法是使用霍尔传感器来测量转速。霍尔传感器可以检测到磁场的变化。在转轴附近放置一个磁体,并在靠近磁体的位置放置霍尔传感器。当转轴旋转时,磁体附近的磁场会不断变化,从而引起霍尔传感器输出一个脉冲信号。通过连接霍尔传感器的数字引脚,Arduino可以感知到脉冲信号的变化,并计算转轴旋转的频率和转速。 无论是光电开关还是霍尔传感器,Arduino都可以通过对引脚的状态进行监测,在固定时间内计数脉冲的数量,然后根据计数值和时间间隔计算转速。可以使用Arduino的计时器和中断功能来提高转速测量的准确性和精确度。通过将每个脉冲映射到旋转的一定角度,还可以测量物体的相对位置和角度。这对于自动化控制和机器人应用非常有用。 ### 回答2: Arduino可以使用编程和相关硬件来测量转速。 首先,通过连接编码器可以测量转速。编码器通常由一个光电传感器和一个旋转的光反射片组成。当光电传感器检测到光反射片上的槽时,它会生成一个电脉冲。通过计算电脉冲的数量和时间间隔,可以计算出转速。 其次,还可以使用霍尔传感器来测量转速。霍尔传感器可以检测到磁场的变化,当连接到旋转物体时,可以通过测量磁场的变化来计算转速。 在编程方面,可以使用Arduino的计时器功能来测量转速。通过连续读取时间戳并计算时间间隔,可以得到转速的近似值。 还可以使用Arduino的脉冲计数功能来测量转速。当连接到编码器或霍尔传感器时,可以通过计算输入脉冲的数量和时间间隔来计算转速。 需要注意的是,为了准确测量转速,可能需要根据具体应用进行一定的校准和调整。这可以通过实验和不同方法的比较来实现。 总之,通过连接编码器、霍尔传感器或使用计时器和脉冲计数功能,以及相应的编程,可以实现在Arduino上测量转速的功能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值