本文素材来源于宁夏大学
作者:白二曹、王瑞、穆琴、王童兵
指导老师:康彩
一、项目简介
1.功能介绍
无线充电智能车由无线充电、自动控制、红外遥控、网页显示四部分组成。
(1)流程描述
用户端浏览器访问http://127.0.0.1页面显示小车所有信息及所需数据
→网页通过与小车的WIFI模块连接检测小车是否可以正常工作;
→手动通过红外遥控器电源按钮启动小车或者网页端点击启动启动小车;
→通过网页端或红外遥控对其进行速度和方向的调节;
→到达充电桩通过小车和充电桩的协同作用反馈电量信息,网页通过电量转化为的续航里程距离下一充电桩的位置判断是否需要充电,或者用户自己进行判断并选择合适的方案(网页判断指令只提供参考价值);
→若需要充电则发送指令小车接收指令并启动充电模式。
(2)主流程的流程图
(3)分块功能
① 无线充电:无线充电桩采用电磁感应式无线充电传输系统。系统由发射线圈L1和接收线圈L2组成,2个线圈组在一起构成电磁耦合感
应器,发射线圈所携带的电流产生磁场,并通过线圈耦合使接收线圈产生电压,充电桩上的红外发射模块与小车上的电量检测器协同
工作判断车是否需要进行无线充电。
② 自动控制:充电桩上有光电接触开关和红外发射模块,车沿规定路线经过无线充电桩时,充电桩上的光电接触开关被遮挡,无线发射
模块开始工作;红外发射模块全程工作,与小车上的红外接收器配合用以检测小车是否到达充电区域,其与小车上的低压报警装置结
合,便可判断小车在此充电区域是否停止充电(判断条件:红外模块检测到小车到达充电区及低压报警装置工作),若判断需要充
电,网页发送充电指令WiFi模块接收指令后启动自动充电程序小车进行充电。
③ 红外遥控:红外遥控是在没有网络时用户端网页与WIFI模块不能正常通信的情况下采用红外遥控的方法对小车的行进方向与速度进行
调整和实现避障功能,以及在进行无线充电时微调车体相对充电桩的位置使其达到高效充电的效果。
④ 网页显示:用户启动无线充电智能车后,车体上会显示智能车电量,网页端将显示所有数据(包括:电量、电压、续航里程、温度、
小车线路是否正常、是否需要充电等),网页端还可以控制智能车的行进方向及速度,需要充电时,网页端也可以显示充电界面与完
成充电界面。各团队成员间已将iis系统搭建成功,可实现不同电脑在同一局域网下访问该页面的功能。
2.先进性、创新性与智能性
(1)先进性:此智能车采用目前前沿的充电方式对电源进行充电,且可通过多种传感器的相互配合实现自动充电的功能。该智能车将数据监
测及操作系统、报警系统、温度检测、用户体验及反馈信息服务等功能集成于网页端,可实现网页端控制及无网络状态下的手动控制,
更加全面系统的对智能车进行操控。
(2)创新性与智能性:此无线充电小车采用用户端网页与WiFi模块数据连接进行远程控制与数据传输,通过数据传输反馈小车的整体性能与
能量指标,通过自动检测电量数值与充电桩保持通信进行自动充电和自动调节车体使其正对充电位置以达到能量转化的最高效率,在网
络失去联系的情况下可以采取红外遥控的方法对小车进行控制;网页端可以在设置IP地址相同和允许公开访问的情况下可实现多用户同
时对网页进行浏览,查看小车的所有参数数据和性能指标。
二、制作过程
1. 思路来源
现在国家提倡低碳出行,绿色环保,尤其电动车行业近几年得到了快速的兴起与发展,越来越多的人把目光转向电动车方面,随着我国经济持续增长和城乡居民收入水平的提高,以及电动车便捷、环保、经济等特点满足了居民日常出行的需求,电动车市场呈现出稳定的发展势头,同时,消费者对产品品质的要求也越来越高。从市场供给来看,电动车行业的投资情况良好,行业投资项目进展较好。在电动车需求持续增长、销售持续扩大的情况下,现有电动车生产企业不断扩大产能,优质的生产企业涌入,将推动电动车产量持续增长。
从现状来看现有的有线充电有诸多弊端例如:找到充电桩后接口标准不一,充不了;公用充电桩太难占;充电桩分布不均,村民买车最吃亏;电压过高容易引发火灾和其他的人员伤亡和财产损失……因此无线充电技术的应用将填补这空白区域,无线充电技术暂时没有能够完全达到客户和商家的满意程度,但它的优势还是值得一提的,首先无线充电不限地理环境的影响,不限车辆的型号,不限用户的多少,占地小、充电便利性高、可无人值守、人工维护成本低、空间利用率更高等诸多优势,一旦无线充电技术实现成熟化,其面对的市场或将是全球的各个领域和行业都会有所涉及,无线充电技术应用于电动车等出行工具来讲,前景是非常可观的,所以我们组对于这一想法展开讨论后大家一致同意这个项目的想法,决定首先做一个基础一体化的小车模型来为后期的研发做基础。
2.方案选择过程
对于方案选择,我们初选方案有三个:
方案一:
不使用无线充电技术,而是做一款大容量的“超级电池”,其可保障智能车行驶数百公里。经过分析及我们现有条件的限制,一致觉得
此方案无法实现,故放弃此方案。
方案二:
改造现有有线充电桩的充电方式,优化路径,增大可利用空间以增加充电桩数目,采用新技术,提高有线充电桩的质量。经实地调研与
后期讨论,认为此方案花费较大,并不符合市场需求,故放弃此方案。
方案三:
采用无线充电技术,做一套无线充电装置,改善电动车的充电方式及其自动控制能力以提高电动车性能。经过数次讨论与研究,我们一
致认为此方案为最可行的方案。
3.制作过程照片
三、程序源代码
1. 网页部分
2.驱动、控制部分
#include<IRremote.h>//使用IRRemote函数库. #define choose 2 //1为通过串口打印码值模式 #definechoose2 4 //3为通过串口打印码值模式 //.......................................................................................……// 电机设置 #define leftA_PIN3; #define leftB_PIN4; #define leftC_PIN 5; #define leftD.PIN 6; #define rigbtA_PIN 7; #define rightB_PIN 8; #define rightC_PIN 11; #define rightD_PIN 12; void motor pinint(); //引脚初始化 void forward(); //前进 void back( ); //后退 void turnLeftOrigin(); //原地左 void turnRightOrigin(); //原地右 void turnRightforword();//右前 void turnLeftfonword(); //左前 void turnLeftback(); //左后 void setup(); { Serial.begin(9600);//9600(PC端使用) motor pinint();//电机引脚初始化 Irrecv.enablelRIn();//启动红外解码 } void loop(); { if(choose==1 && choose2==3) scan();. else if(choose==2 && choose2==4) rev(); } /*电机引脚初始化*/ void motor_pinint(); { pinMode(leftA_PIN, OUTPUT); //设置引脚为输出引脚 pinMode(leftB_PIN, OUTPUT); //设置引脚为输出引脚 pinMode(leftC_PIN, OUTPUT); pinMode(leftD_PIN, OUTPUT); pinMode(rightA_PIN, OUTPUT); //设置引脚为输出引脚 PinMode(rightB_PIN, OUTPUT); //设置引脚为输出引脚 pinMode (rightC_PIN, OUTPUT); pinMode (rightD_PIN, OUTPUT); } /************************************* forward子函数——前进子函数 函数功能∶控制车前进 **************************************/ void forward(); { analogWrite(leftA_PIN, 30); analogWrite(leftB_PIN, 0); //左轮前进 analogWriteleftC_PIN, 30); analogWriteleftP_PIN, 0); //----------------------------------------------// analogWrite(rightA_PIN, 60); analogWrite(rightB_PIN, 0); //右轮前进 analogWrite(rightC_PIN, 60); analogWrite(rightp_PIN, 0); } /******************************* back子函数——后退子函数.. 函数功能∶控制车后退. *******************************/ void back(); { analogWrite(leftA_PIN, 0); analogWrite(leftB_PIN, 30); //左轮后退.. analogWrite(leftC_PIN,0); analogWrite(leftD_PIN,30); analogWrite(rightA_PIN, 0); analogWrite(rightB_PIN, 70); //右轮后退 analogWrite(rightC_PIN, 0); analogWrite(rightD_PIN, 70); } /*********************************** turnLeftOrigin 子函数——原地左转子函数. 函数功能∶控制车原地左转. ***********************************/ void turnLeftOrigin(); { analogWrite(leftA_PIN, 0); analogWrite(leftB_PIN, 120); //左轮后退. analogWrite(leftC_PIN, 0); analogWrite(leftD_PIN, 120); analogWrite(rightA_PIN, 120); analogWrite(rightB_PIN, 0); //右轮前进 analogWrite(rightC_PIN, 120); analogWrite(rigbtD_PIN, 0); } /***************************************** turnRightOrgin子函数——原地右转子函数 函数功能∶控制车原地右转.. *****************************************/ void turnRightOrigin(); { analogWrite(leftA_PIN, 120); analogWrite(leftB_PIN, 0); //左轮前进.. analogWrite(leftC_PIN, 120); analogWrite(leftD_PIN, 0); analogWrite(rightA_PIN, 0); analogWrite(rightB_PIN, 120); //右轮后退.. analogWrite(rightC_PIN, 0); analogWrite(rightD_PIN, 120); } /*********************************************** turnRightforword子函数——右前运动子函数 函数功能∶控制车右前 void turnRightforword(); { analogWrite(leftA_PIN, 200); analogWrite(leftB_PIN, 0); //左轮快前进 analogWrite(leftC_PIN, 200); analogWrite(leftD_PIN, 0); analogWrite(rightA_PIN, 120); analogWrite(rightB_PIN, 0); //右轮慢前进 analogWrite(rightC_PIN,120); analogWrite(rightD_PIN, 0); } /*************************************** turnLeftforward子函数——左前运动子函数 函数功能∶控制车左前 void turnLeftforword(); { analogWrite(leftA_PIN, 120); analogWrite(leftB_PIN, 0); //左轮慢前进. analogWrite(leftC_PIN, 120); analogWrite(leftD_PIN, 0); analogWrite(rightA_PIN, 200); analogWrite(rightB_PIN, 0); //右轮快前进 analogWrite(rightC_PIN, 200); analogWrite(rightD_PIN, 0); } /****************************************** turnRightforword子函数——右后运动子函数 函数功能:控制车右后 ******************************************/ void turnRightback(); { analogWrite(leftA_PIN, 0); analogWrite(leftB_PIN, 200); //左轮快后退 analogWrite(leftC_PIN, 0); analogWrite(leftP_PIN, 200); analogWrite(rightA_PIN, 0); analogWrite(rightB_PIN, 120); //右轮慢后退.. analogWrite(rightC_PIN, 0); analogWrite(rightD_PIN, 120); } /*********************************************** turnLeftforward子函数——左后运动子函数. 函数功能∶控制车左后. ***********************************************/ void turnleftback(); { analogWrite(leftA_PIN, 0); analogWrite(leftB_PIN, 120); //左轮慢后退. analogWrite(leftC_PIN, 0); analogWrite(leftD_PIN, 120); analogWrite(rightA_PIN, 0); analogWrite(rightB_PIN, 200); //右轮快后退 analogWrite(rightC_PIN, 0); analogWrite(rightD_PIN, 200); } /***************************************** stop子函数——停止子函数.. 函数功能∶控制车停止 *****************************************/ void_stop(); { analogWrite(leftA_PIN, 0); analogWrite(leftB_PIN, 0); //左轮静止不动 analogWrite(leftC_PIN, 0); analogWrite(leftD_PIN, 0); analogWrite(rightA_PIN, 0); analogWrite(rightB PIN, 0); //右轮静止不动 analogWrite(rightC_PIN, 0); analogWrite(rightD_PIN, 0); } void rev(void); { if (irrecv.decode(&results)) { //解码成功,把数据放入results.value 变量中 if ((results.value == 16718055)||(result.value == 1033561079)) { forward(); //2前进 delay(3000); _stopl); } else if((results.value == 1675477)) { if (irrecv2.decode(&results2)) { if(results2.value == 12345677) { _stopl); } else if((results.value ==16738455)) { forward(); //0前进 } else if ((results.value == 465573243) || (results.value==16730805)|| (results.value == 1228587814)||(reultsvalue == 1045675)||(results.value == 1333775926)||(results.value == 304335233)|| (results.value == 891929274)||(results.value == 93040025) { back(); //8后退 delay(500); _stop(); } else if (resuls.value == 16724175)||(results.value == 2534850111)||(results.value == 814588342)|| (results.value == 2534850111)||(results.value == 16724175)) { turnLeftforward();//1左前 delay(500); _stopl); } else if((results.value == 16743045)||(ceault5.xaluge==1635910171)) { turnRightforward(); //3右前 delay(500); _stop(); } else if ((results .value == 1209942246) || (results.value == 851901943) || (results.value == 16728765) || (results.value == 2364611682) || (results.value==3833948210) || (results.value == 1253111733) || (results.value==2268352677)) { turnleftback(); //7左后 delay(500); _stop(); } else if ((results.value == 16732845) || (results.value == 1623741183) || (results.value == 1053031451) || (results.value == 3680188601) || (results.value == 2405230358) || (results.value == 3337729400)) { turnRightback(); //9右后 delay(500); _stop(); } else if ((results.value == 2351064443) || (results.value == 16716015) || (results.value == 3640844469) ||(results.value == 3606423579)) { turnLeftOrigin(); //4原地左转 delay(250); _stop(); } else if((results.value == 16734885) || (results.value == 71952287) || (results.value == 16716015) || (results.value == 2351064443)) { turnRistougin(); //6原地右转 delay(250); _stop(); } else if (results.value == 1217346747) || (results.value == 16726215) || (results.value == 2740225102)) { _stop(); //5停止 } irrecv.resume(); //继续等待接收下一组信号 } if(results.value ==0x16) delay(600);//延时600毫秒,做一个简单的消抖 } } } void scan(void){ if(irrecv.decode(&results)){ //解码成功,把数据放入results变量中. Serial.print("irCode:"); //把数据输入到串口 Serial print(results.value, DEC); //显示红外编码, Serial.print(", bits: "); Serial.print(results.bits); //显示红外编码位数.. Irrecv.resume(); //继续等待接收下一组信号., } if(results.value==0x16){ digitalWriter9, HIGH); Delay(600); //延时600毫秒,做一个简单的消抖. } } void scan1(void){ if(irrecv2.decode(&results)){ //解码成功,把数据放入results变量中 //把数据输入到串口 Serial.print(“irCode2:"); Serial.print(results2.value, DEC); //显示红外编码. SeriaLprint(", bits: "); Serial.println(results2.bits); //显示红外编码位数 Serial.print(results2.value, DEC); //显示红外编码 Serial print(", bits: "); Serial.println(results2.bits);//显示红外编码位数. irrecv2.resume(); //继续等待接收下一组信号. } } |
无线充电智能车的详细资料请参考无线充电智能车