行业知识
51单片机智能小车(循迹、跟随、避障、测速、蓝牙、wifie、4g、语音识别)总结
2026-11-12 16:15:43
来源:互联网转载
���录
1.电机模块开发
1.1 让小车动起来
1.2 串口控制小车方向
1.3 如何进行小车PWM调速
1.4 PWM方式实现小车转向
2.循迹小车
2.1 循迹模块使用
2.2 循迹小车原理
2.3 循迹小车核心代码
3.跟随/避障小车
3.1 红外壁障模块分析编辑
3.2 跟随小车的原理
3.3 跟随小车开发和调试代码
3.4 超声波模块介绍
3.5 摇头测距小车开发和调试代码
4.测速小车
4.1 测速模块
4.2 测试原理和单位换算
4.3 定时器和中断实现测速开发和调试代码
4.4 小车速度显示在OLED屏
5.远程控制小车
5.1 蓝牙控制小车
5.2 蓝牙控制并测速小车
5.3 wifi控制测速小车
5.4 4g控制小车
6.语音控制小车
6.1语音模块配置:
6.2 语音控制小车开发和调试代码
1.电机模块开发
L9110s概述
接通VCC,GND 模块电源指示灯亮, 以下资料来源官方,具体根据实际调试
IA1输入高电平,IA1输入低电平,【OA1 OB1】电机正转;
IA1输入低电平,IA1输入高电平,【OA1 OB1】电机反转;
IA2输入高电平,IA2输入低电平,【OA2 OB2】电机正转;
IA2输入低电平,IA2输入高电平,【OA2 OB2】电机反转;
1.1 让小车动起来
核心代码:
#include "reg52.h"#include "intrins.h"sbit RightCon1A = P3^2;sbit RightCon1B = P3^3;sbit LeftCon1A = P3^4;sbit LeftCon1B = P3^5;void Delay1000ms()//@11.0592MHz{unsigned char i, j, k;_nop_();i = 8;j = 1;k = 243;do{do{while (--k);} while (--j);} while (--i);}void goForward(){LeftCon1A = 0;LeftCon1B = 1;RightCon1A = 0;RightCon1B = 1;}void goLeft(){LeftCon1A = 0;LeftCon1B = 0;RightCon1A = 0;RightCon1B = 1;}void goRight(){LeftCon1A = 0;LeftCon1B = 1;RightCon1A = 0;RightCon1B = 0;}void goBack(){LeftCon1A = 1;LeftCon1B = 0;RightCon1A = 1;RightCon1B = 0;}void main(){while(1){goForward();Delay1000ms();Delay1000ms();goBack();Delay1000ms();Delay1000ms();goLeft();Delay1000ms();Delay1000ms();goRight();Delay1000ms();Delay1000ms();}} 1.2 串口控制小车方向
- 串口分文件编程进行代码整合——通过现象来改代码
- 接入蓝牙模块,通过蓝牙控制小车
- 添加点动控制,如果APP支持按下一直发数据,松开就停止发数据(蓝牙调试助手的自定义按键不 能实现),就能实现前进按键按下后小车一直往前走的功能
1.3 如何进行小车PWM调速
原理: 全速前进是LeftCon1A = 0; LeftCon1B = 1;完全停止是LeftCon1A = 0;LeftCon1B = 0;那么单位时 间内,比如20ms, 有15ms是全速前进,5ms是完全停止, 速度就会比5ms全速前进,15ms完全停止获得的功率多,相应的速度更快!
开发:借用PWM的舵机控制代码
核心代码:
#include "motor.h"#include "delay.h"#include "uart.h"#include "time.h"extern char speed;void main(){Time0Init();//UartInit();while(1){speed = 10;//10份单位时间全速运行,30份停止,所以慢,20ms是40份的500usDelay1000ms();Delay1000ms();speed = 20;Delay1000ms();Delay1000ms();speed = 40;Delay1000ms();Delay1000ms();}}//time.c#include "motor.h"#include "reg52.h"char speed;char cnt = 0;void Time0Init(){//1. 配置定时器0工作模式位16位计时TMOD = 0x01;//2. 给初值,定一个0.5出来TL0=0x33;TH0=0xFE;//3. 开始计时TR0 = 1;TF0 = 0;//4. 打开定时器0中断ET0 = 1;//5. 打开总中断EAEA = 1;}void Time0Handler() interrupt 1{cnt++; //统计爆表的次数. cnt=1的时候,报表了1//重新给初值TL0=0x33;TH0=0xFE;//控制PWM波if(cnt1.4 PWM方式实现小车转向
原理: 左轮定时器0调速,右轮定时器1调速,那么左转就是右轮速度大于左轮!
核心代码:
#include "motor.h"#include "reg52.h"char speedLeft;char cntLeft = 0;char speedRight;char cntRight = 0;void Time1Init(){//1. 配置定时器1工作模式位16位计时TMOD &= 0x0F;TMOD |= 0x1
上一篇:江苏省跨市医保怎么备案报销费用
最新文章
- steamApex英雄怎么换服务器?
- PostgreSQL数据库——Docker版本的postgres安装 & Navicat连接方式+导入向导使用 & SpringBoot结合Jpa使用PostgreSQL初步
- 揭秘谷歌中国风云变幻背后的故事
- QQ空间人气飙升秘籍揭秘,源码助力,轻松刷粉必备秘籍!
- 揭秘短视频原生态水印去除秘籍,无水印视频制作轻松上手!
- 服务器没有网怎么传输文件?
- 微软服务器在哪里?
- 基础前端使用web3 进行区块链项目开发
- 四季发财树折纸秘籍,轻松上手,财运滚滚,好运连连!
- Spring事件发布监听器ApplicationListener原理- 观察者模式