无线充电智能车的制作

news2024/11/20 1:37:51

本文素材来源于宁夏大学

作者:白二曹、王瑞、穆琴、王童兵

指导老师:康彩

一、项目简介

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(); //继续等待接收下一组信号.

}

}

 

无线充电智能车的详细资料请参考无线充电智能车

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/72087.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cy5.5 Tyramide,Cyanine5.5 Tyramide,花青素Cy5.5 酪酰胺化学试剂供应

一&#xff1a;产品描述 1、名称 英文&#xff1a;Cy5.5 Tyramide&#xff0c;Cyanine5.5 Tyramide 中文&#xff1a;花青素Cy5.5 酪酰胺 2、CAS编号&#xff1a;N/A 3、所属分类&#xff1a;Cyanine 4、分子量&#xff1a;738.4 5、分子式&#xff1a;C48H52CIN3O2 6、…

如何用DOS命令设置ip地址及DNS

用DOS命令设置ip地址及DNS 设置/修改IP地址&#xff0c;子网掩码&#xff0c;网关的格式&#xff1a; netsh interface ip set address "本地连接" static 10.25.35.35 255.255.255.0 10.25.35.7 auto[more] 命令的意思是将“本地连接” ip地址设置成 10.25.35.3…

SD NAND 的 SDIO在STM32上的应用详解(下篇)

七.SDIO外设结构体 其实前面关于SDIO寄存器的讲解已经比较详细了&#xff0c;这里再借助于关于SDIO结构体再进行总结一遍。 标准库函数对 SDIO 外设建立了三个初始化结构体&#xff0c;分别为 SDIO 初始化结构体SDIO_InitTypeDef、SDIO 命令初始化结构体 SDIO_CmdInitTypeDef…

Lq93:复原 IP 地址

有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如&#xff1a;"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址&#xff0c;但是 "0.011.255.2…

Java基础:Map集合

1. Map集合概述 现实生活中&#xff0c;我们常会看到这样的一种集合&#xff1a;IP地址与主机名&#xff0c;身份证号与个人&#xff0c;系统用户名与系统用户对象等&#xff0c;这种一一对应的关系&#xff0c;就叫做映射。Java提供了专门的集合类用来存放这种对象关系的对象…

IOC 容器

IOC 概念和原理 1. 什么是 IOC&#xff1f; 控制饭庄&#xff08; Inversion of Control &#xff0c;缩写为 IOC&#xff09;&#xff0c;是面向对象编程中的一种设计原则&#xff0c;可以用来降低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入&#xff08; Depende…

基于SSM的网红书购物商城(源码+论文+开题报告+答辩PPT)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

java实现简单窗口小游戏“扫雷”

前言 忘记是从何处看到过关于扫雷小程序的文章&#xff0c;所以这次也就跟着做一下。其实很简单的&#xff0c;如果有java入门的同学也可以尝试一下自己做这种java小程序。几行代码做几遍基本上能摸清楚这些基础了&#xff0c;对于编程能力也能提高一些。&#xff08;虽然小编…

appium笔记——01环境搭建

0、关系图 1.appium客户端&#xff1a; python程序&#xff0c;链接appium服务器&#xff0c;并发送请求 2.appium服务端(模拟器客户端)&#xff1a; appium程序&#xff0c;需要提前启动&#xff0c;不仅充当appium服务端&#xff0c;还充当模拟器客户端&#xff08;接收h…

基于Apriori算法的购物网站商品推荐系统

基于Apriori算法的购物网站商品推荐系统 目 录 一、 算法内容 3 Step 1 收集用户偏好 3 Step 2 对数据进行预处理 3 Step 3 计算相似度 4 Step 4 找邻居 5 Step 5 计算推荐 6 二、 预期结果 6 三、 对比和讨论 7 Step 5 计算推荐 Section A 基于用户的协同过滤(User CF) 通过前…

Python中12个常用模块的使用教程

1. time模块 import time *一*#时间戳--》结构化时间--》格式化的字符串时间 ----------------------------------------------------------------------------- res1time.localtime(654126574) print(res1 ) #res1time.struct_time(tm_year1990, tm_mon9, tm_mday24, tm_hour…

数学大世界杂志数学大世界杂志社数学大世界编辑部2022年第7期目录

名家论坛《数学大世界》投稿&#xff1a;cn7kantougao163.com 新时期高中数学课堂教学有效性的提升策略 姜徳余; 3-5 化“零”为整&#xff0c;以“构”促学——小学数学结构化教学策略探析 孟龙平; 6-8 做反思型教师&#xff0c;加强数学衔接模块教学 陈小菊; 9-1…

[附源码]Python计算机毕业设计SSM基于远程协作的汽车故障诊断系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

SELinux

文章目录SELinux说明SELinux 的运行模式SElinux命令SELinux 是 Security-Enhanced Linux 缩写&#xff0c;安全强化的linux 系统资源都是通过程序进行访问的&#xff0c;如果将/var/www/html权限设置为777&#xff0c;代表所有程序均可以对该目录访问&#xff0c;如果已启动www…

面试官狂问八股文?我已经被三家公司问到哑口无言……

秋招刚过去&#xff0c;整体的感受是&#xff1a;面试难度和拿 offer 的难度比往年难多了&#xff0c;而且互联网还有较大的裁员风险&#xff0c;网上各种消息不断&#xff0c;有时候真是焦虑到不行。 大家还是要早做准备&#xff0c;多面试积累经验&#xff0c;有些人总想准备…

WebDAV之葫芦儿·派盘+可乐记

可乐记 支持WebDAV方式连接葫芦儿派盘。 推荐一款小巧好用的便签类记事本软件,它能够帮助用户在手机上快捷的记录一些代办事项或者是当做一个日记本来记录心情,小容量设备的福音,它就是可乐记。 可乐记这款软件的界面非常的简单,用户在首页就能看到最近所创建的标签,用…

服务器远程端口怎么修改

服务器远程端口怎么修改 修改Windows系统实例默认远程端口 以Windows Server 2012为例介绍如何修改Windows系统实例默认远程端口。 远程连接进入服务器后修改注册表子项PortNumber的值。 按快捷键 Win&#xff08;Windows 徽标键&#xff09;R&#xff0c;启动运行窗口。输…

机器学习-模型评估与选择(待更新)

本章主要讲解机器学习的基础知识&#xff0c;有关一些专业术语的定义与解释。 文章目录2.1 经验误差与过拟合2.2 评估方法2.2.1 留出法2.2.2 交叉验证法2.2.3 自助法2.2.4 调参与最终模型2.3 性能度量2.3.1 错误率与精度2.3.2 查准率、查全率与F12.3.3 ROC与AUC2.1 经验误差与过…

诊断2F和14,19服务概述

关于2F 关于抑制位 关于14服务 关于19服务 在0x19服务中一般的使用顺序 1\0x19服务01子服务 通过状态掩码去查找与其相匹配的故障个数。 通过该服务诊断仪能够请求ECU中DTC状态与DTC状态掩码相匹配的故障码个数。如果某一个故障码的实际状态位为“1”&#xff0c;并且DTC状…

医院设置模块查询和删除功能的设计与实现

一、医院设置模块需求 医院设置主要是用来保存开通医院的一些基本信息&#xff0c;每个医院一条信息&#xff0c;保存了医院编号&#xff08;平台分配&#xff0c;全局唯一&#xff09;和接口调用相关的签名key等信息&#xff0c;是整个流程的第一步&#xff0c;只有开通了医院…