欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 我的移動偵查小車(多圖附程序) [打印本頁]

作者: dagu    時間: 2014-12-27 01:40
標題: 我的移動偵查小車(多圖附程序)
       在猶豫是做飛機還是小車很久以后,終于選擇做一個移動機器人。原因有以下幾點:1,飛機消耗太大。2,飛機空機無法DIY,少了樂趣。3,場地有限。4,和我的專業結合不緊密。5,輪式驅動好控制。
生活少了許多自由的時間,所以擠擠晚上睡覺的時間花了大約3周基本實現了機器人的移動控制,視頻傳輸。在以后會加上機械臂,各種傳感器,如果有可能還會弄弄視覺識別。
之所以說是移動機器人,是因為本身的定位比較高,我不希望用廉價的材料做出一個試驗型的小車。我要做就做實用的,一步到位的。錢倒不是什么問題,每個月的錢就夠買材料的。只是很多機械結構沒有條件自己做,所以只好用成品。興趣是最好的老師,重在過程不在結果。
下面介紹我的車,由于做出來沒多久還有很多不足的地方,下一步就是要換一個更長的地盤,用6輪驅動,換大輪。
下面是基本完成后的小車:


完成了視頻傳輸的小車,平板電腦里面可以看到小車攝像頭拍到的視頻。

下面是各個部件:

1,TP-LINK 路由器  刷固件后用來進行圖傳和數傳。淘寶上價格在150左右,已經刷好了固件。


2,S606高清攝像頭 USB接頭,淘寶價在80左右


3,裝好2自由度舵機云臺的攝像頭


4,裝好的小車底盤。85MM輪,37MM電機,20X15CM底盤。


5,小車底盤和37金屬電機。金屬電機24元一個,輪12元一個。


6,L298電機驅動模塊


7,安裝好電池和保護板及充電電路。


8,九節18650鋰電形成的電池組。3并3串,11.2V


9,控制電路。采用STC89C52單片機。


10,上板前視圖。有四個LED大燈


11,RS232電平轉換模塊


12,整機仰視圖


13,上底板三層積木構架


14,繼電器和限流降壓模塊。



15,整機圖

下面介紹一下小車的基本原理



一,小車的圖傳和數傳原理:
本小車采用開源的無線路由器進行圖傳和數傳。圖傳主要是將攝像頭視頻通過路由器傳輸到上位機上。數傳主要是用上位機軟件進行小車的控制,如行走,轉彎。
關于路由器的固件刷機,參照網址:http://www.wifi-robots.com/
二,小車的下位機控制部分:
本著DIY的目的,采用了51單片機加L298電機驅動。具體采用了STC89C52單片機。具體C源程序在后面,已通過測試。
三,小車的底盤部分:
采用6061鋁,37MM金屬減速電機,85MM輪。采用四輪驅動。
四,小車電源部分:
采用918650鋰電。通過實際運行動力強勁,續航強。電池采用3X3連接,共11V輸出。電源部分設計了充電保護板和輸出保險設計。
五,大燈電路;
采用四個大功率LED,繼電器模塊和限流模塊。
,  設計了對講機電路
七,還未設計紅外避障,超聲波測距等

