无线充电智能车的制作
本文素材來源于寧夏大學
作者:白二曹、王瑞、穆琴、王童兵
指導老師:康彩
一、項目簡介
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(); //繼續等待接收下一組信號. } } |
無線充電智能車的詳細資料請參考無線充電智能車
總結
以上是生活随笔為你收集整理的无线充电智能车的制作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机毕业设计之阿里云SpringBoo
- 下一篇: 如何在本地编译器进行油猴脚本的开发