1.1 红外接收头
1.2 红外避障接口
1.3 电机驱动电路
1.4 蓝牙接口
1.5 esp82266接口
1.6 NRF24L01接口
1.7 OLED电路
1.8 JQ8900接口
1.9 超声波接口
1.10 舵机接口
1.11 三个独立按键
1.12 两个LED灯
1.13 引出单片机全部引脚
1.14 自带复位按键
加一根USB转TTL的线就可以把这个板子当开发板用,非常经济实用。
2.1电机正反转:
板载双H桥驱动电路两组,可以驱动四路电机,每组电机都可以实现正反转。
2.2 PWM控制转速:
每组电机都外接单片机的IO口,总共用8个IO口控制4组电机,可以用单片机IO输出PWM不同控制电机的转速,可编程。
2.3 手动控制:
2.3.1 红外控制:可以通过板子上集成的红外接收头用红外遥控控制,这种控制方法简单,外设少,但干扰性强,信号强度弱,距离短。 2.3.2 蓝牙和wifi控制:还可以通过手机连接蓝牙或者通过esp8266连接wifi控制,这两种方法都是在手机上安装一个软件,需要一个手机,操作简单,信号较强,使用较为舒适。 2.3.3 无线控制:还有一种控制是通过NRF24L01的2.4G传输,这种控制方式需要一对NRF24L01,控制端和接收端下载配套的程序,双方可进行通信。这种方式用遥感电位器输出信号,需要较为复杂的硬件电路。但无论在信号,距离还是手感方面都较为完美。遥感控制图(这里是开发板接的,没有另外打板子,有需要的话可以自己打个板子) [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QboU31jo-1599055716722)(//image.lceda.cn/pullimage/P91FQZB73yg3z4iUHvSwoTGL7fJ7QI03dzA3o3VA.jpeg)]
2.4自动控制:
2.4.1 超声波控制:超声波是利用发射和接收的时间来判断距离,可通过编程设置最短距离进行改变智能车的方向。另外超声波搭配了一个SG90舵机,可以在左,中,右三个方向进行旋转,提高了检测障碍的正确性。 2.4.2 红外避障:红外避障是利用一对红外对管,一个发送和一个接收,判断产生距离的时间判断是否前方有障碍物,若时间间隔较短,则有障碍物,改变智能车的方向。2.5 实时显示:
板子集成了OLED,OLED通过IIC控制,可以实时显示超声波检测的距离,显示是自动模式还是手动模式。
2.6 语音播报:
板子外接JQ8900语音芯片,通过提前拷贝需要的语音,在执行对应程序的时候通过一线串口发送命令,播放对应的语音。
补充:电源部分采用2节3.7V的锂电池。板子上集成了5V和3.3V稳压源,很好的适配电池和满足5V和3.3V外设的正常工作。
)
代码经过反复修改,基本功能没有问题。
这里贴出部分代码
#include uchar Auto_Hand_Mode_Flag=1;//自动手动模式切换标志(默认手动) uchar Hand_Mode_Flag=0;//手动模式切换标志(默认红外) uchar Auto_Mode_Flag = 1;//自动模式切换标志 /********************************* * @函数名:Mode_Key_Scan * @描 述:按一下是手动控制,再按一下是自动控制 * @参 数:无 * @返回值:无 *********************************/ void Mode_Key_Scan()//模式按键扫描 { uchar i; if(Key1==0)//Key1自动手动模式切换 { i=20; while(i--); //延迟消抖 if(Key1==0) { if(Auto_Hand_Mode_Flag) //一共两种模式 Auto_Hand_Mode_Flag=0; //不是0就是1 else Auto_Hand_Mode_Flag=1;//没按一下就换一种模式 } while(!Key1); } } /********************************* * @函数名:Control_Method_Key_Scan * @描 述:手动模式控制方式按键 * @参 数:无 * @返回值:无 *********************************/ void Control_Method_Key_Scan()//控制方式 { uchar i; if(Key2==0)//控制方式切换 { i=20; while(i--); //延迟消抖 if(Key2==0) { if(Hand_Mode_Flag==3) //一共三种控制方式0123 Hand_Mode_Flag=0; //循环 else Hand_Mode_Flag++; //每次换一种 } while(!Key2); } } /********************************* * @函数名:Auto_Mode * @描 述:自动模式 (超声波避障) * @参 数:无 * @返回值:无 *********************************/ void Auto_Mode() { // static uchar switch(Auto_Mode_Flag) { case 0: Judge_distance(); //超声波避障 break; case 1: Ray_Avoid(); //红外避障 break; } //Ray_jiance(); } /********************************* * @函数名:Hand_Mode * @描 述:手动模式工具切换函数,Hand_Mode_Flag选用不同的工具控制 * @参 数:无 * @返回值:无 *********************************/ void Hand_Mode() { static uchar Voice_Flag[4]={0};//语音标志 static uchar One_Flag=0;//消除第一次语音播报标志 Control_Method_Key_Scan();//控制方式按键扫描 switch(Hand_Mode_Flag) { case 0: Ray_Hand_Key(); //红外手动按键 Ray_Decode_Ser(); //红外解码函数 if(One_Flag) //程序执行第一次的时候不执行 { if(Voice_Flag[0]==0) { //ES=0;//关闭蓝牙串口中断 JQ8900_Select_TwoCmd_Song(0x01,0x04);//红外遥控 // EX0=1;//打开外部中断0 Voice_Flag[0]=1; Voice_Flag[1]=0; Voice_Flag[2]=0; Voice_Flag[3]=0; } } break; case 1: Blue_Hand_Key(); //蓝牙手动模式 if(Voice_Flag[1]==0) { One_Flag=1; //再执行红外的时候播报 JQ8900_Select_TwoCmd_Song(0x01,0x05);//蓝牙遥控 Voice_Flag[0]=0; Voice_Flag[1]=1; Voice_Flag[2]=0; Voice_Flag[3]=0; } break; case 2: NRF24L01_Hand_Key(); //无线手动按键 NRF24L01_Receive();//接收数据的函数 if(Voice_Flag[2]==0) { One_Flag=1; //再执行红外的时候播报 // ES=0;//关闭蓝牙串口中断 //EX0=0;//关闭外部中断0 JQ8900_Select_TwoCmd_Song(0x01,0x06);//无线遥控 Voice_Flag[0]=0; Voice_Flag[1]=0; Voice_Flag[2]=1; Voice_Flag[3]=0; } break; case 3: if(Voice_Flag[3]==0) { One_Flag=1; //再执行红外的时候播报 // EX0=0;//关闭外部中断0 JQ8900_Select_TwoCmd_Song(0x01,0x07);//WIFI遥控 // ES=1;//打开蓝牙串口中断 Voice_Flag[0]=0; Voice_Flag[1]=0; Voice_Flag[2]=0; Voice_Flag[3]=1; } ESP8266_Hand_Key();//WIFI手动按键 break; } } /********************************* * @函数名:Auto_Hand_Mode * @描 述:自动手动模式切换函数Auto_Hand_Mode_Flag为0自动,为1手动 * @参 数:无 * @返回值:无 *********************************/ void Auto_Hand_Mode()//自动手动模式切换 { static uchar Voice_Flag[2]={0};//语音标志 static uchar One_Flag=0;//消除第一次不语音播报标志 Mode_Key_Scan();//按键扫描切换自动手动 switch(Auto_Hand_Mode_Flag) { case 0: if(Voice_Flag[0]==0) //语音只执行一次 { EX1 = 1; //打开超声波 One_Flag=1;//第二次,可以播报 JQ8900_Select_TwoCmd_Song(0x01,0x02);//自动模式 Voice_Flag[0]=1; Voice_Flag[1]=0; } Auto_Mode();//自动 break; case 1: /*一上电程序进入这里,由于要播放发送机已启动,所以不播放下面的*/ if(One_Flag)//如果等于1播报,否则不播报 { if(Voice_Flag[1]==0) { EX1 = 0; //关闭超声波 Car_Stop();// //由自动模式切换到手动模式,小车需停止 // TR1=0;//关闭定时器1 JQ8900_Select_TwoCmd_Song(0x01,0x03);//手动模式 Voice_Flag[0]=0; Voice_Flag[1]=1; } } Hand_Mode();//手动 break; } }上次从莫工那里领了劵,下了单。经过两天的等待,快递如期的到了我的手上,顺丰和邮政空运是真的快,大赞。去拿快递的时候吓一跳,这快递盒也太大了吧!
贴个图:
拆开之后,又被吓了一跳,元器件也太多了吧,下单的时候到没有觉得有多少,这下够用好久了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jcrt4kSn-1599055716735)(//image.lceda.cn/pullimage/YZLYvN0eifLjRslTfURNQjDaRIQwlePpkBV5SdtU.png)]
这打的PCB板也蛮好看的
直接上图:
这是焊好之后的不带模块的:
正面:
背面: (说明:这个OLED屏幕没有用,所以就没有焊接)
这是安装好模块的
这是外接电源测试的
后续还有好多模块要接,今天先更到这,后续会继续完善的。
今天又完善了一下,安在了小车上,上图:(原先是打算用电转打孔,因为忘记买铜柱,这里就先用胶带固定)
是不是比原来好看多了。不仅好看了,而且接线什么的也方便多了,组装也更简单了,可以随时拆下来当开 发板用。下面给出一段简单的演示视频。
这里给出以前的完全演示版,想看的小伙伴可以进去看看。
B站:小车完整版
立创EDA工程链接:https://lceda.cn/lengyuefeng/ji-yustc8a-di-zhi-neng-ju-557280a