附51單片機源程序:
  1. #include<reg52.h>

  2. #include<math.h>

  3. #include<intrins.h>

  4. #define uchar unsigned char

  5. #define uint unsigned int

  6. uchar Buffer =0; //從串口接收的數據

  7. uint URTAReceivedCount=0,n=1;

  8. uchar data Tempdatatable[5],CommandDatatable[5];//數據包

  9. uchar serVal[2];
  10. uint pwm[]={1120,1190,1382,1382,1382,1382,1382,1382}; //初始90度,(實際是1382.4,取整得1382)
  11. uchar pwm_flag=0;
  12. uint code ms0_5Con=461; //0.5ms計數 (實際是460.8,取整得461)
  13. uint code ms2_5Con=2304; //2.5ms計數


  14. bit key_stime_ok;
  15. sbit StatusLight=P3^6; //狀態燈
  16. sbit MainLight=P3^7; //主大燈
  17. sbit servo0=P0^0; //舵機控制
  18. sbit servo1=P0^1;
  19. sbit servo2=P0^2;
  20. sbit servo3=P0^3;
  21. sbit servo4=P0^4;
  22. sbit servo5=P0^5;
  23. sbit servo6=P0^6;
  24. sbit servo7=P0^7;
  25. /********************************************************************
  26. * 名稱 : Delay_1ms()
  27. * 功能 : 延時子程序,延時時間為 1ms * x
  28. * 輸入 : x (延時一毫秒的個數)
  29. * 輸出 : 無
  30. ***********************************************************************/
  31. void Delay_1ms(uint i)//1ms延時
  32. {
  33. uchar x,j;
  34. for(j=0;j<i;j++)
  35. for(x=0;x<=148;x++);
  36. }

  37. void TurnOnStatusLight()
  38. {
  39. StatusLight=0;
  40. }
  41. /********************************************************************
  42. * 名稱 : Send_Data()
  43. * 功能 : 向上位機傳送字符
  44. * 輸入 : 無
  45. * 輸出 : 無
  46. ***********************************************************************/
  47. void Send_Data(uchar type,uchar cmd,uchar dat)
  48. {
  49. uchar data Buffer[5];//構建數據包
  50. uchar *p;
  51. uint Send_Count=0;
  52. p = Buffer;
  53. Buffer[0]=0XFF;
  54. Buffer[1]=type;
  55. Buffer[2]=cmd;
  56. Buffer[3]=dat;
  57. Buffer[4]=0XFF;
  58. while(1)
  59. {
  60. if(*p==0XFF)
  61. {
  62. Send_Count++; //0XFF標志統計位
  63. }
  64. SBUF = *p; //發送
  65. while(!TI) //如果發送完畢,硬件會置位TI,等待發送完畢
  66. {
  67. _nop_();
  68. }
  69. p++;
  70. TI = 0;
  71. if(Send_Count == 2) //當統計到兩次出現0XFF,則認為一個數據包發送完畢,跳出循環
  72. {
  73. TI = 0;
  74. break;
  75. }
  76. }
  77. }
  78. /********************************************************************
  79. 協議規定:
  80. 包頭 類型位 數據位 數據位 結束位
  81. 0XFF 0X** OX** 0X** 0XFF
  82. 各命令說明:
  83. 類型位 數據位 數據位 功能

  84. 0X00 0X02 0X00 前進
  85. 0X00 0X01 0X00 后退
  86. 0X00 0X03 0X00 左轉
  87. 0X00 0X04 0X00 右轉
  88. 0X00 0X00 0X00 停止

  89. 0X01 0X01 角度 舵機1
  90. 0X01 0X02 . 舵機2
  91. 0X01 0X01 . 舵機3
  92. 0X01 0X02 . 舵機4
  93. 0X01 0X01 . 舵機5
  94. 0X01 0X02 . 舵機6
  95. 0X01 0X01 . 舵機7
  96. 0X01 0X02 數據 舵機8

  97. 0X02 0X01 車燈亮
  98. 0X02 0X02 車燈滅

  99. 0X03 雷達數據 發送雷達數據
  100. ***********************************************************************/
  101. /********************************************************************
  102. * 名稱 : Com_Int()
  103. * 功能 : 串口中斷子函數
  104. ***********************************************************************/
  105. void Com_Int(void) interrupt 4
  106. {
  107. uchar temp;
  108. ES=0; //關串口中斷
  109. RI=0; //軟件清除接收中斷
  110. temp=SBUF;
  111. if(temp==0XFF && URTAReceivedCount<3)
  112. {
  113. Tempdatatable[0]==0XFF; //包頭
  114. URTAReceivedCount++;
  115. }
  116. else
  117. {
  118. Tempdatatable[n]=temp;
  119. n++;
  120. if(URTAReceivedCount==0&&n==2)
  121. n=1;
  122. }

  123. if(URTAReceivedCount==2)//包尾
  124. {
  125. Tempdatatable[0]=0XFF;
  126. Tempdatatable[4]=0XFF;
  127. n=1;
  128. URTAReceivedCount=0; //組包完畢
  129. temp="";
  130. // Send_Data(Tempdatatable[1],Tempdatatable[2],Tempdatatable[3]); //發送組成的數據包回去
  131. }

  132. CommandDatatable[0]=Tempdatatable[0];
  133. CommandDatatable[1]=Tempdatatable[1];
  134. CommandDatatable[2]=Tempdatatable[2];
  135. CommandDatatable[3]=Tempdatatable[3];
  136. CommandDatatable[4]=Tempdatatable[4];

  137. ES=1;//開串口中斷


  138. }

  139. /********************************************************************
  140. * 名稱 : Com_Init()
  141. * 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中斷
  142. ***********************************************************************/
  143. void Com_Init(void)
  144. {
  145. TMOD = 0x21;
  146. PCON = 0x00;
  147. SCON = 0x50;
  148. TH1 = 0xFd; //設置波特率 9600
  149. TL1 = 0xFd;
  150. TR1 = 1; //啟動定時器1
  151. ES = 1; //開串口中斷
  152. EA = 1; //開總中斷
  153. IT0=0;
  154. EX0=1;
  155. }

  156. /********************************************************************
  157. * 名稱 :Moto_Forward()
  158. * 功能 : 電機1、2啟動,都是前進,整車表現為前進。
  159. ***********************************************************************/
  160. void Moto_Forward()
  161. {
  162. P2= 0x55;
  163. Delay_1ms(100);
  164. }
  165. /********************************************************************
  166. * 名稱 :Moto_Backward()
  167. * 功能 : 電機1、2啟動,都是后退,整車表現為后退。
  168. ***********************************************************************/
  169. void Moto_Backward()
  170. {

  171. P2= 0xaa;
  172. Delay_1ms(100);
  173. }

  174. /********************************************************************
  175. * 名稱 :Moto_TurnLeft()
  176. * 功能 : 電機1后退,電機2前進,整車表現為左轉。
  177. ***********************************************************************/
  178. void Moto_TurnLeft()
  179. {
  180. P2= 0x69;
  181. Delay_1ms(100);
  182. }
  183. /********************************************************************
  184. * 名稱 :Moto_TurnRight()
  185. * 功能 : 電機1前進,電機2后退,整車表現為右轉。
  186. ***********************************************************************/
  187. void Moto_TurnRight()
  188. {
  189. P2= 0x96;
  190. Delay_1ms(100);
  191. }
  192. /********************************************************************
  193. * 名稱 :Moto_Stop()
  194. * 功能 : 電機1停止,電機2停止,整車表現為停止。
  195. ***********************************************************************/
  196. void Moto_Stop()
  197. {

  198. P2= 0x00;
  199. Delay_1ms(100);
  200. }
  201. /********************************************************************
  202. * 功能 : 舵機PWM中斷初始化
  203. ***********************************************************************/
  204. void Timer0Init()
  205. {
  206. /*0度=0.5ms, 45度=1ms, 90度=1.5ms, 135度=2ms, 180度=2.5ms
  207. /.5 ms初始值 F700, (12n/11059200=2.5/1000, n=2304, X=65536-2304=63232 > F700)*/
  208. TMOD |= 0x01; //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響
  209. TH0=-ms2_5Con>>8; //給定初值,17ms中斷
  210. TL0=-ms2_5Con;
  211. EA=1; //總中斷打開
  212. ET0=1; //定時器0中斷打開
  213. TR0=1; //定時器0開關打開
  214. }
  215. /********************************************************************
  216. * 功能 : 舵機PWM中斷, //舵機控制函數 周期為20ms 一個循環20MS = 8*2.5ms
  217. ***********************************************************************/
  218. void SteeringGear() interrupt 1
  219. {
  220. switch(pwm_flag)
  221. {
  222. case 1: servo0=1; TH0=-pwm[0]>>8; TL0=-pwm[0]; break;
  223. case 2: servo0=0; TH0=-(ms2_5Con-pwm[0])>>8; TL0=-(ms2_5Con-pwm[0]); break;
  224. case 3: servo1=1; TH0=-pwm[1]>>8; TL0=-pwm[1]; break;
  225. case 4: servo1=0; TH0=-(ms2_5Con-pwm[1])>>8; TL0=-(ms2_5Con-pwm[1]); break;
  226. case 5: servo2=1; TH0=-pwm[2]>>8; TL0=-pwm[2]; break;
  227. case 6: servo2=0; TH0=-(ms2_5Con-pwm[2])>>8; TL0=-(ms2_5Con-pwm[2]); break;
  228. case 7: servo3=1; TH0=-pwm[3]>>8; TL0=-pwm[3]; break;
  229. case 8: servo3=0; TH0=-(ms2_5Con-pwm[3])>>8; TL0=-(ms2_5Con-pwm[3]); break;
  230. case 9: servo4=1; TH0=-pwm[4]>>8; TL0=-pwm[4]; break;
  231. case 10: servo4=0; TH0=-(ms2_5Con-pwm[4])>>8; TL0=-(ms2_5Con-pwm[4]); break;
  232. case 11: servo5=1; TH0=-pwm[5]>>8; TL0=-pwm[5]; break;
  233. case 12: servo5=0; TH0=-(ms2_5Con-pwm[5])>>8; TL0=-(ms2_5Con-pwm[5]); break;
  234. case 13: servo6=1;TH0=-pwm[6]>>8; TL0=-pwm[6]; break;
  235. case 14: servo6=0;TH0=-(ms2_5Con-pwm[6])>>8; TL0=-(ms2_5Con-pwm[6]); break;
  236. case 15: servo7=1;TH0=-pwm[7]>>8; TL0=-pwm[7]; break;
  237. case 16: servo7=0;TH0=-(ms2_5Con-pwm[7])>>8; TL0=-(ms2_5Con-pwm[7]); break;
  238. default: TH0=0xff; TL0=0x80; pwm_flag=0;
  239. }
  240. pwm_flag++;
  241. }

  242. void SetSteeringGear(uchar i, uchar val)
  243. {
  244. uint a = (val+46)*10;
  245. if(a<ms0_5Con)
  246. a=ms0_5Con;
  247. if(a>ms2_5Con)
  248. a=ms2_5Con;
  249. pwm[ i]=a;
  250. CommandDatatable[2]=0xff; //清除緩存
  251. }

  252. /********************************************************************
  253. * 功能 : 串口中斷接收數據
  254. ***********************************************************************/
  255. /*********************************************************************************
  256. ** 函數功能 : 主函數
  257. *********************************************************************************/
  258. void main()
  259. {
  260. MainLight=0;
  261. Delay_1ms(200);
  262. Com_Init();//串口初始化
  263. Timer0Init();//舵機PWM中斷初始化
  264. while(1)
  265. {
  266. if(CommandDatatable[0]==0XFF && CommandDatatable[4]==0XFF)
  267. {
  268. switch (CommandDatatable[1]) //根據鍵值不同,執行不同的內容
  269. {
  270. case 0X00: //類型位0X00,表明是控制數據包,進入控制數據case
  271. switch(CommandDatatable[2]) //根據數據位的值來進行選擇執行不同的動作
  272. {
  273. case 0X00:Moto_Stop();break;
  274. case 0X01:Moto_Forward();break;
  275. case 0X02:Moto_Backward();break;
  276. case 0X03:Moto_TurnLeft();break;
  277. case 0X04:Moto_TurnRight();break;
  278. default : break;
  279. }
  280. break;
  281. case 0X01: //類型位0X01,表明是舵機數據包,進入舵機case
  282. switch(CommandDatatable[2])
  283. {
  284. case 0x01:SetSteeringGear(0,CommandDatatable[3]);break;
  285. case 0x02:SetSteeringGear(1,CommandDatatable[3]);break;
  286. case 0x03:SetSteeringGear(2,CommandDatatable[3]);break;
  287. case 0x04:SetSteeringGear(3,CommandDatatable[3]);break;
  288. case 0x05:SetSteeringGear(4,CommandDatatable[3]);break;
  289. case 0x06:SetSteeringGear(5,CommandDatatable[3]);break;
  290. case 0x07:SetSteeringGear(6,CommandDatatable[3]);break;
  291. case 0x08:SetSteeringGear(7,CommandDatatable[3]);break;
  292. default : break;
  293. }
  294. break;
  295. case 0X02: //類型位0X02,表明是大燈數據包,進入大燈case
  296. switch(CommandDatatable[2])
  297. {
  298. case 0X01:MainLight=1;break;
  299. case 0X02:MainLight=0;break;
  300. default : break;
  301. }
  302. break;
  303. default : break;
  304. }
  305. }
  306. }
  307. }
復制代碼




作者: lingshi1029    時間: 2015-1-22 11:12
厲害!!!!!
作者: meilidianzhi    時間: 2015-2-14 19:18
樓主能發個電路圖吧
minmin_6666@163.com
作者: 破力達    時間: 2015-2-16 11:21
這個我喜歡,頂一個
作者: 202305415    時間: 2015-3-1 22:23
看樣子很性  不錯
作者: kvlhn    時間: 2015-3-14 10:52
動力十足
作者: wangkuli    時間: 2015-4-19 13:29
牛  厲害
作者: yuxin    時間: 2015-4-21 10:35
牛逼!!!!!!!
作者: yuxin    時間: 2015-4-21 10:36
牛逼,希望我也能做出
作者: 心宇(語)    時間: 2015-4-22 22:28
學習一下,謝謝!
作者: 好男人就是我    時間: 2015-4-23 14:32
感謝分享~!!!
作者: yesonjob    時間: 2015-4-23 17:34
大神~
我的目標也是自己制作一個大型點的小車。
作者: deka    時間: 2015-6-14 09:31
厲害  高手
作者: rich3524    時間: 2015-7-13 10:13
厲害  高手
作者: yxfx    時間: 2015-7-16 06:15
這才是真正的高手,學習中
作者: 騰飛的龍    時間: 2015-8-3 19:47
這只是下位機程序,上位機的APP呢?求解謝謝。
作者: 人生過客    時間: 2015-8-5 15:39
攝像頭還是大了點
作者: 騰飛的龍    時間: 2015-8-6 14:12
yesonjob 發表于 2015-4-23 17:34
大神~
我的目標也是自己制作一個大型點的小車。

這是我做的載人小車

IMG_20150326_180402.jpg (664.49 KB, 下載次數: 232)

我做的載人小車

我做的載人小車

作者: 李文軍    時間: 2015-8-8 09:24
喜歡這些
作者: 騎著蝸牛游世界    時間: 2016-4-16 23:29
在這居然能碰到校友
作者: lxa0    時間: 2016-8-7 02:41
騰飛的龍 發表于 2015-8-6 14:12
這是我做的載人小車

求更多載人小車的資料~~~~~~~~~~~~~~謝謝!
作者: sax_yang    時間: 2016-11-8 08:23
樓主厲害,追求完全DIY!和樓主探討一下,那就是用模型用的鋰電換下那個18650組成的電池組是否可行,體積可以減小不少,而且各種放電倍率可以根據需要來選擇,而且充電口也是標準的,可以很方便的使用充電器進行平衡充放電。
作者: gww19940326    時間: 2016-11-15 17:16
不錯不錯
作者: qjyjack612510    時間: 2017-3-21 23:07
非常NB。。。。學習了
作者: cathy221    時間: 2017-3-23 16:17
很好的創意頂起!

作者: samking    時間: 2017-5-18 02:26
mark一下~
作者: 我一歲    時間: 2017-6-12 18:38
能具體說一下攝像頭部分嗎 萬分感謝 QQ1275171943
作者: 906875672    時間: 2017-9-22 10:40
能不能請教一下啊,51單片機處理視頻數據速度跟的上嗎




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1